From 8211849b72cbab705ca5cc11b9f0233cbff307df Mon Sep 17 00:00:00 2001 From: Relintai Date: Mon, 13 Dec 2021 13:59:39 +0100 Subject: [PATCH] Added mat_maker_gd, and the textures from broken seals. --- game/addons/.gitignore | 4 +- game/addons/mat_maker_gd/LICENSE.md | 22 + game/addons/mat_maker_gd/README.md | 22 + .../mat_maker_gd/editor/CreateNamePopup.gd | 65 + .../mat_maker_gd/editor/CreateNamePopup.tscn | 61 + .../mat_maker_gd/editor/MatMakerGDEditor.gd | 148 + .../mat_maker_gd/editor/MatMakerGDEditor.tscn | 55 + .../mat_maker_gd/editor/mm_graph_node.gd | 607 +++ game/addons/mat_maker_gd/icons/custom.png | Bin 0 -> 549 bytes .../mat_maker_gd/icons/custom.png.import | 35 + game/addons/mat_maker_gd/icons/down.tres | 8 + game/addons/mat_maker_gd/icons/edit.tres | 8 + game/addons/mat_maker_gd/icons/godot_logo.svg | 1 + .../mat_maker_gd/icons/godot_logo.svg.import | 35 + game/addons/mat_maker_gd/icons/icons.svg | 3522 +++++++++++++ .../mat_maker_gd/icons/icons.svg.import | 35 + game/addons/mat_maker_gd/icons/icons.tres | 30 + game/addons/mat_maker_gd/icons/link.tres | 8 + game/addons/mat_maker_gd/icons/minimize.tres | 8 + .../mat_maker_gd/icons/output_preview.tres | 8 + .../mat_maker_gd/icons/port_group_0.tres | 8 + .../mat_maker_gd/icons/port_group_1.tres | 8 + .../mat_maker_gd/icons/port_group_2.tres | 8 + .../mat_maker_gd/icons/port_group_3.tres | 8 + .../mat_maker_gd/icons/randomness_locked.tres | 8 + .../icons/randomness_unlocked.tres | 8 + game/addons/mat_maker_gd/icons/remove.tres | 8 + game/addons/mat_maker_gd/icons/up.tres | 8 + game/addons/mat_maker_gd/new_resource.tres | 652 +++ .../mat_maker_gd/nodes/bases/curve_base.gd | 118 + .../mat_maker_gd/nodes/bases/gradient_base.gd | 64 + .../mat_maker_gd/nodes/bases/polygon_base.gd | 73 + game/addons/mat_maker_gd/nodes/common/blur.gd | 1172 +++++ .../mat_maker_gd/nodes/common/commons.gd | 393 ++ .../mat_maker_gd/nodes/common/curves.gd | 85 + .../mat_maker_gd/nodes/common/dilate.gd | 521 ++ .../mat_maker_gd/nodes/common/edge_detect.gd | 223 + .../addons/mat_maker_gd/nodes/common/fills.gd | 559 +++ .../mat_maker_gd/nodes/common/filter.gd | 4442 +++++++++++++++++ .../mat_maker_gd/nodes/common/gradients.gd | 225 + game/addons/mat_maker_gd/nodes/common/mwf.gd | 705 +++ .../mat_maker_gd/nodes/common/noise_fbm.gd | 691 +++ .../mat_maker_gd/nodes/common/noise_perlin.gd | 157 + .../nodes/common/noise_voronoi.gd | 141 + .../mat_maker_gd/nodes/common/noises.gd | 122 + .../mat_maker_gd/nodes/common/patterns.gd | 1170 +++++ .../addons/mat_maker_gd/nodes/common/sdf2d.gd | 2451 +++++++++ .../addons/mat_maker_gd/nodes/common/sdf3d.gd | 789 +++ .../mat_maker_gd/nodes/common/shapes.gd | 292 ++ .../mat_maker_gd/nodes/common/simple.gd | 147 + .../addons/mat_maker_gd/nodes/common/tex3d.gd | 979 ++++ game/addons/mat_maker_gd/nodes/common/tile.gd | 707 +++ .../mat_maker_gd/nodes/common/transforms.gd | 1765 +++++++ .../mat_maker_gd/nodes/filter/adjust_hsv.gd | 75 + .../addons/mat_maker_gd/nodes/filter/blend.gd | 125 + .../nodes/filter/blur_gaussian.gd | 220 + .../nodes/filter/brightness_contrast.gd | 64 + .../mat_maker_gd/nodes/filter/colorize.gd | 55 + .../mat_maker_gd/nodes/filter/combine.gd | 78 + .../mat_maker_gd/nodes/filter/decompose.gd | 104 + .../mat_maker_gd/nodes/filter/emboss.gd | 112 + .../mat_maker_gd/nodes/filter/fill_channel.gd | 72 + .../nodes/filter/fill_to_color.gd | 70 + .../nodes/filter/fill_to_position.gd | 68 + .../nodes/filter/fill_to_random_color.gd | 61 + .../nodes/filter/fill_to_random_grey.gd | 60 + .../mat_maker_gd/nodes/filter/fill_to_size.gd | 70 + .../mat_maker_gd/nodes/filter/fill_to_uv.gd | 62 + .../mat_maker_gd/nodes/filter/greyscale.gd | 66 + .../mat_maker_gd/nodes/filter/invert.gd | 42 + .../nodes/filter/make_tileable.gd | 78 + game/addons/mat_maker_gd/nodes/filter/math.gd | 151 + .../mat_maker_gd/nodes/filter/quantize.gd | 56 + .../nodes/filter/swap_channels.gd | 111 + .../mat_maker_gd/nodes/filter/tonality.gd | 50 + .../nodes/gradient/circular_gradient.gd | 60 + .../mat_maker_gd/nodes/gradient/gradient.gd | 68 + .../nodes/gradient/radial_gradient.gd | 60 + game/addons/mat_maker_gd/nodes/mm_material.gd | 119 + game/addons/mat_maker_gd/nodes/mm_node.gd | 121 + .../nodes/mm_node_universal_property.gd | 316 ++ .../nodes/noise/anisotropic_noise.gd | 60 + .../mat_maker_gd/nodes/noise/color_noise.gd | 52 + .../mat_maker_gd/nodes/noise/color_value.gd | 60 + .../mat_maker_gd/nodes/noise/fbm_noise.gd | 99 + game/addons/mat_maker_gd/nodes/noise/noise.gd | 52 + .../mat_maker_gd/nodes/noise/voronoi.gd | 163 + .../mat_maker_gd/nodes/other/output_image.gd | 45 + .../mat_maker_gd/nodes/pattern/beehive.gd | 113 + .../mat_maker_gd/nodes/pattern/bricks.gd | 288 ++ .../mat_maker_gd/nodes/pattern/iching.gd | 40 + .../mat_maker_gd/nodes/pattern/pattern.gd | 72 + .../mat_maker_gd/nodes/pattern/runes.gd | 40 + .../mat_maker_gd/nodes/pattern/scratches.gd | 82 + .../mat_maker_gd/nodes/pattern/sine_wave.gd | 61 + .../mat_maker_gd/nodes/pattern/truchet.gd | 53 + .../mat_maker_gd/nodes/pattern/weave.gd | 134 + .../nodes/sdf2d/sd_op_annular_shape.gd | 53 + .../mat_maker_gd/nodes/sdf2d/sd_op_bool.gd | 76 + .../nodes/sdf2d/sd_op_circle_repeat.gd | 43 + .../mat_maker_gd/nodes/sdf2d/sd_op_morph.gd | 69 + .../mat_maker_gd/nodes/sdf2d/sd_op_repeat.gd | 68 + .../nodes/sdf2d/sd_op_rounded_shape.gd | 42 + .../nodes/sdf2d/sd_op_smooth_bool.gd | 88 + .../mat_maker_gd/nodes/sdf2d/sd_shape_arc.gd | 61 + .../mat_maker_gd/nodes/sdf2d/sd_shape_box.gd | 49 + .../nodes/sdf2d/sd_shape_circle.gd | 49 + .../mat_maker_gd/nodes/sdf2d/sd_shape_line.gd | 74 + .../nodes/sdf2d/sd_shape_polygon.gd | 29 + .../nodes/sdf2d/sd_shape_rhombus.gd | 49 + .../mat_maker_gd/nodes/sdf2d/sd_show.gd | 67 + .../mat_maker_gd/nodes/sdf2d/sd_tf_rotate.gd | 41 + .../mat_maker_gd/nodes/sdf2d/sd_tf_scale.gd | 41 + .../nodes/sdf2d/sd_tf_translate.gd | 38 + .../mat_maker_gd/nodes/sdf3d/sdf3d_color.gd | 59 + .../mat_maker_gd/nodes/sdf3d/sdf3d_op_bool.gd | 79 + .../nodes/sdf3d/sdf3d_op_circle_repeat.gd | 59 + .../nodes/sdf3d/sdf3d_op_elongation.gd | 59 + .../nodes/sdf3d/sdf3d_op_extrusion.gd | 63 + .../nodes/sdf3d/sdf3d_op_morph.gd | 74 + .../nodes/sdf3d/sdf3d_op_repeat.gd | 71 + .../nodes/sdf3d/sdf3d_op_revolution.gd | 60 + .../nodes/sdf3d/sdf3d_op_rounded.gd | 61 + .../nodes/sdf3d/sdf3d_op_smooth_bool.gd | 91 + .../mat_maker_gd/nodes/sdf3d/sdf3d_render.gd | 179 + .../nodes/sdf3d/sdf3d_shape_box.gd | 49 + .../nodes/sdf3d/sdf3d_shape_capsule.gd | 111 + .../nodes/sdf3d/sdf3d_shape_cone.gd | 63 + .../nodes/sdf3d/sdf3d_shape_cylinder.gd | 68 + .../nodes/sdf3d/sdf3d_shape_sphere.gd | 37 + .../nodes/sdf3d/sdf3d_shape_torus.gd | 68 + .../nodes/sdf3d/sdf3d_tf_rotate.gd | 57 + .../nodes/sdf3d/sdf3d_tf_scale.gd | 56 + .../nodes/sdf3d/sdf3d_tf_translate.gd | 56 + .../addons/mat_maker_gd/nodes/simple/curve.gd | 118 + .../addons/mat_maker_gd/nodes/simple/image.gd | 41 + .../addons/mat_maker_gd/nodes/simple/shape.gd | 101 + .../nodes/transform/circle_map.gd | 70 + .../nodes/transform/color_tiler.gd | 305 ++ .../nodes/transform/kaleidoscope.gd | 63 + .../mat_maker_gd/nodes/transform/mirror.gd | 69 + .../mat_maker_gd/nodes/transform/repeat.gd | 27 + .../mat_maker_gd/nodes/transform/rotate.gd | 63 + .../mat_maker_gd/nodes/transform/scale.gd | 63 + .../mat_maker_gd/nodes/transform/shear.gd | 79 + .../mat_maker_gd/nodes/transform/tiler.gd | 306 ++ .../mat_maker_gd/nodes/transform/transform.gd | 132 + .../mat_maker_gd/nodes/transform/translate.gd | 51 + .../nodes/uniform/greyscale_uniform.gd | 25 + .../mat_maker_gd/nodes/uniform/uniform.gd | 20 + game/addons/mat_maker_gd/plugin.cfg | 7 + game/addons/mat_maker_gd/plugin.gd | 66 + .../color_picker_button.gd | 16 + .../color_picker_popup.tscn | 14 + .../widgets/curve_edit/control_point.gd | 70 + .../widgets/curve_edit/control_point.tscn | 39 + .../widgets/curve_edit/curve_dialog.gd | 37 + .../widgets/curve_edit/curve_dialog.tscn | 81 + .../widgets/curve_edit/curve_edit.gd | 24 + .../widgets/curve_edit/curve_edit.tscn | 22 + .../widgets/curve_edit/curve_editor.gd | 80 + .../widgets/curve_edit/curve_editor.tscn | 13 + .../widgets/curve_edit/curve_view.gd | 70 + .../widgets/curve_edit/curve_view.tscn | 16 + .../widgets/curve_edit/slope_point.gd | 49 + .../widgets/float_edit/float_edit.gd | 139 + .../widgets/float_edit/float_edit.tscn | 46 + .../gradient_editor/gradient_editor.gd | 223 + .../gradient_editor/gradient_editor.tscn | 96 + .../widgets/gradient_editor/gradient_popup.gd | 13 + .../gradient_editor/gradient_popup.tscn | 31 + .../image_picker_button.gd | 46 + .../image_picker_button.tscn | 20 + .../widgets/polygon_edit/control_point.gd | 33 + .../widgets/polygon_edit/control_point.tscn | 15 + .../widgets/polygon_edit/polygon_dialog.gd | 46 + .../widgets/polygon_edit/polygon_dialog.tscn | 81 + .../widgets/polygon_edit/polygon_edit.gd | 34 + .../widgets/polygon_edit/polygon_edit.tscn | 26 + .../widgets/polygon_edit/polygon_editor.gd | 57 + .../widgets/polygon_edit/polygon_editor.tscn | 14 + .../widgets/polygon_edit/polygon_view.gd | 58 + .../widgets/polygon_edit/polygon_view.tscn | 12 + .../windows/file_dialog/fav_button.tscn | 17 + .../windows/file_dialog/file_dialog.gd | 57 + .../windows/file_dialog/file_dialog.tscn | 15 + .../windows/file_dialog/left_panel.gd | 71 + .../windows/file_dialog/left_panel.tscn | 48 + game/modules/planets/textures/dirt.tres | 470 ++ game/modules/planets/textures/dirt_albedo.png | Bin 0 -> 114890 bytes .../planets/textures/dirt_albedo.png.import | 35 + game/modules/planets/textures/grass.tres | 289 ++ .../modules/planets/textures/grass_albedo.png | Bin 0 -> 86150 bytes .../planets/textures/grass_albedo.png.import | 35 + .../modules/planets/textures/grass_mossy.tres | 288 ++ .../planets/textures/grass_mossy_albedo.png | Bin 0 -> 85694 bytes .../textures/grass_mossy_albedo.png.import | 35 + game/modules/planets/textures/stone_1.tres | 198 + .../planets/textures/stone_1_albedo.png | Bin 0 -> 86784 bytes .../textures/stone_1_albedo.png.import | 35 + .../planets/textures/stone_dungeon_1.tres | 264 + .../textures/stone_dungeon_1_albedo.png | Bin 0 -> 33976 bytes .../stone_dungeon_1_albedo.png.import | 35 + game/modules/planets/textures/test.png.import | 34 + game/modules/planets/textures/test_brick.tres | 326 ++ .../planets/textures/test_brick_albedo.png | Bin 0 -> 85566 bytes .../textures/test_brick_albedo.png.import | 35 + game/project.godot | 20 +- 208 files changed, 35186 insertions(+), 2 deletions(-) create mode 100644 game/addons/mat_maker_gd/LICENSE.md create mode 100644 game/addons/mat_maker_gd/README.md create mode 100644 game/addons/mat_maker_gd/editor/CreateNamePopup.gd create mode 100644 game/addons/mat_maker_gd/editor/CreateNamePopup.tscn create mode 100644 game/addons/mat_maker_gd/editor/MatMakerGDEditor.gd create mode 100644 game/addons/mat_maker_gd/editor/MatMakerGDEditor.tscn create mode 100644 game/addons/mat_maker_gd/editor/mm_graph_node.gd create mode 100644 game/addons/mat_maker_gd/icons/custom.png create mode 100644 game/addons/mat_maker_gd/icons/custom.png.import create mode 100644 game/addons/mat_maker_gd/icons/down.tres create mode 100644 game/addons/mat_maker_gd/icons/edit.tres create mode 100644 game/addons/mat_maker_gd/icons/godot_logo.svg create mode 100644 game/addons/mat_maker_gd/icons/godot_logo.svg.import create mode 100644 game/addons/mat_maker_gd/icons/icons.svg create mode 100644 game/addons/mat_maker_gd/icons/icons.svg.import create mode 100644 game/addons/mat_maker_gd/icons/icons.tres create mode 100644 game/addons/mat_maker_gd/icons/link.tres create mode 100644 game/addons/mat_maker_gd/icons/minimize.tres create mode 100644 game/addons/mat_maker_gd/icons/output_preview.tres create mode 100644 game/addons/mat_maker_gd/icons/port_group_0.tres create mode 100644 game/addons/mat_maker_gd/icons/port_group_1.tres create mode 100644 game/addons/mat_maker_gd/icons/port_group_2.tres create mode 100644 game/addons/mat_maker_gd/icons/port_group_3.tres create mode 100644 game/addons/mat_maker_gd/icons/randomness_locked.tres create mode 100644 game/addons/mat_maker_gd/icons/randomness_unlocked.tres create mode 100644 game/addons/mat_maker_gd/icons/remove.tres create mode 100644 game/addons/mat_maker_gd/icons/up.tres create mode 100644 game/addons/mat_maker_gd/new_resource.tres create mode 100644 game/addons/mat_maker_gd/nodes/bases/curve_base.gd create mode 100644 game/addons/mat_maker_gd/nodes/bases/gradient_base.gd create mode 100644 game/addons/mat_maker_gd/nodes/bases/polygon_base.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/blur.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/commons.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/curves.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/dilate.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/edge_detect.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/fills.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/filter.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/gradients.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/mwf.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/noise_fbm.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/noise_perlin.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/noise_voronoi.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/noises.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/patterns.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/sdf2d.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/sdf3d.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/shapes.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/simple.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/tex3d.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/tile.gd create mode 100644 game/addons/mat_maker_gd/nodes/common/transforms.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/adjust_hsv.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/blend.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/blur_gaussian.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/brightness_contrast.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/colorize.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/combine.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/decompose.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/emboss.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/fill_channel.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/fill_to_color.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/fill_to_position.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/fill_to_random_color.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/fill_to_random_grey.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/fill_to_size.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/fill_to_uv.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/greyscale.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/invert.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/make_tileable.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/math.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/quantize.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/swap_channels.gd create mode 100644 game/addons/mat_maker_gd/nodes/filter/tonality.gd create mode 100644 game/addons/mat_maker_gd/nodes/gradient/circular_gradient.gd create mode 100644 game/addons/mat_maker_gd/nodes/gradient/gradient.gd create mode 100644 game/addons/mat_maker_gd/nodes/gradient/radial_gradient.gd create mode 100644 game/addons/mat_maker_gd/nodes/mm_material.gd create mode 100644 game/addons/mat_maker_gd/nodes/mm_node.gd create mode 100644 game/addons/mat_maker_gd/nodes/mm_node_universal_property.gd create mode 100644 game/addons/mat_maker_gd/nodes/noise/anisotropic_noise.gd create mode 100644 game/addons/mat_maker_gd/nodes/noise/color_noise.gd create mode 100644 game/addons/mat_maker_gd/nodes/noise/color_value.gd create mode 100644 game/addons/mat_maker_gd/nodes/noise/fbm_noise.gd create mode 100644 game/addons/mat_maker_gd/nodes/noise/noise.gd create mode 100644 game/addons/mat_maker_gd/nodes/noise/voronoi.gd create mode 100644 game/addons/mat_maker_gd/nodes/other/output_image.gd create mode 100644 game/addons/mat_maker_gd/nodes/pattern/beehive.gd create mode 100644 game/addons/mat_maker_gd/nodes/pattern/bricks.gd create mode 100644 game/addons/mat_maker_gd/nodes/pattern/iching.gd create mode 100644 game/addons/mat_maker_gd/nodes/pattern/pattern.gd create mode 100644 game/addons/mat_maker_gd/nodes/pattern/runes.gd create mode 100644 game/addons/mat_maker_gd/nodes/pattern/scratches.gd create mode 100644 game/addons/mat_maker_gd/nodes/pattern/sine_wave.gd create mode 100644 game/addons/mat_maker_gd/nodes/pattern/truchet.gd create mode 100644 game/addons/mat_maker_gd/nodes/pattern/weave.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_op_annular_shape.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_op_bool.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_op_circle_repeat.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_op_morph.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_op_repeat.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_op_rounded_shape.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_op_smooth_bool.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_arc.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_box.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_circle.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_line.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_polygon.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_rhombus.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_show.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_rotate.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_scale.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_translate.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_color.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_bool.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_circle_repeat.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_elongation.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_extrusion.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_morph.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_repeat.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_revolution.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_rounded.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_smooth_bool.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_render.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_box.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_capsule.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cone.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cylinder.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_sphere.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_torus.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_rotate.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_scale.gd create mode 100644 game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_translate.gd create mode 100644 game/addons/mat_maker_gd/nodes/simple/curve.gd create mode 100644 game/addons/mat_maker_gd/nodes/simple/image.gd create mode 100644 game/addons/mat_maker_gd/nodes/simple/shape.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/circle_map.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/color_tiler.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/kaleidoscope.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/mirror.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/repeat.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/rotate.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/scale.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/shear.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/tiler.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/transform.gd create mode 100644 game/addons/mat_maker_gd/nodes/transform/translate.gd create mode 100644 game/addons/mat_maker_gd/nodes/uniform/greyscale_uniform.gd create mode 100644 game/addons/mat_maker_gd/nodes/uniform/uniform.gd create mode 100644 game/addons/mat_maker_gd/plugin.cfg create mode 100644 game/addons/mat_maker_gd/plugin.gd create mode 100644 game/addons/mat_maker_gd/widgets/color_picker_button/color_picker_button.gd create mode 100644 game/addons/mat_maker_gd/widgets/color_picker_popup/color_picker_popup.tscn create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/control_point.gd create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/control_point.tscn create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.gd create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.tscn create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.gd create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.gd create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.tscn create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/curve_view.gd create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn create mode 100644 game/addons/mat_maker_gd/widgets/curve_edit/slope_point.gd create mode 100644 game/addons/mat_maker_gd/widgets/float_edit/float_edit.gd create mode 100644 game/addons/mat_maker_gd/widgets/float_edit/float_edit.tscn create mode 100644 game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.gd create mode 100644 game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn create mode 100644 game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.gd create mode 100644 game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.tscn create mode 100644 game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.gd create mode 100644 game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.tscn create mode 100644 game/addons/mat_maker_gd/widgets/polygon_edit/control_point.gd create mode 100644 game/addons/mat_maker_gd/widgets/polygon_edit/control_point.tscn create mode 100644 game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.gd create mode 100644 game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.tscn create mode 100644 game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.gd create mode 100644 game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn create mode 100644 game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.gd create mode 100644 game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.tscn create mode 100644 game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd create mode 100644 game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.tscn create mode 100644 game/addons/mat_maker_gd/windows/file_dialog/fav_button.tscn create mode 100644 game/addons/mat_maker_gd/windows/file_dialog/file_dialog.gd create mode 100644 game/addons/mat_maker_gd/windows/file_dialog/file_dialog.tscn create mode 100644 game/addons/mat_maker_gd/windows/file_dialog/left_panel.gd create mode 100644 game/addons/mat_maker_gd/windows/file_dialog/left_panel.tscn create mode 100644 game/modules/planets/textures/dirt.tres create mode 100644 game/modules/planets/textures/dirt_albedo.png create mode 100644 game/modules/planets/textures/dirt_albedo.png.import create mode 100644 game/modules/planets/textures/grass.tres create mode 100644 game/modules/planets/textures/grass_albedo.png create mode 100644 game/modules/planets/textures/grass_albedo.png.import create mode 100644 game/modules/planets/textures/grass_mossy.tres create mode 100644 game/modules/planets/textures/grass_mossy_albedo.png create mode 100644 game/modules/planets/textures/grass_mossy_albedo.png.import create mode 100644 game/modules/planets/textures/stone_1.tres create mode 100644 game/modules/planets/textures/stone_1_albedo.png create mode 100644 game/modules/planets/textures/stone_1_albedo.png.import create mode 100644 game/modules/planets/textures/stone_dungeon_1.tres create mode 100644 game/modules/planets/textures/stone_dungeon_1_albedo.png create mode 100644 game/modules/planets/textures/stone_dungeon_1_albedo.png.import create mode 100644 game/modules/planets/textures/test.png.import create mode 100644 game/modules/planets/textures/test_brick.tres create mode 100644 game/modules/planets/textures/test_brick_albedo.png create mode 100644 game/modules/planets/textures/test_brick_albedo.png.import diff --git a/game/addons/.gitignore b/game/addons/.gitignore index 9a1be21..19e2f10 100644 --- a/game/addons/.gitignore +++ b/game/addons/.gitignore @@ -2,4 +2,6 @@ !module_manager !module_manager/** !Godoxel -!Godoxel/** \ No newline at end of file +!Godoxel/** +!mat_maker_gd +!mat_maker_gd/** \ No newline at end of file diff --git a/game/addons/mat_maker_gd/LICENSE.md b/game/addons/mat_maker_gd/LICENSE.md new file mode 100644 index 0000000..ca6aeaf --- /dev/null +++ b/game/addons/mat_maker_gd/LICENSE.md @@ -0,0 +1,22 @@ +# MIT License + +Copyright (c) 2020 Péter Magyar +Copyright (c) 2018-2020 Rodolphe Suescun and contributors + +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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/game/addons/mat_maker_gd/README.md b/game/addons/mat_maker_gd/README.md new file mode 100644 index 0000000..f5f42f6 --- /dev/null +++ b/game/addons/mat_maker_gd/README.md @@ -0,0 +1,22 @@ +# mat_maker_gd + +My goal with this project is to take Material Maker's ( https://github.com/RodZill4/material-maker ) code, +and make it an in-godot texture/image generator. + +If it turns out well I'll probably turn it into a c++ engine module eventually. + +Multi threading uses my threadpool engine module for now. + +## Status: + +Missing ~ 60 nodes from ~ 195. + +## TODOS + +- [ ] Go through the current MaterialMaker and add the code from all the new nodes. +- [ ] Go through the current MaterialMaker and update any old code. +- [ ] Add note to all files that has code from MaterialMaker. +- [ ] Proper readme.md. +- [ ] Per node seed like in the original. +- [ ] Port all the nodes. Missing ~ 60 from ~ 195 +- [ ] Somehow get ctrl-s to always just save the edited material, instead of having to double click it (for the inspector to update), and then clicking the save icon and selecting save. diff --git a/game/addons/mat_maker_gd/editor/CreateNamePopup.gd b/game/addons/mat_maker_gd/editor/CreateNamePopup.gd new file mode 100644 index 0000000..c014226 --- /dev/null +++ b/game/addons/mat_maker_gd/editor/CreateNamePopup.gd @@ -0,0 +1,65 @@ +tool +extends ConfirmationDialog + +signal ok_pressed + +export(NodePath) var line_edit_path : NodePath +export(NodePath) var tree_path : NodePath + +export(PoolStringArray) var type_folders : PoolStringArray + +var _resource_type : String = "MMNode" + +var _line_edit : LineEdit +var _tree : Tree + +func _ready(): + _line_edit = get_node(line_edit_path) as LineEdit + _tree = get_node(tree_path) as Tree + + connect("confirmed", self, "_on_OK_pressed") + connect("about_to_show", self, "about_to_show") + +func set_resource_type(resource_type : String) -> void: + _resource_type = resource_type + +func about_to_show(): + _tree.clear() + + var root : TreeItem = _tree.create_item() + + for s in type_folders: + evaluate_folder(s, root) + +func evaluate_folder(folder : String, root : TreeItem) -> void: + var ti : TreeItem = _tree.create_item(root) + ti.set_text(0, folder.substr(folder.find_last("/") + 1)) + + var dir = Directory.new() + if dir.open(folder) == OK: + dir.list_dir_begin() + var file_name = dir.get_next() + while file_name != "": + if !dir.current_is_dir(): + print("Found file: " + file_name) + var e : TreeItem = _tree.create_item(ti) + + e.set_text(0, file_name.get_file()) + e.set_meta("file", folder + "/" + file_name) + + file_name = dir.get_next() + else: + print("An error occurred when trying to access the path.") + +func _on_OK_pressed(): + var selected : TreeItem = _tree.get_selected() + + if selected: + if !selected.has_meta("file"): + hide() + return + + var file_name : String = selected.get_meta("file") + emit_signal("ok_pressed", file_name) + + hide() diff --git a/game/addons/mat_maker_gd/editor/CreateNamePopup.tscn b/game/addons/mat_maker_gd/editor/CreateNamePopup.tscn new file mode 100644 index 0000000..b2f22ac --- /dev/null +++ b/game/addons/mat_maker_gd/editor/CreateNamePopup.tscn @@ -0,0 +1,61 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/editor/CreateNamePopup.gd" type="Script" id=1] + +[node name="CreateNamePopup" type="ConfirmationDialog"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -245.5 +margin_top = -220.0 +margin_right = 245.5 +margin_bottom = 220.0 +window_title = "Create New Resource" +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +line_edit_path = NodePath("VBoxContainer/LineEdit") +tree_path = NodePath("VBoxContainer/Tree") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_left = 8.0 +margin_top = 8.0 +margin_right = 483.0 +margin_bottom = 404.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Label2" type="Label" parent="VBoxContainer"] +margin_right = 475.0 +margin_bottom = 14.0 +size_flags_horizontal = 3 +text = "Type" + +[node name="Tree" type="Tree" parent="VBoxContainer"] +margin_top = 18.0 +margin_right = 475.0 +margin_bottom = 350.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +hide_root = true + +[node name="Label" type="Label" parent="VBoxContainer"] +visible = false +margin_top = 354.0 +margin_right = 475.0 +margin_bottom = 368.0 +size_flags_horizontal = 3 +text = "Name" + +[node name="LineEdit" type="LineEdit" parent="VBoxContainer"] +visible = false +margin_top = 372.0 +margin_right = 475.0 +margin_bottom = 396.0 +size_flags_horizontal = 3 +caret_blink = true diff --git a/game/addons/mat_maker_gd/editor/MatMakerGDEditor.gd b/game/addons/mat_maker_gd/editor/MatMakerGDEditor.gd new file mode 100644 index 0000000..d7fb043 --- /dev/null +++ b/game/addons/mat_maker_gd/editor/MatMakerGDEditor.gd @@ -0,0 +1,148 @@ +tool +extends MarginContainer + +var MMGraphNode = preload("res://addons/mat_maker_gd/editor/mm_graph_node.gd") + +export(PoolColorArray) var slot_colors : PoolColorArray + +export(NodePath) var graph_edit_path : NodePath = "VBoxContainer/GraphEdit" +export(NodePath) var add_popup_path : NodePath = "Popups/AddPopup" + +var _graph_edit : GraphEdit = null + +var _material : MMMateial + +func _enter_tree(): + ensure_objs() + +func ensure_objs() -> void: + if !_graph_edit: + _graph_edit = get_node(graph_edit_path) + + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_INT, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR3, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL) + + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_INT) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR3) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR) + + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL) + + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_INT, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_INT) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR3, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR3) + _graph_edit.add_valid_connection_type(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR) + + _graph_edit.connect("connection_request", self, "on_graph_edit_connection_request") + _graph_edit.connect("disconnection_request", self, "on_graph_edit_disconnection_request") + +func recreate() -> void: + ensure_objs() + + _graph_edit.clear_connections() + + for c in _graph_edit.get_children(): + if c is GraphNode: + _graph_edit.remove_child(c) + c.queue_free() + + if !_material: + return + + _material.cancel_render_and_wait() + + for n in _material.nodes: + var gn : GraphNode = MMGraphNode.new() + gn.slot_colors = slot_colors + gn.set_node(_material, n) + _graph_edit.add_child(gn) + + #connect them + for n in _material.nodes: + if n: + for ip in n.input_properties: + if ip.input_property: + var input_node : Node = find_graph_node_for(n) + var output_node : Node = find_graph_node_for(ip.input_property.owner) + + var to_slot : int = input_node.get_input_property_graph_node_slot_index(ip) + var from_slot : int = output_node.get_output_property_graph_node_slot_index(ip.input_property) + + _graph_edit.connect_node(output_node.name, from_slot, input_node.name, to_slot) + + _material.render() + +func find_graph_node_for(nnode) -> Node: + for c in _graph_edit.get_children(): + if c is GraphNode: + if c.has_method("get_material_node"): + var n = c.get_material_node() + + if n == nnode: + return c + + return null + +func set_mmmaterial(object : MMMateial): + _material = object + + recreate() + +func on_graph_edit_connection_request(from: String, from_slot: int, to: String, to_slot: int): + var from_node : GraphNode = _graph_edit.get_node(from) + var to_node : GraphNode = _graph_edit.get_node(to) + + _material.cancel_render_and_wait() + + if from_node.connect_slot(from_slot, to_node, to_slot): + _graph_edit.connect_node(from, from_slot, to, to_slot) + +func on_graph_edit_disconnection_request(from: String, from_slot: int, to: String, to_slot: int): + var from_node : GraphNode = _graph_edit.get_node(from) + var to_node : GraphNode = _graph_edit.get_node(to) + + _material.cancel_render_and_wait() + + if from_node.disconnect_slot(from_slot, to_node, to_slot): + _graph_edit.disconnect_node(from, from_slot, to, to_slot) + +func on_graph_node_close_request(node : GraphNode) -> void: + if _material: + _material.cancel_render_and_wait() + _material.remove_node(node._node) + recreate() + +func _on_AddButton_pressed(): + get_node(add_popup_path).popup_centered() + +func _on_AddPopup_ok_pressed(script_path : String): + if !_material: + return + + ensure_objs() + + _material.cancel_render_and_wait() + + var sc = load(script_path) + var nnode : MMNode = sc.new() + + if !nnode: + print("_on_AddPopup_ok_pressed: Error !nnode! script: " + script_path) + return + + _material.add_node(nnode) + + var gn : GraphNode = MMGraphNode.new() + gn.slot_colors = slot_colors + gn.set_node(_material, nnode) + _graph_edit.add_child(gn) + diff --git a/game/addons/mat_maker_gd/editor/MatMakerGDEditor.tscn b/game/addons/mat_maker_gd/editor/MatMakerGDEditor.tscn new file mode 100644 index 0000000..c8e3a63 --- /dev/null +++ b/game/addons/mat_maker_gd/editor/MatMakerGDEditor.tscn @@ -0,0 +1,55 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/mat_maker_gd/editor/MatMakerGDEditor.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/editor/CreateNamePopup.tscn" type="PackedScene" id=2] + +[node name="MatMakerGDEditor" type="MarginContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +rect_min_size = Vector2( 0, 200 ) +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +slot_colors = PoolColorArray( 0.905882, 0.0627451, 0.0627451, 1, 0.431373, 0.0352941, 0.0352941, 1, 0.827451, 0.376471, 0.376471, 1, 0.0431373, 0.478431, 0.427451, 1, 0.352941, 0.0352941, 0.341176, 1, 0.0352941, 0.0509804, 1, 1, 0.372549, 0.372549, 0.372549, 1 ) + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +margin_right = 1024.0 +margin_bottom = 600.0 + +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"] +margin_right = 1024.0 +margin_bottom = 34.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/PanelContainer"] +margin_left = 7.0 +margin_top = 7.0 +margin_right = 1017.0 +margin_bottom = 27.0 + +[node name="AddButton" type="Button" parent="VBoxContainer/PanelContainer/HBoxContainer"] +margin_right = 37.0 +margin_bottom = 20.0 +text = "Add" + +[node name="GraphEdit" type="GraphEdit" parent="VBoxContainer"] +margin_top = 38.0 +margin_right = 1024.0 +margin_bottom = 600.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +right_disconnects = true +scroll_offset = Vector2( 0, -20 ) + +[node name="Popups" type="Control" parent="."] +margin_right = 1024.0 +margin_bottom = 600.0 +mouse_filter = 2 + +[node name="AddPopup" parent="Popups" instance=ExtResource( 2 )] +type_folders = PoolStringArray( "res://addons/mat_maker_gd/nodes/uniform", "res://addons/mat_maker_gd/nodes/noise", "res://addons/mat_maker_gd/nodes/filter", "res://addons/mat_maker_gd/nodes/gradient", "res://addons/mat_maker_gd/nodes/pattern", "res://addons/mat_maker_gd/nodes/sdf2d", "res://addons/mat_maker_gd/nodes/sdf3d", "res://addons/mat_maker_gd/nodes/transform", "res://addons/mat_maker_gd/nodes/simple", "res://addons/mat_maker_gd/nodes/other" ) + +[connection signal="pressed" from="VBoxContainer/PanelContainer/HBoxContainer/AddButton" to="." method="_on_AddButton_pressed"] +[connection signal="ok_pressed" from="Popups/AddPopup" to="." method="_on_AddPopup_ok_pressed"] diff --git a/game/addons/mat_maker_gd/editor/mm_graph_node.gd b/game/addons/mat_maker_gd/editor/mm_graph_node.gd new file mode 100644 index 0000000..b12fc2e --- /dev/null +++ b/game/addons/mat_maker_gd/editor/mm_graph_node.gd @@ -0,0 +1,607 @@ +tool +extends GraphNode + +var gradient_editor_scene : PackedScene = preload("res://addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn") +var polygon_edit_scene : PackedScene = preload("res://addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn") +var curve_edit_scene : PackedScene = preload("res://addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn") + +var slot_colors : PoolColorArray + +var _material : MMMateial = null +var _node : MMNode = null +var properties : Array = Array() + +func _init(): + show_close = true + connect("offset_changed", self, "on_offset_changed") + connect("close_request", self, "on_close_request") + +func add_slot_texture(getter : String, setter : String) -> int: + var t : TextureRect = TextureRect.new() + t.rect_min_size = Vector2(128, 128) + t.expand = true + t.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, t) + + t.texture = _node.call(getter, _material, slot_idx) + properties[slot_idx].append(t.texture) + + return slot_idx + +func add_slot_texture_universal(property : MMNodeUniversalProperty) -> int: + var t : TextureRect = TextureRect.new() + t.rect_min_size = Vector2(128, 128) + t.expand = true + t.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED + + var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", t) + + var img : Image = property.get_active_image() + + var tex : ImageTexture = ImageTexture.new() + + if img: + tex.create_from_image(img, 0) + + t.texture = tex + + properties[slot_idx].append(property) + + property.connect("changed", self, "on_universal_texture_changed", [ slot_idx ]) + + return slot_idx + +func add_slot_image_path_universal(property : MMNodeUniversalProperty, getter : String, setter : String) -> int: + var t : TextureButton = load("res://addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.tscn").instance() + + var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", t) + + properties[slot_idx].append(property) + properties[slot_idx].append(getter) + properties[slot_idx].append(setter) + + property.connect("changed", self, "on_universal_texture_changed_image_picker", [ slot_idx ]) + + t.connect("on_file_selected", self, "on_universal_image_path_changed", [ slot_idx ]) + + t.call_deferred("do_set_image_path", _node.call(getter)) + + return slot_idx + + +func add_slot_gradient() -> int: + var ge : Control = gradient_editor_scene.instance() + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, "", "", ge) + + ge.set_value(_node) + #ge.texture = _node.call(getter, _material, slot_idx) + #properties[slot_idx].append(ge.texture) + + return slot_idx + +func add_slot_polygon() -> int: + var ge : Control = polygon_edit_scene.instance() + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, "", "", ge) + + ge.set_value(_node) + #ge.texture = _node.call(getter, _material, slot_idx) + #properties[slot_idx].append(ge.texture) + + return slot_idx + +func add_slot_curve() -> int: + var ge : Control = curve_edit_scene.instance() + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, "", "", ge) + + ge.set_value(_node) + #ge.texture = _node.call(getter, _material, slot_idx) + #properties[slot_idx].append(ge.texture) + + return slot_idx + +func add_slot_color(getter : String, setter : String) -> int: + var cp : ColorPickerButton = ColorPickerButton.new() + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, cp) + + cp.color = _node.call(getter) + + cp.connect("color_changed", _node, setter) + + return slot_idx + +func add_slot_color_universal(property : MMNodeUniversalProperty) -> int: + var cp : ColorPickerButton = ColorPickerButton.new() + + var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", cp) + + cp.color = property.get_default_value() + + properties[slot_idx].append(property) + + cp.connect("color_changed", self, "on_universal_color_changed", [ slot_idx ]) + + return slot_idx + +func add_slot_label(getter : String, setter : String, slot_name : String) -> int: + var l : Label = Label.new() + + l.text = slot_name + + return add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, l) + +func add_slot_line_edit(getter : String, setter : String, slot_name : String, placeholder : String = "") -> int: + var bc : VBoxContainer = VBoxContainer.new() + + var l : Label = Label.new() + l.text = slot_name + bc.add_child(l) + + var le : LineEdit = LineEdit.new() + le.placeholder_text = placeholder + bc.add_child(le) + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc) + + le.text = _node.call(getter) + + le.connect("text_entered", self, "on_slot_line_edit_text_entered", [ slot_idx ]) + + return slot_idx + +func add_slot_enum(getter : String, setter : String, slot_name : String, values : Array) -> int: + var bc : VBoxContainer = VBoxContainer.new() + + if slot_name: + var l : Label = Label.new() + l.text = slot_name + bc.add_child(l) + + var mb : OptionButton = OptionButton.new() + + for v in values: + mb.add_item(v) + + bc.add_child(mb) + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc) + + mb.selected = _node.call(getter) + + mb.connect("item_selected", self, "on_slot_enum_item_selected", [ slot_idx ]) + + return slot_idx + +func add_slot_int(getter : String, setter : String, slot_name : String, prange : Vector2 = Vector2(-1000, 1000)) -> int: + var bc : VBoxContainer = VBoxContainer.new() + + var l : Label = Label.new() + l.text = slot_name + bc.add_child(l) + + var sb : SpinBox = SpinBox.new() + sb.rounded = true + sb.min_value = prange.x + sb.max_value = prange.y + bc.add_child(sb) + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc) + + sb.value = _node.call(getter) + + sb.connect("value_changed", self, "on_int_spinbox_value_changed", [ slot_idx ]) + + return slot_idx + +func add_slot_bool(getter : String, setter : String, slot_name : String) -> int: + var cb : CheckBox = CheckBox.new() + cb.text = slot_name + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, cb) + + cb.pressed = _node.call(getter) + + cb.connect("toggled", _node, setter) + + return slot_idx + +func add_slot_label_universal(property : MMNodeUniversalProperty) -> int: + var l : Label = Label.new() + l.text = property.slot_name + + var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", l) + + properties[slot_idx].append(property) + + return slot_idx + +func add_slot_int_universal(property : MMNodeUniversalProperty) -> int: + var bc : VBoxContainer = VBoxContainer.new() + + var l : Label = Label.new() + l.text = property.slot_name + bc.add_child(l) + + var sb : SpinBox = SpinBox.new() + sb.rounded = true + sb.min_value = property.value_range.x + sb.max_value = property.value_range.y + bc.add_child(sb) + + var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", bc) + + sb.value = property.get_default_value() + + sb.connect("value_changed", self, "on_int_universal_spinbox_value_changed", [ slot_idx ]) + + properties[slot_idx].append(property) + + return slot_idx + +func add_slot_float(getter : String, setter : String, slot_name : String, step : float = 0.1, prange : Vector2 = Vector2(-1000, 1000)) -> int: + var bc : VBoxContainer = VBoxContainer.new() + + var l : Label = Label.new() + l.text = slot_name + bc.add_child(l) + + var sb : SpinBox = SpinBox.new() + bc.add_child(sb) + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc) + sb.rounded = false + sb.step = step + sb.min_value = prange.x + sb.max_value = prange.y + sb.value = _node.call(getter) + + sb.connect("value_changed", self, "on_float_spinbox_value_changed", [ slot_idx ]) + + return slot_idx + +func add_slot_float_universal(property : MMNodeUniversalProperty) -> int: + var bc : VBoxContainer = VBoxContainer.new() + + var l : Label = Label.new() + l.text = property.slot_name + bc.add_child(l) + + var sb : SpinBox = SpinBox.new() + bc.add_child(sb) + + var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", bc) + sb.rounded = false + sb.step = property.value_step + sb.min_value = property.value_range.x + sb.max_value = property.value_range.y + sb.value = property.get_default_value() + + properties[slot_idx].append(property) + + sb.connect("value_changed", self, "on_float_universal_spinbox_value_changed", [ slot_idx ]) + + return slot_idx + +func add_slot_vector2(getter : String, setter : String, slot_name : String, step : float = 0.1, prange : Vector2 = Vector2(-1000, 1000)) -> int: + var bc : VBoxContainer = VBoxContainer.new() + + var l : Label = Label.new() + l.text = slot_name + bc.add_child(l) + + var sbx : SpinBox = SpinBox.new() + bc.add_child(sbx) + + var sby : SpinBox = SpinBox.new() + bc.add_child(sby) + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc) + sbx.rounded = false + sby.rounded = false + sbx.step = step + sby.step = step + sbx.min_value = prange.x + sbx.max_value = prange.y + sby.min_value = prange.x + sby.max_value = prange.y + + var val : Vector2 = _node.call(getter) + + sbx.value = val.x + sby.value = val.y + + sbx.connect("value_changed", self, "on_vector2_spinbox_value_changed", [ slot_idx, sbx, sby ]) + sby.connect("value_changed", self, "on_vector2_spinbox_value_changed", [ slot_idx, sbx, sby ]) + + return slot_idx + +func add_slot_vector3(getter : String, setter : String, slot_name : String, step : float = 0.1, prange : Vector2 = Vector2(-1000, 1000)) -> int: + var bc : VBoxContainer = VBoxContainer.new() + + var l : Label = Label.new() + l.text = slot_name + bc.add_child(l) + + var sbx : SpinBox = SpinBox.new() + bc.add_child(sbx) + + var sby : SpinBox = SpinBox.new() + bc.add_child(sby) + + var sbz : SpinBox = SpinBox.new() + bc.add_child(sbz) + + var slot_idx : int = add_slot(MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_NONE, getter, setter, bc) + sbx.rounded = false + sby.rounded = false + sbz.rounded = false + sbx.step = step + sby.step = step + sbz.step = step + sbx.min_value = prange.x + sbx.max_value = prange.y + sby.min_value = prange.x + sby.max_value = prange.y + sbz.min_value = prange.x + sbz.max_value = prange.y + + var val : Vector3 = _node.call(getter) + + sbx.value = val.x + sby.value = val.y + sbz.value = val.z + + sbx.connect("value_changed", self, "on_vector3_spinbox_value_changed", [ slot_idx, sbx, sby, sbz ]) + sby.connect("value_changed", self, "on_vector3_spinbox_value_changed", [ slot_idx, sbx, sby, sbz ]) + sbz.connect("value_changed", self, "on_vector3_spinbox_value_changed", [ slot_idx, sbx, sby, sbz ]) + + return slot_idx + +func add_slot_vector2_universal(property : MMNodeUniversalProperty) -> int: + var bc : VBoxContainer = VBoxContainer.new() + + var l : Label = Label.new() + l.text = property.slot_name + bc.add_child(l) + + var sbx : SpinBox = SpinBox.new() + bc.add_child(sbx) + + var sby : SpinBox = SpinBox.new() + bc.add_child(sby) + + var slot_idx : int = add_slot(property.input_slot_type, property.output_slot_type, "", "", bc) + sbx.rounded = false + sby.rounded = false + sbx.step = property.value_step + sby.step = property.value_step + sbx.min_value = property.value_range.x + sbx.max_value = property.value_range.y + sby.min_value = property.value_range.x + sby.max_value = property.value_range.y + + var val : Vector2 = property.get_default_value() + + sbx.value = val.x + sby.value = val.y + + properties[slot_idx].append(property) + + sbx.connect("value_changed", self, "on_vector2_universal_spinbox_value_changed", [ slot_idx, sbx, sby ]) + sby.connect("value_changed", self, "on_vector2_universal_spinbox_value_changed", [ slot_idx, sbx, sby ]) + + return slot_idx + +func add_slot(input_type : int, output_type : int, getter : String, setter : String, control : Control) -> int: + add_child(control) + var slot_idx : int = get_child_count() - 1 + + var arr : Array = Array() + + arr.append(slot_idx) + arr.append(input_type) + arr.append(output_type) + arr.append(getter) + arr.append(setter) + arr.append(control) + + properties.append(arr) + + set_slot_enabled_left(slot_idx, input_type != -1) + set_slot_enabled_right(slot_idx, output_type != -1) + + if input_type != -1: + set_slot_type_left(slot_idx, input_type) + + if output_type != -1: + set_slot_type_left(slot_idx, output_type) + + if input_type != -1 && slot_colors.size() > input_type: + set_slot_color_left(slot_idx, slot_colors[input_type]) + + if output_type != -1 && slot_colors.size() > output_type: + set_slot_color_right(slot_idx, slot_colors[output_type]) + + return slot_idx + +func connect_slot(slot_idx : int, to_node : Node, to_slot_idx : int) -> bool: + var from_property_index : int = -1 + var to_property_index : int = -1 + + for i in range(properties.size()): + if properties[i][2] != -1: + from_property_index += 1 + + if from_property_index == slot_idx: + from_property_index = i + break + + for i in range(to_node.properties.size()): + if to_node.properties[i][1] != -1: + to_property_index += 1 + + if to_property_index == to_slot_idx: + to_property_index = i + break + + to_node.properties[to_property_index][6].set_input_property(properties[from_property_index][6]) + + return true + +func disconnect_slot(slot_idx : int, to_node : Node, to_slot_idx : int) -> bool: + var from_property_index : int = -1 + var to_property_index : int = -1 + + for i in range(properties.size()): + if properties[i][2] != -1: + from_property_index += 1 + + if from_property_index == slot_idx: + from_property_index = i + break + + for i in range(to_node.properties.size()): + if to_node.properties[i][1] != -1: + to_property_index += 1 + + if to_property_index == to_slot_idx: + to_property_index = i + break + + to_node.properties[to_property_index][6].set_input_property(null) + + return true + +func get_input_property_graph_node_slot_index(property) -> int: + var property_index : int = -1 + + for i in range(properties.size()): + if properties[i][1] != -1: + property_index += 1 + + if properties[i][6] == property: + break + + return property_index + +func get_output_property_graph_node_slot_index(property) -> int: + var property_index : int = -1 + + for i in range(properties.size()): + if properties[i][2] != -1: + property_index += 1 + + if properties[i][6] == property: + break + + return property_index + +func get_property_control(slot_idx : int) -> Node: + return properties[slot_idx][5] + +func set_node(material : MMMateial, node : MMNode) -> void: + _node = node + _material = material + + if !_node: + return + + title = _node.get_class() + + if _node.get_script(): + title = _node.get_script().resource_path.get_file().get_basename() + + _node.register_methods(self) + + offset = _node.get_graph_position() + + _node.connect("changed", self, "on_node_changed") + +func propagate_node_change() -> void: + pass + +func on_offset_changed(): + if _node: + _node.set_graph_position(offset) + +func on_node_changed(): + #get all properties again + #_node.recalculate_image(_material) + + propagate_node_change() + +func on_int_spinbox_value_changed(val : float, slot_idx) -> void: + _node.call(properties[slot_idx][4], int(val)) + +func on_float_spinbox_value_changed(val : float, slot_idx) -> void: + _node.call(properties[slot_idx][4], val) + +func on_vector2_spinbox_value_changed(val : float, slot_idx, spinbox_x, spinbox_y) -> void: + var vv : Vector2 = Vector2(spinbox_x.value, spinbox_y.value) + + _node.call(properties[slot_idx][4], vv) + +func on_vector3_spinbox_value_changed(val : float, slot_idx, spinbox_x, spinbox_y, spinbox_z) -> void: + var vv : Vector3 = Vector3(spinbox_x.value, spinbox_y.value, spinbox_z.value) + + _node.call(properties[slot_idx][4], vv) + +func on_int_universal_spinbox_value_changed(val : float, slot_idx) -> void: + properties[slot_idx][6].set_default_value(int(val)) + +func on_float_universal_spinbox_value_changed(val : float, slot_idx) -> void: + properties[slot_idx][6].set_default_value(val) + +func on_vector2_universal_spinbox_value_changed(val : float, slot_idx, spinbox_x, spinbox_y) -> void: + var vv : Vector2 = Vector2(spinbox_x.value, spinbox_y.value) + + properties[slot_idx][6].set_default_value(vv) + +func on_slot_enum_item_selected(val : int, slot_idx : int) -> void: + _node.call(properties[slot_idx][4], val) + +func on_universal_texture_changed(slot_idx : int) -> void: + var img : Image = properties[slot_idx][6].get_active_image() + + var tex : ImageTexture = properties[slot_idx][5].texture + + if img: + properties[slot_idx][5].texture.create_from_image(img, 0) + else: + properties[slot_idx][5].texture = ImageTexture.new() + +func on_universal_texture_changed_image_picker(slot_idx : int) -> void: + var img : Image = properties[slot_idx][6].get_active_image() + + var tex : ImageTexture = properties[slot_idx][5].texture_normal + + if img: + properties[slot_idx][5].texture_normal.create_from_image(img, 0) + else: + properties[slot_idx][5].texture_normal = ImageTexture.new() + +func on_slot_line_edit_text_entered(text : String, slot_idx : int) -> void: + _node.call(properties[slot_idx][4], text) + +func on_universal_color_changed(c : Color, slot_idx : int) -> void: + properties[slot_idx][6].set_default_value(c) + +func on_universal_image_path_changed(f : String, slot_idx : int) -> void: + _node.call(properties[slot_idx][8], f) + +func get_material_node() -> MMNode: + return _node + +func on_close_request() -> void: + var n : Node = get_parent() + + while n: + if n.has_method("on_graph_node_close_request"): + n.call_deferred("on_graph_node_close_request", self) + return + + n = n.get_parent() diff --git a/game/addons/mat_maker_gd/icons/custom.png b/game/addons/mat_maker_gd/icons/custom.png new file mode 100644 index 0000000000000000000000000000000000000000..45a7a1815b7db4f7b993ff24ad3c38a9863c1fa6 GIT binary patch literal 549 zcmV+=0^0qFP)1}1`3waY++nYFBH@{Vwak_bhF&x9SCTu}JV)WaoyH9215Zd`WXOJs*&@M`jl~ekSo^XPR+*co<|vyay+424qK-d{;4lj*R3g;#Kl! ztP&?d7Kf-gsUDRzCVEsxlDygfzkStXL+(=bW-rt|8^(Jd)Ney!%P_u<45M%i)+e}3 zm-91+F#I9K<`X%1B@&mt5XbzvF010qNS#tmY3ljhU3ljkVnw%H_002ozL_t&t znRSjq5r8ld19Nz&ic^6zlvM?oI7BQDrc4IPemBWPGJpg+&@>Un&He;lV$lCY0lDbQ nDQS&}L%?S30@9CQf%J(B#dmHV5yCC+00000NkvXXu0mjfv2WwF literal 0 HcmV?d00001 diff --git a/game/addons/mat_maker_gd/icons/custom.png.import b/game/addons/mat_maker_gd/icons/custom.png.import new file mode 100644 index 0000000..59e2366 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/custom.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/custom.png-b026bd10e22818d25d499d2eddb137a8.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/mat_maker_gd/icons/custom.png" +dest_files=[ "res://.import/custom.png-b026bd10e22818d25d499d2eddb137a8.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +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 diff --git a/game/addons/mat_maker_gd/icons/down.tres b/game/addons/mat_maker_gd/icons/down.tres new file mode 100644 index 0000000..aca6f4c --- /dev/null +++ b/game/addons/mat_maker_gd/icons/down.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 4 +atlas = ExtResource( 1 ) +region = Rect2( 32, 48, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/edit.tres b/game/addons/mat_maker_gd/icons/edit.tres new file mode 100644 index 0000000..aa39c29 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/edit.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 7 +atlas = ExtResource( 1 ) +region = Rect2( 16, 16, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/godot_logo.svg b/game/addons/mat_maker_gd/icons/godot_logo.svg new file mode 100644 index 0000000..d7aef39 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/godot_logo.svg @@ -0,0 +1 @@ + diff --git a/game/addons/mat_maker_gd/icons/godot_logo.svg.import b/game/addons/mat_maker_gd/icons/godot_logo.svg.import new file mode 100644 index 0000000..e96628e --- /dev/null +++ b/game/addons/mat_maker_gd/icons/godot_logo.svg.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/godot_logo.svg-4e4bf625f601f4dc5d1d367a2f781011.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/mat_maker_gd/icons/godot_logo.svg" +dest_files=[ "res://.import/godot_logo.svg-4e4bf625f601f4dc5d1d367a2f781011.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +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 diff --git a/game/addons/mat_maker_gd/icons/icons.svg b/game/addons/mat_maker_gd/icons/icons.svg new file mode 100644 index 0000000..cc85b87 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/icons.svg @@ -0,0 +1,3522 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/game/addons/mat_maker_gd/icons/icons.svg.import b/game/addons/mat_maker_gd/icons/icons.svg.import new file mode 100644 index 0000000..733f804 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/icons.svg.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icons.svg-bac181e82e23c7264cdf6c36903654b9.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/mat_maker_gd/icons/icons.svg" +dest_files=[ "res://.import/icons.svg-bac181e82e23c7264cdf6c36903654b9.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +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 diff --git a/game/addons/mat_maker_gd/icons/icons.tres b/game/addons/mat_maker_gd/icons/icons.tres new file mode 100644 index 0000000..e347b32 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/icons.tres @@ -0,0 +1,30 @@ +[gd_resource type="ProxyTexture" load_steps=4 format=2] + +[sub_resource type="Image" id=2] +data = { +"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 13, 13, 13, 0, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 102, 53, 0, 123, 110, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 1, 0, 117, 0, 1, 0, 234, 45, 3, 0, 235, 77, 3, 0, 235, 77, 3, 0, 235, 46, 0, 0, 171, 2, 1, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 39, 255, 255, 255, 50, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 6, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 71, 255, 255, 255, 191, 255, 255, 255, 254, 255, 255, 255, 235, 255, 255, 255, 128, 191, 191, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 5, 255, 4, 4, 107, 191, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 2, 0, 255, 5, 5, 101, 191, 3, 3, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 191, 6, 44, 24, 255, 9, 128, 24, 255, 9, 128, 17, 191, 5, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 16, 16, 16, 78, 26, 26, 26, 179, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 25, 25, 25, 163, 19, 19, 19, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 14, 23, 23, 23, 158, 27, 27, 27, 221, 24, 24, 24, 163, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 79, 255, 255, 255, 151, 255, 255, 255, 156, 255, 255, 255, 103, 255, 255, 255, 20, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 54, 29, 0, 242, 214, 113, 59, 241, 213, 111, 143, 247, 221, 116, 164, 247, 221, 116, 113, 244, 216, 114, 31, 122, 109, 58, 0, 55, 55, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 8, 2, 0, 234, 117, 6, 4, 236, 229, 10, 10, 237, 255, 12, 14, 237, 255, 13, 15, 237, 255, 11, 12, 237, 255, 8, 7, 236, 231, 4, 2, 234, 127, 0, 0, 173, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 9, 255, 255, 255, 255, 255, 255, 255, 233, 191, 191, 191, 27, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 207, 255, 255, 255, 179, 191, 191, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 24, 255, 255, 255, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 148, 128, 128, 128, 0, 0, 0, 0, 0, 191, 0, 0, 6, 255, 6, 6, 175, 255, 9, 9, 255, 255, 6, 6, 163, 191, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 2, 0, 255, 8, 8, 135, 255, 9, 9, 255, 255, 7, 7, 197, 191, 4, 4, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 255, 9, 86, 24, 255, 9, 255, 24, 255, 9, 255, 22, 255, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 56, 67, 67, 67, 252, 207, 207, 207, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 244, 244, 244, 255, 247, 247, 247, 255, 166, 166, 166, 255, 26, 26, 26, 191, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 8, 26, 26, 26, 193, 147, 147, 147, 255, 239, 239, 239, 255, 155, 155, 155, 255, 27, 27, 27, 203, 17, 17, 17, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 7, 255, 255, 255, 105, 255, 255, 255, 162, 255, 255, 255, 176, 255, 255, 255, 153, 255, 255, 255, 132, 255, 255, 255, 114, 255, 255, 255, 95, 255, 255, 255, 77, 255, 255, 255, 51, 255, 255, 255, 22, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 6, 255, 255, 255, 75, 255, 255, 255, 95, 255, 255, 255, 38, 128, 128, 128, 0, 191, 191, 191, 2, 255, 255, 255, 167, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 255, 255, 255, 178, 255, 255, 255, 87, 191, 191, 191, 8, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 147, 74, 2, 246, 220, 115, 63, 247, 220, 116, 99, 247, 219, 116, 50, 120, 106, 56, 0, 120, 106, 55, 0, 247, 220, 116, 129, 248, 221, 117, 255, 249, 230, 155, 255, 251, 237, 184, 255, 249, 232, 168, 255, 243, 217, 117, 254, 244, 217, 115, 192, 235, 219, 113, 100, 185, 164, 86, 16, 122, 110, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 176, 29, 4, 13, 223, 206, 9, 43, 204, 255, 19, 27, 234, 255, 24, 33, 239, 255, 27, 38, 240, 255, 28, 39, 240, 255, 26, 36, 240, 255, 22, 30, 239, 255, 16, 20, 238, 255, 8, 8, 236, 216, 1, 0, 117, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 233, 255, 255, 255, 255, 255, 255, 255, 197, 255, 255, 255, 22, 255, 255, 255, 206, 255, 255, 255, 255, 255, 255, 255, 205, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 2, 255, 255, 255, 103, 255, 255, 255, 239, 255, 255, 255, 255, 255, 255, 255, 240, 255, 255, 255, 106, 191, 191, 191, 5, 255, 255, 255, 46, 255, 255, 255, 244, 255, 255, 255, 250, 255, 255, 255, 23, 128, 2, 2, 0, 255, 6, 6, 142, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 165, 191, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 2, 0, 255, 8, 8, 138, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 172, 128, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 255, 9, 85, 24, 255, 9, 255, 24, 255, 9, 255, 22, 255, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 123, 158, 158, 158, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 45, 45, 45, 248, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 3, 26, 26, 26, 173, 139, 139, 139, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 155, 155, 155, 255, 26, 26, 26, 193, 15, 15, 15, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 9, 255, 255, 255, 46, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 46, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 24, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 202, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 255, 255, 255, 38, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 68, 255, 255, 255, 237, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 205, 255, 255, 255, 137, 255, 255, 255, 170, 255, 255, 255, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 158, 255, 255, 255, 65, 191, 191, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 23, 0, 138, 132, 67, 43, 248, 221, 116, 223, 248, 222, 122, 255, 245, 220, 126, 255, 237, 211, 112, 255, 231, 205, 108, 219, 230, 203, 106, 136, 237, 211, 110, 169, 238, 212, 111, 224, 226, 202, 106, 255, 218, 195, 105, 255, 223, 208, 149, 255, 235, 227, 194, 255, 242, 232, 195, 255, 234, 217, 150, 255, 232, 206, 108, 248, 241, 215, 113, 171, 246, 219, 115, 80, 181, 160, 85, 5, 55, 55, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 15, 5, 2, 236, 213, 6, 125, 118, 255, 0, 209, 28, 255, 12, 145, 110, 255, 38, 56, 241, 255, 42, 62, 242, 255, 43, 63, 243, 255, 39, 64, 235, 255, 22, 105, 164, 255, 29, 41, 240, 255, 20, 27, 238, 255, 10, 10, 237, 225, 2, 0, 175, 20, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 138, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 21, 255, 255, 255, 193, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 171, 191, 191, 191, 25, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 199, 255, 255, 255, 255, 255, 255, 255, 51, 0, 0, 0, 0, 191, 5, 5, 21, 255, 8, 8, 209, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 167, 191, 0, 0, 4, 191, 0, 0, 0, 255, 8, 8, 140, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 226, 191, 5, 5, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 7, 84, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 7, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 70, 81, 81, 81, 254, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 241, 241, 255, 232, 232, 232, 255, 161, 161, 161, 255, 26, 26, 26, 189, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 20, 20, 20, 151, 117, 117, 117, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 143, 143, 143, 255, 24, 24, 24, 181, 16, 16, 16, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 11, 11, 11, 37, 23, 23, 23, 154, 26, 26, 26, 172, 16, 16, 16, 64, 6, 6, 6, 0, 0, 0, 0, 0, 191, 191, 191, 0, 255, 255, 255, 113, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 255, 255, 255, 149, 191, 191, 191, 20, 128, 128, 128, 0, 255, 255, 255, 146, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 239, 255, 255, 255, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 50, 255, 255, 255, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 189, 255, 255, 255, 151, 255, 255, 255, 79, 255, 255, 255, 145, 255, 255, 255, 234, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 204, 191, 191, 191, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 195, 101, 22, 248, 221, 117, 236, 251, 239, 193, 255, 245, 237, 206, 255, 235, 223, 176, 255, 238, 230, 201, 255, 235, 224, 186, 255, 213, 196, 130, 255, 199, 177, 92, 255, 202, 180, 93, 199, 205, 182, 94, 162, 192, 176, 90, 80, 183, 164, 83, 132, 177, 157, 80, 222, 181, 162, 88, 255, 210, 198, 152, 255, 234, 227, 201, 255, 238, 227, 185, 255, 236, 216, 137, 255, 244, 218, 115, 222, 235, 216, 111, 58, 30, 26, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 20, 15, 0, 153, 19, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 3, 1, 224, 145, 13, 15, 237, 255, 20, 58, 207, 255, 0, 207, 30, 255, 0, 209, 28, 255, 28, 137, 146, 255, 56, 87, 245, 255, 48, 105, 212, 255, 10, 184, 68, 255, 0, 208, 29, 255, 32, 85, 203, 255, 31, 44, 240, 255, 20, 26, 238, 255, 7, 6, 233, 162, 1, 0, 114, 0, 0, 0, 0, 0, 255, 255, 255, 41, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 154, 255, 255, 255, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 94, 191, 191, 191, 3, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 190, 255, 255, 255, 255, 255, 255, 255, 223, 255, 255, 255, 90, 255, 255, 255, 74, 255, 255, 255, 67, 191, 191, 191, 10, 128, 128, 128, 0, 255, 255, 255, 93, 255, 255, 255, 252, 255, 255, 255, 244, 191, 191, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 5, 20, 255, 8, 8, 207, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 169, 255, 6, 6, 144, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 224, 191, 5, 5, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 7, 83, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 7, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 106, 26, 26, 26, 208, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 219, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 26, 26, 26, 157, 19, 19, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 126, 98, 98, 98, 255, 244, 244, 244, 255, 246, 246, 246, 255, 246, 246, 246, 255, 230, 230, 230, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 131, 131, 131, 255, 24, 24, 24, 170, 14, 14, 14, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 23, 23, 23, 74, 46, 46, 46, 240, 169, 169, 169, 255, 190, 190, 190, 255, 56, 56, 56, 252, 26, 26, 26, 36, 64, 64, 64, 0, 255, 255, 255, 121, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 255, 255, 255, 24, 255, 255, 255, 57, 255, 255, 255, 82, 255, 255, 255, 102, 255, 255, 255, 74, 255, 255, 255, 35, 255, 255, 255, 54, 255, 255, 255, 77, 255, 255, 255, 98, 255, 255, 255, 116, 255, 255, 255, 135, 255, 255, 255, 153, 255, 255, 255, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 191, 191, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 171, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 177, 255, 255, 255, 137, 255, 255, 255, 211, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 244, 255, 255, 255, 137, 255, 255, 255, 17, 255, 255, 255, 74, 255, 255, 255, 166, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 191, 191, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 55, 29, 0, 247, 220, 116, 130, 250, 235, 173, 255, 236, 220, 159, 255, 212, 188, 98, 197, 196, 172, 91, 133, 183, 162, 83, 195, 179, 162, 92, 255, 204, 193, 153, 255, 229, 224, 203, 255, 218, 208, 169, 255, 196, 178, 109, 255, 200, 178, 92, 250, 213, 191, 98, 159, 131, 117, 60, 25, 149, 131, 67, 61, 149, 132, 66, 152, 164, 146, 74, 237, 187, 169, 99, 255, 223, 211, 167, 255, 244, 235, 199, 255, 242, 218, 121, 237, 122, 110, 57, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 27, 43, 0, 207, 27, 183, 0, 153, 19, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 15, 7, 6, 236, 248, 20, 27, 238, 255, 8, 163, 85, 255, 0, 209, 28, 255, 7, 196, 51, 255, 57, 115, 218, 255, 71, 110, 247, 255, 42, 153, 155, 255, 0, 209, 28, 255, 0, 209, 28, 255, 6, 189, 58, 255, 16, 143, 119, 255, 16, 101, 160, 255, 12, 43, 207, 252, 3, 1, 232, 30, 64, 64, 64, 0, 255, 255, 255, 101, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 89, 255, 255, 255, 76, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 255, 255, 255, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 30, 255, 255, 255, 255, 255, 255, 255, 220, 255, 255, 255, 146, 255, 255, 255, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 168, 255, 255, 255, 181, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 113, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 5, 19, 255, 8, 8, 206, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 223, 191, 5, 5, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 12, 255, 4, 40, 23, 255, 8, 77, 23, 255, 8, 77, 23, 255, 8, 77, 23, 255, 8, 77, 23, 255, 8, 134, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 8, 127, 23, 255, 8, 77, 23, 255, 7, 66, 22, 255, 7, 51, 22, 255, 7, 51, 11, 255, 4, 26, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 26, 26, 26, 0, 13, 13, 13, 0, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 14, 14, 14, 0, 13, 13, 13, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 25, 25, 25, 102, 81, 81, 81, 254, 240, 240, 240, 255, 246, 246, 246, 255, 246, 246, 246, 255, 175, 175, 175, 255, 28, 28, 28, 250, 153, 153, 153, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 118, 118, 118, 255, 20, 20, 20, 157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 26, 26, 26, 116, 67, 67, 67, 252, 220, 220, 220, 255, 246, 246, 246, 255, 246, 246, 246, 255, 138, 138, 138, 254, 26, 26, 26, 103, 191, 191, 191, 17, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 163, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 234, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 173, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 174, 191, 191, 191, 0, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 57, 255, 255, 255, 156, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 193, 191, 191, 191, 8, 128, 128, 128, 0, 191, 191, 191, 13, 255, 255, 255, 94, 255, 255, 255, 207, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 129, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 110, 58, 0, 247, 220, 116, 209, 247, 238, 205, 255, 213, 190, 99, 210, 148, 135, 68, 4, 46, 39, 21, 0, 85, 74, 38, 0, 170, 157, 81, 35, 171, 151, 77, 149, 140, 125, 62, 216, 163, 149, 94, 255, 206, 198, 164, 255, 232, 226, 203, 255, 215, 199, 137, 255, 217, 193, 101, 219, 172, 151, 78, 22, 70, 61, 30, 0, 105, 96, 48, 6, 158, 141, 70, 81, 174, 156, 80, 187, 203, 184, 108, 255, 243, 233, 195, 255, 242, 216, 113, 169, 122, 109, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 104, 14, 0, 0, 207, 27, 43, 0, 209, 28, 255, 0, 206, 27, 182, 0, 150, 20, 7, 0, 0, 0, 0, 3, 0, 235, 84, 12, 13, 237, 255, 19, 71, 194, 255, 0, 209, 28, 255, 5, 199, 46, 255, 56, 119, 212, 255, 77, 120, 248, 255, 85, 133, 250, 255, 77, 145, 224, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 8, 114, 135, 255, 7, 7, 234, 102, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 81, 255, 255, 255, 223, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 123, 64, 64, 64, 0, 0, 0, 0, 0, 255, 255, 255, 85, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 148, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 38, 255, 255, 255, 185, 255, 255, 255, 216, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 188, 255, 255, 255, 181, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 234, 255, 255, 255, 89, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 5, 18, 255, 8, 8, 204, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 255, 255, 9, 9, 221, 191, 6, 6, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 12, 255, 5, 133, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 12, 255, 5, 132, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 42, 27, 27, 27, 197, 45, 45, 45, 251, 50, 50, 50, 255, 50, 50, 50, 255, 50, 50, 50, 255, 50, 50, 50, 255, 50, 50, 50, 255, 50, 50, 50, 255, 63, 63, 63, 255, 31, 31, 31, 225, 25, 25, 25, 75, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 24, 24, 24, 80, 66, 66, 66, 252, 233, 233, 233, 255, 246, 246, 246, 255, 246, 246, 246, 255, 192, 192, 192, 255, 33, 33, 33, 221, 25, 25, 25, 37, 27, 27, 27, 200, 164, 164, 164, 255, 246, 246, 246, 255, 246, 246, 246, 255, 244, 244, 244, 255, 106, 106, 106, 255, 20, 20, 20, 143, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 8, 26, 26, 26, 161, 98, 98, 98, 255, 237, 237, 237, 255, 246, 246, 246, 255, 246, 246, 246, 255, 237, 237, 237, 255, 69, 69, 69, 253, 25, 25, 25, 54, 255, 255, 255, 59, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 129, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 4, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 9, 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 123, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 14, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 12, 255, 255, 255, 245, 255, 255, 255, 174, 255, 255, 255, 146, 255, 255, 255, 160, 255, 255, 255, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 116, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 6, 255, 255, 255, 211, 255, 255, 255, 255, 255, 255, 255, 205, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 110, 58, 0, 244, 218, 115, 229, 237, 224, 178, 255, 198, 178, 93, 145, 95, 86, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 108, 56, 0, 242, 215, 114, 220, 219, 194, 101, 188, 162, 143, 73, 147, 147, 130, 62, 149, 162, 145, 74, 235, 216, 205, 165, 255, 215, 195, 121, 255, 228, 200, 103, 157, 104, 91, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 113, 55, 0, 182, 161, 81, 177, 226, 214, 167, 255, 234, 211, 120, 241, 180, 159, 85, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 14, 0, 0, 208, 27, 214, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 230, 0, 209, 28, 234, 0, 209, 28, 255, 0, 209, 28, 255, 0, 206, 27, 181, 0, 133, 34, 7, 2, 0, 219, 121, 15, 18, 238, 255, 27, 53, 224, 255, 0, 208, 29, 255, 39, 131, 170, 255, 72, 111, 247, 255, 85, 134, 250, 255, 97, 153, 252, 255, 101, 160, 253, 255, 67, 164, 190, 255, 56, 150, 182, 255, 37, 150, 149, 255, 2, 205, 36, 255, 0, 209, 28, 255, 19, 58, 205, 255, 6, 7, 233, 136, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 13, 255, 255, 255, 227, 255, 255, 255, 255, 255, 255, 255, 150, 191, 191, 191, 0, 128, 128, 128, 0, 255, 255, 255, 112, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 161, 255, 255, 255, 50, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 16, 255, 255, 255, 151, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 214, 255, 255, 255, 156, 255, 255, 255, 209, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 184, 255, 255, 255, 70, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 1, 255, 6, 6, 156, 255, 8, 8, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 180, 191, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 12, 255, 5, 131, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 255, 12, 255, 5, 133, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 29, 29, 29, 213, 200, 200, 200, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 230, 230, 255, 44, 44, 44, 244, 19, 19, 19, 8, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 22, 22, 22, 61, 55, 55, 55, 247, 224, 224, 224, 255, 246, 246, 246, 255, 246, 246, 246, 255, 207, 207, 207, 255, 40, 40, 40, 234, 13, 13, 13, 37, 0, 0, 0, 0, 19, 19, 19, 18, 28, 28, 28, 209, 174, 174, 174, 255, 246, 246, 246, 255, 246, 246, 246, 255, 243, 243, 243, 255, 95, 95, 95, 255, 26, 26, 26, 128, 6, 6, 6, 0, 0, 0, 0, 0, 19, 19, 19, 25, 27, 27, 27, 199, 137, 137, 137, 255, 245, 245, 245, 255, 246, 246, 246, 255, 246, 246, 246, 255, 220, 220, 220, 255, 67, 67, 67, 252, 25, 25, 25, 110, 6, 6, 6, 0, 255, 255, 255, 80, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 38, 255, 255, 255, 36, 255, 255, 255, 17, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 13, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 139, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 7, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 153, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 181, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 255, 255, 255, 112, 255, 255, 255, 185, 255, 255, 255, 251, 255, 255, 255, 221, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 134, 255, 255, 255, 255, 255, 255, 255, 247, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 110, 58, 0, 242, 215, 113, 212, 237, 227, 188, 255, 194, 173, 89, 193, 124, 114, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 98, 50, 0, 227, 207, 108, 141, 230, 205, 110, 255, 216, 198, 133, 255, 181, 161, 82, 206, 161, 142, 71, 110, 170, 151, 77, 172, 200, 177, 92, 247, 223, 198, 104, 250, 181, 169, 54, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 160, 81, 94, 215, 199, 138, 255, 237, 221, 157, 255, 243, 214, 112, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 14, 0, 0, 209, 28, 238, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 209, 28, 255, 0, 206, 26, 113, 2, 17, 139, 121, 16, 19, 238, 255, 30, 43, 240, 255, 6, 185, 62, 255, 13, 185, 72, 255, 72, 115, 245, 255, 88, 138, 250, 255, 102, 161, 253, 255, 74, 184, 180, 255, 38, 186, 116, 255, 41, 168, 139, 255, 41, 144, 161, 255, 43, 103, 205, 255, 12, 158, 97, 255, 24, 32, 239, 255, 7, 7, 236, 140, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 148, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 167, 255, 255, 255, 153, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 229, 255, 255, 255, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 31, 255, 255, 255, 218, 255, 255, 255, 255, 255, 255, 255, 246, 255, 255, 255, 172, 255, 255, 255, 209, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 255, 255, 255, 164, 255, 255, 255, 243, 255, 255, 255, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 2, 255, 6, 6, 153, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 178, 191, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 12, 255, 4, 39, 23, 255, 8, 77, 23, 255, 8, 77, 23, 255, 8, 77, 23, 255, 8, 77, 22, 255, 8, 127, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 8, 133, 23, 255, 8, 92, 23, 255, 8, 102, 23, 255, 8, 102, 23, 255, 8, 102, 12, 255, 4, 54, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 6, 50, 50, 50, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 78, 78, 78, 255, 25, 25, 25, 33, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 44, 45, 45, 45, 239, 213, 213, 213, 255, 246, 246, 246, 255, 246, 246, 246, 255, 219, 219, 219, 255, 49, 49, 49, 243, 13, 13, 13, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 24, 32, 32, 32, 218, 184, 184, 184, 255, 246, 246, 246, 255, 246, 246, 246, 255, 240, 240, 240, 255, 85, 85, 85, 254, 25, 25, 25, 113, 12, 12, 12, 51, 36, 36, 36, 227, 174, 174, 174, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 194, 194, 194, 255, 46, 46, 46, 240, 24, 24, 24, 75, 6, 6, 6, 0, 0, 0, 0, 0, 255, 255, 255, 36, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 112, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 161, 255, 255, 255, 139, 255, 255, 255, 120, 255, 255, 255, 102, 255, 255, 255, 77, 255, 255, 255, 58, 255, 255, 255, 39, 255, 255, 255, 38, 255, 255, 255, 166, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 183, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 121, 191, 191, 191, 18, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 45, 255, 255, 255, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 255, 255, 255, 168, 255, 255, 255, 167, 255, 255, 255, 5, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 167, 255, 255, 255, 255, 255, 255, 255, 231, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 110, 56, 0, 234, 214, 111, 143, 239, 227, 183, 255, 201, 182, 109, 255, 161, 146, 58, 148, 141, 126, 51, 28, 65, 58, 27, 0, 21, 21, 0, 0, 175, 158, 84, 21, 244, 218, 115, 227, 238, 223, 163, 255, 233, 225, 195, 255, 196, 181, 124, 255, 160, 142, 72, 243, 156, 136, 69, 175, 179, 160, 81, 165, 212, 192, 98, 32, 37, 33, 17, 0, 0, 0, 0, 0, 44, 38, 20, 0, 183, 161, 82, 126, 220, 207, 153, 255, 235, 217, 146, 255, 243, 211, 110, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 14, 0, 0, 208, 27, 190, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 204, 0, 209, 27, 213, 0, 209, 28, 255, 0, 209, 28, 255, 0, 204, 26, 165, 0, 145, 16, 3, 3, 0, 235, 90, 14, 17, 238, 255, 28, 40, 240, 255, 15, 150, 110, 255, 0, 209, 28, 255, 45, 147, 167, 255, 82, 129, 249, 255, 91, 146, 248, 255, 14, 201, 60, 255, 0, 209, 28, 255, 0, 209, 28, 255, 10, 190, 63, 255, 50, 76, 244, 255, 36, 53, 241, 255, 22, 30, 239, 255, 8, 10, 236, 107, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 112, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 172, 255, 255, 255, 255, 255, 255, 255, 195, 255, 255, 255, 36, 255, 255, 255, 25, 255, 255, 255, 115, 255, 255, 255, 142, 255, 255, 255, 98, 255, 255, 255, 142, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 2, 255, 6, 6, 155, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 217, 255, 8, 8, 200, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 6, 6, 180, 191, 1, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 8, 71, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 7, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 24, 24, 24, 108, 26, 26, 26, 186, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 27, 27, 27, 204, 25, 25, 25, 161, 13, 13, 13, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 26, 26, 26, 179, 138, 138, 138, 255, 207, 207, 207, 255, 209, 209, 209, 255, 209, 209, 209, 255, 209, 209, 209, 255, 209, 209, 209, 255, 209, 209, 209, 255, 209, 209, 209, 255, 190, 190, 190, 255, 140, 140, 140, 255, 27, 27, 27, 199, 3, 3, 3, 0, 0, 0, 0, 0, 19, 19, 19, 30, 36, 36, 36, 228, 199, 199, 199, 255, 246, 246, 246, 255, 246, 246, 246, 255, 229, 229, 229, 255, 61, 61, 61, 250, 23, 23, 23, 70, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 31, 35, 35, 35, 226, 194, 194, 194, 255, 246, 246, 246, 255, 246, 246, 246, 255, 236, 236, 236, 255, 76, 76, 76, 253, 53, 53, 53, 248, 205, 205, 205, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 161, 161, 161, 255, 31, 31, 31, 218, 13, 13, 13, 41, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 215, 255, 255, 255, 255, 255, 255, 255, 243, 255, 255, 255, 103, 255, 255, 255, 48, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 47, 255, 255, 255, 101, 255, 255, 255, 102, 255, 255, 255, 102, 255, 255, 255, 32, 255, 255, 255, 184, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 54, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 255, 255, 255, 174, 255, 255, 255, 84, 255, 255, 255, 7, 255, 255, 255, 62, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255, 255, 127, 255, 255, 255, 60, 255, 255, 255, 118, 255, 255, 255, 252, 255, 255, 255, 255, 255, 255, 255, 179, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 159, 82, 27, 224, 201, 109, 237, 235, 228, 197, 255, 194, 178, 119, 255, 157, 139, 71, 253, 136, 121, 59, 190, 109, 100, 33, 97, 87, 77, 37, 15, 207, 184, 96, 40, 244, 218, 115, 202, 229, 206, 115, 255, 231, 218, 166, 255, 236, 230, 206, 255, 212, 203, 167, 255, 177, 162, 101, 255, 159, 141, 72, 231, 122, 108, 55, 141, 152, 135, 69, 66, 180, 158, 83, 95, 196, 174, 91, 242, 240, 232, 202, 255, 233, 208, 110, 218, 149, 146, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 104, 13, 0, 0, 207, 27, 43, 0, 209, 28, 255, 0, 204, 26, 166, 0, 143, 16, 3, 0, 0, 0, 0, 2, 0, 233, 22, 10, 10, 236, 251, 24, 33, 239, 255, 15, 138, 121, 255, 6, 193, 53, 255, 58, 102, 232, 255, 72, 112, 247, 255, 73, 129, 232, 255, 3, 205, 37, 255, 0, 209, 28, 255, 0, 209, 28, 255, 24, 152, 124, 255, 45, 67, 243, 255, 31, 45, 241, 255, 18, 23, 238, 254, 3, 3, 234, 34, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 119, 255, 255, 255, 245, 255, 255, 255, 166, 255, 255, 255, 75, 255, 255, 255, 194, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 154, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 61, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 241, 255, 255, 255, 255, 191, 191, 191, 17, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 255, 255, 255, 70, 255, 255, 255, 220, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 98, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 2, 255, 6, 6, 158, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 216, 191, 5, 5, 25, 191, 4, 4, 14, 255, 7, 7, 197, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 182, 191, 6, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 7, 70, 24, 255, 9, 255, 24, 255, 9, 255, 23, 255, 7, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 23, 23, 23, 108, 99, 99, 99, 255, 215, 215, 215, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 232, 232, 232, 255, 186, 186, 186, 255, 44, 44, 44, 239, 13, 13, 13, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 12, 25, 25, 25, 128, 26, 26, 26, 177, 26, 26, 26, 179, 26, 26, 26, 179, 26, 26, 26, 179, 26, 26, 26, 179, 26, 26, 26, 153, 26, 26, 26, 153, 26, 26, 26, 153, 26, 26, 26, 120, 18, 18, 18, 16, 0, 0, 0, 0, 18, 18, 18, 8, 30, 30, 30, 214, 183, 183, 183, 255, 246, 246, 246, 255, 246, 246, 246, 255, 237, 237, 237, 255, 74, 74, 74, 253, 26, 26, 26, 91, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 39, 39, 39, 39, 233, 203, 203, 203, 255, 246, 246, 246, 255, 246, 246, 246, 255, 240, 240, 240, 255, 237, 237, 237, 255, 246, 246, 246, 255, 246, 246, 246, 255, 243, 243, 243, 255, 122, 122, 122, 255, 25, 25, 25, 187, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 61, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 191, 191, 191, 9, 191, 191, 191, 10, 255, 255, 255, 136, 255, 255, 255, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 255, 255, 255, 82, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 104, 255, 255, 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 239, 255, 255, 255, 155, 255, 255, 255, 68, 255, 255, 255, 86, 255, 255, 255, 176, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 52, 26, 0, 227, 203, 102, 72, 213, 189, 100, 243, 222, 210, 162, 255, 231, 226, 204, 255, 199, 190, 154, 255, 155, 140, 83, 255, 138, 122, 61, 247, 138, 122, 61, 168, 172, 160, 80, 78, 212, 189, 96, 74, 237, 209, 111, 162, 223, 198, 104, 243, 217, 197, 119, 255, 231, 220, 175, 255, 237, 231, 207, 255, 217, 206, 161, 255, 207, 190, 121, 255, 213, 195, 124, 255, 240, 232, 204, 255, 241, 223, 154, 255, 243, 216, 114, 103, 61, 54, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 27, 43, 0, 206, 25, 167, 0, 147, 14, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 4, 3, 235, 158, 18, 22, 238, 255, 11, 135, 118, 255, 31, 97, 189, 255, 52, 78, 244, 255, 60, 92, 245, 255, 65, 101, 246, 255, 31, 157, 131, 255, 0, 209, 28, 255, 6, 193, 54, 255, 44, 79, 230, 255, 37, 54, 241, 255, 24, 34, 239, 255, 9, 12, 235, 176, 1, 1, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 2, 191, 191, 191, 13, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 138, 255, 255, 255, 255, 255, 255, 255, 245, 191, 191, 191, 11, 191, 191, 191, 4, 255, 255, 255, 95, 255, 255, 255, 156, 191, 191, 191, 6, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 50, 128, 128, 128, 0, 191, 191, 191, 22, 255, 255, 255, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 202, 255, 255, 255, 48, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 2, 2, 0, 255, 6, 6, 133, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 214, 191, 5, 5, 24, 0, 0, 0, 0, 0, 0, 0, 0, 191, 3, 3, 13, 255, 8, 8, 195, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 163, 128, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 255, 7, 68, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 26, 26, 26, 179, 209, 209, 209, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 115, 115, 255, 26, 26, 26, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 12, 12, 12, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 12, 12, 12, 0, 13, 13, 13, 0, 13, 13, 13, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 93, 121, 121, 121, 255, 246, 246, 246, 255, 246, 246, 246, 255, 242, 242, 242, 255, 89, 89, 89, 254, 25, 25, 25, 114, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 48, 45, 45, 45, 239, 211, 211, 211, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 86, 86, 86, 254, 20, 20, 20, 146, 12, 12, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 90, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 255, 255, 255, 69, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 5, 255, 255, 255, 46, 255, 255, 255, 73, 255, 255, 255, 91, 255, 255, 255, 110, 255, 255, 255, 128, 255, 255, 255, 153, 255, 255, 255, 172, 255, 255, 255, 179, 255, 255, 255, 153, 255, 255, 255, 38, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 42, 255, 255, 255, 149, 255, 255, 255, 236, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 228, 255, 255, 255, 157, 255, 255, 255, 150, 255, 255, 255, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 112, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 46, 23, 0, 216, 183, 93, 27, 207, 185, 96, 134, 194, 172, 90, 225, 198, 181, 118, 255, 220, 210, 175, 255, 225, 220, 197, 255, 200, 189, 147, 255, 176, 158, 86, 255, 184, 164, 84, 255, 198, 176, 91, 238, 218, 193, 101, 162, 236, 210, 109, 151, 235, 209, 109, 183, 230, 205, 108, 251, 236, 216, 141, 255, 246, 232, 179, 255, 248, 235, 182, 255, 246, 224, 141, 255, 233, 213, 102, 149, 160, 160, 76, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 17, 11, 0, 150, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 176, 21, 9, 9, 236, 226, 17, 56, 203, 255, 31, 44, 240, 255, 39, 59, 242, 255, 46, 70, 243, 255, 50, 77, 244, 255, 48, 86, 229, 255, 3, 198, 44, 255, 32, 98, 190, 255, 36, 53, 241, 255, 27, 38, 240, 255, 16, 20, 238, 234, 3, 3, 117, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 85, 255, 255, 255, 255, 255, 255, 255, 170, 128, 128, 128, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 127, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 183, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 242, 255, 255, 255, 109, 191, 191, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 5, 25, 255, 8, 8, 216, 255, 9, 9, 255, 255, 8, 8, 212, 191, 6, 6, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 4, 4, 12, 255, 8, 8, 193, 255, 9, 9, 255, 255, 9, 9, 231, 255, 2, 2, 41, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 255, 7, 68, 24, 255, 9, 255, 24, 255, 9, 255, 24, 255, 9, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 20, 20, 20, 129, 126, 126, 126, 255, 247, 247, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 223, 255, 55, 55, 55, 250, 24, 24, 24, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 92, 119, 119, 119, 255, 246, 246, 246, 255, 245, 245, 245, 255, 108, 108, 108, 255, 26, 26, 26, 139, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 21, 21, 21, 57, 50, 50, 50, 244, 218, 218, 218, 255, 246, 246, 246, 255, 246, 246, 246, 255, 212, 212, 212, 255, 59, 59, 59, 249, 26, 26, 26, 100, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 30, 255, 255, 255, 128, 255, 255, 255, 167, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 142, 255, 255, 255, 36, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 191, 191, 191, 5, 255, 255, 255, 77, 255, 255, 255, 169, 255, 255, 255, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 203, 191, 191, 191, 10, 255, 255, 255, 34, 255, 255, 255, 120, 255, 255, 255, 173, 255, 255, 255, 141, 255, 255, 255, 52, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 47, 24, 0, 153, 118, 44, 1, 201, 177, 91, 63, 199, 175, 92, 155, 196, 175, 91, 239, 216, 200, 140, 255, 236, 227, 192, 255, 238, 230, 201, 255, 237, 225, 179, 255, 236, 211, 113, 255, 247, 220, 116, 226, 182, 165, 86, 26, 232, 219, 113, 22, 226, 209, 96, 108, 248, 220, 116, 169, 245, 218, 113, 153, 246, 219, 114, 68, 109, 103, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 2, 0, 202, 41, 10, 10, 237, 223, 19, 26, 238, 255, 27, 38, 240, 255, 33, 47, 241, 255, 36, 53, 241, 255, 37, 54, 242, 255, 29, 74, 207, 255, 30, 44, 240, 255, 24, 33, 239, 255, 15, 19, 237, 229, 3, 3, 224, 51, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 89, 191, 191, 191, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 2, 255, 255, 255, 147, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 168, 191, 191, 191, 27, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 5, 24, 255, 8, 8, 171, 191, 6, 6, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 4, 4, 11, 255, 7, 7, 167, 255, 4, 4, 39, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 191, 5, 33, 24, 255, 9, 128, 23, 255, 8, 149, 22, 255, 8, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 6, 23, 23, 23, 148, 27, 27, 27, 222, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 27, 27, 27, 230, 26, 26, 26, 202, 24, 24, 24, 77, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 8, 28, 28, 28, 204, 98, 98, 98, 255, 74, 74, 74, 255, 26, 26, 26, 149, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 24, 24, 24, 67, 54, 54, 54, 248, 179, 179, 179, 255, 158, 158, 158, 255, 40, 40, 40, 234, 13, 13, 13, 61, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 191, 191, 191, 15, 255, 255, 255, 97, 255, 255, 255, 184, 255, 255, 255, 235, 255, 255, 255, 219, 255, 255, 255, 140, 191, 191, 191, 15, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 89, 47, 0, 161, 140, 71, 7, 219, 194, 101, 84, 229, 204, 107, 173, 236, 210, 111, 227, 244, 217, 114, 228, 245, 217, 115, 160, 184, 163, 86, 27, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 16, 0, 124, 110, 58, 0, 122, 108, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 167, 17, 6, 6, 219, 144, 14, 16, 237, 244, 19, 24, 238, 255, 21, 29, 239, 255, 22, 30, 239, 255, 20, 27, 239, 255, 16, 21, 238, 249, 8, 10, 234, 152, 5, 4, 175, 22, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 24, 255, 255, 255, 51, 255, 255, 255, 23, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 35, 0, 10, 0, 70, 0, 10, 0, 70, 0, 137, 5, 73, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 53, 49, 80, 0, 153, 21, 76, 0, 10, 0, 70, 0, 4, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 43, 5, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 109, 215, 13, 0, 104, 151, 12, 0, 99, 88, 10, 0, 99, 87, 9, 0, 47, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 13, 13, 13, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 3, 26, 26, 26, 66, 24, 24, 24, 44, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 24, 24, 24, 51, 24, 24, 24, 157, 24, 24, 24, 139, 18, 18, 18, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 55, 0, 121, 108, 57, 0, 123, 110, 58, 0, 122, 107, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 101, 0, 1, 1, 176, 10, 7, 5, 235, 70, 10, 11, 236, 105, 10, 11, 236, 102, 9, 8, 235, 77, 5, 5, 176, 13, 2, 2, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 23, 46, 0, 128, 50, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 77, 20, 0, 141, 153, 20, 0, 141, 153, 21, 3, 140, 153, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 141, 137, 167, 173, 61, 46, 149, 160, 20, 0, 141, 153, 18, 0, 137, 86, 5, 0, 35, 0, 0, 0, 0, 0, 199, 176, 20, 51, 207, 185, 28, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 209, 188, 30, 179, 204, 182, 25, 179, 190, 160, 6, 67, 45, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 0, 13, 13, 13, 0, 23, 23, 23, 20, 13, 13, 13, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 13, 13, 13, 0, 13, 13, 13, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 0, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 83, 83, 83, 5, 117, 117, 117, 59, 117, 117, 117, 92, 117, 117, 117, 95, 116, 116, 116, 63, 85, 85, 85, 7, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 36, 34, 0, 255, 114, 163, 65, 255, 101, 187, 180, 191, 76, 140, 11, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 23, 3, 141, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 161, 159, 172, 255, 146, 142, 168, 255, 175, 175, 175, 255, 70, 57, 152, 255, 20, 0, 141, 255, 20, 0, 141, 253, 19, 0, 139, 93, 5, 0, 35, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 231, 212, 49, 255, 217, 196, 37, 251, 184, 151, 6, 67, 45, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 26, 24, 24, 24, 160, 42, 42, 42, 246, 67, 67, 67, 255, 35, 35, 35, 236, 26, 26, 26, 133, 16, 16, 16, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 0, 24, 24, 24, 63, 25, 25, 25, 158, 27, 27, 27, 197, 27, 27, 27, 192, 20, 20, 20, 141, 18, 18, 18, 34, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 13, 116, 116, 116, 133, 119, 119, 119, 240, 122, 122, 122, 255, 123, 123, 123, 255, 124, 124, 124, 255, 123, 123, 123, 255, 120, 120, 120, 241, 110, 110, 110, 143, 83, 83, 83, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 47, 27, 0, 214, 155, 142, 79, 255, 106, 184, 252, 255, 102, 188, 255, 255, 102, 187, 192, 191, 73, 137, 11, 0, 0, 0, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 23, 3, 141, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 103, 94, 159, 255, 29, 10, 143, 255, 175, 175, 175, 255, 70, 57, 152, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 233, 213, 50, 255, 229, 209, 47, 255, 206, 184, 27, 251, 188, 158, 10, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 38, 36, 36, 36, 227, 164, 164, 164, 255, 244, 244, 244, 255, 246, 246, 246, 255, 237, 237, 237, 255, 131, 131, 131, 255, 25, 25, 25, 186, 17, 17, 17, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 24, 24, 24, 165, 84, 84, 84, 255, 178, 178, 178, 255, 219, 219, 219, 255, 215, 215, 215, 255, 160, 160, 160, 255, 54, 54, 54, 247, 26, 26, 26, 102, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 36, 116, 116, 116, 216, 118, 118, 118, 255, 126, 126, 126, 255, 131, 131, 131, 255, 132, 132, 132, 255, 133, 133, 133, 255, 132, 132, 132, 255, 129, 129, 129, 255, 125, 125, 125, 255, 121, 121, 121, 226, 113, 113, 113, 44, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 47, 26, 0, 255, 196, 98, 58, 224, 188, 119, 243, 222, 130, 179, 255, 255, 102, 188, 255, 255, 102, 188, 255, 255, 100, 186, 183, 191, 12, 23, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 23, 3, 141, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 103, 94, 159, 255, 29, 10, 143, 255, 175, 175, 175, 255, 70, 57, 152, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 254, 236, 69, 255, 249, 231, 65, 255, 243, 224, 60, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 8, 30, 30, 30, 215, 192, 192, 192, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 141, 141, 141, 255, 26, 26, 26, 175, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 13, 13, 13, 0, 13, 13, 13, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 36, 35, 35, 35, 226, 154, 154, 154, 255, 245, 245, 245, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 78, 78, 78, 254, 26, 26, 26, 97, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 12, 12, 12, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 84, 84, 19, 118, 118, 118, 221, 114, 114, 114, 255, 105, 105, 105, 255, 114, 114, 114, 255, 138, 138, 138, 255, 141, 141, 141, 255, 142, 142, 142, 255, 139, 139, 139, 255, 123, 123, 123, 255, 133, 133, 133, 255, 128, 128, 128, 255, 122, 122, 122, 231, 86, 86, 86, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 47, 26, 0, 255, 191, 102, 58, 248, 196, 98, 242, 225, 175, 80, 255, 193, 158, 94, 255, 221, 129, 178, 255, 252, 102, 184, 254, 231, 97, 152, 83, 64, 13, 23, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 23, 3, 141, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 132, 126, 165, 255, 87, 76, 155, 255, 175, 175, 175, 255, 70, 57, 152, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 26, 26, 26, 125, 132, 132, 132, 255, 246, 246, 246, 255, 246, 246, 246, 255, 244, 244, 244, 255, 199, 199, 199, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 91, 91, 91, 255, 16, 16, 16, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 12, 12, 12, 38, 25, 25, 25, 165, 30, 30, 30, 226, 29, 29, 29, 220, 25, 25, 25, 100, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 31, 35, 35, 35, 225, 191, 191, 191, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 49, 49, 49, 243, 13, 13, 13, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 23, 23, 23, 96, 26, 26, 26, 168, 24, 24, 24, 115, 9, 9, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 17, 75, 75, 75, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 0, 112, 112, 112, 153, 123, 123, 123, 255, 126, 126, 126, 255, 105, 105, 105, 255, 105, 105, 105, 255, 127, 127, 127, 255, 150, 150, 150, 255, 141, 141, 141, 255, 111, 111, 111, 255, 105, 105, 105, 255, 132, 132, 132, 255, 134, 134, 134, 255, 127, 127, 127, 255, 118, 118, 118, 170, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 24, 0, 255, 192, 99, 58, 248, 196, 98, 242, 225, 175, 80, 255, 201, 153, 61, 255, 177, 130, 42, 255, 159, 127, 69, 249, 181, 120, 123, 98, 48, 25, 28, 0, 0, 0, 0, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 23, 3, 141, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 70, 57, 152, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 26, 51, 51, 51, 245, 236, 236, 236, 255, 246, 246, 246, 255, 246, 246, 246, 255, 111, 111, 111, 255, 26, 26, 26, 226, 143, 143, 143, 255, 246, 246, 246, 255, 246, 246, 246, 255, 212, 212, 212, 255, 31, 31, 31, 217, 18, 18, 18, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 22, 22, 22, 75, 46, 46, 46, 240, 175, 175, 175, 255, 244, 244, 244, 255, 230, 230, 230, 255, 66, 66, 66, 254, 26, 26, 26, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 10, 29, 29, 29, 211, 184, 184, 184, 255, 246, 246, 246, 255, 246, 246, 246, 255, 244, 244, 244, 255, 142, 142, 142, 255, 43, 43, 43, 244, 50, 50, 50, 247, 208, 208, 208, 255, 246, 246, 246, 255, 246, 246, 246, 255, 179, 179, 179, 255, 25, 25, 25, 184, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 126, 90, 90, 90, 254, 191, 191, 191, 255, 111, 111, 111, 255, 19, 19, 19, 138, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 43, 103, 103, 103, 194, 75, 75, 75, 12, 0, 0, 0, 0, 0, 0, 0, 0, 100, 100, 100, 18, 120, 120, 120, 250, 128, 128, 128, 255, 111, 111, 111, 255, 105, 105, 105, 255, 111, 111, 111, 255, 150, 150, 150, 255, 159, 159, 159, 255, 137, 137, 137, 255, 105, 105, 105, 255, 105, 105, 105, 255, 109, 109, 109, 255, 117, 117, 117, 255, 119, 119, 119, 255, 120, 120, 120, 254, 113, 113, 113, 34, 64, 0, 0, 0, 255, 3, 3, 18, 255, 5, 5, 26, 255, 5, 5, 26, 255, 5, 5, 26, 255, 5, 5, 26, 255, 5, 5, 26, 255, 7, 7, 20, 128, 4, 4, 0, 128, 5, 5, 0, 128, 5, 5, 0, 128, 5, 5, 0, 128, 5, 5, 0, 128, 5, 5, 0, 64, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 24, 0, 255, 194, 97, 58, 248, 196, 98, 242, 225, 175, 80, 255, 201, 153, 61, 255, 177, 130, 42, 255, 153, 107, 23, 248, 127, 88, 3, 73, 33, 27, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 19, 19, 19, 140, 154, 154, 154, 255, 246, 246, 246, 255, 246, 246, 246, 255, 193, 193, 193, 255, 27, 27, 27, 190, 15, 15, 15, 9, 32, 32, 32, 220, 216, 216, 216, 255, 246, 246, 246, 255, 246, 246, 246, 255, 123, 123, 123, 255, 24, 24, 24, 113, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 43, 54, 54, 54, 247, 221, 221, 221, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 124, 124, 124, 255, 26, 26, 26, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 20, 20, 20, 156, 141, 141, 141, 255, 246, 246, 246, 255, 246, 246, 246, 255, 242, 242, 242, 255, 95, 95, 95, 254, 20, 20, 20, 155, 15, 15, 15, 11, 25, 25, 25, 56, 63, 63, 63, 251, 242, 242, 242, 255, 246, 246, 246, 255, 246, 246, 246, 255, 86, 86, 86, 255, 24, 24, 24, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 24, 24, 24, 83, 74, 74, 74, 253, 240, 240, 240, 255, 246, 246, 246, 255, 234, 234, 234, 255, 26, 26, 26, 214, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 105, 105, 105, 43, 105, 105, 105, 255, 103, 103, 103, 193, 76, 76, 76, 11, 0, 0, 0, 0, 117, 117, 117, 88, 123, 123, 123, 255, 125, 125, 125, 255, 105, 105, 105, 255, 110, 110, 110, 255, 149, 149, 149, 255, 162, 162, 162, 255, 167, 167, 167, 255, 161, 161, 161, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 116, 116, 116, 255, 118, 118, 118, 105, 128, 4, 4, 0, 255, 8, 8, 180, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 8, 8, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 24, 0, 255, 194, 97, 59, 248, 196, 97, 242, 225, 175, 80, 255, 201, 152, 61, 255, 177, 130, 42, 255, 153, 107, 23, 248, 127, 88, 3, 73, 31, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 20, 0, 141, 255, 64, 50, 150, 255, 111, 103, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 113, 105, 161, 255, 89, 78, 156, 255, 22, 2, 141, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 21, 47, 47, 47, 242, 239, 239, 239, 255, 246, 246, 246, 255, 246, 246, 246, 255, 79, 79, 79, 255, 23, 23, 23, 56, 6, 6, 6, 0, 26, 26, 26, 84, 98, 98, 98, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 43, 43, 43, 239, 15, 15, 15, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 7, 28, 28, 28, 207, 193, 193, 193, 255, 246, 246, 246, 255, 246, 246, 246, 255, 238, 238, 238, 255, 174, 174, 174, 255, 45, 45, 45, 240, 12, 12, 12, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 71, 81, 81, 81, 255, 244, 244, 244, 255, 246, 246, 246, 255, 246, 246, 246, 255, 110, 110, 110, 255, 20, 20, 20, 142, 6, 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, 0, 20, 20, 20, 148, 152, 152, 152, 255, 246, 246, 246, 255, 246, 246, 246, 255, 199, 199, 199, 255, 27, 27, 27, 199, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 46, 50, 50, 50, 244, 224, 224, 224, 255, 246, 246, 246, 255, 246, 246, 246, 255, 174, 174, 174, 255, 25, 25, 25, 168, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 105, 105, 105, 214, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 230, 105, 105, 105, 234, 105, 105, 105, 255, 105, 105, 105, 255, 104, 104, 104, 192, 77, 77, 77, 11, 111, 111, 111, 122, 124, 124, 124, 255, 130, 130, 130, 255, 105, 105, 105, 255, 135, 135, 135, 255, 159, 159, 159, 255, 167, 167, 167, 255, 174, 174, 174, 255, 177, 177, 177, 255, 159, 159, 159, 255, 150, 150, 150, 255, 134, 134, 134, 255, 107, 107, 107, 255, 105, 105, 105, 255, 125, 125, 125, 255, 116, 116, 116, 137, 128, 4, 4, 0, 255, 8, 8, 178, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 255, 255, 9, 9, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 24, 0, 255, 194, 97, 59, 248, 195, 98, 242, 225, 175, 80, 255, 201, 152, 61, 255, 177, 129, 42, 255, 153, 107, 23, 248, 129, 85, 3, 73, 31, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 28, 9, 142, 255, 171, 171, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 71, 58, 152, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 20, 20, 20, 140, 151, 151, 151, 255, 246, 246, 246, 255, 246, 246, 246, 255, 183, 183, 183, 255, 26, 26, 26, 178, 12, 12, 12, 0, 0, 0, 0, 0, 3, 3, 3, 1, 26, 26, 26, 195, 194, 194, 194, 255, 246, 246, 246, 255, 246, 246, 246, 255, 150, 150, 150, 255, 19, 19, 19, 144, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 20, 20, 20, 142, 131, 131, 131, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 60, 60, 60, 249, 23, 23, 23, 155, 24, 24, 24, 47, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 6, 30, 30, 30, 216, 209, 209, 209, 255, 246, 246, 246, 255, 246, 246, 246, 255, 160, 160, 160, 255, 25, 25, 25, 177, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 19, 42, 42, 42, 237, 230, 230, 230, 255, 246, 246, 246, 255, 246, 246, 246, 255, 103, 103, 103, 255, 22, 22, 22, 91, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 13, 13, 13, 35, 33, 33, 33, 222, 200, 200, 200, 255, 246, 246, 246, 255, 246, 246, 246, 255, 212, 212, 212, 255, 40, 40, 40, 233, 18, 18, 18, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 105, 105, 105, 238, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 105, 105, 105, 255, 93, 93, 93, 111, 108, 108, 108, 120, 125, 125, 125, 255, 133, 133, 133, 255, 111, 111, 111, 255, 113, 113, 113, 255, 158, 158, 158, 255, 168, 168, 168, 255, 176, 176, 176, 255, 154, 154, 154, 255, 128, 128, 128, 255, 131, 131, 131, 255, 133, 133, 133, 255, 141, 141, 141, 255, 117, 117, 117, 255, 130, 130, 130, 255, 116, 116, 116, 139, 64, 2, 2, 0, 255, 8, 8, 89, 255, 9, 9, 128, 255, 9, 9, 128, 255, 9, 9, 128, 255, 9, 9, 128, 255, 8, 8, 137, 255, 7, 7, 153, 255, 7, 7, 153, 255, 7, 7, 153, 255, 7, 7, 153, 255, 7, 7, 153, 255, 7, 7, 153, 255, 7, 7, 153, 255, 8, 8, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 24, 0, 255, 194, 97, 59, 247, 195, 98, 242, 225, 175, 80, 255, 201, 152, 61, 255, 177, 129, 42, 255, 153, 107, 23, 248, 130, 83, 3, 72, 32, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 36, 19, 144, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 84, 72, 155, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 26, 51, 51, 51, 246, 240, 240, 240, 255, 246, 246, 246, 255, 246, 246, 246, 255, 73, 73, 73, 254, 25, 25, 25, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 53, 71, 71, 71, 254, 245, 245, 245, 255, 246, 246, 246, 255, 241, 241, 241, 255, 65, 65, 65, 252, 15, 15, 15, 58, 0, 0, 0, 0, 6, 6, 6, 0, 24, 24, 24, 86, 79, 79, 79, 254, 242, 242, 242, 255, 246, 246, 246, 255, 246, 246, 246, 255, 104, 104, 104, 255, 26, 26, 26, 106, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 24, 24, 24, 118, 125, 125, 125, 255, 246, 246, 246, 255, 246, 246, 246, 255, 222, 222, 222, 255, 35, 35, 35, 228, 17, 17, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 111, 124, 124, 124, 255, 246, 246, 246, 255, 246, 246, 246, 255, 220, 220, 220, 255, 34, 34, 34, 226, 19, 19, 19, 10, 0, 0, 0, 0, 6, 6, 6, 0, 23, 23, 23, 63, 41, 41, 41, 236, 189, 189, 189, 255, 246, 246, 246, 255, 246, 246, 246, 255, 233, 233, 233, 255, 60, 60, 60, 250, 25, 25, 25, 62, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 105, 105, 105, 166, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 179, 105, 105, 105, 191, 105, 105, 105, 255, 105, 105, 105, 255, 104, 104, 104, 151, 72, 72, 72, 1, 117, 117, 117, 87, 124, 124, 124, 255, 132, 132, 132, 255, 118, 118, 118, 255, 105, 105, 105, 255, 138, 138, 138, 255, 165, 165, 165, 255, 169, 169, 169, 255, 113, 113, 113, 255, 105, 105, 105, 255, 105, 105, 105, 255, 113, 113, 113, 255, 146, 146, 146, 255, 137, 137, 137, 255, 129, 129, 129, 255, 119, 119, 119, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 2, 0, 128, 3, 3, 0, 128, 3, 3, 0, 128, 3, 3, 0, 128, 3, 3, 0, 128, 3, 3, 0, 128, 3, 3, 0, 128, 3, 3, 0, 64, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 32, 0, 255, 194, 109, 58, 247, 196, 98, 242, 225, 174, 80, 255, 201, 152, 61, 255, 177, 129, 42, 255, 153, 107, 23, 248, 130, 83, 3, 72, 32, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 36, 19, 144, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 84, 72, 155, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 19, 19, 19, 32, 20, 20, 20, 169, 159, 159, 159, 255, 246, 246, 246, 255, 246, 246, 246, 255, 189, 189, 189, 255, 26, 26, 26, 180, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 26, 26, 26, 166, 169, 169, 169, 255, 246, 246, 246, 255, 246, 246, 246, 255, 206, 206, 206, 255, 37, 37, 37, 230, 16, 16, 16, 75, 24, 24, 24, 101, 50, 50, 50, 244, 226, 226, 226, 255, 246, 246, 246, 255, 246, 246, 246, 255, 172, 172, 172, 255, 26, 26, 26, 185, 3, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 23, 47, 47, 47, 242, 234, 234, 234, 255, 246, 246, 246, 255, 246, 246, 246, 255, 108, 108, 108, 255, 25, 25, 25, 96, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 7, 34, 34, 34, 226, 223, 223, 223, 255, 246, 246, 246, 255, 246, 246, 246, 255, 135, 135, 135, 255, 26, 26, 26, 146, 19, 19, 19, 18, 25, 25, 25, 129, 60, 60, 60, 250, 214, 214, 214, 255, 246, 246, 246, 255, 246, 246, 246, 255, 244, 244, 244, 255, 89, 89, 89, 254, 25, 25, 25, 103, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 53, 53, 53, 0, 105, 105, 105, 43, 105, 105, 105, 255, 104, 104, 104, 152, 77, 77, 77, 1, 0, 0, 0, 0, 113, 113, 113, 19, 121, 121, 121, 249, 130, 130, 130, 255, 118, 118, 118, 255, 111, 111, 111, 255, 150, 150, 150, 255, 158, 158, 158, 255, 158, 158, 158, 255, 108, 108, 108, 255, 105, 105, 105, 255, 105, 105, 105, 255, 124, 124, 124, 255, 142, 142, 142, 255, 134, 134, 134, 255, 126, 126, 126, 254, 112, 112, 112, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 111, 83, 0, 255, 222, 164, 193, 230, 184, 97, 238, 200, 152, 60, 255, 177, 129, 42, 255, 152, 107, 23, 248, 127, 85, 3, 72, 31, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 36, 19, 144, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 84, 72, 155, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 3, 3, 3, 0, 26, 26, 26, 124, 62, 62, 62, 252, 135, 135, 135, 255, 245, 245, 245, 255, 246, 246, 246, 255, 244, 244, 244, 255, 69, 69, 69, 253, 24, 24, 24, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 30, 45, 45, 45, 240, 225, 225, 225, 255, 246, 246, 246, 255, 246, 246, 246, 255, 203, 203, 203, 255, 107, 107, 107, 255, 124, 124, 124, 255, 223, 223, 223, 255, 246, 246, 246, 255, 246, 246, 246, 255, 223, 223, 223, 255, 43, 43, 43, 237, 20, 20, 20, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 20, 20, 20, 139, 152, 152, 152, 255, 246, 246, 246, 255, 246, 246, 246, 255, 204, 204, 204, 255, 28, 28, 28, 206, 3, 3, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 24, 24, 24, 95, 101, 101, 101, 255, 246, 246, 246, 255, 246, 246, 246, 255, 242, 242, 242, 255, 106, 106, 106, 255, 54, 54, 54, 253, 142, 142, 142, 255, 235, 235, 235, 255, 246, 246, 246, 255, 246, 246, 246, 255, 245, 245, 245, 255, 112, 112, 112, 255, 19, 19, 19, 147, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 43, 100, 100, 100, 153, 74, 74, 74, 1, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 116, 116, 116, 149, 126, 126, 126, 255, 116, 116, 116, 255, 132, 132, 132, 255, 146, 146, 146, 255, 151, 151, 151, 255, 154, 154, 154, 255, 130, 130, 130, 255, 105, 105, 105, 255, 111, 111, 111, 255, 141, 141, 141, 255, 137, 137, 137, 255, 130, 130, 130, 255, 119, 119, 119, 167, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 220, 164, 52, 255, 224, 167, 255, 253, 221, 162, 240, 192, 148, 67, 238, 152, 107, 23, 248, 127, 85, 3, 72, 31, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 36, 19, 144, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 84, 72, 155, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 13, 13, 13, 19, 57, 57, 57, 251, 240, 240, 240, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 152, 152, 152, 255, 26, 26, 26, 155, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 26, 26, 26, 89, 86, 86, 86, 254, 241, 241, 241, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 232, 232, 232, 255, 67, 67, 67, 252, 23, 23, 23, 79, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 37, 37, 37, 235, 239, 239, 239, 255, 246, 246, 246, 255, 246, 246, 246, 255, 84, 84, 84, 255, 16, 16, 16, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 1, 26, 26, 26, 186, 175, 175, 175, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 241, 241, 241, 255, 110, 110, 110, 255, 20, 20, 20, 158, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75, 8, 64, 64, 64, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 16, 120, 120, 120, 219, 124, 124, 124, 255, 134, 134, 134, 255, 139, 139, 139, 255, 143, 143, 143, 255, 145, 145, 145, 255, 144, 144, 144, 255, 108, 108, 108, 255, 132, 132, 132, 255, 137, 137, 137, 255, 131, 131, 131, 255, 125, 125, 125, 227, 88, 88, 88, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 93, 70, 0, 239, 205, 154, 155, 255, 224, 167, 255, 255, 224, 167, 255, 250, 218, 160, 192, 158, 107, 38, 68, 31, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 35, 17, 144, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 82, 70, 154, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 24, 24, 24, 26, 66, 66, 66, 254, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 177, 177, 177, 255, 31, 31, 31, 217, 19, 19, 19, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 134, 86, 86, 86, 254, 227, 227, 227, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 196, 196, 196, 255, 64, 64, 64, 252, 26, 26, 26, 99, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 5, 42, 42, 42, 243, 241, 241, 241, 255, 246, 246, 246, 255, 175, 175, 175, 255, 26, 26, 26, 180, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 29, 37, 37, 37, 228, 188, 188, 188, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 246, 246, 246, 255, 219, 219, 219, 255, 78, 78, 78, 254, 26, 26, 26, 135, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 33, 120, 120, 120, 214, 127, 127, 127, 255, 131, 131, 131, 255, 135, 135, 135, 255, 137, 137, 137, 255, 137, 137, 137, 255, 131, 131, 131, 255, 133, 133, 133, 255, 129, 129, 129, 255, 124, 124, 124, 221, 60, 60, 60, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 79, 62, 18, 85, 78, 65, 246, 242, 210, 153, 151, 255, 221, 163, 50, 128, 111, 83, 0, 50, 37, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 128, 21, 1, 141, 255, 135, 131, 166, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 162, 160, 172, 255, 41, 24, 146, 255, 20, 0, 140, 205, 10, 0, 70, 0, 200, 180, 21, 82, 244, 225, 60, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 255, 237, 70, 255, 249, 230, 64, 255, 202, 180, 23, 108, 0, 0, 0, 0, 10, 10, 10, 0, 24, 24, 24, 161, 95, 95, 95, 255, 137, 137, 137, 255, 86, 86, 86, 255, 26, 26, 26, 195, 19, 19, 19, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 93, 37, 37, 37, 233, 110, 110, 110, 255, 148, 148, 148, 255, 140, 140, 140, 255, 88, 88, 88, 255, 27, 27, 27, 203, 26, 26, 26, 51, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 20, 20, 20, 127, 77, 77, 77, 255, 124, 124, 124, 255, 39, 39, 39, 234, 19, 19, 19, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 37, 29, 29, 29, 209, 114, 114, 114, 255, 189, 189, 189, 255, 212, 212, 212, 255, 188, 188, 188, 255, 117, 117, 117, 255, 31, 31, 31, 221, 21, 21, 21, 83, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 11, 119, 119, 119, 128, 122, 122, 122, 235, 126, 126, 126, 255, 128, 128, 128, 255, 128, 128, 128, 255, 127, 127, 127, 255, 125, 125, 125, 241, 121, 121, 121, 136, 89, 89, 89, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 87, 70, 20, 95, 81, 64, 13, 114, 99, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 141, 102, 20, 0, 141, 204, 20, 0, 141, 204, 32, 14, 143, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 36, 18, 144, 204, 21, 2, 141, 204, 20, 0, 141, 204, 20, 0, 140, 164, 10, 0, 70, 0, 198, 177, 21, 47, 205, 184, 27, 170, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 207, 186, 29, 168, 206, 185, 28, 169, 199, 176, 20, 63, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 3, 26, 26, 26, 72, 26, 26, 26, 93, 26, 26, 26, 51, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 17, 17, 17, 6, 26, 26, 26, 75, 26, 26, 26, 113, 26, 26, 26, 103, 25, 25, 25, 52, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, 26, 26, 26, 59, 26, 26, 26, 92, 19, 19, 19, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 5, 16, 16, 16, 91, 26, 26, 26, 164, 26, 26, 26, 183, 26, 26, 26, 164, 26, 26, 26, 94, 19, 19, 19, 5, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 43, 0, 68, 17, 42, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 111, 102, 60, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 26, 17, 68, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 114, 63, 106, 0, 134, 96, 128, 4, 131, 105, 127, 55, 133, 107, 128, 90, 133, 107, 128, 88, 132, 106, 127, 59, 133, 95, 127, 5, 115, 64, 106, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 85, 34, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 35, 0, 226, 223, 241, 20, 255, 255, 255, 153, 226, 223, 241, 71, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 10, 0, 70, 0, 0, 0, 0, 0, 255, 255, 255, 8, 255, 255, 255, 153, 255, 255, 255, 83, 170, 161, 103, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 99, 88, 10, 0, 162, 151, 74, 0, 233, 225, 167, 10, 241, 235, 196, 51, 241, 235, 196, 27, 226, 215, 138, 0, 49, 43, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 1, 0, 103, 2, 2, 0, 104, 2, 2, 0, 67, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 0, 13, 13, 13, 0, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 255, 255, 255, 255, 131, 255, 255, 255, 25, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 14, 255, 255, 255, 37, 255, 255, 255, 255, 255, 255, 255, 149, 255, 255, 255, 26, 191, 191, 191, 1, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 11, 255, 255, 255, 137, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 164, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 1, 1, 1, 131, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 0, 0, 0, 153, 1, 1, 1, 132, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 150, 2, 0, 0, 153, 74, 2, 2, 153, 192, 4, 4, 173, 231, 5, 5, 200, 231, 5, 5, 201, 194, 4, 4, 175, 77, 2, 2, 153, 3, 0, 0, 153, 0, 0, 0, 151, 0, 0, 0, 93, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 32, 0, 42, 42, 99, 11, 82, 82, 155, 110, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 102, 102, 174, 122, 110, 110, 179, 116, 120, 120, 185, 107, 120, 120, 185, 107, 120, 120, 185, 107, 120, 120, 185, 107, 120, 120, 185, 107, 143, 143, 200, 101, 41, 41, 54, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 21, 255, 255, 255, 51, 255, 255, 255, 36, 191, 191, 191, 2, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 160, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 255, 255, 255, 13, 255, 255, 255, 96, 191, 191, 191, 15, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 17, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 140, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 10, 128, 128, 128, 0, 255, 255, 255, 75, 255, 255, 255, 223, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 189, 255, 255, 255, 237, 255, 255, 255, 255, 255, 255, 255, 158, 128, 128, 128, 0, 0, 0, 0, 0, 1, 1, 1, 67, 60, 60, 60, 248, 188, 188, 188, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 189, 189, 189, 255, 62, 62, 62, 249, 1, 1, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 112, 112, 112, 255, 218, 175, 175, 255, 245, 43, 43, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 246, 41, 41, 255, 219, 172, 172, 255, 118, 118, 118, 255, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 33, 0, 50, 50, 100, 26, 68, 68, 142, 141, 75, 75, 154, 245, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 91, 91, 168, 255, 195, 195, 239, 253, 108, 108, 127, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 19, 255, 255, 255, 125, 255, 255, 255, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 255, 255, 255, 169, 255, 255, 255, 53, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 80, 255, 255, 255, 144, 255, 255, 255, 255, 255, 255, 255, 186, 255, 255, 255, 123, 255, 255, 255, 109, 255, 255, 255, 255, 255, 255, 255, 175, 191, 191, 191, 1, 64, 64, 64, 0, 255, 255, 255, 94, 255, 255, 255, 248, 255, 255, 255, 101, 128, 128, 128, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 70, 255, 255, 255, 134, 255, 255, 255, 255, 255, 255, 255, 196, 255, 255, 255, 128, 255, 255, 255, 30, 255, 255, 255, 170, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 197, 255, 255, 255, 44, 128, 128, 128, 0, 191, 191, 191, 28, 255, 255, 255, 245, 255, 255, 255, 249, 255, 255, 255, 14, 0, 0, 0, 0, 3, 3, 3, 187, 237, 237, 237, 255, 211, 211, 211, 255, 144, 144, 144, 255, 247, 247, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 148, 148, 148, 255, 202, 202, 202, 255, 238, 238, 238, 255, 4, 4, 4, 191, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 206, 253, 201, 201, 255, 255, 19, 19, 255, 255, 6, 6, 255, 255, 34, 34, 255, 255, 135, 135, 255, 255, 185, 185, 255, 255, 186, 186, 255, 255, 137, 137, 255, 255, 37, 37, 255, 255, 6, 6, 255, 255, 17, 17, 255, 254, 197, 197, 255, 20, 20, 20, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 60, 0, 50, 50, 119, 45, 71, 71, 146, 161, 76, 76, 156, 252, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 89, 89, 167, 255, 194, 194, 239, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 50, 255, 255, 255, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 226, 255, 255, 255, 196, 255, 255, 255, 216, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 141, 191, 191, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 33, 255, 255, 255, 255, 255, 255, 255, 118, 0, 0, 0, 0, 255, 255, 255, 76, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 117, 255, 255, 255, 92, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 13, 255, 255, 255, 255, 255, 255, 255, 138, 255, 255, 255, 62, 255, 255, 255, 238, 255, 255, 255, 255, 255, 255, 255, 239, 255, 255, 255, 104, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 2, 255, 255, 255, 231, 255, 255, 255, 255, 255, 255, 255, 25, 0, 0, 0, 0, 30, 30, 30, 221, 255, 255, 255, 255, 74, 74, 74, 255, 0, 0, 0, 255, 176, 176, 176, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 196, 196, 255, 0, 0, 0, 255, 53, 53, 53, 255, 255, 255, 255, 255, 33, 33, 33, 224, 0, 0, 0, 0, 0, 0, 0, 0, 38, 26, 26, 219, 255, 33, 33, 255, 255, 6, 6, 255, 167, 4, 4, 255, 179, 170, 170, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 202, 194, 194, 255, 164, 3, 3, 255, 255, 5, 5, 255, 255, 28, 28, 255, 49, 34, 34, 228, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 65, 0, 64, 64, 128, 66, 69, 69, 143, 182, 76, 76, 158, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 88, 88, 166, 255, 192, 192, 238, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 230, 218, 156, 255, 239, 231, 192, 255, 239, 231, 192, 255, 239, 231, 192, 255, 230, 218, 156, 255, 221, 204, 119, 255, 222, 205, 121, 255, 236, 227, 181, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 236, 227, 181, 255, 222, 205, 121, 255, 221, 204, 119, 255, 230, 218, 156, 255, 239, 231, 192, 255, 239, 231, 192, 255, 239, 231, 192, 255, 230, 218, 156, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 55, 255, 255, 255, 244, 255, 255, 255, 255, 255, 255, 255, 185, 255, 255, 255, 54, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 124, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 177, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 0, 191, 191, 191, 0, 128, 128, 128, 0, 255, 255, 255, 44, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 10, 255, 255, 255, 231, 255, 255, 255, 255, 255, 255, 255, 174, 255, 255, 255, 88, 255, 255, 255, 128, 255, 255, 255, 115, 255, 255, 255, 31, 191, 191, 191, 16, 255, 255, 255, 162, 255, 255, 255, 255, 255, 255, 255, 214, 191, 191, 191, 1, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 193, 193, 193, 255, 113, 113, 113, 255, 240, 240, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 117, 117, 117, 255, 181, 181, 181, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 16, 0, 0, 0, 130, 7, 7, 223, 255, 6, 6, 255, 248, 53, 53, 255, 127, 123, 123, 255, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 249, 255, 250, 145, 145, 255, 233, 9, 9, 255, 255, 6, 6, 255, 255, 6, 6, 255, 137, 7, 7, 231, 19, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 33, 33, 68, 0, 65, 65, 136, 88, 72, 72, 147, 205, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 87, 87, 165, 255, 191, 191, 237, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 84, 255, 141, 44, 92, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 148, 56, 102, 255, 142, 45, 93, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 250, 242, 255, 221, 204, 119, 255, 231, 220, 161, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 232, 220, 161, 255, 221, 204, 119, 255, 252, 250, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 171, 69, 154, 255, 201, 135, 189, 255, 218, 174, 211, 255, 203, 140, 192, 255, 171, 70, 154, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 191, 191, 191, 6, 255, 255, 255, 211, 255, 255, 255, 255, 255, 255, 255, 150, 191, 191, 191, 3, 128, 128, 128, 0, 255, 255, 255, 139, 255, 255, 255, 246, 255, 255, 255, 226, 255, 255, 255, 72, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 229, 255, 255, 255, 255, 255, 255, 255, 117, 64, 64, 64, 0, 64, 64, 64, 0, 191, 191, 191, 4, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 4, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 129, 255, 255, 255, 203, 255, 255, 255, 179, 255, 255, 255, 185, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 255, 255, 255, 39, 255, 255, 255, 15, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 189, 255, 255, 255, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 175, 255, 255, 255, 232, 255, 255, 255, 255, 255, 255, 255, 239, 255, 255, 255, 57, 64, 64, 64, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 95, 1, 1, 0, 218, 5, 5, 243, 255, 6, 6, 255, 255, 187, 187, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 251, 255, 255, 157, 157, 255, 255, 35, 35, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 223, 5, 5, 247, 99, 1, 1, 0, 0, 0, 0, 0, 36, 36, 82, 5, 43, 43, 121, 106, 73, 73, 150, 226, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 85, 85, 164, 255, 189, 189, 236, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 151, 62, 106, 255, 250, 246, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 249, 250, 255, 155, 70, 113, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 251, 244, 255, 221, 204, 119, 255, 233, 223, 169, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 223, 169, 255, 221, 204, 119, 255, 252, 251, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 223, 184, 216, 255, 255, 255, 255, 255, 252, 247, 251, 255, 255, 255, 255, 255, 227, 195, 222, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 255, 255, 255, 96, 255, 255, 255, 255, 255, 255, 255, 209, 191, 191, 191, 4, 0, 0, 0, 0, 255, 255, 255, 20, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 187, 128, 128, 128, 0, 64, 64, 64, 0, 255, 255, 255, 61, 255, 255, 255, 253, 255, 255, 255, 248, 255, 255, 255, 13, 255, 255, 255, 57, 255, 255, 255, 240, 255, 255, 255, 109, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 118, 255, 255, 255, 240, 255, 255, 255, 48, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 194, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 167, 255, 255, 255, 54, 255, 255, 255, 102, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 255, 255, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 47, 255, 255, 255, 184, 255, 255, 255, 246, 255, 255, 255, 255, 255, 255, 255, 231, 255, 255, 255, 159, 255, 255, 255, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 255, 255, 255, 35, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 112, 112, 112, 255, 110, 110, 110, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 255, 0, 0, 5, 254, 6, 6, 255, 255, 10, 10, 255, 255, 251, 251, 255, 255, 255, 255, 255, 255, 252, 252, 255, 255, 164, 164, 255, 251, 36, 36, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 39, 39, 255, 255, 160, 160, 255, 255, 15, 15, 255, 255, 6, 6, 255, 255, 0, 0, 11, 0, 0, 0, 0, 102, 102, 157, 86, 132, 132, 189, 255, 126, 126, 183, 255, 123, 123, 180, 255, 119, 119, 177, 255, 115, 115, 175, 255, 114, 114, 174, 255, 109, 109, 173, 255, 108, 108, 173, 255, 106, 106, 175, 255, 103, 103, 172, 255, 98, 98, 167, 255, 103, 103, 172, 252, 112, 112, 180, 255, 108, 108, 178, 255, 107, 107, 177, 255, 95, 95, 170, 255, 92, 92, 168, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 84, 84, 164, 255, 187, 187, 235, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 251, 244, 255, 221, 204, 119, 255, 233, 223, 169, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 223, 169, 255, 221, 204, 119, 255, 252, 251, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 175, 79, 159, 255, 218, 174, 211, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 223, 185, 217, 255, 255, 255, 255, 255, 216, 169, 208, 255, 170, 68, 153, 255, 211, 158, 202, 255, 255, 255, 255, 255, 225, 189, 219, 255, 221, 180, 214, 255, 221, 180, 214, 255, 218, 173, 210, 255, 175, 78, 158, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 255, 255, 255, 83, 255, 255, 255, 255, 255, 255, 255, 233, 191, 191, 191, 27, 0, 0, 0, 0, 191, 191, 191, 10, 255, 255, 255, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 128, 128, 128, 0, 64, 64, 64, 0, 255, 255, 255, 91, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 10, 255, 255, 255, 44, 255, 255, 255, 251, 255, 255, 255, 251, 255, 255, 255, 61, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 68, 255, 255, 255, 253, 255, 255, 255, 249, 255, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 6, 255, 255, 255, 120, 255, 255, 255, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 18, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 182, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 232, 255, 255, 255, 52, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 57, 255, 255, 255, 213, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 181, 255, 255, 255, 173, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 233, 255, 255, 255, 170, 255, 255, 255, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 10, 10, 10, 255, 9, 9, 9, 255, 246, 246, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 255, 3, 3, 18, 255, 6, 6, 255, 255, 21, 21, 255, 255, 254, 254, 255, 255, 170, 170, 255, 255, 46, 46, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 34, 34, 255, 255, 155, 155, 255, 255, 250, 250, 255, 255, 255, 255, 255, 255, 29, 29, 255, 255, 6, 6, 255, 255, 5, 5, 26, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 137, 137, 193, 255, 141, 141, 195, 255, 141, 141, 196, 255, 175, 175, 223, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 179, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 244, 239, 214, 255, 221, 204, 119, 255, 225, 210, 136, 255, 251, 249, 240, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 251, 250, 240, 255, 225, 210, 136, 255, 221, 204, 119, 255, 244, 239, 213, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 236, 227, 180, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 187, 106, 174, 255, 245, 232, 242, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 248, 239, 246, 255, 255, 255, 255, 255, 201, 136, 190, 255, 170, 68, 153, 255, 196, 126, 184, 255, 255, 255, 255, 255, 248, 240, 247, 255, 247, 236, 245, 255, 247, 236, 245, 255, 244, 231, 242, 255, 186, 104, 173, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 191, 191, 191, 0, 255, 255, 255, 171, 255, 255, 255, 255, 255, 255, 255, 210, 191, 191, 191, 31, 128, 128, 128, 0, 255, 255, 255, 58, 255, 255, 255, 146, 255, 255, 255, 127, 191, 191, 191, 24, 128, 128, 128, 0, 255, 255, 255, 81, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 86, 64, 64, 64, 0, 64, 64, 64, 0, 255, 255, 255, 120, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 64, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 70, 255, 255, 255, 239, 255, 255, 255, 255, 255, 255, 255, 111, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 84, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 60, 128, 128, 128, 0, 191, 191, 191, 8, 255, 255, 255, 216, 255, 255, 255, 255, 255, 255, 255, 209, 255, 255, 255, 97, 191, 191, 191, 7, 64, 64, 64, 0, 64, 64, 64, 0, 255, 255, 255, 74, 255, 255, 255, 248, 255, 255, 255, 255, 255, 255, 255, 211, 255, 255, 255, 146, 255, 255, 255, 244, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 161, 255, 255, 255, 190, 255, 255, 255, 255, 255, 255, 255, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 205, 205, 205, 255, 204, 204, 204, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 189, 1, 1, 2, 250, 5, 5, 253, 255, 6, 6, 255, 255, 50, 50, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 30, 30, 255, 250, 144, 144, 255, 255, 248, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 243, 243, 255, 255, 9, 9, 255, 252, 6, 6, 254, 255, 0, 0, 5, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 223, 207, 126, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 208, 130, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 222, 205, 122, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 224, 209, 133, 255, 222, 205, 122, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 224, 208, 130, 255, 224, 209, 133, 255, 224, 209, 133, 255, 223, 207, 126, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 171, 71, 155, 255, 241, 224, 238, 255, 249, 242, 248, 255, 223, 185, 217, 255, 248, 239, 246, 255, 244, 231, 242, 255, 173, 74, 157, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 204, 255, 255, 255, 255, 255, 255, 255, 234, 255, 255, 255, 106, 191, 191, 191, 10, 255, 255, 255, 0, 191, 191, 191, 0, 255, 255, 255, 31, 255, 255, 255, 150, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 133, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 162, 255, 255, 255, 255, 255, 255, 255, 250, 255, 255, 255, 142, 255, 255, 255, 33, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 37, 255, 255, 255, 148, 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 152, 191, 191, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 33, 255, 255, 255, 234, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 162, 255, 255, 255, 213, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 158, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 217, 255, 255, 255, 255, 255, 255, 255, 134, 191, 191, 191, 5, 191, 191, 191, 6, 255, 255, 255, 71, 255, 255, 255, 88, 255, 255, 255, 77, 255, 255, 255, 199, 255, 255, 255, 255, 255, 255, 255, 224, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 67, 1, 1, 0, 194, 4, 4, 236, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 27, 27, 255, 255, 142, 142, 255, 255, 246, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 247, 247, 255, 255, 158, 158, 255, 255, 6, 6, 255, 199, 5, 5, 242, 81, 1, 1, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 222, 205, 121, 255, 232, 220, 162, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 228, 215, 147, 255, 221, 204, 119, 255, 221, 204, 119, 255, 228, 214, 147, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 234, 223, 171, 255, 232, 220, 162, 255, 222, 205, 121, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 181, 92, 166, 255, 229, 198, 224, 255, 246, 236, 244, 255, 231, 202, 226, 255, 183, 97, 169, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 10, 255, 255, 255, 171, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 255, 255, 255, 217, 255, 255, 255, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 255, 255, 255, 102, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 123, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 117, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 14, 255, 255, 255, 214, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 73, 64, 64, 64, 0, 0, 0, 0, 0, 255, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255, 237, 191, 191, 191, 1, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 10, 255, 255, 255, 136, 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 222, 255, 255, 255, 44, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 222, 255, 255, 255, 255, 102, 102, 102, 255, 17, 17, 17, 255, 222, 222, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 210, 210, 210, 255, 14, 14, 14, 255, 117, 117, 117, 255, 255, 255, 255, 255, 35, 35, 35, 225, 0, 0, 0, 0, 2, 0, 0, 0, 93, 12, 12, 220, 255, 6, 6, 255, 255, 6, 6, 255, 150, 7, 7, 255, 219, 207, 207, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 209, 209, 209, 255, 38, 11, 11, 255, 236, 10, 10, 255, 255, 6, 6, 255, 102, 14, 14, 229, 4, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 234, 223, 170, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 252, 249, 255, 223, 208, 129, 255, 223, 207, 129, 255, 253, 253, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 223, 171, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 71, 255, 255, 255, 186, 255, 255, 255, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 237, 255, 255, 255, 150, 255, 255, 255, 32, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 37, 255, 255, 255, 152, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 255, 255, 255, 150, 255, 255, 255, 32, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 5, 255, 255, 255, 201, 255, 255, 255, 200, 255, 255, 255, 110, 255, 255, 255, 53, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 231, 255, 255, 255, 124, 255, 255, 255, 238, 255, 255, 255, 255, 255, 255, 255, 217, 191, 191, 191, 1, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 234, 255, 255, 255, 254, 255, 255, 255, 63, 128, 128, 128, 0, 255, 255, 255, 73, 255, 255, 255, 221, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 137, 191, 191, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 214, 255, 255, 255, 255, 85, 85, 85, 255, 8, 8, 8, 255, 216, 216, 216, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 202, 202, 202, 255, 6, 6, 6, 255, 101, 101, 101, 255, 255, 255, 255, 255, 24, 24, 24, 217, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 218, 255, 77, 77, 255, 255, 6, 6, 255, 226, 5, 5, 255, 222, 159, 159, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 157, 157, 255, 223, 5, 5, 255, 255, 6, 6, 255, 255, 71, 71, 255, 37, 36, 36, 227, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 240, 228, 234, 255, 238, 224, 231, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 213, 142, 255, 226, 212, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 226, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 191, 191, 191, 1, 255, 255, 255, 34, 255, 255, 255, 21, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 10, 191, 191, 191, 11, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 5, 128, 128, 128, 0, 64, 64, 64, 0, 191, 191, 191, 0, 255, 255, 255, 234, 255, 255, 255, 255, 255, 255, 255, 148, 191, 191, 191, 0, 191, 191, 191, 14, 255, 255, 255, 125, 255, 255, 255, 72, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 118, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 200, 255, 255, 255, 47, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 154, 187, 187, 187, 254, 255, 255, 255, 255, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 242, 242, 255, 255, 255, 255, 255, 190, 190, 190, 254, 1, 1, 1, 157, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 180, 223, 208, 208, 255, 255, 65, 65, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 51, 51, 255, 255, 102, 102, 255, 255, 103, 103, 255, 255, 53, 53, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 60, 60, 255, 227, 209, 209, 255, 5, 5, 5, 187, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 166, 90, 128, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 242, 245, 255, 145, 51, 98, 255, 142, 46, 94, 255, 244, 235, 240, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 213, 142, 255, 226, 212, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 226, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 175, 79, 159, 255, 213, 163, 205, 255, 227, 193, 221, 255, 206, 148, 196, 255, 171, 70, 154, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 182, 255, 255, 255, 255, 255, 255, 255, 62, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 113, 255, 255, 255, 230, 255, 255, 255, 255, 255, 255, 255, 215, 255, 255, 255, 103, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 7, 7, 7, 191, 86, 86, 86, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 86, 86, 86, 255, 7, 7, 7, 193, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 23, 23, 23, 223, 95, 89, 89, 255, 138, 18, 18, 255, 239, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 255, 6, 6, 255, 241, 6, 6, 255, 141, 17, 17, 255, 96, 88, 88, 255, 26, 26, 26, 226, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 144, 50, 98, 255, 151, 62, 107, 255, 139, 40, 90, 255, 147, 54, 101, 255, 169, 94, 131, 255, 208, 168, 188, 255, 253, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 145, 170, 255, 137, 35, 86, 255, 138, 38, 88, 255, 189, 132, 161, 255, 255, 255, 255, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 233, 222, 167, 255, 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 251, 246, 255, 223, 207, 127, 255, 223, 207, 126, 255, 252, 251, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 253, 255, 233, 222, 168, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 172, 72, 155, 255, 239, 219, 235, 255, 254, 252, 253, 255, 243, 230, 241, 255, 255, 255, 255, 255, 222, 182, 215, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 34, 255, 255, 255, 76, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 26, 0, 0, 0, 26, 44, 0, 0, 30, 211, 4, 4, 76, 242, 4, 4, 106, 243, 4, 4, 107, 213, 4, 4, 78, 48, 0, 0, 31, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 172, 172, 221, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 144, 50, 97, 255, 177, 110, 144, 255, 192, 137, 164, 255, 182, 120, 151, 255, 155, 70, 112, 255, 136, 34, 85, 255, 154, 67, 110, 255, 234, 216, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 241, 244, 255, 144, 48, 96, 255, 175, 106, 140, 255, 182, 121, 152, 255, 140, 42, 91, 255, 243, 233, 238, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 229, 215, 150, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 225, 210, 135, 255, 221, 204, 119, 255, 221, 204, 119, 255, 225, 210, 135, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 232, 221, 165, 255, 229, 215, 150, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 179, 88, 164, 255, 227, 194, 221, 255, 230, 199, 224, 255, 230, 199, 224, 255, 235, 210, 230, 255, 255, 255, 255, 255, 199, 132, 188, 255, 170, 68, 153, 255, 218, 174, 211, 255, 255, 254, 254, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 230, 199, 224, 255, 227, 193, 221, 255, 178, 87, 163, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 171, 171, 220, 254, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 216, 216, 255, 253, 108, 108, 128, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 137, 37, 87, 255, 197, 147, 172, 255, 251, 247, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 222, 193, 208, 255, 149, 58, 104, 255, 142, 46, 94, 255, 235, 217, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 195, 144, 170, 255, 137, 36, 86, 255, 234, 217, 226, 255, 240, 228, 234, 255, 139, 39, 89, 255, 187, 128, 158, 255, 172, 101, 137, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 225, 210, 135, 255, 230, 217, 154, 255, 230, 217, 154, 255, 229, 217, 153, 255, 222, 206, 123, 255, 221, 204, 119, 255, 221, 204, 119, 255, 225, 210, 134, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 230, 217, 154, 255, 225, 210, 135, 255, 221, 204, 119, 255, 221, 204, 119, 255, 222, 206, 123, 255, 229, 217, 153, 255, 230, 217, 154, 255, 230, 217, 154, 255, 225, 210, 136, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 183, 97, 169, 255, 236, 212, 232, 255, 238, 218, 235, 255, 238, 218, 235, 255, 242, 226, 239, 255, 255, 255, 255, 255, 195, 123, 183, 255, 170, 68, 153, 255, 214, 164, 206, 255, 255, 255, 255, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 238, 218, 235, 255, 235, 212, 231, 255, 183, 96, 168, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 191, 191, 191, 7, 255, 255, 255, 128, 255, 255, 255, 119, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 143, 255, 255, 255, 124, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 8, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 95, 0, 0, 0, 149, 0, 0, 0, 175, 0, 0, 0, 201, 0, 0, 0, 201, 0, 0, 0, 175, 0, 0, 0, 149, 0, 0, 0, 97, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 207, 207, 249, 204, 99, 99, 121, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 35, 86, 255, 214, 179, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 232, 237, 255, 149, 58, 104, 255, 154, 68, 111, 255, 253, 251, 252, 255, 255, 255, 255, 255, 247, 240, 244, 255, 143, 47, 95, 255, 176, 109, 143, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 124, 155, 255, 140, 41, 90, 255, 164, 86, 125, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 244, 226, 255, 221, 204, 119, 255, 227, 213, 144, 255, 254, 253, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 253, 250, 255, 227, 214, 145, 255, 221, 204, 119, 255, 247, 244, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 180, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 173, 75, 157, 255, 243, 228, 240, 255, 251, 247, 251, 255, 236, 212, 232, 255, 254, 254, 254, 255, 227, 194, 222, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255, 241, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 133, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 114, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 12, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 1, 1, 190, 56, 56, 56, 252, 135, 135, 135, 255, 197, 197, 197, 255, 223, 223, 223, 255, 249, 249, 249, 255, 249, 249, 249, 255, 223, 223, 223, 255, 197, 197, 197, 255, 137, 137, 137, 255, 58, 58, 58, 252, 1, 1, 1, 192, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 198, 198, 243, 86, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 180, 116, 148, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 221, 192, 207, 255, 136, 34, 85, 255, 209, 170, 190, 255, 255, 255, 255, 255, 194, 143, 169, 255, 137, 36, 87, 255, 236, 219, 227, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 230, 236, 255, 139, 40, 90, 255, 137, 37, 87, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 251, 244, 255, 221, 204, 119, 255, 233, 223, 169, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 223, 169, 255, 221, 204, 119, 255, 252, 251, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 179, 87, 164, 255, 221, 181, 214, 255, 234, 210, 230, 255, 214, 165, 206, 255, 173, 75, 157, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 10, 255, 255, 255, 255, 255, 255, 255, 243, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 124, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 105, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1, 1, 1, 184, 89, 89, 89, 255, 221, 221, 221, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 92, 92, 92, 255, 2, 2, 2, 187, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 208, 208, 249, 221, 99, 99, 121, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 233, 214, 223, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 155, 69, 112, 255, 149, 58, 103, 255, 171, 100, 136, 255, 140, 42, 91, 255, 178, 112, 146, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 186, 127, 157, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 251, 244, 255, 221, 204, 119, 255, 233, 223, 169, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 223, 169, 255, 221, 204, 119, 255, 252, 251, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 7, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 114, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 96, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 19, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 78, 38, 38, 38, 242, 203, 203, 203, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 206, 206, 206, 255, 41, 41, 41, 244, 1, 1, 1, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 126, 126, 248, 101, 0, 0, 64, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 142, 46, 94, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 183, 121, 152, 255, 136, 34, 85, 255, 135, 33, 85, 255, 138, 37, 87, 255, 237, 222, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 243, 232, 238, 255, 140, 41, 91, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 249, 238, 255, 221, 204, 119, 255, 230, 217, 154, 255, 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 255, 230, 217, 155, 255, 221, 204, 119, 255, 251, 249, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 227, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 5, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 105, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 88, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 15, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 67, 67, 67, 252, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 207, 207, 255, 132, 132, 132, 255, 202, 202, 202, 255, 255, 255, 255, 255, 255, 255, 255, 255, 205, 205, 205, 255, 130, 130, 130, 255, 205, 205, 205, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 240, 240, 240, 255, 71, 71, 71, 252, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 210, 210, 251, 233, 115, 115, 167, 2, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 148, 57, 103, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 189, 133, 161, 255, 136, 34, 85, 255, 136, 34, 85, 255, 180, 116, 148, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 188, 131, 160, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 228, 215, 147, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 175, 255, 227, 213, 144, 255, 221, 204, 119, 255, 221, 204, 119, 255, 232, 220, 162, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 235, 225, 176, 255, 232, 220, 162, 255, 221, 204, 119, 255, 221, 204, 119, 255, 227, 213, 143, 255, 235, 225, 175, 255, 235, 225, 176, 255, 235, 225, 176, 255, 228, 215, 148, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 204, 142, 194, 255, 239, 219, 235, 255, 239, 219, 235, 255, 204, 143, 194, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 255, 255, 255, 2, 255, 255, 255, 255, 255, 255, 255, 251, 191, 191, 191, 0, 191, 191, 191, 0, 255, 255, 255, 134, 255, 255, 255, 255, 255, 255, 255, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 96, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 80, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 27, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 24, 255, 255, 255, 34, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 70, 255, 255, 255, 189, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 71, 71, 71, 253, 251, 251, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 187, 187, 187, 255, 55, 55, 55, 251, 0, 0, 0, 170, 0, 0, 0, 182, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 184, 0, 0, 0, 167, 52, 52, 52, 250, 183, 183, 183, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 75, 75, 75, 253, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 196, 196, 241, 116, 46, 46, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 138, 38, 88, 255, 251, 248, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 107, 141, 255, 136, 34, 85, 255, 138, 38, 88, 255, 239, 224, 232, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 244, 234, 239, 255, 141, 43, 92, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 199, 131, 188, 255, 255, 255, 255, 255, 236, 213, 232, 255, 236, 213, 232, 255, 255, 255, 255, 255, 199, 132, 188, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 255, 255, 255, 255, 253, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 133, 255, 255, 255, 255, 255, 255, 255, 120, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 51, 255, 255, 255, 202, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 198, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 22, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 75, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 51, 255, 255, 255, 33, 64, 64, 64, 0, 0, 0, 0, 0, 255, 255, 255, 90, 255, 255, 255, 254, 255, 255, 255, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 77, 255, 255, 255, 248, 255, 255, 255, 249, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 39, 39, 39, 243, 239, 239, 239, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 250, 250, 255, 103, 103, 103, 255, 0, 0, 0, 176, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 125, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 172, 97, 97, 97, 255, 249, 249, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 242, 242, 255, 42, 42, 42, 244, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 211, 211, 252, 242, 147, 147, 176, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 217, 184, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 246, 248, 255, 144, 48, 96, 255, 135, 33, 85, 255, 182, 119, 151, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 134, 162, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 229, 217, 153, 255, 252, 251, 244, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 248, 245, 229, 255, 222, 205, 122, 255, 222, 205, 122, 255, 248, 245, 229, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 253, 252, 247, 255, 252, 251, 244, 255, 230, 217, 153, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 187, 104, 173, 255, 244, 231, 242, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 252, 248, 251, 255, 243, 229, 241, 255, 171, 70, 154, 255, 171, 69, 154, 255, 243, 228, 240, 255, 252, 248, 251, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 247, 236, 245, 255, 244, 230, 241, 255, 186, 103, 172, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 252, 255, 255, 255, 255, 191, 191, 191, 1, 128, 128, 128, 0, 255, 255, 255, 131, 255, 255, 255, 255, 255, 255, 255, 242, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 155, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 73, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 54, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 14, 255, 255, 255, 201, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 232, 255, 255, 255, 40, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 126, 255, 255, 255, 255, 255, 255, 255, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 84, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 191, 210, 210, 210, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 249, 249, 255, 70, 70, 70, 252, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 65, 65, 65, 251, 248, 248, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 214, 214, 214, 255, 3, 3, 3, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 157, 86, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 215, 215, 255, 255, 201, 201, 244, 131, 48, 48, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 157, 73, 115, 255, 252, 249, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 143, 169, 255, 136, 34, 85, 255, 136, 34, 85, 255, 204, 160, 182, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 219, 189, 204, 255, 209, 170, 190, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 212, 142, 255, 226, 212, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 226, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 176, 80, 160, 255, 219, 175, 211, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 241, 223, 238, 255, 249, 241, 248, 255, 178, 86, 163, 255, 178, 86, 163, 255, 249, 241, 247, 255, 241, 223, 238, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 221, 180, 214, 255, 218, 174, 211, 255, 175, 79, 159, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 3, 128, 128, 128, 0, 255, 255, 255, 130, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 173, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 69, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 17, 255, 255, 255, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 46, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 119, 255, 255, 255, 255, 255, 255, 255, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 139, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 119, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 74, 96, 96, 96, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 99, 99, 99, 255, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 105, 105, 105, 255, 153, 153, 153, 255, 153, 153, 153, 255, 108, 108, 108, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 93, 93, 93, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 101, 101, 101, 254, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, 161, 78, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 212, 212, 253, 248, 145, 145, 179, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 175, 107, 141, 255, 252, 249, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 212, 175, 193, 255, 137, 36, 87, 255, 135, 33, 84, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 236, 226, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 213, 142, 255, 226, 212, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 226, 179, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 185, 101, 171, 255, 252, 248, 251, 255, 253, 251, 253, 255, 253, 251, 253, 255, 252, 248, 251, 255, 185, 102, 171, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 247, 255, 255, 255, 255, 255, 255, 255, 6, 128, 128, 128, 0, 255, 255, 255, 130, 255, 255, 255, 255, 255, 255, 255, 136, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 26, 255, 255, 255, 17, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 65, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 21, 255, 255, 255, 213, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 240, 255, 255, 255, 51, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 79, 255, 255, 255, 255, 255, 255, 255, 99, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 178, 255, 255, 255, 246, 255, 255, 255, 17, 255, 255, 255, 17, 64, 64, 64, 0, 0, 0, 0, 0, 5, 5, 5, 199, 226, 226, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 182, 182, 182, 254, 1, 1, 1, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 176, 176, 176, 254, 255, 255, 255, 255, 255, 255, 255, 255, 229, 229, 229, 255, 7, 7, 7, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 41, 0, 109, 109, 148, 22, 146, 146, 200, 98, 141, 141, 195, 135, 140, 140, 196, 207, 136, 136, 193, 250, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 215, 215, 255, 255, 205, 205, 247, 147, 49, 49, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 156, 72, 114, 255, 216, 182, 199, 255, 251, 247, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 209, 220, 255, 178, 112, 145, 255, 136, 34, 85, 255, 135, 33, 84, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 235, 225, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 251, 255, 225, 210, 135, 255, 224, 209, 134, 255, 254, 254, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 225, 176, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 183, 95, 168, 255, 214, 164, 205, 255, 214, 164, 205, 255, 183, 95, 168, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 8, 128, 128, 128, 0, 255, 255, 255, 131, 255, 255, 255, 255, 255, 255, 255, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 61, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 25, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 243, 255, 255, 255, 58, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 219, 255, 255, 255, 244, 255, 255, 255, 90, 191, 191, 191, 1, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 11, 255, 255, 255, 137, 255, 255, 255, 255, 255, 255, 255, 152, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 69, 69, 69, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 48, 48, 48, 247, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 42, 42, 42, 245, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 74, 74, 74, 255, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 50, 0, 73, 73, 101, 0, 71, 71, 98, 0, 149, 149, 200, 58, 142, 142, 197, 115, 140, 140, 193, 162, 139, 139, 195, 232, 135, 135, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 213, 213, 254, 253, 149, 149, 181, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 135, 33, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 148, 56, 102, 255, 140, 41, 91, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 224, 208, 130, 255, 238, 229, 187, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 234, 223, 171, 255, 221, 204, 119, 255, 221, 204, 119, 255, 234, 223, 171, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 241, 235, 201, 255, 238, 230, 187, 255, 224, 208, 130, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 255, 255, 255, 255, 253, 253, 254, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 242, 255, 255, 255, 255, 255, 255, 255, 11, 128, 128, 128, 0, 255, 255, 255, 133, 255, 255, 255, 255, 255, 255, 255, 174, 255, 255, 255, 102, 255, 255, 255, 102, 255, 255, 255, 102, 255, 255, 255, 102, 191, 191, 191, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 58, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 30, 255, 255, 255, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 255, 255, 255, 65, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 38, 255, 255, 255, 221, 255, 255, 255, 255, 255, 255, 255, 230, 255, 255, 255, 178, 255, 255, 255, 153, 255, 255, 255, 147, 255, 255, 255, 176, 255, 255, 255, 238, 255, 255, 255, 255, 255, 255, 255, 187, 191, 191, 191, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 147, 147, 147, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 196, 196, 255, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 152, 152, 152, 255, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 73, 98, 0, 72, 72, 100, 0, 111, 111, 149, 15, 146, 146, 201, 88, 127, 127, 175, 126, 141, 141, 196, 198, 137, 137, 194, 247, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 170, 170, 220, 255, 194, 194, 238, 163, 88, 88, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 240, 255, 255, 255, 255, 255, 255, 255, 13, 128, 128, 128, 0, 255, 255, 255, 134, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 54, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 35, 255, 255, 255, 229, 255, 255, 255, 249, 255, 255, 255, 72, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 8, 255, 255, 255, 100, 255, 255, 255, 178, 255, 255, 255, 212, 255, 255, 255, 239, 255, 255, 255, 251, 255, 255, 255, 223, 255, 255, 255, 189, 255, 255, 255, 85, 191, 191, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 215, 215, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 121, 121, 121, 254, 0, 0, 0, 139, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 135, 116, 116, 116, 255, 255, 255, 255, 255, 255, 255, 255, 255, 220, 220, 220, 255, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 36, 0, 74, 74, 100, 0, 71, 71, 98, 0, 147, 147, 200, 47, 143, 143, 198, 110, 140, 140, 194, 150, 140, 140, 195, 225, 135, 135, 192, 254, 134, 134, 191, 255, 134, 134, 191, 255, 169, 169, 219, 254, 172, 172, 233, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 143, 255, 255, 255, 153, 255, 255, 255, 9, 128, 128, 128, 0, 255, 255, 255, 81, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 36, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 40, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 244, 244, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 162, 162, 162, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 60, 60, 60, 255, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 111, 111, 111, 255, 153, 153, 153, 255, 153, 153, 153, 255, 114, 114, 114, 255, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 58, 58, 58, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 160, 160, 160, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 38, 50, 0, 73, 73, 100, 0, 110, 110, 148, 9, 147, 147, 201, 80, 140, 140, 195, 122, 156, 156, 207, 130, 81, 81, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 120, 120, 255, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 185, 185, 185, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 190, 190, 255, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 115, 115, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 15, 15, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 17, 43, 0, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 255, 136, 34, 85, 253, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 221, 204, 119, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 255, 51, 34, 136, 253, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 255, 170, 68, 153, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 54, 0, 0, 0, 85, 0, 0, 0, 84, 0, 0, 0, 51, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 33, 0, 48, 48, 100, 25, 103, 103, 172, 107, 102, 102, 147, 18, 68, 68, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 120, 120, 255, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 185, 185, 185, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 190, 190, 255, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 115, 115, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 27, 27, 27, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 222, 77, 77, 77, 255, 77, 77, 77, 255, 7, 7, 7, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 120, 22, 22, 22, 233, 97, 97, 97, 255, 132, 132, 132, 254, 131, 131, 131, 255, 93, 93, 93, 255, 19, 19, 19, 229, 0, 0, 0, 112, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 33, 0, 46, 46, 98, 23, 69, 69, 143, 146, 75, 75, 156, 250, 77, 77, 159, 255, 85, 85, 164, 251, 109, 109, 179, 167, 134, 134, 195, 69, 65, 65, 96, 0, 34, 34, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 203, 251, 251, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 236, 236, 255, 230, 230, 230, 255, 230, 230, 230, 255, 230, 230, 230, 255, 108, 108, 108, 255, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 167, 167, 167, 255, 230, 230, 230, 255, 230, 230, 230, 255, 171, 171, 171, 255, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 104, 104, 104, 255, 230, 230, 230, 255, 230, 230, 230, 255, 230, 230, 230, 255, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 255, 4, 4, 4, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 64, 0, 20, 1, 128, 0, 15, 1, 128, 0, 20, 0, 255, 13, 39, 3, 255, 60, 39, 2, 255, 105, 34, 1, 255, 74, 15, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 23, 123, 56, 255, 98, 165, 120, 255, 98, 165, 120, 255, 23, 123, 56, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 6, 6, 202, 138, 138, 138, 255, 248, 248, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 245, 245, 255, 130, 130, 130, 255, 3, 3, 3, 194, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 96, 128, 0, 64, 192, 255, 40, 66, 191, 255, 77, 66, 191, 255, 70, 48, 143, 191, 17, 29, 92, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 32, 0, 49, 49, 99, 23, 70, 70, 143, 144, 76, 76, 155, 249, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 99, 99, 173, 224, 119, 119, 185, 118, 105, 105, 147, 18, 68, 68, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 229, 229, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 97, 97, 255, 0, 0, 0, 202, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 179, 0, 0, 0, 200, 91, 91, 91, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 234, 234, 255, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 2, 191, 24, 39, 2, 255, 133, 40, 3, 255, 178, 40, 4, 255, 223, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 38, 2, 255, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 20, 121, 53, 255, 198, 222, 206, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 222, 206, 255, 20, 121, 53, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 6, 6, 202, 189, 189, 189, 255, 255, 255, 255, 255, 231, 231, 231, 255, 121, 121, 121, 255, 71, 71, 71, 255, 74, 74, 74, 255, 125, 125, 125, 255, 235, 235, 235, 255, 255, 255, 255, 255, 178, 178, 178, 254, 4, 4, 4, 192, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 64, 191, 255, 55, 66, 192, 255, 205, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 250, 62, 189, 255, 153, 46, 142, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 58, 91, 6, 70, 70, 141, 141, 75, 75, 155, 249, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 84, 84, 164, 251, 112, 112, 179, 168, 139, 139, 171, 35, 0, 0, 0, 0, 0, 0, 0, 135, 176, 176, 176, 255, 255, 255, 255, 255, 255, 255, 255, 255, 167, 167, 167, 255, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 161, 161, 161, 254, 255, 255, 255, 255, 255, 255, 255, 255, 181, 181, 181, 255, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 191, 2, 40, 4, 255, 198, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 239, 35, 1, 255, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 62, 145, 90, 255, 255, 255, 255, 255, 122, 179, 141, 255, 122, 179, 141, 255, 255, 255, 255, 255, 62, 145, 90, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 78, 175, 159, 255, 141, 203, 193, 255, 141, 203, 193, 255, 78, 175, 158, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 140, 140, 140, 255, 255, 255, 255, 255, 181, 181, 181, 254, 19, 19, 19, 226, 0, 0, 0, 89, 0, 0, 0, 26, 0, 0, 0, 29, 0, 0, 0, 94, 23, 23, 23, 231, 190, 190, 190, 254, 255, 255, 255, 255, 127, 127, 127, 255, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 45, 64, 0, 63, 186, 255, 68, 67, 193, 255, 248, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 206, 49, 142, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 126, 126, 183, 255, 99, 99, 167, 255, 78, 78, 158, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 123, 123, 190, 255, 202, 202, 245, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 56, 98, 98, 98, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 245, 245, 255, 18, 18, 18, 226, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 15, 15, 222, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 102, 102, 102, 255, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 2, 255, 43, 40, 4, 255, 249, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 38, 3, 255, 176, 19, 1, 255, 35, 4, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 45, 135, 75, 255, 253, 254, 253, 255, 185, 215, 195, 255, 185, 215, 195, 255, 253, 254, 253, 255, 45, 135, 75, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 70, 171, 154, 255, 141, 203, 193, 255, 238, 247, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, 247, 246, 255, 140, 203, 193, 255, 70, 171, 154, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 25, 25, 234, 249, 249, 249, 255, 231, 231, 231, 255, 18, 18, 18, 225, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 24, 24, 232, 237, 237, 237, 255, 244, 244, 244, 255, 17, 17, 17, 224, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 48, 143, 191, 12, 66, 193, 255, 232, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 144, 32, 96, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 134, 134, 191, 255, 134, 134, 191, 255, 128, 128, 185, 255, 103, 103, 169, 255, 80, 80, 158, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 77, 77, 159, 255, 102, 102, 176, 255, 181, 181, 231, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 2, 22, 22, 22, 231, 249, 249, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 130, 130, 130, 255, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 123, 123, 123, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 251, 251, 255, 25, 25, 25, 234, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 64, 0, 39, 3, 255, 129, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 239, 36, 1, 255, 71, 9, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 122, 179, 141, 255, 251, 253, 251, 255, 251, 253, 251, 255, 122, 179, 141, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 158, 213, 241, 255, 140, 206, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 113, 190, 178, 255, 219, 239, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 239, 235, 255, 113, 190, 178, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 16, 7, 7, 7, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 43, 43, 43, 251, 255, 255, 255, 255, 255, 255, 255, 255, 46, 46, 46, 252, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 7, 7, 7, 230, 0, 0, 0, 18, 0, 0, 0, 56, 101, 101, 101, 255, 255, 255, 255, 255, 119, 119, 119, 255, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 133, 133, 133, 254, 255, 255, 255, 255, 87, 87, 87, 255, 0, 0, 0, 43, 0, 0, 0, 0, 0, 32, 64, 0, 41, 167, 255, 96, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 244, 46, 141, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 130, 130, 187, 255, 106, 106, 170, 255, 86, 86, 162, 252, 77, 77, 159, 255, 86, 86, 165, 255, 159, 159, 216, 255, 215, 215, 254, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 147, 147, 147, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 42, 42, 42, 243, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 53, 53, 53, 255, 77, 77, 77, 255, 77, 77, 77, 255, 54, 54, 54, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 37, 37, 37, 241, 246, 246, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 152, 152, 152, 255, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 191, 7, 40, 3, 255, 214, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 246, 35, 1, 255, 56, 8, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 190, 218, 199, 255, 190, 218, 199, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 176, 221, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 254, 255, 255, 198, 231, 247, 255, 139, 205, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 91, 180, 165, 255, 192, 226, 220, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 226, 220, 255, 91, 180, 165, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 18, 68, 68, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 73, 73, 73, 255, 0, 0, 0, 20, 0, 0, 0, 89, 138, 138, 138, 254, 255, 255, 255, 255, 69, 69, 69, 255, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 83, 83, 83, 255, 255, 255, 255, 255, 126, 126, 126, 255, 0, 0, 0, 76, 0, 0, 0, 0, 31, 94, 128, 0, 64, 191, 255, 149, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 135, 135, 192, 254, 136, 136, 194, 252, 208, 208, 249, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 22, 22, 22, 230, 243, 243, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 218, 218, 218, 255, 19, 19, 19, 227, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 17, 17, 17, 224, 215, 215, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 245, 245, 255, 25, 25, 25, 233, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 24, 1, 255, 59, 40, 4, 255, 254, 39, 3, 255, 192, 38, 2, 255, 80, 40, 3, 255, 221, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 222, 27, 0, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 27, 124, 59, 255, 65, 146, 92, 255, 33, 128, 65, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 190, 218, 199, 255, 190, 218, 199, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 33, 128, 65, 255, 65, 146, 92, 255, 27, 124, 59, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 172, 219, 243, 255, 209, 235, 248, 255, 255, 255, 255, 255, 204, 233, 248, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 76, 174, 158, 255, 164, 214, 206, 255, 249, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 252, 252, 255, 164, 214, 205, 255, 76, 174, 157, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 18, 68, 68, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 73, 73, 73, 255, 0, 0, 0, 20, 0, 0, 0, 89, 138, 138, 138, 254, 255, 255, 255, 255, 68, 68, 68, 255, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 80, 80, 80, 255, 255, 255, 255, 255, 126, 126, 126, 255, 0, 0, 0, 76, 0, 0, 0, 0, 31, 96, 128, 0, 65, 192, 255, 156, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 191, 255, 56, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 96, 96, 96, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 213, 213, 213, 255, 31, 31, 31, 238, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 28, 28, 28, 236, 209, 209, 209, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 102, 102, 102, 255, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 128, 0, 29, 2, 255, 150, 35, 2, 255, 104, 8, 0, 64, 0, 28, 2, 191, 20, 40, 4, 255, 225, 40, 4, 255, 255, 40, 4, 255, 255, 38, 2, 255, 119, 9, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 50, 138, 80, 255, 230, 241, 234, 255, 255, 255, 255, 255, 242, 247, 244, 255, 73, 151, 100, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 190, 218, 199, 255, 190, 218, 199, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 73, 151, 100, 255, 242, 247, 244, 255, 255, 255, 255, 255, 230, 241, 234, 255, 50, 138, 80, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 201, 232, 247, 255, 254, 255, 255, 255, 152, 211, 240, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 69, 170, 154, 255, 136, 201, 190, 255, 236, 246, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 246, 244, 255, 136, 201, 190, 255, 69, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 16, 7, 7, 7, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 43, 43, 43, 251, 255, 255, 255, 255, 255, 255, 255, 255, 46, 46, 46, 252, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 26, 26, 26, 230, 7, 7, 7, 230, 0, 0, 0, 18, 0, 0, 0, 56, 101, 101, 101, 255, 255, 255, 255, 255, 119, 119, 119, 255, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 131, 131, 131, 254, 255, 255, 255, 255, 88, 88, 88, 255, 0, 0, 0, 43, 0, 0, 0, 0, 15, 44, 64, 0, 63, 186, 255, 113, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 251, 59, 173, 255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, 141, 28, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 143, 143, 143, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 238, 238, 238, 255, 97, 97, 97, 255, 2, 2, 2, 192, 0, 0, 0, 82, 0, 0, 0, 134, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 0, 0, 0, 138, 0, 0, 0, 79, 1, 1, 1, 189, 94, 94, 94, 255, 236, 236, 236, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 148, 148, 148, 255, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 3, 3, 0, 255, 11, 11, 20, 64, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 191, 14, 29, 2, 191, 19, 0, 0, 0, 0, 0, 0, 64, 0, 24, 2, 255, 87, 40, 4, 255, 255, 40, 4, 255, 255, 39, 4, 255, 221, 5, 0, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 14, 14, 13, 191, 13, 13, 8, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 158, 199, 171, 255, 242, 248, 244, 255, 97, 165, 120, 255, 224, 237, 228, 255, 191, 218, 200, 255, 51, 138, 80, 255, 178, 211, 189, 255, 184, 214, 194, 255, 184, 214, 194, 255, 169, 205, 181, 255, 22, 122, 55, 255, 51, 138, 80, 255, 178, 211, 189, 255, 235, 244, 238, 255, 235, 244, 238, 255, 169, 205, 181, 255, 22, 122, 55, 255, 51, 138, 80, 255, 178, 211, 189, 255, 184, 214, 194, 255, 184, 214, 194, 255, 169, 205, 181, 255, 22, 122, 55, 255, 191, 218, 200, 255, 224, 237, 228, 255, 97, 165, 120, 255, 242, 248, 244, 255, 157, 199, 171, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 157, 213, 241, 255, 255, 255, 255, 255, 176, 221, 244, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 84, 177, 162, 255, 191, 226, 220, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 226, 220, 255, 84, 177, 161, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 25, 25, 235, 249, 249, 249, 255, 231, 231, 231, 255, 18, 18, 18, 225, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 24, 24, 232, 237, 237, 237, 255, 244, 244, 244, 255, 16, 16, 16, 224, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 59, 172, 255, 26, 67, 193, 255, 246, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 173, 31, 90, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 142, 27, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 218, 218, 255, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 4, 4, 190, 154, 154, 154, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 255, 116, 116, 116, 255, 44, 44, 44, 255, 175, 175, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 180, 180, 255, 42, 42, 42, 255, 115, 115, 115, 255, 217, 217, 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 158, 158, 158, 255, 4, 4, 4, 194, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 10, 10, 17, 255, 21, 21, 236, 255, 18, 18, 85, 64, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 191, 4, 40, 4, 255, 246, 40, 4, 255, 255, 40, 4, 255, 255, 38, 3, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 255, 20, 20, 46, 255, 21, 21, 217, 255, 20, 20, 86, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 158, 199, 172, 255, 242, 248, 244, 255, 97, 165, 120, 255, 224, 237, 228, 255, 191, 219, 200, 255, 51, 138, 80, 255, 178, 211, 189, 255, 184, 214, 194, 255, 184, 214, 194, 255, 168, 205, 181, 255, 22, 122, 55, 255, 51, 138, 80, 255, 178, 211, 189, 255, 187, 216, 197, 255, 187, 216, 197, 255, 168, 205, 181, 255, 22, 122, 55, 255, 51, 138, 80, 255, 178, 211, 189, 255, 184, 214, 194, 255, 184, 214, 194, 255, 168, 205, 181, 255, 22, 122, 55, 255, 191, 219, 200, 255, 224, 237, 228, 255, 97, 165, 120, 255, 242, 248, 244, 255, 158, 199, 172, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 157, 213, 241, 255, 140, 206, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 140, 206, 239, 255, 255, 255, 255, 255, 192, 228, 246, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 81, 176, 160, 255, 107, 188, 174, 255, 68, 170, 153, 255, 113, 190, 177, 255, 219, 239, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 239, 235, 255, 112, 190, 177, 255, 68, 170, 153, 255, 107, 188, 174, 255, 82, 176, 161, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 139, 139, 139, 255, 255, 255, 255, 255, 182, 182, 182, 254, 19, 19, 19, 227, 0, 0, 0, 90, 0, 0, 0, 28, 0, 0, 0, 30, 0, 0, 0, 96, 23, 23, 23, 232, 191, 191, 191, 254, 255, 255, 255, 255, 127, 127, 127, 255, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 43, 64, 0, 65, 192, 255, 109, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 234, 49, 144, 191, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 43, 0, 145, 145, 199, 86, 139, 139, 194, 227, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 214, 214, 254, 255, 205, 205, 247, 160, 146, 146, 175, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 165, 111, 111, 111, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 116, 116, 116, 255, 0, 0, 0, 169, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 255, 21, 21, 105, 255, 22, 22, 255, 255, 22, 22, 255, 255, 21, 21, 136, 191, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 128, 0, 39, 3, 255, 200, 40, 4, 255, 255, 40, 4, 255, 255, 24, 2, 255, 108, 0, 0, 64, 0, 128, 5, 5, 0, 255, 21, 21, 99, 255, 22, 22, 246, 255, 22, 22, 255, 255, 22, 22, 181, 128, 8, 8, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 51, 138, 80, 255, 230, 241, 234, 255, 255, 255, 255, 255, 242, 247, 244, 255, 73, 151, 100, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 73, 151, 100, 255, 242, 247, 244, 255, 255, 255, 255, 255, 230, 241, 234, 255, 50, 138, 80, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 176, 221, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 240, 248, 253, 255, 156, 213, 241, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 237, 247, 252, 255, 221, 240, 250, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 161, 215, 242, 255, 214, 237, 249, 255, 145, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 254, 254, 254, 255, 184, 223, 216, 255, 86, 178, 163, 255, 70, 171, 154, 255, 142, 204, 193, 255, 239, 248, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 239, 248, 246, 255, 141, 203, 193, 255, 70, 171, 154, 255, 86, 178, 163, 255, 185, 223, 217, 255, 254, 255, 254, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 6, 6, 202, 188, 188, 188, 255, 255, 255, 255, 255, 232, 232, 232, 255, 123, 123, 123, 255, 73, 73, 73, 255, 76, 76, 76, 255, 127, 127, 127, 254, 236, 236, 236, 255, 255, 255, 255, 255, 177, 177, 177, 254, 4, 4, 4, 192, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 65, 191, 255, 103, 67, 193, 255, 242, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 193, 255, 206, 58, 172, 255, 40, 13, 38, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 138, 4, 143, 143, 198, 120, 136, 136, 193, 245, 134, 134, 191, 255, 134, 134, 191, 255, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 215, 215, 255, 255, 215, 215, 255, 255, 210, 210, 251, 230, 196, 196, 240, 71, 49, 49, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 119, 43, 43, 43, 245, 179, 179, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 182, 182, 182, 255, 45, 45, 45, 247, 0, 0, 0, 122, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 255, 22, 22, 199, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 21, 21, 186, 191, 15, 15, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 128, 0, 37, 3, 255, 153, 40, 4, 255, 255, 40, 4, 255, 255, 39, 2, 255, 151, 183, 10, 95, 10, 255, 16, 16, 161, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 251, 255, 10, 10, 24, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 27, 124, 59, 255, 65, 146, 92, 255, 33, 128, 65, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 33, 128, 65, 255, 65, 146, 92, 255, 27, 124, 59, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 175, 221, 244, 255, 243, 250, 253, 255, 226, 243, 251, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 195, 229, 246, 255, 254, 255, 255, 255, 162, 215, 242, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 156, 213, 241, 255, 250, 253, 254, 255, 233, 246, 252, 255, 145, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 251, 250, 255, 155, 209, 200, 255, 73, 172, 156, 255, 79, 175, 159, 255, 171, 217, 209, 255, 251, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 253, 253, 255, 171, 217, 209, 255, 79, 175, 159, 255, 73, 172, 156, 255, 156, 210, 201, 255, 246, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 221, 255, 255, 255, 255, 255, 255, 255, 255, 22, 22, 22, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 6, 6, 201, 136, 136, 136, 255, 247, 247, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 245, 245, 255, 129, 129, 129, 255, 3, 3, 3, 193, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 48, 143, 191, 18, 66, 192, 255, 96, 64, 187, 255, 131, 65, 190, 255, 124, 65, 192, 255, 66, 31, 138, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 50, 0, 111, 111, 150, 20, 142, 142, 197, 154, 135, 135, 192, 253, 134, 134, 191, 255, 147, 147, 201, 255, 215, 215, 255, 255, 214, 214, 254, 255, 205, 205, 247, 162, 144, 144, 180, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 159, 57, 57, 57, 252, 144, 144, 144, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 226, 226, 226, 255, 146, 146, 146, 255, 60, 60, 60, 253, 0, 0, 0, 162, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 18, 18, 39, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 21, 21, 214, 191, 16, 16, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 4, 255, 128, 40, 4, 255, 255, 40, 4, 255, 255, 64, 5, 228, 193, 255, 21, 21, 212, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 20, 20, 115, 72, 65, 31, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 31, 127, 63, 255, 194, 220, 203, 255, 55, 140, 83, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 55, 141, 84, 255, 194, 220, 203, 255, 31, 127, 63, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 198, 230, 247, 255, 252, 254, 255, 255, 139, 205, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 142, 207, 239, 255, 239, 248, 253, 255, 243, 250, 253, 255, 157, 213, 241, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 166, 217, 242, 255, 250, 253, 254, 255, 233, 245, 252, 255, 145, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 229, 243, 241, 255, 125, 196, 184, 255, 68, 170, 153, 255, 97, 183, 168, 255, 201, 230, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 200, 230, 225, 255, 96, 183, 168, 255, 68, 170, 153, 255, 126, 196, 185, 255, 229, 243, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 222, 77, 77, 77, 255, 77, 77, 77, 255, 7, 7, 7, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 118, 20, 20, 20, 231, 93, 93, 93, 255, 130, 130, 130, 255, 129, 129, 129, 255, 89, 89, 89, 255, 18, 18, 18, 227, 0, 0, 0, 111, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 44, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 44, 0, 125, 125, 177, 43, 139, 139, 195, 184, 147, 147, 200, 255, 210, 210, 251, 231, 196, 196, 243, 72, 48, 48, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 106, 0, 0, 0, 185, 30, 30, 30, 238, 57, 57, 57, 255, 83, 83, 83, 255, 84, 84, 84, 255, 58, 58, 58, 255, 32, 32, 32, 239, 0, 0, 0, 187, 0, 0, 0, 107, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 255, 21, 21, 133, 255, 22, 22, 241, 255, 22, 22, 251, 255, 22, 22, 255, 255, 22, 22, 255, 255, 19, 19, 104, 191, 9, 9, 6, 64, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 4, 255, 128, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 188, 228, 16, 47, 32, 255, 21, 21, 192, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 251, 255, 22, 22, 210, 136, 67, 33, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 57, 142, 85, 255, 248, 251, 249, 255, 98, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 98, 165, 120, 255, 248, 251, 249, 255, 57, 142, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 168, 218, 243, 255, 255, 255, 255, 255, 206, 234, 248, 255, 163, 216, 242, 255, 161, 215, 241, 255, 172, 219, 243, 255, 174, 220, 243, 255, 174, 220, 243, 255, 193, 228, 246, 255, 250, 253, 254, 255, 253, 254, 255, 255, 209, 235, 248, 255, 190, 227, 246, 255, 188, 226, 245, 255, 187, 226, 245, 255, 187, 226, 245, 255, 187, 226, 245, 255, 215, 237, 249, 255, 254, 255, 255, 255, 233, 245, 252, 255, 145, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 204, 232, 227, 255, 99, 184, 170, 255, 68, 170, 153, 255, 122, 194, 182, 255, 226, 242, 239, 255, 226, 242, 239, 255, 121, 194, 182, 255, 68, 170, 153, 255, 100, 184, 170, 255, 205, 232, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 22, 61, 61, 61, 26, 61, 61, 61, 26, 61, 61, 61, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 64, 64, 64, 0, 0, 0, 0, 2, 0, 0, 0, 50, 0, 0, 0, 83, 0, 0, 0, 81, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 72, 100, 0, 155, 155, 210, 63, 146, 146, 176, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 95, 58, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 98, 95, 60, 0, 45, 45, 26, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 255, 20, 20, 29, 255, 9, 9, 2, 255, 21, 21, 156, 255, 22, 22, 255, 255, 22, 22, 255, 255, 20, 20, 193, 191, 12, 12, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 4, 255, 128, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 182, 210, 9, 61, 35, 255, 22, 22, 242, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 206, 255, 13, 13, 4, 255, 20, 20, 38, 166, 45, 19, 2, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 57, 142, 85, 255, 248, 251, 249, 255, 98, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 98, 165, 120, 255, 248, 251, 249, 255, 57, 142, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 203, 233, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 223, 244, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 254, 254, 255, 174, 218, 211, 255, 81, 176, 160, 255, 70, 171, 154, 255, 69, 170, 153, 255, 81, 176, 160, 255, 175, 219, 212, 255, 252, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 182, 182, 182, 15, 153, 153, 153, 102, 245, 245, 245, 171, 245, 245, 245, 202, 245, 245, 245, 201, 245, 245, 245, 171, 153, 153, 153, 101, 182, 182, 182, 15, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 83, 255, 255, 255, 79, 62, 62, 62, 0, 39, 39, 39, 0, 184, 184, 184, 30, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 43, 64, 0, 42, 86, 128, 0, 80, 168, 255, 19, 88, 173, 255, 54, 87, 172, 255, 53, 80, 168, 255, 19, 40, 88, 121, 0, 21, 43, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 96, 58, 0, 194, 191, 118, 140, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 196, 192, 120, 153, 195, 191, 120, 153, 188, 184, 112, 80, 48, 47, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 7, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 16, 16, 18, 255, 21, 21, 215, 255, 22, 22, 255, 255, 22, 22, 255, 255, 21, 21, 214, 255, 20, 20, 76, 191, 3, 3, 3, 128, 10, 10, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 64, 0, 38, 3, 255, 131, 40, 4, 255, 255, 40, 4, 255, 255, 75, 6, 216, 210, 255, 22, 22, 229, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 245, 255, 11, 11, 52, 64, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 56, 141, 85, 255, 248, 251, 249, 255, 97, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 97, 165, 120, 255, 248, 251, 249, 255, 56, 141, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 163, 215, 242, 255, 252, 254, 255, 255, 231, 245, 252, 255, 182, 224, 244, 255, 174, 220, 243, 255, 174, 220, 243, 255, 183, 224, 244, 255, 245, 250, 253, 255, 255, 255, 255, 255, 222, 241, 250, 255, 192, 228, 246, 255, 189, 227, 245, 255, 187, 226, 245, 255, 187, 226, 245, 255, 187, 226, 245, 255, 214, 237, 249, 255, 254, 255, 255, 255, 233, 246, 252, 255, 146, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 249, 247, 255, 96, 182, 168, 255, 94, 182, 167, 255, 241, 249, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 114, 114, 114, 0, 244, 244, 244, 102, 246, 246, 246, 233, 244, 244, 244, 167, 244, 244, 244, 92, 245, 245, 245, 55, 245, 245, 245, 55, 244, 244, 244, 92, 244, 244, 244, 168, 245, 245, 245, 232, 244, 244, 244, 100, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 199, 251, 251, 251, 247, 106, 106, 106, 180, 96, 96, 96, 179, 241, 241, 241, 234, 255, 255, 255, 202, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 21, 191, 0, 86, 172, 255, 84, 89, 174, 255, 201, 89, 174, 255, 255, 85, 179, 242, 255, 50, 226, 111, 255, 40, 240, 71, 255, 63, 208, 159, 203, 87, 171, 255, 83, 11, 21, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 239, 242, 181, 255, 204, 203, 132, 254, 193, 191, 119, 93, 49, 47, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 67, 255, 255, 255, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 14, 14, 26, 255, 20, 20, 197, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 21, 21, 230, 255, 21, 21, 172, 255, 13, 13, 117, 255, 20, 20, 63, 255, 20, 20, 42, 255, 20, 20, 26, 191, 14, 14, 10, 128, 10, 10, 0, 255, 19, 19, 20, 255, 21, 21, 34, 228, 17, 49, 51, 71, 5, 221, 187, 40, 4, 255, 255, 40, 4, 255, 255, 130, 11, 157, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 236, 255, 17, 17, 67, 64, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 24, 123, 57, 255, 144, 192, 160, 255, 39, 132, 70, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 39, 132, 70, 255, 144, 192, 160, 255, 23, 123, 56, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 185, 225, 245, 255, 255, 255, 255, 255, 152, 211, 240, 255, 136, 204, 238, 255, 136, 204, 238, 255, 138, 205, 238, 255, 226, 243, 251, 255, 250, 253, 254, 255, 173, 220, 243, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 165, 216, 242, 255, 250, 253, 254, 255, 234, 246, 252, 255, 146, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 114, 114, 114, 0, 237, 237, 237, 144, 246, 246, 246, 209, 242, 242, 242, 41, 120, 120, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, 120, 0, 242, 242, 242, 42, 246, 246, 246, 210, 235, 235, 235, 142, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 168, 255, 255, 255, 255, 241, 241, 241, 217, 243, 243, 243, 221, 255, 255, 255, 255, 255, 255, 255, 152, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 96, 128, 0, 64, 191, 255, 31, 66, 191, 255, 71, 65, 192, 255, 61, 47, 144, 191, 11, 32, 96, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 128, 191, 9, 85, 171, 255, 170, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 59, 215, 141, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 75, 192, 204, 255, 88, 173, 255, 168, 61, 128, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 239, 242, 181, 255, 217, 218, 151, 255, 212, 212, 143, 254, 194, 190, 115, 87, 48, 48, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 137, 255, 255, 255, 143, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 11, 11, 5, 255, 20, 20, 110, 255, 22, 22, 235, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 93, 8, 197, 255, 40, 4, 255, 255, 40, 4, 255, 255, 157, 13, 127, 255, 255, 22, 22, 254, 255, 19, 19, 166, 191, 15, 15, 29, 64, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 211, 236, 249, 255, 244, 250, 253, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 181, 223, 244, 255, 255, 255, 255, 255, 178, 222, 244, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 156, 212, 241, 255, 250, 253, 254, 255, 234, 246, 252, 255, 146, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 227, 170, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 170, 179, 255, 204, 102, 119, 255, 204, 102, 119, 255, 227, 170, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 170, 179, 255, 204, 102, 119, 255, 204, 102, 119, 255, 227, 170, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 227, 170, 179, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 61, 61, 61, 0, 245, 245, 245, 106, 245, 245, 245, 207, 183, 183, 183, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 184, 184, 13, 245, 245, 245, 208, 245, 245, 245, 104, 61, 61, 61, 0, 191, 191, 191, 49, 255, 255, 255, 124, 255, 255, 255, 102, 255, 255, 255, 188, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 225, 225, 101, 165, 165, 165, 26, 165, 165, 165, 26, 126, 126, 126, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 47, 64, 0, 64, 191, 255, 50, 66, 193, 255, 196, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 247, 66, 192, 255, 145, 47, 143, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 101, 191, 1, 87, 172, 255, 171, 86, 179, 243, 255, 63, 209, 158, 255, 63, 209, 159, 255, 86, 178, 244, 255, 53, 222, 121, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 254, 34, 255, 65, 206, 167, 255, 89, 174, 255, 255, 85, 171, 255, 169, 49, 100, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 240, 243, 187, 255, 231, 235, 187, 255, 231, 235, 187, 255, 231, 235, 187, 255, 231, 235, 187, 255, 231, 235, 187, 255, 231, 235, 187, 255, 239, 243, 187, 255, 243, 247, 187, 255, 230, 231, 168, 255, 229, 230, 167, 255, 201, 199, 128, 179, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 207, 255, 255, 255, 225, 191, 191, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 191, 13, 13, 8, 255, 21, 21, 90, 255, 21, 21, 179, 255, 22, 22, 242, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 255, 22, 22, 255, 66, 6, 226, 255, 40, 4, 255, 255, 40, 4, 255, 255, 157, 12, 127, 158, 255, 19, 19, 39, 128, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 31, 127, 63, 255, 194, 220, 203, 255, 55, 140, 83, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 55, 141, 84, 255, 194, 220, 203, 255, 31, 127, 63, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 163, 216, 242, 255, 193, 228, 246, 255, 253, 254, 255, 255, 205, 234, 248, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 228, 244, 251, 255, 232, 245, 252, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 161, 215, 242, 255, 214, 237, 249, 255, 146, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 216, 137, 150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 137, 150, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 184, 184, 184, 20, 246, 246, 246, 234, 238, 238, 238, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 239, 239, 37, 246, 246, 246, 234, 248, 248, 248, 19, 255, 255, 255, 134, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 231, 231, 231, 255, 192, 192, 192, 93, 255, 255, 255, 160, 255, 255, 255, 255, 253, 253, 253, 255, 244, 244, 244, 255, 235, 235, 235, 255, 169, 169, 169, 194, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 63, 189, 255, 63, 67, 193, 255, 246, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 200, 38, 133, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 39, 64, 0, 84, 166, 255, 89, 89, 174, 255, 255, 42, 237, 81, 255, 30, 255, 32, 255, 30, 255, 32, 255, 43, 236, 83, 255, 43, 236, 83, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 254, 34, 255, 81, 183, 228, 255, 89, 174, 255, 255, 89, 174, 255, 255, 87, 171, 255, 87, 21, 43, 64, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 230, 233, 186, 255, 197, 197, 185, 255, 197, 197, 185, 255, 197, 197, 185, 255, 197, 197, 185, 255, 197, 197, 185, 255, 197, 197, 185, 255, 210, 212, 186, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 23, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 191, 12, 12, 4, 255, 20, 20, 49, 255, 21, 21, 89, 255, 21, 21, 123, 255, 21, 21, 147, 255, 21, 21, 153, 255, 20, 20, 155, 255, 21, 21, 153, 255, 19, 19, 145, 180, 14, 102, 133, 41, 4, 254, 255, 40, 4, 255, 255, 40, 4, 255, 252, 19, 0, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 57, 142, 85, 255, 248, 251, 249, 255, 98, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 98, 165, 120, 255, 248, 251, 249, 255, 57, 142, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 176, 221, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 218, 239, 250, 255, 142, 207, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 138, 205, 238, 255, 254, 254, 255, 255, 197, 230, 247, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 96, 183, 168, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 97, 183, 169, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 225, 167, 177, 255, 250, 239, 241, 255, 250, 239, 241, 255, 225, 167, 177, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 243, 243, 243, 114, 243, 243, 243, 156, 119, 119, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 119, 119, 0, 244, 244, 244, 157, 241, 241, 241, 112, 189, 189, 189, 3, 234, 234, 234, 108, 255, 255, 255, 241, 255, 255, 255, 255, 154, 154, 154, 245, 68, 68, 68, 8, 190, 190, 190, 5, 250, 250, 250, 254, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 203, 172, 172, 172, 208, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 143, 191, 10, 66, 193, 255, 228, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 50, 176, 255, 140, 16, 80, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 86, 128, 0, 88, 174, 255, 208, 87, 176, 248, 255, 30, 255, 33, 255, 30, 255, 32, 255, 30, 255, 32, 255, 29, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 29, 255, 31, 255, 29, 255, 31, 255, 34, 250, 46, 255, 50, 227, 109, 255, 85, 180, 239, 255, 88, 173, 255, 206, 43, 86, 128, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 91, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 135, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 128, 10, 74, 0, 128, 9, 9, 0, 128, 10, 10, 0, 128, 8, 72, 0, 24, 2, 255, 96, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 199, 14, 1, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 57, 142, 85, 255, 248, 251, 249, 255, 98, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 98, 165, 120, 255, 248, 251, 249, 255, 57, 142, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 150, 210, 240, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 151, 210, 240, 255, 255, 255, 255, 255, 182, 224, 245, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 83, 177, 161, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 84, 177, 162, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 245, 245, 245, 186, 243, 243, 243, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 77, 246, 246, 246, 184, 0, 0, 0, 167, 0, 0, 0, 210, 167, 167, 167, 245, 255, 255, 255, 255, 197, 197, 197, 253, 137, 137, 137, 13, 255, 255, 255, 73, 255, 255, 255, 255, 243, 243, 243, 251, 251, 251, 251, 62, 170, 170, 170, 8, 169, 169, 169, 208, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 41, 120, 255, 94, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 106, 206, 255, 255, 76, 196, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 193, 255, 242, 45, 141, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 87, 171, 255, 29, 89, 174, 255, 255, 89, 174, 255, 255, 52, 225, 115, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 254, 33, 255, 30, 255, 32, 255, 30, 255, 32, 255, 29, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 49, 228, 104, 255, 89, 174, 255, 255, 85, 173, 255, 27, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 241, 245, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 237, 241, 187, 255, 241, 245, 187, 255, 204, 203, 133, 178, 161, 160, 123, 0, 255, 255, 255, 31, 255, 255, 255, 162, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 220, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 235, 255, 255, 255, 179, 255, 255, 255, 182, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 197, 255, 255, 255, 40, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 191, 14, 19, 1, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 191, 0, 39, 3, 255, 200, 40, 4, 255, 255, 40, 4, 255, 255, 38, 2, 255, 106, 9, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 56, 141, 85, 255, 248, 251, 249, 255, 97, 165, 120, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 97, 165, 120, 255, 248, 251, 249, 255, 56, 141, 85, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 176, 221, 244, 255, 255, 255, 255, 255, 160, 215, 241, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 184, 223, 216, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 223, 216, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 246, 246, 246, 219, 244, 244, 244, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 244, 244, 37, 246, 246, 246, 216, 0, 0, 0, 188, 168, 168, 168, 131, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 253, 253, 254, 255, 255, 255, 38, 153, 153, 153, 8, 169, 169, 169, 208, 159, 159, 159, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 31, 94, 128, 0, 64, 191, 255, 149, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 160, 224, 255, 255, 255, 255, 255, 255, 231, 247, 255, 255, 69, 194, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 192, 255, 49, 0, 0, 0, 0, 0, 0, 0, 0, 88, 173, 255, 64, 89, 174, 255, 255, 89, 174, 255, 255, 67, 203, 173, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 33, 255, 30, 255, 32, 255, 31, 253, 37, 255, 88, 175, 251, 255, 88, 173, 255, 61, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 226, 229, 186, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 191, 191, 185, 255, 229, 233, 186, 255, 204, 203, 133, 178, 97, 96, 59, 0, 64, 64, 64, 0, 191, 191, 191, 25, 255, 255, 255, 177, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 171, 191, 191, 191, 17, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 191, 7, 39, 3, 255, 189, 40, 3, 255, 93, 0, 0, 0, 0, 9, 0, 64, 0, 38, 2, 255, 97, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 238, 27, 0, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 24, 123, 57, 255, 144, 192, 160, 255, 39, 132, 70, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 39, 132, 70, 255, 144, 192, 160, 255, 23, 123, 56, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 143, 207, 239, 255, 237, 247, 252, 255, 239, 248, 253, 255, 139, 205, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 69, 170, 154, 255, 136, 201, 190, 255, 236, 246, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 246, 244, 255, 136, 201, 190, 255, 69, 170, 154, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 246, 246, 246, 224, 245, 245, 245, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 245, 245, 32, 245, 245, 245, 221, 3, 3, 3, 188, 246, 246, 246, 232, 255, 255, 255, 245, 168, 168, 168, 243, 238, 238, 238, 243, 255, 255, 255, 255, 255, 255, 255, 230, 244, 244, 244, 253, 255, 255, 255, 255, 255, 255, 255, 192, 196, 196, 196, 9, 169, 169, 169, 208, 255, 255, 255, 156, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 113, 64, 64, 64, 0, 31, 96, 128, 0, 65, 192, 255, 156, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 210, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 202, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 56, 0, 0, 0, 0, 0, 0, 0, 0, 87, 172, 255, 66, 89, 174, 255, 255, 89, 174, 255, 255, 49, 228, 107, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 31, 254, 35, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 255, 33, 255, 34, 249, 49, 255, 89, 174, 255, 255, 88, 173, 255, 64, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 90, 255, 255, 255, 236, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 255, 255, 255, 102, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 191, 2, 37, 3, 255, 170, 40, 4, 255, 255, 36, 2, 255, 130, 24, 0, 191, 4, 38, 2, 255, 106, 40, 4, 255, 250, 40, 4, 255, 255, 40, 4, 255, 255, 38, 2, 255, 116, 9, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 21, 121, 54, 255, 51, 139, 80, 255, 24, 123, 57, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 24, 123, 57, 255, 51, 139, 80, 255, 21, 121, 54, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 137, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 165, 216, 242, 255, 189, 227, 245, 255, 241, 249, 253, 255, 253, 254, 255, 255, 164, 216, 242, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 76, 174, 158, 255, 165, 214, 206, 255, 249, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 252, 252, 255, 165, 214, 206, 255, 76, 174, 158, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 245, 245, 245, 196, 214, 214, 214, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 64, 245, 245, 245, 194, 0, 0, 0, 188, 108, 108, 108, 64, 170, 170, 170, 14, 0, 0, 0, 215, 197, 197, 197, 219, 255, 255, 255, 255, 240, 240, 240, 126, 90, 90, 90, 218, 215, 215, 215, 234, 255, 255, 255, 141, 183, 183, 183, 8, 169, 169, 169, 208, 255, 255, 255, 221, 255, 255, 255, 26, 255, 255, 255, 50, 255, 255, 255, 188, 128, 128, 128, 0, 14, 46, 64, 0, 61, 188, 255, 115, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 252, 50, 187, 255, 19, 0, 0, 0, 0, 0, 0, 0, 0, 87, 171, 255, 34, 89, 174, 255, 255, 89, 174, 255, 255, 54, 221, 125, 255, 30, 255, 32, 255, 30, 255, 32, 255, 30, 254, 33, 255, 30, 254, 34, 255, 72, 197, 191, 255, 66, 205, 168, 255, 30, 255, 33, 255, 30, 255, 32, 255, 30, 255, 32, 255, 63, 209, 158, 255, 89, 174, 255, 255, 86, 171, 255, 32, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 23, 255, 255, 255, 218, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 255, 255, 255, 44, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 1, 128, 0, 29, 2, 255, 149, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 237, 40, 4, 255, 242, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 191, 24, 0, 191, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 43, 134, 73, 255, 220, 235, 225, 255, 255, 255, 255, 255, 233, 242, 236, 255, 63, 145, 91, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 64, 146, 91, 255, 233, 242, 236, 255, 255, 255, 255, 255, 220, 235, 225, 255, 43, 134, 73, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 177, 222, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 233, 245, 252, 255, 160, 214, 241, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 91, 181, 166, 255, 193, 227, 221, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 226, 220, 255, 91, 181, 166, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 245, 245, 245, 130, 183, 183, 183, 136, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 0, 215, 215, 215, 138, 224, 224, 224, 128, 0, 0, 0, 188, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 215, 153, 153, 153, 208, 255, 255, 255, 255, 211, 211, 211, 44, 77, 77, 77, 215, 168, 168, 168, 215, 159, 159, 159, 0, 153, 153, 153, 8, 169, 169, 169, 208, 255, 255, 255, 218, 128, 128, 128, 0, 255, 255, 255, 28, 255, 255, 255, 188, 128, 128, 128, 0, 0, 0, 0, 0, 51, 186, 255, 29, 67, 193, 255, 247, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 191, 255, 177, 28, 93, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 86, 128, 0, 89, 174, 255, 217, 89, 174, 255, 255, 80, 185, 223, 255, 34, 250, 46, 255, 30, 255, 32, 255, 30, 255, 32, 255, 39, 242, 68, 255, 88, 176, 250, 255, 47, 231, 98, 255, 30, 255, 32, 255, 30, 255, 32, 255, 41, 239, 76, 255, 89, 174, 255, 255, 88, 174, 255, 215, 43, 86, 128, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 224, 227, 186, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 228, 231, 186, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 1, 64, 0, 39, 3, 255, 125, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 201, 28, 1, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 152, 196, 167, 255, 245, 250, 247, 255, 114, 174, 134, 255, 230, 240, 233, 255, 187, 216, 197, 255, 39, 131, 70, 255, 149, 194, 164, 255, 155, 198, 169, 255, 155, 198, 169, 255, 140, 189, 157, 255, 19, 120, 53, 255, 39, 131, 70, 255, 149, 194, 164, 255, 155, 198, 169, 255, 155, 198, 169, 255, 140, 189, 157, 255, 19, 120, 53, 255, 39, 131, 70, 255, 149, 194, 164, 255, 155, 198, 169, 255, 155, 198, 169, 255, 140, 189, 157, 255, 19, 120, 53, 255, 187, 216, 197, 255, 230, 240, 233, 255, 115, 175, 135, 255, 245, 250, 247, 255, 152, 196, 167, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 137, 204, 238, 255, 159, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 160, 214, 241, 255, 146, 208, 239, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 114, 191, 178, 255, 220, 239, 236, 255, 255, 255, 255, 255, 255, 255, 255, 255, 119, 193, 181, 255, 118, 193, 180, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 239, 235, 255, 113, 191, 178, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 241, 241, 241, 36, 246, 246, 246, 233, 183, 183, 183, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 183, 183, 19, 246, 246, 246, 234, 180, 180, 180, 35, 0, 0, 0, 188, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 215, 87, 87, 87, 208, 181, 181, 181, 56, 102, 102, 102, 0, 77, 77, 77, 215, 168, 168, 168, 215, 84, 84, 84, 0, 153, 153, 153, 8, 169, 169, 169, 208, 255, 255, 255, 218, 128, 128, 128, 0, 255, 255, 255, 28, 255, 255, 255, 188, 128, 128, 128, 0, 0, 0, 0, 0, 13, 47, 64, 0, 66, 192, 255, 115, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 237, 32, 180, 255, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 42, 64, 0, 88, 170, 255, 101, 89, 174, 255, 255, 89, 174, 255, 255, 82, 183, 230, 255, 60, 213, 148, 255, 61, 211, 152, 255, 85, 180, 239, 255, 89, 174, 255, 255, 33, 250, 44, 255, 30, 255, 32, 255, 30, 254, 33, 255, 30, 255, 33, 255, 84, 180, 239, 255, 85, 173, 255, 100, 20, 43, 64, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 79, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 142, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 64, 0, 37, 3, 255, 102, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 248, 39, 3, 255, 141, 29, 0, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 161, 201, 174, 255, 240, 246, 242, 255, 77, 153, 102, 255, 218, 234, 224, 255, 196, 221, 204, 255, 62, 145, 90, 255, 227, 239, 231, 255, 236, 244, 239, 255, 236, 244, 239, 255, 210, 229, 216, 255, 25, 124, 58, 255, 62, 145, 90, 255, 227, 239, 231, 255, 236, 244, 239, 255, 236, 244, 239, 255, 210, 229, 216, 255, 25, 124, 58, 255, 62, 145, 90, 255, 227, 239, 231, 255, 236, 244, 239, 255, 236, 244, 239, 255, 210, 229, 216, 255, 25, 124, 58, 255, 196, 221, 204, 255, 218, 234, 224, 255, 77, 153, 102, 255, 240, 246, 242, 255, 161, 201, 174, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 70, 171, 154, 255, 141, 203, 193, 255, 239, 248, 246, 255, 119, 193, 181, 255, 118, 193, 180, 255, 239, 248, 246, 255, 141, 203, 193, 255, 70, 171, 154, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 111, 111, 111, 0, 235, 235, 235, 141, 245, 245, 245, 176, 166, 166, 166, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 2, 245, 245, 245, 177, 235, 235, 235, 139, 111, 111, 111, 0, 0, 0, 0, 188, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 215, 77, 77, 77, 208, 68, 68, 68, 8, 39, 39, 39, 0, 77, 77, 77, 215, 168, 168, 168, 215, 84, 84, 84, 0, 153, 153, 153, 8, 169, 169, 169, 208, 255, 255, 255, 218, 128, 128, 128, 0, 255, 255, 255, 28, 255, 255, 255, 188, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 48, 64, 0, 66, 192, 255, 112, 67, 193, 255, 245, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 66, 193, 255, 213, 61, 181, 255, 45, 7, 43, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 123, 191, 4, 88, 173, 255, 187, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 48, 230, 101, 255, 30, 255, 32, 255, 30, 255, 32, 255, 36, 245, 58, 255, 86, 174, 252, 186, 63, 128, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 161, 255, 255, 255, 255, 255, 255, 255, 204, 191, 191, 191, 30, 191, 191, 191, 12, 255, 255, 255, 161, 255, 255, 255, 255, 255, 255, 255, 233, 191, 191, 191, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 191, 3, 29, 2, 255, 145, 40, 4, 255, 243, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 40, 4, 255, 255, 39, 3, 255, 112, 32, 2, 255, 22, 8, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 59, 143, 87, 255, 240, 246, 242, 255, 255, 255, 255, 255, 248, 251, 249, 255, 85, 157, 109, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 85, 157, 109, 255, 248, 251, 249, 255, 255, 255, 255, 255, 239, 246, 242, 255, 59, 143, 87, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 78, 175, 159, 255, 84, 177, 162, 255, 84, 177, 162, 255, 78, 175, 159, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 177, 177, 177, 5, 245, 245, 245, 187, 244, 244, 244, 171, 183, 183, 183, 12, 59, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 183, 183, 183, 13, 245, 245, 245, 172, 244, 244, 244, 186, 176, 176, 176, 5, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 215, 77, 77, 77, 208, 68, 68, 68, 8, 39, 39, 39, 0, 77, 77, 77, 215, 168, 168, 168, 215, 84, 84, 84, 0, 153, 153, 153, 8, 169, 169, 169, 208, 255, 255, 255, 218, 128, 128, 128, 0, 255, 255, 255, 28, 255, 255, 255, 188, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 40, 64, 0, 57, 167, 255, 23, 237, 249, 255, 215, 255, 255, 255, 255, 255, 255, 255, 255, 155, 222, 255, 99, 44, 134, 191, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 129, 191, 16, 87, 173, 255, 189, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 85, 179, 240, 255, 57, 217, 137, 255, 51, 225, 115, 255, 76, 187, 217, 188, 64, 129, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 224, 227, 186, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 228, 231, 186, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 5, 255, 255, 255, 238, 255, 255, 255, 162, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 91, 255, 255, 255, 242, 255, 255, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 1, 128, 0, 29, 0, 191, 15, 38, 2, 255, 113, 39, 4, 255, 222, 40, 4, 255, 255, 40, 4, 255, 255, 38, 3, 255, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 36, 130, 68, 255, 86, 158, 110, 255, 45, 135, 75, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 45, 135, 75, 255, 86, 158, 110, 255, 36, 130, 68, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 181, 181, 181, 6, 240, 240, 240, 151, 246, 246, 246, 229, 242, 242, 242, 118, 244, 244, 244, 42, 183, 183, 183, 6, 183, 183, 183, 6, 245, 245, 245, 42, 243, 243, 243, 119, 246, 246, 246, 230, 239, 239, 239, 149, 180, 180, 180, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 215, 77, 77, 77, 208, 69, 69, 69, 8, 58, 58, 58, 0, 77, 77, 77, 215, 168, 168, 168, 215, 126, 126, 126, 0, 155, 155, 155, 8, 169, 169, 169, 208, 255, 255, 255, 218, 191, 191, 191, 0, 255, 255, 255, 28, 255, 255, 255, 188, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 128, 191, 4, 87, 172, 255, 107, 88, 173, 255, 224, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 89, 174, 255, 255, 88, 174, 255, 223, 88, 171, 255, 106, 55, 123, 191, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 60, 0, 218, 219, 152, 252, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 243, 247, 187, 255, 204, 203, 133, 178, 97, 96, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 66, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 34, 255, 255, 255, 121, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 64, 0, 20, 0, 191, 3, 39, 3, 255, 79, 39, 3, 255, 189, 34, 3, 255, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 117, 117, 0, 240, 240, 240, 48, 243, 243, 243, 150, 246, 246, 246, 221, 246, 246, 246, 251, 246, 246, 246, 250, 246, 246, 246, 220, 243, 243, 243, 150, 240, 240, 240, 47, 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 198, 77, 77, 77, 162, 78, 78, 78, 230, 78, 78, 78, 230, 77, 77, 77, 180, 168, 168, 168, 180, 169, 169, 169, 230, 169, 169, 169, 230, 167, 167, 167, 162, 255, 255, 255, 199, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 143, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 43, 64, 0, 44, 86, 128, 0, 86, 171, 255, 41, 88, 173, 255, 76, 88, 173, 255, 76, 87, 172, 255, 40, 44, 86, 128, 0, 22, 42, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 61, 0, 205, 203, 134, 220, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 215, 215, 148, 235, 199, 196, 125, 155, 97, 95, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 7, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 2, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 128, 0, 18, 0, 255, 10, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 17, 119, 51, 255, 136, 204, 238, 253, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 136, 204, 238, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 68, 170, 153, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 204, 102, 119, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, 120, 0, 123, 123, 123, 0, 123, 123, 123, 0, 123, 123, 123, 0, 123, 123, 123, 0, 120, 120, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 38, 38, 0, 39, 39, 39, 0, 39, 39, 39, 0, 38, 38, 38, 0, 83, 83, 83, 0, 84, 84, 84, 0, 84, 84, 84, 0, 83, 83, 83, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 97, 61, 0, 98, 96, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 55, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 65, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 9, 60, 26, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 68, 102, 119, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 34, 85, 77, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 102, 51, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 52, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 116, 255, 255, 255, 68, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 101, 0, 0, 0, 133, 0, 0, 0, 153, 0, 0, 0, 123, 0, 0, 0, 67, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 195, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 223, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 31, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 138, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 132, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 54, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 167, 191, 0, 252, 254, 255, 197, 255, 255, 255, 255, 255, 255, 255, 255, 217, 242, 255, 45, 16, 48, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 145, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 83, 255, 255, 255, 138, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 253, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 207, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 255, 25, 25, 25, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 15, 15, 15, 255, 62, 62, 62, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 57, 57, 57, 255, 20, 20, 20, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 23, 23, 23, 255, 55, 55, 55, 255, 42, 42, 42, 255, 0, 0, 0, 255, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 125, 255, 255, 255, 199, 255, 255, 255, 50, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 46, 64, 0, 58, 185, 255, 44, 66, 192, 255, 188, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 202, 255, 243, 66, 192, 255, 137, 49, 142, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 255, 50, 50, 50, 255, 169, 169, 169, 255, 209, 209, 209, 255, 230, 230, 230, 255, 195, 195, 195, 255, 111, 111, 111, 255, 2, 2, 2, 255, 0, 0, 0, 213, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 255, 207, 207, 207, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 50, 50, 50, 255, 208, 208, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 190, 190, 255, 68, 68, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 75, 75, 75, 255, 183, 183, 183, 255, 247, 247, 247, 255, 17, 17, 17, 255, 0, 0, 0, 255, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 123, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 147, 191, 191, 191, 16, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 46, 64, 0, 54, 188, 255, 58, 67, 193, 255, 243, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 66, 191, 255, 194, 49, 142, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 13, 13, 13, 255, 237, 237, 237, 255, 255, 255, 255, 255, 237, 237, 237, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 120, 120, 255, 0, 0, 0, 255, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 50, 50, 50, 255, 208, 208, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 190, 190, 255, 68, 68, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 75, 75, 75, 255, 183, 183, 183, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 232, 255, 255, 255, 93, 191, 191, 191, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 141, 191, 9, 67, 193, 255, 226, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 135, 17, 48, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 59, 59, 59, 255, 255, 255, 255, 255, 217, 217, 217, 255, 13, 13, 13, 255, 2, 2, 2, 255, 163, 163, 163, 255, 255, 255, 255, 255, 186, 186, 186, 255, 0, 0, 0, 255, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 50, 50, 50, 255, 208, 208, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 190, 190, 255, 68, 68, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 75, 75, 75, 255, 183, 183, 183, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 118, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 193, 255, 255, 255, 43, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 191, 255, 91, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 241, 45, 140, 191, 7, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 252, 77, 77, 77, 255, 255, 255, 255, 255, 178, 178, 178, 255, 0, 0, 0, 255, 0, 0, 0, 255, 113, 113, 113, 255, 255, 255, 255, 255, 187, 187, 187, 255, 0, 0, 0, 255, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 166, 166, 166, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 43, 43, 43, 255, 147, 147, 147, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 138, 138, 138, 255, 62, 62, 62, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 67, 67, 67, 255, 134, 134, 134, 255, 179, 179, 179, 255, 28, 28, 28, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 139, 191, 191, 191, 12, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 32, 93, 128, 0, 65, 190, 255, 148, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 192, 255, 49, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 49, 49, 49, 255, 255, 255, 255, 255, 253, 253, 253, 255, 138, 138, 138, 255, 114, 114, 114, 255, 236, 236, 236, 255, 255, 255, 255, 255, 152, 152, 152, 255, 0, 0, 0, 255, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 71, 71, 71, 255, 51, 51, 51, 255, 14, 14, 14, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 17, 17, 17, 255, 49, 49, 49, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 59, 59, 59, 255, 7, 7, 7, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 12, 12, 12, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 113, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 255, 255, 255, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 32, 95, 128, 0, 65, 192, 255, 155, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 58, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 12, 12, 12, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 90, 90, 90, 255, 0, 0, 0, 254, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 198, 198, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 110, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 181, 255, 255, 255, 40, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 65, 192, 255, 117, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 253, 61, 181, 255, 21, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 148, 0, 0, 0, 255, 196, 196, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 246, 246, 255, 17, 17, 17, 255, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 198, 198, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 108, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 214, 255, 255, 255, 72, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 189, 255, 31, 67, 193, 255, 249, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 192, 255, 181, 31, 93, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 124, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 109, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 245, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 120, 120, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 161, 161, 161, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 243, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 198, 198, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 105, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 255, 255, 255, 109, 191, 191, 191, 4, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 47, 64, 0, 66, 192, 255, 121, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 240, 58, 172, 255, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 158, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 133, 255, 255, 255, 155, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 255, 40, 40, 40, 255, 51, 51, 51, 255, 51, 51, 51, 255, 8, 8, 8, 255, 38, 38, 38, 255, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 56, 56, 56, 255, 2, 2, 2, 255, 25, 25, 25, 255, 26, 26, 26, 255, 23, 23, 23, 255, 0, 0, 0, 255, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 198, 198, 198, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 103, 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 145, 191, 191, 191, 18, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 165, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 191, 1, 66, 192, 255, 120, 67, 193, 255, 248, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 219, 37, 180, 255, 50, 13, 42, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 234, 2, 2, 2, 255, 237, 237, 237, 255, 255, 255, 255, 255, 255, 255, 255, 255, 113, 113, 113, 255, 0, 0, 0, 255, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 183, 183, 183, 255, 0, 0, 0, 255, 101, 101, 101, 255, 255, 255, 255, 255, 255, 255, 255, 255, 250, 250, 250, 255, 9, 9, 9, 255, 0, 0, 0, 245, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 119, 119, 119, 255, 85, 85, 85, 255, 24, 24, 24, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 28, 28, 28, 255, 81, 81, 81, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 99, 99, 99, 255, 11, 11, 11, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 20, 20, 20, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 100, 255, 255, 255, 182, 255, 255, 255, 41, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 138, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 132, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 54, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 88, 199, 255, 28, 237, 249, 255, 217, 255, 255, 255, 255, 255, 255, 255, 255, 154, 221, 255, 107, 48, 143, 191, 5, 0, 43, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 255, 51, 51, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 214, 214, 214, 255, 1, 1, 1, 255, 90, 90, 90, 255, 255, 255, 255, 255, 254, 254, 254, 255, 53, 53, 53, 255, 7, 7, 7, 255, 225, 225, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 60, 60, 60, 255, 0, 0, 0, 255, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 119, 119, 119, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 15, 15, 15, 255, 95, 95, 95, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 85, 85, 85, 255, 24, 24, 24, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 28, 28, 28, 255, 81, 81, 81, 255, 128, 128, 128, 255, 23, 23, 23, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 11, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 72, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 166, 255, 255, 255, 95, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 255, 64, 64, 64, 255, 153, 153, 153, 255, 178, 178, 178, 255, 179, 179, 179, 255, 202, 202, 202, 255, 43, 43, 43, 255, 7, 7, 7, 255, 230, 230, 230, 255, 172, 172, 172, 255, 0, 0, 0, 255, 107, 107, 107, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 116, 116, 116, 255, 0, 0, 0, 255, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 30, 30, 30, 255, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 255, 118, 118, 118, 255, 151, 151, 151, 255, 128, 128, 128, 255, 127, 127, 127, 255, 102, 102, 102, 255, 81, 81, 81, 255, 0, 0, 0, 255, 109, 109, 109, 255, 32, 32, 32, 255, 6, 6, 6, 255, 38, 38, 38, 255, 78, 78, 78, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 171, 171, 171, 255, 0, 0, 0, 255, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 30, 30, 30, 255, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 244, 7, 7, 7, 255, 246, 246, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 253, 253, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 255, 141, 141, 141, 255, 120, 120, 120, 255, 167, 167, 167, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 228, 228, 228, 255, 0, 0, 0, 255, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 30, 30, 30, 255, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 128, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 255, 65, 65, 65, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 156, 156, 156, 255, 0, 0, 0, 255, 42, 42, 42, 255, 239, 239, 239, 255, 48, 48, 48, 255, 251, 251, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 29, 29, 29, 255, 0, 0, 0, 255, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 30, 30, 30, 255, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170, 170, 255, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 163, 163, 163, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 2, 2, 0, 255, 20, 20, 179, 255, 21, 21, 143, 128, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 167, 191, 0, 254, 255, 255, 196, 255, 255, 255, 255, 255, 255, 255, 255, 221, 243, 255, 43, 16, 48, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 255, 132, 132, 132, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 26, 26, 26, 255, 188, 188, 188, 255, 146, 146, 146, 255, 141, 141, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 85, 85, 255, 0, 0, 0, 255, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 95, 95, 95, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 12, 12, 12, 255, 76, 76, 76, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 68, 68, 68, 255, 19, 19, 19, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 102, 102, 102, 255, 22, 22, 22, 255, 65, 65, 65, 255, 102, 102, 102, 255, 16, 16, 16, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 5, 0, 255, 21, 21, 84, 255, 22, 22, 255, 255, 22, 22, 253, 255, 19, 19, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 44, 64, 0, 53, 181, 255, 38, 66, 192, 255, 180, 211, 240, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 96, 202, 255, 238, 65, 192, 255, 128, 49, 142, 191, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 255, 200, 200, 200, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 203, 203, 203, 255, 252, 252, 252, 255, 49, 49, 49, 255, 241, 241, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 141, 141, 141, 255, 0, 0, 0, 255, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 143, 143, 143, 255, 117, 117, 117, 255, 14, 14, 14, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 148, 148, 148, 255, 152, 152, 152, 255, 153, 153, 153, 255, 153, 153, 153, 255, 48, 48, 48, 255, 83, 83, 83, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 134, 134, 134, 255, 0, 0, 0, 255, 152, 152, 152, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 153, 153, 153, 255, 24, 24, 24, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 12, 12, 8, 255, 21, 21, 223, 247, 112, 29, 255, 250, 76, 26, 255, 255, 21, 21, 188, 128, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 61, 189, 255, 53, 67, 193, 255, 240, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 65, 192, 255, 188, 49, 142, 191, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 250, 15, 15, 15, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 228, 228, 228, 255, 57, 57, 57, 255, 94, 94, 94, 255, 208, 208, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 197, 197, 197, 255, 0, 0, 0, 255, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 80, 80, 80, 255, 138, 138, 138, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 223, 255, 0, 0, 0, 255, 253, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 2, 0, 255, 20, 20, 123, 254, 35, 23, 255, 242, 167, 33, 255, 242, 163, 33, 255, 255, 23, 22, 255, 255, 12, 12, 76, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 143, 191, 7, 66, 192, 255, 222, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 192, 255, 130, 16, 48, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 255, 79, 79, 79, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 193, 193, 193, 255, 77, 77, 77, 255, 70, 70, 70, 255, 183, 183, 183, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 247, 247, 255, 6, 6, 6, 255, 0, 0, 0, 242, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 80, 80, 80, 255, 138, 138, 138, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 223, 255, 0, 0, 0, 255, 253, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 9, 9, 27, 255, 22, 22, 243, 244, 148, 32, 255, 250, 85, 28, 255, 247, 121, 31, 255, 248, 104, 28, 255, 255, 21, 21, 215, 191, 12, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 191, 255, 88, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 239, 44, 140, 191, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 255, 146, 146, 146, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 248, 248, 255, 230, 230, 230, 255, 230, 230, 230, 255, 230, 230, 230, 255, 191, 191, 191, 255, 83, 83, 83, 255, 51, 51, 51, 255, 150, 150, 150, 255, 225, 225, 225, 255, 46, 46, 46, 255, 0, 0, 0, 255, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 80, 80, 80, 255, 138, 138, 138, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 223, 255, 0, 0, 0, 255, 253, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 9, 9, 0, 255, 20, 20, 162, 252, 55, 24, 255, 236, 249, 40, 255, 250, 85, 28, 255, 247, 121, 31, 255, 237, 227, 39, 255, 254, 30, 23, 255, 255, 21, 21, 111, 64, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 95, 128, 0, 66, 191, 255, 146, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 211, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 203, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 64, 191, 255, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 80, 80, 80, 255, 138, 138, 138, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 223, 223, 223, 255, 0, 0, 0, 255, 253, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 19, 19, 56, 255, 22, 22, 254, 241, 184, 35, 255, 235, 255, 41, 255, 250, 85, 28, 255, 247, 121, 31, 255, 235, 255, 41, 255, 245, 138, 31, 255, 255, 22, 22, 239, 191, 13, 13, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 95, 128, 0, 67, 192, 255, 157, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 191, 234, 255, 255, 255, 255, 255, 255, 251, 254, 255, 255, 81, 198, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 66, 192, 255, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 242, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 230, 0, 0, 0, 205, 0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 204, 0, 0, 0, 192, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 48, 48, 48, 255, 39, 39, 39, 255, 5, 5, 5, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 16, 16, 16, 255, 28, 28, 28, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 45, 45, 45, 255, 0, 0, 0, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 51, 51, 51, 255, 8, 8, 8, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 2, 2, 2, 255, 21, 21, 203, 249, 88, 27, 255, 235, 255, 41, 255, 235, 255, 41, 255, 249, 95, 29, 255, 245, 132, 31, 255, 235, 255, 41, 255, 236, 246, 40, 255, 253, 49, 24, 255, 255, 16, 16, 152, 128, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 64, 0, 65, 192, 255, 120, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 94, 202, 255, 255, 181, 230, 255, 255, 132, 214, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 253, 63, 191, 255, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 190, 190, 190, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 44, 44, 44, 255, 132, 132, 132, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 156, 156, 156, 255, 18, 18, 18, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 204, 204, 204, 255, 66, 66, 66, 255, 110, 110, 110, 255, 204, 204, 204, 255, 32, 32, 32, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 4, 4, 0, 255, 19, 19, 100, 255, 27, 22, 255, 238, 218, 38, 255, 235, 255, 41, 255, 235, 255, 41, 255, 237, 234, 39, 255, 236, 247, 40, 255, 235, 255, 41, 255, 235, 255, 41, 255, 242, 174, 34, 255, 255, 22, 22, 252, 255, 19, 19, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 187, 255, 34, 67, 193, 255, 250, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 65, 192, 255, 185, 32, 96, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 165, 165, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 83, 83, 83, 255, 138, 138, 138, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 13, 13, 16, 255, 22, 22, 234, 246, 127, 30, 255, 235, 255, 41, 255, 235, 255, 41, 255, 235, 255, 41, 255, 246, 130, 31, 255, 242, 171, 35, 255, 235, 255, 41, 255, 235, 255, 41, 255, 235, 255, 41, 255, 250, 77, 26, 255, 255, 21, 21, 192, 191, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 47, 64, 0, 66, 192, 255, 128, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 242, 64, 191, 255, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 255, 238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 165, 165, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 83, 83, 83, 255, 138, 138, 138, 255, 255, 255, 255, 255, 40, 40, 40, 255, 0, 0, 0, 255, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 5, 5, 0, 255, 15, 15, 142, 255, 24, 22, 255, 244, 149, 32, 255, 243, 162, 33, 255, 243, 162, 33, 255, 243, 162, 33, 255, 244, 154, 32, 255, 243, 162, 33, 255, 243, 162, 33, 255, 243, 162, 33, 255, 243, 162, 33, 255, 247, 119, 29, 255, 255, 22, 22, 255, 255, 21, 21, 84, 64, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 128, 191, 2, 66, 192, 255, 128, 67, 193, 255, 251, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 255, 67, 193, 255, 224, 51, 186, 255, 56, 15, 47, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 255, 221, 221, 221, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 55, 55, 55, 255, 165, 165, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 195, 195, 195, 255, 23, 23, 23, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 83, 83, 83, 255, 138, 138, 138, 255, 254, 254, 254, 255, 25, 25, 25, 255, 0, 0, 0, 255, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 255, 20, 20, 158, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 22, 22, 230, 255, 15, 15, 114, 128, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 47, 64, 0, 60, 187, 255, 34, 63, 190, 255, 120, 66, 191, 255, 155, 65, 191, 255, 149, 65, 191, 255, 91, 46, 140, 191, 8, 9, 46, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 255, 50, 50, 50, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 28, 28, 28, 255, 83, 83, 83, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 98, 98, 98, 255, 11, 11, 11, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 128, 128, 128, 255, 41, 41, 41, 255, 69, 69, 69, 255, 79, 79, 79, 255, 0, 0, 0, 255, 0, 0, 0, 227, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 10, 10, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 11, 11, 0, 128, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 46, 64, 0, 33, 95, 128, 0, 31, 94, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 226, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 244, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 99, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0, 111, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 20, 20, 5, 128, 75, 75, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 77, 77, 0, 191, 17, 17, 5, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 4, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 7, 255, 255, 255, 83, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 173, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 124, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 172, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 131, 255, 243, 243, 179, 255, 45, 45, 222, 255, 123, 123, 195, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 133, 133, 192, 255, 38, 38, 225, 255, 240, 240, 179, 255, 255, 255, 138, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 167, 255, 255, 255, 186, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 95, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 224, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 192, 255, 255, 255, 255, 255, 255, 255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 178, 255, 255, 255, 247, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 233, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 244, 244, 188, 255, 62, 62, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 126, 126, 232, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 135, 135, 229, 255, 1, 1, 255, 255, 0, 0, 255, 255, 56, 56, 255, 255, 241, 241, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 3, 255, 255, 255, 166, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 185, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 149, 255, 255, 255, 164, 191, 191, 191, 1, 64, 64, 64, 0, 128, 128, 128, 0, 191, 191, 191, 10, 255, 255, 255, 126, 255, 255, 255, 255, 255, 255, 255, 24, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 160, 255, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 51, 255, 32, 26, 26, 255, 0, 204, 26, 255, 0, 204, 53, 255, 32, 90, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 64, 64, 64, 0, 255, 255, 255, 66, 255, 255, 255, 102, 255, 255, 255, 102, 255, 255, 255, 209, 255, 255, 255, 213, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 191, 22, 22, 9, 255, 53, 53, 224, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 21, 21, 110, 191, 128, 128, 0, 191, 128, 128, 0, 255, 21, 21, 102, 255, 0, 0, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 48, 48, 230, 191, 21, 21, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 3, 255, 255, 255, 166, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 93, 255, 255, 255, 255, 255, 255, 255, 122, 255, 255, 255, 100, 255, 255, 255, 207, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 231, 255, 255, 255, 130, 255, 255, 255, 31, 255, 255, 255, 191, 255, 255, 255, 241, 255, 255, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 0, 33, 26, 255, 0, 255, 26, 255, 0, 255, 24, 255, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 213, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 191, 29, 29, 3, 255, 80, 80, 215, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 108, 255, 0, 0, 99, 255, 0, 0, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 73, 73, 223, 191, 28, 28, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 3, 255, 255, 255, 164, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 163, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 255, 255, 255, 112, 255, 255, 255, 76, 255, 255, 255, 72, 255, 255, 255, 101, 255, 255, 255, 164, 255, 255, 255, 249, 255, 255, 255, 251, 255, 255, 255, 253, 255, 255, 255, 74, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 0, 33, 26, 255, 0, 255, 26, 255, 0, 255, 24, 255, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 231, 255, 255, 255, 51, 255, 255, 255, 193, 255, 255, 255, 213, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 252, 252, 188, 255, 81, 81, 247, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 254, 255, 0, 0, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 73, 73, 248, 255, 250, 250, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 3, 255, 255, 255, 164, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 183, 191, 191, 191, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 42, 255, 255, 255, 238, 255, 255, 255, 226, 255, 255, 255, 56, 128, 128, 128, 0, 191, 191, 191, 31, 255, 255, 255, 159, 255, 255, 255, 172, 255, 255, 255, 66, 191, 191, 191, 0, 255, 255, 255, 24, 255, 255, 255, 187, 255, 255, 255, 254, 255, 255, 255, 96, 64, 64, 64, 0, 191, 191, 191, 3, 255, 255, 255, 15, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 6, 191, 191, 191, 10, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 53, 255, 32, 52, 25, 255, 0, 77, 25, 255, 0, 77, 24, 255, 0, 99, 26, 255, 0, 255, 26, 255, 0, 255, 25, 255, 0, 155, 25, 255, 0, 77, 25, 255, 0, 77, 25, 255, 0, 76, 226, 255, 223, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 178, 255, 255, 255, 213, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 246, 246, 180, 255, 0, 0, 170, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 178, 255, 239, 239, 172, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 112, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 131, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 195, 255, 255, 255, 226, 191, 191, 191, 23, 64, 64, 64, 0, 191, 191, 191, 0, 255, 255, 255, 211, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 247, 255, 255, 255, 33, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 176, 255, 255, 255, 240, 255, 255, 255, 26, 255, 255, 255, 32, 255, 255, 255, 254, 255, 255, 255, 92, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 26, 255, 255, 255, 230, 255, 255, 255, 111, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 26, 255, 0, 173, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 253, 198, 255, 191, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 178, 255, 255, 255, 213, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 255, 255, 178, 255, 85, 85, 5, 255, 0, 0, 173, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 181, 255, 85, 85, 7, 255, 255, 255, 168, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 45, 255, 255, 255, 255, 255, 255, 255, 111, 128, 128, 128, 0, 0, 0, 0, 0, 255, 255, 255, 20, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 89, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 41, 255, 255, 255, 255, 255, 255, 255, 115, 191, 191, 191, 1, 255, 255, 255, 160, 255, 255, 255, 250, 255, 255, 255, 78, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 198, 255, 255, 255, 229, 191, 191, 191, 24, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 26, 255, 0, 173, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 255, 26, 255, 0, 253, 198, 255, 191, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 178, 255, 255, 255, 213, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 255, 255, 178, 191, 128, 128, 0, 255, 0, 0, 94, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 104, 191, 128, 128, 0, 255, 255, 255, 168, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 228, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 33, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 5, 255, 255, 255, 209, 255, 255, 255, 215, 191, 191, 191, 13, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 222, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 255, 255, 255, 41, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 158, 255, 255, 255, 247, 255, 255, 255, 36, 0, 0, 0, 0, 191, 191, 191, 5, 255, 255, 255, 184, 255, 255, 255, 253, 255, 255, 255, 137, 191, 191, 191, 18, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 66, 255, 255, 255, 219, 255, 255, 255, 251, 255, 255, 255, 61, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 52, 255, 32, 35, 25, 255, 0, 51, 25, 255, 0, 51, 24, 255, 0, 77, 26, 255, 0, 255, 26, 255, 0, 255, 25, 255, 0, 141, 25, 255, 0, 51, 25, 255, 0, 51, 25, 255, 0, 51, 226, 255, 223, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 178, 255, 255, 255, 213, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 145, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 255, 255, 178, 255, 21, 21, 86, 255, 0, 0, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 253, 255, 21, 21, 95, 255, 255, 255, 168, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 95, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 211, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 143, 191, 191, 191, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 55, 255, 255, 255, 247, 255, 255, 255, 211, 255, 255, 255, 35, 191, 191, 191, 0, 255, 255, 255, 45, 255, 255, 255, 183, 255, 255, 255, 197, 255, 255, 255, 87, 128, 128, 128, 0, 191, 191, 191, 11, 255, 255, 255, 165, 255, 255, 255, 255, 255, 255, 255, 116, 64, 64, 64, 0, 0, 0, 0, 0, 191, 191, 191, 10, 255, 255, 255, 205, 255, 255, 255, 237, 255, 255, 255, 252, 255, 255, 255, 249, 255, 255, 255, 186, 255, 255, 255, 152, 255, 255, 255, 142, 255, 255, 255, 168, 255, 255, 255, 220, 255, 255, 255, 255, 255, 255, 255, 222, 255, 255, 255, 252, 255, 255, 255, 149, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 0, 33, 26, 255, 0, 255, 26, 255, 0, 255, 24, 255, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 178, 255, 255, 255, 238, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 211, 255, 255, 255, 245, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 157, 157, 221, 255, 0, 0, 251, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 253, 255, 145, 145, 220, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 145, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 194, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 54, 255, 255, 255, 230, 255, 255, 255, 251, 255, 255, 255, 169, 255, 255, 255, 87, 255, 255, 255, 52, 255, 255, 255, 41, 255, 255, 255, 77, 255, 255, 255, 140, 255, 255, 255, 238, 255, 255, 255, 250, 255, 255, 255, 103, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 149, 255, 255, 255, 244, 255, 255, 255, 47, 255, 255, 255, 29, 255, 255, 255, 126, 255, 255, 255, 184, 255, 255, 255, 225, 255, 255, 255, 255, 255, 255, 255, 196, 255, 255, 255, 163, 255, 255, 255, 74, 191, 191, 191, 3, 255, 255, 255, 102, 255, 255, 255, 255, 255, 255, 255, 66, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 0, 33, 26, 255, 0, 255, 26, 255, 0, 255, 24, 255, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 255, 255, 255, 0, 255, 255, 255, 160, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 251, 255, 255, 255, 244, 255, 255, 255, 230, 255, 255, 255, 221, 128, 128, 128, 0, 128, 86, 86, 0, 255, 167, 167, 193, 255, 5, 5, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 189, 255, 0, 0, 182, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 3, 3, 255, 255, 160, 160, 204, 128, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 146, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 195, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 21, 255, 255, 255, 125, 255, 255, 255, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 246, 255, 255, 255, 155, 255, 255, 255, 44, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 83, 255, 255, 255, 63, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 92, 255, 255, 255, 255, 255, 255, 255, 10, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 53, 191, 191, 191, 21, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 178, 191, 191, 191, 0, 128, 128, 128, 0, 128, 128, 128, 0, 51, 255, 32, 23, 26, 255, 0, 179, 26, 255, 0, 179, 53, 255, 32, 79, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 98, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 225, 191, 191, 191, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 228, 255, 255, 255, 160, 191, 191, 191, 0, 128, 128, 128, 0, 0, 0, 0, 0, 255, 0, 0, 12, 255, 11, 11, 243, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 192, 191, 0, 0, 11, 191, 0, 0, 8, 255, 0, 0, 185, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 10, 10, 248, 255, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 147, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 2, 255, 255, 255, 34, 255, 255, 255, 67, 255, 255, 255, 74, 255, 255, 255, 41, 191, 191, 191, 9, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 44, 255, 255, 255, 200, 191, 191, 191, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 193, 255, 255, 255, 232, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 179, 255, 255, 255, 208, 255, 255, 255, 255, 255, 255, 255, 18, 128, 128, 128, 0, 255, 255, 255, 165, 255, 255, 255, 243, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 153, 255, 255, 255, 244, 255, 255, 255, 160, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 93, 93, 0, 255, 198, 198, 189, 255, 15, 15, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 53, 53, 239, 255, 149, 149, 114, 255, 255, 255, 102, 255, 255, 255, 102, 255, 149, 149, 111, 255, 58, 58, 236, 255, 0, 0, 255, 255, 0, 0, 255, 255, 12, 12, 255, 255, 190, 190, 200, 128, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 148, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 196, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 154, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 204, 255, 255, 255, 14, 128, 128, 128, 0, 255, 255, 255, 149, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 230, 255, 255, 255, 144, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 188, 255, 199, 199, 255, 255, 14, 14, 255, 255, 58, 58, 255, 255, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 245, 245, 255, 255, 65, 65, 255, 255, 11, 11, 255, 255, 192, 192, 255, 255, 255, 255, 198, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 255, 255, 255, 148, 255, 255, 255, 197, 191, 191, 191, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 94, 94, 0, 255, 0, 0, 52, 191, 25, 25, 14, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 27, 27, 11, 255, 0, 0, 55, 128, 93, 93, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 1, 191, 191, 191, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 2, 101, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 2, 2, 92, 3, 3, 3, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 5, 178, 3, 0, 107, 254, 2, 0, 84, 255, 0, 0, 2, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 188, 151, 151, 151, 254, 37, 37, 37, 225, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 27, 29, 29, 29, 220, 25, 25, 25, 213, 1, 1, 1, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 3, 0, 107, 254, 5, 0, 173, 255, 5, 0, 173, 255, 2, 0, 72, 255, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 176, 251, 251, 251, 255, 207, 207, 207, 254, 9, 9, 9, 180, 0, 0, 0, 24, 27, 27, 27, 215, 220, 220, 220, 255, 185, 185, 185, 255, 2, 2, 2, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 90, 2, 0, 76, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 170, 255, 1, 0, 61, 253, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 223, 223, 223, 255, 255, 255, 255, 255, 152, 152, 152, 255, 23, 23, 23, 236, 216, 216, 216, 255, 255, 255, 255, 255, 124, 124, 124, 254, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 138, 71, 71, 71, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 69, 69, 69, 255, 61, 61, 61, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 77, 77, 77, 255, 3, 3, 3, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 1, 0, 47, 244, 5, 0, 171, 255, 5, 0, 173, 255, 5, 0, 158, 255, 1, 0, 42, 242, 0, 0, 1, 86, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 94, 0, 0, 0, 80, 0, 0, 0, 77, 1, 1, 1, 160, 190, 190, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 62, 62, 240, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 213, 213, 213, 255, 62, 62, 62, 239, 4, 4, 4, 177, 0, 0, 0, 165, 39, 39, 39, 227, 176, 176, 176, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 1, 0, 25, 227, 5, 0, 162, 255, 5, 0, 173, 255, 4, 0, 136, 254, 1, 0, 19, 219, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 71, 105, 105, 105, 254, 157, 157, 157, 255, 153, 153, 153, 255, 149, 149, 149, 250, 238, 238, 238, 255, 252, 252, 252, 255, 190, 190, 190, 255, 196, 196, 196, 255, 254, 254, 254, 255, 255, 255, 255, 255, 22, 22, 22, 236, 0, 0, 0, 161, 0, 0, 0, 136, 6, 6, 6, 114, 0, 0, 0, 16, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 217, 217, 217, 255, 10, 10, 10, 196, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 1, 1, 150, 160, 160, 160, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 18, 18, 18, 224, 28, 27, 46, 255, 4, 1, 130, 255, 3, 0, 106, 254, 0, 0, 5, 180, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 116, 124, 124, 124, 255, 252, 252, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 73, 73, 73, 244, 0, 0, 0, 122, 1, 1, 1, 133, 101, 101, 101, 251, 255, 255, 255, 255, 255, 255, 255, 255, 237, 237, 237, 255, 212, 212, 212, 255, 131, 131, 131, 255, 2, 2, 2, 93, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 72, 72, 72, 244, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 19, 19, 204, 244, 244, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 7, 198, 148, 148, 148, 255, 177, 177, 177, 255, 8, 7, 18, 254, 0, 0, 0, 130, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 97, 46, 46, 46, 233, 197, 197, 197, 254, 255, 255, 255, 255, 218, 218, 218, 255, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 171, 243, 243, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 234, 234, 255, 107, 107, 107, 254, 3, 3, 3, 110, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 251, 251, 251, 255, 9, 9, 9, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 123, 198, 198, 198, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 162, 12, 12, 12, 239, 14, 14, 14, 255, 45, 45, 45, 255, 170, 170, 170, 255, 49, 49, 49, 253, 1, 1, 1, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 3, 3, 3, 220, 231, 231, 231, 255, 235, 235, 235, 255, 5, 5, 5, 182, 0, 0, 0, 2, 0, 0, 0, 6, 18, 18, 18, 206, 250, 250, 250, 255, 228, 228, 228, 255, 101, 101, 101, 254, 8, 8, 8, 181, 1, 1, 1, 69, 1, 1, 1, 0, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 244, 244, 244, 255, 1, 1, 1, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 105, 179, 179, 179, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 53, 25, 0, 0, 239, 77, 0, 0, 255, 32, 11, 11, 255, 47, 47, 47, 255, 35, 35, 35, 255, 8, 8, 8, 237, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 134, 134, 134, 255, 255, 255, 255, 255, 255, 255, 255, 255, 163, 163, 163, 254, 33, 33, 33, 218, 39, 39, 39, 224, 182, 182, 182, 254, 255, 255, 255, 255, 175, 175, 175, 254, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 37, 37, 37, 221, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 229, 229, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 207, 235, 0, 0, 255, 255, 0, 0, 255, 239, 0, 0, 255, 50, 4, 4, 255, 44, 44, 44, 255, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 73, 92, 92, 92, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 75, 75, 75, 247, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 161, 161, 161, 254, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 63, 96, 96, 96, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 87, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 178, 0, 0, 255, 8, 8, 8, 254, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 164, 208, 208, 208, 255, 221, 221, 221, 255, 127, 127, 127, 254, 42, 42, 42, 245, 201, 201, 201, 255, 255, 255, 255, 255, 252, 252, 252, 255, 119, 119, 119, 254, 213, 213, 213, 255, 255, 255, 255, 255, 226, 226, 226, 255, 14, 14, 14, 193, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 155, 235, 235, 235, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 128, 128, 255, 3, 3, 3, 169, 1, 1, 1, 81, 0, 0, 0, 69, 2, 2, 2, 137, 79, 79, 79, 248, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 8, 8, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 121, 0, 0, 255, 255, 0, 0, 255, 226, 0, 0, 255, 204, 0, 0, 255, 159, 0, 0, 255, 1, 0, 0, 189, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 18, 18, 18, 213, 0, 0, 0, 156, 0, 0, 0, 63, 0, 0, 0, 66, 138, 138, 138, 253, 255, 255, 255, 255, 189, 189, 189, 255, 1, 1, 1, 148, 3, 3, 3, 160, 92, 92, 92, 252, 186, 186, 186, 255, 21, 21, 21, 210, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 155, 165, 165, 165, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 141, 141, 141, 255, 76, 76, 76, 254, 64, 64, 64, 253, 121, 121, 121, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 179, 179, 179, 255, 5, 5, 5, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 128, 0, 0, 255, 84, 0, 0, 254, 0, 0, 0, 178, 0, 0, 0, 128, 1, 0, 0, 115, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 90, 90, 90, 254, 255, 255, 255, 255, 104, 104, 104, 254, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 40, 1, 1, 1, 142, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 49, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 11, 11, 11, 107, 5, 5, 5, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 9, 0, 0, 251, 1, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 31, 31, 31, 221, 176, 176, 176, 255, 22, 22, 22, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 81, 1, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 1, 1, 1, 101, 3, 3, 3, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 167, 0, 0, 0, 221, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 225, 0, 0, 0, 174, 0, 0, 27, 70, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 166, 1, 1, 1, 220, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 226, 0, 0, 0, 174, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 165, 0, 0, 0, 218, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 226, 0, 0, 0, 175, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 163, 1, 1, 1, 218, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 228, 0, 0, 0, 176, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 162, 0, 0, 0, 217, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 228, 0, 0, 0, 177, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 160, 1, 1, 1, 216, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 229, 0, 0, 0, 178, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 158, 0, 0, 0, 215, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 230, 0, 0, 0, 179, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 157, 1, 1, 1, 214, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 231, 0, 0, 0, 180, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 2, 2, 2, 248, 52, 52, 52, 253, 85, 85, 85, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 33, 31, 112, 254, 2, 0, 82, 255, 0, 0, 8, 255, 0, 0, 22, 136, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 101, 3, 3, 3, 247, 92, 92, 92, 253, 153, 153, 153, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 128, 127, 166, 253, 19, 15, 160, 255, 7, 4, 132, 255, 5, 4, 26, 252, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 2, 2, 2, 246, 50, 50, 50, 253, 84, 84, 84, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 88, 88, 88, 253, 58, 58, 58, 253, 5, 5, 5, 252, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 3, 3, 3, 246, 89, 89, 89, 253, 151, 151, 151, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 159, 159, 159, 253, 107, 107, 107, 253, 10, 10, 10, 253, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 1, 1, 1, 244, 48, 48, 48, 253, 83, 83, 83, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 88, 88, 88, 253, 60, 60, 60, 253, 6, 6, 6, 253, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 2, 2, 2, 244, 85, 85, 85, 253, 149, 149, 149, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 161, 161, 161, 253, 110, 110, 110, 253, 11, 11, 11, 254, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 1, 1, 1, 242, 46, 46, 46, 253, 82, 82, 82, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 95, 95, 95, 253, 89, 89, 89, 253, 61, 61, 61, 253, 7, 7, 7, 253, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 1, 1, 1, 241, 81, 81, 81, 253, 148, 148, 148, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 173, 173, 173, 253, 162, 162, 162, 253, 112, 112, 112, 253, 14, 14, 14, 254, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 48, 2, 2, 2, 248, 89, 89, 89, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 90, 89, 132, 253, 5, 0, 173, 255, 5, 0, 173, 255, 4, 0, 141, 255, 0, 0, 9, 255, 0, 0, 38, 86, 0, 0, 0, 45, 4, 4, 4, 247, 159, 159, 159, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 210, 210, 214, 252, 40, 36, 180, 254, 5, 0, 173, 255, 5, 0, 173, 255, 12, 7, 163, 255, 5, 4, 32, 253, 0, 0, 0, 70, 0, 0, 0, 42, 1, 1, 1, 245, 86, 86, 86, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 99, 99, 99, 252, 7, 7, 7, 253, 0, 0, 0, 74, 0, 0, 0, 39, 2, 2, 2, 244, 152, 152, 152, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 182, 182, 182, 252, 14, 14, 14, 254, 0, 0, 0, 78, 0, 0, 0, 35, 1, 1, 1, 242, 82, 82, 82, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 102, 102, 102, 252, 8, 8, 8, 253, 0, 0, 0, 83, 0, 0, 0, 33, 1, 1, 1, 241, 145, 145, 145, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 17, 17, 17, 254, 0, 0, 0, 87, 0, 0, 0, 30, 0, 0, 0, 239, 78, 78, 78, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 104, 104, 104, 252, 10, 10, 10, 253, 0, 0, 0, 92, 0, 0, 0, 27, 1, 1, 1, 238, 138, 138, 138, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 190, 190, 190, 252, 21, 21, 21, 254, 0, 0, 0, 97, 0, 0, 0, 169, 53, 53, 53, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 121, 252, 21, 17, 165, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 2, 0, 92, 255, 0, 0, 2, 193, 0, 0, 0, 166, 92, 92, 92, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 111, 109, 194, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 22, 20, 110, 254, 1, 1, 1, 197, 0, 0, 0, 161, 49, 49, 49, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 67, 67, 67, 253, 0, 0, 0, 200, 0, 0, 0, 157, 84, 84, 84, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 126, 126, 126, 253, 1, 1, 1, 205, 0, 0, 0, 152, 44, 44, 44, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 72, 72, 72, 253, 0, 0, 0, 209, 0, 0, 0, 147, 77, 77, 77, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 134, 134, 134, 253, 1, 1, 1, 214, 0, 0, 0, 142, 41, 41, 41, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 121, 114, 125, 252, 159, 93, 142, 253, 167, 88, 145, 253, 132, 106, 132, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 76, 76, 76, 253, 0, 0, 0, 219, 0, 0, 0, 137, 69, 69, 69, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 201, 210, 252, 205, 140, 188, 253, 205, 125, 182, 253, 201, 173, 200, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 141, 141, 141, 253, 1, 1, 1, 225, 0, 0, 0, 223, 86, 86, 86, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 58, 56, 147, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 4, 0, 141, 255, 0, 0, 4, 245, 1, 1, 1, 219, 152, 152, 152, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 181, 180, 208, 252, 11, 6, 174, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 40, 37, 163, 254, 1, 1, 1, 244, 0, 0, 0, 214, 82, 82, 82, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 101, 101, 101, 252, 1, 1, 1, 247, 1, 1, 1, 210, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 249, 0, 0, 0, 205, 78, 78, 78, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 115, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 105, 105, 105, 252, 1, 1, 1, 250, 1, 1, 1, 203, 138, 138, 138, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 194, 194, 194, 252, 1, 1, 1, 252, 0, 0, 0, 200, 74, 74, 74, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 133, 105, 129, 253, 199, 72, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 212, 68, 161, 255, 142, 100, 138, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 110, 110, 110, 252, 1, 1, 1, 253, 1, 1, 1, 198, 130, 130, 130, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 178, 201, 253, 204, 77, 165, 255, 215, 67, 161, 255, 215, 67, 161, 255, 212, 68, 161, 255, 198, 154, 194, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 201, 201, 201, 252, 2, 2, 2, 253, 1, 1, 1, 253, 103, 103, 103, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 97, 97, 129, 252, 7, 2, 172, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 164, 255, 0, 0, 1, 254, 1, 1, 1, 249, 183, 183, 183, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 215, 252, 53, 50, 182, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 32, 28, 177, 254, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 175, 175, 175, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 214, 252, 3, 3, 3, 254, 0, 0, 0, 240, 94, 94, 94, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 115, 252, 51, 51, 51, 253, 2, 2, 2, 255, 3, 3, 3, 255, 38, 38, 38, 253, 111, 111, 111, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 237, 166, 166, 166, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 95, 95, 95, 253, 4, 4, 4, 255, 4, 4, 4, 255, 67, 67, 67, 253, 199, 199, 199, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 9, 9, 9, 254, 0, 0, 0, 235, 90, 90, 90, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 151, 97, 138, 253, 213, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 208, 68, 161, 255, 132, 107, 131, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 7, 7, 7, 253, 1, 1, 1, 233, 159, 159, 159, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 153, 192, 253, 213, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 209, 69, 162, 255, 202, 175, 200, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 17, 17, 17, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 119, 252, 28, 24, 162, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 49, 46, 143, 253, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 128, 126, 197, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 20, 15, 176, 255, 169, 168, 201, 253, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 166, 78, 78, 253, 223, 28, 28, 254, 150, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 228, 144, 144, 253, 245, 50, 50, 254, 224, 163, 163, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 112, 112, 112, 252, 28, 28, 28, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 25, 25, 25, 254, 114, 114, 114, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 204, 204, 252, 54, 54, 54, 254, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 42, 42, 42, 254, 204, 204, 204, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 167, 88, 147, 253, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 200, 71, 160, 255, 124, 112, 127, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 202, 125, 183, 253, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 204, 74, 164, 255, 204, 191, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 67, 66, 143, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 51, 48, 150, 254, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 192, 191, 210, 252, 17, 12, 175, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 18, 13, 175, 255, 172, 172, 206, 253, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 175, 69, 69, 253, 254, 1, 1, 255, 255, 0, 0, 255, 182, 63, 63, 253, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 231, 129, 129, 253, 255, 2, 2, 255, 255, 0, 0, 255, 234, 110, 110, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 115, 252, 100, 100, 100, 252, 117, 117, 117, 252, 108, 108, 108, 252, 23, 23, 23, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 51, 51, 51, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 181, 181, 181, 252, 210, 210, 210, 252, 197, 197, 197, 252, 44, 44, 44, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 88, 88, 88, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 121, 116, 121, 252, 183, 80, 150, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 190, 76, 156, 254, 120, 116, 123, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 209, 213, 252, 206, 105, 174, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 203, 87, 169, 254, 208, 204, 211, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 104, 103, 126, 252, 10, 5, 171, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 49, 46, 151, 254, 118, 118, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 69, 66, 185, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 16, 12, 175, 255, 170, 169, 205, 253, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 182, 64, 64, 253, 255, 0, 0, 255, 255, 0, 0, 255, 225, 26, 26, 254, 127, 112, 112, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 233, 119, 119, 253, 255, 1, 1, 255, 255, 0, 0, 255, 246, 45, 45, 254, 218, 200, 200, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 93, 93, 93, 253, 14, 14, 14, 254, 3, 3, 3, 255, 17, 17, 17, 254, 18, 18, 18, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 9, 9, 9, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 171, 171, 171, 253, 27, 27, 27, 254, 6, 6, 6, 255, 30, 30, 30, 254, 34, 34, 34, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 12, 12, 12, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 122, 114, 125, 252, 193, 75, 154, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 175, 82, 152, 254, 119, 118, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 200, 210, 252, 208, 92, 170, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 198, 102, 174, 254, 214, 213, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 140, 101, 101, 252, 129, 111, 111, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 35, 32, 157, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 46, 44, 152, 254, 118, 118, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 145, 144, 201, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 15, 11, 175, 255, 167, 166, 205, 253, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 188, 58, 58, 253, 255, 0, 0, 255, 255, 0, 0, 255, 220, 30, 30, 254, 125, 113, 113, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 234, 109, 109, 253, 255, 0, 0, 255, 255, 0, 0, 255, 245, 52, 52, 254, 217, 203, 203, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 116, 116, 116, 252, 13, 13, 13, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 12, 12, 12, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 211, 211, 211, 252, 25, 25, 25, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 19, 19, 19, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 127, 110, 128, 253, 195, 73, 158, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 158, 89, 148, 254, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 188, 206, 253, 204, 84, 168, 254, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 193, 121, 182, 254, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 211, 44, 44, 254, 252, 11, 11, 255, 249, 14, 14, 255, 151, 92, 92, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 141, 141, 153, 253, 114, 112, 181, 255, 17, 13, 174, 255, 5, 0, 173, 255, 5, 0, 173, 255, 44, 42, 153, 254, 118, 118, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 222, 176, 176, 253, 245, 59, 59, 254, 245, 62, 62, 254, 222, 174, 174, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 204, 210, 252, 69, 66, 180, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 14, 9, 175, 255, 164, 163, 204, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 194, 53, 53, 253, 255, 0, 0, 255, 255, 0, 0, 255, 215, 35, 35, 254, 123, 115, 115, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 237, 99, 99, 253, 255, 0, 0, 255, 255, 0, 0, 255, 244, 60, 60, 254, 217, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 101, 101, 101, 252, 3, 3, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 65, 65, 65, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 187, 187, 187, 252, 6, 6, 6, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 114, 114, 114, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 99, 114, 134, 253, 65, 98, 176, 255, 199, 70, 163, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 137, 102, 135, 253, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 174, 188, 207, 253, 72, 106, 185, 255, 197, 70, 163, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 198, 161, 196, 253, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 138, 103, 103, 252, 255, 9, 9, 255, 254, 10, 10, 255, 255, 9, 9, 255, 208, 47, 47, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 127, 127, 132, 252, 184, 184, 187, 255, 188, 188, 188, 255, 129, 128, 182, 255, 5, 0, 173, 255, 43, 40, 154, 254, 117, 117, 120, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 247, 47, 47, 254, 255, 9, 9, 255, 255, 12, 12, 255, 248, 46, 46, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 193, 254, 188, 188, 188, 255, 102, 100, 180, 255, 5, 0, 173, 255, 14, 9, 175, 255, 162, 161, 203, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 120, 118, 118, 252, 200, 47, 47, 254, 255, 0, 0, 255, 255, 0, 0, 255, 210, 39, 39, 254, 122, 116, 116, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 214, 214, 252, 238, 89, 89, 254, 255, 0, 0, 255, 255, 0, 0, 255, 242, 68, 68, 254, 216, 210, 210, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 20, 20, 20, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 50, 50, 50, 253, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 212, 212, 252, 39, 39, 39, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 87, 87, 87, 253, 214, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 89, 112, 143, 253, 41, 101, 183, 255, 39, 101, 185, 255, 81, 92, 178, 255, 214, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 172, 84, 151, 254, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 152, 174, 204, 253, 44, 104, 186, 255, 39, 101, 185, 255, 79, 93, 179, 255, 214, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 214, 66, 160, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 196, 107, 176, 254, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 126, 113, 113, 252, 247, 15, 15, 255, 255, 9, 9, 255, 255, 9, 9, 255, 187, 63, 63, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 120, 120, 120, 252, 169, 169, 174, 254, 188, 188, 188, 255, 188, 188, 188, 255, 187, 187, 188, 255, 59, 57, 157, 254, 117, 117, 120, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 249, 36, 36, 254, 255, 9, 9, 255, 255, 9, 9, 255, 250, 34, 34, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 196, 196, 202, 253, 188, 188, 188, 255, 188, 188, 188, 255, 185, 185, 188, 255, 31, 27, 175, 255, 160, 159, 203, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 121, 117, 117, 252, 206, 42, 42, 254, 255, 0, 0, 255, 255, 0, 0, 255, 204, 44, 44, 254, 121, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 212, 212, 252, 240, 80, 80, 254, 255, 0, 0, 255, 255, 0, 0, 255, 240, 76, 76, 254, 216, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 61, 61, 61, 253, 8, 8, 8, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 61, 61, 61, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 115, 115, 115, 253, 15, 15, 15, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 107, 107, 107, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 119, 119, 252, 77, 109, 153, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 116, 85, 173, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 166, 88, 146, 253, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 215, 252, 125, 157, 199, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 112, 86, 174, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 202, 122, 181, 253, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 148, 95, 95, 253, 206, 48, 48, 254, 185, 64, 64, 253, 123, 116, 116, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 146, 145, 151, 253, 188, 188, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 165, 165, 173, 254, 120, 120, 123, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 227, 151, 151, 253, 252, 22, 22, 255, 252, 22, 22, 255, 227, 149, 149, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 207, 211, 252, 184, 184, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 186, 186, 188, 255, 184, 183, 203, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 122, 116, 116, 252, 211, 38, 38, 254, 255, 0, 0, 255, 255, 0, 0, 255, 199, 49, 49, 254, 120, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 210, 210, 252, 241, 71, 71, 254, 255, 0, 0, 255, 255, 0, 0, 255, 238, 85, 85, 254, 215, 213, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 68, 68, 68, 253, 81, 81, 81, 253, 94, 94, 94, 253, 6, 6, 6, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 71, 71, 71, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 125, 125, 125, 253, 143, 143, 143, 253, 173, 173, 173, 253, 14, 14, 14, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 126, 126, 126, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 116, 118, 121, 252, 65, 106, 163, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 148, 79, 169, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 199, 71, 160, 255, 124, 112, 127, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 211, 214, 252, 99, 140, 195, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 145, 80, 170, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 204, 75, 164, 255, 204, 192, 207, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 106, 106, 106, 253, 79, 79, 79, 254, 60, 60, 60, 255, 59, 59, 59, 255, 115, 115, 116, 255, 186, 186, 187, 255, 188, 188, 188, 255, 166, 166, 174, 254, 120, 120, 123, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 130, 130, 130, 253, 121, 121, 121, 254, 156, 156, 159, 254, 188, 188, 188, 255, 188, 188, 188, 255, 187, 187, 188, 255, 192, 192, 202, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 124, 115, 115, 252, 216, 33, 33, 254, 255, 0, 0, 255, 255, 0, 0, 255, 193, 54, 54, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 208, 208, 252, 243, 63, 63, 254, 255, 0, 0, 255, 255, 0, 0, 255, 237, 95, 95, 253, 215, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 60, 60, 60, 253, 88, 88, 88, 253, 119, 119, 119, 252, 119, 119, 119, 252, 87, 87, 87, 253, 2, 2, 2, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 81, 81, 81, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 112, 112, 112, 253, 157, 157, 157, 253, 215, 215, 215, 252, 215, 215, 215, 252, 159, 159, 159, 253, 6, 6, 6, 254, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 143, 143, 143, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 111, 117, 125, 252, 55, 104, 171, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 40, 101, 185, 255, 171, 75, 166, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 198, 72, 157, 254, 125, 112, 128, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 199, 205, 212, 252, 76, 125, 191, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 100, 184, 255, 169, 75, 167, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 207, 79, 166, 254, 204, 190, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 93, 93, 253, 127, 40, 40, 255, 93, 49, 49, 255, 59, 59, 59, 255, 59, 59, 59, 255, 59, 59, 59, 255, 116, 115, 121, 255, 167, 167, 175, 254, 120, 120, 124, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 208, 208, 208, 252, 105, 105, 105, 254, 59, 59, 59, 255, 59, 59, 59, 255, 59, 59, 59, 255, 61, 61, 61, 255, 140, 140, 144, 255, 187, 187, 188, 255, 191, 191, 202, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 126, 113, 113, 252, 221, 29, 29, 254, 255, 0, 0, 255, 255, 0, 0, 255, 186, 60, 60, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 217, 205, 205, 252, 244, 55, 55, 254, 255, 0, 0, 255, 255, 0, 0, 255, 235, 105, 105, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 55, 55, 55, 253, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 79, 79, 79, 253, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 63, 63, 63, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 212, 212, 252, 101, 101, 101, 254, 170, 170, 170, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 146, 146, 146, 253, 2, 2, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 111, 111, 111, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 104, 115, 130, 253, 48, 103, 177, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 50, 98, 183, 255, 189, 71, 164, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 190, 77, 153, 254, 124, 114, 124, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 184, 195, 209, 252, 60, 115, 189, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 48, 99, 183, 255, 187, 71, 164, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 209, 94, 170, 254, 209, 197, 209, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 151, 89, 89, 253, 246, 4, 4, 255, 255, 0, 0, 255, 254, 0, 0, 255, 173, 25, 25, 255, 60, 59, 59, 255, 59, 59, 59, 255, 70, 70, 70, 255, 120, 120, 124, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 210, 210, 252, 210, 68, 68, 254, 240, 4, 4, 255, 217, 11, 11, 255, 115, 42, 42, 255, 59, 59, 59, 255, 59, 59, 59, 255, 67, 67, 68, 255, 192, 192, 200, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 128, 111, 111, 252, 226, 25, 25, 254, 255, 0, 0, 255, 255, 0, 0, 255, 180, 66, 66, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 218, 202, 202, 252, 246, 48, 48, 254, 255, 0, 0, 255, 255, 0, 0, 255, 233, 115, 115, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 115, 252, 51, 51, 51, 253, 102, 102, 102, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 33, 33, 33, 253, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 6, 6, 6, 254, 102, 102, 102, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 93, 93, 93, 253, 182, 182, 182, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 212, 212, 252, 64, 64, 64, 253, 2, 2, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 10, 10, 10, 254, 181, 181, 181, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 95, 113, 139, 253, 43, 102, 182, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 66, 95, 181, 255, 206, 69, 162, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 179, 83, 149, 254, 119, 117, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 164, 182, 206, 253, 48, 107, 186, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 64, 96, 181, 255, 204, 69, 162, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 206, 108, 176, 254, 213, 210, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 235, 17, 17, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 151, 31, 31, 255, 59, 59, 59, 255, 65, 65, 65, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 235, 103, 103, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 253, 1, 1, 255, 117, 41, 41, 255, 59, 59, 59, 255, 59, 59, 59, 255, 210, 210, 210, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 131, 108, 108, 252, 230, 21, 21, 254, 255, 0, 0, 255, 254, 1, 1, 255, 173, 71, 71, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 218, 197, 197, 252, 247, 41, 41, 254, 255, 0, 0, 255, 255, 1, 1, 255, 232, 125, 125, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 112, 112, 112, 252, 56, 44, 44, 253, 125, 93, 93, 253, 137, 105, 105, 253, 137, 105, 105, 253, 137, 105, 105, 253, 137, 105, 105, 253, 137, 105, 105, 253, 131, 102, 102, 253, 51, 50, 50, 253, 102, 102, 102, 252, 72, 72, 72, 253, 14, 14, 14, 254, 26, 26, 26, 254, 93, 93, 93, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 203, 203, 203, 252, 89, 77, 77, 253, 190, 159, 159, 253, 214, 182, 182, 253, 214, 182, 182, 253, 214, 182, 182, 253, 214, 182, 182, 253, 214, 182, 182, 253, 207, 177, 177, 253, 92, 92, 92, 253, 183, 183, 183, 252, 133, 133, 133, 253, 27, 27, 27, 254, 46, 46, 46, 254, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 83, 110, 148, 253, 40, 101, 184, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 82, 91, 178, 255, 213, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 161, 90, 144, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 139, 166, 202, 253, 41, 102, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 80, 92, 178, 255, 213, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 215, 67, 161, 255, 201, 129, 184, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 144, 98, 98, 253, 197, 56, 56, 253, 180, 69, 69, 253, 122, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 141, 99, 99, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 245, 3, 3, 255, 71, 55, 55, 255, 72, 72, 72, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 222, 176, 176, 252, 222, 177, 177, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 213, 213, 252, 251, 16, 16, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 239, 5, 5, 255, 67, 57, 57, 255, 64, 64, 64, 255, 213, 213, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 134, 106, 106, 252, 234, 18, 18, 254, 255, 0, 0, 255, 253, 2, 2, 255, 168, 76, 76, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 219, 193, 193, 252, 249, 35, 35, 254, 255, 0, 0, 255, 255, 3, 3, 255, 230, 135, 135, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 107, 107, 107, 252, 70, 34, 34, 254, 198, 50, 50, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 197, 50, 50, 255, 69, 34, 34, 254, 108, 107, 107, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 195, 195, 195, 252, 88, 53, 53, 254, 197, 49, 49, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 198, 50, 50, 255, 88, 52, 52, 254, 193, 192, 192, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 73, 108, 156, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 96, 89, 176, 255, 214, 67, 161, 255, 205, 69, 161, 255, 143, 101, 134, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 118, 152, 198, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 93, 90, 176, 255, 213, 67, 161, 255, 207, 70, 162, 255, 204, 160, 195, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 125, 114, 114, 252, 245, 17, 17, 255, 252, 10, 10, 255, 255, 9, 9, 255, 185, 65, 65, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 155, 78, 78, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 129, 38, 38, 255, 86, 86, 86, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 235, 111, 111, 253, 255, 9, 9, 255, 254, 13, 13, 255, 235, 110, 110, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 218, 188, 188, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 131, 37, 37, 255, 94, 94, 94, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 137, 103, 103, 252, 238, 15, 15, 255, 255, 0, 0, 255, 252, 3, 3, 255, 162, 81, 81, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 220, 188, 188, 252, 249, 29, 29, 255, 255, 0, 0, 255, 254, 5, 5, 255, 228, 143, 143, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 102, 101, 101, 252, 77, 32, 32, 254, 204, 51, 51, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 189, 47, 47, 255, 66, 37, 37, 254, 112, 112, 112, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 185, 185, 252, 90, 47, 47, 254, 203, 51, 51, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 191, 48, 48, 255, 88, 58, 58, 254, 201, 201, 201, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 101, 115, 133, 252, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 116, 89, 167, 254, 128, 109, 129, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 180, 192, 209, 252, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 124, 99, 178, 255, 203, 183, 204, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 139, 102, 102, 252, 255, 9, 9, 255, 254, 9, 9, 255, 255, 9, 9, 255, 208, 47, 47, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 174, 65, 65, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 166, 27, 27, 255, 110, 110, 110, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 250, 30, 30, 255, 255, 9, 9, 255, 255, 10, 10, 255, 251, 27, 27, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 211, 150, 150, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 183, 22, 22, 255, 143, 143, 143, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 141, 100, 100, 252, 241, 12, 12, 255, 255, 0, 0, 255, 250, 4, 4, 255, 157, 86, 86, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 221, 183, 183, 252, 251, 24, 24, 255, 255, 0, 0, 255, 254, 7, 7, 255, 227, 152, 152, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 96, 95, 95, 253, 88, 30, 30, 254, 208, 52, 52, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 179, 45, 45, 255, 64, 42, 42, 254, 115, 115, 115, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 175, 173, 173, 253, 96, 41, 41, 254, 207, 52, 52, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 181, 47, 47, 255, 91, 68, 68, 254, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 91, 112, 141, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 58, 105, 168, 254, 113, 118, 124, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 158, 178, 205, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 79, 127, 191, 254, 200, 206, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 120, 118, 118, 252, 216, 40, 40, 254, 255, 9, 9, 255, 251, 12, 12, 255, 155, 89, 89, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 185, 56, 56, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 179, 55, 55, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 243, 68, 68, 254, 255, 9, 9, 255, 255, 9, 9, 255, 244, 66, 66, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 124, 124, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 209, 32, 32, 255, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 144, 96, 96, 253, 244, 10, 10, 255, 255, 0, 0, 255, 248, 6, 6, 255, 152, 90, 90, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 222, 176, 176, 253, 251, 19, 19, 255, 255, 0, 0, 255, 253, 10, 10, 255, 225, 159, 159, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 89, 88, 88, 253, 102, 30, 30, 254, 210, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 167, 43, 43, 255, 64, 49, 49, 254, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 162, 161, 161, 253, 106, 36, 36, 254, 210, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 170, 44, 44, 255, 98, 82, 82, 254, 211, 211, 211, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 111, 117, 125, 252, 43, 102, 182, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 68, 107, 159, 254, 117, 118, 121, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 201, 206, 213, 252, 48, 107, 186, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 102, 141, 195, 254, 210, 212, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 121, 118, 118, 252, 146, 96, 96, 252, 132, 108, 108, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 191, 47, 47, 254, 255, 0, 0, 255, 255, 0, 0, 255, 230, 13, 13, 254, 200, 46, 46, 254, 201, 48, 48, 254, 178, 66, 66, 253, 126, 113, 113, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 218, 201, 201, 252, 235, 109, 109, 253, 235, 109, 109, 253, 218, 200, 200, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 218, 115, 115, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 249, 22, 22, 254, 226, 149, 149, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 148, 93, 93, 253, 246, 8, 8, 255, 255, 0, 0, 255, 246, 8, 8, 255, 147, 93, 93, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 223, 170, 170, 253, 252, 15, 15, 255, 255, 0, 0, 255, 252, 13, 13, 255, 223, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 99, 97, 97, 252, 106, 30, 30, 254, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 154, 39, 39, 255, 66, 58, 58, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 180, 179, 179, 252, 106, 33, 33, 254, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 158, 41, 41, 255, 108, 99, 99, 253, 214, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 91, 112, 141, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 184, 255, 80, 110, 150, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 157, 177, 205, 253, 40, 102, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 40, 102, 185, 255, 128, 159, 200, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 197, 38, 38, 254, 255, 0, 0, 255, 174, 56, 56, 253, 119, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 227, 109, 109, 253, 255, 0, 0, 255, 240, 17, 17, 255, 214, 133, 133, 253, 216, 206, 206, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 153, 89, 89, 253, 248, 6, 6, 255, 255, 0, 0, 255, 243, 11, 11, 255, 144, 97, 97, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 224, 163, 163, 253, 253, 12, 12, 255, 255, 0, 0, 255, 252, 17, 17, 255, 222, 173, 173, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 64, 52, 52, 253, 209, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 141, 36, 36, 255, 70, 67, 67, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 104, 95, 95, 253, 208, 52, 52, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 144, 38, 38, 255, 121, 117, 117, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 79, 109, 151, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 42, 102, 182, 255, 93, 113, 140, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 130, 160, 200, 253, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 45, 105, 186, 255, 155, 176, 204, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 136, 105, 105, 252, 134, 107, 107, 252, 119, 119, 119, 252, 204, 30, 30, 254, 178, 53, 53, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 230, 97, 97, 254, 240, 18, 18, 255, 210, 180, 180, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 158, 84, 84, 253, 250, 4, 4, 255, 255, 0, 0, 255, 240, 13, 13, 255, 140, 101, 101, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 226, 156, 156, 253, 253, 8, 8, 255, 255, 0, 0, 255, 251, 22, 22, 255, 221, 180, 180, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 72, 47, 47, 253, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 127, 33, 33, 255, 78, 76, 76, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 105, 83, 83, 253, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 131, 35, 35, 255, 135, 134, 134, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 66, 106, 161, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 47, 102, 178, 255, 102, 114, 132, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 102, 142, 195, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 55, 112, 188, 255, 176, 190, 208, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 188, 63, 63, 253, 252, 11, 11, 255, 254, 10, 10, 255, 171, 76, 76, 253, 175, 45, 45, 253, 119, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 184, 184, 184, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 219, 194, 194, 252, 243, 71, 71, 254, 246, 54, 54, 254, 227, 151, 151, 253, 223, 79, 79, 253, 211, 160, 160, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 163, 80, 80, 253, 252, 3, 3, 255, 255, 0, 0, 255, 237, 16, 16, 255, 137, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 176, 176, 176, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 227, 148, 148, 253, 254, 6, 6, 255, 255, 0, 0, 255, 250, 27, 27, 255, 221, 185, 185, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 73, 71, 71, 253, 170, 43, 43, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 111, 31, 31, 254, 85, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 133, 131, 131, 253, 168, 43, 43, 255, 211, 53, 53, 255, 211, 53, 53, 255, 211, 53, 53, 255, 117, 34, 34, 254, 150, 148, 148, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 116, 118, 121, 252, 56, 104, 170, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 53, 104, 172, 254, 110, 117, 126, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 161, 161, 161, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 210, 212, 214, 252, 79, 126, 191, 254, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 69, 121, 190, 254, 194, 201, 211, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 1, 1, 1, 253, 104, 104, 104, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 249, 13, 13, 255, 253, 10, 10, 255, 255, 9, 9, 255, 232, 27, 27, 254, 126, 107, 107, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 113, 113, 252, 1, 1, 1, 253, 1, 1, 1, 249, 183, 183, 183, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 240, 84, 84, 254, 255, 9, 9, 255, 254, 12, 12, 255, 253, 17, 17, 255, 202, 138, 138, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 1, 1, 1, 253, 1, 1, 1, 245, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 149, 93, 93, 253, 253, 2, 2, 255, 255, 0, 0, 255, 233, 19, 19, 254, 133, 107, 107, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 1, 1, 1, 253, 1, 1, 1, 242, 175, 175, 175, 253, 215, 215, 215, 252, 215, 215, 215, 252, 224, 170, 170, 252, 254, 4, 4, 255, 255, 0, 0, 255, 249, 32, 32, 254, 219, 191, 191, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 3, 3, 3, 254, 0, 0, 0, 241, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 65, 53, 53, 253, 110, 29, 29, 255, 131, 36, 36, 255, 76, 33, 33, 254, 94, 92, 92, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 4, 4, 4, 253, 1, 1, 1, 238, 167, 167, 167, 253, 215, 215, 215, 252, 215, 215, 215, 252, 213, 213, 213, 252, 106, 95, 95, 253, 111, 30, 30, 255, 134, 39, 39, 255, 92, 47, 47, 254, 165, 164, 164, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 10, 10, 10, 254, 0, 0, 0, 235, 91, 91, 91, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 111, 117, 125, 252, 48, 103, 177, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 62, 106, 164, 254, 115, 118, 122, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 8, 8, 8, 253, 1, 1, 1, 234, 160, 160, 160, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 200, 205, 212, 252, 61, 115, 189, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 90, 134, 193, 254, 206, 209, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 18, 18, 18, 254, 0, 0, 0, 228, 90, 90, 90, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 230, 29, 29, 254, 255, 9, 9, 255, 255, 9, 9, 255, 212, 43, 43, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 99, 99, 99, 252, 0, 0, 0, 246, 1, 1, 1, 225, 158, 158, 158, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 243, 73, 73, 254, 255, 9, 9, 255, 255, 9, 9, 255, 255, 10, 10, 255, 218, 202, 202, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 184, 184, 184, 252, 1, 1, 1, 248, 0, 0, 0, 222, 85, 85, 85, 253, 119, 119, 119, 252, 119, 119, 119, 252, 171, 73, 73, 253, 255, 0, 0, 255, 229, 22, 22, 254, 130, 109, 109, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 104, 104, 104, 252, 1, 1, 1, 250, 1, 1, 1, 218, 150, 150, 150, 253, 215, 215, 215, 252, 215, 215, 215, 252, 230, 135, 135, 253, 255, 0, 0, 255, 248, 38, 38, 254, 219, 196, 196, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 192, 192, 192, 252, 1, 1, 1, 251, 0, 0, 0, 213, 81, 81, 81, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 111, 111, 111, 252, 102, 102, 102, 252, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 109, 109, 109, 252, 1, 1, 1, 252, 1, 1, 1, 210, 143, 143, 143, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 201, 201, 201, 252, 183, 183, 183, 252, 212, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 199, 199, 199, 252, 2, 2, 2, 253, 0, 0, 0, 207, 77, 77, 77, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 103, 115, 130, 253, 43, 102, 181, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 74, 108, 155, 254, 118, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 112, 112, 112, 252, 1, 1, 1, 253, 1, 1, 1, 206, 135, 135, 135, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 184, 195, 209, 252, 50, 108, 187, 255, 39, 101, 185, 255, 39, 101, 185, 255, 39, 101, 185, 255, 114, 149, 197, 254, 213, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 205, 205, 205, 252, 3, 3, 3, 253, 0, 0, 0, 178, 60, 60, 60, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 136, 105, 105, 252, 201, 51, 51, 253, 195, 57, 57, 253, 130, 110, 110, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 69, 69, 69, 253, 0, 0, 0, 199, 0, 0, 0, 173, 105, 105, 105, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 222, 176, 176, 253, 250, 34, 34, 254, 254, 14, 14, 255, 233, 120, 120, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 130, 130, 130, 253, 1, 1, 1, 203, 0, 0, 0, 168, 56, 56, 56, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 146, 95, 95, 253, 122, 116, 116, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 74, 74, 74, 253, 0, 0, 0, 208, 0, 0, 0, 164, 97, 97, 97, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 223, 172, 172, 253, 216, 209, 209, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 137, 137, 137, 253, 1, 1, 1, 213, 0, 0, 0, 160, 51, 51, 51, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 78, 78, 78, 253, 0, 0, 0, 218, 0, 0, 0, 156, 89, 89, 89, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 145, 145, 145, 253, 1, 1, 1, 223, 0, 0, 0, 151, 47, 47, 47, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 106, 116, 129, 252, 69, 107, 159, 254, 65, 106, 163, 254, 96, 114, 137, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 83, 83, 83, 253, 0, 0, 0, 227, 0, 0, 0, 146, 81, 81, 81, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 189, 198, 210, 252, 108, 145, 196, 254, 97, 139, 195, 254, 164, 182, 206, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 153, 153, 153, 253, 1, 1, 1, 231, 0, 0, 0, 65, 5, 5, 5, 252, 99, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 105, 105, 105, 252, 9, 9, 9, 253, 0, 0, 0, 84, 0, 0, 0, 61, 8, 8, 8, 252, 176, 176, 176, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 192, 192, 192, 252, 18, 18, 18, 254, 0, 0, 0, 89, 0, 0, 0, 57, 4, 4, 4, 251, 96, 96, 96, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 107, 107, 107, 252, 11, 11, 11, 253, 0, 0, 0, 94, 0, 0, 0, 53, 5, 5, 5, 250, 172, 172, 172, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 196, 196, 196, 252, 22, 22, 22, 254, 0, 0, 0, 98, 0, 0, 0, 50, 2, 2, 2, 248, 93, 93, 93, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 109, 109, 109, 252, 13, 13, 13, 253, 0, 0, 0, 103, 0, 0, 0, 47, 4, 4, 4, 248, 166, 166, 166, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 199, 199, 199, 252, 27, 27, 27, 254, 0, 0, 0, 108, 0, 0, 0, 43, 1, 1, 1, 246, 90, 90, 90, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 111, 111, 111, 252, 16, 16, 16, 253, 0, 0, 0, 112, 0, 0, 0, 40, 3, 3, 3, 245, 159, 159, 159, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 202, 202, 202, 252, 31, 31, 31, 254, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 130, 6, 6, 6, 253, 66, 66, 66, 253, 99, 99, 99, 252, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 101, 101, 101, 252, 70, 70, 70, 253, 9, 9, 9, 253, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 10, 10, 10, 253, 118, 118, 118, 253, 177, 177, 177, 252, 213, 213, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 183, 183, 183, 252, 128, 128, 128, 253, 18, 18, 18, 254, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 5, 5, 5, 252, 64, 64, 64, 253, 98, 98, 98, 252, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 102, 102, 102, 252, 72, 72, 72, 253, 10, 10, 10, 253, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 9, 9, 9, 252, 114, 114, 114, 253, 176, 176, 176, 252, 212, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 184, 184, 184, 252, 132, 132, 132, 253, 20, 20, 20, 254, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 4, 4, 4, 252, 62, 62, 62, 253, 97, 97, 97, 252, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 103, 103, 103, 252, 74, 74, 74, 253, 12, 12, 12, 253, 0, 0, 0, 168, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 110, 7, 7, 7, 252, 110, 110, 110, 253, 174, 174, 174, 252, 211, 211, 211, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 135, 135, 135, 253, 23, 23, 23, 254, 0, 0, 0, 173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 105, 3, 3, 3, 251, 60, 60, 60, 253, 96, 96, 96, 252, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 103, 103, 103, 252, 75, 75, 75, 253, 14, 14, 14, 253, 0, 0, 0, 177, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 101, 5, 5, 5, 250, 106, 106, 106, 253, 173, 173, 173, 252, 210, 210, 210, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 188, 188, 188, 252, 138, 138, 138, 253, 27, 27, 27, 254, 0, 0, 0, 181, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 198, 0, 0, 0, 245, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 247, 0, 0, 0, 203, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 1, 1, 197, 1, 1, 1, 245, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 248, 1, 1, 1, 204, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 195, 0, 0, 0, 244, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 248, 0, 0, 0, 205, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 1, 1, 194, 1, 1, 1, 244, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 249, 1, 1, 1, 206, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 192, 0, 0, 0, 243, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 249, 0, 0, 0, 206, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 191, 1, 1, 1, 243, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 250, 1, 1, 1, 208, 0, 0, 0, 102, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 189, 0, 0, 0, 242, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 250, 0, 0, 0, 208, 0, 0, 0, 105, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 188, 1, 1, 1, 242, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 251, 1, 1, 1, 210, 0, 0, 0, 107, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 119, 0, 0, 0, 177, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 212, 0, 0, 0, 196, 0, 0, 0, 146, 0, 0, 7, 58, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 117, 0, 0, 0, 176, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 213, 1, 1, 1, 197, 0, 0, 0, 147, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 183, 0, 0, 0, 235, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 229, 0, 0, 0, 176, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 183, 1, 1, 1, 234, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 254, 1, 1, 1, 230, 0, 0, 0, 177, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 218, 25, 25, 25, 253, 64, 64, 64, 253, 82, 82, 82, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 84, 84, 84, 253, 44, 43, 88, 253, 2, 0, 70, 255, 0, 0, 7, 255, 0, 0, 22, 140, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 217, 44, 44, 44, 254, 114, 114, 114, 253, 148, 148, 148, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 151, 151, 151, 253, 139, 139, 148, 253, 22, 19, 135, 254, 4, 1, 112, 255, 4, 3, 27, 251, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 6, 6, 6, 253, 62, 62, 62, 253, 92, 92, 92, 253, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 104, 104, 104, 252, 105, 105, 105, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 88, 88, 88, 253, 55, 55, 55, 253, 2, 2, 2, 249, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 10, 10, 10, 253, 110, 110, 110, 253, 165, 165, 165, 253, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 193, 193, 193, 252, 186, 186, 186, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 161, 161, 161, 253, 101, 101, 101, 253, 5, 5, 5, 250, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 217, 54, 54, 54, 253, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 111, 111, 123, 252, 15, 11, 168, 255, 5, 0, 173, 255, 4, 0, 141, 255, 0, 0, 14, 255, 0, 0, 28, 104, 0, 0, 0, 9, 0, 0, 0, 214, 95, 95, 95, 253, 212, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 92, 89, 190, 254, 5, 0, 173, 255, 5, 0, 173, 255, 11, 7, 164, 255, 6, 5, 38, 254, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 7, 7, 7, 253, 101, 101, 101, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 31, 31, 31, 254, 56, 56, 56, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 90, 90, 90, 253, 2, 2, 2, 248, 0, 0, 0, 48, 0, 0, 0, 72, 12, 12, 12, 253, 180, 180, 180, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 86, 86, 86, 254, 71, 71, 71, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 167, 167, 167, 253, 5, 5, 5, 250, 0, 0, 0, 52, 0, 0, 0, 113, 25, 25, 25, 253, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 48, 45, 152, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 3, 0, 110, 255, 0, 0, 5, 231, 0, 0, 1, 109, 42, 42, 42, 254, 212, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 166, 166, 205, 253, 6, 1, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 25, 21, 137, 254, 1, 1, 1, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 68, 68, 68, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 51, 51, 51, 253, 0, 0, 0, 255, 73, 73, 73, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 52, 52, 52, 253, 0, 0, 0, 167, 1, 1, 1, 195, 119, 119, 119, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 124, 124, 124, 253, 0, 0, 0, 255, 95, 95, 95, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 99, 99, 99, 253, 0, 0, 0, 171, 0, 0, 0, 170, 62, 62, 62, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 89, 88, 133, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 165, 255, 0, 0, 3, 254, 0, 0, 0, 183, 109, 109, 109, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 210, 210, 214, 252, 39, 35, 179, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 28, 24, 175, 254, 5, 5, 5, 253, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 1, 1, 246, 101, 101, 101, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 49, 49, 49, 253, 17, 17, 17, 255, 68, 68, 68, 255, 2, 2, 2, 255, 96, 96, 96, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 85, 85, 85, 253, 0, 0, 0, 218, 1, 1, 1, 243, 177, 177, 177, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 114, 114, 114, 253, 8, 8, 8, 255, 79, 79, 79, 255, 0, 0, 0, 255, 154, 154, 154, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 156, 156, 156, 253, 1, 1, 1, 223, 0, 0, 0, 206, 81, 81, 81, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 121, 252, 20, 16, 165, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 1, 0, 21, 254, 1, 1, 1, 229, 143, 143, 143, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 109, 107, 194, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 27, 27, 36, 254, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 116, 116, 116, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 103, 103, 103, 252, 23, 23, 23, 254, 54, 54, 54, 255, 195, 195, 195, 255, 211, 211, 211, 255, 45, 45, 45, 255, 17, 17, 17, 254, 115, 115, 115, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 206, 206, 206, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 199, 199, 199, 252, 59, 59, 59, 254, 37, 37, 37, 255, 181, 181, 181, 255, 215, 215, 215, 255, 70, 70, 70, 255, 11, 11, 11, 255, 189, 189, 189, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 185, 185, 185, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 57, 54, 147, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 24, 21, 163, 254, 13, 13, 17, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 180, 179, 208, 252, 10, 5, 174, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 122, 120, 196, 253, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 80, 80, 80, 253, 6, 6, 6, 255, 105, 105, 105, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 191, 191, 191, 255, 15, 15, 15, 255, 37, 37, 37, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 165, 165, 165, 253, 21, 21, 21, 254, 80, 80, 80, 255, 210, 210, 210, 255, 215, 215, 215, 255, 215, 215, 215, 255, 205, 205, 205, 255, 33, 33, 33, 255, 46, 46, 46, 254, 213, 213, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 97, 96, 129, 253, 7, 2, 172, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 23, 19, 163, 254, 109, 109, 124, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 213, 213, 215, 252, 52, 48, 182, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 120, 118, 196, 253, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 47, 47, 47, 254, 18, 18, 18, 255, 161, 161, 161, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 153, 153, 153, 255, 0, 0, 0, 255, 71, 71, 71, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 112, 112, 112, 253, 8, 8, 8, 255, 140, 140, 140, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 177, 177, 177, 255, 6, 6, 6, 255, 89, 89, 89, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 120, 252, 27, 23, 162, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 22, 18, 164, 254, 108, 108, 124, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 126, 124, 197, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 115, 113, 195, 253, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 101, 101, 101, 252, 21, 21, 21, 254, 56, 56, 56, 255, 196, 196, 196, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 104, 104, 104, 255, 1, 1, 1, 255, 94, 94, 94, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 196, 196, 196, 252, 55, 55, 55, 254, 39, 39, 39, 255, 182, 182, 182, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 136, 136, 136, 255, 0, 0, 0, 255, 147, 147, 147, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 66, 65, 143, 253, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 21, 17, 165, 255, 107, 107, 125, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 191, 190, 210, 252, 16, 11, 175, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 111, 109, 194, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 78, 78, 78, 253, 5, 5, 5, 255, 112, 112, 112, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 213, 213, 213, 255, 52, 52, 52, 255, 15, 15, 15, 254, 113, 113, 113, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 161, 161, 161, 253, 18, 18, 18, 254, 86, 86, 86, 255, 212, 212, 212, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 79, 79, 79, 255, 9, 9, 9, 255, 185, 185, 185, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 129, 129, 135, 253, 105, 103, 179, 255, 17, 12, 174, 255, 5, 0, 173, 255, 5, 0, 173, 255, 20, 16, 166, 255, 107, 106, 125, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 90, 87, 185, 254, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 5, 0, 173, 255, 107, 105, 193, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 116, 116, 116, 252, 44, 44, 44, 254, 21, 21, 21, 255, 164, 164, 164, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 197, 197, 197, 255, 19, 19, 19, 255, 34, 34, 34, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 105, 105, 105, 253, 10, 10, 10, 255, 145, 145, 145, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 209, 209, 209, 255, 39, 39, 39, 255, 41, 41, 41, 254, 210, 210, 210, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 121, 121, 121, 252, 173, 173, 179, 254, 188, 188, 188, 255, 146, 146, 184, 255, 5, 1, 173, 255, 19, 15, 166, 255, 105, 105, 125, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 191, 191, 200, 253, 188, 188, 188, 255, 111, 109, 181, 255, 5, 0, 173, 255, 5, 0, 173, 255, 103, 101, 192, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 100, 100, 100, 252, 20, 20, 20, 254, 58, 58, 58, 255, 199, 199, 199, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 161, 161, 161, 255, 1, 1, 1, 255, 66, 66, 66, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 195, 195, 195, 252, 54, 54, 54, 254, 42, 42, 42, 255, 186, 186, 186, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 183, 183, 183, 255, 8, 8, 8, 255, 82, 82, 82, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 149, 149, 157, 254, 188, 188, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 60, 57, 170, 255, 104, 104, 126, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 204, 209, 252, 184, 184, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 43, 40, 176, 255, 99, 96, 192, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 77, 77, 77, 253, 5, 5, 5, 255, 114, 114, 114, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 113, 113, 113, 255, 1, 1, 1, 255, 90, 90, 90, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 160, 160, 160, 253, 16, 16, 16, 254, 88, 88, 88, 255, 212, 212, 212, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 145, 145, 145, 255, 0, 0, 0, 255, 139, 139, 139, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 167, 83, 83, 253, 235, 31, 31, 254, 220, 43, 43, 254, 145, 99, 99, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 128, 128, 133, 253, 185, 185, 187, 255, 188, 188, 188, 255, 188, 188, 188, 255, 179, 179, 185, 255, 126, 126, 133, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 230, 140, 140, 253, 249, 44, 44, 254, 244, 70, 70, 254, 222, 181, 181, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 187, 187, 192, 254, 188, 188, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 159, 158, 193, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 13, 13, 13, 254, 110, 110, 110, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 58, 58, 58, 255, 12, 12, 12, 255, 110, 110, 110, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 58, 58, 58, 254, 81, 81, 81, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 86, 86, 86, 255, 7, 7, 7, 255, 179, 179, 179, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 89, 78, 78, 253, 247, 23, 23, 255, 255, 17, 17, 255, 255, 17, 17, 255, 216, 46, 46, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 115, 115, 115, 252, 92, 92, 92, 253, 72, 72, 72, 254, 71, 71, 71, 254, 111, 111, 111, 254, 186, 186, 187, 255, 188, 188, 188, 255, 179, 179, 186, 255, 128, 128, 134, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 148, 134, 134, 253, 253, 25, 25, 255, 255, 17, 17, 255, 255, 17, 17, 255, 242, 80, 80, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 209, 209, 209, 252, 162, 162, 162, 253, 152, 152, 152, 253, 163, 163, 169, 253, 188, 188, 188, 255, 188, 188, 188, 255, 188, 188, 188, 255, 181, 181, 193, 254, 214, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 87, 87, 87, 253, 12, 12, 12, 255, 189, 189, 189, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 202, 202, 202, 255, 23, 23, 23, 255, 30, 30, 30, 254, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 179, 179, 179, 252, 7, 7, 7, 255, 169, 169, 169, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 212, 212, 212, 255, 44, 44, 44, 255, 35, 35, 35, 254, 206, 206, 206, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 114, 59, 59, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 249, 20, 20, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 112, 111, 111, 252, 102, 55, 55, 255, 80, 53, 53, 255, 59, 59, 59, 255, 59, 59, 59, 255, 59, 59, 59, 255, 107, 107, 109, 255, 180, 180, 186, 255, 128, 128, 135, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 156, 93, 93, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 252, 31, 31, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 148, 148, 148, 253, 69, 69, 69, 255, 59, 59, 59, 255, 59, 59, 59, 255, 60, 60, 60, 255, 136, 136, 139, 255, 188, 188, 188, 255, 181, 181, 193, 254, 213, 213, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 54, 54, 54, 253, 47, 47, 47, 255, 214, 214, 214, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 167, 167, 167, 255, 1, 1, 1, 255, 59, 59, 59, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 134, 134, 134, 253, 26, 26, 26, 255, 203, 203, 203, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 215, 215, 215, 255, 187, 187, 187, 255, 10, 10, 10, 255, 73, 73, 73, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 113, 60, 60, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 251, 20, 20, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 130, 110, 110, 252, 222, 21, 21, 254, 255, 0, 0, 255, 252, 1, 1, 255, 172, 25, 25, 255, 61, 58, 58, 255, 59, 59, 59, 255, 59, 59, 59, 255, 125, 125, 130, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 156, 94, 94, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 252, 29, 29, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 131, 131, 253, 206, 15, 15, 255, 201, 16, 16, 255, 110, 44, 44, 255, 59, 59, 59, 255, 59, 59, 59, 255, 61, 61, 61, 255, 175, 175, 186, 253, 213, 213, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 27, 27, 27, 254, 40, 49, 122, 255, 65, 84, 237, 255, 65, 84, 237, 255, 57, 78, 238, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 236, 255, 17, 22, 66, 255, 1, 1, 1, 255, 87, 87, 87, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 74, 74, 74, 254, 22, 30, 94, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 43, 65, 240, 255, 21, 29, 93, 255, 0, 0, 0, 255, 128, 128, 128, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 112, 61, 61, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 252, 19, 19, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 202, 45, 45, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 165, 27, 27, 255, 59, 59, 59, 255, 59, 59, 59, 255, 114, 114, 114, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 155, 96, 96, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 253, 27, 27, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 225, 159, 159, 253, 254, 1, 1, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 128, 38, 38, 255, 59, 59, 59, 255, 59, 59, 59, 255, 182, 182, 182, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 105, 105, 105, 252, 7, 7, 12, 254, 0, 22, 195, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 25, 220, 255, 0, 6, 57, 255, 33, 33, 33, 254, 44, 44, 44, 254, 55, 55, 55, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 207, 207, 252, 31, 31, 31, 254, 0, 19, 165, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 26, 232, 255, 0, 10, 79, 255, 43, 43, 43, 254, 97, 97, 97, 253, 69, 69, 69, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 110, 62, 62, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 254, 17, 17, 255, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 120, 118, 118, 252, 247, 6, 6, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 253, 1, 1, 255, 86, 51, 51, 255, 61, 61, 61, 255, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 155, 98, 98, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 253, 25, 25, 255, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 243, 62, 62, 254, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 248, 2, 2, 255, 78, 53, 53, 255, 59, 59, 59, 255, 187, 187, 187, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 84, 84, 84, 253, 0, 4, 33, 255, 0, 26, 232, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 20, 175, 255, 1, 3, 20, 255, 64, 64, 64, 253, 119, 119, 119, 252, 117, 117, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 174, 174, 174, 252, 4, 5, 19, 255, 0, 24, 214, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 22, 196, 255, 0, 4, 33, 255, 90, 90, 90, 253, 212, 212, 212, 252, 213, 213, 214, 252, 214, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 103, 68, 68, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 128, 111, 111, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 132, 105, 105, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 156, 30, 30, 255, 73, 73, 73, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 153, 110, 110, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 216, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 246, 12, 12, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 157, 29, 29, 255, 64, 64, 64, 255, 212, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 50, 50, 50, 253, 0, 9, 82, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 242, 255, 0, 13, 115, 255, 13, 13, 14, 254, 92, 92, 92, 253, 119, 119, 119, 252, 119, 119, 119, 252, 63, 79, 187, 253, 116, 117, 122, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 127, 127, 127, 253, 0, 6, 52, 254, 0, 27, 241, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 16, 142, 255, 11, 12, 16, 255, 149, 149, 149, 253, 215, 215, 215, 252, 215, 215, 215, 252, 127, 141, 232, 253, 194, 197, 219, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 88, 79, 79, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 147, 97, 97, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 145, 86, 86, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 198, 17, 17, 255, 95, 95, 95, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 148, 132, 132, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 222, 181, 181, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 204, 204, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 213, 13, 13, 255, 106, 106, 106, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 24, 24, 24, 254, 0, 16, 145, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 25, 219, 255, 0, 6, 55, 255, 34, 34, 34, 254, 112, 112, 112, 252, 119, 119, 119, 252, 119, 119, 119, 252, 113, 114, 127, 252, 13, 45, 250, 255, 83, 94, 162, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 67, 67, 67, 254, 0, 12, 111, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 26, 231, 255, 0, 9, 78, 255, 45, 45, 45, 254, 188, 188, 188, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 215, 252, 35, 63, 250, 254, 119, 134, 233, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 238, 29, 29, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 179, 73, 73, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 155, 74, 74, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 206, 28, 28, 254, 118, 118, 118, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 145, 145, 253, 251, 34, 34, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 231, 133, 133, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 207, 167, 167, 252, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 232, 7, 7, 255, 182, 182, 182, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 103, 103, 103, 252, 5, 6, 13, 255, 0, 23, 201, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 20, 173, 255, 1, 3, 19, 255, 66, 66, 66, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 77, 89, 170, 253, 9, 42, 255, 255, 42, 65, 213, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 204, 204, 252, 27, 27, 28, 254, 0, 20, 173, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 22, 195, 255, 0, 4, 32, 255, 93, 93, 93, 253, 213, 213, 213, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 166, 174, 225, 252, 9, 42, 255, 255, 42, 70, 248, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 205, 55, 55, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 230, 35, 35, 254, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 164, 68, 68, 253, 255, 0, 0, 255, 255, 0, 0, 255, 250, 2, 2, 255, 223, 19, 19, 254, 213, 32, 32, 254, 204, 44, 44, 254, 142, 98, 98, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 242, 83, 83, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 246, 59, 59, 254, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 201, 145, 145, 253, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 254, 1, 1, 255, 232, 92, 92, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 80, 80, 80, 253, 0, 4, 37, 255, 0, 27, 235, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 242, 255, 0, 13, 113, 255, 14, 14, 14, 254, 93, 93, 93, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 39, 63, 217, 254, 9, 42, 255, 255, 11, 43, 253, 255, 109, 112, 130, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 170, 170, 170, 253, 2, 4, 21, 255, 0, 25, 219, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 16, 139, 255, 12, 13, 17, 255, 151, 151, 151, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 95, 114, 238, 253, 9, 42, 255, 255, 9, 42, 255, 255, 172, 179, 224, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 163, 86, 86, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 170, 80, 80, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 175, 64, 64, 253, 255, 0, 0, 255, 214, 27, 27, 254, 128, 103, 103, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 229, 143, 143, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 228, 147, 147, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 204, 134, 134, 253, 255, 0, 0, 255, 252, 1, 1, 255, 223, 84, 84, 253, 211, 156, 156, 253, 221, 185, 185, 252, 218, 201, 201, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 47, 47, 47, 254, 0, 10, 89, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 25, 217, 255, 0, 6, 54, 255, 35, 35, 35, 254, 112, 112, 112, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 15, 46, 247, 255, 9, 42, 255, 255, 9, 42, 255, 255, 87, 97, 158, 253, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 119, 119, 120, 253, 0, 6, 57, 255, 0, 28, 242, 255, 0, 28, 246, 255, 0, 28, 246, 255, 0, 26, 230, 255, 0, 9, 76, 255, 47, 47, 47, 254, 189, 189, 189, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 50, 76, 247, 254, 9, 42, 255, 255, 9, 42, 255, 255, 126, 141, 232, 253, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 121, 118, 118, 252, 236, 30, 30, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 249, 21, 21, 255, 152, 93, 93, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 185, 59, 59, 253, 217, 24, 24, 254, 122, 114, 114, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 216, 211, 211, 252, 251, 38, 38, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 253, 29, 29, 255, 224, 171, 171, 253, 215, 215, 215, 252, 215, 215, 215, 252, 210, 124, 124, 253, 251, 1, 1, 255, 213, 131, 131, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 22, 22, 22, 254, 0, 17, 153, 255, 0, 28, 246, 255, 0, 19, 171, 255, 1, 3, 19, 255, 67, 67, 67, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 12, 44, 251, 255, 9, 42, 255, 255, 9, 42, 255, 255, 85, 95, 161, 253, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 62, 62, 62, 254, 0, 13, 118, 255, 0, 28, 246, 255, 0, 22, 193, 255, 0, 4, 31, 255, 95, 95, 95, 253, 214, 214, 214, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 43, 70, 248, 254, 9, 42, 255, 255, 9, 42, 255, 255, 123, 137, 233, 253, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 167, 82, 82, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 251, 20, 20, 255, 175, 76, 76, 253, 120, 118, 118, 252, 119, 119, 119, 252, 180, 54, 54, 253, 130, 103, 103, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 231, 137, 137, 253, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 254, 24, 24, 255, 230, 137, 137, 253, 215, 214, 214, 252, 217, 117, 117, 253, 215, 98, 98, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 117, 117, 117, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 101, 101, 101, 252, 4, 5, 14, 255, 0, 11, 96, 255, 15, 15, 15, 254, 94, 94, 94, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 57, 75, 195, 253, 11, 44, 252, 255, 31, 57, 227, 254, 113, 115, 126, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 200, 200, 200, 252, 22, 22, 24, 254, 0, 11, 100, 255, 13, 14, 18, 254, 154, 154, 154, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 126, 140, 232, 253, 16, 48, 253, 255, 36, 64, 250, 254, 189, 193, 220, 252, 215, 215, 215, 252, 215, 215, 215, 252, 186, 186, 186, 252, 1, 1, 1, 253, 0, 0, 0, 208, 83, 83, 83, 253, 119, 119, 119, 252, 119, 119, 119, 252, 204, 54, 54, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 229, 36, 36, 254, 144, 100, 100, 253, 128, 99, 99, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 16, 16, 16, 254, 1, 1, 1, 230, 146, 146, 146, 253, 215, 215, 215, 252, 215, 215, 215, 252, 241, 83, 83, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 247, 58, 58, 254, 217, 106, 106, 253, 214, 212, 212, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 33, 33, 33, 254, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 1, 1, 1, 253, 116, 116, 116, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 87, 87, 87, 253, 49, 49, 49, 253, 113, 113, 113, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 121, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 100, 100, 100, 252, 1, 1, 1, 249, 1, 1, 1, 253, 207, 207, 207, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 169, 169, 169, 253, 86, 86, 86, 253, 190, 190, 190, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 212, 213, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 185, 185, 185, 252, 1, 1, 1, 253, 0, 0, 0, 190, 72, 72, 72, 253, 119, 119, 119, 252, 119, 119, 119, 252, 125, 115, 115, 252, 216, 45, 45, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 240, 28, 28, 255, 130, 111, 111, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 7, 7, 7, 253, 1, 1, 1, 210, 127, 127, 127, 253, 215, 215, 215, 252, 215, 215, 215, 252, 217, 205, 205, 252, 244, 67, 67, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 250, 41, 41, 254, 218, 202, 202, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 214, 252, 15, 15, 15, 254, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 1, 1, 247, 102, 102, 102, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 86, 86, 86, 253, 0, 0, 0, 222, 1, 1, 1, 246, 179, 179, 179, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 159, 159, 159, 253, 1, 1, 1, 226, 0, 0, 0, 141, 45, 45, 45, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 121, 117, 117, 252, 201, 57, 57, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 152, 94, 94, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 97, 97, 97, 252, 0, 0, 0, 246, 0, 0, 0, 140, 78, 78, 78, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 210, 210, 252, 240, 89, 89, 254, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 255, 17, 17, 255, 223, 173, 173, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 180, 180, 180, 252, 1, 1, 1, 248, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 71, 71, 71, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 55, 55, 55, 253, 0, 0, 0, 170, 1, 1, 1, 198, 124, 124, 124, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 103, 103, 103, 253, 0, 0, 0, 176, 0, 0, 0, 47, 2, 2, 2, 248, 94, 94, 94, 253, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 158, 89, 89, 253, 235, 32, 32, 254, 255, 17, 17, 255, 255, 17, 17, 255, 242, 26, 26, 255, 130, 110, 110, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 118, 118, 118, 252, 30, 30, 30, 253, 0, 0, 0, 153, 0, 0, 0, 44, 3, 3, 3, 247, 168, 168, 168, 253, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 227, 152, 152, 253, 249, 43, 43, 254, 255, 17, 17, 255, 255, 17, 17, 255, 251, 38, 38, 255, 217, 203, 203, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 214, 214, 214, 252, 59, 59, 59, 254, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 9, 9, 9, 253, 105, 105, 105, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 95, 95, 95, 253, 3, 3, 3, 250, 0, 0, 0, 55, 0, 0, 0, 80, 14, 14, 14, 254, 187, 187, 187, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 174, 174, 174, 253, 7, 7, 7, 251, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 119, 7, 7, 7, 253, 72, 72, 72, 253, 111, 111, 111, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 122, 117, 117, 252, 163, 85, 85, 253, 181, 72, 72, 253, 132, 109, 109, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 119, 119, 119, 252, 117, 117, 117, 252, 95, 95, 95, 252, 30, 30, 30, 253, 0, 0, 0, 216, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 115, 13, 13, 13, 254, 128, 128, 128, 253, 200, 200, 200, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 216, 209, 209, 252, 228, 149, 149, 253, 233, 124, 124, 253, 218, 199, 199, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 215, 215, 215, 252, 213, 213, 213, 252, 173, 173, 173, 252, 57, 57, 57, 254, 1, 1, 1, 219, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 8, 8, 8, 253, 67, 67, 67, 253, 97, 97, 97, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 107, 107, 107, 252, 94, 94, 94, 252, 60, 60, 60, 253, 4, 4, 4, 251, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 14, 14, 14, 254, 120, 120, 120, 253, 174, 174, 174, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 194, 194, 194, 252, 170, 170, 170, 252, 111, 111, 111, 253, 9, 9, 9, 252, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 222, 1, 1, 1, 253, 11, 11, 11, 253, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 12, 12, 12, 254, 5, 5, 5, 253, 0, 0, 0, 245, 0, 0, 0, 153, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 1, 1, 1, 220, 1, 1, 1, 253, 21, 21, 21, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 23, 23, 23, 254, 10, 10, 10, 254, 1, 1, 1, 245, 0, 0, 0, 156, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 195, 0, 0, 0, 244, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 0, 0, 0, 240, 0, 0, 0, 186, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 1, 1, 1, 195, 1, 1, 1, 243, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 241, 0, 0, 0, 188, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0 ), +"format": "RGBA8", +"height": 256, +"mipmaps": false, +"width": 256 +} + +[sub_resource type="ImageTexture" id=3] +image = SubResource( 2 ) +size = Vector2( 256, 256 ) + +[sub_resource type="GDScript" id=1] +script/source = "tool +extends ProxyTexture + +func _init(): + if Directory.new().file_exists(\"res://addons/mat_maker_gd/icons/icons.svg\"): + var t : ImageTexture = ImageTexture.new() + t.load(\"res://addons/mat_maker_gd/icons/icons.svg\") + base = t +" + +[resource] +flags = 7 +base = SubResource( 3 ) +script = SubResource( 1 ) diff --git a/game/addons/mat_maker_gd/icons/link.tres b/game/addons/mat_maker_gd/icons/link.tres new file mode 100644 index 0000000..0e95109 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/link.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 7 +atlas = ExtResource( 1 ) +region = Rect2( 16, 0, 16, 15 ) diff --git a/game/addons/mat_maker_gd/icons/minimize.tres b/game/addons/mat_maker_gd/icons/minimize.tres new file mode 100644 index 0000000..7d367b4 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/minimize.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 7 +atlas = ExtResource( 1 ) +region = Rect2( 48, 96, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/output_preview.tres b/game/addons/mat_maker_gd/icons/output_preview.tres new file mode 100644 index 0000000..c84be54 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/output_preview.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 7 +atlas = ExtResource( 1 ) +region = Rect2( 0, 80, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/port_group_0.tres b/game/addons/mat_maker_gd/icons/port_group_0.tres new file mode 100644 index 0000000..ae29b24 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/port_group_0.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 7 +atlas = ExtResource( 1 ) +region = Rect2( 32, 64, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/port_group_1.tres b/game/addons/mat_maker_gd/icons/port_group_1.tres new file mode 100644 index 0000000..56412cc --- /dev/null +++ b/game/addons/mat_maker_gd/icons/port_group_1.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 7 +atlas = ExtResource( 1 ) +region = Rect2( 32, 80, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/port_group_2.tres b/game/addons/mat_maker_gd/icons/port_group_2.tres new file mode 100644 index 0000000..dd08018 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/port_group_2.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 4 +atlas = ExtResource( 1 ) +region = Rect2( 32, 96, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/port_group_3.tres b/game/addons/mat_maker_gd/icons/port_group_3.tres new file mode 100644 index 0000000..2943001 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/port_group_3.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 7 +atlas = ExtResource( 1 ) +region = Rect2( 32, 112, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/randomness_locked.tres b/game/addons/mat_maker_gd/icons/randomness_locked.tres new file mode 100644 index 0000000..48fcc12 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/randomness_locked.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 4 +atlas = ExtResource( 1 ) +region = Rect2( 80, 32, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/randomness_unlocked.tres b/game/addons/mat_maker_gd/icons/randomness_unlocked.tres new file mode 100644 index 0000000..9ec871f --- /dev/null +++ b/game/addons/mat_maker_gd/icons/randomness_unlocked.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 7 +atlas = ExtResource( 1 ) +region = Rect2( 64, 32, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/remove.tres b/game/addons/mat_maker_gd/icons/remove.tres new file mode 100644 index 0000000..b1f1c2f --- /dev/null +++ b/game/addons/mat_maker_gd/icons/remove.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 7 +atlas = ExtResource( 1 ) +region = Rect2( 32, 0, 16, 16 ) diff --git a/game/addons/mat_maker_gd/icons/up.tres b/game/addons/mat_maker_gd/icons/up.tres new file mode 100644 index 0000000..ab48648 --- /dev/null +++ b/game/addons/mat_maker_gd/icons/up.tres @@ -0,0 +1,8 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=1] + +[resource] +flags = 4 +atlas = ExtResource( 1 ) +region = Rect2( 16, 48, 16, 16 ) diff --git a/game/addons/mat_maker_gd/new_resource.tres b/game/addons/mat_maker_gd/new_resource.tres new file mode 100644 index 0000000..9e96b42 --- /dev/null +++ b/game/addons/mat_maker_gd/new_resource.tres @@ -0,0 +1,652 @@ +[gd_resource type="Resource" load_steps=89 format=2] + +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/adjust_hsv.gd" type="Script" id=2] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/voronoi.gd" type="Script" id=3] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/invert.gd" type="Script" id=4] +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=5] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/combine.gd" type="Script" id=6] +[ext_resource path="res://addons/mat_maker_gd/nodes/transform/scale.gd" type="Script" id=7] +[ext_resource path="res://addons/mat_maker_gd/nodes/transform/repeat.gd" type="Script" id=8] +[ext_resource path="res://addons/mat_maker_gd/nodes/transform/shear.gd" type="Script" id=9] +[ext_resource path="res://addons/mat_maker_gd/nodes/transform/mirror.gd" type="Script" id=10] +[ext_resource path="res://addons/mat_maker_gd/nodes/transform/transform.gd" type="Script" id=11] +[ext_resource path="res://addons/mat_maker_gd/nodes/transform/circle_map.gd" type="Script" id=12] +[ext_resource path="res://addons/mat_maker_gd/nodes/transform/rotate.gd" type="Script" id=13] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/tonality.gd" type="Script" id=14] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/fill_to_position.gd" type="Script" id=15] +[ext_resource path="res://addons/mat_maker_gd/nodes/simple/shape.gd" type="Script" id=16] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/fill_to_uv.gd" type="Script" id=17] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/fill_to_random_grey.gd" type="Script" id=18] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/math.gd" type="Script" id=19] +[ext_resource path="res://addons/mat_maker_gd/nodes/transform/color_tiler.gd" type="Script" id=20] + +[sub_resource type="Resource" id=1] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=3] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=4] +script = ExtResource( 2 ) +graph_position = Vector2( 140, 0 ) +image = SubResource( 1 ) +input = SubResource( 3 ) +hue = 0.0 +saturation = 1.0 +value = 1.0 + +[sub_resource type="Resource" id=5] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=6] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=7] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=2] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=8] +script = ExtResource( 3 ) +graph_position = Vector2( -160, 40 ) +out_nodes = SubResource( 7 ) +out_borders = SubResource( 5 ) +out_random_color = SubResource( 2 ) +out_fill = SubResource( 6 ) +scale = Vector2( 13.6, 18.9 ) +stretch = Vector2( 2.13, 2.13 ) +intensity = 1.07 +randomness = 0.89 + +[sub_resource type="Resource" id=9] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=10] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=11] +script = ExtResource( 4 ) +graph_position = Vector2( 380, 80 ) +image = SubResource( 9 ) +input = SubResource( 10 ) + +[sub_resource type="Resource" id=12] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=13] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=14] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 7 ) + +[sub_resource type="Resource" id=15] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 2 ) + +[sub_resource type="Resource" id=16] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 5 ) + +[sub_resource type="Resource" id=17] +script = ExtResource( 6 ) +graph_position = Vector2( 380, 380 ) +image = SubResource( 12 ) +input_r = SubResource( 16 ) +input_g = SubResource( 15 ) +input_b = SubResource( 14 ) +input_a = SubResource( 13 ) + +[sub_resource type="Resource" id=18] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=19] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 12 ) + +[sub_resource type="Resource" id=20] +script = ExtResource( 7 ) +graph_position = Vector2( 1080, 180 ) +image = SubResource( 18 ) +input = SubResource( 19 ) +center = Vector2( 1, 1 ) +scale = Vector2( 1.3, 1.3 ) + +[sub_resource type="Resource" id=21] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 12 ) + +[sub_resource type="Resource" id=22] +script = ExtResource( 8 ) +graph_position = Vector2( 560, 300 ) +input = SubResource( 21 ) + +[sub_resource type="Resource" id=23] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=24] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 21 ) + +[sub_resource type="Resource" id=25] +script = ExtResource( 9 ) +graph_position = Vector2( 860, 200 ) +image = SubResource( 23 ) +input = SubResource( 24 ) +direction = 0 +amount = 1.06 +center = 0.0 + +[sub_resource type="Resource" id=26] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=27] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 21 ) + +[sub_resource type="Resource" id=28] +script = ExtResource( 10 ) +graph_position = Vector2( 620, 460 ) +image = SubResource( 26 ) +input = SubResource( 27 ) +direction = 0 +offset = 0.32 + +[sub_resource type="Resource" id=32] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=33] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 21 ) + +[sub_resource type="Resource" id=34] +script = ExtResource( 12 ) +graph_position = Vector2( 820, 580 ) +image = SubResource( 32 ) +input = SubResource( 33 ) +radius = 1.0 +repeat = 4 + +[sub_resource type="Resource" id=35] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=36] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=37] +script = ExtResource( 13 ) +graph_position = Vector2( 1040, 560 ) +image = SubResource( 35 ) +input = SubResource( 36 ) +center = Vector2( 0.13, 0 ) +rotate = 150.0 + +[sub_resource type="Resource" id=38] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=39] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 21 ) + +[sub_resource type="Resource" id=40] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 14.5 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 32 ) + +[sub_resource type="Resource" id=41] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 1.6 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=42] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 1.1 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=43] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 4.1 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=44] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 2.2 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=45] +script = ExtResource( 11 ) +graph_position = Vector2( 1280, 560 ) +image = SubResource( 38 ) +input = SubResource( 39 ) +translate_x = SubResource( 43 ) +translate_y = SubResource( 44 ) +rotate = SubResource( 40 ) +scale_x = SubResource( 41 ) +scale_y = SubResource( 42 ) +mode = 1 + +[sub_resource type="Resource" id=46] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=47] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 23 ) + +[sub_resource type="Resource" id=48] +script = ExtResource( 14 ) +graph_position = Vector2( 620, 0 ) +points = [ 0.0, 0.0, 0.0, 1.0, 0.284455, 0.780757, 0.0, 0.0, 0.735577, 0.159306, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0 ] +image = SubResource( 46 ) +input = SubResource( 47 ) + +[sub_resource type="Resource" id=49] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=50] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=51] +script = ExtResource( 15 ) +graph_position = Vector2( 120, 440 ) +image = SubResource( 49 ) +input = SubResource( 50 ) +axis = 2 + +[sub_resource type="Resource" id=52] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 0.1 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=53] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=54] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 1.3 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 2 ) + +[sub_resource type="Resource" id=55] +script = ExtResource( 16 ) +graph_position = Vector2( -440, 200 ) +image = SubResource( 53 ) +shape_type = 3 +sides = 7 +radius = SubResource( 54 ) +edge = SubResource( 52 ) + +[sub_resource type="Resource" id=56] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=59] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=57] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 59 ) + +[sub_resource type="Resource" id=58] +script = ExtResource( 17 ) +graph_position = Vector2( 580, 800 ) +image = SubResource( 56 ) +input = SubResource( 57 ) +mode = 0 + +[sub_resource type="Resource" id=60] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 12 ) + +[sub_resource type="Resource" id=61] +script = ExtResource( 18 ) +graph_position = Vector2( 320, 700 ) +image = SubResource( 59 ) +input = SubResource( 60 ) +edge_color = 0.9 + +[sub_resource type="Resource" id=63] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 5 ) + +[sub_resource type="Resource" id=64] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 53 ) + +[sub_resource type="Resource" id=65] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=62] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=66] +script = ExtResource( 19 ) +graph_position = Vector2( -720, 280 ) +image = SubResource( 65 ) +a = SubResource( 63 ) +b = SubResource( 64 ) +output = SubResource( 62 ) +operation = 3 +clamp_result = true + +[sub_resource type="Resource" id=67] +script = ExtResource( 5 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=68] +script = ExtResource( 5 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=69] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=70] +script = ExtResource( 5 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=71] +script = ExtResource( 20 ) +graph_position = Vector2( -1060, 280 ) +input = SubResource( 68 ) +in_mask = SubResource( 67 ) +output = SubResource( 70 ) +instance_map = SubResource( 69 ) +tile = Vector2( 4, 4 ) +overlap = 1.0 +select_inputs = 0 +scale = Vector2( 0.5, 0.5 ) +fixed_offset = 0.0 +rnd_offset = 0.28 +rnd_rotate = 100.0 +rnd_scale = 0.2 +rnd_opacity = 0.0 +variations = false + +[resource] +script = ExtResource( 1 ) +image_size = Vector2( 128, 128 ) +nodes = [ SubResource( 4 ), SubResource( 8 ), SubResource( 11 ), SubResource( 17 ), SubResource( 20 ), SubResource( 22 ), SubResource( 25 ), SubResource( 28 ), SubResource( 34 ), SubResource( 37 ), SubResource( 45 ), SubResource( 48 ), SubResource( 51 ), SubResource( 55 ), SubResource( 58 ), SubResource( 61 ), SubResource( 66 ), SubResource( 71 ) ] diff --git a/game/addons/mat_maker_gd/nodes/bases/curve_base.gd b/game/addons/mat_maker_gd/nodes/bases/curve_base.gd new file mode 100644 index 0000000..76daea5 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/bases/curve_base.gd @@ -0,0 +1,118 @@ +tool +extends MMNode + +class Point: + var p : Vector2 + var ls : float + var rs : float + func _init(x : float, y : float, nls : float, nrs : float) -> void: + p = Vector2(x, y) + ls = nls + rs = nrs + +export(PoolRealArray) var points + +func init_points_01(): + if points.size() == 0: + points = [ 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0 ] + +func init_points_11(): + if points.size() == 0: + points = [ 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0 ] + +func to_string() -> String: + var rv = PoolStringArray() + for p in points: + rv.append("("+str(p.x)+","+str(p.y)+","+str(p.ls)+","+str(p.rs)+")") + + return rv.join(",") + +func clear() -> void: + points.clear() + curve_changed() + +func add_point(x : float, y : float, ls : float = INF, rs : float = INF) -> void: + var indx : int = points.size() / 4 + + for i in indx: + var ii : int = i * 4 + if x < points[ii]: + if ls == INF: + ls == 0 + if rs == INF: + rs == 0 + + points.insert(ii, x) + points.insert(ii + 1, y) + points.insert(ii + 2, ls) + points.insert(ii + 3, rs) + + curve_changed() + return + + points.append(x) + points.append(y) + points.append(ls) + points.append(rs) + + curve_changed() + +func remove_point(i : int) -> bool: + var index : int = i * 4 + + if index <= 0 or index >= points.size() - 1: + return false + else: + points.remove(index) + points.remove(index) + points.remove(index) + points.remove(index) + + curve_changed() + return true + +func get_point_count() -> int: + return points.size() / 4 + +func set_point(i : int, v : Point) -> void: + var indx : int = i * 4 + + points[indx + 0] = v.p.x + points[indx + 1] = v.p.y + points[indx + 2] = v.ls + points[indx + 3] = v.rs + + curve_changed() + +func get_point(i : int) -> Point: + var indx : int = i * 4 + + return Point.new(points[indx + 0], points[indx + 1], points[indx + 2], points[indx + 3]) + +func get_points() -> Array: + var arr : Array = Array() + + var c : int = get_point_count() + + for i in range(c): + arr.append(get_point(i)) + + return arr + +func set_points(arr : Array, notify : bool = true) -> void: + points.resize(0) + + for p in arr: + points.append(p.p.x) + points.append(p.p.y) + points.append(p.ls) + points.append(p.rs) + + if notify: + curve_changed() + +func curve_changed() -> void: + _curve_changed() + +func _curve_changed() -> void: + emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/bases/gradient_base.gd b/game/addons/mat_maker_gd/nodes/bases/gradient_base.gd new file mode 100644 index 0000000..369614f --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/bases/gradient_base.gd @@ -0,0 +1,64 @@ +tool +extends MMNode + +#var Gradients = preload("res://addons/mat_maker_gd/nodes/common/gradients.gd") + +export(int) var interpolation_type : int = 1 setget set_interpolation_type, get_interpolation_type +export(PoolRealArray) var points : PoolRealArray = PoolRealArray() + +func get_gradient_color(x : float) -> Color: +# if interpolation_type == 0: +# return Gradients.gradient_type_1(x, points) +# elif interpolation_type == 1: +# return Gradients.gradient_type_2(x, points) +# elif interpolation_type == 2: +# return Gradients.gradient_type_3(x, points) +# elif interpolation_type == 3: +# return Gradients.gradient_type_4(x, points) + + return Color(1, 1, 1, 1) + +func get_interpolation_type() -> int: + return interpolation_type + +func set_interpolation_type(val : int) -> void: + interpolation_type = val + + set_dirty(true) + +func get_points() -> PoolRealArray: + return points + +func set_points(val : PoolRealArray) -> void: + points = val + + set_dirty(true) + +func get_point_value(index : int) -> float: + return points[index * 5] + +func get_point_color(index : int) -> Color: + var indx : int = index * 5 + + return Color(points[indx + 1], points[indx + 2], points[indx + 3], points[indx + 4]) + +func add_point(val : float, color : Color) -> void: + var s : int = points.size() + points.resize(s + 5) + + points[s] = val + + points[s + 1] = color.r + points[s + 2] = color.g + points[s + 3] = color.b + points[s + 4] = color.a + + set_dirty(true) + +func get_point_count() -> int: + return points.size() / 5 + +func clear() -> void: + points.resize(0) + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/bases/polygon_base.gd b/game/addons/mat_maker_gd/nodes/bases/polygon_base.gd new file mode 100644 index 0000000..a740455 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/bases/polygon_base.gd @@ -0,0 +1,73 @@ +tool +extends MMNode + +export(PoolVector2Array) var points : PoolVector2Array = [Vector2(0.2, 0.2), Vector2(0.7, 0.4), Vector2(0.4, 0.7)] + +func clear() -> void: + points.resize(0) + + _polygon_changed() + +func add_point(x : float, y : float, closed : bool = true) -> void: + var p : Vector2 = Vector2(x, y) + var points_count = points.size() + + if points_count < 3: + points.append(p) + _polygon_changed() + return + + var min_length : float = (p-Geometry.get_closest_point_to_segment_2d(p, points[0], points[points_count-1])).length() + var insert_point = 0 + + for i in points_count-1: + var length = (p - Geometry.get_closest_point_to_segment_2d(p, points[i], points[i+1])).length() + if length < min_length: + min_length = length + insert_point = i+1 + + if !closed and insert_point == 0 and (points[0]-p).length() > (points[points_count-1]-p).length(): + insert_point = points_count + + points.insert(insert_point, p) + + _polygon_changed() + +func remove_point(index : int) -> bool: + var s = points.size() + if s < 4 or index < 0 or index >= s: + return false + else: + points.remove(index) + _polygon_changed() + + return true + +func get_point_count() -> int: + return points.size() + +func get_point(i : int) -> Vector2: + return points[i] + +func set_point(i : int, v : Vector2) -> void: + points[i] = v + + _polygon_changed() + +func set_points(v : PoolVector2Array) -> void: + points = v + + _polygon_changed() + +func polygon_changed() -> void: + _polygon_changed() + +func _polygon_changed() -> void: + emit_changed() + +func to_string() -> String: + var rv = PoolStringArray() + for p in points: + rv.append("("+str(p.x)+","+str(p.y)+")") + + return rv.join(",") diff --git a/game/addons/mat_maker_gd/nodes/common/blur.gd b/game/addons/mat_maker_gd/nodes/common/blur.gd new file mode 100644 index 0000000..2aa637e --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/blur.gd @@ -0,0 +1,1172 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#directional_blur.mmg + +#{ +# "connections": [ +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer", +# "to_port": 0 +# }, +# { +# "from": "buffer", +# "from_port": 0, +# "to": "edge_detect_3_3_2", +# "to_port": 0 +# }, +# { +# "from": "edge_detect_3_3_2", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 1, +# "to": "edge_detect_3_3_2", +# "to_port": 1 +# } +# ], +# "label": "Directional Blur", +# "longdesc": "Applies a directional gaussian blur to its input", +# "name": "directional_blur", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "buffer", +# "node_position": { +# "x": -381.25, +# "y": -270.75 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -436.666626, +# "y": -413.666656 +# }, +# "parameters": { +# "param0": 9, +# "param1": 50, +# "param2": 45 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Grid size:", +# "linked_widgets": [ +# { +# "node": "buffer", +# "widget": "size" +# }, +# { +# "node": "edge_detect_3_3_2", +# "widget": "size" +# } +# ], +# "longdesc": "The resolution of the input", +# "name": "param0", +# "shortdesc": "Size", +# "type": "linked_control" +# }, +# { +# "label": "Sigma", +# "linked_widgets": [ +# { +# "node": "edge_detect_3_3_2", +# "widget": "sigma" +# } +# ], +# "longdesc": "The strength of the blur filter", +# "name": "param1", +# "shortdesc": "Sigma", +# "type": "linked_control" +# }, +# { +# "label": "Angle", +# "linked_widgets": [ +# { +# "node": "edge_detect_3_3_2", +# "widget": "angle" +# } +# ], +# "longdesc": "The angle of the directional blur effect", +# "name": "param2", +# "shortdesc": "Angle", +# "type": "linked_control" +# } +# ] +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -779.666626, +# "y": -247.392853 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# }, +# { +# "group_size": 0, +# "longdesc": "A map that controls the strength of the blur filter", +# "name": "amount", +# "shortdesc": "Strength map", +# "type": "f" +# } +# ], +# "seed_value": 91624, +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": -45.452393, +# "y": -195.392853 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "Shows the generated blurred image", +# "name": "port0", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "edge_detect_3_3_2", +# "node_position": { +# "x": -376.725464, +# "y": -184.178955 +# }, +# "parameters": { +# "angle": 45, +# "sigma": 50, +# "size": 9 +# }, +# "seed_value": -47470, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgba" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "Label", +# "name": "amount", +# "type": "f" +# } +# ], +# "instance": "vec4 $(name)_fct(vec2 uv) {\n\tvec2 e = vec2(cos($angle*0.01745329251), -sin($angle*0.01745329251))/$size;\n\tvec4 rv = vec4(0.0);\n\tfloat sum = 0.0;\n\tfloat sigma = $sigma*$amount(uv);\n\tfor (float i = -50.0; i <= 50.0; i += 1.0) {\n\t\tfloat coef = exp(-0.5*(pow(i/sigma, 2.0)))/(6.28318530718*sigma*sigma);\n\t\trv += $in(uv+i*e)*coef;\n\t\tsum += coef;\n\t}\n\treturn rv/sum;\n}", +# "name": "Directional Blur", +# "outputs": [ +# { +# "rgba": "$(name)_fct($uv)", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 4, +# "label": "Size", +# "last": 12, +# "name": "size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Sigma", +# "max": 50, +# "min": 0, +# "name": "sigma", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Angle", +# "max": 180, +# "min": -180, +# "name": "angle", +# "step": 0.1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# } +# ], +# "parameters": { +# "param0": 9, +# "param1": 50, +# "param2": 45 +# }, +# "shortdesc": "Directional blur", +# "type": "graph" +#} + +#---------------------- +#fast_blur.mmg + +#{ +# "connections": [ +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "fast_blur_shader", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer_2", +# "to_port": 0 +# }, +# { +# "from": "fast_blur_shader", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# } +# ], +# "label": "Fast Blur", +# "longdesc": "", +# "name": "fast_blur", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "fast_blur_shader", +# "node_position": { +# "x": -168, +# "y": 120 +# }, +# "parameters": { +# "quality": 1, +# "sigma": 100 +# }, +# "type": "fast_blur_shader" +# }, +# { +# "name": "buffer_2", +# "node_position": { +# "x": -187, +# "y": 61.5 +# }, +# "parameters": { +# "size": 11 +# }, +# "type": "buffer", +# "version": 1 +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -602, +# "y": 91.75 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input image", +# "name": "input", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 88, +# "y": 61.75 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The generated blurred image", +# "name": "output", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -254.5, +# "y": -122.5 +# }, +# "parameters": { +# "param0": 11, +# "param1": 100, +# "param2": 1 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Resolution", +# "linked_widgets": [ +# { +# "node": "buffer_2", +# "widget": "size" +# } +# ], +# "longdesc": "The resolution used to sample the input image", +# "name": "param0", +# "shortdesc": "Resolution", +# "type": "linked_control" +# }, +# { +# "label": "Sigma", +# "linked_widgets": [ +# { +# "node": "fast_blur_shader", +# "widget": "sigma" +# } +# ], +# "longdesc": "The standard deviation of the gaussian distribution", +# "name": "param1", +# "shortdesc": "Sigma", +# "type": "linked_control" +# }, +# { +# "label": "Quality", +# "linked_widgets": [ +# { +# "node": "fast_blur_shader", +# "widget": "quality" +# } +# ], +# "longdesc": "The quality of the effect (increasing quality increases compute time)", +# "name": "param2", +# "shortdesc": "Quality", +# "type": "linked_control" +# } +# ] +# } +# ], +# "parameters": { +# "param0": 11, +# "param1": 100, +# "param2": 1 +# }, +# "shortdesc": "", +# "type": "graph" +#} + +#---------------------- +#fast_blur_shader.mmg + +#{ +# "name": "fast_blur_shader", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "parameters": { +# "quality": 1, +# "sigma": 100 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgba" +# } +# ], +# "instance": "vec4 $(name)_blur(vec2 uv, vec2 scale, float sigma, int quality) {\n vec4 O = vec4(0.0);\n\tfloat samples = sigma * 4.0; \n\tint LOD = max(0, int(log2(float(samples)))-quality-2);\n\tint sLOD = 1 << LOD;\n int s = max(1, int(samples/float(sLOD)));\n\tfloat sum = 0.0;\n for (int i = 0; i < s*s; i++) {\n vec2 d = vec2(float(i%s), float(i/s))*float(sLOD) - 0.5*float(samples);\n\t\tvec2 dd = d / sigma;\n\t\tfloat g = exp(-.5*dot(dd,dd))/(6.28*sigma*sigma);\n O += g * textureLod($in.texture, uv + scale * d, float(LOD));\n\t\tsum += g;\n }\n \n return O / sum;\n}\n", +# "name": "Fast Blur", +# "outputs": [ +# { +# "rgba": "$(name)_blur($uv, vec2(1.0)/$in.size, max(1.0, floor($sigma*$in.size/2048.0)), int($quality))", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 1, +# "label": "", +# "max": 256, +# "min": 1, +# "name": "sigma", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "", +# "max": 3, +# "min": 0, +# "name": "quality", +# "step": 1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +#} + +#---------------------- +#gaussian_blur.mmg + +#{ +# "connections": [ +# { +# "from": "switch", +# "from_port": 0, +# "to": "buffer_2", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer", +# "to_port": 0 +# }, +# { +# "from": "switch", +# "from_port": 0, +# "to": "switch_2", +# "to_port": 1 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "switch", +# "to_port": 1 +# }, +# { +# "from": "buffer", +# "from_port": 0, +# "to": "gaussian_blur_x", +# "to_port": 0 +# }, +# { +# "from": "gaussian_blur_x", +# "from_port": 0, +# "to": "switch", +# "to_port": 0 +# }, +# { +# "from": "gaussian_blur_y", +# "from_port": 0, +# "to": "switch_2", +# "to_port": 0 +# }, +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "gaussian_blur_y", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 1, +# "to": "gaussian_blur_x", +# "to_port": 1 +# }, +# { +# "from": "gen_inputs", +# "from_port": 1, +# "to": "gaussian_blur_y", +# "to_port": 1 +# }, +# { +# "from": "buffer_3", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "switch_2", +# "from_port": 0, +# "to": "buffer_3", +# "to_port": 0 +# } +# ], +# "label": "Gaussian Blur", +# "longdesc": "Applys a gaussian blur on its input", +# "name": "gaussian_blur", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "buffer_2", +# "node_position": { +# "x": -399.875, +# "y": -43.625 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# }, +# { +# "name": "switch", +# "node_position": { +# "x": -496.452393, +# "y": -130.166656 +# }, +# "parameters": { +# "choices": 2, +# "outputs": 1, +# "source": 0 +# }, +# "type": "switch" +# }, +# { +# "name": "switch_2", +# "node_position": { +# "x": -240.452393, +# "y": -133.666656 +# }, +# "parameters": { +# "choices": 2, +# "outputs": 1, +# "source": 0 +# }, +# "type": "switch" +# }, +# { +# "name": "buffer", +# "node_position": { +# "x": -402.25, +# "y": -315.75 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -439.666626, +# "y": -456.666656 +# }, +# "parameters": { +# "param0": 9, +# "param1": 50, +# "param2": 0 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Grid size:", +# "linked_widgets": [ +# { +# "node": "buffer", +# "widget": "size" +# }, +# { +# "node": "buffer_2", +# "widget": "size" +# }, +# { +# "node": "gaussian_blur_x", +# "widget": "size" +# }, +# { +# "node": "gaussian_blur_y", +# "widget": "size" +# }, +# { +# "node": "buffer_3", +# "widget": "size" +# } +# ], +# "longdesc": "The resolution of the input image", +# "name": "param0", +# "shortdesc": "Size", +# "type": "linked_control" +# }, +# { +# "label": "Sigma:", +# "linked_widgets": [ +# { +# "node": "gaussian_blur_x", +# "widget": "sigma" +# }, +# { +# "node": "gaussian_blur_y", +# "widget": "sigma" +# } +# ], +# "longdesc": "The strength of the blur filter", +# "name": "param1", +# "shortdesc": "Sigma", +# "type": "linked_control" +# }, +# { +# "configurations": { +# "Both": [ +# { +# "node": "switch", +# "value": 0, +# "widget": "source" +# }, +# { +# "node": "switch_2", +# "value": 0, +# "widget": "source" +# } +# ], +# "X": [ +# { +# "node": "switch", +# "value": 0, +# "widget": "source" +# }, +# { +# "node": "switch_2", +# "value": 1, +# "widget": "source" +# } +# ], +# "Y": [ +# { +# "node": "switch", +# "value": 1, +# "widget": "source" +# }, +# { +# "node": "switch_2", +# "value": 0, +# "widget": "source" +# } +# ] +# }, +# "label": "Direction:", +# "linked_widgets": [ +# { +# "node": "switch", +# "widget": "source" +# }, +# { +# "node": "switch_2", +# "widget": "source" +# } +# ], +# "longdesc": "Apply the blur filter horizontally, vertically of in both directions", +# "name": "param2", +# "shortdesc": "Direction", +# "type": "config_control" +# } +# ] +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -928.666626, +# "y": -188.392853 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input image", +# "name": "input", +# "shortdesc": "Input", +# "type": "rgba" +# }, +# { +# "group_size": 0, +# "longdesc": "A map that controls the strength of the blur filter", +# "name": "amount", +# "shortdesc": "Strength map", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 193.547607, +# "y": -135.392853 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "Shows the generated blurred image", +# "name": "port0", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "seed_value": 77778, +# "type": "ios" +# }, +# { +# "name": "gaussian_blur_x", +# "node_position": { +# "x": -412.993408, +# "y": -221.281738 +# }, +# "parameters": { +# "sigma": 50, +# "size": 9 +# }, +# "type": "gaussian_blur_x" +# }, +# { +# "name": "gaussian_blur_y", +# "node_position": { +# "x": -405.993408, +# "y": 38.718262 +# }, +# "parameters": { +# "sigma": 50, +# "size": 9 +# }, +# "seed_value": 12279, +# "type": "gaussian_blur_y" +# }, +# { +# "name": "buffer_3", +# "node_position": { +# "x": -50.246796, +# "y": -133.96936 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# } +# ], +# "parameters": { +# "param0": 9, +# "param1": 50, +# "param2": 0 +# }, +# "shortdesc": "Gaussian blur", +# "type": "graph" +#} + +#---------------------- +#gaussian_blur_x.mmg + +#{ +# "name": "gaussian_blur_x", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "parameters": { +# "sigma": 35.700001, +# "size": 9 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgba" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "name": "amount", +# "type": "f" +# } +# ], +# "instance": "vec4 $(name)_fct(vec2 uv) {\n\tfloat e = 1.0/$size;\n\tvec4 rv = vec4(0.0);\n\tfloat sum = 0.0;\n\tfloat sigma = max(0.000001, $sigma*$amount(uv));\n\tfor (float i = -50.0; i <= 50.0; i += 1.0) {\n\t\tfloat coef = exp(-0.5*(pow(i/sigma, 2.0)))/(6.28318530718*sigma*sigma);\n\t\trv += $in(uv+vec2(i*e, 0.0))*coef;\n\t\tsum += coef;\n\t}\n\treturn rv/sum;\n}", +# "name": "Gaussian blur X", +# "outputs": [ +# { +# "rgba": "$(name)_fct($uv)", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 4, +# "label": "Size", +# "last": 12, +# "name": "size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Sigma", +# "max": 50, +# "min": 0, +# "name": "sigma", +# "step": 0.1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +#} + +#---------------------- +#gaussian_blur_y.mmg + +#{ +# "name": "gaussian_blur_y", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "parameters": { +# "sigma": 35.700001, +# "size": 9 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgba" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "name": "amount", +# "type": "f" +# } +# ], +# "instance": "vec4 $(name)_fct(vec2 uv) {\n\tfloat e = 1.0/$size;\n\tvec4 rv = vec4(0.0);\n\tfloat sum = 0.0;\n\tfloat sigma = max(0.000001, $sigma*$amount(uv));\n\tfor (float i = -50.0; i <= 50.0; i += 1.0) {\n\t\tfloat coef = exp(-0.5*(pow(i/sigma, 2.0)))/(6.28318530718*sigma*sigma);\n\t\trv += $in(uv+vec2(0.0, i*e))*coef;\n\t\tsum += coef;\n\t}\n\treturn rv/sum;\n}", +# "name": "Gaussian blur Y", +# "outputs": [ +# { +# "rgba": "$(name)_fct($uv)", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 4, +# "label": "Size", +# "last": 12, +# "name": "size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Sigma", +# "max": 50, +# "min": 0, +# "name": "sigma", +# "step": 0.1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +#} + + +#---------------------- +#slope_blur.mmg + +#{ +# "connections": [ +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer", +# "to_port": 0 +# }, +# { +# "from": "buffer", +# "from_port": 0, +# "to": "edge_detect_3_3_2", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 1, +# "to": "edge_detect_3_3_2", +# "to_port": 1 +# }, +# { +# "from": "edge_detect_3_3_2", +# "from_port": 0, +# "to": "buffer_2", +# "to_port": 0 +# }, +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# } +# ], +# "label": "Slope Blur", +# "longdesc": "Applys a blur effect on its input, following slopes of an input height map", +# "name": "slope_blur", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "buffer", +# "node_position": { +# "x": -395.25, +# "y": -274.75 +# }, +# "parameters": { +# "lod": 0, +# "size": 10 +# }, +# "type": "buffer" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -462.666626, +# "y": -397.666656 +# }, +# "parameters": { +# "param0": 10, +# "param1": 30 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Grid size:", +# "linked_widgets": [ +# { +# "node": "buffer", +# "widget": "size" +# }, +# { +# "node": "edge_detect_3_3_2", +# "widget": "size" +# }, +# { +# "node": "buffer_2", +# "widget": "size" +# } +# ], +# "longdesc": "The resolution of the input image", +# "name": "param0", +# "shortdesc": "Size", +# "type": "linked_control" +# }, +# { +# "label": "Sigma", +# "linked_widgets": [ +# { +# "node": "edge_detect_3_3_2", +# "widget": "sigma" +# } +# ], +# "longdesc": "The strength of the blur filter", +# "name": "param1", +# "shortdesc": "Sigma", +# "type": "linked_control" +# } +# ] +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -872.666626, +# "y": -243.392853 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# }, +# { +# "group_size": 0, +# "longdesc": "A height map whose slopes control the strength and direction of the blur filter", +# "name": "heightmap", +# "shortdesc": "Height map", +# "type": "f" +# } +# ], +# "seed_value": 91624, +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": -45.452393, +# "y": -195.392853 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "Shows the generated blurred image", +# "name": "port0", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "edge_detect_3_3_2", +# "node_position": { +# "x": -401.725464, +# "y": -199.178955 +# }, +# "parameters": { +# "sigma": 30, +# "size": 10 +# }, +# "seed_value": -47470, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgba" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "name": "heightmap", +# "type": "f" +# } +# ], +# "instance": "vec4 $(name)_fct(vec2 uv) {\n\tfloat dx = 1.0/$size;\n float v = $heightmap(uv);\n\tvec2 slope = vec2($heightmap(uv+vec2(dx, 0.0))-v, $heightmap(uv+vec2(0.0, dx))-v);\n\tfloat slope_strength = length(slope)*$size;\n vec2 norm_slope = (slope_strength == 0.0) ? vec2(0.0, 1.0) : normalize(slope);\n vec2 e = dx*norm_slope;\n\tvec4 rv = vec4(0.0);\n\tfloat sum = 0.0;\n\tfloat sigma = max($sigma*slope_strength, 0.0001);\n\tfor (float i = 0.0; i <= 50.0; i += 1.0) {\n\t\tfloat coef = exp(-0.5*(pow(i/sigma, 2.0)))/(6.28318530718*sigma*sigma);\n\t\trv += $in(uv+i*e)*coef;\n\t\tsum += coef;\n\t}\n\treturn rv/sum;\n}", +# "name": "Slope Blur", +# "outputs": [ +# { +# "rgba": "$(name)_fct($uv)", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 4, +# "label": "Size", +# "last": 12, +# "name": "size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Sigma", +# "max": 50, +# "min": 0, +# "name": "sigma", +# "step": 0.1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "buffer_2", +# "node_position": { +# "x": -392.952209, +# "y": -115.576294 +# }, +# "parameters": { +# "lod": 0, +# "size": 10 +# }, +# "type": "buffer" +# } +# ], +# "parameters": { +# "param0": 10, +# "param1": 30 +# }, +# "shortdesc": "Slope blur", +# "type": "graph" +#} + diff --git a/game/addons/mat_maker_gd/nodes/common/commons.gd b/game/addons/mat_maker_gd/nodes/common/commons.gd new file mode 100644 index 0000000..d6f6cf1 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/commons.gd @@ -0,0 +1,393 @@ +tool +extends Reference + +#pattern.mmg + +#---------------------- +#hlsl_defs.tmpl + +##define hlsl_atan(x,y) atan2(x, y) +##define mod(x,y) ((x)-(y)*floor((x)/(y))) +#inline float4 textureLod(sampler2D tex, float2 uv, float lod) { +# return tex2D(tex, uv); +#} +#inline float2 tofloat2(float x) { +# return float2(x, x); +#} +#inline float2 tofloat2(float x, float y) { +# return float2(x, y); +#} +#inline float3 tofloat3(float x) { +# return float3(x, x, x); +#} +#inline float3 tofloat3(float x, float y, float z) { +# return float3(x, y, z); +#} +#inline float3 tofloat3(float2 xy, float z) { +# return float3(xy.x, xy.y, z); +#} +#inline float3 tofloat3(float x, float2 yz) { +# return float3(x, yz.x, yz.y); +#} +#inline float4 tofloat4(float x, float y, float z, float w) { +# return float4(x, y, z, w); +#} +#inline float4 tofloat4(float x) { +# return float4(x, x, x, x); +#} +#inline float4 tofloat4(float x, float3 yzw) { +# return float4(x, yzw.x, yzw.y, yzw.z); +#} +#inline float4 tofloat4(float2 xy, float2 zw) { +# return float4(xy.x, xy.y, zw.x, zw.y); +#} +#inline float4 tofloat4(float3 xyz, float w) { +# return float4(xyz.x, xyz.y, xyz.z, w); +#} +#inline float2x2 tofloat2x2(float2 v1, float2 v2) { +# return float2x2(v1.x, v1.y, v2.x, v2.y); +#} + +#---------------------- +#glsl_defs.tmpl + +#float rand(vec2 x) { +# return fract(cos(mod(dot(x, vec2(13.9898, 8.141)), 3.14)) * 43758.5453); +#} + +#vec2 rand2(vec2 x) { +# return fract(cos(mod(vec2(dot(x, vec2(13.9898, 8.141)), +# dot(x, vec2(3.4562, 17.398))), vec2(3.14))) * 43758.5453); +#} + +#vec3 rand3(vec2 x) { +# return fract(cos(mod(vec3(dot(x, vec2(13.9898, 8.141)), +# dot(x, vec2(3.4562, 17.398)), +# dot(x, vec2(13.254, 5.867))), vec3(3.14))) * 43758.5453); +#} + +#float param_rnd(float minimum, float maximum, float seed) { +# return minimum+(maximum-minimum)*rand(vec2(seed)); +#} + +#vec3 rgb2hsv(vec3 c) { +# vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); +# vec4 p = c.g < c.b ? vec4(c.bg, K.wz) : vec4(c.gb, K.xy); +# vec4 q = c.r < p.x ? vec4(p.xyw, c.r) : vec4(c.r, p.yzx); +# +# float d = q.x - min(q.w, q.y); +# float e = 1.0e-10; +# return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +#} + +#vec3 hsv2rgb(vec3 c) { +# vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); +# vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); +# return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +#} + +#---------------------- + +static func clampv3(v : Vector3, mi : Vector3, ma : Vector3) -> Vector3: + v.x = clamp(v.x, mi.x, ma.x) + v.y = clamp(v.y, mi.y, ma.y) + v.z = clamp(v.z, mi.z, ma.z) + + return v + +static func floorc(a : Color) -> Color: + var v : Color = Color() + + v.r = floor(a.r) + v.g = floor(a.g) + v.b = floor(a.b) + v.a = floor(a.a) + + return v + +static func floorv2(a : Vector2) -> Vector2: + var v : Vector2 = Vector2() + + v.x = floor(a.x) + v.y = floor(a.y) + + return v + +static func floorv3(a : Vector3) -> Vector3: + var v : Vector3 = Vector3() + + v.x = floor(a.x) + v.y = floor(a.y) + v.z = floor(a.z) + + return v + +static func smoothstepv2(a : float, b : float, c : Vector2) -> Vector2: + var v : Vector2 = Vector2() + + v.x = smoothstep(a, b, c.x) + v.y = smoothstep(a, b, c.y) + + return v + +static func maxv2(a : Vector2, b : Vector2) -> Vector2: + var v : Vector2 = Vector2() + + v.x = max(a.x, b.x) + v.y = max(a.y, b.y) + + return v + +static func maxv3(a : Vector3, b : Vector3) -> Vector3: + var v : Vector3 = Vector3() + + v.x = max(a.x, b.x) + v.y = max(a.y, b.y) + v.z = max(a.z, b.z) + + return v + +static func absv2(v : Vector2) -> Vector2: + v.x = abs(v.x) + v.y = abs(v.y) + + return v + +static func absv3(v : Vector3) -> Vector3: + v.x = abs(v.x) + v.y = abs(v.y) + v.z = abs(v.z) + + return v + +static func cosv2(v : Vector2) -> Vector2: + v.x = cos(v.x) + v.y = cos(v.y) + + return v + +static func cosv3(v : Vector3) -> Vector3: + v.x = cos(v.x) + v.y = cos(v.y) + v.z = cos(v.z) + + return v + +static func powv2(x : Vector2, y : Vector2) -> Vector2: + x.x = pow(x.x, y.x) + x.y = pow(x.y, y.y) + + return x + +static func modv3(a : Vector3, b : Vector3) -> Vector3: + var v : Vector3 = Vector3() + + v.x = modf(a.x, b.x) + v.y = modf(a.y, b.y) + v.z = modf(a.z, b.z) + + return v + + +static func modv2(a : Vector2, b : Vector2) -> Vector2: + var v : Vector2 = Vector2() + + v.x = modf(a.x, b.x) + v.y = modf(a.y, b.y) + + return v + +static func modf(x : float, y : float) -> float: + return x - y * floor(x / y) + +static func fractv2(v : Vector2) -> Vector2: + v.x = v.x - floor(v.x) + v.y = v.y - floor(v.y) + + return v + +static func fractv3(v : Vector3) -> Vector3: + v.x = v.x - floor(v.x) + v.y = v.y - floor(v.y) + v.z = v.z - floor(v.z) + + return v + +static func fract(f : float) -> float: + return f - floor(f) + +static func clampv2(v : Vector2, pmin : Vector2, pmax : Vector2) -> Vector2: + v.x = clamp(v.x, pmin.x, pmax.x) + v.y = clamp(v.y, pmin.y, pmax.y) + + return v + +static func minv2(v1 : Vector2, v2 : Vector2) -> Vector2: + v1.x = min(v1.x, v2.x) + v1.y = min(v1.y, v2.y) + + return v1 + +static func minv3(v1 : Vector3, v2 : Vector3) -> Vector3: + v1.x = min(v1.x, v2.x) + v1.y = min(v1.y, v2.y) + v1.z = min(v1.z, v2.z) + + return v1 + +static func rand(x : Vector2) -> float: + return fract(cos(x.dot(Vector2(13.9898, 8.141))) * 43758.5453); + +static func rand2(x : Vector2) -> Vector2: + return fractv2(cosv2(Vector2(x.dot(Vector2(13.9898, 8.141)), + x.dot(Vector2(3.4562, 17.398)))) * 43758.5453); + +static func rand3(x : Vector2) -> Vector3: + return fractv3(cosv3(Vector3(x.dot(Vector2(13.9898, 8.141)), + x.dot(Vector2(3.4562, 17.398)), + x.dot(Vector2(13.254, 5.867)))) * 43758.5453); + +static func step(edge : float, x : float) -> float: + if x < edge: + return 0.0 + else: + return 1.0 + +static func stepv2(edge : Vector2, x : Vector2) -> Vector2: + edge.x = step(edge.x, x.x) + edge.y = step(edge.y, x.y) + + return edge + +static func signv2(x : Vector2) -> Vector2: + x.x = sign(x.x) + x.y = sign(x.y) + + return x + +static func transform(uv : Vector2, translate : Vector2, rotate : float, scale : Vector2, repeat : bool) -> Vector2: + var rv : Vector2 = Vector2(); + uv -= translate; + uv -= Vector2(0.5, 0.5); + rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y; + rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y; + rv /= scale; + rv += Vector2(0.5, 0.5); + + if (repeat): + return fractv2(rv); + else: + return clampv2(rv, Vector2(0, 0), Vector2(1, 1)); + +static func fractf(x : float) -> float: + return x - floor(x) + +#float mix_mul(float x, float y) { +# return x*y; +#} + +static func mix_mul(x : float, y : float) -> float: + return x*y; + +#float mix_add(float x, float y) { +# return min(x+y, 1.0); +#} + +static func mix_add(x : float, y : float) -> float: + return min(x+y, 1.0); + +#float mix_max(float x, float y) { +# return max(x, y); +#} + +static func mix_max(x : float, y : float) -> float: + return max(x, y); + +#float mix_min(float x, float y) { +# return min(x, y); +#} + +static func mix_min(x : float, y : float) -> float: + return min(x, y); + +#float mix_xor(float x, float y) { +# return min(x+y, 2.0-x-y); +#} + +static func mix_xor(x : float, y : float) -> float: + return min(x+y, 2.0-x-y); + +#float mix_pow(float x, float y) { +# return pow(x, y); +#} + +static func mix_pow(x : float, y : float) -> float: + return pow(x, y); + + +#float wave_constant(float x) { +# return 1.0; +#} + +static func wave_constant(x : float) -> float: + return 1.0; + +#float wave_sine(float x) { +# return 0.5-0.5*cos(3.14159265359*2.0*x); +#} + +static func wave_sine(x : float) -> float: + return 0.5-0.5*cos(3.14159265359*2.0*x); + +#float wave_triangle(float x) { +# x = fract(x); +# return min(2.0*x, 2.0-2.0*x); +#} + +static func wave_triangle(x : float) -> float: + x = fractf(x); + return min(2.0*x, 2.0-2.0*x); + +#float wave_sawtooth(float x) { +# return fract(x); +#} + +static func wave_sawtooth(x : float) -> float: + return fractf(x); + +#float wave_square(float x) { +# return (fract(x) < 0.5) ? 0.0 : 1.0; +#} + +static func wave_square(x : float) -> float: + if (fractf(x) < 0.5): + return 0.0 + else: + return 1.0 + +#float wave_bounce(float x) { +# x = 2.0*(fract(x)-0.5); +# return sqrt(1.0-x*x); +#} + +static func wave_bounce(x : float) -> float: + x = 2.0*(fractf(x)-0.5); + return sqrt(1.0-x*x); + +static func sinewave(uv : Vector2, amplitude : float, frequency : float, phase : float) -> Color: + var f : float = 1.0- abs(2.0 * (uv.y-0.5) - amplitude * sin((frequency* uv.x + phase) * 6.28318530718)); + + return Color(f, f, f, 1) + +#from runes.mmg (old) + +static func ThickLine(uv : Vector2, posA : Vector2, posB : Vector2, radiusInv : float) -> float: + var dir : Vector2 = posA - posB; + var dirLen : float = dir.length() + var dirN : Vector2 = dir.normalized() + var dotTemp : float = clamp((uv - posB).dot(dirN), 0.0, dirLen); + var proj : Vector2 = dotTemp * dirN + posB; + var d1 : float = (uv - proj).length() + var finalGray : float = clamp(1.0 - d1 * radiusInv, 0.0, 1.0); + + return finalGray; diff --git a/game/addons/mat_maker_gd/nodes/common/curves.gd b/game/addons/mat_maker_gd/nodes/common/curves.gd new file mode 100644 index 0000000..71fdfca --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/curves.gd @@ -0,0 +1,85 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#Based on MaterialMaker's curve.gd + +#Curve PoolRealArray: p.x, p.y, ls, rs, p.x, p.y .... + +#class Point: +# var p : Vector2 +# var ls : float +# var rs : float + +#func get_shader(name) -> String: +# var shader +# shader = "float "+name+"_curve_fct(float x) {\n" +# for i in range(points.size()-1): +# if i < points.size()-2: +# shader += "if (x <= p_"+name+"_"+str(i+1)+"_x) " +# +# shader += "{\n" +# shader += "float dx = x - p_"+name+"_"+str(i)+"_x;\n" +# shader += "float d = p_"+name+"_"+str(i+1)+"_x - p_"+name+"_"+str(i)+"_x;\n" +# shader += "float t = dx/d;\n" +# shader += "float omt = (1.0 - t);\n" +# shader += "float omt2 = omt * omt;\n" +# shader += "float omt3 = omt2 * omt;\n" +# shader += "float t2 = t * t;\n" +# shader += "float t3 = t2 * t;\n" +# shader += "d /= 3.0;\n" +# shader += "float y1 = p_"+name+"_"+str(i)+"_y;\n" +# shader += "float yac = p_"+name+"_"+str(i)+"_y + d*p_"+name+"_"+str(i)+"_rs;\n" +# shader += "float ybc = p_"+name+"_"+str(i+1)+"_y - d*p_"+name+"_"+str(i+1)+"_ls;\n" +# shader += "float y2 = p_"+name+"_"+str(i+1)+"_y;\n" +# shader += "return y1*omt3 + yac*omt2*t*3.0 + ybc*omt*t2*3.0 + y2*t3;\n" +# shader += "}\n" +# +# shader += "}\n" +# return shader + +static func curve(x : float, points : PoolRealArray) -> float: + if points.size() % 4 != 0 || points.size() < 8: + return 0.0 + + var ps : int = points.size() / 4 + + for i in range(ps - 1): + var pi : int = i * 4 + var pip1 : int = (i + 1) * 4 + + if i < ps - 2: + # if (x <= p_"+name+"_"+str(i+1)+"_x) + if x > points[pip1]: + continue + + #float dx = x - p_"+name+"_"+str(i)+"_x; + var dx : float = x - points[pi]; + + #var d : float = p_"+name+"_"+str(i+1)+"_x - p_"+name+"_"+str(i)+"_x; + var d : float = points[pip1] - points[pi]; + + var t : float = dx / d + var omt : float = (1.0 - t) + var omt2 : float = omt * omt + var omt3 : float = omt2 * omt + var t2 : float = t * t + var t3 : float = t2 * t + d /= 3.0 + +# var y1 : float = p_"+name+"_"+str(i)+"_y + var y1 : float = points[pi + 1] + +# var yac : float = p_"+name+"_"+str(i)+"_y + d*p_"+name+"_"+str(i)+"_rs + var yac : float = points[pi + 1] + d * points[pi + 3] + +# var ybc : float = p_"+name+"_"+str(i+1)+"_y - d*p_"+name+"_"+str(i+1)+"_ls + var ybc : float = points[pip1 + 1] - d * points[pip1 + 2] + +# var y2 : float = p_"+name+"_"+str(i+1)+"_y + var y2 : float = points[pip1 + 1] + + return y1 * omt3 + yac * omt2 * t * 3.0 + ybc * omt * t2 * 3.0 + y2 * t3; + + return 0.0 diff --git a/game/addons/mat_maker_gd/nodes/common/dilate.gd b/game/addons/mat_maker_gd/nodes/common/dilate.gd new file mode 100644 index 0000000..9bbe8e8 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/dilate.gd @@ -0,0 +1,521 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#dilate.mmg + +#{ +# "connections": [ +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer", +# "to_port": 0 +# }, +# { +# "from": "buffer", +# "from_port": 0, +# "to": "dilate_pass_1", +# "to_port": 0 +# }, +# { +# "from": "dilate_pass_1", +# "from_port": 0, +# "to": "buffer_2", +# "to_port": 0 +# }, +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "dilate_pass_4", +# "to_port": 0 +# }, +# { +# "from": "dilate_pass_3", +# "from_port": 0, +# "to": "buffer_2_3", +# "to_port": 0 +# }, +# { +# "from": "buffer_2_3", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "buffer_2_2", +# "from_port": 0, +# "to": "dilate_pass_3", +# "to_port": 1 +# }, +# { +# "from": "dilate_pass_4", +# "from_port": 0, +# "to": "dilate_pass_3", +# "to_port": 0 +# }, +# { +# "from": "default_color", +# "from_port": 0, +# "to": "buffer_2_2", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 1, +# "to": "default_color", +# "to_port": 0 +# } +# ], +# "label": "Dilate", +# "longdesc": "Dilates the white areas of a mask, using the colors of an optional input", +# "name": "dilate", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "buffer", +# "node_position": { +# "x": -473.691315, +# "y": -200.988342 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# }, +# { +# "name": "buffer_2", +# "node_position": { +# "x": -255.691315, +# "y": -123.988342 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -140.306458, +# "y": -377.953613 +# }, +# "parameters": { +# "param0": 9, +# "param1": 0.1, +# "param2": 0, +# "param3": 0 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "buffer", +# "widget": "size" +# }, +# { +# "node": "buffer_2", +# "widget": "size" +# }, +# { +# "node": "buffer_2_2", +# "widget": "size" +# }, +# { +# "node": "dilate_pass_1", +# "widget": "s" +# }, +# { +# "node": "dilate_pass_4", +# "widget": "s" +# }, +# { +# "node": "buffer_2_3", +# "widget": "size" +# } +# ], +# "longdesc": "The resolution of the input images", +# "name": "param0", +# "shortdesc": "Size", +# "type": "linked_control" +# }, +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "dilate_pass_1", +# "widget": "d" +# }, +# { +# "node": "dilate_pass_4", +# "widget": "d" +# } +# ], +# "longdesc": "The length of the dilate effect", +# "name": "param1", +# "shortdesc": "Length", +# "type": "linked_control" +# }, +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "dilate_pass_3", +# "widget": "amount" +# } +# ], +# "longdesc": "0 to generate a gradient to black while dilating, 1 to fill with input color", +# "name": "param2", +# "shortdesc": "Fill", +# "type": "linked_control" +# }, +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "dilate_pass_4", +# "widget": "distance" +# } +# ], +# "name": "param3", +# "shortdesc": "Distance function", +# "type": "linked_control" +# } +# ] +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -872.306458, +# "y": -171.4814 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input mask whose white areas will be dilated", +# "name": "mask", +# "shortdesc": "Mask", +# "type": "f" +# }, +# { +# "group_size": 0, +# "longdesc": "The optional source for colors", +# "name": "source", +# "shortdesc": "Source", +# "type": "rgb" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 254.21106, +# "y": -64.4814 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "Shows the dilated image", +# "name": "out", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], +# "seed_value": -14401, +# "type": "ios" +# }, +# { +# "name": "buffer_2_2", +# "node_position": { +# "x": -255.323547, +# "y": -44.695679 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# }, +# { +# "name": "dilate_pass_1", +# "node_position": { +# "x": -252.698792, +# "y": -201.368988 +# }, +# "parameters": { +# "d": 0.1, +# "s": 9 +# }, +# "seed_value": 71939, +# "type": "dilate_pass_1" +# }, +# { +# "name": "dilate_pass_3", +# "node_position": { +# "x": -31.698792, +# "y": -72.368988 +# }, +# "parameters": { +# "amount": 0 +# }, +# "type": "dilate_pass_3" +# }, +# { +# "name": "dilate_pass_4", +# "node_position": { +# "x": -31.689392, +# "y": -186.577301 +# }, +# "parameters": { +# "d": 0.1, +# "distance": 0, +# "s": 9 +# }, +# "type": "dilate_pass_2" +# }, +# { +# "name": "buffer_2_3", +# "node_position": { +# "x": -46.966125, +# "y": -0.711548 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# }, +# { +# "name": "default_color", +# "node_position": { +# "x": -469.868713, +# "y": -98.02066 +# }, +# "parameters": { +# "default": { +# "a": 1, +# "b": 1, +# "g": 1, +# "r": 1, +# "type": "Color" +# } +# }, +# "type": "default_color" +# } +# ], +# "parameters": { +# "param0": 9, +# "param1": 0.1, +# "param2": 0, +# "param3": 0 +# }, +# "shortdesc": "Dilate", +# "type": "graph" +#} + +#---------------------- +#dilate_pass_1.mmg + +#{ +# "name": "distance_pass_1", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "parameters": { +# "d": 0.1, +# "s": 9 +# }, +# "seed_value": 8258, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "name": "in", +# "type": "f" +# } +# ], +# "instance": "vec3 $(name)_distance_h(vec2 uv) {\n\tvec2 e = vec2(1.0/$s, 0.0);\n\tint steps = int($s*$d);\n\tfloat rv = 0.0;\n\tvec2 source_uv;\n\tfor (int i = 0; i < steps; ++i) {\n\t\tsource_uv = uv+float(i)*e;\n\t\tif ($in(source_uv) > 0.5) {\n\t\t\trv = 1.0-float(i)*e.x/$d;\n\t\t\tbreak;\n\t\t}\n\t\tsource_uv = uv-float(i)*e;\n\t\tif ($in(source_uv) > 0.5) {\n\t\t\trv = 1.0-float(i)*e.x/$d;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn vec3(rv, source_uv);\n}\n", +# "name": "Distance pass 1", +# "outputs": [ +# { +# "rgb": "$(name)_distance_h($uv)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 6, +# "label": "", +# "last": 12, +# "name": "s", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "", +# "max": 1, +# "min": 0, +# "name": "d", +# "step": 0.01, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +#} + +#---------------------- +#dilate_pass_2.mmg + +#{ +# "name": "dilate_pass_2", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "parameters": { +# "d": 0.25, +# "distance": 0, +# "s": 9 +# }, +# "seed_value": 44978, +# "shader_model": { +# "code": "", +# "global": "float dilate_distance_euclidian(float x, float y, float d) {\n\treturn 1.0-sqrt((1.0-x)*(1.0-x)+y*y/d/d);\n}\n\nfloat dilate_distance_manhattan(float x, float y, float d) {\n\treturn 1.0-(abs(1.0-x)+abs(y)/d);\n}\n\nfloat dilate_distance_chebyshev(float x, float y, float d) {\n\treturn 1.0-max(abs(1.0-x), abs(y)/d);\n}\n\n", +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "vec3 $(name)_distance_v(vec2 uv) {\n\tvec2 e = vec2(0.0, 1.0/$s);\n\tint steps = int($s*$d);\n\tvec3 p = $in(uv);\n\tfor (int i = 0; i < steps; ++i) {\n\t\tvec2 dx = float(i)*e;\n\t\tvec3 p2 = $in(uv+dx);\n\t\tif (p2.x > p.x) {\n\t\t\tp2.x = dilate_distance_$distance(p2.x, dx.y, $d);\n\t\t\tp = mix(p, p2, step(p.x, p2.x));\n\t\t}\n\t\tp2 = $in(uv-dx);\n\t\tif (p2.x > p.x) {\n\t\t\tp2.x = dilate_distance_$distance(p2.x, dx.y, $d);\n\t\t\tp = mix(p, p2, step(p.x, p2.x));\n\t\t}\n\t}\n\treturn p;\n}\n", +# "name": "Distance pass 2", +# "outputs": [ +# { +# "rgb": "$(name)_distance_v($uv)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 6, +# "label": "", +# "last": 12, +# "name": "s", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "", +# "max": 1, +# "min": 0, +# "name": "d", +# "step": 0.01, +# "type": "float" +# }, +# { +# "default": 2, +# "label": "", +# "name": "distance", +# "type": "enum", +# "values": [ +# { +# "name": "Euclidian", +# "value": "euclidian" +# }, +# { +# "name": "Manhattan", +# "value": "manhattan" +# }, +# { +# "name": "Chebyshev", +# "value": "chebyshev" +# } +# ] +# } +# ] +# }, +# "type": "shader" +#} + +#---------------------- +#dilate_pass_3.mmg + +#{ +# "name": "distance_pass_3", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "parameters": { +# "amount": 0 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "label": "", +# "name": "distance", +# "type": "rgb" +# }, +# { +# "default": "vec3(1.0)", +# "label": "", +# "name": "source", +# "type": "rgb" +# } +# ], +# "instance": "", +# "name": "Distance pass 3", +# "outputs": [ +# { +# "rgb": "$source($distance($uv).yz)*mix($distance($uv).x, 1.0, $amount)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0, +# "label": "", +# "max": 1, +# "min": 0, +# "name": "amount", +# "step": 0.01, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +#} + diff --git a/game/addons/mat_maker_gd/nodes/common/edge_detect.gd b/game/addons/mat_maker_gd/nodes/common/edge_detect.gd new file mode 100644 index 0000000..a4fc754 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/edge_detect.gd @@ -0,0 +1,223 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#edge_detect.mmg +#An edge detect filter that detects edges along all directions and draws them in white on a black background + +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgb" +# } +# ], +# "instance": "float $(name)_fct(vec2 uv) {\n\tvec3 e_base = vec3(1.0/$size, -1.0/$size, 0);\n\tvec3 ref = $in(uv);\n\tvec3 e = vec3(0);\n\tfloat rv = 0.0;\n\tfor (int i = 0; i < int($width); ++i) {\n\t\te += e_base;\n\t\trv += length($in(uv+e.xy)-ref);\n\t\trv += length($in(uv-e.xy)-ref);\n\t\trv += length($in(uv+e.xx)-ref);\n\t\trv += length($in(uv-e.xx)-ref);\n\t\trv += length($in(uv+e.xz)-ref);\n\t\trv += length($in(uv-e.xz)-ref);\n\t\trv += length($in(uv+e.zx)-ref);\n\t\trv += length($in(uv-e.zx)-ref);\n\t\trv *= 2.0;\n\t}\n\treturn rv*pow(2.0, -$width);\n}", +# "outputs": [ +# { +# "f": "clamp(100.0*($(name)_fct($uv)-$threshold), 0.0, 1.0)", +# "longdesc": "Shows the generated outlines", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 4, +# "label": "Size", +# "last": 12, +# "longdesc": "The resolution of the input image", +# "name": "size", +# "shortdesc": "Size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Width", +# "max": 5, +# "min": 1, +# "name": "width", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Threshold", +# "max": 1, +# "min": 0, +# "name": "threshold", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#edge_detect_1.mmg +#An edge detect filter that detects edges along all directions and draws them in white on a black background + +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgb" +# } +# ], +# "instance": "float $(name)_fct(vec2 uv) {\n\tvec3 e = vec3(1.0/$size, -1.0/$size, 0);\n\tvec3 rv = 8.0*$in(uv);\n\trv -= $in(uv+e.xy);\n\trv -= $in(uv-e.xy);\n\trv -= $in(uv+e.xx);\n\trv -= $in(uv-e.xx);\n\trv -= $in(uv+e.xz);\n\trv -= $in(uv-e.xz);\n\trv -= $in(uv+e.zx);\n\trv -= $in(uv-e.zx);\n\trv = abs(rv);\n\treturn max(rv.x, max(rv.y ,rv.z))*$size;\n}", +# "outputs": [ +# { +# "f": "clamp($(name)_fct($uv), 0.0, 1.0)", +# "longdesc": "Shows the generated outlines", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 4, +# "label": "Size", +# "last": 12, +# "longdesc": "The resolution of the input image", +# "name": "size", +# "shortdesc": "Size", +# "type": "size" +# } +# ], + +#---------------------- +#edge_detect_2.mmg +#An edge detect filter that detects edges horizontally and vertically and draws them in white on a black background + +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgb" +# } +# ], +# "instance": "float $(name)_fct(vec2 uv) {\n\tvec2 e = vec2(1.0/$size, 0.0);\n\tvec3 rv = 4.0*$in(uv);\n\trv -= $in(uv+e.xy);\n\trv -= $in(uv-e.xy);\n\trv -= $in(uv+e.yx);\n\trv -= $in(uv-e.yx);\n\trv = abs(rv);\n\treturn max(rv.x, max(rv.y ,rv.z))*$size;\n}", +# "outputs": [ +# { +# "f": "clamp($(name)_fct($uv), 0.0, 1.0)", +# "longdesc": "Shows the generated outlines", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 4, +# "label": "Size", +# "last": 12, +# "longdesc": "The resolution of the input image", +# "name": "size", +# "shortdesc": "Size", +# "type": "size" +# } +# ], + +#---------------------- +#edge_detect_3.mmg +#An edge detect filter that detects edges along diagonals and draws them in white on a black background + +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgb" +# } +# ], +# "instance": "float $(name)_fct(vec2 uv) {\n\tvec2 e = vec2(1.0/$size, -1.0/$size);\n\tvec3 rv = 4.0*$in(uv);\n\trv -= $in(uv+e.xy);\n\trv -= $in(uv-e.xy);\n\trv -= $in(uv+e.xx);\n\trv -= $in(uv-e.xx);\n\trv = abs(rv);\n\treturn max(rv.x, max(rv.y ,rv.z))*$size;\n}", +# "outputs": [ +# { +# "f": "clamp($(name)_fct($uv), 0.0, 1.0)", +# "longdesc": "Shows the generated outlines", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 4, +# "label": "Size", +# "last": 12, +# "longdesc": "The resolution of the input image", +# "name": "size", +# "shortdesc": "Size", +# "type": "size" +# } +# ], + +#---------------------- +#mul_detect.mmg + +# "code": "float $(name_uv)_d = ($in($uv)-$v)/$t;", +# "global": "", +# "inputs": [ +# { +# "default": "1.0", +# "label": "", +# "name": "mul", +# "type": "f" +# }, +# { +# "default": "0.0", +# "label": "", +# "name": "in", +# "type": "f" +# } +# ], +# "instance": "", +# "name": "MulDetect", +# "outputs": [ +# { +# "f": "$mul($uv)*clamp(1.0-$(name_uv)_d*$(name_uv)_d, 0.0, 1.0)", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.5, +# "label": "Value", +# "max": 1, +# "min": 0, +# "name": "v", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.1, +# "label": "Tolerance", +# "max": 1, +# "min": 0.01, +# "name": "t", +# "step": 0.001, +# "type": "float" +# } +# ] + diff --git a/game/addons/mat_maker_gd/nodes/common/fills.gd b/game/addons/mat_maker_gd/nodes/common/fills.gd new file mode 100644 index 0000000..d636208 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/fills.gd @@ -0,0 +1,559 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#fill.mmg +#Fills areas defined by white outlines of its input + +#{ +# "connections": [ +# { +# "from": "iterate_buffer", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "iterate_buffer", +# "from_port": 1, +# "to": "fill_iterate", +# "to_port": 0 +# }, +# { +# "from": "fill_iterate", +# "from_port": 0, +# "to": "iterate_buffer", +# "to_port": 1 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "fill_preprocess", +# "to_port": 0 +# }, +# { +# "from": "fill_preprocess", +# "from_port": 0, +# "to": "iterate_buffer", +# "to_port": 0 +# } +# ], +# "nodes": [ +# { +# "name": "iterate_buffer", +# "node_position": { +# "x": -129.307083, +# "y": -370.480591 +# }, +# "parameters": { +# "iterations": 10, +# "size": 8 +# }, +# "seed_value": 29168, +# "type": "iterate_buffer" +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -542.307068, +# "y": -370.662445 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input image whose white outlines must be filled", +# "name": "port0", +# "shortdesc": "Input", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 198.267258, +# "y": -362.662445 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "Generates fill data, to be connected to a fill companion node", +# "name": "port0", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -171.110138, +# "y": -541.509705 +# }, +# "parameters": { +# "param0": 8, +# "param1": 10 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "iterate_buffer", +# "widget": "size" +# }, +# { +# "node": "fill_preprocess", +# "widget": "s" +# }, +# { +# "node": "fill_iterate", +# "widget": "s" +# } +# ], +# "longdesc": "The resolution of the inptu image", +# "name": "param0", +# "shortdesc": "Size", +# "type": "linked_control" +# }, +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "iterate_buffer", +# "widget": "iterations" +# } +# ], +# "longdesc": "The number of iterations of the algorithm. The optimal value depends a lot on the input image.", +# "name": "param1", +# "shortdesc": "Iterations", +# "type": "linked_control" +# } +# ] +# }, +# { +# "name": "fill_iterate", +# "node_position": { +# "x": -92.913391, +# "y": -290.886963 +# }, +# "parameters": { +# "s": 8 +# }, +# "type": "fill_iterate" +# }, +# { +# "name": "fill_preprocess", +# "node_position": { +# "x": -110.443481, +# "y": -427.202026 +# }, +# "parameters": { +# "s": 8 +# }, +# "type": "fill_preprocess" +# } +# ], +# "parameters": { +# "param0": 8, +# "param1": 10 +# }, +# "shortdesc": "Fill", +# "type": "graph" +#} + +#---------------------- +#fill_iterate.mmg + +# "inputs": [ +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgba" +# } +# ], +# "instance": "vec4 $(name)_fill(vec2 uv) {\n\tfloat size = $s;\n\tint iterations = min(int(size), 256);\n\tvec4 color = $in(fract(uv));\n\tif (color.z+color.w < 1.0/size) {\n\t\treturn vec4(0.0);\n\t}\n\tvec2 offsets[8] = { vec2(1.0, 0.0), vec2(-1.0, 0.0), vec2(0.0, 1.0), vec2(0.0, -1.0), vec2(1.0, 1.0), vec2(-1.0, 1.0), vec2(-1.0, 1.0), vec2(-1.0, -1.0) };\n\tfor (int o = 0; o < 8; ++o) {\n\t\tvec2 uv2 = uv;\n\t\tvec2 offset = offsets[o]/size;\n\t\tfor (int i = 1; i < iterations; i += 1) {\n\t\t\tuv2 += offset;\n\t\t\tvec4 color2 = $in(fract(uv2));\n\t\t\tif (color2.z+color2.w == 0.0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvec2 p1 = color.xy+floor(uv-color.xy);\n\t\t\tvec2 p2 = color2.xy+floor(uv2-color2.xy);\n\t\t\tvec2 p = min(p1, p2);\n\t\t\tvec2 s = max(p1+color.zw, p2+color2.zw)-p;\n\t\t\tcolor = mix(vec4(0.0, 0.0, 1.0, 1.0), vec4(fract(p), s), step(s.xyxy, vec4(1.0)));\n\t\t}\n\t}\n\treturn floor(color*size)/size;\n}\n", +# "outputs": [ +# { +# "rgba": "$(name)_fill($uv)", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 6, +# "label": "", +# "last": 12, +# "name": "s", +# "type": "size" +# } +# ] + +#---------------------- +#fill_preprocess.mmg + +# "inputs": [ +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "name": "in", +# "type": "f" +# } +# ], +# "outputs": [ +# { +# "rgba": "flood_fill_preprocess($uv, $in($uv), $s)", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 10, +# "first": 0, +# "label": "", +# "last": 12, +# "name": "s", +# "type": "size" +# } +# ] + + + + +#---------------------- +#fill_to_color.mmg +#A fill companion node that fills each area with a color taken from a color map image + +# "code": "vec4 $(name_uv)_bb = $in($uv);", +# "inputs": [ +# { +# "default": "vec4(0.0)", +# "label": "", +# "longdesc": "The input fill data, to be connected to the output of a Fill node", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# }, +# { +# "default": "vec4(1.0)", +# "label": "", +# "longdesc": "The image from which colors are taken", +# "name": "map", +# "shortdesc": "Color map", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The generated output image", +# "rgba": "mix($edgecolor, $map(fract($(name_uv)_bb.xy+0.5*$(name_uv)_bb.zw)), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0))))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": { +# "a": 1, +# "b": 1, +# "g": 1, +# "r": 1 +# }, +# "label": "Edge Color", +# "longdesc": "The color used to draw outlines", +# "name": "edgecolor", +# "shortdesc": "Outline color", +# "type": "color" +# } +# ], + +#---------------------- +#fill_to_position.mmg +#A fill companion node that fills each area with a greyscale value that depends on its position + +# "code": "vec2 $(name_uv)_c = fract($in($uv).xy+0.5*$in($uv).zw);", +# "inputs": [ +# { +# "default": "vec4(0.0)", +# "label": "", +# "longdesc": "The input fill data, to be connected to the output of a Fill node", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "f": "$axis", +# "longdesc": "The generated output image", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 2, +# "label": "", +# "longdesc": "The position value to be used:\n- X for horizontal axis\n- Y for vertical axis\n- Radial for distance to center", +# "name": "axis", +# "shortdesc": "Position", +# "type": "enum", +# "values": [ +# { +# "name": "X", +# "value": "$(name_uv)_c.x" +# }, +# { +# "name": "Y", +# "value": "$(name_uv)_c.y" +# }, +# { +# "name": "Radial", +# "value": "length($(name_uv)_c-vec2(0.5))" +# } +# ] +# } +# ], + +#---------------------- +#fill_to_random_color.mmg +#A fill companion node that fills each area with a random color + +# "code": "vec4 $(name_uv)_bb = $in($uv);", +# "inputs": [ +# { +# "default": "vec4(0.0)", +# "label": "", +# "longdesc": "The input fill data, to be connected to the output of a Fill node", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The generated output image", +# "rgb": "mix($edgecolor.rgb, rand3(vec2(float($seed), rand(vec2(rand($(name_uv)_bb.xy), rand($(name_uv)_bb.zw))))), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0))))", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": { +# "a": 1, +# "b": 1, +# "g": 1, +# "r": 1 +# }, +# "label": "Edge Color", +# "longdesc": "The color used for outlines", +# "name": "edgecolor", +# "shortdesc": "Outline color", +# "type": "color" +# } +# ], + +#---------------------- +#fill_to_random_grey.mmg +#A fill companion node that fills each area with a random greyscale value + +# "code": "vec4 $(name_uv)_bb = $in($uv);", +# "inputs": [ +# { +# "default": "vec4(0.0)", +# "label": "", +# "longdesc": "The input fill data, to be connected to the output of a Fill node", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "f": "mix($edgecolor, rand(vec2(float($seed), rand(vec2(rand($(name_uv)_bb.xy), rand($(name_uv)_bb.zw))))), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0))))", +# "longdesc": "The generated output image", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 1, +# "label": "Edge color", +# "longdesc": "The value used for the outlines", +# "max": 1, +# "min": 0, +# "name": "edgecolor", +# "shortdesc": "Outline color", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#fill_to_size.mmg +#A fill companion node that fills each area with a greyscale value that depends on its size + +# "code": "vec4 $(name_uv)_bb = $in($uv);", +# "inputs": [ +# { +# "default": "vec4(0.0)", +# "label": "", +# "longdesc": "The input fill data, to be connected to the output of a Fill node", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "f": "$formula", +# "longdesc": "The generated output image", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "longdesc": "The size value to be used (area, width, height or maximum between width and height)", +# "name": "formula", +# "shortdesc": "Size", +# "type": "enum", +# "values": [ +# { +# "name": "Area", +# "value": "sqrt($(name_uv)_bb.z*$(name_uv)_bb.w)" +# }, +# { +# "name": "Width", +# "value": "$(name_uv)_bb.z" +# }, +# { +# "name": "Height", +# "value": "$(name_uv)_bb.w" +# }, +# { +# "name": "max(W, H)", +# "value": "max($(name_uv)_bb.z, $(name_uv)_bb.w)" +# } +# ] +# } +# ], + +#---------------------- +#fill_to_uv.mmg +#A fill companion node that generated an UV map that follows each filled area + +# "code": "vec4 $(name_uv)_bb = $in($uv);", +# "inputs": [ +# { +# "default": "vec4(0.0)", +# "label": "", +# "longdesc": "The input fill data, to be connected to the output of a Fill node", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The generated output UV map, to be connected to a Custom UV node", +# "rgb": "fill_to_uv_$mode($uv, $(name_uv)_bb, float($seed))", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "longdesc": "The mode decides how the UVs are layed out on each bounding box:\n- Stretch mode where the UV layout is stretched to the bounding box. \n- Square mode where the UV layout is even and centerered based on the longest axis of the bounding box.", +# "name": "mode", +# "shortdesc": "Mode", +# "type": "enum", +# "values": [ +# { +# "name": "Stretch", +# "value": "stretch" +# }, +# { +# "name": "Square", +# "value": "square" +# } +# ] +# } +# ], + +#vec4 flood_fill_preprocess(vec2 uv, float c, float s) { +# if (c > 0.5) { +# return vec4(0.0); +# } else { +# return vec4(floor(uv*s)/s, vec2(1.0/s)); +# } +#} + +static func flood_fill_preprocess(uv : Vector2, c : float, s : float) -> Color: + if (c > 0.5): + return Color(0, 0, 0, 0) + else: + uv = Commons.floorv2(uv * s) / s + var f : float = 1.0 / s + return Color(uv.x, uv.y, f, f) + +#vec3 fill_to_uv_stretch(vec2 coord, vec4 bb, float seed) { +# vec2 uv_islands = fract(coord-bb.xy)/bb.zw; +# float random_value = rand(vec2(seed)+bb.xy+bb.zw); +# return vec3(uv_islands, random_value); +#} + +static func fill_to_uv_stretch(coord : Vector2, bb : Color, pseed : float) -> Vector3: + var uv_islands : Vector2 = Commons.fractv2(coord - Vector2(bb.r, bb.g)) / Vector2(bb.b, bb.a) + var random_value : float = Commons.rand(Vector2(pseed, pseed) + Vector2(bb.r, bb.g) + Vector2(bb.b, bb.a)) + return Vector3(uv_islands.x, uv_islands.y, random_value) + +#vec3 fill_to_uv_square(vec2 coord, vec4 bb, float seed) { +# vec2 uv_islands; +# +# if (bb.z > bb.w) { +# vec2 adjusted_coord = coord + vec2(0.0, (bb.z - bb.w) / 2.0); +# uv_islands = fract(adjusted_coord-bb.xy)/bb.zz; +# } else { +# vec2 adjusted_coord = coord + vec2((bb.w - bb.z) / 2.0, 0.0); +# uv_islands = fract(adjusted_coord-bb.xy)/bb.ww; +# } +# +# float random_value = rand(vec2(seed)+bb.xy+bb.zw); +# return vec3(uv_islands, random_value); +#} + +static func fill_to_uv_square(coord : Vector2, bb : Color, pseed : float) -> Vector3: + var uv_islands : Vector2 = Vector2() + + if (bb.b > bb.a): + var adjusted_coord : Vector2 = coord + Vector2(0.0, (bb.b - bb.a) / 2.0); + uv_islands = Commons.fractv2(adjusted_coord - Vector2(bb.r, bb.g)) / Vector2(bb.b, bb.b) + else: + var adjusted_coord : Vector2 = coord + Vector2((bb.a - bb.b) / 2.0, 0.0); + uv_islands = Commons.fractv2(adjusted_coord - Vector2(bb.r, bb.g)) / Vector2(bb.a, bb.a) + + var random_value : float = Commons.rand(Vector2(pseed, pseed) + Vector2(bb.r, bb.g) + Vector2(bb.b, bb.a)) + return Vector3(uv_islands.x, uv_islands.y, random_value) diff --git a/game/addons/mat_maker_gd/nodes/common/filter.gd b/game/addons/mat_maker_gd/nodes/common/filter.gd new file mode 100644 index 0000000..59b8055 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/filter.gd @@ -0,0 +1,4442 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#adjust_hsv.mmg +#brightness_contrast.mmg +#greyscale.mmg + +#main node methods: adjust_hsv, brightness_contrast + +#---------------------- +#colorize.mmg +#Remaps a greyscale image to a custom gradient + +#Inputs: +#input, float, $uv.x - The input greyscale image - (Image input) + +#Outputs: +#output (rgba) $gradient($input($uv)) - Image output + +#Parameters: +#gradient, Gradient + +#---------------------- +#default_color.mmg + +# "inputs": [ +# { +# "default": "$default", +# "label": "", +# "name": "in", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "rgba": "$in($uv)", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": { +# "a": 1, +# "b": 1, +# "g": 1, +# "r": 1 +# }, +# "label": "", +# "name": "default", +# "type": "color" +# } +# ] + +#---------------------- +#decompose.mmg +#Decomposes an RGBA input into 4 greyscale images + +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "label": "", +# "longdesc": "The RGBA input image", +# "name": "i", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "f": "$i($uv).r", +# "longdesc": "Shows the Red channel of the input", +# "shortdesc": "Red", +# "type": "f" +# }, +# { +# "f": "$i($uv).g", +# "longdesc": "Shows the Green channel of the input", +# "shortdesc": "Green", +# "type": "f" +# }, +# { +# "f": "$i($uv).b", +# "longdesc": "Shows the Blue channel of the input", +# "shortdesc": "Blue", +# "type": "f" +# }, +# { +# "f": "$i($uv).a", +# "longdesc": "Shows the Alpha channel of the input", +# "shortdesc": "Alpha", +# "type": "f" +# } +# ], + +#---------------------- +#auto_tones.mmg + +#{ +# "connections": [ +# { +# "from": "graph", +# "from_port": 0, +# "to": "tones_map", +# "to_port": 1 +# }, +# { +# "from": "graph", +# "from_port": 1, +# "to": "tones_map", +# "to_port": 2 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "graph", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "tones_map", +# "to_port": 0 +# }, +# { +# "from": "tones_map", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# } +# ], +# "label": "Auto Tones", +# "longdesc": "Finds the minimum and maximum values in the input texture and tone maps it to the full 0.0 - 1.0 range.", +# "name": "auto_tones", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "connections": [ +# { +# "from": "combine", +# "from_port": 0, +# "to": "iterate_buffer", +# "to_port": 0 +# }, +# { +# "from": "decompose", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "decompose", +# "from_port": 1, +# "to": "gen_outputs", +# "to_port": 1 +# }, +# { +# "from": "iterate_buffer", +# "from_port": 0, +# "to": "decompose", +# "to_port": 0 +# }, +# { +# "from": "iterate_buffer", +# "from_port": 1, +# "to": "14423", +# "to_port": 0 +# }, +# { +# "from": "14423", +# "from_port": 0, +# "to": "iterate_buffer", +# "to_port": 1 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "combine", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "combine", +# "to_port": 1 +# } +# ], +# "label": "Find Min Max", +# "longdesc": "", +# "name": "graph", +# "node_position": { +# "x": 1105.399902, +# "y": -179.398849 +# }, +# "nodes": [ +# { +# "name": "14423", +# "node_position": { +# "x": 344, +# "y": 217 +# }, +# "parameters": { +# "size": 10 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "vec3 $(name)_compare(vec2 uv, float size) {\n\tfloat iter = $in(uv).b;\n\tsize = size / pow(2.0, (iter * 100.0) );\n\titer += 0.01;\n\tfloat pixel_offset = 1.0 / size;\n\tvec2 half_res_uv = floor(uv * size / 2.0) / size * 2.0 + pixel_offset / 2.0;\n\tvec3 values[4];\n\tvalues[0] = $in(half_res_uv);\n\tvalues[1] = $in(half_res_uv + vec2(pixel_offset, 0.0));\n\tvalues[2] = $in(half_res_uv + vec2(0.0, pixel_offset));\n\tvalues[3] = $in(half_res_uv + vec2(pixel_offset, pixel_offset));\n\t\n\tfloat lowest = 1.0;\n\tfloat highest = 0.0;\n\t\n\tfor (int i = 0; i < 4; i++) {\n\t\tlowest = values[i].r < lowest ? values[i].r : lowest;\n\t\thighest = values[i].g > highest ? values[i].g : highest;\n\t}\n\t\n\treturn vec3( lowest, highest , iter);\n}", +# "name": "Compare Neighbor", +# "outputs": [ +# { +# "rgb": "$(name)_compare($uv, $size)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": 10, +# "first": 1, +# "label": "", +# "last": 13, +# "name": "size", +# "type": "size" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "iterate_buffer", +# "node_position": { +# "x": 328, +# "y": 63 +# }, +# "parameters": { +# "filter": false, +# "iterations": 13, +# "mipmap": false, +# "size": 10 +# }, +# "seed_value": 29168, +# "type": "iterate_buffer" +# }, +# { +# "name": "combine", +# "node_position": { +# "x": 376, +# "y": -75 +# }, +# "parameters": { +# +# }, +# "type": "combine" +# }, +# { +# "name": "decompose", +# "node_position": { +# "x": 605, +# "y": 64 +# }, +# "parameters": { +# +# }, +# "type": "decompose" +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -199, +# "y": 23 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "", +# "name": "in", +# "shortdesc": "In", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 831, +# "y": 42 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "", +# "name": "min", +# "shortdesc": "Min", +# "type": "f" +# }, +# { +# "group_size": 0, +# "longdesc": "", +# "name": "max", +# "shortdesc": "Max", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": 248.399994, +# "y": -292 +# }, +# "parameters": { +# "param0": 10 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Size", +# "linked_widgets": [ +# { +# "node": "iterate_buffer", +# "widget": "size" +# }, +# { +# "node": "14423", +# "widget": "size" +# } +# ], +# "name": "param0", +# "type": "linked_control" +# } +# ] +# } +# ], +# "parameters": { +# "param0": 10 +# }, +# "shortdesc": "", +# "type": "graph" +# }, +# { +# "name": "tones_map", +# "node_position": { +# "x": 1142.528442, +# "y": -88.26989 +# }, +# "parameters": { +# +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec4(0.5 ,0.5, 0.5, 1.0)", +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "f" +# }, +# { +# "default": "0.0", +# "label": "", +# "name": "in_min", +# "type": "f" +# }, +# { +# "default": "1.0", +# "label": "", +# "name": "in_max", +# "type": "f" +# } +# ], +# "instance": "", +# "longdesc": "Maps linearly an input tones interval to an output tones interval.", +# "name": "Mapping", +# "outputs": [ +# { +# "f": "($in($uv)-$in_min($uv))/($in_max($uv)-$in_min($uv))", +# "longdesc": "Shows the generated remapped image", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# +# ], +# "shortdesc": "Tones map" +# }, +# "type": "shader" +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": 665.528564, +# "y": -136.535721 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 1425.400024, +# "y": -135.535721 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "Shows the generated remapped image", +# "name": "out", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": 1024.664307, +# "y": -298.400757 +# }, +# "parameters": { +# "param0": 10 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "graph", +# "widget": "param0" +# } +# ], +# "longdesc": "Buffers are used to find the mininum and maximum values for the input image. If the input has small details a higher resolution buffer might be needed to capture precise min and max values.\n\nNote: The output itself will not be buffered.", +# "name": "param0", +# "shortdesc": "Size", +# "type": "linked_control" +# } +# ] +# } +# ], +# "parameters": { +# "param0": 10 +# }, +# "shortdesc": "Auto Tones", +# "type": "graph" +#} + +#---------------------- +#blend.mmg +#Blends its input, using an optional mask + +#Outputs: + +#Output - (color) +#vec4 $(name_uv)_s1 = $s1($uv); +#vec4 $(name_uv)_s2 = $s2($uv); +#float $(name_uv)_a = $amount*$a($uv); +#vec4(blend_$blend_type($uv, $(name_uv)_s1.rgb, $(name_uv)_s2.rgb, $(name_uv)_a*$(name_uv)_s1.a), min(1.0, $(name_uv)_s2.a+$(name_uv)_a*$(name_uv)_s1.a)) + +#Inputs: +#in1, color, default vec4($uv.x, 1.0, 1.0, 1.0) +#in2, color, default vec4($uv.x, 1.0, 1.0, 1.0) +#blend_type, enum, default: 0, Normal,Dissolve,Multiply,Screen,Overlay,Hard Light,Soft Light,Burn,Dodge,Lighten,Darken,Difference +#opactiy, float, min: 0, max: 1, default: 0.5, step: 0.01 (input float) + +#---------------------- +#combine.mmg +#Combines 4 greyscale inputs into an RGBA image + +# "inputs": [ +# { +# "default": "0.0", +# "label": "R", +# "longdesc": "The greyscale input for the red channel", +# "name": "r", +# "shortdesc": "Red", +# "type": "f" +# }, +# { +# "default": "0.0", +# "label": "G", +# "longdesc": "The greyscale input for the green channel", +# "name": "g", +# "shortdesc": "Green", +# "type": "f" +# }, +# { +# "default": "0.0", +# "label": "B", +# "longdesc": "The greyscale input for the blue channel", +# "name": "b", +# "shortdesc": "Blue", +# "type": "f" +# }, +# { +# "default": "1.0", +# "label": "A", +# "longdesc": "The greyscale input for the alpha channel", +# "name": "a", +# "shortdesc": "Alpha", +# "type": "f" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the combined RGBA image", +# "rgba": "vec4($r($uv), $g($uv), $b($uv), $a($uv))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], + +#---------------------- +#emboss.mmg +#Creates highlights and shadows from an input heightmap + +#float $(name)_fct(vec2 uv) { +# float pixels = max(1.0, $width); +# float e = 1.0/$size; +# float rv = 0.0; +# +# for (float dx = -pixels; dx <= pixels; dx += 1.0) { +# for (float dy = -pixels; dy <= pixels; dy += 1.0) { +# if (abs(dx) > 0.5 || abs(dy) > 0.5) { +# rv += $in(uv+e*vec2(dx, dy))*cos(atan(dy, dx)-$angle*3.14159265359/180.0)/length(vec2(dx, dy)); +# } +# } +# } +# +# return $amount*rv/pixels+0.5; +#} + +#Outputs: + +#Output - (float) +#$(name)_fct($uv) + +#Inputs: +#input, float, default 0 +#size, int (image size) +#angle, float, min: -180, max: 180, default: 0, step: 0.1 +#amount, float, min: 0, max: 10, default: 1, step: 0.1 +#width, float, min: 1, max: 5, default: 1, step: 1 + +#---------------------- +#invert.mmg +#A filter that inverts the R, G, and B channels of its input while keeping the A channel unchanged + +#Outputs: + +#Output - (rgba) +#vec4(vec3(1.0)-$in($uv).rgb, $in($uv).a) + +#Inputs: +#input, rgba, default vec4(1.0, 1.0, 1.0, 1.0) + +#---------------------- +#normal_map.mmg + +#{ +# "connections": [ +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer", +# "to_port": 0 +# }, +# { +# "from": "buffer", +# "from_port": 0, +# "to": "switch", +# "to_port": 1 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "switch", +# "to_port": 0 +# }, +# { +# "from": "edge_detect_1", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "switch", +# "from_port": 0, +# "to": "edge_detect_1", +# "to_port": 0 +# } +# ], +# "label": "Normal Map", +# "longdesc": "Generates a normal map from a height map", +# "name": "normal_map", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "buffer", +# "node_position": { +# "x": -695.663818, +# "y": 34.60614 +# }, +# "parameters": { +# "lod": 0, +# "size": 10 +# }, +# "type": "buffer" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -731.910156, +# "y": -131.916687 +# }, +# "parameters": { +# "param0": 10, +# "param1": 1, +# "param2": 0, +# "param4": 1 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "edge_detect_1", +# "widget": "format" +# } +# ], +# "longdesc": "The format of the generated normal map\nIn most cases this should be set to default", +# "name": "param2", +# "shortdesc": "Format", +# "type": "linked_control" +# }, +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "buffer", +# "widget": "size" +# }, +# { +# "node": "edge_detect_1", +# "widget": "size" +# } +# ], +# "longdesc": "The resolution of the generated normal map", +# "name": "param0", +# "shortdesc": "Resolution", +# "type": "linked_control" +# }, +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "edge_detect_1", +# "widget": "amount" +# } +# ], +# "longdesc": "The strength of the normal map filter", +# "name": "param1", +# "shortdesc": "Strength", +# "type": "linked_control" +# }, +# { +# "configurations": { +# "False": [ +# { +# "node": "switch", +# "value": 0, +# "widget": "source" +# } +# ], +# "True": [ +# { +# "node": "switch", +# "value": 1, +# "widget": "source" +# } +# ] +# }, +# "label": "Buffer", +# "linked_widgets": [ +# { +# "node": "switch", +# "widget": "source" +# } +# ], +# "longdesc": "When set, a buffer is used to sample the input before the normal map filter", +# "name": "param4", +# "shortdesc": "Buffer", +# "type": "config_control" +# } +# ] +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": -445.663818, +# "y": 75.047363 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "Shows the generated normal map", +# "name": "Normal", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -1094.910156, +# "y": 74.047363 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input height map", +# "name": "Bump", +# "shortdesc": "Input", +# "type": "f" +# } +# ], +# "seed_value": 12483, +# "type": "ios" +# }, +# { +# "name": "switch", +# "node_position": { +# "x": -673.5, +# "y": 113.297363 +# }, +# "parameters": { +# "choices": 2, +# "outputs": 1, +# "source": 1 +# }, +# "type": "switch" +# }, +# { +# "name": "edge_detect_1", +# "node_position": { +# "x": -676.092529, +# "y": 193.868774 +# }, +# "parameters": { +# "amount": 1, +# "format": 0, +# "size": 10 +# }, +# "shader_model": { +# "code": "", +# "global": "vec3 process_normal_default(vec3 v, float multiplier) {\n\treturn 0.5*normalize(v.xyz*multiplier+vec3(0.0, 0.0, -1.0))+vec3(0.5);\n}\n\nvec3 process_normal_opengl(vec3 v, float multiplier) {\n\treturn 0.5*normalize(v.xyz*multiplier+vec3(0.0, 0.0, 1.0))+vec3(0.5);\n}\n\nvec3 process_normal_directx(vec3 v, float multiplier) {\n\treturn 0.5*normalize(v.xyz*vec3(1.0, -1.0, 1.0)*multiplier+vec3(0.0, 0.0, 1.0))+vec3(0.5);\n}\n", +# "inputs": [ +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "name": "in", +# "type": "f" +# } +# ], +# "instance": "vec3 $(name)_fct(vec2 uv) {\n\tvec3 e = vec3(1.0/$size, -1.0/$size, 0);\n\tvec2 rv = vec2(1.0, -1.0)*$in(uv+e.xy);\n\trv += vec2(-1.0, 1.0)*$in(uv-e.xy);\n\trv += vec2(1.0, 1.0)*$in(uv+e.xx);\n\trv += vec2(-1.0, -1.0)*$in(uv-e.xx);\n\trv += vec2(2.0, 0.0)*$in(uv+e.xz);\n\trv += vec2(-2.0, 0.0)*$in(uv-e.xz);\n\trv += vec2(0.0, 2.0)*$in(uv+e.zx);\n\trv += vec2(0.0, -2.0)*$in(uv-e.zx);\n\treturn vec3(rv, 0.0);\n}", +# "name": "Normal map", +# "outputs": [ +# { +# "rgb": "process_normal_$format($(name)_fct($uv), $amount*$size/128.0)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "name": "format", +# "type": "enum", +# "values": [ +# { +# "name": "Default", +# "value": "default" +# }, +# { +# "name": "OpenGL", +# "value": "opengl" +# }, +# { +# "name": "DirectX", +# "value": "directx" +# } +# ] +# }, +# { +# "default": 9, +# "first": 4, +# "label": "", +# "last": 12, +# "name": "size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "", +# "max": 2, +# "min": 0, +# "name": "amount", +# "step": 0.01, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# } +# ], +# "parameters": { +# "param0": 10, +# "param1": 1, +# "param2": 0, +# "param4": 1 +# }, +# "shortdesc": "Normal map", +# "type": "graph" +#} + +#---------------------- +#sharpen.mmg +#Sharpens it input image + +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgb" +# } +# ], +# "instance": "vec3 $(name)_fct(vec2 uv) {\n\tvec2 e = vec2(1.0/$size, 0.0);\n\tvec3 rv = 5.0*$in(uv);\n\trv -= $in(uv+e.xy);\n\trv -= $in(uv-e.xy);\n\trv -= $in(uv+e.yx);\n\trv -= $in(uv-e.yx);\n\treturn rv;\n}", +# "outputs": [ +# { +# "longdesc": "Shows the generated sharpened image", +# "rgb": "$(name)_fct($uv)", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 4, +# "label": "Size", +# "last": 12, +# "longdesc": "The resolution of the input image", +# "name": "size", +# "shortdesc": "Size", +# "type": "size" +# } +# ], + +#---------------------- +#tones.mmg + +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "label": "", +# "name": "input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "rgba": "adjust_levels($input($uv), $in_min, $in_mid, $in_max, $out_min, $out_max)", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": { +# "a": 0, +# "b": 0, +# "g": 0, +# "r": 0 +# }, +# "label": "", +# "name": "in_min", +# "type": "color" +# }, +# { +# "default": { +# "a": 0.498039, +# "b": 0.498039, +# "g": 0.498039, +# "r": 0.498039 +# }, +# "label": "", +# "name": "in_mid", +# "type": "color" +# }, +# { +# "default": { +# "a": 1, +# "b": 1, +# "g": 1, +# "r": 1 +# }, +# "label": "", +# "name": "in_max", +# "type": "color" +# }, +# { +# "default": { +# "a": 1, +# "b": 0, +# "g": 0, +# "r": 0 +# }, +# "label": "", +# "name": "out_min", +# "type": "color" +# }, +# { +# "default": { +# "a": 1, +# "b": 1, +# "g": 1, +# "r": 1 +# }, +# "label": "", +# "name": "out_max", +# "type": "color" +# } +# ] +# }, + +#---------------------- +#tones_map.mmg +#Maps linearly an input tones interval to an output tones interval. + +# "inputs": [ +# { +# "default": "vec4(0.5 ,0.5, 0.5, 1.0)", +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the generated remapped image", +# "rgba": "vec4(vec3($out_min)+($in($uv).rgb-vec3($in_min))*vec3(($out_max-$out_min)/($in_max-$in_min)), $in($uv).a)", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.5, +# "label": "Input min", +# "longdesc": "The minimum value of the input interval", +# "max": 1, +# "min": 0, +# "name": "in_min", +# "shortdesc": "InputMin", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Input max", +# "longdesc": "The maximum value of the input interval", +# "max": 1, +# "min": 0, +# "name": "in_max", +# "shortdesc": "InputMax", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Output min", +# "longdesc": "The minimum value of the output interval", +# "max": 1, +# "min": 0, +# "name": "out_min", +# "shortdesc": "OutputMin", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Output max", +# "longdesc": "The maximum value of the output interval", +# "max": 1, +# "min": 0, +# "name": "out_max", +# "shortdesc": "OutputMax", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#make_tileable.mmg +#Creates a tileable version of its input image by moving different parts around to hide seams. + +#vec4 make_tileable_$(name)(vec2 uv, float w) { +# vec4 a = $in(uv); +# vec4 b = $in(fract(uv+vec2(0.5))); +# float coef_ab = sin(1.57079632679*clamp((length(uv-vec2(0.5))-0.5+w)/w, 0.0, 1.0)); +# vec4 c = $in(fract(uv+vec2(0.25))); +# float coef_abc = sin(1.57079632679*clamp((min(min(length(uv-vec2(0.0, 0.5)), length(uv-vec2(0.5, 0.0))), min(length(uv-vec2(1.0, 0.5)), length(uv-vec2(0.5, 1.0))))-w)/w, 0.0, 1.0)); +# return mix(c, mix(a, b, coef_ab), coef_abc); +#} + +#Inputs: +#input, rgba, default: vec4(1.0) +#width, float, min:0, max: 1: default: 0.1, step: 0.01 + +#Outputs: +#output (rgba) +#make_tileable_$(name)($uv, 0.5*$w) + +#---------------------- +#occlusion.mmg + +#{ +# "connections": [ +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer", +# "to_port": 0 +# }, +# { +# "from": "blend", +# "from_port": 0, +# "to": "colorize", +# "to_port": 0 +# }, +# { +# "from": "buffer", +# "from_port": 0, +# "to": "blend", +# "to_port": 0 +# }, +# { +# "from": "colorize", +# "from_port": 0, +# "to": "_2", +# "to_port": 0 +# }, +# { +# "from": "_2", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "buffer", +# "from_port": 0, +# "to": "gaussian_blur_x", +# "to_port": 0 +# }, +# { +# "from": "gaussian_blur_x", +# "from_port": 0, +# "to": "buffer_2", +# "to_port": 0 +# }, +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "gaussian_blur_y", +# "to_port": 0 +# }, +# { +# "from": "gaussian_blur_y", +# "from_port": 0, +# "to": "blend", +# "to_port": 1 +# } +# ], +# "label": "Occlusion", +# "longdesc": "Generates an ambient occlusion map from a height map", +# "name": "occlusion", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "buffer_2", +# "node_position": { +# "x": -409.875, +# "y": -112.625 +# }, +# "parameters": { +# "lod": 0, +# "size": 8 +# }, +# "seed_value": 61344, +# "type": "buffer" +# }, +# { +# "name": "buffer", +# "node_position": { +# "x": -408.25, +# "y": -265.75 +# }, +# "parameters": { +# "lod": 0, +# "size": 8 +# }, +# "seed_value": 53030, +# "type": "buffer" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -463.666626, +# "y": -384.666656 +# }, +# "parameters": { +# "param0": 8, +# "param2": 1.5 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Grid size:", +# "linked_widgets": [ +# { +# "node": "buffer", +# "widget": "size" +# }, +# { +# "node": "buffer_2", +# "widget": "size" +# }, +# { +# "node": "gaussian_blur_x", +# "widget": "size" +# }, +# { +# "node": "gaussian_blur_y", +# "widget": "size" +# } +# ], +# "longdesc": "The resolution of the input height map", +# "name": "param0", +# "shortdesc": "Size", +# "type": "linked_control" +# }, +# { +# "label": "Strength", +# "linked_widgets": [ +# { +# "node": "_2", +# "widget": "g" +# } +# ], +# "longdesc": "The strength of the occlusion map effect", +# "name": "param2", +# "shortdesc": "Strength", +# "type": "linked_control" +# } +# ] +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -824.666626, +# "y": -116.392853 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input heightmap", +# "name": "port0", +# "shortdesc": "Input", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 33.547607, +# "y": -132.392853 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The generated occlusion map", +# "name": "port0", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "blend", +# "node_position": { +# "x": -422.79895, +# "y": 63.16272 +# }, +# "parameters": { +# "amount": 1, +# "blend_type": 11 +# }, +# "type": "blend" +# }, +# { +# "name": "colorize", +# "node_position": { +# "x": -167.79895, +# "y": -178.83728 +# }, +# "parameters": { +# "gradient": { +# "interpolation": 1, +# "points": [ +# { +# "a": 1, +# "b": 1, +# "g": 1, +# "pos": 0, +# "r": 1 +# }, +# { +# "a": 1, +# "b": 0, +# "g": 0, +# "pos": 1, +# "r": 0 +# } +# ], +# "type": "Gradient" +# } +# }, +# "seed_value": 33856, +# "type": "colorize" +# }, +# { +# "name": "_2", +# "node_position": { +# "x": -145.403687, +# "y": -112.29187 +# }, +# "parameters": { +# "g": 1.5 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "0.0", +# "label": "", +# "name": "in", +# "type": "f" +# } +# ], +# "instance": "", +# "name": "", +# "outputs": [ +# { +# "f": "pow($in($uv), $g)", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 1, +# "label": "", +# "max": 2, +# "min": 0, +# "name": "g", +# "step": 0.1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "gaussian_blur_x", +# "node_position": { +# "x": -413.053711, +# "y": -189.016876 +# }, +# "parameters": { +# "sigma": 50, +# "size": 8 +# }, +# "type": "gaussian_blur_x" +# }, +# { +# "name": "gaussian_blur_y", +# "node_position": { +# "x": -405.053711, +# "y": -21.016876 +# }, +# "parameters": { +# "sigma": 50, +# "size": 8 +# }, +# "type": "gaussian_blur_y" +# } +# ], +# "parameters": { +# "param0": 8, +# "param2": 1.5 +# }, +# "shortdesc": "Occlusion", +# "type": "graph" +#} + +#---------------------- +#occlusion2.mmg + +#{ +# "connections": [ +# { +# "from": "colorize", +# "from_port": 0, +# "to": "_2", +# "to_port": 0 +# }, +# { +# "from": "_2", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "fast_blur", +# "to_port": 0 +# }, +# { +# "from": "fast_blur", +# "from_port": 0, +# "to": "blend", +# "to_port": 1 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "blend", +# "to_port": 0 +# }, +# { +# "from": "blend", +# "from_port": 0, +# "to": "colorize", +# "to_port": 0 +# } +# ], +# "label": "Occlusion", +# "longdesc": "Generates an ambient occlusion map from a height map", +# "name": "occlusion2", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -522.866638, +# "y": -383.867035 +# }, +# "parameters": { +# "param0": 11, +# "param1": 20, +# "param2": 1.5, +# "param3": 1 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Resolution", +# "linked_widgets": [ +# { +# "node": "fast_blur", +# "widget": "param0" +# } +# ], +# "longdesc": "The resolution of the input height map", +# "name": "param0", +# "shortdesc": "Resolution", +# "type": "linked_control" +# }, +# { +# "label": "Strength", +# "linked_widgets": [ +# { +# "node": "_2", +# "widget": "g" +# } +# ], +# "longdesc": "The strength of the occlusion map effect", +# "name": "param2", +# "shortdesc": "Strength", +# "type": "linked_control" +# }, +# { +# "label": "Radius", +# "linked_widgets": [ +# { +# "node": "fast_blur", +# "widget": "param1" +# } +# ], +# "longdesc": "The radius of the blur used for the occlusion effect", +# "name": "param1", +# "shortdesc": "Radius", +# "type": "linked_control" +# }, +# { +# "label": "Quality", +# "linked_widgets": [ +# { +# "node": "fast_blur", +# "widget": "param2" +# } +# ], +# "longdesc": "The quality of the blur operation used for the occlusion effect", +# "name": "param3", +# "shortdesc": "Quality", +# "type": "linked_control" +# } +# ] +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -842.266602, +# "y": -108.396729 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input heightmap", +# "name": "port0", +# "shortdesc": "Input", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 77.5476, +# "y": -86.015305 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The generated occlusion map", +# "name": "port0", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "blend", +# "node_position": { +# "x": -422.79895, +# "y": 11.18788 +# }, +# "parameters": { +# "amount": 1, +# "blend_type": 11 +# }, +# "type": "blend" +# }, +# { +# "name": "colorize", +# "node_position": { +# "x": -124.598953, +# "y": -131.660126 +# }, +# "parameters": { +# "gradient": { +# "interpolation": 1, +# "points": [ +# { +# "a": 1, +# "b": 1, +# "g": 1, +# "pos": 0, +# "r": 1 +# }, +# { +# "a": 1, +# "b": 0, +# "g": 0, +# "pos": 1, +# "r": 0 +# } +# ], +# "type": "Gradient" +# } +# }, +# "seed_value": 33856, +# "type": "colorize" +# }, +# { +# "name": "_2", +# "node_position": { +# "x": -104.603699, +# "y": -57.918201 +# }, +# "parameters": { +# "g": 1.5 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "0.0", +# "label": "", +# "name": "in", +# "type": "f" +# } +# ], +# "instance": "", +# "name": "", +# "outputs": [ +# { +# "f": "pow($in(fract($uv)), $g)", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 1, +# "label": "", +# "max": 2, +# "min": 0, +# "name": "g", +# "step": 0.1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "connections": [ +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "fast_blur_shader", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer_2", +# "to_port": 0 +# }, +# { +# "from": "fast_blur_shader", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# } +# ], +# "label": "Fast Blur", +# "longdesc": "", +# "name": "fast_blur", +# "node_position": { +# "x": -435.552002, +# "y": -135.436234 +# }, +# "nodes": [ +# { +# "name": "fast_blur_shader", +# "node_position": { +# "x": -161.600006, +# "y": 143.188766 +# }, +# "parameters": { +# "quality": 1, +# "sigma": 20 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgba" +# } +# ], +# "instance": "vec4 $(name)_blur(vec2 uv, vec2 scale, float sigma, int quality) {\n vec4 O = vec4(0.0);\n\tfloat samples = sigma * 4.0; \n\tint LOD = max(0, int(log2(float(samples)))-quality-2);\n\tint sLOD = 1 << LOD;\n int s = max(1, int(samples/float(sLOD)));\n\tfloat sum = 0.0;\n for (int i = 0; i < s*s; i++) {\n vec2 d = vec2(float(i%s), float(i/s))*float(sLOD) - 0.5*float(samples);\n\t\tvec2 dd = d / sigma;\n\t\tfloat g = exp(-.5*dot(dd,dd))/(6.28*sigma*sigma);\n O += g * textureLod($in.texture, uv + scale * d, float(LOD));\n\t\tsum += g;\n }\n \n return O / sum;\n}\n", +# "name": "Fast Blur", +# "outputs": [ +# { +# "rgba": "$(name)_blur($uv, vec2(1.0)/$in.size, max(1.0, floor($sigma*$in.size/2048.0)), int($quality))", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 1, +# "label": "", +# "max": 256, +# "min": 1, +# "name": "sigma", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "", +# "max": 3, +# "min": 0, +# "name": "quality", +# "step": 1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "buffer_2", +# "node_position": { +# "x": -187, +# "y": 61.5 +# }, +# "parameters": { +# "size": 11 +# }, +# "type": "buffer", +# "version": 1 +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -602, +# "y": 91.75 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "name": "port0", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 88, +# "y": 61.75 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "name": "port0", +# "type": "rgba" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -254.5, +# "y": -122.5 +# }, +# "parameters": { +# "param0": 11, +# "param1": 20, +# "param2": 1 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Resolution", +# "linked_widgets": [ +# { +# "node": "buffer_2", +# "widget": "size" +# } +# ], +# "name": "param0", +# "type": "linked_control" +# }, +# { +# "label": "Sigma", +# "linked_widgets": [ +# { +# "node": "fast_blur_shader", +# "widget": "sigma" +# } +# ], +# "name": "param1", +# "type": "linked_control" +# }, +# { +# "label": "Quality", +# "linked_widgets": [ +# { +# "node": "fast_blur_shader", +# "widget": "quality" +# } +# ], +# "name": "param2", +# "type": "linked_control" +# } +# ] +# } +# ], +# "parameters": { +# "param0": 11, +# "param1": 20, +# "param2": 1 +# }, +# "shortdesc": "", +# "type": "graph" +# } +# ], +# "parameters": { +# "param0": 11, +# "param1": 20, +# "param2": 1.5, +# "param3": 1 +# }, +# "shortdesc": "Occlusion", +# "type": "graph" +#} + +#---------------------- +#pixelize.mmg +#Creates a pixelated image from its input, and also quantifies the colors with optional dithering. + +# "code": "vec2 $(name_uv)_uv = floor(($uv*vec2($x, $y)))+vec2(0.5);\nvec3 $(name_uv)_dither = fract(vec3(dot(vec2(171.0, 231.0), $(name_uv)_uv))/vec3(103.0, 71.0, 97.0));\n", +# "inputs": [ +# { +# "default": "vec3(1.0)", +# "label": "", +# "longdesc": "The image to be pixelated", +# "name": "i", +# "shortdesc": "Input", +# "type": "rgb" +# } +# ], +# "outputs": [ +# { +# "longdesc": "A pixelated version of the input image", +# "rgb": "floor($i($(name_uv)_uv/vec2($x, $y))*$c+$d*($(name_uv)_dither-vec3(0.5)))/$c", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 4, +# "label": "Columns:", +# "longdesc": "Number of pixel columns of the output", +# "max": 256, +# "min": 1, +# "name": "x", +# "shortdesc": "Columns", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 4, +# "label": "Rows:", +# "longdesc": "Number of pixel rows of the output", +# "max": 256, +# "min": 1, +# "name": "y", +# "shortdesc": "Rows", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 4, +# "label": "Levels:", +# "longdesc": "Number of color levels for each channel", +# "max": 32, +# "min": 2, +# "name": "c", +# "shortdesc": "Levels", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Dither:", +# "longdesc": "Amount of dithering in the output image", +# "max": 1, +# "min": 0, +# "name": "d", +# "shortdesc": "Dithering", +# "step": 0.01, +# "type": "float" +# } +# ] + +#---------------------- +#quantize.mmg +#Quantizes the red, green and blue channels of its input + +# "inputs": [ +# { +# "default": "vec4(2.0*vec3(length($uv-vec2(0.5))), 1.0)", +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The quantized image", +# "rgba": "vec4(floor($in($uv).rgb*$steps)/$steps, $in($uv).a)", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 4, +# "label": "", +# "longdesc": "The number of quantization steps", +# "max": 32, +# "min": 2, +# "name": "steps", +# "shortdesc": "Steps", +# "step": 1, +# "type": "float" +# } +# ], + +#---------------------- +#skew.mmg + +# "global": "vec2 uvskew_h(vec2 uv, float amount) {\n\treturn vec2(uv.x+amount*(uv.y-0.5), uv.y);\n}\nvec2 uvskew_v(vec2 uv, float amount) {\n\treturn vec2(uv.x, uv.y+amount*(uv.x-0.5));\n}", +# "inputs": [ +# { +# "default": "vec4($uv, 0, 1)", +# "label": "", +# "name": "i", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "rgba": "$i(uvskew_$direction($uv, $amount))", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "name": "direction", +# "type": "enum", +# "values": [ +# { +# "name": "Horizontal", +# "value": "h" +# }, +# { +# "name": "Vertical", +# "value": "v" +# } +# ] +# }, +# { +# "default": 0, +# "label": "", +# "max": 3, +# "min": -3, +# "name": "amount", +# "step": 0.005, +# "type": "float", +# "widget": "spinbox" +# } +# ] + +#---------------------- +#tonality.mmg +#Remaps a greyscale image tonality using a curve + +# "inputs": [ +# { +# "default": "$uv.x", +# "label": "", +# "longdesc": "The input greyscale image", +# "name": "input", +# "shortdesc": "Input", +# "type": "f" +# } +# ], +# "outputs": [ +# { +# "f": "$curve($input($uv))", +# "longdesc": "The remapped greyscale image", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": { +# "points": [ +# { +# "ls": 0, +# "rs": 1, +# "x": 0, +# "y": 0 +# }, +# { +# "ls": 1, +# "rs": 0, +# "x": 1, +# "y": 1 +# } +# ], +# "type": "Curve" +# }, +# "label": "", +# "longdesc": "The tonality curve to which the input is remapped", +# "name": "curve", +# "shortdesc": "Curve", +# "type": "curve" +# } +# ], + +#---------------------- +#tones_range.mmg +#Outputs the tone range around a specified value + +# "code": "float $(name_uv)_step = clamp(($in($uv) - ($value))/max(0.0001, $width)+0.5, 0.0, 1.0);\nfloat $(name_uv)_false = clamp((min($(name_uv)_step, 1.0-$(name_uv)_step) * 2.0) / (1.0 - $contrast), 0.0, 1.0);\nfloat $(name_uv)_true = 1.0-$(name_uv)_false;", +# "inputs": [ +# { +# "default": "($uv.x + $uv.y) / 2.0", +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "f" +# } +# ], +# "outputs": [ +# { +# "f": "$(name_uv)_$invert", +# "longdesc": "Shows the generated high contrast image", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.5, +# "label": "Value", +# "longdesc": "The center value of the selection", +# "max": 1, +# "min": 0, +# "name": "value", +# "shortdesc": "Value", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.25, +# "label": "Width", +# "longdesc": "The width (in tones space) of the selection area", +# "max": 1, +# "min": 0, +# "name": "width", +# "shortdesc": "Width", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Contrast", +# "longdesc": "Adjusts the falloff of the output", +# "max": 1, +# "min": 0, +# "name": "contrast", +# "shortdesc": "Contrast", +# "step": 0.01, +# "type": "float" +# }, +# { +# "default": false, +# "label": "Invert", +# "longdesc": "Invert the generated image if set", +# "name": "invert", +# "shortdesc": "Invert", +# "type": "boolean" +# } +# ], + +#---------------------- +#tones_step.mmg +#Emphasizes dark and light tones around a specified value + +# "code": "vec3 $(name_uv)_false = clamp(($in($uv).rgb-vec3($value))/max(0.0001, $width)+vec3(0.5), vec3(0.0), vec3(1.0));\nvec3 $(name_uv)_true = vec3(1.0)-$(name_uv)_false;", +# "inputs": [ +# { +# "default": "vec4(0.5 ,0.5, 0.5, 1.0)", +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the generated high contrast image", +# "rgba": "vec4($(name_uv)_$invert, $in($uv).a)", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.5, +# "label": "Value", +# "longdesc": "The value of the input that separate dark and light zones of the result", +# "max": 1, +# "min": 0, +# "name": "value", +# "shortdesc": "Value", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Width", +# "longdesc": "The width (in tones space) of the transition area", +# "max": 1, +# "min": 0, +# "name": "width", +# "shortdesc": "width", +# "step": 0.01, +# "type": "float" +# }, +# { +# "default": false, +# "label": "Invert", +# "longdesc": "Invert the generated image if set", +# "name": "invert", +# "shortdesc": "Invert", +# "type": "boolean" +# } +# ], + +#---------------------- +#math.mmg +#Performs a math operation using its inputs or parameter values + +# "code": "float $(name_uv)_clamp_false = $op;\nfloat $(name_uv)_clamp_true = clamp($(name_uv)_clamp_false, 0.0, 1.0);\n", +# "inputs": [ +# { +# "default": "$default_in1", +# "label": "2:A", +# "longdesc": "The A operand", +# "name": "in1", +# "shortdesc": "A", +# "type": "f" +# }, +# { +# "default": "$default_in2", +# "label": "B", +# "longdesc": "The B operand", +# "name": "in2", +# "shortdesc": "B", +# "type": "f" +# } +# ], +# "outputs": [ +# { +# "f": "$(name_uv)_clamp_$clamp", +# "longdesc": "Shows a greyscale image of the result", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 19, +# "label": "", +# "longdesc": "The operation to be performed", +# "name": "op", +# "shortdesc": "Operation", +# "type": "enum", +# "values": [ +# { +# "name": "A+B", +# "value": "$in1($uv)+$in2($uv)" +# }, +# { +# "name": "A-B", +# "value": "$in1($uv)-$in2($uv)" +# }, +# { +# "name": "A*B", +# "value": "$in1($uv)*$in2($uv)" +# }, +# { +# "name": "A/B", +# "value": "$in1($uv)/$in2($uv)" +# }, +# { +# "name": "log(A)", +# "value": "log($in1($uv))" +# }, +# { +# "name": "log2(A)", +# "value": "log2($in1($uv))" +# }, +# { +# "name": "pow(A, B)", +# "value": "pow($in1($uv),$in2($uv))" +# }, +# { +# "name": "abs(A)", +# "value": "abs($in1($uv))" +# }, +# { +# "name": "round(A)", +# "value": "round($in1($uv))" +# }, +# { +# "name": "floor(A)", +# "value": "floor($in1($uv))" +# }, +# { +# "name": "ceil(A)", +# "value": "ceil($in1($uv))" +# }, +# { +# "name": "trunc(A)", +# "value": "trunc($in1($uv))" +# }, +# { +# "name": "fract(A)", +# "value": "fract($in1($uv))" +# }, +# { +# "name": "min(A, B)", +# "value": "min($in1($uv),$in2($uv))" +# }, +# { +# "name": "max(A, B)", +# "value": "max($in1($uv),$in2($uv))" +# }, +# { +# "name": "A 0.5 || abs(dy) > 0.5) {\n\t\t\t\trv += $in(uv+e*vec2(dx, dy)).xy*cos(vec2(atan(dy, dx))-vec2(0.0, 0.5)*3.14159265359)/length(vec2(dx, dy));\n\t\t\t}\n\t\t}\n\t}\n\treturn $amount*rv/pixels+0.5;\n}", +# "name": "Curvature", +# "outputs": [ +# { +# "f": "0.5*($(name_uv)_emboss.x+$(name_uv)_emboss.y)", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 6, +# "label": "Size", +# "last": 12, +# "name": "size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Amount", +# "max": 10, +# "min": 0, +# "name": "amount", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Width", +# "max": 5, +# "min": 1, +# "name": "width", +# "step": 1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "598_2", +# "node_position": { +# "x": -100.207932, +# "y": 638.757874 +# }, +# "parameters": { +# "amount": 1, +# "size": 11, +# "width": 2 +# }, +# "shader_model": { +# "code": "vec2 $(name_uv)_emboss = $(name)_fct($uv);", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "vec2 $(name)_fct(vec2 uv) {\n\tfloat pixels = max(1.0, $width);\n\tfloat e = 1.0/$size;\n\tvec2 rv = vec2(0.0);\n\tfor (float dx = -pixels; dx <= pixels; dx += 1.0) {\n\t\tfor (float dy = -pixels; dy <= pixels; dy += 1.0) {\n\t\t\tif (abs(dx) > 0.5 || abs(dy) > 0.5) {\n\t\t\t\trv += $in(uv+e*vec2(dx, dy)).xy*cos(vec2(atan(dy, dx))-vec2(0.0, 0.5)*3.14159265359)/length(vec2(dx, dy));\n\t\t\t}\n\t\t}\n\t}\n\treturn $amount*rv/pixels+0.5;\n}", +# "name": "Curvature", +# "outputs": [ +# { +# "f": "0.5*($(name_uv)_emboss.x+$(name_uv)_emboss.y)", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 6, +# "label": "Size", +# "last": 12, +# "name": "size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Amount", +# "max": 10, +# "min": 0, +# "name": "amount", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Width", +# "max": 5, +# "min": 1, +# "name": "width", +# "step": 1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "598_4", +# "node_position": { +# "x": -97.532082, +# "y": 755.803345 +# }, +# "parameters": { +# "amount": 1, +# "size": 11, +# "width": 4 +# }, +# "shader_model": { +# "code": "vec2 $(name_uv)_emboss = $(name)_fct($uv);", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "vec2 $(name)_fct(vec2 uv) {\n\tfloat pixels = max(1.0, $width);\n\tfloat e = 1.0/$size;\n\tvec2 rv = vec2(0.0);\n\tfor (float dx = -pixels; dx <= pixels; dx += 1.0) {\n\t\tfor (float dy = -pixels; dy <= pixels; dy += 1.0) {\n\t\t\tif (abs(dx) > 0.5 || abs(dy) > 0.5) {\n\t\t\t\trv += $in(uv+e*vec2(dx, dy)).xy*cos(vec2(atan(dy, dx))-vec2(0.0, 0.5)*3.14159265359)/length(vec2(dx, dy));\n\t\t\t}\n\t\t}\n\t}\n\treturn $amount*rv/pixels+0.5;\n}", +# "name": "Curvature", +# "outputs": [ +# { +# "f": "0.5*($(name_uv)_emboss.x+$(name_uv)_emboss.y)", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 6, +# "label": "Size", +# "last": 12, +# "name": "size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Amount", +# "max": 10, +# "min": 0, +# "name": "amount", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Width", +# "max": 5, +# "min": 1, +# "name": "width", +# "step": 1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "598_5", +# "node_position": { +# "x": -95.713867, +# "y": 877.621521 +# }, +# "parameters": { +# "amount": 1, +# "size": 11, +# "width": 8 +# }, +# "shader_model": { +# "code": "vec2 $(name_uv)_emboss = $(name)_fct($uv);", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "vec2 $(name)_fct(vec2 uv) {\n\tfloat pixels = max(1.0, $width);\n\tfloat e = 1.0/$size;\n\tvec2 rv = vec2(0.0);\n\tfor (float dx = -pixels; dx <= pixels; dx += 1.0) {\n\t\tfor (float dy = -pixels; dy <= pixels; dy += 1.0) {\n\t\t\tif (abs(dx) > 0.5 || abs(dy) > 0.5) {\n\t\t\t\trv += $in(uv+e*vec2(dx, dy)).xy*cos(vec2(atan(dy, dx))-vec2(0.0, 0.5)*3.14159265359)/length(vec2(dx, dy));\n\t\t\t}\n\t\t}\n\t}\n\treturn $amount*rv/pixels+0.5;\n}", +# "name": "Curvature", +# "outputs": [ +# { +# "f": "0.5*($(name_uv)_emboss.x+$(name_uv)_emboss.y)", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 6, +# "label": "Size", +# "last": 12, +# "name": "size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Amount", +# "max": 10, +# "min": 0, +# "name": "amount", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Width", +# "max": 5, +# "min": 1, +# "name": "width", +# "step": 1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "598_6", +# "node_position": { +# "x": -92.077492, +# "y": 992.848633 +# }, +# "parameters": { +# "amount": 1, +# "size": 11, +# "width": 16 +# }, +# "shader_model": { +# "code": "vec2 $(name_uv)_emboss = $(name)_fct($uv);", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "vec2 $(name)_fct(vec2 uv) {\n\tfloat pixels = max(1.0, $width);\n\tfloat e = 1.0/$size;\n\tvec2 rv = vec2(0.0);\n\tfor (float dx = -pixels; dx <= pixels; dx += 1.0) {\n\t\tfor (float dy = -pixels; dy <= pixels; dy += 1.0) {\n\t\t\tif (abs(dx) > 0.5 || abs(dy) > 0.5) {\n\t\t\t\trv += $in(uv+e*vec2(dx, dy)).xy*cos(vec2(atan(dy, dx))-vec2(0.0, 0.5)*3.14159265359)/length(vec2(dx, dy));\n\t\t\t}\n\t\t}\n\t}\n\treturn $amount*rv/pixels+0.5;\n}", +# "name": "Curvature", +# "outputs": [ +# { +# "f": "0.5*($(name_uv)_emboss.x+$(name_uv)_emboss.y)", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 9, +# "first": 6, +# "label": "Size", +# "last": 12, +# "name": "size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Amount", +# "max": 10, +# "min": 0, +# "name": "amount", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Width", +# "max": 5, +# "min": 1, +# "name": "width", +# "step": 1, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "connections": [ +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "fast_blur_shader", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer_2", +# "to_port": 0 +# }, +# { +# "from": "fast_blur_shader", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# } +# ], +# "label": "Fast Blur", +# "longdesc": "", +# "name": "fast_blur", +# "node_position": { +# "x": 167.483093, +# "y": 509.757843 +# }, +# "nodes": [ +# { +# "name": "fast_blur_shader", +# "node_position": { +# "x": -168, +# "y": 120 +# }, +# "parameters": { +# "quality": 1, +# "sigma": 2 +# }, +# "type": "fast_blur_shader" +# }, +# { +# "name": "buffer_2", +# "node_position": { +# "x": -187, +# "y": 61.5 +# }, +# "parameters": { +# "size": 11 +# }, +# "type": "buffer", +# "version": 1 +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -602, +# "y": 91.75 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "name": "port0", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 88, +# "y": 61.75 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "name": "port0", +# "type": "rgba" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -254.5, +# "y": -122.5 +# }, +# "parameters": { +# "param0": 11, +# "param1": 2, +# "param2": 1 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Resolution", +# "linked_widgets": [ +# { +# "node": "buffer_2", +# "widget": "size" +# } +# ], +# "name": "param0", +# "type": "linked_control" +# }, +# { +# "label": "Sigma", +# "linked_widgets": [ +# { +# "node": "fast_blur_shader", +# "widget": "sigma" +# } +# ], +# "name": "param1", +# "type": "linked_control" +# }, +# { +# "label": "Quality", +# "linked_widgets": [ +# { +# "node": "fast_blur_shader", +# "widget": "quality" +# } +# ], +# "name": "param2", +# "type": "linked_control" +# } +# ] +# } +# ], +# "parameters": { +# "param0": 11, +# "param1": 2, +# "param2": 1 +# }, +# "shortdesc": "", +# "type": "graph" +# }, +# { +# "name": "fast_blur_2", +# "node_position": { +# "x": 167.156082, +# "y": 638.560974 +# }, +# "parameters": { +# "param0": 11, +# "param1": 5, +# "param2": 1 +# }, +# "type": "fast_blur" +# }, +# { +# "name": "fast_blur_3", +# "node_position": { +# "x": 171.701691, +# "y": 756.742798 +# }, +# "parameters": { +# "param0": 11, +# "param1": 8, +# "param2": 1 +# }, +# "type": "fast_blur" +# }, +# { +# "name": "fast_blur_4", +# "node_position": { +# "x": 167.377045, +# "y": 877.651917 +# }, +# "parameters": { +# "param0": 11, +# "param1": 16, +# "param2": 1 +# }, +# "type": "fast_blur" +# }, +# { +# "name": "fast_blur_5", +# "node_position": { +# "x": 170.104279, +# "y": 992.197327 +# }, +# "parameters": { +# "param0": 11, +# "param1": 34, +# "param2": 1 +# }, +# "type": "fast_blur" +# }, +# { +# "name": "buffer_2", +# "node_position": { +# "x": -426.44928, +# "y": 678.75 +# }, +# "parameters": { +# "filter": false, +# "mipmap": false, +# "size": 11 +# }, +# "type": "buffer", +# "version": 2 +# } +# ], +# "parameters": { +# "param0": 11, +# "param2": 1 +# }, +# "shortdesc": "Smooth Curvature", +# "type": "graph" +#} + +#---------------------- +#smooth_curvature2.mmg + +#{ +# "connections": [ +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer", +# "to_port": 0 +# }, +# { +# "from": "buffer", +# "from_port": 0, +# "to": "switch", +# "to_port": 1 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "switch", +# "to_port": 0 +# }, +# { +# "from": "598", +# "from_port": 0, +# "to": "buffer_2", +# "to_port": 0 +# }, +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "switch_2", +# "to_port": 1 +# }, +# { +# "from": "598", +# "from_port": 0, +# "to": "switch_2", +# "to_port": 0 +# }, +# { +# "from": "switch_2", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "switch", +# "from_port": 0, +# "to": "598", +# "to_port": 0 +# } +# ], +# "label": "Smooth Curvature 2", +# "longdesc": "", +# "name": "smooth_curvature2", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "buffer", +# "node_position": { +# "x": 300.603302, +# "y": -549.522034 +# }, +# "parameters": { +# "lod": 0, +# "size": 10 +# }, +# "type": "buffer" +# }, +# { +# "name": "598", +# "node_position": { +# "x": 286.999847, +# "y": -359.903259 +# }, +# "parameters": { +# "quality": 4, +# "radius": 1, +# "strength": 1 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "0.5", +# "function": true, +# "label": "", +# "name": "in", +# "type": "f" +# } +# ], +# "instance": "float $(name)_curve( vec2 p, vec2 o ){\n\tfloat a = $in(p+o);\n\tfloat b = $in(p-o);\n\tfloat c = $in(p+o*vec2(1.0,-1.0));\n\tfloat d = $in(p-o*vec2(1.0,-1.0));\n\treturn -a - b - c - d;\n}\n\nfloat $(name)_curvature_map(vec2 p, float r, float q){\n\tfloat s = r/q;\n\tfloat H = $in(p)*4.0;\n\tfloat v = 0.0;\n\tvec2 o;\n\tfor( o.x = 0.0; o.x < q; o.x++ ){\n\t\tfor( o.y = 0.0; o.y < q; o.y++ ){\n\t\t\tfloat c = $(name)_curve(p, o*s);\n\t\t\tv += (H + c) * ((r-length(o*s)) / r);\n\t\t}\n\t}\n\treturn v/(q*q);\n}\n\nfloat $(name)_curvature(vec2 uv, float quality, float strength, float radius) {\n\tfloat c = $(name)_curvature_map(uv, 0.050 * radius, quality)*strength / radius;\n\treturn 0.5 + c;\n}", +# "name": "Smooth Curvature", +# "outputs": [ +# { +# "f": "$(name)_curvature($uv, $quality, $strength, $radius)", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 4, +# "label": "Quality", +# "longdesc": "How many times the input is sampled to generate the curvature map", +# "max": 16, +# "min": 2, +# "name": "quality", +# "shortdesc": "Quality", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Strength", +# "longdesc": "The intensity of the curvature map", +# "max": 2, +# "min": 0, +# "name": "strength", +# "shortdesc": "Strength", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Radius", +# "longdesc": "The radius of the smoothing of the curvature effect", +# "max": 2, +# "min": 0, +# "name": "radius", +# "shortdesc": "Radius", +# "step": 0.01, +# "type": "float" +# } +# ], +# "shortdesc": "Smooth Curvature" +# }, +# "type": "shader" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": 242.146149, +# "y": -788.088806 +# }, +# "parameters": { +# "param0": 10, +# "param1": 4, +# "param2": 1, +# "param3": 1, +# "param4": 1 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Size", +# "linked_widgets": [ +# { +# "node": "buffer", +# "widget": "size" +# }, +# { +# "node": "buffer_2", +# "widget": "size" +# } +# ], +# "longdesc": "The resolution of the curvature map if buffer is used", +# "name": "param0", +# "shortdesc": "Size", +# "type": "linked_control" +# }, +# { +# "label": "Quality", +# "linked_widgets": [ +# { +# "node": "598", +# "widget": "quality" +# } +# ], +# "longdesc": "How many times the input is sampled to generate the curvature map", +# "name": "param1", +# "shortdesc": "Quality", +# "type": "linked_control" +# }, +# { +# "label": "Strength", +# "linked_widgets": [ +# { +# "node": "598", +# "widget": "strength" +# } +# ], +# "longdesc": "The intensity of the curvature map", +# "name": "param2", +# "shortdesc": "Strength", +# "type": "linked_control" +# }, +# { +# "label": "Radius", +# "linked_widgets": [ +# { +# "node": "598", +# "widget": "radius" +# } +# ], +# "longdesc": "The radius of the smoothing of the curvature effect", +# "name": "param3", +# "shortdesc": "Radius", +# "type": "linked_control" +# }, +# { +# "configurations": { +# "False": [ +# { +# "node": "switch", +# "value": 0, +# "widget": "source" +# }, +# { +# "node": "switch_2", +# "value": 0, +# "widget": "source" +# } +# ], +# "True": [ +# { +# "node": "switch", +# "value": 1, +# "widget": "source" +# }, +# { +# "node": "switch_2", +# "value": 1, +# "widget": "source" +# } +# ] +# }, +# "label": "Buffer", +# "linked_widgets": [ +# { +# "node": "switch", +# "widget": "source" +# }, +# { +# "node": "switch_2", +# "widget": "source" +# } +# ], +# "longdesc": "When set, a buffer is used to sample the input before the normal map filter", +# "name": "param4", +# "shortdesc": "Buffer", +# "type": "config_control" +# } +# ] +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -135.453888, +# "y": -518.927429 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The input height map", +# "name": "Heightmap", +# "shortdesc": "Input", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 586.203247, +# "y": -534.919678 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "Shows the generated curvature map", +# "name": "Curvature", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "switch", +# "node_position": { +# "x": 310.739746, +# "y": -451.658417 +# }, +# "parameters": { +# "choices": 2, +# "outputs": 1, +# "source": 1 +# }, +# "type": "switch" +# }, +# { +# "name": "buffer_2", +# "node_position": { +# "x": 293.839874, +# "y": -225.201691 +# }, +# "parameters": { +# "lod": 0, +# "size": 10 +# }, +# "type": "buffer" +# }, +# { +# "name": "switch_2", +# "node_position": { +# "x": 312.239838, +# "y": -129.465912 +# }, +# "parameters": { +# "choices": 2, +# "outputs": 1, +# "source": 1 +# }, +# "type": "switch" +# }, +# { +# "name": "blend", +# "node_position": { +# "x": 802.064697, +# "y": -277.727295 +# }, +# "parameters": { +# "amount": 0.5, +# "blend_type": 0 +# }, +# "shader_model": { +# "code": "vec4 $(name_uv)_s1 = $s1($uv);\nvec4 $(name_uv)_s2 = $s2($uv);\nfloat $(name_uv)_a = $amount*$a($uv);\n", +# "global": "vec3 blend_normal(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*c1 + (1.0-opacity)*c2;\n}\n\nvec3 blend_dissolve(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\tif (rand(uv) < opacity) {\n\t\treturn c1;\n\t} else {\n\t\treturn c2;\n\t}\n}\n\nvec3 blend_multiply(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*c1*c2 + (1.0-opacity)*c2;\n}\n\nvec3 blend_screen(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*(1.0-(1.0-c1)*(1.0-c2)) + (1.0-opacity)*c2;\n}\n\nfloat blend_overlay_f(float c1, float c2) {\n\treturn (c1 < 0.5) ? (2.0*c1*c2) : (1.0-2.0*(1.0-c1)*(1.0-c2));\n}\n\nvec3 blend_overlay(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_overlay_f(c1.x, c2.x), blend_overlay_f(c1.y, c2.y), blend_overlay_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nvec3 blend_hard_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*0.5*(c1*c2+blend_overlay(uv, c1, c2, 1.0)) + (1.0-opacity)*c2;\n}\n\nfloat blend_soft_light_f(float c1, float c2) {\n\treturn (c2 < 0.5) ? (2.0*c1*c2+c1*c1*(1.0-2.0*c2)) : 2.0*c1*(1.0-c2)+sqrt(c1)*(2.0*c2-1.0);\n}\n\nvec3 blend_soft_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_soft_light_f(c1.x, c2.x), blend_soft_light_f(c1.y, c2.y), blend_soft_light_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nfloat blend_burn_f(float c1, float c2) {\n\treturn (c1==0.0)?c1:max((1.0-((1.0-c2)/c1)),0.0);\n}\n\nvec3 blend_burn(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_burn_f(c1.x, c2.x), blend_burn_f(c1.y, c2.y), blend_burn_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nfloat blend_dodge_f(float c1, float c2) {\n\treturn (c1==1.0)?c1:min(c2/(1.0-c1),1.0);\n}\n\nvec3 blend_dodge(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*vec3(blend_dodge_f(c1.x, c2.x), blend_dodge_f(c1.y, c2.y), blend_dodge_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n}\n\nvec3 blend_lighten(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*max(c1, c2) + (1.0-opacity)*c2;\n}\n\nvec3 blend_darken(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*min(c1, c2) + (1.0-opacity)*c2;\n}\n\nvec3 blend_difference(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\treturn opacity*clamp(c2-c1, vec3(0.0), vec3(1.0)) + (1.0-opacity)*c2;\n}\n", +# "inputs": [ +# { +# "default": "vec4(round($uv.x) , 1.0, 1.0, 1.0)", +# "label": "Source1", +# "longdesc": "The foreground input", +# "name": "s1", +# "shortdesc": "Foreground", +# "type": "rgba" +# }, +# { +# "default": "vec4(1.0, $uv.y, 1.0, 1.0)", +# "label": "Source2", +# "longdesc": "The background input", +# "name": "s2", +# "shortdesc": "Background", +# "type": "rgba" +# }, +# { +# "default": "1.0", +# "label": "Opacity", +# "longdesc": "The optional opacity mask", +# "name": "a", +# "shortdesc": "Mask", +# "type": "f" +# } +# ], +# "instance": "", +# "longdesc": "Blends its input, using an optional mask", +# "name": "Blend", +# "outputs": [ +# { +# "longdesc": "Shows the result of the blend operation", +# "rgba": "vec4(blend_$blend_type($uv, $(name_uv)_s1.rgb, $(name_uv)_s2.rgb, $(name_uv)_a*$(name_uv)_s1.a), min(1.0, $(name_uv)_s2.a+$(name_uv)_a*$(name_uv)_s1.a))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "longdesc": "The algorithm used to blend the inputs", +# "name": "blend_type", +# "shortdesc": "Blend mode", +# "type": "enum", +# "values": [ +# { +# "name": "Normal", +# "value": "normal" +# }, +# { +# "name": "Dissolve", +# "value": "dissolve" +# }, +# { +# "name": "Multiply", +# "value": "multiply" +# }, +# { +# "name": "Screen", +# "value": "screen" +# }, +# { +# "name": "Overlay", +# "value": "overlay" +# }, +# { +# "name": "Hard Light", +# "value": "hard_light" +# }, +# { +# "name": "Soft Light", +# "value": "soft_light" +# }, +# { +# "name": "Burn", +# "value": "burn" +# }, +# { +# "name": "Dodge", +# "value": "dodge" +# }, +# { +# "name": "Lighten", +# "value": "lighten" +# }, +# { +# "name": "Darken", +# "value": "darken" +# }, +# { +# "name": "Difference", +# "value": "difference" +# } +# ] +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "3:", +# "longdesc": "The opacity of the blend operation", +# "max": 1, +# "min": 0, +# "name": "amount", +# "shortdesc": "Opacity", +# "step": 0.01, +# "type": "float" +# } +# ], +# "shortdesc": "Blend" +# }, +# "type": "shader" +# } +# ], +# "parameters": { +# "param0": 10, +# "param1": 4, +# "param2": 1, +# "param3": 1, +# "param4": 1 +# }, +# "shortdesc": "Smooth Curvature", +# "type": "graph" +#} + +#---------------------- +#supersample.mmg +#A filter that samples sub-pixel details to make them visible + +# "inputs": [ +# { +# "default": "vec4(1.0, 1.0, 1.0, 1.0)", +# "function": true, +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "instance": "vec4 supersample_$(name)(vec2 uv, float size, int count, float width) {\n\tvec4 rv = vec4(0.0);\n\tvec2 step_size = vec2(width)/size/float(count);\n\tuv -= vec2(0.5)/size;\n\tfor (int x = 0; x < count; ++x) {\n\t\tfor (int y = 0; y < count; ++y) {\n\t\t\trv += $in(uv+(vec2(float(x), float(y))+vec2(0.5))*step_size);\n\t\t}\n\t}\n\treturn rv/float(count*count);\n}", +# "outputs": [ +# { +# "longdesc": "Shows the supersampled image. Due to the performance cost of this node, it is recommended to connect a buffer directly to this output.", +# "rgba": "supersample_$(name)($uv, $size, int($count), $width)", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 10, +# "first": 4, +# "label": "Size", +# "last": 12, +# "longdesc": "The resolution of the output", +# "name": "size", +# "shortdesc": "Size", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 2, +# "label": "Count", +# "longdesc": "The number of samples on each axis. High values will badly impact performances.", +# "max": 5, +# "min": 2, +# "name": "count", +# "shortdesc": "Count", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Width", +# "longdesc": "The width of the sampled area. Setting this value higher than 1 will sample neighbouring pixels and antialias the result.", +# "max": 2, +# "min": 1, +# "name": "width", +# "shortdesc": "Width", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#swap_channels.mmg +#Swaps the channels of its RGBA input + +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "label": "", +# "longdesc": "The input RGBA image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The output RGBA image", +# "rgba": "vec4($out_r,$out_g,$out_b,$out_a)", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 2, +# "label": "R", +# "longdesc": "The input channel to be assigned to the Red channel", +# "name": "out_r", +# "shortdesc": "Red", +# "type": "enum", +# "values": [ +# { +# "name": "0", +# "value": "0.0" +# }, +# { +# "name": "1", +# "value": "1.0" +# }, +# { +# "name": "R", +# "value": "$in($uv).r" +# }, +# { +# "name": "-R", +# "value": "1.0-$in($uv).r" +# }, +# { +# "name": "G", +# "value": "$in($uv).g" +# }, +# { +# "name": "-G", +# "value": "1.0-$in($uv).g" +# }, +# { +# "name": "B", +# "value": "$in($uv).b" +# }, +# { +# "name": "-B", +# "value": "1.0-$in($uv).b" +# }, +# { +# "name": "A", +# "value": "$in($uv).a" +# }, +# { +# "name": "-A", +# "value": "1.0-$in($uv).a" +# } +# ] +# }, +# { +# "default": 4, +# "label": "G", +# "longdesc": "The input channel to be assigned to the Green channel", +# "name": "out_g", +# "shortdesc": "Green", +# "type": "enum", +# "values": [ +# { +# "name": "0", +# "value": "0.0" +# }, +# { +# "name": "1", +# "value": "1.0" +# }, +# { +# "name": "R", +# "value": "$in($uv).r" +# }, +# { +# "name": "-R", +# "value": "1.0-$in($uv).r" +# }, +# { +# "name": "G", +# "value": "$in($uv).g" +# }, +# { +# "name": "-G", +# "value": "1.0-$in($uv).g" +# }, +# { +# "name": "B", +# "value": "$in($uv).b" +# }, +# { +# "name": "-B", +# "value": "1.0-$in($uv).b" +# }, +# { +# "name": "A", +# "value": "$in($uv).a" +# }, +# { +# "name": "-A", +# "value": "1.0-$in($uv).a" +# } +# ] +# }, +# { +# "default": 6, +# "label": "B", +# "longdesc": "The input channel to be assigned to the Blue channel", +# "name": "out_b", +# "shortdesc": "Blue", +# "type": "enum", +# "values": [ +# { +# "name": "0", +# "value": "0.0" +# }, +# { +# "name": "1", +# "value": "1.0" +# }, +# { +# "name": "R", +# "value": "$in($uv).r" +# }, +# { +# "name": "-R", +# "value": "1.0-$in($uv).r" +# }, +# { +# "name": "G", +# "value": "$in($uv).g" +# }, +# { +# "name": "-G", +# "value": "1.0-$in($uv).g" +# }, +# { +# "name": "B", +# "value": "$in($uv).b" +# }, +# { +# "name": "-B", +# "value": "1.0-$in($uv).b" +# }, +# { +# "name": "A", +# "value": "$in($uv).a" +# }, +# { +# "name": "-A", +# "value": "1.0-$in($uv).a" +# } +# ] +# }, +# { +# "default": 8, +# "label": "A", +# "longdesc": "The input channel to be assigned to the Alpha channel", +# "name": "out_a", +# "shortdesc": "Alpha", +# "type": "enum", +# "values": [ +# { +# "name": "0", +# "value": "0.0" +# }, +# { +# "name": "1", +# "value": "1.0" +# }, +# { +# "name": "R", +# "value": "$in($uv).r" +# }, +# { +# "name": "-R", +# "value": "1.0-$in($uv).r" +# }, +# { +# "name": "G", +# "value": "$in($uv).g" +# }, +# { +# "name": "-G", +# "value": "1.0-$in($uv).g" +# }, +# { +# "name": "B", +# "value": "$in($uv).b" +# }, +# { +# "name": "-B", +# "value": "1.0-$in($uv).b" +# }, +# { +# "name": "A", +# "value": "$in($uv).a" +# }, +# { +# "name": "-A", +# "value": "1.0-$in($uv).a" +# } +# ] +# } +# ], + +#---------------------- +#math_v3.mmg +#Performs a math operation using its inputs or parameter values + +# "code": "vec3 $(name_uv)_clamp_false = $op;\nvec3 $(name_uv)_clamp_true = clamp($(name_uv)_clamp_false, vec3(0.0), vec3(1.0));\n", +# "inputs": [ +# { +# "default": "vec3($d_in1_x, $d_in1_y, $d_in1_z)", +# "label": "2:A", +# "longdesc": "The A operand", +# "name": "in1", +# "shortdesc": "A", +# "type": "rgb" +# }, +# { +# "default": "vec3($d_in2_x, $d_in2_y, $d_in2_z)", +# "label": "B", +# "longdesc": "The B operand", +# "name": "in2", +# "shortdesc": "B", +# "type": "rgb" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows a greyscale image of the result", +# "rgb": "$(name_uv)_clamp_$clamp", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": 19, +# "label": "", +# "longdesc": "The operation to be performed", +# "name": "op", +# "shortdesc": "Operation", +# "type": "enum", +# "values": [ +# { +# "name": "A+B", +# "value": "$in1($uv)+$in2($uv)" +# }, +# { +# "name": "A-B", +# "value": "$in1($uv)-$in2($uv)" +# }, +# { +# "name": "A*B", +# "value": "$in1($uv)*$in2($uv)" +# }, +# { +# "name": "A/B", +# "value": "$in1($uv)/$in2($uv)" +# }, +# { +# "name": "log(A)", +# "value": "log($in1($uv))" +# }, +# { +# "name": "log2(A)", +# "value": "log2($in1($uv))" +# }, +# { +# "name": "pow(A, B)", +# "value": "pow($in1($uv),$in2($uv))" +# }, +# { +# "name": "abs(A)", +# "value": "abs($in1($uv))" +# }, +# { +# "name": "round(A)", +# "value": "round($in1($uv))" +# }, +# { +# "name": "floor(A)", +# "value": "floor($in1($uv))" +# }, +# { +# "name": "ceil(A)", +# "value": "ceil($in1($uv))" +# }, +# { +# "name": "trunc(A)", +# "value": "trunc($in1($uv))" +# }, +# { +# "name": "fract(A)", +# "value": "fract($in1($uv))" +# }, +# { +# "name": "min(A, B)", +# "value": "min($in1($uv),$in2($uv))" +# }, +# { +# "name": "max(A, B)", +# "value": "max($in1($uv),$in2($uv))" +# }, +# { +# "name": "A Vector3: + var K : Color = Color(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + + var p : Color + + if c.y < c.z: + p = Color(c.z, c.y, K.a, K.b) + else: + p = Color(c.y, c.z, K.r, K.g); + + var q : Color + + if c.x < p.r: + q = Color(p.r, p.g, p.a, c.x) + else: + q = Color(c.x, p.g, p.b, p.r); + + var d : float = q.r - min(q.a, q.g); + var e : float = 1.0e-10; + + return Vector3(abs(q.b + (q.a - q.g) / (6.0 * d + e)), d / (q.r + e), q.r); + +#vec3 hsv_to_rgb(vec3 c) { +# vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); +# vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); +# return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +#} + +static func hsv_to_rgb(c : Vector3) -> Vector3: + var K : Color = Color(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + + var p : Vector3 = Commons.absv3(Commons.fractv3(Vector3(c.x, c.x, c.x) + Vector3(K.r, K.g, K.b)) * 6.0 - Vector3(K.a, K.a, K.a)); + + return c.z * lerp(Vector3(K.r, K.r, K.r), Commons.clampv3(p - Vector3(K.r, K.r, K.r), Vector3(), Vector3(1, 1, 1)), c.y); + +#adjust_hsv.mmg + +#vec4 $(name_uv)_rbga = $in($(uv)); +#vec3 $(name_uv)_hsv = rgb_to_hsv($(name_uv)_rbga.rgb); +#$(name_uv)_hsv.x += $(hue); +#$(name_uv)_hsv.y = clamp($(name_uv)_hsv.y*$(saturation), 0.0, 1.0); +#$(name_uv)_hsv.z = clamp($(name_uv)_hsv.z*$(value), 0.0, 1.0); + +#hue, min: -0.5, max: 0.5, step: 0, default: 0 +#saturation, min: 0, max: 2, step: 0, default: 1 +#value, min: 0, max: 2, step: 0, default: 1 + +#output: vec4(hsv_to_rgb($(name_uv)_hsv), $(name_uv)_rbga.a) + +static func adjust_hsv(color : Color, hue : float, saturation : float, value : float) -> Color: + var hsv : Vector3 = rgb_to_hsv(Vector3(color.r, color.g, color.b)); + + hsv.x += hue + hsv.y = clamp(hsv.y * saturation, 0.0, 1.0) + hsv.z = clamp(hsv.z * value, 0.0, 1.0) + + var h : Vector3 = hsv_to_rgb(hsv) + + return Color(h.x, h.y, h.z, color.a); + +#brightness, min: -1, max: 1, step: 0.01, default: 0 +#contrast, min: -1, max: 1, step: 0.01, default: 1 + +#input: default: vec4(0.5 ,0.5, 0.5, 1.0) -> img + +#output: vec4(clamp($in($uv).rgb*$contrast+vec3($brightness)+0.5-$contrast*0.5, vec3(0.0), vec3(1.0)), $in($uv).a) + +static func brightness_contrast(color : Color, brightness : float, contrast : float) -> Color: + #output: vec4(clamp( $in($uv).rgb*$contrast + vec3($brightness) + 0.5 - $contrast*0.5, vec3(0.0), vec3(1.0)), $in($uv).a) + + var cvv : Vector3 = Vector3(color.r, color.g, color.b) * contrast + + var cv : Vector3 = cvv + Vector3(brightness, brightness, brightness) + Vector3(0.5, 0.5, 0.5) - Vector3(contrast, contrast, contrast) * 0.5 + + var v : Vector3 = Commons.clampv3(cv, Vector3(), Vector3(1, 1, 1)) + + return Color(v.x, v.y, v.z, color.a); + +#greyscale + +#input: default: vec3(0.0). (Image) +#output: gs_$mode($in($uv)) +#mode: enum: Lightness, Average, Luminosity, Min, Max. default: 4 + +#float gs_min(vec3 c) { +# return min(c.r, min(c.g, c.b)); +#} + +static func grayscale_min(c : Vector3) -> float: + return min(c.x, min(c.y, c.z)); + +#float gs_max(vec3 c) { +# return max(c.r, max(c.g, c.b)); +#} + +static func grayscale_max(c : Vector3) -> float: + return max(c.x, max(c.y, c.z)); + +#float gs_lightness(vec3 c) { +# return 0.5*(max(c.r, max(c.g, c.b)) + min(c.r, min(c.g, c.b))); +#} + +static func grayscale_lightness(c : Vector3) -> float: + return 0.5*(max(c.x, max(c.y, c.z)) + min(c.x, min(c.y, c.z))); + +#float gs_average(vec3 c) { +# return 0.333333333333*(c.r + c.g + c.b); +#} + +static func grayscale_average(c : Vector3) -> float: + return 0.333333333333*(c.x + c.y + c.z); + +#float gs_luminosity(vec3 c) { +# return 0.21 * c.r + 0.72 * c.g + 0.07 * c.b; +#} + +static func grayscale_luminosity(c : Vector3) -> float: + return 0.21 * c.x + 0.72 * c.y + 0.07 * c.z; + +static func invert(color : Color) -> Color: + return Color(1.0 - color.r, 1.0 - color.g, 1.0 - color.b, color.a); + +#vec3 blend_normal(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*c1 + (1.0-opacity)*c2;\n +#} + +static func blend_normal(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * c1 + (1.0 - opacity) * c2 + +#vec3 blend_dissolve(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# if (rand(uv) < opacity) {\n\t\t +# return c1;\n\t +# } else {\n\t\t +# return c2;\n\t +# }\n +#} + +static func blend_dissolve(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + if (Commons.rand2(uv) < Vector2(opacity, opacity)): + return c1 + else: + return c2 + +#vec3 blend_multiply(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*c1*c2 + (1.0-opacity)*c2;\n +#} + +static func blend_multiply(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * c1 * c2 + (1.0 - opacity) * c2 + +#vec3 blend_screen(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*(1.0-(1.0-c1)*(1.0-c2)) + (1.0-opacity)*c2;\n +#} + +static func blend_screen(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * (Vector3(1, 1, 1) - (Vector3(1, 1, 1) - c1) * (Vector3(1, 1, 1) - c2)) + (1.0 - opacity) * c2 + +#float blend_overlay_f(float c1, float c2) {\n\t +# return (c1 < 0.5) ? (2.0*c1*c2) : (1.0-2.0*(1.0-c1)*(1.0-c2));\n +#} + +static func blend_overlay_f(c1 : float, c2 : float) -> float: + if (c1 < 0.5): + return (2.0 * c1 * c2) + else: + return (1.0 - 2.0 * (1.0 - c1) * (1.0 - c2)) + +#vec3 blend_overlay(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*vec3(blend_overlay_f(c1.x, c2.x), blend_overlay_f(c1.y, c2.y), blend_overlay_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n +#} + +static func blend_overlay(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * Vector3(blend_overlay_f(c1.x, c2.x), blend_overlay_f(c1.y, c2.y), blend_overlay_f(c1.z, c2.z)) + (1.0 - opacity) * c2 + +#vec3 blend_hard_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*0.5*(c1*c2+blend_overlay(uv, c1, c2, 1.0)) + (1.0-opacity)*c2;\n +#} + +static func blend_hard_light(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * 0.5 * (c1 * c2 + blend_overlay(uv, c1, c2, 1.0)) + (1.0 - opacity) * c2 + +#float blend_soft_light_f(float c1, float c2) {\n\t +# return (c2 < 0.5) ? (2.0*c1*c2+c1*c1*(1.0-2.0*c2)) : 2.0*c1*(1.0-c2)+sqrt(c1)*(2.0*c2-1.0);\n +#} + +static func blend_soft_light_f(c1 : float, c2 : float) -> float: + if (c2 < 0.5): + return (2.0 * c1 * c2 + c1 * c1 * (1.0 - 2.0 * c2)) + else: + return 2.0 * c1 * (1.0 - c2) + sqrt(c1) * (2.0 * c2 - 1.0) + +#vec3 blend_soft_light(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*vec3(blend_soft_light_f(c1.x, c2.x), blend_soft_light_f(c1.y, c2.y), blend_soft_light_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n +#} + +static func blend_soft_light(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * Vector3(blend_soft_light_f(c1.x, c2.x), blend_soft_light_f(c1.y, c2.y), blend_soft_light_f(c1.z, c2.z)) + (1.0 - opacity) * c2 + +#float blend_burn_f(float c1, float c2) {\n\t +# return (c1==0.0)?c1:max((1.0-((1.0-c2)/c1)),0.0);\n +#} + +static func blend_burn_f(c1 : float, c2 : float) -> float: + if (c1 == 0.0): + return c1 + else: + return max((1.0 - ((1.0 - c2) / c1)), 0.0) + +#vec3 blend_burn(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*vec3(blend_burn_f(c1.x, c2.x), blend_burn_f(c1.y, c2.y), blend_burn_f(c1.z, c2.z)) + (1.0-opacity)*c2; +#} + +static func blend_burn(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * Vector3(blend_burn_f(c1.x, c2.x), blend_burn_f(c1.y, c2.y), blend_burn_f(c1.z, c2.z)) + (1.0 - opacity) * c2 + +#float blend_dodge_f(float c1, float c2) {\n\t +# return (c1==1.0)?c1:min(c2/(1.0-c1),1.0);\n +#} + +static func blend_dodge_f(c1 : float, c2 : float) -> float: + if (c1==1.0): + return c1 + else: + return min(c2 / (1.0 - c1), 1.0) + +#vec3 blend_dodge(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*vec3(blend_dodge_f(c1.x, c2.x), blend_dodge_f(c1.y, c2.y), blend_dodge_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n +#} + +static func blend_dodge(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * Vector3(blend_dodge_f(c1.x, c2.x), blend_dodge_f(c1.y, c2.y), blend_dodge_f(c1.z, c2.z)) + (1.0 - opacity) * c2 + +#vec3 blend_lighten(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*max(c1, c2) + (1.0-opacity)*c2;\n +#} + +static func blend_lighten(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * Commons.maxv3(c1, c2) + (1.0 - opacity) * c2 + +#vec3 blend_darken(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*min(c1, c2) + (1.0-opacity)*c2;\n +#} + +static func blend_darken(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * Commons.minv3(c1, c2) + (1.0 - opacity) * c2 + +#vec3 blend_difference(vec2 uv, vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*clamp(c2-c1, vec3(0.0), vec3(1.0)) + (1.0-opacity)*c2;\n +#} + +static func blend_difference(uv : Vector2, c1 : Vector3, c2 : Vector3, opacity : float) -> Vector3: + return opacity * Commons.clampv3(c2 - c1, Vector3(), Vector3(1, 1, 1)) + (1.0 - opacity) * c2 + +#vec4 adjust_levels(vec4 input, vec4 in_min, vec4 in_mid, vec4 in_max, vec4 out_min, vec4 out_max) {\n\t +# input = clamp((input-in_min)/(in_max-in_min), 0.0, 1.0);\n\t +# in_mid = (in_mid-in_min)/(in_max-in_min);\n\t +# vec4 dark = step(in_mid, input);\n\t +# +# input = 0.5*mix(input/(in_mid), 1.0+(input-in_mid)/(1.0-in_mid), dark);\n\t +# return out_min+input*(out_max-out_min);\n +#} + diff --git a/game/addons/mat_maker_gd/nodes/common/gradients.gd b/game/addons/mat_maker_gd/nodes/common/gradients.gd new file mode 100644 index 0000000..9c40cc6 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/gradients.gd @@ -0,0 +1,225 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#note: data : PoolRealArray -> pos, r, g, b, a, pos, r, g, b, a .... + +#gradient.mmg + +#float $(name_uv)_r = 0.5+(cos($rotate*0.01745329251)*($uv.x-0.5)+sin($rotate*0.01745329251)*($uv.y-0.5))/(cos(abs(mod($rotate, 90.0)-45.0)*0.01745329251)*1.41421356237);" + +#output: $gradient(fract($(name_uv)_r*$repeat)) + +#repeat: default: 1, min: 1, max : 32, step: 1 +#rotate: default: 0, min: -180, max: 180, step: 0.1 + +#default: "interpolation": 1, +# "points": [{"a": 1,"b": 0,"g": 0,"pos": 0,"r": 0},{"a": 1,"b": 1,"g": 1,"pos": 1,"r": 1} ], + +#radial_gradient.mmg + +#output: $gradient(fract($repeat*1.41421356237*length(fract($uv)-vec2(0.5, 0.5)))) + +#repeat: default: 1, min: 1, max : 32, step: 1 + +#circular_gradient.mmg + +#output: gradient(fract($repeat*0.15915494309*atan($uv.y-0.5, $uv.x-0.5))) + +#repeat: default: 1, min: 1, max : 32, step: 1 + +#gradient.gd + +static func radial_gradient_type_1(uv : Vector2, repeat : float, data : PoolRealArray) -> Color: + return gradient_type_1(Commons.fractf(repeat * 1.41421356237* (Commons.fractv2(uv) - Vector2(0.5, 0.5)).length()), data) + +static func radial_gradient_type_2(uv : Vector2, repeat : float, data : PoolRealArray) -> Color: + return gradient_type_2(Commons.fractf(repeat * 1.41421356237* (Commons.fractv2(uv) - Vector2(0.5, 0.5)).length()), data) + +static func radial_gradient_type_3(uv : Vector2, repeat : float, data : PoolRealArray) -> Color: + return gradient_type_3(Commons.fractf(repeat * 1.41421356237* (Commons.fractv2(uv) - Vector2(0.5, 0.5)).length()), data) + +static func radial_gradient_type_4(uv : Vector2, repeat : float, data : PoolRealArray) -> Color: + return gradient_type_4(Commons.fractf(repeat * 1.41421356237* (Commons.fractv2(uv) - Vector2(0.5, 0.5)).length()), data) + + + +static func normal_gradient_type_1(uv : Vector2, repeat : float, rotate : float, data : PoolRealArray) -> Color: + var rr : float = 0.5+(cos(rotate*0.01745329251)*(uv.x-0.5)+sin(rotate*0.01745329251)*(uv.y-0.5))/(cos(abs(Commons.modf(rotate, 90.0)-45.0)*0.01745329251)*1.41421356237); + return gradient_type_1(Commons.fractf(rr * repeat), data) + +static func normal_gradient_type_2(uv : Vector2, repeat : float, rotate : float, data : PoolRealArray) -> Color: + var rr : float = 0.5+(cos(rotate*0.01745329251)*(uv.x-0.5)+sin(rotate*0.01745329251)*(uv.y-0.5))/(cos(abs(Commons.modf(rotate, 90.0)-45.0)*0.01745329251)*1.41421356237); + return gradient_type_2(Commons.fractf(rr * repeat), data) + +static func normal_gradient_type_3(uv : Vector2, repeat : float, rotate : float, data : PoolRealArray) -> Color: + var rr : float = 0.5+(cos(rotate*0.01745329251)*(uv.x-0.5)+sin(rotate*0.01745329251)*(uv.y-0.5))/(cos(abs(Commons.modf(rotate, 90.0)-45.0)*0.01745329251)*1.41421356237); + return gradient_type_3(Commons.fractf(rr * repeat), data) + +static func normal_gradient_type_4(uv : Vector2, repeat : float, rotate : float, data : PoolRealArray) -> Color: + var rr : float = 0.5+(cos(rotate*0.01745329251)*(uv.x-0.5)+sin(rotate*0.01745329251)*(uv.y-0.5))/(cos(abs(Commons.modf(rotate, 90.0)-45.0)*0.01745329251)*1.41421356237); + return gradient_type_4(Commons.fractf(rr * repeat), data) + + + +static func circular_gradient_type_1(uv : Vector2, repeat : float, data : PoolRealArray) -> Color: + return gradient_type_1(Commons.fractf(repeat * 0.15915494309 * atan2((uv.y - 0.5), uv.x - 0.5)), data) + +static func circular_gradient_type_2(uv : Vector2, repeat : float, data : PoolRealArray) -> Color: + return gradient_type_2(Commons.fractf(repeat * 0.15915494309 * atan2((uv.y - 0.5), uv.x - 0.5)), data) + +static func circular_gradient_type_3(uv : Vector2, repeat : float, data : PoolRealArray) -> Color: + return gradient_type_3(Commons.fractf(repeat * 0.15915494309 * atan2((uv.y - 0.5), uv.x - 0.5)), data) + +static func circular_gradient_type_4(uv : Vector2, repeat : float, data : PoolRealArray) -> Color: + return gradient_type_4(Commons.fractf(repeat * 0.15915494309 * atan2((uv.y - 0.5), uv.x - 0.5)), data) + + +static func gradient_type_1(x : float, data : PoolRealArray) -> Color: + if data.size() % 5 != 0 || data.size() == 0: + return Color() + + for i in range(0, data.size() - 5, 5): + if x < 0.5 * (data[i] + data[i + 5]): + return Color(data[i + 1], data[i + 2], data[i + 3], data[i + 4]) + + var ds = data.size() - 5 + return Color(data[ds + 1], data[ds + 2], data[ds + 3], data[ds + 4]) + +static func gradient_type_2(x : float, data : PoolRealArray) -> Color: + if data.size() % 5 != 0 || data.size() == 0: + return Color() + + for i in range(0, data.size(), 5): + if x < data[i]: + if i == 0: + return Color(data[i + 1], data[i + 2], data[i + 3], data[i + 4]) + + var cprev : Color = Color(data[i - 4], data[i - 3], data[i - 2], data[i - 1]) + var ccurr : Color = Color(data[i + 1], data[i + 2], data[i + 3], data[i + 4]) + return lerp(cprev, ccurr, (x - data[i - 5]) / (data[i] - data[i - 5])); + + var ds = data.size() - 5 + return Color(data[ds + 1], data[ds + 2], data[ds + 3], data[ds + 4]) + +static func gradient_type_3(x : float, data : PoolRealArray) -> Color: + if data.size() % 5 != 0 || data.size() == 0: + return Color() + + for i in range(0, data.size(), 5): + if x < data[i]: + if i == 0: + return Color(data[i + 1], data[i + 2], data[i + 3], data[i + 4]) + + var cprev : Color = Color(data[i - 4], data[i - 3], data[i - 2], data[i - 1]) + var ccurr : Color = Color(data[i + 1], data[i + 2], data[i + 3], data[i + 4]) + return lerp(cprev, ccurr, 0.5 - 0.5 * cos(3.14159265359 * ((x - data[i - 5]) / (data[i] - data[i - 5])))) + + var ds = data.size() - 5 + return Color(data[ds + 1], data[ds + 2], data[ds + 3], data[ds + 4]) + +static func get_data_color(index : int, data : PoolRealArray) -> Color: + var i : int = index * 5 + + return Color(data[i + 1], data[i + 2],data[i + 3], data[i + 4]) + +static func get_data_pos(index : int, data : PoolRealArray) -> float: + return data[index * 5] + +static func gradient_type_4(x : float, data : PoolRealArray) -> Color: + if data.size() % 5 != 0 || data.size() == 0: + return Color() + + var ds : int = data.size() / 5 + var s : int = ds - 1 + + for i in range(0, s): + if x < get_data_pos(i, data): + if i == 0: + return get_data_color(i, data) + +# var dx : String = "(x-%s)/(%s-%s)" % [ pv(name, i), pv(name, i+1), pv(name, i) ] + var dx : float = (x - get_data_pos(i, data))/(get_data_pos(i + 1, data) - get_data_pos(i, data)) +# var b : String = "mix(%s, %s, %s)" % [ pc(name, i), pc(name, i+1), dx ] + var b : Color = lerp(get_data_color(i - 1, data), get_data_color(i - 1, data), dx) + + if i == 1: +# var c : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i+1), pc(name, i+2), pv(name, i+1), pv(name, i+2), pv(name, i+1) ] + var c : Color = lerp(get_data_color(i + 1, data), get_data_color(i + 2, data), (x - get_data_pos(i + 1, data))/(get_data_pos(i + 2, data) - get_data_pos(i + 1, data))) +# shader += " return mix("+c+", "+b+", 1.0-0.5*"+dx+");\n" + return lerp(c, b, 1.0 - 0.5 * dx) + +# var a : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i-1), pc(name, i), pv(name, i-1), pv(name, i), pv(name, i-1) ] + var a : Color = lerp(get_data_color(i - 1, data), get_data_color(i, data), (x - get_data_pos(i - 1, data)) / (get_data_pos(i, data) - get_data_pos(i - 1, data))) + +# if i < s-1: + if i < s - 1: +# var c : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i+1), pc(name, i+2), pv(name, i+1), pv(name, i+2), pv(name, i+1) ] + var c : Color = lerp(get_data_color(i + 1, data), get_data_color(i + 2, data), (x - get_data_pos(i + 1, data)) / (get_data_pos(i + 2, data) - get_data_pos(i + 1, data))) +# var ac : String = "mix("+a+", "+c+", 0.5-0.5*cos(3.14159265359*"+dx+"))" + var ac : Color = lerp(a, c, 0.5-0.5*cos(3.14159265359 * dx)) +# shader += " return 0.5*("+b+" + "+ac+");\n" + var dt : Color = b + ac + + dt.r *= 0.5 + dt.g *= 0.5 + dt.b *= 0.5 + dt.a = clamp(0, 1, dt.a) + + return dt +# else + else: +# shader += " return mix("+a+", "+b+", 0.5+0.5*"+dx+");\n" + return lerp(a, b, 0.5 + 0.5 * dx) + + return get_data_color(ds - 1, data) + +#todo make it selectable +static func gradient_type_5(x : float, data : PoolRealArray) -> Color: + if data.size() % 5 != 0 || data.size() == 0: + return Color() + + var ds : int = data.size() / 5 + var s : int = ds - 1 + + for i in range(0, s): + if x < get_data_pos(i, data): + if i == 0: + return get_data_color(i, data) + +# var dx : String = "(x-%s)/(%s-%s)" % [ pv(name, i), pv(name, i+1), pv(name, i) ] + var dx : float = (x - get_data_pos(i, data))/(get_data_pos(i + 1, data) - get_data_pos(i, data)) +# var b : String = "mix(%s, %s, %s)" % [ pc(name, i), pc(name, i+1), dx ] + var b : Color = lerp(get_data_color(i - 1, data), get_data_color(i - 1, data), dx) + + if i == 1: +# var c : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i+1), pc(name, i+2), pv(name, i+1), pv(name, i+2), pv(name, i+1) ] + var c : Color = lerp(get_data_color(i + 1, data), get_data_color(i + 2, data), (x - get_data_pos(i + 1, data))/(get_data_pos(i + 2, data) - get_data_pos(i + 1, data))) +# shader += " return mix("+c+", "+b+", 1.0-0.5*"+dx+");\n" + return lerp(c, b, 1.0 - 0.5 * dx) + +# var a : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i-1), pc(name, i), pv(name, i-1), pv(name, i), pv(name, i-1) ] + var a : Color = lerp(get_data_color(i - 1, data), get_data_color(i, data), (x - get_data_pos(i - 1, data)) / (get_data_pos(i, data) - get_data_pos(i - 1, data))) + +# if i < s-1: + if i < s - 1: +# var c : String = "mix(%s, %s, (x-%s)/(%s-%s))" % [ pc(name, i+1), pc(name, i+2), pv(name, i+1), pv(name, i+2), pv(name, i+1) ] + var c : Color = lerp(get_data_color(i+1, data), get_data_color(i+2, data), (x - get_data_pos(i + 1, data)) / (get_data_pos(i + 2, data) - get_data_pos(i + 1, data))) +# var ac : String = "mix("+a+", "+c+", 0.5-0.5*cos(3.14159265359*"+dx+"))" + var ac : Color = lerp(a, c, 0.5-0.5*cos(3.14159265359 * dx)) +# shader += " return 0.5*("+b+" + "+ac+");\n" + var dt : Color = b + ac + + dt.r *= 0.5 + dt.g *= 0.5 + dt.b *= 0.5 + dt.a = clamp(0, 1, dt.a) + + return dt +# else + else: +# shader += " return mix("+a+", "+b+", 0.5+0.5*"+dx+");\n" + return lerp(a, b, 0.5 + 0.5 * dx) + + return get_data_color(ds - 1, data) diff --git a/game/addons/mat_maker_gd/nodes/common/mwf.gd b/game/addons/mat_maker_gd/nodes/common/mwf.gd new file mode 100644 index 0000000..7226ea6 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/mwf.gd @@ -0,0 +1,705 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#mwf_create_map.mmg +#Creates a workflow map using a heightmap and an optional seed map. The workflow map contains height information as well as orientation and a seed for random offset for the material it will be applied to. + +# "inputs": [ +# { +# "default": "1.0", +# "label": "", +# "longdesc": "The input height map", +# "name": "h", +# "shortdesc": "Height", +# "type": "f" +# }, +# { +# "default": "0.0", +# "label": "", +# "longdesc": "The input offset seed map", +# "name": "o", +# "shortdesc": "Offset", +# "type": "f" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The generated workflow map, to be connected to a MixMap or an ApplyMap node", +# "rgb": "vec3($height*$h($uv), $angle*0.00277777777+0.5, rand(vec2(float($seed)+$o($uv))))", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 1, +# "label": "Height", +# "longdesc": "The maximum height of the workflow map, used as multiplier for the input height map", +# "max": 1, +# "min": 0, +# "name": "height", +# "shortdesc": "Height", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Angle", +# "longdesc": "The angle stored in the workflow map", +# "max": 180, +# "min": -180, +# "name": "angle", +# "shortdesc": "Angle", +# "step": 0.1, +# "type": "float" +# } +# ], + +#---------------------- +#mwf_mix_maps.mmg +#Mixes up to 4 workflow maps, to be used with the same base material + +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "label": "", +# "longdesc": "The first workflow map", +# "name": "in1", +# "shortdesc": "Input1", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.0)", +# "label": "", +# "longdesc": "The second workflow map", +# "name": "in2", +# "shortdesc": "Input2", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.0)", +# "label": "", +# "longdesc": "The third input map", +# "name": "in3", +# "shortdesc": "Input3", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.0)", +# "label": "", +# "longdesc": "The fourth input map", +# "name": "in4", +# "shortdesc": "Input4", +# "type": "rgb" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Generates a merged workflow map", +# "rgb": "matmap_mix(matmap_mix($in1($uv), $in2($uv)), matmap_mix($in3($uv), $in4($uv)))", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], + +#---------------------- +#mwf_map.mmg +#"Applies a workflow map to a base material, and generates height information as well as PBR channels for the result.\nThe height input must be connected to a Create Map or Mix Maps node. The other inputs must be connected to a base material.\nThe outputs must be connected to the Mix or the Output node, or a workflow filter node. + +# "code": "float $(name_uv)_angle = 6.28318530718*($map($uv).y-0.5);\nvec2 $(name_uv)_uv = matmap_uv($uv, $(name_uv)_angle, $map($uv).z);\n", +# "inputs": [ +# { +# "default": "vec3(1.0, 0.5, 0.0)", +# "label": "Map", +# "longdesc": "The input workflow map", +# "name": "map", +# "shortdesc": "Map", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.0)", +# "group_size": 4, +# "label": "Albedo", +# "longdesc": "The Albedo channel of the input base material", +# "name": "mat1", +# "shortdesc": "Albedo", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.0)", +# "label": "ORM", +# "longdesc": "The ambient occlusion, roughness and metallic channels of the input material", +# "name": "mat2", +# "shortdesc": "ORM", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.0)", +# "label": "Emission", +# "longdesc": "The emission channel of the input material", +# "name": "mat3", +# "shortdesc": "Emission", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.5, 0.5, 1.0)", +# "label": "Normal", +# "longdesc": "The normal map of the input material", +# "name": "mat4", +# "shortdesc": "Normal", +# "type": "rgb" +# } +# ], +# "outputs": [ +# { +# "f": "$map($uv).x", +# "group_size": 5, +# "longdesc": "The height map of the result", +# "shortdesc": "Height", +# "type": "f" +# }, +# { +# "longdesc": "The albedo channel of the result", +# "rgb": "$mat1($(name_uv)_uv)", +# "shortdesc": "Albedo", +# "type": "rgb" +# }, +# { +# "longdesc": "The ambient occlusion, roughness and metallic channels of the result", +# "rgb": "$mat2($(name_uv)_uv)", +# "shortdesc": "ORM", +# "type": "rgb" +# }, +# { +# "longdesc": "The emission channel of the result", +# "rgb": "$mat3($(name_uv)_uv)", +# "shortdesc": "Emission", +# "type": "rgb" +# }, +# { +# "longdesc": "The normal map of the result", +# "rgb": "matmap_rotate_nm($mat4($(name_uv)_uv), -$(name_uv)_angle)", +# "shortdesc": "Normal", +# "type": "rgb" +# } +# ], + +#---------------------- +#mwf_mix.mmg +#Combines the outputs of 2 mapped base materials (keeping the \"highest\" material). + +# "code": "float $(name_uv)_a1 = step($h1($uv), $h2($uv));", +# "inputs": [ +# { +# "default": "0.0", +# "group_size": 5, +# "label": "Height 1", +# "longdesc": "The height map of the first input", +# "name": "h1", +# "shortdesc": "Height1", +# "type": "f" +# }, +# { +# "default": "vec3(0.0)", +# "label": "Albedo 1", +# "longdesc": "The albedo channel of the first input", +# "name": "c1", +# "shortdesc": "Albedo1", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.0)", +# "label": "ORM 1", +# "longdesc": "The ambient occlusion, roughness and metallic channels of the first input", +# "name": "orm1", +# "shortdesc": "ORM1", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.0)", +# "label": "Emission 1", +# "longdesc": "The emission channel of the first input", +# "name": "em1", +# "shortdesc": "Emission1", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.5, 0.5, 1.0)", +# "label": "Normal 1", +# "longdesc": "The normal map of the first input", +# "name": "nm1", +# "shortdesc": "Normal1", +# "type": "rgb" +# }, +# { +# "default": "0.0", +# "group_size": 5, +# "label": "Height 2", +# "longdesc": "The height map of the second input", +# "name": "h2", +# "shortdesc": "Height2", +# "type": "f" +# }, +# { +# "default": "vec3(0.0)", +# "label": "Albedo 2", +# "longdesc": "The albedo channel of the second input", +# "name": "c2", +# "shortdesc": "Albedo2", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.0)", +# "label": "ORM 2", +# "longdesc": "The ambient occlusion, roughness and metallic channels of the second input", +# "name": "orm2", +# "shortdesc": "ORM2", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.0)", +# "label": "Emission 2", +# "longdesc": "The emission channel of the second input", +# "name": "em2", +# "shortdesc": "Emission2", +# "type": "rgb" +# }, +# { +# "default": "vec3(0.5, 0.5, 1.0)", +# "label": "Normal 2", +# "longdesc": "The normal map of the second input", +# "name": "nm2", +# "shortdesc": "Normal2", +# "type": "rgb" +# } +# ], +# "outputs": [ +# { +# "f": "max($h1($uv), $h2($uv))", +# "group_size": 5, +# "longdesc": "Generates the height of the result", +# "shortdesc": "Height", +# "type": "f" +# }, +# { +# "longdesc": "Shows the output albedo channel", +# "rgb": "mix($c1($uv), $c2($uv), $(name_uv)_a1)", +# "shortdesc": "Albedo", +# "type": "rgb" +# }, +# { +# "longdesc": "Shows the output ambient occlusion, roughness and metallic channels", +# "rgb": "mix($orm1($uv), $orm2($uv), $(name_uv)_a1)", +# "shortdesc": "ORM", +# "type": "rgb" +# }, +# { +# "longdesc": "Shows the output emission channel", +# "rgb": "mix($em1($uv), $em2($uv), $(name_uv)_a1)", +# "shortdesc": "Emission", +# "type": "rgb" +# }, +# { +# "longdesc": "Shows the output normal map", +# "rgb": "mix($nm1($uv), $nm2($uv), $(name_uv)_a1)", +# "shortdesc": "Normal", +# "type": "rgb" +# } +# ], + + +#---------------------- +#mwf_output.mmg + +#{ +# "connections": [ +# { +# "from": "colorize_3", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 6 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "colorize_3", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "occlusion", +# "to_port": 0 +# }, +# { +# "from": "occlusion", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 5 +# }, +# { +# "from": "gen_inputs", +# "from_port": 2, +# "to": "decompose", +# "to_port": 0 +# }, +# { +# "from": "decompose", +# "from_port": 1, +# "to": "gen_outputs", +# "to_port": 2 +# }, +# { +# "from": "decompose", +# "from_port": 2, +# "to": "gen_outputs", +# "to_port": 1 +# }, +# { +# "from": "blend_2", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 4 +# }, +# { +# "from": "gen_inputs", +# "from_port": 1, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 3, +# "to": "gen_outputs", +# "to_port": 3 +# }, +# { +# "from": "brightness_contrast", +# "from_port": 0, +# "to": "blend_2", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 4, +# "to": "brightness_contrast", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "normal_map_2", +# "to_port": 0 +# }, +# { +# "from": "normal_map_2", +# "from_port": 0, +# "to": "blend_2", +# "to_port": 1 +# } +# ], +# "label": "Output", +# "longdesc": "Converts a workflow mapped material (from an Apply Map or a Mix node) for a Material node", +# "name": "mwf_output", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "colorize_3", +# "node_position": { +# "x": -939.637451, +# "y": 871.842407 +# }, +# "parameters": { +# "gradient": { +# "interpolation": 1, +# "points": [ +# { +# "a": 1, +# "b": 1, +# "g": 1, +# "pos": 0, +# "r": 1 +# }, +# { +# "a": 1, +# "b": 0, +# "g": 0, +# "pos": 1, +# "r": 0 +# } +# ], +# "type": "Gradient" +# } +# }, +# "type": "colorize" +# }, +# { +# "name": "occlusion", +# "node_position": { +# "x": -994.845825, +# "y": 786.968262 +# }, +# "parameters": { +# "param0": 10, +# "param2": 1 +# }, +# "type": "occlusion" +# }, +# { +# "name": "decompose", +# "node_position": { +# "x": -924.371338, +# "y": 570.25 +# }, +# "parameters": { +# +# }, +# "type": "decompose" +# }, +# { +# "name": "blend_2", +# "node_position": { +# "x": -931.305542, +# "y": 677.328491 +# }, +# "parameters": { +# "amount": 1, +# "blend_type": 4 +# }, +# "type": "blend" +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -1626.805542, +# "y": 608.758606 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 5, +# "name": "Height", +# "type": "f" +# }, +# { +# "group_size": 0, +# "name": "Albedo", +# "type": "rgb" +# }, +# { +# "group_size": 0, +# "name": "ORM", +# "type": "rgb" +# }, +# { +# "group_size": 0, +# "name": "Emission", +# "type": "rgb" +# }, +# { +# "group_size": 0, +# "name": "Normal", +# "type": "rgb" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": -635.305542, +# "y": 597.758606 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 7, +# "longdesc": "", +# "name": "Albedo", +# "shortdesc": "Albedo", +# "type": "rgb" +# }, +# { +# "group_size": 0, +# "longdesc": "", +# "name": "Metallic", +# "shortdesc": "Metallic", +# "type": "f" +# }, +# { +# "group_size": 0, +# "longdesc": "", +# "name": "Roughness", +# "shortdesc": "Roughness", +# "type": "f" +# }, +# { +# "group_size": 0, +# "longdesc": "", +# "name": "Emission", +# "shortdesc": "Emission", +# "type": "rgb" +# }, +# { +# "group_size": 0, +# "longdesc": "", +# "name": "Normal", +# "shortdesc": "Normal", +# "type": "rgb" +# }, +# { +# "group_size": 0, +# "longdesc": "", +# "name": "Occlusion", +# "shortdesc": "Occlusion", +# "type": "f" +# }, +# { +# "group_size": 0, +# "longdesc": "", +# "name": "Depth", +# "shortdesc": "Depth", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -1104.881836, +# "y": 425.25 +# }, +# "parameters": { +# "param0": 1, +# "param2": 1 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Occlusion", +# "linked_widgets": [ +# { +# "node": "occlusion", +# "widget": "param2" +# } +# ], +# "longdesc": "The strength of the calculated occlusion effect", +# "name": "param2", +# "shortdesc": "Occlusion", +# "type": "linked_control" +# }, +# { +# "label": "Mat Normal", +# "linked_widgets": [ +# { +# "node": "blend_2", +# "widget": "amount" +# } +# ], +# "longdesc": "The strength of normals from the base materials (compared to the normal generated from height information))", +# "name": "param0", +# "shortdesc": "MatNormal", +# "type": "linked_control" +# } +# ] +# }, +# { +# "name": "brightness_contrast", +# "node_position": { +# "x": -1177.223877, +# "y": 677.062317 +# }, +# "parameters": { +# "brightness": 0, +# "contrast": 1 +# }, +# "type": "brightness_contrast" +# }, +# { +# "name": "normal_map_2", +# "node_position": { +# "x": -1152.5, +# "y": 544.75 +# }, +# "parameters": { +# "param0": 10, +# "param1": 1.02, +# "param2": 0, +# "param4": 1 +# }, +# "type": "normal_map" +# } +# ], +# "parameters": { +# "param0": 1, +# "param2": 1 +# }, +# "shortdesc": "Output", +# "type": "graph" +#} + +#---------------------- +#edge_detect.mmg + +#---------------------- +#edge_detect.mmg + +#---------------------- +#edge_detect.mmg + +#---------------------- +#edge_detect.mmg + +#---------------------- +#edge_detect.mmg + +#---------------------- +#edge_detect.mmg + +#---------------------- +#edge_detect.mmg + +#---------------------- +#edge_detect.mmg + +#---------------------- +#edge_detect.mmg + +#---------------------- +#edge_detect.mmg + + +#vec3 matmap_mix(vec3 in1, vec3 in2) {\n\t +# float is_in1 = step(in2.x, in1.x);\n\t +# //return vec3(max(in1.x, in2.x), in1.yz*is_in1+in2.yz*(1.0-is_in1));\n\t +# return vec3(max(in1.x, in2.x), mix(in2.yz, in1.yz, is_in1));\n +#} + +#vec2 matmap_uv(vec2 uv, float angle, float seed) {\n\t +# uv -= vec2(0.5);\n\tvec2 rv;\n\t +# rv.x = uv.x*cos(angle)+uv.y*sin(angle);\n\t +# rv.y = -uv.x*sin(angle)+uv.y*cos(angle);\n\t +# return fract(rv + rand2(vec2(seed)));\n +#} + +#vec3 matmap_rotate_nm(vec3 input, float angle) {\n\t +# vec2 uv = input.xy - vec2(0.5);\n\t +# vec2 rv;\n\t +# rv.x = uv.x*cos(angle)+uv.y*sin(angle);\n\t +# rv.y = -uv.x*sin(angle)+uv.y*cos(angle);\n\t +# return vec3(rv + vec2(0.5), input.z);\n +#} + diff --git a/game/addons/mat_maker_gd/nodes/common/noise_fbm.gd b/game/addons/mat_maker_gd/nodes/common/noise_fbm.gd new file mode 100644 index 0000000..8fb6f25 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/noise_fbm.gd @@ -0,0 +1,691 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#fbm2.mmg (and fbm.mmg) + +#Output: +#$(name)_fbm($(uv), vec2($(scale_x), $(scale_y)), int($(folds)), int($(iterations)), $(persistence), float($(seed))) + +#Instance: +#float $(name)_fbm(vec2 coord, vec2 size, int folds, int octaves, float persistence, float seed) { +# float normalize_factor = 0.0; +# float value = 0.0; +# float scale = 1.0; +# +# for (int i = 0; i < octaves; i++) { +# float noise = fbm_$noise(coord*size, size, seed); +# +# for (int f = 0; f < folds; ++f) { +# noise = abs(2.0*noise-1.0); +# } +# +# value += noise * scale; +# normalize_factor += scale; +# size *= 2.0; +# scale *= persistence; +# } +# +# return value / normalize_factor; +#} + +#Inputs: +#noise, enum, default: 2, values: Value, Perlin, Simplex, Cellular, Cellular2, Cellular3, Cellular4, Cellular5, Cellular6 +#scale, vector2, default: 4, min: 1, max: 32, step: 1 +#folds, float, default: 0, min: 0, max: 5, step: 1 +#iterations (octaves), float, default: 3, min: 1, max: 10, step: 1 +#persistence, float, default: 0.5, min: 0, max: 1, step: 0.01 + +static func fbmval(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color: + var f : float = fbmf(uv, size, folds, octaves, persistence, pseed) + + return Color(f, f, f, 1) + +static func perlin(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color: + var f : float = perlinf(uv, size, folds, octaves, persistence, pseed) + + return Color(f, f, f, 1) + +static func perlinabs(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color: + var f : float = perlinf(uv, size, folds, octaves, persistence, pseed) + + return Color(f, f, f, 1) + +static func simplex(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color: + var f : float = fbm_simplexf(uv, size, folds, octaves, persistence, pseed) + + return Color(f, f, f, 1) + +static func cellular(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color: + var f : float = cellularf(uv, size, folds, octaves, persistence, pseed) + + return Color(f, f, f, 1) + +static func cellular2(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color: + var f : float = cellular2f(uv, size, folds, octaves, persistence, pseed) + + return Color(f, f, f, 1) + +static func cellular3(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color: + var f : float = cellular3f(uv, size, folds, octaves, persistence, pseed) + + return Color(f, f, f, 1) + +static func cellular4(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color: + var f : float = cellular4f(uv, size, folds, octaves, persistence, pseed) + + return Color(f, f, f, 1) + +static func cellular5(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color: + var f : float = cellular5f(uv, size, folds, octaves, persistence, pseed) + + return Color(f, f, f, 1) + +static func cellular6(uv : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> Color: + var f : float = cellular6f(uv, size, folds, octaves, persistence, pseed) + + return Color(f, f, f, 1) + + +static func fbmf(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float: + var normalize_factor : float = 0.0; + var value : float = 0.0; + var scale : float = 1.0; + + for i in range(octaves):# (int i = 0; i < octaves; i++) { + var noise : float = fbm_value(coord*size, size, pseed) + + for j in range(folds):# (int f = 0; f < folds; ++f) { + noise = abs(2.0*noise-1.0); + + value += noise * scale + normalize_factor += scale; + size *= 2.0; + scale *= persistence; + + return value / normalize_factor; + +static func perlinf(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float: + var normalize_factor : float = 0.0; + var value : float = 0.0; + var scale : float = 1.0; + + for i in range(octaves):# (int i = 0; i < octaves; i++) { + var noise : float = fbm_perlin(coord*size, size, pseed) + + for j in range(folds):# (int f = 0; f < folds; ++f) { + noise = abs(2.0*noise-1.0); + + value += noise * scale + normalize_factor += scale; + size *= 2.0; + scale *= persistence; + + return value / normalize_factor; + +static func perlinabsf(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float: + var normalize_factor : float = 0.0; + var value : float = 0.0; + var scale : float = 1.0; + + for i in range(octaves):# (int i = 0; i < octaves; i++) { + var noise : float = fbm_perlinabs(coord*size, size, pseed) + + for j in range(folds):# (int f = 0; f < folds; ++f) { + noise = abs(2.0*noise-1.0); + + value += noise * scale + normalize_factor += scale; + size *= 2.0; + scale *= persistence; + + return value / normalize_factor; + +static func fbm_simplexf(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float: + var normalize_factor : float = 0.0; + var value : float = 0.0; + var scale : float = 1.0; + + for i in range(octaves):# (int i = 0; i < octaves; i++) { + var noise : float = fbm_simplex(coord*size, size, pseed) + + for j in range(folds):# (int f = 0; f < folds; ++f) { + noise = abs(2.0*noise-1.0); + + value += noise * scale + normalize_factor += scale; + size *= 2.0; + scale *= persistence; + + return value / normalize_factor; + +static func cellularf(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float: + var normalize_factor : float = 0.0; + var value : float = 0.0; + var scale : float = 1.0; + + for i in range(octaves):# (int i = 0; i < octaves; i++) { + var noise : float = fbm_cellular(coord*size, size, pseed) + + for j in range(folds):# (int f = 0; f < folds; ++f) { + noise = abs(2.0*noise-1.0); + + value += noise * scale + normalize_factor += scale; + size *= 2.0; + scale *= persistence; + + return value / normalize_factor; + +static func cellular2f(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float: + var normalize_factor : float = 0.0; + var value : float = 0.0; + var scale : float = 1.0; + + for i in range(octaves):# (int i = 0; i < octaves; i++) { + var noise : float = fbm_cellular2(coord*size, size, pseed) + + for j in range(folds):# (int f = 0; f < folds; ++f) { + noise = abs(2.0*noise-1.0); + + value += noise * scale + normalize_factor += scale; + size *= 2.0; + scale *= persistence; + + return value / normalize_factor; + +static func cellular3f(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float: + var normalize_factor : float = 0.0; + var value : float = 0.0; + var scale : float = 1.0; + + for i in range(octaves):# (int i = 0; i < octaves; i++) { + var noise : float = fbm_cellular3(coord*size, size, pseed) + + for j in range(folds):# (int f = 0; f < folds; ++f) { + noise = abs(2.0*noise-1.0); + + value += noise * scale + normalize_factor += scale; + size *= 2.0; + scale *= persistence; + + return value / normalize_factor; + +static func cellular4f(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float: + var normalize_factor : float = 0.0; + var value : float = 0.0; + var scale : float = 1.0; + + for i in range(octaves):# (int i = 0; i < octaves; i++) { + var noise : float = fbm_cellular4(coord*size, size, pseed) + + for j in range(folds):# (int f = 0; f < folds; ++f) { + noise = abs(2.0*noise-1.0); + + value += noise * scale + normalize_factor += scale; + size *= 2.0; + scale *= persistence; + + return value / normalize_factor; + +static func cellular5f(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float: + var normalize_factor : float = 0.0; + var value : float = 0.0; + var scale : float = 1.0; + + for i in range(octaves):# (int i = 0; i < octaves; i++) { + var noise : float = fbm_cellular5(coord*size, size, pseed) + + for j in range(folds):# (int f = 0; f < folds; ++f) { + noise = abs(2.0*noise-1.0); + + value += noise * scale + normalize_factor += scale; + size *= 2.0; + scale *= persistence; + + return value / normalize_factor; + +static func cellular6f(coord : Vector2, size : Vector2, folds : int, octaves : int, persistence : float, pseed : float) -> float: + var normalize_factor : float = 0.0; + var value : float = 0.0; + var scale : float = 1.0; + + for i in range(octaves):# (int i = 0; i < octaves; i++) { + var noise : float = fbm_cellular6(coord*size, size, pseed) + + for j in range(folds):# (int f = 0; f < folds; ++f) { + noise = abs(2.0*noise-1.0); + + value += noise * scale + normalize_factor += scale; + size *= 2.0; + scale *= persistence; + + return value / normalize_factor; + + +#float fbm_value(vec2 coord, vec2 size, float seed) { +# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size; +# vec2 f = fract(coord); +# +# float p00 = rand(mod(o, size)); +# float p01 = rand(mod(o + vec2(0.0, 1.0), size)); +# float p10 = rand(mod(o + vec2(1.0, 0.0), size)); +# float p11 = rand(mod(o + vec2(1.0, 1.0), size)); +# +# vec2 t = f * f * (3.0 - 2.0 * f); +# +# return mix(mix(p00, p10, t.x), mix(p01, p11, t.x), t.y); +#} + +static func fbm_value(coord : Vector2, size : Vector2, pseed : float) -> float: + var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size; + var f : Vector2 = Commons.fractv2(coord); + var p00 : float = Commons.rand(Commons.modv2(o, size)); + var p01 : float = Commons.rand(Commons.modv2(o + Vector2(0.0, 1.0), size)); + var p10 : float = Commons.rand(Commons.modv2(o + Vector2(1.0, 0.0), size)); + var p11 : float = Commons.rand(Commons.modv2(o + Vector2(1.0, 1.0), size)); + + var t : Vector2 = f * f * (Vector2(3, 3) - 2.0 * f); + return lerp(lerp(p00, p10, t.x), lerp(p01, p11, t.x), t.y); + + +#float fbm_perlin(vec2 coord, vec2 size, float seed) { +# tvec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size; +# vec2 f = fract(coord); +# +# float a00 = rand(mod(o, size)) * 6.28318530718; +# float a01 = rand(mod(o + vec2(0.0, 1.0), size)) * 6.28318530718; +# float a10 = rand(mod(o + vec2(1.0, 0.0), size)) * 6.28318530718; +# float a11 = rand(mod(o + vec2(1.0, 1.0), size)) * 6.28318530718; +# +# vec2 v00 = vec2(cos(a00), sin(a00)); +# vec2 v01 = vec2(cos(a01), sin(a01)); +# vec2 v10 = vec2(cos(a10), sin(a10)); +# vec2 v11 = vec2(cos(a11), sin(a11)); +# +# float p00 = dot(v00, f); +# float p01 = dot(v01, f - vec2(0.0, 1.0)); +# float p10 = dot(v10, f - vec2(1.0, 0.0)); +# float p11 = dot(v11, f - vec2(1.0, 1.0)); +# +# vec2 t = f * f * (3.0 - 2.0 * f); +# +# return 0.5 + mix(mix(p00, p10, t.x), mix(p01, p11, t.x), t.y); +#} + +static func fbm_perlin(coord : Vector2, size : Vector2, pseed : float) -> float: + var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size; + var f : Vector2 = Commons.fractv2(coord); + var a00 : float = Commons.rand(Commons.modv2(o, size)) * 6.28318530718; + var a01 : float = Commons.rand(Commons.modv2(o + Vector2(0.0, 1.0), size)) * 6.28318530718; + var a10 : float = Commons.rand(Commons.modv2(o + Vector2(1.0, 0.0), size)) * 6.28318530718; + var a11 : float = Commons.rand(Commons.modv2(o + Vector2(1.0, 1.0), size)) * 6.28318530718; + var v00 : Vector2 = Vector2(cos(a00), sin(a00)); + var v01 : Vector2 = Vector2(cos(a01), sin(a01)); + var v10 : Vector2 = Vector2(cos(a10), sin(a10)); + var v11 : Vector2 = Vector2(cos(a11), sin(a11)); + var p00 : float = v00.dot(f); + var p01 : float = v01.dot(f - Vector2(0.0, 1.0)); + var p10 : float = v10.dot(f - Vector2(1.0, 0.0)); + var p11 : float = v11.dot(f - Vector2(1.0, 1.0)); + + var t : Vector2 = f * f * (Vector2(3, 3) - 2.0 * f); + + return 0.5 + lerp(lerp(p00, p10, t.x), lerp(p01, p11, t.x), t.y); + +#float fbm_perlinabs(vec2 coord, vec2 size, float seed) { +# return abs(2.0*fbm_perlin(coord, size, seed)-1.0); +#} + +static func fbm_perlinabs(coord : Vector2, size : Vector2, pseed : float) -> float: + return abs(2.0*fbm_perlin(coord, size, pseed)-1.0) + +#vec2 rgrad2(vec2 p, float rot, float seed) { +# float u = rand(p + vec2(seed, 1.0-seed)); +# u = fract(u) * 6.28318530718; // 2*pi +# return vec2(cos(u), sin(u)); +#} + +static func rgrad2(p : Vector2, rot : float, pseed : float) -> Vector2: + var u : float = Commons.rand(p + Vector2(pseed, 1.0-pseed)); + u = Commons.fract(u) * 6.28318530718; # 2*pi + return Vector2(cos(u), sin(u)) + +#float fbm_simplex(vec2 coord, vec2 size, float seed) { +# coord *= 2.0; // needed for it to tile +# coord += rand2(vec2(seed, 1.0-seed)) + size; +# size *= 2.0; // needed for it to tile +# coord.y += 0.001; +# +# vec2 uv = vec2(coord.x + coord.y*0.5, coord.y); +# vec2 i0 = floor(uv); vec2 f0 = fract(uv); +# vec2 i1 = (f0.x > f0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); +# vec2 p0 = vec2(i0.x - i0.y * 0.5, i0.y); +# vec2 p1 = vec2(p0.x + i1.x - i1.y * 0.5, p0.y + i1.y); +# vec2 p2 = vec2(p0.x + 0.5, p0.y + 1.0); +# +# i1 = i0 + i1; +# +# vec2 i2 = i0 + vec2(1.0, 1.0); +# vec2 d0 = coord - p0; +# vec2 d1 = coord - p1; +# vec2 d2 = coord - p2; +# +# vec3 xw = mod(vec3(p0.x, p1.x, p2.x), size.x); +# vec3 yw = mod(vec3(p0.y, p1.y, p2.y), size.y); +# +# vec3 iuw = xw + 0.5 * yw; +# vec3 ivw = yw; +# +# vec2 g0 = rgrad2(vec2(iuw.x, ivw.x), 0.0, seed); +# vec2 g1 = rgrad2(vec2(iuw.y, ivw.y), 0.0, seed); +# vec2 g2 = rgrad2(vec2(iuw.z, ivw.z), 0.0, seed); +# +# vec3 w = vec3(dot(g0, d0), dot(g1, d1), dot(g2, d2)); +# vec3 t = 0.8 - vec3(dot(d0, d0), dot(d1, d1), dot(d2, d2)); +# +# t = max(t, vec3(0.0)); +# vec3 t2 = t * t; +# vec3 t4 = t2 * t2; +# float n = dot(t4, w); +# +# return 0.5 + 5.5 * n; +#} + +static func fbm_simplex(coord : Vector2, size : Vector2, pseed : float) -> float: + coord *= 2.0; # needed for it to tile + coord += Commons.rand2(Vector2(pseed, 1.0-pseed)) + size; + size *= 2.0; # needed for it to tile + coord.y += 0.001; + + var uv : Vector2 = Vector2(coord.x + coord.y*0.5, coord.y); + var i0 : Vector2 = Commons.floorv2(uv); + var f0 : Vector2 = Commons.fractv2(uv); + var i1 : Vector2 + + if (f0.x > f0.y): + i1 = Vector2(1.0, 0.0) + else: + i1 = Vector2(0.0, 1.0); + + var p0 : Vector2 = Vector2(i0.x - i0.y * 0.5, i0.y); + var p1 : Vector2 = Vector2(p0.x + i1.x - i1.y * 0.5, p0.y + i1.y); + var p2 : Vector2 = Vector2(p0.x + 0.5, p0.y + 1.0); + + i1 = i0 + i1; + + var i2 : Vector2 = i0 + Vector2(1.0, 1.0); + var d0 : Vector2 = coord - p0; + var d1 : Vector2 = coord - p1; + var d2 : Vector2 = coord - p2; + + var xw : Vector3 = Commons.modv3(Vector3(p0.x, p1.x, p2.x), Vector3(size.x, size.x, size.x)); + var yw : Vector3 = Commons.modv3(Vector3(p0.y, p1.y, p2.y), Vector3(size.y, size.y, size.y)); + + var iuw : Vector3 = xw + 0.5 * yw; + var ivw : Vector3 = yw; + + var g0 : Vector2 = rgrad2(Vector2(iuw.x, ivw.x), 0.0, pseed); + var g1 : Vector2 = rgrad2(Vector2(iuw.y, ivw.y), 0.0, pseed); + var g2 : Vector2 = rgrad2(Vector2(iuw.z, ivw.z), 0.0, pseed); + + var w : Vector3 = Vector3(g0.dot(d0), g1.dot(d1), g2.dot(d2)); + var t : Vector3 = Vector3(0.8, 0.8, 0.8) - Vector3(d0.dot(d0), d1.dot(d1), d2.dot(d2)); + + t = Commons.maxv3(t, Vector3()); + var t2 : Vector3 = t * t; + var t4 : Vector3 = t2 * t2; + var n : float = t4.dot(w); + + return 0.5 + 5.5 * n; + +#float fbm_cellular(vec2 coord, vec2 size, float seed) { +# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size; +# vec2 f = fract(coord); +# float min_dist = 2.0; +# +# for(float x = -1.0; x <= 1.0; x++) { +# for(float y = -1.0; y <= 1.0; y++) { +# vec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y); +# float dist = sqrt((f - node).x * (f - node).x + (f - node).y * (f - node).y); +# min_dist = min(min_dist, dist); +# } +# } +# +# return min_dist; +#} + +static func fbm_cellular(coord : Vector2, size : Vector2, pseed : float) -> float: + var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size; + var f : Vector2 = Commons.fractv2(coord); + var min_dist : float = 2.0; + + for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) { + var x : float = xx + + for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) { + var y : float = yy + + var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size)) + Vector2(x, y); + var dist : float = sqrt((f - node).x * (f - node).x + (f - node).y * (f - node).y); + min_dist = min(min_dist, dist); + + return min_dist; + +#float fbm_cellular2(vec2 coord, vec2 size, float seed) { +# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size; +# vec2 f = fract(coord); +# float min_dist1 = 2.0; +# float min_dist2 = 2.0; +# +# for(float x = -1.0; x <= 1.0; x++) { +# for(float y = -1.0; y <= 1.0; y++) { +# vec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y); +# float dist = sqrt((f - node).x * (f - node).x + (f - node).y * (f - node).y); +# if (min_dist1 > dist) { +# min_dist2 = min_dist1; +# min_dist1 = dist; +# } else if (min_dist2 > dist) { +# min_dist2 = dist; +# } +# } +# } +# +# return min_dist2-min_dist1; +#} + +static func fbm_cellular2(coord : Vector2, size : Vector2, pseed : float) -> float: + var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size; + var f : Vector2 = Commons.fractv2(coord); + + var min_dist1 : float = 2.0; + var min_dist2 : float = 2.0; + + for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) { + var x : float = xx + + for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) { + var y : float = yy + + var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size)) + Vector2(x, y); + + var dist : float = sqrt((f - node).x * (f - node).x + (f - node).y * (f - node).y); + + if (min_dist1 > dist): + min_dist2 = min_dist1; + min_dist1 = dist; + elif (min_dist2 > dist): + min_dist2 = dist; + + return min_dist2-min_dist1; + +#float fbm_cellular3(vec2 coord, vec2 size, float seed) { +# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size; +# vec2 f = fract(coord); +# float min_dist = 2.0; +# +# for(float x = -1.0; x <= 1.0; x++) { +# for(float y = -1.0; y <= 1.0; y++) { +# vec2 node = rand2(mod(o + vec2(x, y), size))*0.5 + vec2(x, y); +# float dist = abs((f - node).x) + abs((f - node).y); +# min_dist = min(min_dist, dist); +# } +# } +# +# return min_dist; +#} + +static func fbm_cellular3(coord : Vector2, size : Vector2, pseed : float) -> float: + var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size; + var f : Vector2 = Commons.fractv2(coord); + + var min_dist : float = 2.0; + + for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) { + var x : float = xx + + for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) { + var y : float = yy + + var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size))*0.5 + Vector2(x, y); + + var dist : float = abs((f - node).x) + abs((f - node).y); + + min_dist = min(min_dist, dist); + + return min_dist; + +#float fbm_cellular4(vec2 coord, vec2 size, float seed) { +# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size; +# vec2 f = fract(coord); +# float min_dist1 = 2.0; +# float min_dist2 = 2.0; +# +# for(float x = -1.0; x <= 1.0; x++) { +# for(float y = -1.0; y <= 1.0; y++) { +# vec2 node = rand2(mod(o + vec2(x, y), size))*0.5 + vec2(x, y); +# float dist = abs((f - node).x) + abs((f - node).y); +# +# if (min_dist1 > dist) { +# min_dist2 = min_dist1; +# min_dist1 = dist; +# } else if (min_dist2 > dist) { +# min_dist2 = dist; +# } +# } +# } +# +# return min_dist2-min_dist1; +#} + +static func fbm_cellular4(coord : Vector2, size : Vector2, pseed : float) -> float: + var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size; + var f : Vector2 = Commons.fractv2(coord); + + var min_dist1 : float = 2.0; + var min_dist2 : float = 2.0; + + for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) { + var x : float = xx + + for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) { + var y : float = yy + + var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size))*0.5 + Vector2(x, y); + + var dist : float = abs((f - node).x) + abs((f - node).y); + + if (min_dist1 > dist): + min_dist2 = min_dist1; + min_dist1 = dist; + elif (min_dist2 > dist): + min_dist2 = dist; + + return min_dist2 - min_dist1; + +#float fbm_cellular5(vec2 coord, vec2 size, float seed) { +# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size; +# vec2 f = fract(coord); +# float min_dist = 2.0; +# +# for(float x = -1.0; x <= 1.0; x++) { +# for(float y = -1.0; y <= 1.0; y++) { +# vec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y); +# float dist = max(abs((f - node).x), abs((f - node).y)); +# min_dist = min(min_dist, dist); +# } +# } +# +# return min_dist; +#} + +static func fbm_cellular5(coord : Vector2, size : Vector2, pseed : float) -> float: + var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size; + var f : Vector2 = Commons.fractv2(coord); + + var min_dist : float = 2.0; + + for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) { + var x : float = xx + + for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) { + var y : float = yy + + var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size)) + Vector2(x, y); + var dist : float = max(abs((f - node).x), abs((f - node).y)); + min_dist = min(min_dist, dist); + + return min_dist; + +#float fbm_cellular6(vec2 coord, vec2 size, float seed) { +# vec2 o = floor(coord)+rand2(vec2(seed, 1.0-seed))+size; +# vec2 f = fract(coord); +# float min_dist1 = 2.0; +# float min_dist2 = 2.0; +# +# for(float x = -1.0; x <= 1.0; x++) { +# for(float y = -1.0; y <= 1.0; y++) { +# vec2 node = rand2(mod(o + vec2(x, y), size)) + vec2(x, y); +# float dist = max(abs((f - node).x), abs((f - node).y)); +# +# if (min_dist1 > dist) { +# min_dist2 = min_dist1; +# min_dist1 = dist; +# } else if (min_dist2 > dist) { +# min_dist2 = dist; +# } +# } +# } +# +# return min_dist2-min_dist1; +#} + +static func fbm_cellular6(coord : Vector2, size : Vector2, pseed : float) -> float: + var o : Vector2 = Commons.floorv2(coord) + Commons.rand2(Vector2(float(pseed), 1.0 - float(pseed))) + size; + var f : Vector2 = Commons.fractv2(coord); + + var min_dist1 : float = 2.0; + var min_dist2 : float = 2.0; + + for xx in range(-1, 2): #(float x = -1.0; x <= 1.0; x++) { + var x : float = xx + + for yy in range(-1, 2):#(float y = -1.0; y <= 1.0; y++) { + var y : float = yy + + var node : Vector2 = Commons.rand2(Commons.modv2(o + Vector2(x, y), size)) + Vector2(x, y); + var dist : float = max(abs((f - node).x), abs((f - node).y)); + + if (min_dist1 > dist): + min_dist2 = min_dist1; + min_dist1 = dist; + elif (min_dist2 > dist): + min_dist2 = dist; + + return min_dist2 - min_dist1; diff --git a/game/addons/mat_maker_gd/nodes/common/noise_perlin.gd b/game/addons/mat_maker_gd/nodes/common/noise_perlin.gd new file mode 100644 index 0000000..aece6c1 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/noise_perlin.gd @@ -0,0 +1,157 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#perlin.mmg + +#Outputs: + +#Output - (float) - Shows a greyscale value noise +#perlin($(uv), vec2($(scale_x), $(scale_y)), int($(iterations)), $(persistence), $(seed)) + +#Inputs: +#scale, vector2, default: 4, min: 1, max: 32, step: 1 +#iterations, float, min: 0, max: 10, default: 3, step:1 +#persistence, float, min: 0, max: 1, default: 0.5, step:0.05 + +#---------------------- +#perlin_color.mmg + +#Outputs: + +#Output - (rgb) - Shows a color value noise +#perlin_color($(uv), vec2($(scale_x), $(scale_y)), int($(iterations)), $(persistence), $(seed)) + +#Inputs: +#scale, vector2, default: 4, min: 1, max: 32, step: 1 +#iterations, float, min: 0, max: 10, default: 3, step:1 +#persistence, float, min: 0, max: 1, default: 0.5, step:0.05 + +static func perlinc(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> Color: + var f : float = perlin(uv, size, iterations, persistence, pseed) + + return Color(f, f, f, 1) + + +#float perlin(vec2 uv, vec2 size, int iterations, float persistence, float seed) { +# vec2 seed2 = rand2(vec2(seed, 1.0-seed)); +# float rv = 0.0; +# float coef = 1.0; +# float acc = 0.0; +# +# for (int i = 0; i < iterations; ++i) { +# vec2 step = vec2(1.0)/size; +# vec2 xy = floor(uv*size); +# +# float f0 = rand(seed2+mod(xy, size)); +# float f1 = rand(seed2+mod(xy+vec2(1.0, 0.0), size)); +# float f2 = rand(seed2+mod(xy+vec2(0.0, 1.0), size)); +# float f3 = rand(seed2+mod(xy+vec2(1.0, 1.0), size)); +# +# vec2 mixval = smoothstep(0.0, 1.0, fract(uv*size)); +# rv += coef * mix(mix(f0, f1, mixval.x), mix(f2, f3, mixval.x), mixval.y); +# acc += coef; +# size *= 2.0; +# coef *= persistence; +# } +# +# return rv / acc; +#} + +static func perlin(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> float: + var seed2 : Vector2 = Commons.rand2(Vector2(float(pseed), 1.0-float(pseed))); + var rv : float = 0.0; + var coef : float = 1.0; + var acc : float = 0.0; + + for i in range(iterations): + var step : Vector2 = Vector2(1, 1) / size; + var xy : Vector2 = Commons.floorv2(uv * size); + var f0 : float = Commons.rand(seed2 + Commons.modv2(xy, size)); + var f1 : float = Commons.rand(seed2 + Commons.modv2(xy + Vector2(1.0, 0.0), size)); + var f2 : float = Commons.rand(seed2 + Commons.modv2(xy + Vector2(0.0, 1.0), size)); + var f3 : float = Commons.rand(seed2 + Commons.modv2(xy + Vector2(1.0, 1.0), size)); + + var mixval : Vector2 = Commons.smoothstepv2(0.0, 1.0, Commons.fractv2(uv * size)); + + rv += coef * lerp(lerp(f0, f1, mixval.x), lerp(f2, f3, mixval.x), mixval.y); + acc += coef; + size *= 2.0; + coef *= persistence; + + return rv / acc; + +#vec3 perlin_color(vec2 uv, vec2 size, int iterations, float persistence, float seed) { +# vec2 seed2 = rand2(vec2(seed, 1.0-seed)); +# vec3 rv = vec3(0.0); +# float coef = 1.0; +# float acc = 0.0; +# +# for (int i = 0; i < iterations; ++i) { +# vec2 step = vec2(1.0)/size; +# vec2 xy = floor(uv*size); +# vec3 f0 = rand3(seed2+mod(xy, size)); +# vec3 f1 = rand3(seed2+mod(xy+vec2(1.0, 0.0), size)); +# vec3 f2 = rand3(seed2+mod(xy+vec2(0.0, 1.0), size)); +# vec3 f3 = rand3(seed2+mod(xy+vec2(1.0, 1.0), size)); +# vec2 mixval = smoothstep(0.0, 1.0, fract(uv*size)); +# +# rv += coef * mix(mix(f0, f1, mixval.x), mix(f2, f3, mixval.x), mixval.y); +# acc += coef; +# size *= 2.0; +# coef *= persistence; +# } +# +# return rv / acc; +#} + +static func perlin_color(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> Vector3: + var seed2 : Vector2 = Commons.rand2(Vector2(float(pseed), 1.0-float(pseed))); + var rv : Vector3 = Vector3(); + var coef : float = 1.0; + var acc : float = 0.0; + + for i in range(iterations): + var step : Vector2 = Vector2(1, 1) / size; + var xy : Vector2 = Commons.floorv2(uv * size); + var f0 : Vector3 = Commons.rand3(seed2 + Commons.modv2(xy, size)); + var f1 : Vector3 = Commons.rand3(seed2 + Commons.modv2(xy + Vector2(1.0, 0.0), size)); + var f2 : Vector3 = Commons.rand3(seed2 + Commons.modv2(xy + Vector2(0.0, 1.0), size)); + var f3 : Vector3 = Commons.rand3(seed2 + Commons.modv2(xy + Vector2(1.0, 1.0), size)); + + var mixval : Vector2 = Commons.smoothstepv2(0.0, 1.0, Commons.fractv2(uv * size)); + + rv += coef * lerp(lerp(f0, f1, mixval.x), lerp(f2, f3, mixval.x), mixval.y) + acc += coef; + size *= 2.0; + coef *= persistence; + + return rv / acc; + +static func perlin_colorc(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> Color: + var f : Vector3 = perlin_color(uv, size, iterations, persistence, pseed) + + return Color(f.x, f.y, f.z, 1) + +static func perlin_warp_1(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int, translate : Vector2, rotate : float, size2 : Vector2) -> Color: + var f : float = perlin(uv, size2, iterations, persistence, pseed) + var vt : Vector2 = Commons.transform(uv, Vector2(translate.x*(2.0*f-1.0), translate.y*(2.0*f-1.0)), rotate*0.01745329251*(2.0*1.0-1.0), Vector2(size.x*(2.0*1.0-1.0), size.y*(2.0*1.0-1.0)), true) + var ff : float = perlin(vt, size2, iterations, persistence, pseed) + + return Color(ff, ff, ff, 1) + +static func perlin_warp_2(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int, translate : Vector2, rotate : float, size2 : Vector2) -> Color: + var f = perlin(uv, size2, iterations, persistence, pseed) + var vt : Vector2 = Commons.transform(uv, Vector2(translate.x*(2.0*f-1.0), translate.y*(2.0*f-1.0)), rotate*0.01745329251*(2.0*1.0-1.0), Vector2(size.x*(2.0*1.0-1.0), size.y*(2.0*1.0-1.0)), true) + var ff : float = perlin(vt, size2, iterations, persistence, pseed) + + var rgba : Vector3 = Vector3(ff, ff, ff) + + var tf : Vector2 = Commons.transform(uv, Vector2(translate.x * (2.0 * (rgba.dot(Vector3(1, 1, 1) / 3.0) - 1.0)), translate.y*(2.0*(rgba.dot(Vector3(1, 1, 1) /3.0)-1.0))), rotate*0.01745329251*(2.0*1.0-1.0), Vector2(size.x*(2.0*1.0-1.0), size.y*(2.0*1.0-1.0)), true) + + var fff : float = perlin(tf, size2, iterations, persistence, pseed); + + return Color(fff, fff, fff, 1) + diff --git a/game/addons/mat_maker_gd/nodes/common/noise_voronoi.gd b/game/addons/mat_maker_gd/nodes/common/noise_voronoi.gd new file mode 100644 index 0000000..9952e0a --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/noise_voronoi.gd @@ -0,0 +1,141 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#voronoi.mmg + +#voronoi_1, 2, 3, 4 -> different outputs + +#Outputs: + +#vec4 $(name_uv)_xyzw = voronoi($uv, vec2($scale_x, $scale_y), vec2($stretch_y, $stretch_x), $intensity, $randomness, $seed); + +#Nodes - float - A greyscale pattern based on the distance to cell centers +#$(name_uv)_xyzw.z + +#Borders - float - A greyscale pattern based on the distance to borders +#$(name_uv)_xyzw.w + +#Random color - rgb - A color pattern that assigns a random color to each cell +#rand3(fract(floor($(name_uv)_xyzw.xy)/vec2($scale_x, $scale_y))) + +#Fill - rgba - An output that should be plugged into a Fill companion node +#vec4(fract(($(name_uv)_xyzw.xy-1.0)/vec2($scale_x, $scale_y)), vec2(2.0)/vec2($scale_x, $scale_y)) + +#Inputs: + +#scale, min: 1, max: 32, step: 1, default: 4 +#stretch, min: 0.01, max: 1, step: 0.01, default: 1 +#intensity, min: 0, max: 1, step: 0.01, default: 0.75 +#randomness, min: 0, max: 1, step: 0.01, default: 1 + +#vec4 $(name_uv)_xyzw = voronoi($uv, vec2($scale_x, $scale_y), vec2($stretch_y, $stretch_x), $intensity, $randomness, $seed); + +#note this is newer than what I have TODO + +#// Based on https://www.shadertoy.com/view/ldl3W8 +#// The MIT License +#// Copyright © 2013 Inigo Quilez +#vec3 iq_voronoi(vec2 x, vec2 size, vec2 stretch, float randomness, vec2 seed) { +# vec2 n = floor(x); +# vec2 f = fract(x); +# vec2 mg, mr, mc; +# float md = 8.0; +# +# for (int j=-1; j<=1; j++) +# for (int i=-1; i<=1; i++) { +# vec2 g = vec2(float(i),float(j)); +# vec2 o = randomness*rand2(seed + mod(n + g + size, size)); +# vec2 c = g + o; +# vec2 r = c - f; +# vec2 rr = r*stretch; +# float d = dot(rr,rr); +# if (d0.00001) +# md = min(md, dot(0.5*(mr+r)*stretch, normalize((r-mr)*stretch))); +# } +# +# return vec3(md, mc+n); +#} +# +#vec4 voronoi(vec2 uv, vec2 size, vec2 stretch, float intensity, float randomness, float seed) { +# uv *= size; +# vec3 v = iq_voronoi(uv, size, stretch, randomness, rand2(vec2(seed, 1.0-seed))); +# return vec4(v.yz, intensity*length((uv-v.yz)*stretch), v.x); +#} + +static func voronoi(uv : Vector2, size : Vector2, stretch : Vector2, intensity : float, randomness : float, pseed : int) -> Color: + var seed2 : Vector2 = Commons.rand2(Vector2(float(pseed), 1.0-float(pseed))); + uv *= size; + var best_distance0 : float = 1.0; + var best_distance1 : float = 1.0; + var point0 : Vector2; + var point1 : Vector2; + var p0 : Vector2 = Commons.floorv2(uv); + + for dx in range(-1, 2):# (int dx = -1; dx < 2; ++dx) { + for dy in range(-1, 2):# (int dy = -1; dy < 2; ++dy) { + var d : Vector2 = Vector2(float(dx), float(dy)); + var p : Vector2 = p0+d; + + p += randomness * Commons.rand2(seed2 + Commons.modv2(p, size)); + var distance : float = (stretch * (uv - p) / size).length(); + + if (best_distance0 > distance): + best_distance1 = best_distance0; + best_distance0 = distance; + point1 = point0; + point0 = p; + elif (best_distance1 > distance): + best_distance1 = distance; + point1 = p; + + var edge_distance : float = (uv - 0.5*(point0+point1)).dot((point0-point1).normalized()); + + return Color(point0.x, point0.y, best_distance0 * (size).length() * intensity, edge_distance); + +#$(name_uv)_xyzw.z + +static func voronoi_1(uv : Vector2, size : Vector2, stretch : Vector2, intensity : float, randomness : float, pseed : int) -> Color: + var c : Color = voronoi(uv, size, stretch, intensity, randomness, pseed); + + return Color(c.b, c.b, c.b, 1) + +#$(name_uv)_xyzw.w + +static func voronoi_2(uv : Vector2, size : Vector2, stretch : Vector2, intensity : float, randomness : float, pseed : int) -> Color: + var c : Color = voronoi(uv, size, stretch, intensity, randomness, pseed); + + return Color(c.a, c.a, c.a, 1) + +#rand3(fract(floor($(name_uv)_xyzw.xy)/vec2($scale_x, $scale_y))) + +static func voronoi_3(uv : Vector2, size : Vector2, stretch : Vector2, intensity : float, randomness : float, pseed : int) -> Color: + var c : Color = voronoi(uv, size, stretch, intensity, randomness, pseed); + + var vv : Vector2 = Vector2(c.r, c.g) + + var v : Vector3 = Commons.rand3(Commons.fractv2(vv)); + + return Color(v.x, v.y, v.z, 1) + +#vec4(fract(($(name_uv)_xyzw.xy-1.0)/vec2($scale_x, $scale_y)), vec2(2.0)/vec2($scale_x, $scale_y)) + +#voronoi_4 todo diff --git a/game/addons/mat_maker_gd/nodes/common/noises.gd b/game/addons/mat_maker_gd/nodes/common/noises.gd new file mode 100644 index 0000000..7e2c854 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/noises.gd @@ -0,0 +1,122 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#color_noise.mmg + +#Outputs: + +#Output - (rgb) - Shows the noise pattern +#color_dots($(uv), 1.0/$(size), $(seed)) + +#Inputs: +#size, float, default: 8, min: 2, max: 12, step: 1 + +#---------------------- +#noise.mmg + +#Outputs: + +#float $(name)_f(vec2 uv) { +# return dots(uv, 1.0/$(size), $(density), $(seed)); +#} + +#Output - (float) - Shows the noise pattern +#$(name)_f($(uv)) + +#Inputs: +#grid_size, float, default: 4, min: 2, max: 12, step: 1 +#density, float, default: 0.5, min: 0, max: 1, step: 0.01 + +#---------------------- +#noise_anisotropic.mmg +#Generates x-axis interpolated value noise + +#Output: +#Output (float) - Shows a greyscale value noise +#anisotropic($(uv), vec2($(scale_x), $(scale_y)), $(seed), $(smoothness), $(interpolation)) + +#Input: +#scale, Vector2, min: 1, 1, max: 32, 1024, step: 1, 1, default 4, 256 +#smoothness, float, min: 0, max: 1, step: 0,01, default: 1 +#Interpolation, float, min: 0, max: 1, step: 0,01, default: 1 + +#float dots(vec2 uv, float size, float density, float seed) { +# vec2 seed2 = rand2(vec2(seed, 1.0-seed)); +# uv /= size; +# vec2 point_pos = floor(uv)+vec2(0.5); +# float color = step(rand(seed2+point_pos), density); +# return color; +#} + +static func dots(uv : Vector2, size : float, density : float, pseed : float) -> float: + var seed2 : Vector2 = Commons.rand2(Vector2(pseed, 1.0 - pseed)) + uv /= size + var point_pos : Vector2 = Commons.floorv2(uv) + Vector2(0.5, 0.5) + var color : float = Commons.step(Commons.rand2(seed2 + point_pos).x, density); + return color + +static func anisotropicc(uv : Vector2, size : Vector2, pseed : float, smoothness : float, interpolation : float) -> Color: + var v : float = anisotropic(uv, size, pseed, smoothness, interpolation) + + return Color(v, v, v, 1) + +#float anisotropic(vec2 uv, vec2 size, float seed, float smoothness, float interpolation) { +# vec2 seed2 = rand2(vec2(seed, 1.0-seed)); +# vec2 xy = floor(uv*size); +# vec2 offset = vec2(rand(seed2 + xy.y), 0.0); +# vec2 xy_offset = floor(uv * size + offset ); +# +# float f0 = rand(seed2+mod(xy_offset, size)); +# float f1 = rand(seed2+mod(xy_offset+vec2(1.0, 0.0), size)); +# float mixer = clamp( (fract(uv.x*size.x+offset.x) -.5) / smoothness + 0.5, 0.0, 1.0 ); +# float smooth_mix = smoothstep(0.0, 1.0, mixer); +# float linear = mix(f0, f1, mixer); +# float smoothed = mix(f0, f1, smooth_mix); +# +# return mix(linear, smoothed, interpolation); +#} + +static func anisotropic(uv : Vector2, size : Vector2, pseed : float, smoothness : float, interpolation : float) -> float: + var seed2 : Vector2 = Commons.rand2(Vector2(pseed, 1.0 - pseed)) + + var xy : Vector2 = Commons.floorv2(uv * size) + var s2xy : Vector2 = seed2 + s2xy.x += xy.y + s2xy.y += xy.y + + var offset : Vector2 = Vector2(Commons.rand(s2xy), 0.0) + var xy_offset : Vector2 = Commons.floorv2(uv * size + offset) + + var f0 : float = Commons.rand(seed2 + Commons.modv2(xy_offset, size)); + var f1 : float = Commons.rand(seed2 + Commons.modv2(xy_offset + Vector2(1.0, 0.0), size)) + var mixer : float = clamp((Commons.fract(uv.x * size.x + offset.x) - 0.5) / smoothness + 0.5, 0.0, 1.0) + var smooth_mix : float = smoothstep(0.0, 1.0, mixer) + var linear : float = lerp(f0, f1, mixer) + var smoothed : float = lerp(f0, f1, smooth_mix) + + return lerp(linear, smoothed, interpolation) + +#vec3 color_dots(vec2 uv, float size, float seed) { +# vec2 seed2 = rand2(vec2(seed, 1.0-seed)); +# uv /= size; +# vec2 point_pos = floor(uv)+vec2(0.5); +# return rand3(seed2+point_pos); +#} + +static func color_dots(uv : Vector2, size : float, pseed : float) -> Vector3: + var seed2 : Vector2 = Commons.rand2(Vector2(pseed, 1.0 - pseed)) + + uv /= size + + var point_pos : Vector2 = Commons.floorv2(uv) + Vector2(0.5, 0.5) + + return Commons.rand3(seed2 + point_pos) + +static func noise_color(uv : Vector2, size : float, pseed : float) -> Color: + var v : Vector3 = color_dots(uv, 1.0 / size, pseed) + + return Color(v.x, v.y, v.z, 1) + diff --git a/game/addons/mat_maker_gd/nodes/common/patterns.gd b/game/addons/mat_maker_gd/nodes/common/patterns.gd new file mode 100644 index 0000000..cbbd80e --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/patterns.gd @@ -0,0 +1,1170 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#beehive.mmg +#Outputs: (beehive_1c, beehive_2c, beehive_3c TODO make common code parameters) +#Common +#vec2 $(name_uv)_uv = $uv*vec2($sx, $sy*1.73205080757); +#vec4 $(name_uv)_center = beehive_center($(name_uv)_uv); + +#Output (float) - Shows the greyscale pattern +#1.0-2.0*beehive_dist($(name_uv)_center.xy) + +#Random color (rgb) - Shows a random color for each hexagonal tile +#rand3(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed))) + +#UV map (rgb) - Shows an UV map to be connected to the UV map port of the Custom UV node +#vec3(vec2(0.5)+$(name_uv)_center.xy, rand(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed)))) + +#Inputs: +#size, vector2, default: 2, min: 1, max: 64, step: 1 + +#---------------------- +#pattern.mmg +#Outputs: $(name)_fct($(uv)) + +#Combiner, enum, default: 0, values (CombinerType): Multiply, Add, Max, Min, Xor, Pow +#Pattern_x_type, enum, default: 5, values (CombinerAxisType): Sine, Triangle, Square, Sawtooth, Constant, Bounce +#Pattern_y_type, enum, default: 5, values (CombinerAxisType): Sine, Triangle, Square, Sawtooth, Constant, Bounce +#Pattern_Repeat, vector2, min: 0, max: 32, default:4, step: 1 + +#---------------------- +#bricks.mmg + +#Outputs: + +#Common +#vec4 $(name_uv)_rect = bricks_$pattern($uv, vec2($columns, $rows), $repeat, $row_offset); +#vec4 $(name_uv) = brick($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $round*$round_map($uv), max(0.001, $bevel*$bevel_map($uv))); + +#Bricks pattern (float) - A greyscale image that shows the bricks pattern +#$(name_uv).x + +#Random color (rgb) - A random color for each brick +#brick_random_color($(name_uv)_rect.xy, $(name_uv)_rect.zw, float($seed)) + +#Position.x (float) - The position of each brick along the X axis", +#$(name_uv).y + +#Position.y (float) - The position of each brick along the Y axis +#$(name_uv).z + +#Brick UV (rgb) - An UV map output for each brick, to be connected to the Map input of a CustomUV node +#brick_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, float($seed)) + +#Corner UV (rgb) - An UV map output for each brick corner, to be connected to the Map input of a CustomUV node +#brick_corner_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $corner, float($seed)) + +#Direction (float) - The direction of each brick (white: horizontal, black: vertical) +#0.5*(sign($(name_uv)_rect.z-$(name_uv)_rect.x-$(name_uv)_rect.w+$(name_uv)_rect.y)+1.0) + +#Inputs: +#type / Pattern, enum, default: 0, values: Running Bond,Running Bond (2),HerringBone,Basket Weave,Spanish Bond +#repeat, int, min: 1, max: 8, default: 1, step:1 +#rows, int, min: 1, max: 64, default: 6, step:1 +#columns, int, min: 1, max: 64, default: 6, step:1 +#offset, float, min: 0, max: 1, default: 0.5, step:0.01 +#mortar, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input) +#bevel, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input) +#round, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input) +#corner, float, min: 0, max: 0.5, default: 0.1, step:0.01 + +#---------------------- +#bricks_uneven.mmg + +#Outputs: + +#Common +#vec4 $(name_uv)_rect = bricks_uneven($uv, int($iterations), $min_size, $randomness, float($seed)); +#vec4 $(name_uv) = brick2($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $round*$round_map($uv), max(0.00001, $bevel*$bevel_map($uv))); + +#Bricks pattern (float) - A greyscale image that shows the bricks pattern +#$(name_uv).x + +#Random color (rgb) - A random color for each brick +#rand3(fract($(name_uv)_rect.xy)+rand2(vec2(float($seed)))) + +#Position.x (float) - The position of each brick along the X axis", +#$(name_uv).y + +#Position.y (float) - The position of each brick along the Y axis +#$(name_uv).z + +#Brick UV (rgb) - An UV map output for each brick, to be connected to the Map input of a CustomUV node +#brick_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, float($seed)) + +#Corner UV (rgb) - An UV map output for each brick corner, to be connected to the Map input of a CustomUV node +#brick_corner_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $corner, float($seed)) + +#Direction (float) - The direction of each brick (white: horizontal, black: vertical) +#0.5*(sign($(name_uv)_rect.z-$(name_uv)_rect.x-$(name_uv)_rect.w+$(name_uv)_rect.y)+1.0) + +#Inputs: +#iterations, int, min: 1, max: 16, default:8, step:1 +#min_size, float, min: 0, max: 0.5, default: 0.3, step:0.01 +#randomness, float, min: 0, max: 1, default: 0.5, step:0.01 +#mortar, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input) +#bevel, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input) +#round, float, min: 0, max: 0.5, default: 0.1, step:0.01 (universal input) +#corner, float, min: 0, max: 0.5, default: 0.1, step:0.01 + +#---------------------- +#runes.mmg (includes sdline.mmg) +#Generates a grid filled with random runes + +#Outputs: + +#Output (float) - A greyscale image showing random runes. +#Rune(vec2($columns, $rows)*$uv, float($seed)) + +#Inputs: +#size, vector2, default: 4, min: 2, max: 32, step: 1 + +#---------------------- +#scratches.mmg +#Draws white scratches on a black background + +#Outputs: + +#Output (float) - Shows white scratches on a black background +#scratches($uv, int($layers), vec2($length, $width), $waviness, $angle, $randomness, vec2(float($seed), 0.0)) + +#Inputs: + +#scratch_size (l, w), vector2, min: 0.1, max: 1, default: (0.25, 0.5), step:0.01 +#layers, float, min: 1, max: 10, default: 4, step:1 +#waviness, float, min: 0, max: 1, default: 0.5, step:0.01 +#angle, float, min: -180, max: 180, default: 0, step:1 +#randomness, float, min: 0, max: 1, default: 0.5, step:0.01 + +#---------------------- +#iching.mmg +#This node generates a grid of random I Ching hexagrams. + +#Outputs: + +#Output (float) - A greyscale image showing random I Ching hexagrams. +#IChing(vec2($columns, $rows)*$uv, float($seed)) + +#Inputs: +#size, vector2, default: 2, min: 2, max: 32, step: 1 + +#---------------------- +#weave.mmg + +#Outputs: + +#Output (float) - Shows the generated greyscale weave pattern. +#weave($uv, vec2($columns, $rows), $width*$width_map($uv)) + +#Inputs: +#size, vector2, default: 4, min: 2, max: 32, step: 1 +#width, float, min: 0, max: 1, default: 0.8, step:0.05 (universal input) + +#---------------------- +#weave2.mmg + +#code +#vec3 $(name_uv) = weave2($uv, vec2($columns, $rows), $stitch, $width_x*$width_map($uv), $width_y*$width_map($uv)); + +#Outputs: + +#Output (float) - Shows the generated greyscale weave pattern. +#$(name_uv).x + +#Horizontal mask (float) - Horizontal mask +#$(name_uv).y + +#Vertical mask (float) - Mask for vertical stripes +#$(name_uv).z + +#Inputs: +#size, vector2, default: 4, min: 2, max: 32, step: 1 +#width, vector2, default: 0.8, min: 0, max: 1, step: 0.05 +#stitch, float, min: 0, max: 10, default: 1, step:1 +#width_map, float, default: 1, (does not need input val (label)) (universal input) + +#---------------------- +#truchet.mmg + +#Outputs: + +#line: $shape = 1 +#circle: $shape = 2 + +#Output (float) - Shows a greyscale image of the truchet pattern. +#truchet$shape($uv*$size, vec2(float($seed))) + +#Inputs: +#shape, enum, default: 0, values: line, circle +#size, float, default: 4, min: 2, max: 64, step: 1 + +#---------------------- +#truchet_generic.mmg + +#Outputs: + +#Output (color) +#$in(truchet_generic_uv($uv*$size, vec2(float($seed)))) + +#Inputs: +#in, color, default: color(1.0) +#size, float, default: 4, min: 2, max: 64, step: 1 + +#---------------------- +#arc_pavement.mmg +#Draws a white shape on a black background + +# "code": "vec2 $(name_uv)_uv = fract($uv)*vec2($repeat, -1.0);\nvec2 $(name_uv)_seed;\nvec4 $(name_uv)_ap = arc_pavement($(name_uv)_uv, $rows, $bricks, $(name_uv)_seed);\n", +# "outputs": [ +# { +# "f": "pavement($(name_uv)_ap.zw, $bevel, 2.0*$mortar)", +# "longdesc": "A greyscale image that shows the bricks pattern", +# "shortdesc": "Bricks pattern", +# "type": "f" +# }, +# { +# "longdesc": "A random color for each brick", +# "rgb": "rand3($(name_uv)_seed)", +# "shortdesc": "Random color", +# "type": "rgb" +# }, +# { +# "longdesc": "An UV map output for each brick, to be connected to the Map input of a CustomUV node", +# "rgb": "vec3($(name_uv)_ap.zw, 0.0)", +# "shortdesc": "Brick UV", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 2, +# "label": "Repeat:", +# "longdesc": "The number of repetitions of the whole pattern", +# "max": 4, +# "min": 1, +# "name": "repeat", +# "shortdesc": "Repeat", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 8, +# "label": "Rows:", +# "longdesc": "The number of rows", +# "max": 16, +# "min": 4, +# "name": "rows", +# "shortdesc": "Rows", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 8, +# "label": "Bricks:", +# "longdesc": "The number of bricks per row", +# "max": 16, +# "min": 4, +# "name": "bricks", +# "shortdesc": "Bricks", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.1, +# "label": "Mortar:", +# "longdesc": "The width of the space between bricks", +# "max": 0.5, +# "min": 0, +# "name": "mortar", +# "shortdesc": "Mortar", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.1, +# "label": "Bevel:", +# "longdesc": "The width of the edge of each brick", +# "max": 0.5, +# "min": 0, +# "name": "bevel", +# "shortdesc": "Bevel", +# "step": 0.01, +# "type": "float" +# } +# ] + +#---------------------- +#sine_wave.mmg +#Draws a greyscale sine wave pattern + +#Outputs: +#Output, float, Shows a greyscale image of a sine wave +#1.0-abs(2.0*($uv.y-0.5)-$amplitude*sin(($frequency*$uv.x+$phase)*6.28318530718)) + +#Inputs: +#amplitude, float, min: 0, max: 1, step: 0.01, default: 0.5 +#frequency, float, min: 0, max: 16, default: 1 +#phase, float, min: 0, max: 1, step: 0.01, default: 0.5 + +enum CombinerAxisType { + SINE, + TRIANGLE, + SQUARE, + SAWTOOTH, + CONSTANT, + BOUNCE +} + +enum CombinerType { + MULTIPLY, + ADD, + MAX, + MIN, + XOR, + POW +} + +#"Sine,Triangle,Square,Sawtooth,Constant,Bounce" +#"Multiply,Add,Max,Min,Xor,Pow" + +#float $(name)_fct(vec2 uv) { +# return mix_$(mix)(wave_$(x_wave)($(x_scale)*uv.x), wave_$(y_wave)($(y_scale)*uv.y)); +#} + +static func pattern(uv : Vector2, x_scale : float, y_scale : float, ct : int, catx : int, caty : int) -> float: + var x : float = 0 + var y : float = 0 + + if catx == CombinerAxisType.SINE: + x = Commons.wave_sine(x_scale * uv.x) + elif catx == CombinerAxisType.TRIANGLE: + x = Commons.wave_triangle(x_scale * uv.x) + elif catx == CombinerAxisType.SQUARE: + x = Commons.wave_square(x_scale * uv.x) + elif catx == CombinerAxisType.SAWTOOTH: + x = Commons.wave_sawtooth(x_scale * uv.x) + elif catx == CombinerAxisType.CONSTANT: + x = Commons.wave_constant(x_scale * uv.x) + elif catx == CombinerAxisType.BOUNCE: + x = Commons.wave_bounce(x_scale * uv.x) + + if caty == CombinerAxisType.SINE: + y = Commons.wave_sine(y_scale * uv.y) + elif caty == CombinerAxisType.TRIANGLE: + y = Commons.wave_triangle(y_scale * uv.y) + elif caty == CombinerAxisType.SQUARE: + y = Commons.wave_square(y_scale * uv.y) + elif caty == CombinerAxisType.SAWTOOTH: + y = Commons.wave_sawtooth(y_scale * uv.y) + elif caty == CombinerAxisType.CONSTANT: + y = Commons.wave_constant(y_scale * uv.y) + elif caty == CombinerAxisType.BOUNCE: + y = Commons.wave_bounce(y_scale * uv.y) + + if ct == CombinerType.MULTIPLY: + return Commons.mix_mul(x, y) + elif ct == CombinerType.ADD: + return Commons.mix_add(x, y); + elif ct == CombinerType.MAX: + return Commons.mix_max(x, y); + elif ct == CombinerType.MIN: + return Commons.mix_min(x, y); + elif ct == CombinerType.XOR: + return Commons.mix_xor(x, y); + elif ct == CombinerType.POW: + return Commons.mix_pow(x, y); + + return 0.0 + + +#"Line,Circle" + +static func truchet1c(uv : Vector2, size : float, pseed : float) -> Color: + var f : float = truchet1(uv * size, Vector2(pseed, pseed)) + return Color(f, f, f, 1); + +#float truchet1(vec2 uv, vec2 seed) { +# vec2 i = floor(uv); +# vec2 f = fract(uv)-vec2(0.5); +# +# return 1.0-abs(abs((2.0*step(rand(i+seed), 0.5)-1.0)*f.x+f.y)-0.5); +#} + +static func truchet1(uv : Vector2, pseed : Vector2) -> float: + var i : Vector2 = Commons.floorv2(uv); + var f : Vector2 = Commons.fractv2(uv) - Vector2(0.5, 0.5); + + return 1.0 - abs(abs((2.0 * Commons.step(Commons.rand(i + pseed), 0.5) - 1.0) * f.x + f.y) - 0.5); + +static func truchet2c(uv : Vector2, size : float, pseed : float) -> Color: + var f : float = truchet2(uv * size, Vector2(pseed, pseed)) + return Color(f, f, f, 1); + +#float truchet2(vec2 uv, vec2 seed) { +# vec2 i = floor(uv); +# vec2 f = fract(uv); +# float random = step(rand(i+seed), 0.5); +# +# f.x *= 2.0*random-1.0; +# f.x += 1.0-random; +# +# return 1.0-min(abs(length(f)-0.5), abs(length(1.0-f)-0.5)); +#} + +static func truchet2(uv : Vector2, pseed : Vector2) -> float: + var i : Vector2 = Commons.floorv2(uv); + var f : Vector2 = Commons.fractv2(uv); + var random : float = Commons.step(Commons.rand(i + pseed), 0.5); + + f.x *= 2.0 * random - 1.0; + f.x += 1.0 - random; + + return 1.0 - min(abs(f.length() - 0.5), abs((Vector2(1, 1) - f).length() - 0.5)); + +static func weavec(uv : Vector2, count : Vector2, width : float) -> Color: + var f : float = weave(uv, count, width); + + return Color(f, f, f, 1) + +#float weave(vec2 uv, vec2 count, float width) { +# uv *= count; +# float c = (sin(3.1415926*(uv.x+floor(uv.y)))*0.5+0.5)*step(abs(fract(uv.y)-0.5), width*0.5); +# c = max(c, (sin(3.1415926*(1.0+uv.y+floor(uv.x)))*0.5+0.5)*step(abs(fract(uv.x)-0.5), width*0.5)); +# return c; +#} + +static func weave(uv : Vector2, count : Vector2, width : float) -> float: + uv *= count; + var c : float = (sin(3.1415926* (uv.x + floor(uv.y)))*0.5+0.5)*Commons.step(abs(Commons.fract(uv.y)-0.5), width*0.5); + c = max(c, (sin(3.1415926*(1.0+uv.y+floor(uv.x)))*0.5+0.5)*Commons.step(abs(Commons.fract(uv.x)-0.5), width*0.5)); + return c; + +#vec3 weave2(vec2 uv, vec2 count, float stitch, float width_x, float width_y) { +# uv *= stitch; +# uv *= count; +# float c1 = (sin(3.1415926 / stitch * (uv.x + floor(uv.y) - (stitch - 1.0))) * 0.25 + 0.75 ) *step(abs(fract(uv.y)-0.5), width_x*0.5); +# float c2 = (sin(3.1415926 / stitch * (1.0+uv.y+floor(uv.x) ))* 0.25 + 0.75 )*step(abs(fract(uv.x)-0.5), width_y*0.5); +# return vec3(max(c1, c2), 1.0-step(c1, c2), 1.0-step(c2, c1)); +#} + +static func weave2(uv : Vector2, count : Vector2, stitch : float, width_x : float, width_y : float) -> Vector3: + uv.x *= stitch + uv.y *= stitch + uv *= count + + var c1 : float = (sin(3.1415926 / stitch * (uv.x + floor(uv.y) - (stitch - 1.0))) * 0.25 + 0.75 ) * Commons.step(abs(Commons.fract(uv.y) - 0.5), width_x * 0.5); + var c2 : float = (sin(3.1415926 / stitch * (1.0 + uv.y + floor(uv.x) ))* 0.25 + 0.75 ) * Commons.step(abs(Commons.fract(uv.x)-0.5), width_y * 0.5); + + return Vector3(max(c1, c2), 1.0 - Commons.step(c1, c2), 1.0 - Commons.step(c2, c1)); + +static func sinewavec(uv : Vector2, amplitude : float, frequency : float, phase : float) -> Color: + var f : float = 1.0- abs(2.0 * (uv.y-0.5) - amplitude * sin((frequency* uv.x + phase) * 6.28318530718)); + + return Color(f, f, f, 1) + +static func sinewavef(uv : Vector2, amplitude : float, frequency : float, phase : float) -> float: + return 1.0- abs(2.0 * (uv.y-0.5) - amplitude * sin((frequency* uv.x + phase) * 6.28318530718)); + +#float scratch(vec2 uv, vec2 size, float waviness, float angle, float randomness, vec2 seed) { +# float subdivide = floor(1.0/size.x); +# float cut = size.x*subdivide; +# +# uv *= subdivide; +# +# vec2 r1 = rand2(floor(uv)+seed); +# vec2 r2 = rand2(r1); +# +# uv = fract(uv); +# vec2 border = 10.0*min(fract(uv), 1.0-fract(uv)); +# uv = 2.0*uv-vec2(1.0); +# +# float a = 6.28318530718*(angle+(r1.x-0.5)*randomness); +# float c = cos(a); +# float s = sin(a); +# +# uv = vec2(c*uv.x+s*uv.y, s*uv.x-c*uv.y); +# uv.y += 2.0*r1.y-1.0; +# uv.y += 0.5*waviness*cos(2.0*uv.x+6.28318530718*r2.y); +# uv.x /= cut; +# uv.y /= subdivide*size.y; +# +# return min(border.x, border.y)*(1.0-uv.x*uv.x)*max(0.0, 1.0-1000.0*uv.y*uv.y); +#} + +static func scratch(uv : Vector2, size : Vector2, waviness : float, angle : float, randomness : float, pseed : Vector2) -> float: + var subdivide : float = floor(1.0/size.x); + var cut : float = size.x*subdivide; + uv *= subdivide; + var r1 : Vector2 = Commons.rand2(Commons.floorv2(uv) + pseed); + var r2 : Vector2 = Commons.rand2(r1); + uv = Commons.fractv2(uv); + uv = 2.0 * uv - Vector2(1, 1); + + var a : float = 6.28*(angle+(r1.x-0.5)*randomness); + var c : float = cos(a); + var s : float = sin(a); + + uv = Vector2(c*uv.x+s*uv.y, s*uv.x-c*uv.y); + uv.y += 2.0*r1.y-1.0; + uv.y += 0.5*waviness*cos(2.0*uv.x+6.28*r2.y); + uv.x /= cut; + uv.y /= subdivide*size.y; + + return (1.0-uv.x*uv.x)*max(0.0, 1.0-1000.0*uv.y*uv.y); + +#float scratches(vec2 uv, int layers, vec2 size, float waviness, float angle, float randomness, vec2 seed) { +# float v = 0.0; +# +# for (int i = 0; i < layers; ++i) { +# seed = rand2(seed); +# v = max(v, scratch(fract(uv+seed), size, waviness, angle/360.0, randomness, seed)); +# } +# +# return v; +#} + +static func scratches(uv : Vector2, layers : int, size : Vector2, waviness : float, angle : float, randomness : float, pseed : Vector2) -> float: + var v : float = 0.0; + + for i in range(layers):# (int i = 0; i < layers; ++i) { + pseed = Commons.rand2(pseed); + v = max(v, scratch(Commons.fractv2(uv + pseed), size, waviness, angle/360.0, randomness, pseed)); + + return v; + +static func scratchesc(uv : Vector2, layers : int, size : Vector2, waviness : float, angle : float, randomness : float, pseed : Vector2) -> Color: + var f : float = scratches(uv, layers, size, waviness, angle, randomness, pseed) + + return Color(f, f, f, 1) + +static func runesc(uv : Vector2, col_row : Vector2, pseed : float) -> Color: + var f : float = rune(col_row * uv, pseed); + + return Color(f, f, f, 1) + +static func runesf(uv : Vector2, col_row : Vector2, pseed : float) -> float: + return rune(col_row * uv, pseed); + +#sdline.mmg +#vec2 sdLine(vec2 p, vec2 a, vec2 b) { +# vec2 pa = p-a, ba = b-a; +# float h = clamp(dot(pa,ba)/dot(ba,ba), 0.0, 1.0); +# +# return vec2(length(pa-ba*h), h); +#} + +#float ThickLine(vec2 uv, vec2 posA, vec2 posB, float radiusInv){ +# return clamp(1.1-20.0*sdLine(uv, posA, posB).x, 0.0, 1.0); +#} + +#// makes a rune in the 0..1 uv space. Seed is which rune to draw. +#// passes back gray in x and derivates for lighting in yz +#float Rune(vec2 uv, float s) { +# float finalLine = 0.0; +# vec2 seed = floor(uv)-rand2(vec2(s)); +# uv = fract(uv); +# +# for (int i = 0; i < 4; i++) // number of strokes +# { +# vec2 posA = rand2(floor(seed+0.5)); +# vec2 posB = rand2(floor(seed+1.5)); +# seed += 2.0; +# // expand the range and mod it to get a nicely distributed random number - hopefully. :) +# posA = fract(posA * 128.0); +# posB = fract(posB * 128.0); +# // each rune touches the edge of its box on all 4 sides +# +# if (i == 0) posA.y = 0.0; +# if (i == 1) posA.x = 0.999; +# if (i == 2) posA.x = 0.0; +# if (i == 3) posA.y = 0.999; +# +# // snap the random line endpoints to a grid 2x3 +# vec2 snaps = vec2(2.0, 3.0); +# posA = (floor(posA * snaps) + 0.5) / snaps; // + 0.5 to center it in a grid cell +# posB = (floor(posB * snaps) + 0.5) / snaps; +# +# //if (distance(posA, posB) < 0.0001) continue; +# // eliminate dots. +# // Dots (degenerate lines) are not cross-GPU safe without adding 0.001 - divide by 0 error. +# finalLine = max(finalLine, ThickLine(uv, posA, posB + 0.001, 20.0)); +# } +# +# return finalLine; +#} + +# makes a rune in the 0..1 uv space. Seed is which rune to draw. +# passes back gray in x and derivates for lighting in yz +static func rune(uv : Vector2, pseed : float) -> float: + var finalLine : float = 0.0; + var sseed : Vector2 = Commons.floorv2(uv) - Vector2(pseed, pseed); + + uv = Commons.fractv2(uv); + + for i in range(4):# (int i = 0; i < 4; i++): # // number of strokes + var posA : Vector2 = Commons.rand2(Commons.floorv2(sseed + Vector2(0.5, 0.5))); + var posB : Vector2 = Commons.rand2(Commons.floorv2(sseed + Vector2(1.5, 1.5))); + sseed.x += 2.0; + sseed.y += 2.0; + + # expand the range and mod it to get a nicely distributed random number - hopefully. :) + + posA = Commons.fractv2(posA * 128.0); + posB = Commons.fractv2(posB * 128.0); + + # each rune touches the edge of its box on all 4 sides + if (i == 0): + posA.y = 0.0; + + if (i == 1): + posA.x = 0.999; + + if (i == 2): + posA.x = 0.0; + + if (i == 3): + posA.y = 0.999; + + # snap the random line endpoints to a grid 2x3 + + var snaps : Vector2 = Vector2(2.0, 3.0); + + posA = (Commons.floorv2(posA * snaps) + Vector2(0.5, 0.5)) / snaps; # + 0.5 to center it in a grid cell + posB = (Commons.floorv2(posB * snaps) + Vector2(0.5, 0.5)) / snaps; + + #if (distance(posA, posB) < 0.0001) continue; // eliminate dots. + # Dots (degenerate lines) are not cross-GPU safe without adding 0.001 - divide by 0 error. + + finalLine = max(finalLine, Commons.ThickLine(uv, posA, posB + Vector2(0.001, 0.001), 20.0)); + + return finalLine; + +static func IChingc(uv : Vector2, row_col : Vector2, pseed : int) -> Color: + var f : float = IChing(row_col * uv, float(pseed)); + + return Color(f, f, f, 1) + +#float IChing(vec2 uv, float seed) { +# int value = int(32.0*rand(floor(uv)+vec2(seed))); +# float base = step(0.5, fract(fract(uv.y)*6.5))*step(0.04, fract(uv.y+0.02))*step(0.2, fract(uv.x+0.1)); +# int bit = int(fract(uv.y)*6.5); +# +# return base*step(0.1*step(float(bit & value), 0.5), fract(uv.x+0.55)); +#} + +static func IChing(uv : Vector2, pseed : float) -> float: + var value : int = int(32.0 * Commons.rand(Commons.floorv2(uv) + Vector2(pseed, pseed))); + var base : float = Commons.step(0.5, Commons.fract(Commons.fract(uv.y)*6.5))*Commons.step(0.04, Commons.fract(uv.y+0.02)) * Commons.step(0.2, Commons.fract(uv.x+0.1)); + var bit : int = int(Commons.fract(uv.y)*6.5); + + return base * Commons.step(0.1*Commons.step(float(bit & value), 0.5), Commons.fract(uv.x+0.55)); + +#Beehive output 1 +#Shows the greyscale pattern +#vec2 $(name_uv)_uv = $uv*vec2($sx, $sy*1.73205080757); +#vec4 $(name_uv)_center = beehive_center($(name_uv)_uv); +#1.0-2.0*beehive_dist($(name_uv)_center.xy) + +static func beehive_1c(uv : Vector2, size : Vector2, pseed : int) -> Color: + var o80035_0_uv : Vector2 = uv * Vector2(size.x, size.y * 1.73205080757); + var center : Color = beehive_center(o80035_0_uv); + + var f : float = 1.0 - 2.0 * beehive_dist(Vector2(center.r, center.g)); + + return Color(f, f, f, 1) + +#Beehive output 2 +#Shows a random color for each hexagonal tile +#vec2 $(name_uv)_uv = $uv*vec2($sx, $sy*1.73205080757); +#vec4 $(name_uv)_center = beehive_center($(name_uv)_uv); +#rand3(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed))) + +static func beehive_2c(uv : Vector2, size : Vector2, pseed : int) -> Color: + var o80035_0_uv : Vector2 = uv * Vector2(size.x, size.y * 1.73205080757); + var center : Color = beehive_center(o80035_0_uv); + + var f : float = 1.0 - 2.0 * beehive_dist(Vector2(center.r, center.g)); + + var v : Vector3 = Commons.rand3(Commons.fractv2(Vector2(center.b, center.a) / Vector2(size.x, size.y)) + Vector2(float(pseed),float(pseed))); + + return Color(v.x, v.y, v.z, 1) + +#Beehive output 3 +#Shows an UV map to be connected to the UV map port of the Custom UV node +#vec3(vec2(0.5)+$(name_uv)_center.xy, rand(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed)))) +#vec2 $(name_uv)_uv = $uv*vec2($sx, $sy*1.73205080757); +#vec4 $(name_uv)_center = beehive_center($(name_uv)_uv); + +static func beehive_3c(uv : Vector2, size : Vector2, pseed : int) -> Color: + var o80035_0_uv : Vector2 = uv * Vector2(size.x, size.y * 1.73205080757); + var center : Color = beehive_center(o80035_0_uv); + + #var f : float = 1.0 - 2.0 * beehive_dist(Vector2(center.r, center.g)); + + var v1 : Vector2 = Vector2(0.5, 0.5) + Vector2(center.r, center.g) + var ff : float = Commons.rand(Commons.fractv2(Vector2(center.b, center.a) / Vector2(size.x, size.y)) + Vector2(float(pseed), float(pseed))) + + var c : Color = Color(v1.x, v1.y, ff, ff); + + return c + +#float beehive_dist(vec2 p){ +# ec2 s = vec2(1.0, 1.73205080757); +# p = abs(p); +# return max(dot(p, s*.5), p.x); +#} + +static func beehive_dist(p : Vector2) -> float: + var s : Vector2 = Vector2(1.0, 1.73205080757); + + p = Commons.absv2(p); + + return max(p.dot(s*.5), p.x); + +#vec4 beehive_center(vec2 p) { +# vec2 s = vec2(1.0, 1.73205080757); +# vec4 hC = floor(vec4(p, p - vec2(.5, 1)) / vec4(s,s)) + .5; +# vec4 h = vec4(p - hC.xy*s, p - (hC.zw + .5)*s); +# return dot(h.xy, h.xy) Color: + var s : Vector2 = Vector2(1.0, 1.73205080757); + + var hC : Color = Color(p.x, p.y, p.x - 0.5, p.y - 1) / Color(s.x, s.y, s.x, s.y); + + hC = Commons.floorc(Color(p.x, p.y, p.x - 0.5, p.y - 1) / Color(s.x, s.y, s.x, s.y)) + Color(0.5, 0.5, 0.5, 0.5); + + var v1 : Vector2 = Vector2(p.x - hC.r * s.x, p.y - hC.g * s.y) + var v2 : Vector2 = Vector2(p.x - (hC.b + 0.5) * s.x, p.y - (hC.a + 0.5) * s.y) + + var h : Color = Color(v1.x, v1.y, v2.x, v2.y); + + if Vector2(h.r, h.g).dot(Vector2(h.r, h.g)) < Vector2(h.b, h.a).dot(Vector2(h.b, h.a)): + return Color(h.r, h.g, hC.r, hC.g) + else: + return Color(h.b, h.a, hC.b + 9.73, hC.a + 9.73) + + #return dot(h.xy, h.xy) < dot(h.zw, h.zw) ? Color(h.xy, hC.xy) : Color(h.zw, hC.zw + 9.73); + +#vec3 brick_corner_uv(vec2 uv, vec2 bmin, vec2 bmax, float mortar, float corner, float seed) { +# vec2 center = 0.5*(bmin + bmax); +# vec2 size = bmax - bmin; +# +# float max_size = max(size.x, size.y); +# float min_size = min(size.x, size.y); +# +# mortar *= min_size; +# corner *= min_size; +# +# return vec3(clamp((0.5*size-vec2(mortar)-abs(uv-center))/corner, vec2(0.0), vec2(1.0)), rand(fract(center)+vec2(seed)+ceil(vec2(uv-center)))); +#} + +static func brick_corner_uv(uv : Vector2, bmin : Vector2, bmax : Vector2, mortar : float, corner : float, pseed : float) -> Vector3: + var center : Vector2 = 0.5 * (bmin + bmax) + var size : Vector2 = bmax - bmin + var max_size : float = max(size.x, size.y) + var min_size : float = min(size.x, size.y) + mortar *= min_size + corner *= min_size + + var r : Vector3 = Vector3() + + r.x = clamp(((0.5 * size.x - mortar) - abs(uv.x - center.x)) / corner, 0, 1) + r.y = clamp(((0.5 * size.y - mortar) - abs(uv.y - center.y)) / corner, 0, 1) + r.z = Commons.rand(Commons.fractv2(center) + Vector2(pseed, pseed)) + + return r + +# return vec3(clamp((0.5*size-vec2(mortar)-abs(uv-center))/corner, vec2(0.0), vec2(1.0)), rand(fract(center)+vec2(seed))); + +#vec4 brick(vec2 uv, vec2 bmin, vec2 bmax, float mortar, float round, float bevel) { +# float color; +# vec2 size = bmax - bmin; +# float min_size = min(size.x, size.y); +# +# mortar *= min_size; +# bevel *= min_size; +# round *= min_size; +# vec2 center = 0.5*(bmin+bmax); +# vec2 d = abs(uv-center)-0.5*(size)+vec2(round+mortar); +# +# color = length(max(d,vec2(0))) + min(max(d.x,d.y),0.0)-round; +# color = clamp(-color/bevel, 0.0, 1.0); +# vec2 tiled_brick_pos = mod(bmin, vec2(1.0, 1.0)); +# +# return vec4(color, center, tiled_brick_pos.x+7.0*tiled_brick_pos.y); +#} + +static func brick(uv : Vector2, bmin : Vector2, bmax : Vector2, mortar : float, pround : float, bevel : float) -> Color: + var color : float + var size : Vector2 = bmax - bmin + + var min_size : float = min(size.x, size.y) + mortar *= min_size + bevel *= min_size + pround *= min_size + + var center : Vector2 = 0.5 * (bmin + bmax) + var d : Vector2 = Vector2() + + d.x = abs(uv.x - center.x) - 0.5 * (size.x) + (pround + mortar) + d.y = abs(uv.y - center.y) - 0.5 * (size.y) + (pround + mortar) + + color = Vector2(max(d.x, 0), max(d.y, 0)).length() + min(max(d.x, d.y), 0.0) - pround + + color = clamp(-color / bevel, 0.0, 1.0) + +# var tiled_brick_pos : Vector2 = Vector2(bmin.x - 1.0 * floor(bmin.x / 1.0), bmin.y - 1.0 * floor(bmin.y / 1.0)) + + var tiled_brick_pos_x : float = bmin.x - 1.0 * floor(bmin.x / 1.0) + var tiled_brick_pos_y : float = bmin.y - 1.0 * floor(bmin.y / 1.0) + + #vec2 tiled_brick_pos = mod(bmin, vec2(1.0, 1.0)); + + return Color(color, center.x, center.y, tiled_brick_pos_x + 7.0 * tiled_brick_pos_y) + +#vec3 brick_random_color(vec2 bmin, vec2 bmax, float seed) { +# vec2 center = 0.5*(bmin + bmax); +# return rand3(fract(center + vec2(seed))); +#} + +static func brick_random_color(bmin : Vector2, bmax : Vector2, pseed : float) -> Vector3: + var center : Vector2 = (bmin + bmax) + center.x *= 0.5 + center.y *= 0.5 + + return Commons.rand3(Commons.fractv2(center + Vector2(pseed, pseed))); + +#vec3 brick_uv(vec2 uv, vec2 bmin, vec2 bmax, float seed) { +# vec2 center = 0.5*(bmin + bmax); +# vec2 size = bmax - bmin; +# +# float max_size = max(size.x, size.y); +# +# return vec3(0.5+(uv-center)/max_size, rand(fract(center)+vec2(seed))); +#} + +static func brick_uv(uv : Vector2, bmin : Vector2, bmax : Vector2, pseed : float) -> Vector3: + var center : Vector2 = 0.5 * (bmin + bmax) + var size : Vector2 = bmax - bmin + var max_size : float = max(size.x, size.y) + + var x : float = 0.5+ (uv.x - center.x) / max_size + var y : float = 0.5+ (uv.y - center.y) /max_size + + return Vector3(x, y, Commons.rand(Commons.fractv2(center) + Vector2(pseed, pseed))) + +#vec4 bricks_rb(vec2 uv, vec2 count, float repeat, float offset) { +# count *= repeat;float x_offset = offset*step(0.5, fract(uv.y*count.y*0.5)); +# +# vec2 bmin = floor(vec2(uv.x*count.x-x_offset, uv.y*count.y)); +# +# bmin.x += x_offset; +# bmin /= count; +# +# return vec4(bmin, bmin+vec2(1.0)/count); +#} + +static func bricks_rb(uv : Vector2, count : Vector2, repeat : float, offset : float) -> Color: + count *= repeat + + var x_offset : float = offset * Commons.step(0.5, Commons.fractf(uv.y * count.y * 0.5)) + + var bmin : Vector2 + bmin.x = floor(uv.x * count.x - x_offset) + bmin.y = floor(uv.y * count.y) + + bmin.x += x_offset; + bmin /= count + var bmc : Vector2 = bmin + Vector2(1.0, 1.0) / count + + return Color(bmin.x, bmin.y, bmc.x, bmc.y) + +#vec4 bricks_rb2(vec2 uv, vec2 count, float repeat, float offset) { +# count *= repeat; +# +# float x_offset = offset*step(0.5, fract(uv.y*count.y*0.5)); +# count.x = count.x*(1.0+step(0.5, fract(uv.y*count.y*0.5))); +# +# vec2 bmin = floor(vec2(uv.x*count.x-x_offset, uv.y*count.y)); +# +# bmin.x += x_offset; +# bmin /= count; +# +# return vec4(bmin, bmin+vec2(1.0)/count); +#} + +static func bricks_rb2(uv : Vector2, count : Vector2, repeat : float, offset : float) -> Color: + count *= repeat + + var x_offset : float = offset * Commons.step(0.5, Commons.fractf(uv.y * count.y * 0.5)) + count.x = count.x * (1.0+Commons.step(0.5, Commons.fractf(uv.y * count.y * 0.5))) + var bmin : Vector2 = Vector2() + + bmin.x = floor(uv.x * count.x - x_offset) + bmin.y = floor(uv.y * count.y) + + bmin.x += x_offset + bmin /= count + + var b : Vector2 = bmin + Vector2(1, 1) / count + + return Color(bmin.x, bmin.y, b.x, b.y) + +#vec4 bricks_hb(vec2 uv, vec2 count, float repeat, float offset) { +# float pc = count.x+count.y; +# float c = pc*repeat; +# vec2 corner = floor(uv*c); +# float cdiff = mod(corner.x-corner.y, pc); +# +# if (cdiff < count.x) { +# return vec4((corner-vec2(cdiff, 0.0))/c, (corner-vec2(cdiff, 0.0)+vec2(count.x, 1.0))/c); +# } else { +# return vec4((corner-vec2(0.0, pc-cdiff-1.0))/c, (corner-vec2(0.0, pc-cdiff-1.0)+vec2(1.0, count.y))/c); +# } +#} + +static func bricks_hb(uv : Vector2, count : Vector2, repeat : float, offset : float) -> Color: + var pc : float = count.x + count.y + var c : float = pc * repeat + + var corner : Vector2 = Vector2(floor(uv.x * c), floor(uv.y * c)) + var cdiff : float = Commons.modf(corner.x - corner.y, pc) + + if (cdiff < count.x): + var col : Color = Color() + + col.r = (corner.x - cdiff) / c + col.g = corner.y / c + + col.b = (corner.x - cdiff + count.x) / c + col.a = (corner.y + 1.0) / c + + return col + else: + var col : Color = Color() + + col.r = corner.x / c + col.g = (corner.y - (pc - cdiff - 1.0)) / c + + col.b = (corner.x + 1.0) / c + col.a = (corner.y - (pc - cdiff - 1.0) + count.y) / c + + return col + +#vec4 bricks_bw(vec2 uv, vec2 count, float repeat, float offset) { +# vec2 c = 2.0*count*repeat; +# float mc = max(c.x, c.y); +# vec2 corner1 = floor(uv*c); +# vec2 corner2 = count*floor(repeat*2.0*uv); +# float cdiff = mod(dot(floor(repeat*2.0*uv), vec2(1.0)), 2.0); +# vec2 corner; +# vec2 size; +# +# if (cdiff == 0.0) { +# orner = vec2(corner1.x, corner2.y); +# size = vec2(1.0, count.y); +# } else { +# corner = vec2(corner2.x, corner1.y); +# size = vec2(count.x, 1.0); +# } +# +# return vec4(corner/c, (corner+size)/c); +#} + +static func bricks_bw(uv : Vector2, count : Vector2, repeat : float, offset : float) -> Color: + var c : Vector2 = 2.0 * count * repeat + var mc : float = max(c.x, c.y) + var corner1 : Vector2 = Vector2(floor(uv.x * c.x), floor(uv.y * c.y)) + var corner2 : Vector2 = Vector2(count.x * floor(repeat* 2.0 * uv.x), count.y * floor(repeat * 2.0 * uv.y)) + + var tmp : Vector2 = Vector2(floor(repeat * 2.0 * uv.x), floor(repeat * 2.0 * uv.y)) + var cdiff : float = Commons.modf(tmp.dot(Vector2(1, 1)), 2.0) + + var corner : Vector2 + var size : Vector2 + + if cdiff == 0: + corner = Vector2(corner1.x, corner2.y) + size = Vector2(1.0, count.y) + else: + corner = Vector2(corner2.x, corner1.y) + size = Vector2(count.x, 1.0) + + return Color(corner.x / c.x, corner.y / c.y, (corner.x + size.x) / c.x, (corner.y + size.y) / c.y) + +#vec4 bricks_sb(vec2 uv, vec2 count, float repeat, float offset) { +# vec2 c = (count+vec2(1.0))*repeat; +# float mc = max(c.x, c.y); +# vec2 corner1 = floor(uv*c); +# vec2 corner2 = (count+vec2(1.0))*floor(repeat*uv); +# vec2 rcorner = corner1 - corner2; +# vec2 corner; +# vec2 size; +# +# if (rcorner.x == 0.0 && rcorner.y < count.y) { +# corner = corner2; +# size = vec2(1.0, count.y); +# } else if (rcorner.y == 0.0) { +# corner = corner2+vec2(1.0, 0.0); +# size = vec2(count.x, 1.0); +# } else if (rcorner.x == count.x) { +# corner = corner2+vec2(count.x, 1.0); +# size = vec2(1.0, count.y); +# } else if (rcorner.y == count.y) { +# corner = corner2+vec2(0.0, count.y); +# size = vec2(count.x, 1.0); +# } else { +# corner = corner2+vec2(1.0); +# size = vec2(count.x-1.0, count.y-1.0); +# } +# +# return vec4(corner/c, (corner+size)/c); +#} + +static func bricks_sb(uv : Vector2, count : Vector2, repeat : float, offset : float) -> Color: + var c : Vector2 = (count + Vector2(1, 1)) * repeat + var mc : float = max(c.x, c.y) + var corner1 : Vector2 = Vector2(floor(uv.x * c.x), floor(uv.y * c.y)) + var corner2 : Vector2 = (count + Vector2(1, 1)) * Vector2(floor(repeat * uv.x), floor(repeat * uv.y)) + var rcorner : Vector2 = corner1 - corner2 + + var corner : Vector2 + var size : Vector2 + + if (rcorner.x == 0.0 && rcorner.y < count.y): + corner = corner2 + size = Vector2(1.0, count.y) + elif (rcorner.y == 0.0): + corner = corner2 + Vector2(1.0, 0.0) + size = Vector2(count.x, 1.0) + elif (rcorner.x == count.x): + corner = corner2 + Vector2(count.x, 1.0) + size = Vector2(1.0, count.y) + elif (rcorner.y == count.y): + corner = corner2 + Vector2(0.0, count.y) + size = Vector2(count.x, 1.0) + else: + corner = corner2 + Vector2(1, 1) + size = Vector2(count.x-1.0, count.y-1.0) + + return Color(corner.x / c.x, corner.y / c.y, (corner.x + size.x) / c.x, (corner.y + size.y) / c.y) + +#vec4 brick2(vec2 uv, vec2 bmin, vec2 bmax, float mortar, float round, float bevel) { +# float color; +# vec2 size = bmax - bmin; +# vec2 center = 0.5*(bmin+bmax); +# vec2 d = abs(uv-center)-0.5*(size)+vec2(round+mortar); +# +# color = length(max(d,vec2(0))) + min(max(d.x,d.y),0.0)-round; +# color = clamp(-color/bevel, 0.0, 1.0); +# +# vec2 tiled_brick_pos = mod(bmin, vec2(1.0, 1.0)); +# +# return vec4(color, center, tiled_brick_pos.x+7.0*tiled_brick_pos.y); +#} + +static func brick2(uv : Vector2, bmin : Vector2, bmax : Vector2, mortar : float, pround : float, bevel : float) -> Color: + return Color() + +#vec4 bricks_uneven(vec2 uv, int iterations, float min_size, float randomness, float seed) { +# vec2 a = vec2(0.0); +# vec2 b = vec2(1.0); +# for (int i = 0; i < iterations; ++i) { +# vec2 size = b-a; +# if (max(size.x, size.y) < min_size) { +# break; +# } +# +# float x = rand(rand2(vec2(rand(a+b), seed)))*randomness+(1.0-randomness)*0.5; +# +# if (size.x > size.y) { +# x *= size.x; +# +# if (uv.x > a.x+x) { +# a.x += x; +# } else { +# b.x = a.x + x; +# } +# } else { +# x *= size.y; +# +# if (uv.y > a.y+x) { +# a.y += x; +# } else { +# b.y = a.y + x; +# } +# } +# } +# +# return vec4(a, b); +#} + +static func bricks_uneven(uv : Vector2, iterations : int, min_size : float, randomness : float, pseed : float) -> Color: + return Color() + + +#vec2 truchet_generic_uv(vec2 uv, vec2 seed) { +# vec2 i = floor(uv); +# vec2 f = fract(uv); +# vec2 invert = step(rand2(seed+i), vec2(0.5)); +# +# return f*(vec2(1.0)-invert)+(vec2(1.0)-f)*invert; +#} + +static func truchet_generic_uv(uv : Vector2, pseed : float) -> Vector2: + return Vector2() + + +#float pavement(vec2 uv, float bevel, float mortar) {\n\t +# uv = abs(uv-vec2(0.5));\n\t +# +# return clamp((0.5*(1.0-mortar)-max(uv.x, uv.y))/max(0.0001, bevel), 0.0, 1.0); +#} + +#vec4 arc_pavement(vec2 uv, float acount, float lcount, out vec2 seed) {\n\t +# float PI = 3.141592654;\n\t +# float radius = (0.5/sqrt(2.0));\n +# float uvx = uv.x;\n +# uv.x = 0.5*fract(uv.x+0.5)+0.25;\n +# float center = (uv.x-0.5)/radius;\n +# center *= center;\n +# center = floor(acount*(uv.y-radius*sqrt(1.0-center))+0.5)/acount;\n +# +# vec2 v = uv-vec2(0.5, center);\n +# float cornerangle = 0.85/acount+0.25*PI;\n +# float acountangle = (PI-2.0*cornerangle)/(lcount+floor(mod(center*acount, 2.0)));\n +# float angle = mod(atan(v.y, v.x), 2.0*PI);\n\t +# +# float base_angle;\n\t +# float local_uvy = 0.5+acount*(length(v)-radius)*(1.54-0.71*cos(1.44*(angle-PI*0.5)));\n\t +# vec2 local_uv;\n +# +# if (angle < cornerangle) {\n +# base_angle = 0.25*PI;\n\t\t +# local_uv = vec2((angle-0.25*PI)/cornerangle*0.38*acount+0.5, 1.0-local_uvy);\n\t\t +# seed = vec2(fract(center), 0.0);\n +# } else if (angle > PI-cornerangle) {\n +# base_angle = 0.75*PI;\n\t\t +# local_uv = vec2(local_uvy, 0.5-(0.75*PI-angle)/cornerangle*0.38*acount);\n\t\t +# seed = vec2(fract(center), 0.0);\n +# } else {\n +# base_angle = cornerangle+(floor((angle-cornerangle)/acountangle)+0.5)*acountangle;\n\t\t +# local_uv = vec2((angle-base_angle)/acountangle+0.5, 1.0-local_uvy);\n\t\t +# seed = vec2(fract(center), base_angle);\n +# }\n +# +# vec2 brick_center = vec2(0.5, center)+radius*vec2(cos(base_angle), sin(base_angle));\n +# +# return vec4(brick_center.x+uvx-uv.x, brick_center.y, local_uv);\n +#} diff --git a/game/addons/mat_maker_gd/nodes/common/sdf2d.gd b/game/addons/mat_maker_gd/nodes/common/sdf2d.gd new file mode 100644 index 0000000..cf6dd2f --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/sdf2d.gd @@ -0,0 +1,2451 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#sdarc.mmg +#An arc as a signed distance function + +#"outputs": [ +#{ +# "longdesc": "The arc as a signed distance function", +# "sdf2d": "sdArc($uv-vec2(0.5), mod($a1, 360.0)*0.01745329251, mod($a2, 360.0)*0.01745329251, $r1, $r2)", +# "shortdesc": "Output", +# "type": "sdf2d" +#} +#], +#"parameters": [ +#{ +# "control": "Angle1.a", +# "default": 0, +# "label": "Angle 1", +# "longdesc": "The first angle of the arc", +# "max": 180, +# "min": -180, +# "name": "a1", +# "shortdesc": "Angle1", +# "step": 1, +# "type": "float" +#}, +#{ +# "control": "Angle2.a", +# "default": 0, +# "label": "Angle 2", +# "longdesc": "The second angle of the arc", +# "max": 180, +# "min": -180, +# "name": "a2", +# "shortdesc": "Angle2", +# "step": 1, +# "type": "float" +#}, +#{ +# "control": "Radius1.r", +# "default": 0.5, +# "label": "Radius", +# "longdesc": "The radius of the arc", +# "max": 1, +# "min": 0, +# "name": "r1", +# "shortdesc": "Radius", +# "step": 0.01, +# "type": "float" +#}, +#{ +# "control": "Radius11.r", +# "default": 0.1, +# "label": "Width", +# "longdesc": "The width of the shape around the arc", +# "max": 1, +# "min": 0, +# "name": "r2", +# "shortdesc": "Width", +# "step": 0.01, +# "type": "float" +#} +#] + +#---------------------- +#sdboolean.mmg +#Performs a boolean operation (union, intersection or difference) between two shapes + +#"inputs": [ +#{ +# "default": "0.0", +# "label": "", +# "longdesc": "The first shape, defined as a signed distance function", +# "name": "in1", +# "shortdesc": "Input1", +# "type": "sdf2d" +#}, +#{ +# "default": "0.0", +# "label": "", +# "longdesc": "The second shape, defined as a signed distance function", +# "name": "in2", +# "shortdesc": "Input2", +# "type": "sdf2d" +#} +#], +#"outputs": [ +#{ +# "longdesc": "The shape generated by the boolean operation", +# "sdf2d": "$op $in1($uv), $in2($uv))", +# "shortdesc": "Output", +# "type": "sdf2d" +#} +#], +#"parameters": [ +#{ +# "default": 2, +# "label": "", +# "longdesc": "The operation performed by this node", +# "name": "op", +# "shortdesc": "Operation", +# "type": "enum", +# "values": [ +# { +# "name": "Union", +# "value": "min(" +# }, +# { +# "name": "Subtraction", +# "value": "max(-" +# }, +# { +# "name": "Intersection", +# "value": "max(" +# } +# ] +#} +#], + +#---------------------- +#sdbox.mmg +#A rectangle described as a signed distance function + +# "code": "vec2 $(name_uv)_d = abs($uv-vec2($cx+0.5, $cy+0.5))-vec2($w, $h);", +# "outputs": [ +# { +# "longdesc": "The generated signed distance function", +# "sdf2d": "length(max($(name_uv)_d,vec2(0)))+min(max($(name_uv)_d.x,$(name_uv)_d.y),0.0)", +# "shortdesc": "Output", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "control": "Rect1.x", +# "default": 0.5, +# "label": "Width", +# "longdesc": "The width of the box", +# "max": 1, +# "min": 0, +# "name": "w", +# "shortdesc": "Width", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "Rect1.y", +# "default": 1, +# "label": "Height", +# "longdesc": "The height of the box", +# "max": 1, +# "min": 0, +# "name": "h", +# "shortdesc": "Height", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P1.x", +# "default": 0, +# "label": "Center X", +# "longdesc": "The position of the center of the box on the X axis", +# "max": 1, +# "min": -1, +# "name": "cx", +# "shortdesc": "Center.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": 0, +# "label": "Center Y", +# "longdesc": "The position of the center of the box on the Y axis", +# "max": 1, +# "min": -1, +# "name": "cy", +# "shortdesc": "Center.y", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#sdcircle.mmg +#A circle described as a signed distance function + +# "outputs": [ +# { +# "longdesc": "The generated signed distance function", +# "sdf2d": "length($uv-vec2($cx+0.5, $cy+0.5))-$r", +# "shortdesc": "Output", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "control": "Radius1.r", +# "default": 0.5, +# "label": "Radius", +# "longdesc": "The radius of the circle", +# "max": 1, +# "min": 0, +# "name": "r", +# "shortdesc": "Radius", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P1.x", +# "default": 0, +# "label": "Center X", +# "longdesc": "The position of the center on the X axis", +# "max": 1, +# "min": -1, +# "name": "cx", +# "shortdesc": "Center.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": 0, +# "label": "Center Y", +# "longdesc": "The position of the center on the Y axis", +# "max": 1, +# "min": -1, +# "name": "cy", +# "shortdesc": "Center.y", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#sdcirclerepeat.mmg +#Repeats its input shape around a circle + +#Output: +#Out, sdf2d (float) (property) +#$in(circle_repeat_transform_2d($uv-vec2(0.5), $c)+vec2(0.5)) + +#Input: +#in, float (sdf2d), default : 0 +#count, int, min: 1, max: 32, default: 6 + +#---------------------- +#sdelongation.mmg + +# "inputs": [ +# { +# "default": "0.0", +# "label": "", +# "name": "in", +# "type": "sdf2d" +# } +# ], +# "outputs": [ +# { +# "sdf2d": "$in($uv-clamp($uv-vec2(0.5), -vec2($x, $y), vec2($x, $y)))", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "control": "Rect1.x", +# "default": 0, +# "label": "X", +# "max": 1, +# "min": 0, +# "name": "x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "Rect1.y", +# "default": 0, +# "label": "Y", +# "max": 1, +# "min": 0, +# "name": "y", +# "step": 0.01, +# "type": "float" +# } +# ] + +#---------------------- +#sdline.mmg +#A line or a capsule shape described as a signed distance function + +#vec2 $(name_uv)_sdl = sdLine($uv, vec2($ax+0.5, $ay+0.5), vec2($bx+0.5, $by+0.5)); + +#Outputs +#output, sdf2d (float), (output property) +#$(name_uv)_sdl.x-$r*$profile($(name_uv)_sdl.y) + +#Inputs +#A, Vector2, min: -1, max: 1, step: 0.01, default: (-0.3, -0.3) +#B, Vector2, min: -1, max: 1, step: 0.01, default: (0.3, 0.3) +#width, float, min: 0, max: 1, step: 0.01, default: 0.1 +#points (curve), default: 0, 0, 0, 1, 0, 0, 1, 1 + +#---------------------- +#sdmorph.mmg +#Morphs between 2 input shapes + +# "inputs": [ +# { +# "default": "0.0", +# "label": "", +# "longdesc": "The first shape, defined as a signed distance function", +# "name": "in1", +# "shortdesc": "Input1", +# "type": "sdf2d" +# }, +# { +# "default": "0.0", +# "label": "", +# "longdesc": "The second shape, defined as a signed distance function", +# "name": "in2", +# "shortdesc": "Input2", +# "type": "sdf2d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The generated hybrid shape", +# "sdf2d": "mix($in1($uv), $in2($uv), $amount)", +# "shortdesc": "Output", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.5, +# "label": "", +# "longdesc": "The amount of the second input in the result", +# "max": 1, +# "min": 0, +# "name": "amount", +# "shortdesc": "Amount", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#sdngon.mmg (inc sdrotate.mmg, sdcirclerepeat.mmg) +#An n-gon described as a signed distance function + +# "outputs": [ +# { +# "longdesc": "The n-gon as a signed distance function", +# "sdf2d": "sdNgon(sdf2d_rotate($uv-vec2($cx, $cy), $rot*0.01745329251-1.57079632679)-vec2(0.5), $r, $n)", +# "shortdesc": "Output", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 3, +# "label": "N", +# "longdesc": "The number of sides of the n-gon", +# "max": 12, +# "min": 3, +# "name": "n", +# "shortdesc": "N", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "Radius1.r", +# "default": 0.5, +# "label": "Radius", +# "longdesc": "The radius of the n-gon", +# "max": 1, +# "min": 0, +# "name": "r", +# "shortdesc": "Radius", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "Radius1.a", +# "default": 0, +# "label": "Rotation", +# "longdesc": "The rotation of the n-gon", +# "max": 180, +# "min": -180, +# "name": "rot", +# "shortdesc": "Rotation", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P1.x", +# "default": 0, +# "label": "Center X", +# "longdesc": "The position of the center on the X axis", +# "max": 0.5, +# "min": -0.5, +# "name": "cx", +# "shortdesc": "Center.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": 0, +# "label": "Center Y", +# "longdesc": "The position of the center on the Y axis", +# "max": 0.5, +# "min": -0.5, +# "name": "cy", +# "shortdesc": "Center.y", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#sdpolygon.mmg +#A polygon as a signed distance function + +#Output: +#Out, sdf2d (float) (property) +#sdPolygon_$(name)($uv) + +#Input: +#polygon points, default: 0.2, 0.2, 0.4, 0.7, 0.7, 0.4 + +#---------------------- +#sdrepeat.mmg +#Repeats its input shape on a grid.This node does not support overlapping between instances. + +#Output: +#Out, sdf2d (float) (property) +#$in(repeat_2d($uv, vec2(1.0/$rx, 1.0/$ry), float($seed), $r)) + +#Input: +#in, float (sdf2d), default : 0 +#x, int, min: 1, max: 32, default: 4 +#y, int, min: 1, max: 32, default: 4 +#random_rotation, min: 0, max: 1, step:0.01, default: 0.5 + +#---------------------- +#sdrhombus.mmg +#A rhombus described as a signed distance function + +# "outputs": [ +# { +# "longdesc": "The rhombus as a signed distance function", +# "sdf2d": "sdRhombus($uv-vec2($cx+0.5, $cy+0.5), vec2($w, $h))", +# "shortdesc": "Output", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "control": "Rect1.x", +# "default": 0.5, +# "label": "Width", +# "longdesc": "The width of the rhombus", +# "max": 1, +# "min": 0, +# "name": "w", +# "shortdesc": "Width", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "Rect1.y", +# "default": 1, +# "label": "Height", +# "longdesc": "The height of the rhombus", +# "max": 1, +# "min": 0, +# "name": "h", +# "shortdesc": "Height", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P1.x", +# "default": 0, +# "label": "Center X", +# "longdesc": "The position of the center on the X axis", +# "max": 1, +# "min": -1, +# "name": "cx", +# "shortdesc": "Center.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": 0, +# "label": "Center Y", +# "longdesc": "The position of the center on the Y axis", +# "max": 1, +# "min": -1, +# "name": "cy", +# "shortdesc": "Center.y", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#sdrotate.mmg +#Rotates its input shape described as a signed distance function + +# "inputs": [ +# { +# "default": "0.0", +# "label": "", +# "longdesc": "The input shape, defined as a signed distance function", +# "name": "in", +# "shortdesc": "Input", +# "type": "sdf2d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The rotated shape", +# "sdf2d": "$in(sdf2d_rotate($uv, $a*0.01745329251))", +# "shortdesc": "Output", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "control": "Radius1.a", +# "default": 0, +# "label": "", +# "longdesc": "The rotation angle", +# "max": 180, +# "min": -180, +# "name": "a", +# "shortdesc": "Angle", +# "step": 1, +# "type": "float" +# } +# ], + +#---------------------- +#sdroundedshape.mmg +#Dilates an input shape into a rounded shape + +#Output: +#Out, sdf2d (float) (property) +#$in($uv)-$r + +#Input: +#in, float (sdf2d), default : 0 +#radius, min: 0, max: 1, step:0.01, default: 0 + +#---------------------- +#sdscale.mmg +#Scales its input shape described as a signed distance function + +# "inputs": [ +# { +# "default": "0.0", +# "label": "", +# "longdesc": "The input shape, defined as a signed distance function", +# "name": "in", +# "shortdesc": "Input", +# "type": "sdf2d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The generated scaled shape", +# "sdf2d": "$in(($uv-vec2(0.5))/$s+vec2(0.5))*$s", +# "shortdesc": "Output", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "control": "Scale1.x", +# "default": 1, +# "label": "", +# "longdesc": "The scale of the transform", +# "max": 5, +# "min": 0, +# "name": "s", +# "shortdesc": "Scale", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#sdshow.mmg +#Creates a greyscale image from a shape described as a 2D Signed Distance Function + +#Output + +#Output float (color) - Shows the shape as a greyscale image +#clamp($base-$in($uv)/max($bevel, 0.00001), 0.0, 1.0) + +#Input: +#Input (sdf - shape), default: 0 - sdf2d - universal input +#bevel, float, min 0, max 1, step 0.01, default 0 +#base, float, min 0, max 1, step 0.01, default 0 + +#---------------------- +#sdsmoothboolean.mmg +#Performs a smooth boolean operation (union, intersection or difference) between two shapes + +# "inputs": [ +# { +# "default": "0.0", +# "label": "", +# "longdesc": "The first shape, defined as a signed distance function", +# "name": "in1", +# "shortdesc": "Input1", +# "type": "sdf2d" +# }, +# { +# "default": "0.0", +# "label": "", +# "longdesc": "The second shape, defined as a signed distance function", +# "name": "in2", +# "shortdesc": "Input2", +# "type": "sdf2d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The shape generated by the boolean operation", +# "sdf2d": "sdSmooth$op($in1($uv), $in2($uv), $k)", +# "shortdesc": "Output", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "longdesc": "The operation performed by this node", +# "name": "op", +# "shortdesc": "Operation", +# "type": "enum", +# "values": [ +# { +# "name": "Union", +# "value": "Union" +# }, +# { +# "name": "Subtraction", +# "value": "Subtraction" +# }, +# { +# "name": "Intersection", +# "value": "Intersection" +# } +# ] +# }, +# { +# "control": "None", +# "default": 0, +# "label": "", +# "longdesc": "The smoothness of the boolean operation", +# "max": 1, +# "min": 0, +# "name": "k", +# "shortdesc": "Smoothness", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#sdtranslate.mmg +#Translates its input shape described as signed distance function + +# "inputs": [ +# { +# "default": "0.0", +# "label": "", +# "longdesc": "The input shape, defined as a signed distance function", +# "name": "in", +# "shortdesc": "Input", +# "type": "sdf2d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The translated shape", +# "sdf2d": "$in($uv-vec2($x, $y))", +# "shortdesc": "Output", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "control": "P1.x", +# "default": 0, +# "label": "X", +# "longdesc": "The translation along the X axis", +# "max": 1, +# "min": -1, +# "name": "x", +# "shortdesc": "Translate.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": 0, +# "label": "Y", +# "longdesc": "The translation along the Y axis", +# "max": 1, +# "min": -1, +# "name": "y", +# "shortdesc": "Translate.y", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#curve.mmg + +# "code": "vec2 $(name_uv)_bezier = sdBezier($uv, vec2($ax+0.5, $ay+0.5), vec2($bx+0.5, $by+0.5), vec2($cx+0.5, $cy+0.5));\nvec2 $(name_uv)_uv = vec2($(name_uv)_bezier.x, $(name_uv)_bezier.y/$width+0.5);\nvec2 $(name_uv)_uvtest = step(vec2(0.5), abs($(name_uv)_uv-vec2(0.5)));\n$(name_uv)_uv = mix(vec2(fract($repeat*$(name_uv)_uv.x), $(name_uv)_uv.y), vec2(0.0), max($(name_uv)_uvtest.x, $(name_uv)_uvtest.y));\n", +# "inputs": [ +# { +# "default": "vec4(vec3(step(abs($uv.y-0.5), 0.4999)), 1.0)", +# "label": "", +# "longdesc": "Input pattern to be drawn along the curve", +# "name": "in", +# "shortdesc": "Pattern", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "An image showing the specified curve", +# "rgba": "$in($(name_uv)_uv)", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "P1.x", +# "default": -0.3, +# "label": "AX", +# "longdesc": "Position on X axis of the first control point", +# "max": 0.5, +# "min": -0.5, +# "name": "ax", +# "shortdesc": "A.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": -0.1, +# "label": "AY", +# "longdesc": "Position on Y axis of the first control point", +# "max": 0.5, +# "min": -0.5, +# "name": "ay", +# "shortdesc": "A.y", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P3.x", +# "default": -0, +# "label": "BX", +# "longdesc": "Position on X axis of the second control point", +# "max": 0.5, +# "min": -0.5, +# "name": "bx", +# "shortdesc": "B.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P3.y", +# "default": 0.2, +# "label": "BY", +# "longdesc": "Position on Y axis of the second control point", +# "max": 0.5, +# "min": -0.5, +# "name": "by", +# "shortdesc": "B.y", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P2.x", +# "default": 0.3, +# "label": "CX", +# "longdesc": "Position on X axis of the third control point", +# "max": 0.5, +# "min": -0.5, +# "name": "cx", +# "shortdesc": "C.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "P2.y", +# "default": -0.1, +# "label": "CY", +# "longdesc": "Position on Y axis of the third control point", +# "max": 0.5, +# "min": -0.5, +# "name": "cy", +# "shortdesc": "C.y", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.1, +# "label": "Width", +# "longdesc": "Width of the curve pattern", +# "max": 0.5, +# "min": 0, +# "name": "width", +# "shortdesc": "Width", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Repeat", +# "longdesc": "Number of repetitions of the input pattern", +# "max": 16, +# "min": 1, +# "name": "repeat", +# "shortdesc": "Repeat", +# "step": 1, +# "type": "float" +# } +# ] + +#---------------------- +#sdannularshape.mmg +#Creates an annular shape from a shape described as a signed distance function + +#Output + +#Output float (color) - Shows the shape as a greyscale image +#sdRipples($in($uv), $r, int($ripples)) + +#Input: +#Input (sdf - shape), default: 0 - sdf2d - universal input +#width, float, min 0, max 1, step 0.01, default 0 +#rippples, int, min 1, max 16, default 1 + +#---------------------- +#sd_mask_to_sdf.mmg + +#{ +# "connections": [ +# { +# "from": "6520", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "edge_detect", +# "from_port": 0, +# "to": "1823", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer_2", +# "to_port": 0 +# }, +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "6520", +# "to_port": 1 +# }, +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "tones_step", +# "to_port": 0 +# }, +# { +# "from": "tones_step", +# "from_port": 0, +# "to": "edge_detect", +# "to_port": 0 +# }, +# { +# "from": "1823", +# "from_port": 0, +# "to": "iterate_buffer", +# "to_port": 0 +# }, +# { +# "from": "2434_8", +# "from_port": 0, +# "to": "iterate_buffer", +# "to_port": 1 +# }, +# { +# "from": "iterate_buffer", +# "from_port": 0, +# "to": "6520", +# "to_port": 0 +# }, +# { +# "from": "24282_2", +# "from_port": 0, +# "to": "2434_8", +# "to_port": 0 +# }, +# { +# "from": "iterate_buffer", +# "from_port": 1, +# "to": "24282_2", +# "to_port": 0 +# } +# ], +# "label": "Mask to SDF", +# "longdesc": "", +# "name": "sd_mask_to_sdf", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "iterate_buffer", +# "node_position": { +# "x": 76.700005, +# "y": -249.817047 +# }, +# "parameters": { +# "filter": false, +# "iterations": 30, +# "mipmap": false, +# "size": 10 +# }, +# "seed_value": 29168, +# "type": "iterate_buffer" +# }, +# { +# "name": "2434_8", +# "node_position": { +# "x": 91.099991, +# "y": -9.031479 +# }, +# "parameters": { +# "distance": 0, +# "size": 10 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(-1.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "vec3 $(name)_jump_flood(vec2 uv, float size) {\n\tivec2 int_uv = ivec2(uv * size);\n\tfloat best_distance = 9999.9;\n\tvec2 best_coord;\n\tfloat iter = $in(uv).b;\n\titer += 0.01;\n\tfloat step_width = size / 4.0 / (iter * 100.0);\n\t\n\tfor (int x = -1; x <= 1; x++) {\n\t\tfor (int y = -1; y <= 1; y++) {\n\t\t\tivec2 offsetUV = int_uv + ivec2(x, y) * int(step_width);\n\t\t\tvec2 float_uv = vec2(offsetUV) / size;\n\t\t\tvec2 offset_pos = $in(float_uv).rg;\n\t\t\t\n\t\t\tif (offset_pos.x != 0.0 && offset_pos.y != 0.0) {\n\t\t\t\tvec2 diff = offset_pos - uv;\n\t\t\t\t//float dist = dot(diff, diff);\n\t\t\t\t$distance\n\t\t\t\tif (dist < best_distance) {\n\t\t\t\t\tbest_distance = dist;\n\t\t\t\t\tbest_coord = offset_pos;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn vec3(best_coord, iter);\n}", +# "name": "Jump Flood", +# "outputs": [ +# { +# "rgb": "$(name)_jump_flood($uv, $size)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": 10, +# "first": 0, +# "label": "", +# "last": 13, +# "name": "size", +# "type": "size" +# }, +# { +# "default": 0, +# "label": "", +# "name": "distance", +# "type": "enum", +# "values": [ +# { +# "name": "Euclidean", +# "value": "float dist = dot(diff, diff);" +# }, +# { +# "name": "Manhattan", +# "value": "float dist = abs(diff.x) + abs(diff.y);" +# }, +# { +# "name": "Chebyshev", +# "value": "float dist = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);" +# } +# ] +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "1823", +# "node_position": { +# "x": -269.899872, +# "y": -18.741766 +# }, +# "parameters": { +# +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "1.0", +# "label": "", +# "name": "in", +# "type": "f" +# } +# ], +# "instance": "", +# "name": "Mask to UV Mask", +# "outputs": [ +# { +# "rgb": "$in($uv) < .5 ? vec3(0.0) : vec3($uv, 0.0)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "edge_detect", +# "node_position": { +# "x": -286.951447, +# "y": -137.078964 +# }, +# "parameters": { +# "size": 10, +# "threshold": 0.4, +# "width": 1 +# }, +# "type": "edge_detect" +# }, +# { +# "name": "6520", +# "node_position": { +# "x": 364.156525, +# "y": -261.873169 +# }, +# "parameters": { +# "distance": 0, +# "tiled": false +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# }, +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "name": "mask", +# "type": "f" +# } +# ], +# "instance": "float $(name)_distance(vec2 uv, bool tiled) {\n\tif (tiled) {\n\t\tuv = fract(uv);\n\t}\n\tvec2 custom_uv = $in(uv).xy;\n\tvec2 diff = custom_uv != vec2(0.0) ? custom_uv - uv : vec2(1.0);\n\t$distance\n\tif (!tiled) {\n\t\tuv = clamp(uv, 0.0, 1.0);\n\t}\n\treturn $mask(uv) < 0.5 ? distance : -distance;\n}", +# "name": "Calculate Distance", +# "outputs": [ +# { +# "sdf2d": "$(name)_distance($uv, $tiled)", +# "type": "sdf2d" +# } +# ], +# "parameters": [ +# { +# "default": false, +# "label": "Tiled", +# "name": "tiled", +# "type": "boolean" +# }, +# { +# "default": 0, +# "label": "", +# "name": "distance", +# "type": "enum", +# "values": [ +# { +# "name": "Euclidean", +# "value": "float distance = length(diff);" +# }, +# { +# "name": "Manhattan", +# "value": "float distance = abs(diff.x) + abs(diff.y);" +# }, +# { +# "name": "Chebyshev", +# "value": "float distance = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);" +# } +# ] +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -735.85144, +# "y": -352.006775 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The greyscale mask to be converted", +# "name": "mask", +# "shortdesc": "Mask", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 646.256348, +# "y": -263.285461 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The genrated distance field", +# "name": "sdf", +# "shortdesc": "Output", +# "type": "sdf2d" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -47.67952, +# "y": -541.979187 +# }, +# "parameters": { +# "param0": 10, +# "param1": 30, +# "param2": false, +# "param3": 0 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Size", +# "linked_widgets": [ +# { +# "node": "iterate_buffer", +# "widget": "size" +# }, +# { +# "node": "2434_8", +# "widget": "size" +# }, +# { +# "node": "buffer_2", +# "widget": "size" +# }, +# { +# "node": "edge_detect", +# "widget": "size" +# } +# ], +# "longdesc": "The resolution used for the operation", +# "name": "param0", +# "shortdesc": "Size", +# "type": "linked_control" +# }, +# { +# "label": "Iterations", +# "linked_widgets": [ +# { +# "node": "iterate_buffer", +# "widget": "iterations" +# } +# ], +# "longdesc": "The number of iterations the jump flood algorithm performs to calculate the distances", +# "name": "param1", +# "shortdesc": "Iterations", +# "type": "linked_control" +# }, +# { +# "label": "Tiled", +# "linked_widgets": [ +# { +# "node": "24282_2", +# "widget": "tiled" +# }, +# { +# "node": "6520", +# "widget": "tiled" +# } +# ], +# "longdesc": "Controls whether the resulting ditance field will be tiled. Useful for patterns that extend over the texture bounds", +# "name": "param2", +# "shortdesc": "Tiled", +# "type": "linked_control" +# }, +# { +# "label": "Distance", +# "linked_widgets": [ +# { +# "node": "2434_8", +# "widget": "distance" +# }, +# { +# "node": "6520", +# "widget": "distance" +# } +# ], +# "name": "param3", +# "shortdesc": "Distance function", +# "type": "linked_control" +# } +# ] +# }, +# { +# "name": "buffer_2", +# "node_position": { +# "x": -297.702789, +# "y": -348.41391 +# }, +# "parameters": { +# "size": 10 +# }, +# "type": "buffer", +# "version": 1 +# }, +# { +# "name": "tones_step", +# "node_position": { +# "x": -294.947968, +# "y": -258.84549 +# }, +# "parameters": { +# "invert": false, +# "value": 0.5, +# "width": 0 +# }, +# "type": "tones_step" +# }, +# { +# "name": "24282_2", +# "node_position": { +# "x": 114.391708, +# "y": -90.765732 +# }, +# "parameters": { +# "tiled": false +# }, +# "shader_model": { +# "code": "vec3 $(name_uv)_in = $in(fract($uv));\nvec3 $(name_uv)_tiled = $(name_uv)_in.xy != vec2(0.0) ? $(name_uv)_in + vec3(floor($uv), 0.0) : $(name_uv)_in;", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(1.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "", +# "name": "Tiling", +# "outputs": [ +# { +# "rgb": "$tiled ? $(name_uv)_tiled : $(name_uv)_in", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": false, +# "label": "Tiled", +# "name": "tiled", +# "type": "boolean" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "connections": [ +# { +# "from": "edge_detect", +# "from_port": 0, +# "to": "1823", +# "to_port": 0 +# }, +# { +# "from": "tones_step", +# "from_port": 0, +# "to": "edge_detect", +# "to_port": 0 +# }, +# { +# "from": "1823", +# "from_port": 0, +# "to": "iterate_buffer", +# "to_port": 0 +# }, +# { +# "from": "2434_8", +# "from_port": 0, +# "to": "iterate_buffer", +# "to_port": 1 +# }, +# { +# "from": "iterate_buffer", +# "from_port": 0, +# "to": "6520", +# "to_port": 0 +# }, +# { +# "from": "24282_2", +# "from_port": 0, +# "to": "2434_8", +# "to_port": 0 +# }, +# { +# "from": "iterate_buffer", +# "from_port": 1, +# "to": "24282_2", +# "to_port": 0 +# }, +# { +# "from": "iterate_buffer", +# "from_port": 0, +# "to": "2153", +# "to_port": 1 +# }, +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "tones_step", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 1, +# "to": "2153", +# "to_port": 0 +# }, +# { +# "from": "2153", +# "from_port": 0, +# "to": "11582", +# "to_port": 1 +# }, +# { +# "from": "gen_inputs", +# "from_port": 1, +# "to": "11582", +# "to_port": 2 +# }, +# { +# "from": "11582", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "8064", +# "from_port": 0, +# "to": "2153", +# "to_port": 2 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "8064", +# "to_port": 0 +# }, +# { +# "from": "8064", +# "from_port": 0, +# "to": "buffer_2", +# "to_port": 0 +# }, +# { +# "from": "buffer_2", +# "from_port": 0, +# "to": "6520", +# "to_port": 1 +# }, +# { +# "from": "6520", +# "from_port": 0, +# "to": "11582", +# "to_port": 0 +# } +# ], +# "label": "Dilate 2", +# "longdesc": "", +# "name": "graph_3", +# "node_position": { +# "x": 515.555786, +# "y": -545.049744 +# }, +# "nodes": [ +# { +# "name": "iterate_buffer", +# "node_position": { +# "x": 64.900002, +# "y": -259.215881 +# }, +# "parameters": { +# "filter": false, +# "iterations": 30, +# "mipmap": false, +# "size": 9 +# }, +# "seed_value": 29168, +# "type": "iterate_buffer" +# }, +# { +# "name": "2434_8", +# "node_position": { +# "x": 102.099998, +# "y": 15.367363 +# }, +# "parameters": { +# "distance": 0, +# "size": 9 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(-1.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "vec3 $(name)_jump_flood(vec2 uv, float size) {\n\tivec2 int_uv = ivec2(uv * size);\n\tfloat best_distance = 9999.9;\n\tvec2 best_coord;\n\tfloat iter = $in(uv).b;\n\titer += 0.01;\n\tfloat step_width = size / 4.0 / (iter * 100.0);\n\t\n\tfor (int x = -1; x <= 1; x++) {\n\t\tfor (int y = -1; y <= 1; y++) {\n\t\t\tivec2 offsetUV = int_uv + ivec2(x, y) * int(step_width);\n\t\t\tvec2 float_uv = vec2(offsetUV) / size;\n\t\t\tvec2 offset_pos = $in(float_uv).rg;\n\t\t\t\n\t\t\tif (offset_pos.x != 0.0 && offset_pos.y != 0.0) {\n\t\t\t\tvec2 diff = offset_pos - uv;\n\t\t\t\t//float dist = dot(diff, diff);\n\t\t\t\t//float dist = abs(diff.x) + abs(diff.y);\n\t\t\t\t//float dist = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);\n\t\t\t\t$distance\n\t\t\t\tif (dist < best_distance) {\n\t\t\t\t\tbest_distance = dist;\n\t\t\t\t\tbest_coord = offset_pos;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn vec3(best_coord, iter);\n}", +# "name": "Jump Flood", +# "outputs": [ +# { +# "rgb": "$(name)_jump_flood($uv, $size)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": 10, +# "first": 0, +# "label": "", +# "last": 13, +# "name": "size", +# "type": "size" +# }, +# { +# "default": 2, +# "label": "", +# "name": "distance", +# "type": "enum", +# "values": [ +# { +# "name": "Euclidean", +# "value": "float dist = dot(diff, diff);" +# }, +# { +# "name": "Manhattan", +# "value": "float dist = abs(diff.x) + abs(diff.y);" +# }, +# { +# "name": "Chebyshev", +# "value": "float dist = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);" +# } +# ] +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "1823", +# "node_position": { +# "x": -269.899872, +# "y": -17.741766 +# }, +# "parameters": { +# +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "1.0", +# "label": "", +# "name": "in", +# "type": "f" +# } +# ], +# "instance": "", +# "name": "Mask to UV Mask", +# "outputs": [ +# { +# "rgb": "$in($uv) < .5 ? vec3(0.0) : vec3($uv, 0.0)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "edge_detect", +# "node_position": { +# "x": -286.951447, +# "y": -137.078964 +# }, +# "parameters": { +# "size": 9, +# "threshold": 0.4, +# "width": 1 +# }, +# "type": "edge_detect" +# }, +# { +# "name": "6520", +# "node_position": { +# "x": 347.356567, +# "y": -346.449127 +# }, +# "parameters": { +# "distance": 0, +# "length": 0.1 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# }, +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "name": "mask", +# "type": "f" +# } +# ], +# "instance": "float $(name)_distance(vec2 uv, float length) {\n\tvec2 custom_uv = $in(fract(uv)).xy;\n\tvec2 diff = custom_uv != vec2(0.0) ? custom_uv - fract(uv) : vec2(1.0);\n\t//float distance = length(diff);\n\t//float distance = abs(diff.x) + abs(diff.y);\n\t//float distance = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);\n\t$distance\n\tif (length >= 0.0) {\n\t\treturn $mask(uv) < 0.5 ? clamp(1.0 - (distance / length), 0.0, 1.0) : 1.0;\n\t} else {\n\t\treturn $mask(uv) > 0.5 ? clamp((distance / -length), 0.0, 1.0) : 0.0;\n\t}\n}", +# "name": "Calculate Distance", +# "outputs": [ +# { +# "f": "$(name)_distance($uv, $length)", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.1, +# "label": "Length", +# "max": 1, +# "min": -1, +# "name": "length", +# "step": 0.01, +# "type": "float" +# }, +# { +# "default": 2, +# "label": "", +# "name": "distance", +# "type": "enum", +# "values": [ +# { +# "name": "Euclidean", +# "value": "float distance = length(diff);" +# }, +# { +# "name": "Manhattan", +# "value": "float distance = abs(diff.x) + abs(diff.y);" +# }, +# { +# "name": "Chebyshev", +# "value": "float distance = abs(diff.x) > abs(diff.y) ? abs(diff.x) : abs(diff.y);" +# } +# ] +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -793.451477, +# "y": -236.812195 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "The greyscale mask to be converted", +# "name": "mask", +# "shortdesc": "Mask", +# "type": "f" +# }, +# { +# "group_size": 0, +# "longdesc": "", +# "name": "source", +# "shortdesc": "Source", +# "type": "rgb" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": 885.056335, +# "y": -247.896317 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "longdesc": "Shows the dilated image", +# "name": "out", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": 61.520477, +# "y": -639.339172 +# }, +# "parameters": { +# "param0": 9, +# "param1": 0.1, +# "param2": 0, +# "param3": 0, +# "param4": 30 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "iterate_buffer", +# "widget": "size" +# }, +# { +# "node": "2434_8", +# "widget": "size" +# }, +# { +# "node": "buffer_2", +# "widget": "size" +# }, +# { +# "node": "edge_detect", +# "widget": "size" +# } +# ], +# "longdesc": "The resolution of the input images", +# "name": "param0", +# "shortdesc": "Size", +# "type": "linked_control" +# }, +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "6520", +# "widget": "length" +# } +# ], +# "longdesc": "The length of the dilate effect", +# "name": "param1", +# "shortdesc": "Length", +# "type": "linked_control" +# }, +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "11582", +# "widget": "fill" +# } +# ], +# "longdesc": "0 to generate a gradient to black while dilating, 1 to fill with input color", +# "name": "param2", +# "shortdesc": "Fill", +# "type": "linked_control" +# }, +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "2434_8", +# "widget": "distance" +# }, +# { +# "node": "6520", +# "widget": "distance" +# } +# ], +# "name": "param3", +# "shortdesc": "Distance Function", +# "type": "linked_control" +# }, +# { +# "label": "", +# "linked_widgets": [ +# { +# "node": "iterate_buffer", +# "widget": "iterations" +# } +# ], +# "longdesc": "The number of iterations the jump flood algorithm performs to calculate the distances", +# "name": "param4", +# "shortdesc": "Iterations", +# "type": "linked_control" +# } +# ] +# }, +# { +# "name": "buffer_2", +# "node_position": { +# "x": -294.502808, +# "y": -340.816589 +# }, +# "parameters": { +# "size": 9 +# }, +# "type": "buffer", +# "version": 1 +# }, +# { +# "name": "tones_step", +# "node_position": { +# "x": -285.347992, +# "y": -253.248215 +# }, +# "parameters": { +# "invert": false, +# "value": 0.5, +# "width": 0 +# }, +# "type": "tones_step" +# }, +# { +# "name": "24282_2", +# "node_position": { +# "x": 109.591705, +# "y": -88.567284 +# }, +# "parameters": { +# "tiled": true +# }, +# "shader_model": { +# "code": "vec3 $(name_uv)_in = $in(fract($uv));\nvec3 $(name_uv)_tiled = $(name_uv)_in.xy != vec2(0.0) ? $(name_uv)_in + vec3(floor($uv), 0.0) : $(name_uv)_in;", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(1.0)", +# "function": true, +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "", +# "name": "Tiling", +# "outputs": [ +# { +# "rgb": "$tiled ? $(name_uv)_tiled : $(name_uv)_in", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "default": false, +# "label": "Tiled", +# "name": "tiled", +# "type": "boolean" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "2153", +# "node_position": { +# "x": 368.85202, +# "y": -157.100906 +# }, +# "parameters": { +# +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(1.0)", +# "label": "Source", +# "name": "source", +# "type": "rgb" +# }, +# { +# "default": "$uv", +# "label": "Custom UV", +# "name": "custom_uv", +# "type": "rgb" +# }, +# { +# "default": "0.0", +# "label": "Mask", +# "name": "mask", +# "type": "f" +# } +# ], +# "instance": "", +# "name": "Dilate UV", +# "outputs": [ +# { +# "rgb": "$mask($uv) < 0.5 ? $source($custom_uv($uv).xy) : $source($uv)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "11582", +# "node_position": { +# "x": 609.343445, +# "y": -239.746399 +# }, +# "parameters": { +# "fill": 0 +# }, +# "shader_model": { +# "code": "float $(name_uv)_dist = $distance($uv);\nvec3 $(name_uv)_color = mix($source(fract($uv)), $fill_raw(fract($uv)), float( $(name_uv)_dist != 0.0 ) );\nvec3 $(name_uv)_mix = mix($(name_uv)_color * $(name_uv)_dist, $(name_uv)_color, $fill);", +# "global": "", +# "inputs": [ +# { +# "default": "0.0", +# "function": true, +# "label": "Distance", +# "name": "distance", +# "type": "f" +# }, +# { +# "default": "vec3(1.0)", +# "function": true, +# "label": "Fill Raw", +# "name": "fill_raw", +# "type": "rgb" +# }, +# { +# "default": "vec3(1.0)", +# "function": true, +# "label": "Source", +# "name": "source", +# "type": "rgb" +# } +# ], +# "instance": "", +# "name": "Dilate Combine", +# "outputs": [ +# { +# "rgb": "$(name_uv)_mix", +# "type": "rgb" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0, +# "label": "Fill", +# "max": 1, +# "min": 0, +# "name": "fill", +# "step": 0.01, +# "type": "float" +# } +# ] +# }, +# "type": "shader" +# }, +# { +# "name": "8064", +# "node_position": { +# "x": -282.533325, +# "y": -433.011169 +# }, +# "parameters": { +# +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "vec3(0.0)", +# "label": "", +# "name": "in", +# "type": "rgb" +# } +# ], +# "instance": "", +# "name": "Default Value", +# "outputs": [ +# { +# "rgb": "$in($uv)", +# "type": "rgb" +# } +# ], +# "parameters": [ +# +# ] +# }, +# "type": "shader" +# } +# ], +# "parameters": { +# "param0": 9, +# "param1": 0.1, +# "param2": 0, +# "param3": 0, +# "param4": 30 +# }, +# "shortdesc": "", +# "type": "graph" +# } +# ], +# "parameters": { +# "param0": 10, +# "param1": 30, +# "param2": false, +# "param3": 0 +# }, +# "shortdesc": "", +# "type": "graph" +#} + +static func sdf_show(val : float, bevel : float) -> Color: + var f : float = clamp(-val / max(bevel, 0.00001), 0.0, 1.0); + + return Color(f, f, f, 1) + +static func sdf_circle(uv : Vector2, c : Vector2, r : float) -> float: + c.x += 0.5 + c.y += 0.5 + + return (uv - c).length() - r; + +static func sdf_box(uv : Vector2, c : Vector2, wh : Vector2) -> float: + c.x += 0.5 + c.y += 0.5 + + var d : Vector2 = Commons.absv2(uv - c) - wh + + return Commons.maxv2(d, Vector2(0, 0)).length() + min(max(d.x, d.y), 0.0) + +#vec2 $(name_uv)_sdl = sdLine($uv, vec2($ax+0.5, $ay+0.5), vec2($bx+0.5, $by+0.5)); + +static func sdf_line(uv : Vector2, a : Vector2, b : Vector2, r : float) -> Vector2: + a.x += 0.5 + a.y += 0.5 + + b.x += 0.5 + b.y += 0.5 + + return sdLine(uv, a, b) + + +static func sdf_rhombus(uv : Vector2, c : Vector2, wh : Vector2) -> float: + c.x += 0.5 + c.y += 0.5 + + return sdRhombus(uv - c, wh); + + +static func sdf_arc(uv : Vector2, a : Vector2, r : Vector2) -> float: + return sdArc(uv - Vector2(0.5, 0.5), Commons.modf(a.x, 360.0) * 0.01745329251, Commons.modf(a.y, 360.0)*0.01745329251, r.x, r.y) + +#float sdr_ndot(vec2 a, vec2 b) { +# return a.x*b.x - a.y*b.y; +#} + +static func sdr_ndot(a : Vector2, b : Vector2) -> float: + return a.x * b.x - a.y * b.y; + +#float sdRhombus(in vec2 p, in vec2 b) { +# vec2 q = abs(p); +# float h = clamp((-2.0*sdr_ndot(q,b)+sdr_ndot(b,b))/dot(b,b),-1.0,1.0); +# float d = length( q - 0.5*b*vec2(1.0-h,1.0+h) ); +# return d * sign( q.x*b.y + q.y*b.x - b.x*b.y ); +#} + +static func sdRhombus(p : Vector2, b : Vector2) -> float: + var q : Vector2 = Commons.absv2(p); + var h : float = clamp((-2.0 * sdr_ndot(q,b) + sdr_ndot(b,b)) / b.dot(b), -1.0, 1.0); + var d : float = ( q - 0.5*b * Vector2(1.0-h, 1.0+h)).length() + return d * sign(q.x*b.y + q.y*b.x - b.x*b.y) + +#float sdArc(vec2 p, float a1, float a2, float ra, float rb) { +# float amid = 0.5*(a1+a2)+1.6+3.14*step(a1, a2); +# float alength = 0.5*(a1-a2)-1.6+3.14*step(a1, a2); +# +# vec2 sca = vec2(cos(amid), sin(amid)); +# vec2 scb = vec2(cos(alength), sin(alength)); +# p *= mat2(vec2(sca.x,sca.y),vec2(-sca.y,sca.x)); +# p.x = abs(p.x); +# +# float k = (scb.y*p.x>scb.x*p.y) ? dot(p.xy,scb) : length(p.xy); +# return sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb; +#} + +static func sdArc(p : Vector2, a1 : float, a2 : float, ra : float, rb : float) -> float: + var amid : float = 0.5*(a1+a2)+1.6+3.14 * Commons.step(a1, a2); + var alength : float = 0.5*(a1-a2)-1.6+3.14 * Commons.step(a1, a2); + var sca : Vector2 = Vector2(cos(amid), sin(amid)); + var scb : Vector2 = Vector2(cos(alength), sin(alength)); + + #p *= Matrix(Vector2(sca.x , sca.y), Vector2(-sca.y, sca.x)); + + var pt : Vector2 = p + + p.x = pt.x * sca.x + pt.y * sca.y + p.y = pt.x * -sca.y + pt.y * sca.x + + p.x = abs(p.x); + + var k : float + + if (scb.y * p.x > scb.x * p.y): + k = p.dot(scb) + else: + k = p.length(); + + return sqrt( p.dot(p) + ra * ra - 2.0 * ra * k ) - rb; + + +static func sdf_boolean_union(a : float, b : float) -> float: + return min(a, b) + +static func sdf_boolean_substraction(a : float, b : float) -> float: + return max(-a, b) + +static func sdf_boolean_intersection(a : float, b : float) -> float: + return max(a, b) + +static func sdf_smooth_boolean_union(d1 : float, d2 : float, k : float) -> float: + var h : float = clamp( 0.5 + 0.5 * (d2 - d1) / k, 0.0, 1.0) + return lerp(d2, d1, h) - k * h * (1.0 - h) + +static func sdf_smooth_boolean_substraction(d1 : float, d2 : float, k : float) -> float: + var h : float = clamp( 0.5 - 0.5 * (d2 + d1) / k, 0.0, 1.0) + return lerp(d2, -d1, h) + k * h * (1.0 - h) + +static func sdf_smooth_boolean_intersection(d1 : float, d2 : float, k : float) -> float: + var h : float = clamp( 0.5 - 0.5 * (d2 - d1) / k, 0.0, 1.0) + return lerp(d2, d1, h) + k * h * (1.0 - h) + +static func sdf_rounded_shape(a : float, r : float) -> float: + return a - r + +static func sdf_annular_shape(a : float, r : float) -> float: + return abs(a) - r + +static func sdf_morph(a : float, b : float, amount : float) -> float: + return lerp(a, b, amount) + +#vec2 sdLine(vec2 p, vec2 a, vec2 b) { +# vec2 pa = p-a, ba = b-a; +# float h = clamp(dot(pa,ba)/dot(ba,ba), 0.0, 1.0); +# return vec2(length(pa-ba*h), h); +#} + +static func sdLine(p : Vector2, a : Vector2, b : Vector2) -> Vector2: + var pa : Vector2 = p - a + var ba : Vector2 = b - a + + var h : float = clamp(pa.dot(ba) / ba.dot(ba), 0.0, 1.0); + + return Vector2((pa - (ba * h)).length(), h) + + +#Needs thought +#func sdf_translate(a : float, x : float, y : float) -> float: +# return lerp(a, b, amount) + +#vec2 sdf2d_rotate(vec2 uv, float a) { +# vec2 rv; +# float c = cos(a); +# float s = sin(a); +# uv -= vec2(0.5); +# rv.x = uv.x*c+uv.y*s; +# rv.y = -uv.x*s+uv.y*c; +# return rv+vec2(0.5); +#} + +static func sdf2d_rotate(uv : Vector2, a : float) -> Vector2: + var rv : Vector2; + var c : float = cos(a); + var s : float = sin(a); + uv -= Vector2(0.5, 0.5); + rv.x = uv.x*c+uv.y*s; + rv.y = -uv.x*s+uv.y*c; + return rv+Vector2(0.5, 0.5); + +#float cross2( in vec2 a, in vec2 b ) { +# return a.x*b.y - a.y*b.x; +#} + +#// signed distance to a quadratic bezier\n +#vec2 sdBezier( in vec2 pos, in vec2 A, in vec2 B, in vec2 C ) { \n +# vec2 a = B - A;\n +# vec2 b = A - 2.0*B + C;\n +# vec2 c = a * 2.0;\n +# vec2 d = A - pos;\n\n +# float kk = 1.0/dot(b,b);\n +# float kx = kk * dot(a,b);\n +# float ky = kk * (2.0*dot(a,a)+dot(d,b))/3.0;\n +# float kz = kk * dot(d,a); \n\n +# float res = 0.0;\n +# float sgn = 0.0;\n\n +# float p = ky - kx*kx;\n +# float p3 = p*p*p;\n +# float q = kx*(2.0*kx*kx - 3.0*ky) + kz;\n +# float h = q*q + 4.0*p3;\n\t +# float rvx;\n\n +# +# if( h>=0.0 ) { +# // 1 root\n +# h = sqrt(h);\n +# vec2 x = (vec2(h,-h)-q)/2.0;\n +# vec2 uv = sign(x)*pow(abs(x), vec2(1.0/3.0)); +# rvx = uv.x+uv.y-kx;\n +# float t = clamp(rvx, 0.0, 1.0);\n +# vec2 q2 = d+(c+b*t)*t;\n +# res = dot(q2, q2);\n \t +# sgn = cross2(c+2.0*b*t, q2);\n +# } else { +# // 3 roots\n +# float z = sqrt(-p);\n +# float v = acos(q/(p*z*2.0))/3.0;\n +# float m = cos(v);\n +# float n = sin(v)*1.732050808;\n +# vec3 t = clamp(vec3(m+m,-n-m,n-m)*z-kx, 0.0, 1.0);\n +# vec2 qx=d+(c+b*t.x)*t.x; +# float dx=dot(qx, qx), sx = cross2(c+2.0*b*t.x,qx);\n +# vec2 qy=d+(c+b*t.y)*t.y; +# float dy=dot(qy, qy), sy = cross2(c+2.0*b*t.y,qy);\n +# +# if( dx Vector2: + var a : Vector2 = B - A; + var b : Vector2 = A - 2.0 * B + C; + var c : Vector2 = a * 2.0; + var d : Vector2 = A - pos; + + var kk : float = 1.0 / b.dot(b); + var kx : float = kk * a.dot(b); + var ky : float = kk * (2.0* a.dot(a) + d.dot(b)) / 3.0; + var kz : float = kk * d.dot(a); + + var res : float = 0.0; + var sgn : float = 0.0; + + var p : float = ky - kx * kx; + var p3 : float = p * p * p; + var q : float = kx * (2.0 * kx * kx - 3.0 * ky) + kz; + var h : float = q * q + 4.0 * p3; + var rvx : float = 0 + + if(h >= 0.0): + # // 1 root + h = sqrt(h); + + var x : Vector2 = (Vector2(h,-h) - Vector2(q, q)) / 2.0 + + var uv : Vector2 = Commons.signv2(x) * Commons.powv2(Commons.absv2(x), Vector2(1.0/3.0, 1.0/3.0)); + + rvx = uv.x + uv.y - kx; + var t : float = clamp(rvx, 0.0, 1.0); + var q2 : Vector2 = d + (c + b * t) * t; + res = q2.dot(q2); + + sgn = (c + Vector2(2, 2) * b * t).cross(q2) + + else: # // 3 roots + var z : float = sqrt(-p); + var v : float = acos(q / (p * z * 2.0)) / 3.0; + var m : float = cos(v); + var n : float = sin(v) * 1.732050808; + + var t : Vector3 = Commons.clampv3(Vector3(m+m, -n-m, n-m) * z - Vector3(kx, kx, kx), Vector3(), Vector3(1, 1, 1)); + + var qx : Vector2 = d + (c + b * t.x) * t.x; + var dx : float = qx.dot(qx) + var sx : float = (c + Vector2(2, 2) * b * t.x).cross(qx) + var qy : Vector2 = d + (c + b * t.y) * t.y + var dy : float = qy.dot(qy) + var sy : float = (c + Vector2(2, 2) * b * t.y).cross(qy) + + if dx Vector2: + var r : float = 6.28 / count + var pa : float = atan2(p.x, p.y) + var a : float = Commons.modf(pa + 0.5 * r, r)-0.5*r + + var rv : Vector2 = Vector2() + + var c : float = cos(a - pa); + var s : float = sin(a - pa); + + rv.x = p.x * c + p.y * s + rv.y = -p.x * s + p.y * c + + return rv; + +#float sdNgon(vec2 p, float r, float n) { +# float PI = 3.1415926535; +# p = circle_repeat_transform_2d(p, n); +# vec2 d = abs(p)-vec2(r*tan(3.14159265359/n), r); +# return p.y < r ? p.y-r : length(max(d,vec2(0)))+min(max(d.x,d.y),0.0); +#} + +static func sdNgon(pos : Vector2, r : float, n : float) -> Vector2: + return Vector2() + + +#vec2 repeat_2d(vec2 p, vec2 r, float seed, float randomness) { +# p -= vec2(0.5); +# float a = (rand(floor(mod((p.xy+0.5*r.xy)/r.xy, 1.0/r.xy)+vec2(seed)))-0.5)*6.28*randomness; +# p = mod(p+0.5*r,r)-0.5*r; +# vec2 rv; +# float c = cos(a); +# float s = sin(a); +# rv.x = p.x*c+p.y*s; +# rv.y = -p.x*s+p.y*c; +# return rv+vec2(0.5); +#} + +static func repeat_2d(p : Vector2, r : Vector2, pseed : float, randomness : float) -> Vector2: + p -= Vector2(0.5, 0.5); + var v : Vector2 = Vector2(p.x, p.y) + Vector2(0.5, 0.5) + Vector2(r.x, r.y) + var a : float = ((Commons.rand2(Commons.floorv2(Commons.modv2(v / Vector2(r.x, r.y), Vector2(1.0, 1.0) / Vector2(r.x, r.y)) + Vector2(pseed, pseed))) - Vector2(0.5, 0.5)) * 6.28 * randomness).x + p = Commons.modv2(p + Vector2(0.5, 0.5) * r,r)- Vector2(0.5, 0.5) * r + var rv : Vector2 = Vector2() + var c : float = cos(a) + var s : float = sin(a) + rv.x = p.x * c + p.y * s + rv.y = -p.x * s + p.y * c + return rv + Vector2(0.5, 0.5); + +#float sdSmoothUnion( float d1, float d2, float k ) { +# float h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 ); +# return mix( d2, d1, h ) - k*h*(1.0-h); +#} + +static func sdSmoothUnion(d1 : float, d2 : float, k : float) -> float: + return 0.0 + +#float sdSmoothSubtraction( float d1, float d2, float k ) { +# float h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 ); +# return mix( d2, -d1, h ) + k*h*(1.0-h); +#} + +static func sdSmoothSubtraction(d1 : float, d2 : float, k : float) -> float: + return 0.0 + +#float sdSmoothIntersection( float d1, float d2, float k ) { +# float h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 ); +# return mix( d2, d1, h ) + k*h*(1.0-h); +#} + +static func sdSmoothIntersection(d1 : float, d2 : float, k : float) -> float: + return 0.0 + + +#float sdRipples(float d, float w, int r) {\n +# for (int i = 0; i < r; ++i) { +# d = abs(d)-w; +# } +# +# return d; +#} + +static func sdRipples(d : float, w : float, r : int) -> float: + for i in range(r): + d = abs(d)-w; + + return d + +#$polygon = { p1(vec2), p2(vec2), p3(vec2) ... } +#float sdPolygon_$(name)(vec2 p) { +# vec2 v[] = $polygon; +# int l = v.length(); +# float d = dot(p-v[0],p-v[0]); +# float s = 1.0; +# int j = l-1; +# +# for(int i=0; i=v[i].y,p.ye.y*w.x); +# +# if(all(c) || all(not(c))) { +# s *= -1.0; +# } +# +# j = i; +# } +# +# return s*sqrt(d); +#} + +static func sdPolygon(p : Vector2, v : PoolVector2Array) -> float: + var l : int = v.size() + var pmv0 : Vector2 = p - v[0] + var d : float = pmv0.dot(pmv0) + var s : float = 1.0 + var j : int = l - 1 + + for i in range(l): #for(int i=0; i= v[i].y + var b2 : bool = p.y < v[j].y + var b3 : bool = e.x * w.y > e.y * w.x + + if((b1 && b2 && b3) || (!b1 && !b2 && !b3)): + s *= -1.0 + + j = i + + return s * sqrt(d) diff --git a/game/addons/mat_maker_gd/nodes/common/sdf3d.gd b/game/addons/mat_maker_gd/nodes/common/sdf3d.gd new file mode 100644 index 0000000..932094d --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/sdf3d.gd @@ -0,0 +1,789 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#sdf3d_box.mmg +#Generates a rounded box as a signed distance function + +#Outputs: + +#Common +#vec3 $(name_uv)_q = abs($uv) - vec3($sx, $sy, $sz); + +#Output - (sdf3d) - Shows the rounded box +#length(max($(name_uv)_q,0.0))+min(max($(name_uv)_q.x,max($(name_uv)_q.y,$(name_uv)_q.z)),0.0)-$r + +#Inputs: +#size, vector3, min: 0, max: 1, default:0.5, step:0.01 +#size, float, min: 0, max: 1, default:0.5, step:0.01 + +#---------------------- +#sdf3d_sphere.mmg +#Generates a sphere as a signed distance function + +#Outputs: + +#Output - (sdf3d) - Shows the sphere +#length($uv)-$r + +#Inputs: +#radius, vector3, min: 0, max: 1, default:0.5, step:0.01 + +#---------------------- +#sdf3d_capsule.mmg +#Generates a capsule as a signed distance function + +#Outputs: + +#Common +#vec3 $(name_uv)_p = $uv; +#$(name_uv)_p.$axis -= clamp($(name_uv)_p.$axis, -$l, $l); + +#Output - (sdf3d) - Shows the capsule +#length($(name_uv)_p)-$r*$profile(clamp(0.5+0.5*($uv).$axis/$l, 0.0, 1.0)) + +#Inputs: +#axis, enum, default: 1, values: x, y, z +#length, float, min: 0, max: 1, default:0.25, step:0.01 +#radius, float, min: 0, max: 1, default:0.2, step:0.01 +#profile, curve, default: (ls, rs, x, z) 0, 0, 0, 1, 0, 0, 1, 1 + +#---------------------- +#sdf3d_cone.mmg + +#Outputs: + +#+X: $axis = length($uv.yz),-$uv.x +#-X: $axis = length($uv.yz),$uv.x +#+Y: $axis = length($uv.xz),$uv.y +#-Y: $axis = length($uv.xz),-$uv.y +#+Z: $axis = length($uv.xy),-$uv.z +#-Z: $axis = length($uv.xy),$uv.z + +#Output - (sdf3d) +#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis)) + +#Inputs: +#axis, enum, default:5, values: +X, -X, +Y, -Y, +Z, -Z +#angle, float, min: 0, max: 90, default:30, step:1 + +#---------------------- +#sdf3d_repeat.mmg + +#Outputs: + +#Output (sdf3d) +#Output - (sdf3dc) - The shape generated by the repeat operation +#$in(repeat($uv, vec3(1.0/$rx, 1.0/$ry, 0.0), float($seed), $r)) + +#Inputs: +#in, vec2, default:vec2(100, 0.0), (sdf3d input) + +#X, int, min: 1, max: 32, default:4, step:1 +#Y, int, min: 1, max: 32, default:4, step:1 +#R, float, min: 0, max: 1, default:0.5, step:0.01 + +#---------------------- +#sdf3d_rotate.mmg + +#Outputs: + +#Output - (sdf3dc) - The rotated object +#$in(rotate3d($uv, -vec3($ax, $ay, $az)*0.01745329251)) + +#Inputs: +#in, vec2, default:vec2(100, 0.0), (sdf3d input) +#rotation, vector3, min: -180, max: 180, default:0, step:1 + +#---------------------- +#sdf3d_cylinder.mmg + +#Outputs: + +#Output - (sdf3dc) - Shows the cylinder +#min(max($(name_uv)_d.x,$(name_uv)_d.y),0.0) + length(max($(name_uv)_d,0.0)) + +#Inputs: +#axis, enum, default: 1, values: X, Y, Z +#length, float, min: 0, max: 1, default:0.5, step:0.01 +#radius, float, min: 0, max: 1, default:0.2, step:0.01 + +#---------------------- +#sdf3d_plane.mmg +#Generates a plane that can be used to cut other shapes + +#Outputs: + +#X: $axis = x +#Y: $axis = y +#Z: $axis = z + +#Output - (sdf3dc) - Shows the plane +#$uv.$axis + +#Inputs: +#axis, enum, default: 1, values: X, Y, Z + +#---------------------- +#sdf3d_torus.mmg +#Generates a torus as a signed distance function + +#Outputs: + +#X: $axis = length($uv.yz)-$R,$uv.x +#Y: $axis = length($uv.zx)-$R,$uv.y +#Z: $axis = length($uv.xy)-$R,$uv.z +#vec2 $(name_uv)_q = vec2($axis); + +#Output - (sdf3dc) - Shows the torus +#length($(name_uv)_q)-$r + +#Inputs: +#axis, enum, default: 1, values: X, Y, Z +#R, float, min: 0, max: 1, default:0.5, step:0.01 +#r, float, min: 0, max: 1, default:0.1, step:0.01 + +#---------------------- +#sdf3d_boolean.mmg + +#Outputs: + +#Union: $op = sdf3dc_union +#Subtraction $op = sdf3dc_sub +#Intersection $op = sdf3dc_inter + +#Output - (sdf3dc) - The shape generated by the boolean operation +#$op($in1($uv), $in2($uv)) + +#Inputs: +#axis, enum, default: 2, values: Union, Subtraction, Intersection +#in1, vec2, default:vec2(100, 0.0), (sdf3d input) +#in2, vec2, default:vec2(100, 0.0), (sdf3d input) + +#---------------------- +#sdf3d_circle_repeat.mmg + +#Outputs: + +#Output (sdf3dc) - The shape generated by the boolean operation +#$in(circle_repeat_transform($uv, $c)) + +#Inputs: +#count, float, min: 1, max: 32, default:5, step:1 + +#---------------------- +#sdf3d_angle.mmg (includes sdf3d_rotate.mmg) + +#Outputs: + +#Shows the angleThe shape generated by the boolean operation +#$(name_uv)_d + +#X: $axis = xyz +#Y: $axis = yzx +#Z: $axis = zxy + +#vec3 $(name_uv)_uv = $uv.$axis; +#float $(name_uv)_rotated = rotate3d($(name_uv)_uv, vec3(($angle-180.0)*0.01745329251, 0.0, 0.0)).y; +#float $(name_uv)_d1 = max($(name_uv)_uv.y, $(name_uv)_rotated); +#float $(name_uv)_d2 = min($(name_uv)_uv.y, $(name_uv)_rotated); +#float $(name_uv)_d = (mod($angle, 360.0) < 180.0) ? $(name_uv)_d1 : $(name_uv)_d2; + +#Inputs: +#axis, enum, default: 0, values: X, Y, Z +#angle, float, min: 0, max: 360, default:180, step:0.1 + +#---------------------- +#sdf3d_color.mmg + +#Outputs: + +#Output - sdf3dc - The colored 3D object +#vec2($in($uv), $c) + +#Inputs: +#color_index, float, min: 0, max: 1, default:0, step:0.01 +#in, vec2, default:vec2(100, 0.0), (sdf3d input) + +#---------------------- +#sdf3d_translate.mmg + +#Outputs: + +#Output - sdf3dc +#$in($uv-vec3($x, $y, $z)) + +#Inputs: +#translation, vector3, min: -1, max: 1, default:0, step:0.01 +#in, vec2, default:vec2(100, 0.0), (sdf3dc input) + +#---------------------- +#sdf3d_scale.mmg + +#Outputs: + +#vec2 $(name_uv)_in = $in(($uv)/$s); + +#Output - sdf3dc +#vec2($(name_uv)_in.x*$s, $(name_uv)_in.y) + +#Inputs: +#scale_factor, float, min: 0, max: 5, default:1, step:0.01 +#in, vec2, default:vec2(100, 0.0), (sdf3dc input) + +#---------------------- +#sdf3d_rounded.mmg + +#Outputs: + +#vec2 $(name_uv)_v = $in($uv); + +#Output - sdf3dc +#vec2($(name_uv)_v.x-$r, $(name_uv)_v.y) + +#Inputs: +#radius, float, min: 0, max: 1, default:0, step:0.01 +#in, vec2, default:vec2(100, 0.0), (sdf3dc input) + +#---------------------- +#sdf3d_revolution.mmg + +#Outputs: + +#vec2 $(name_uv)_q = vec2(length($uv.xy)-$d+0.5, $uv.z+0.5); + +#Output - sdf3dc +#$in($(name_uv)_q) + +#Inputs: +#d, float, min: 0, max: 1, default:0.25, step:0.01 +#input, float, default:10.0, (sdf2d input) + +#---------------------- +#sdf3d_smoothboolean.mmg +#Performs a smooth boolean operation (union, intersection or difference) between two shapes + +#Outputs: + +#Union: $op = union +#Subtraction: $op = subtraction +#Intersection: $op = intersection + +#Output - sdf3dc +#sdf3d_smooth_$op($in1($uv), $in2($uv), $k) + +#Inputs: +#in1, vec2, default:vec2(100, 0.0), (sdf3d input) +#in2, vec2, default:vec2(100, 0.0), (sdf3d input) +#operation, enum, default: 1, values: Union, Subtraction, Intersection +#smoothness, float, min: 0, max: 1, default:0, step:0.01 + +#---------------------- +#sdf3d_elongation.mmg + +#Outputs: + +#Output - sdf3dc +#$in($uv-clamp($uv, -abs(vec3($x, $y, $z)), abs(vec3($x, $y, $z)))) + +#Inputs: +#in, vec2, default:vec2(100, 0.0), (sdf3dc input) +#elongation, vector3, min: 0, max: 1, default:0, step:0.01 + +#---------------------- +#sdf3d_extrusion.mmg + +#Outputs: + +#vec2 $(name_uv)_w = vec2($in($uv.xz+vec2(0.5)),abs($uv.y)-$d); + +#Output - sdf3dc +#min(max($(name_uv)_w.x,$(name_uv)_w.y),0.0)+length(max($(name_uv)_w,0.0)) + +#Inputs: +#in, sdf2d, default:100, (input) +#length, float, min: 0, max: 1, default:0.25, step:0.01 + +#---------------------- +#sdf3d_morph.mmg + +#Outputs: + +#Output - sdf3d +#mix($in1($uv), $in2($uv), $amount) + +#Inputs: +#in1, vec2, default:vec2(100, 0.0), (sdf3d input) +#in2, vec2, default:vec2(100, 0.0), (sdf3d input) +#amount, float, min: 0, max: 1, default:0.5, step:0.01 + +#---------------------- +#raymarching.mmg (raymarching_preview.mmg) +#Raymarches a 3D object (described as signed distance function with optional color index) +#to render a heightmap, a normal map and a color index map. + +#raymarch_$name = sdf3d_raymarch +#vec2 $(name_uv)_d = raymarch_$name($uv); + +#Outputs: + +#HeightMap - float - The generated height map +#1.0-$(name_uv)_d.x + +#NormalMap - rgb - The generated normal map +#vec3(0.5)+0.5*normal_$name(vec3($uv-vec2(0.5), 1.0-$(name_uv)_d.x)) + +#ColorMap - float - The generated color index map +#$(name_uv)_d.y + +#Inputs: +#input, vec2, default:vec2(100, 0.0), (sdf3dc input) + +#---------------------- +#raymarching_preview.mmg + +#Outputs: + +#Output (rgb) +#render_$name($uv-vec2(0.5)) + +#Inputs: +#input, vec2, default:vec2(100, 0.0), (sdf3dc input) + +static func raymarch(uv : Vector2) -> Color: + var d : Vector2 = sdf3d_raymarch(uv); + + var f : float = 1.0 - d.x; + + return Color(f, f, f, 1) + +static func raymarch2(uv : Vector2) -> Color: + var d : Vector2 = sdf3d_raymarch(uv); + + var v : Vector3 = Vector3(0.5, 0.5, 0.5) + 0.5 * sdf3d_normal(Vector3(uv.x - 0.5, uv.y - 0.5, 1.0 - d.x)); + + return Color(v.x, v.y, v.z, 1) + +static func raymarch3(uv : Vector2) -> Color: + var v : Vector2 = sdf3d_raymarch(uv); + + return Color(v.y, v.y, v.y, 1) + +#length($uv)-$r + +static func sdf3d_sphere(p : Vector3, r : float) -> Vector2: + var s : float = p.length() - r; + + return Vector2(s, 0.0); + +#vec3 $(name_uv)_q = abs($uv) - vec3($sx, $sy, $sz); +#length(max($(name_uv)_q,0.0))+min(max($(name_uv)_q.x,max($(name_uv)_q.y,$(name_uv)_q.z)),0.0)-$r + +static func sdf3d_box(p : Vector3, sx : float, sy : float, sz : float, r : float) -> Vector2: + var v : Vector3 = Commons.absv3((p)) - Vector3(sx, sy, sz); + var f : float = (Commons.maxv3(v,Vector3())).length() + min(max(v.x,max(v.y, v.z)),0.0) - r; + + return Vector2(f, 0.0); + +#Y: $axis = length($uv.xz),$uv.y +#vec2 $(name_uv)_d = abs(vec2($axis)) - vec2($r,$l); + +static func sdf3d_cylinder_y(p : Vector3, r : float, l : float) -> Vector2: + var v : Vector2 = Commons.absv2(Vector2(Vector2(p.x, p.z).length(),(p).y)) - Vector2(r,l); + var f : float = min(max(v.x, v.y),0.0) + Commons.maxv2(v, Vector2()).length(); + + return Vector2(f, 0.0); + +#X: $axis = length($uv.yz),$uv.x +#vec2 $(name_uv)_d = abs(vec2($axis)) - vec2($r,$l); + +static func sdf3d_cylinder_x(p : Vector3, r : float, l : float) -> Vector2: + var v : Vector2 = Commons.absv2(Vector2(Vector2(p.y, p.z).length(),(p).x)) - Vector2(r, l); + var f : float = min(max(v.x, v.y),0.0) + Commons.maxv2(v, Vector2()).length(); + + return Vector2(f, 0.0); + +#Z: $axis = length($uv.xy),$uv.z +#vec2 $(name_uv)_d = abs(vec2($axis)) - vec2($r,$l); + +static func sdf3d_cylinder_z(p : Vector3, r : float, l : float) -> Vector2: + var v : Vector2 = Commons.absv2(Vector2(Vector2(p.x, p.y).length(),(p).z)) - Vector2(r, l); + var f : float = min(max(v.x, v.y),0.0) + Commons.maxv2(v, Vector2()).length(); + + return Vector2(f, 0.0); + +#vec3 $(name_uv)_p = $uv; +#$(name_uv)_p.$axis -= clamp($(name_uv)_p.$axis, -$l, $l); +#return length($(name_uv)_p)-$r*$profile(clamp(0.5+0.5*($uv).$axis/$l, 0.0, 1.0)) + +static func sdf3d_capsule_y(p : Vector3, r : float, l : float) -> Vector2: + var v : Vector3 = p; + v.y -= clamp(v.y, -l, l); + var f : float = v.length() - r; + + return Vector2(f, 0.0); + +static func sdf3d_capsule_x(p : Vector3, r : float, l : float) -> Vector2: + var v : Vector3 = p; + v.x -= clamp(v.x, -l, l); + var f : float = v.length() - r; + + return Vector2(f, 0.0); + +static func sdf3d_capsule_z(p : Vector3, r : float, l : float) -> Vector2: + var v : Vector3 = p; + v.z -= clamp(v.z, -l, l); + var f : float = v.length() - r; + + return Vector2(f, 0.0); + +#+X: $axis = length($uv.yz),-$uv.x +#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis)) + +static func sdf3d_cone_px(p : Vector3, a : float) -> Vector2: + var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.y, p.z).length(), - (p).x)); + + return Vector2(f, 0.0); + +#-X: $axis = length($uv.yz),$uv.x +#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis)) + +static func sdf3d_cone_nx(p : Vector3, a : float) -> Vector2: + var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.y, p.z).length(),(p).x)); + + return Vector2(f, 0.0); + +#+Y: $axis = length($uv.xz),$uv.y +#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis)) + +static func sdf3d_cone_py(p : Vector3, a : float) -> Vector2: + var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.x, p.z).length(),(p).y)); + + return Vector2(f, 0.0); + +#-Y: $axis = length($uv.xz),-$uv.y +#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis)) + +static func sdf3d_cone_ny(p : Vector3, a : float) -> Vector2: + var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.x, p.z).length(),-(p).y)); + + return Vector2(f, 0.0); + +#+Z: $axis = length($uv.xy),-$uv.z +#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis)) + +static func sdf3d_cone_pz(p : Vector3, a : float) -> Vector2: + var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.x, p.y).length(),-(p).z)); + + return Vector2(f, 0.0); + + +#-Z: $axis = length($uv.xy),$uv.z +#dot(vec2(cos($a*0.01745329251),sin($a*0.01745329251)),vec2($axis)) + +static func sdf3d_cone_nz(p : Vector3, a : float) -> Vector2: + var f : float = Vector2(cos(a*0.01745329251),sin(a*0.01745329251)).dot(Vector2(Vector2(p.x, p.y).length(),(p).z)); + + return Vector2(f, 0.0); + +static func sdf3d_torus_x(p : Vector3, R : float, r : float) -> Vector2: + var q : Vector2 = Vector2(Vector2(p.y, p.z).length() - R,(p).x); + var f : float = q.length() - r; + + return Vector2(f, 0.0); + +static func sdf3d_torus_y(p : Vector3, R : float, r : float) -> Vector2: + var q : Vector2 = Vector2(Vector2(p.z, p.x).length() - R,(p).y); + var f : float = q.length() - r; + + return Vector2(f, 0.0); + +static func sdf3d_torus_z(p : Vector3, R : float, r : float) -> Vector2: + var q : Vector2 = Vector2(Vector2(p.x, p.y).length() - R,(p).z); + var f : float = q.length() - r; + + return Vector2(f, 0.0); + + +#vec2 raymarch_$name(vec2 uv) { +# vec3 ro = vec3(uv-vec2(0.5), 1.0); +# vec3 rd = vec3(0.0, 0.0, -1.0); +# float dO = 0.0; +# float c = 0.0; +# +# for (int i=0; i < 100; i++) { +# vec3 p = ro + rd*dO; +# vec2 dS = $sdf(p); +# dO += dS.x; +# +# if (dO >= 1.0) { +# break; +# } else if (dS.x < 0.0001) { +# c = dS.y; +# break; +# } +# } +# +# return vec2(dO, c); +#} + +static func sdf3d_raymarch(uv : Vector2) -> Vector2: + var ro : Vector3 = Vector3(uv.x - 0.5, uv.y - 0.5, 1.0); + var rd : Vector3 = Vector3(0.0, 0.0, -1.0); + var dO : float = 0.0; + var c : float = 0.0; + + for i in range(100): + var p : Vector3 = ro + rd * dO; + var dS : Vector2 = sdf3d_input(p); + + dO += dS.x; + + if (dO >= 1.0): + break; + elif (dS.x < 0.0001): + c = dS.y; + break; + + return Vector2(dO, c); + +#vec3 normal_$name(vec3 p) { +# if (p.z <= 0.0) { +# return vec3(0.0, 0.0, 1.0); +# } +# +# float d = $sdf(p).x; +# float e = .001; +# vec3 n = d - vec3( +# $sdf(p-vec3(e, 0.0, 0.0)).x, +# $sdf(p-vec3(0.0, e, 0.0)).x, +# $sdf(p-vec3(0.0, 0.0, e)).x); +# +# return vec3(-1.0, -1.0, -1.0)*normalize(n); +#} + +static func sdf3d_normal(p : Vector3) -> Vector3: + if (p.z <= 0.0): + return Vector3(0.0, 0.0, 1.0); + + var d : float = sdf3d_input(p).x; + var e : float = .001; + + var n : Vector3 = Vector3( + d - sdf3d_input(p - Vector3(e, 0.0, 0.0)).x, + d - sdf3d_input(p - Vector3(0.0, e, 0.0)).x, + d - sdf3d_input(p - Vector3(0.0, 0.0, e)).x); + + return Vector3(-1.0, -1.0, -1.0) * n.normalized(); + +#vec2 sdf3dc_union(vec2 a, vec2 b) { +# return vec2(min(a.x, b.x), mix(b.y, a.y, step(a.x, b.x))); +#} + +static func sdf3dc_union(a : Vector2, b : Vector2) -> Vector2: + return Vector2(min(a.x, b.x), lerp(b.y, a.y, Commons.step(a.x, b.x))); + +#vec2 sdf3dc_sub(vec2 a, vec2 b) { +# return vec2(max(-a.x, b.x), a.y); +#} + +static func sdf3dc_sub(a : Vector2, b : Vector2) -> Vector2: + return Vector2(max(-a.x, b.x), a.y); + +#vec2 sdf3dc_inter(vec2 a, vec2 b) { +# return vec2(max(a.x, b.x), mix(a.y, b.y, step(a.x, b.x))); +#} + +static func sdf3dc_inter(a : Vector2, b : Vector2) -> Vector2: + return Vector2(max(a.x, b.x), lerp(a.y, b.y, Commons.step(a.x, b.x))); + +#vec2 sdf3d_smooth_union(vec2 d1, vec2 d2, float k) { +# float h = clamp(0.5+0.5*(d2.x-d1.x)/k, 0.0, 1.0); +# return vec2(mix(d2.x, d1.x, h)-k*h*(1.0-h), mix(d2.y, d1.y, step(d1.x, d2.x))); +#} + +static func sdf3d_smooth_union(d1 : Vector2, d2 : Vector2, k : float) -> Vector2: + var h : float = clamp(0.5 + 0.5 * (d2.x - d1.x) / k, 0.0, 1.0); + return Vector2(lerp(d2.x, d1.x, h)-k*h*(1.0 - h), lerp(d2.y, d1.y, Commons.step(d1.x, d2.x))); + +#vec2 sdf3d_smooth_subtraction(vec2 d1, vec2 d2, float k ) { +# float h = clamp(0.5-0.5*(d2.x+d1.x)/k, 0.0, 1.0); +# return vec2(mix(d2.x, -d1.x, h )+k*h*(1.0-h), d2.y); +#} + +static func sdf3d_smooth_subtraction(d1 : Vector2, d2 : Vector2, k : float) -> Vector2: + var h : float = clamp(0.5 - 0.5 * (d2.x + d1.x) / k, 0.0, 1.0); + return Vector2(lerp(d2.x, -d1.x, h )+k*h*(1.0-h), d2.y); + +#vec2 sdf3d_smooth_intersection(vec2 d1, vec2 d2, float k ) { +# float h = clamp(0.5-0.5*(d2.x-d1.x)/k, 0.0, 1.0); +# return vec2(mix(d2.x, d1.x, h)+k*h*(1.0-h), mix(d1.y, d2.y, step(d1.x, d2.x))); +#} + +static func sdf3d_smooth_intersection(d1 : Vector2, d2 : Vector2, k : float) -> Vector2: + var h : float = clamp(0.5 - 0.5 * (d2.x - d1.x) / k, 0.0, 1.0); + return Vector2(lerp(d2.x, d1.x, h)+k*h*(1.0-h), lerp(d1.y, d2.y, Commons.step(d1.x, d2.x))); + +static func sdf3d_rounded(v : Vector2, r : float) -> Vector2: + return Vector2(v.x - r, v.y); + +static func sdf3d_elongation(p : Vector3, v : Vector3) -> Vector3: + return ((p) - Commons.clampv3((p), - Commons.absv3(v), Commons.absv3(v))) + +static func sdf3d_repeat(p : Vector3, r : Vector2, randomness : float, pseed : int) -> Vector3: + #$in(repeat($uv, vec3(1.0/$rx, 1.0/$ry, 0.0), float($seed), $r)) + return repeat(p, Vector3(1.0 / r.x, 1.0 / r.y, 0.00001), float(pseed), randomness) + +#vec3 repeat(vec3 p, vec3 r, float seed, float randomness) { +# vec3 a = (rand3(floor(mod((p.xy+0.5*r.xy)/r.xy, 1.0/r.xy)+vec2(seed)))-0.5)*6.28*randomness; +# p = mod(p+0.5*r,r)-0.5*r; +# +# vec3 rv; +# float c; +# float s; +# +# c = cos(a.x); +# s = sin(a.x); +# +# rv.x = p.x; +# rv.y = p.y*c+p.z*s;rv.z = -p.y*s+p.z*c; +# +# c = cos(a.y); +# s = sin(a.y); +# +# p.x = rv.x*c+rv.z*s; +# p.y = rv.y; +# p.z = -rv.x*s+rv.z*c; +# +# c = cos(a.z); +# s = sin(a.z); +# +# rv.x = p.x*c+p.y*s; +# rv.y = -p.x*s+p.y*c; +# rv.z = p.z; +# +# return rv; +#} + +static func repeat(p : Vector3, r : Vector3, pseed : float, randomness : float) -> Vector3: + var a : Vector3 = (Commons.rand3(Commons.floorv2(Commons.modv2((Vector2(p.x, p.y) + Vector2(0.5, 0.5) * Vector2(r.x, r.y)) / Vector2(r.x, r.y), Vector2(1, 1) / Vector2(r.x, r.y)) + Vector2(pseed, pseed))) - Vector3(0.5, 0.5, 0.5)) * 6.28 * randomness + p = Commons.modv3(p + Vector3(0.5, 0.5, 0.5) * r, r) - Vector3(0.5, 0.5, 0.5) * r; + + var rv : Vector3 = Vector3() + var c : float = 0 + var s : float = 0 + + c = cos(a.x); + s = sin(a.x); + + rv.x = p.x; + rv.y = p.y* c + p.z * s; + rv.z = -p.y * s + p.z * c; + + c = cos(a.y); + s = sin(a.y); + + p.x = rv.x*c+rv.z*s; + p.y = rv.y; + p.z = -rv.x*s+rv.z*c; + + c = cos(a.z); + s = sin(a.z); + + rv.x = p.x * c + p.y * s; + rv.y = -p.x * s + p.y * c; + rv.z = p.z; + + return rv; + +#vec3 rotate3d(vec3 p, vec3 a) { +# vec3 rv; +# float c; +# float s; +# c = cos(a.x); +# s = sin(a.x); +# rv.x = p.x; +# rv.y = p.y*c+p.z*s; +# rv.z = -p.y*s+p.z*c; +# c = cos(a.y); +# s = sin(a.y); +# p.x = rv.x*c+rv.z*s; +# p.y = rv.y; +# p.z = -rv.x*s+rv.z*c; +# c = cos(a.z); +# s = sin(a.z); +# rv.x = p.x*c+p.y*s; +# rv.y = -p.x*s+p.y*c; +# rv.z = p.z; +# return rv; +#} + +static func rotate3d(p : Vector3, a : Vector3) -> Vector3: + var rv : Vector3 = Vector3() + var c : float = 0 + var s : float = 0 + c = cos(a.x) + s = sin(a.x) + rv.x = p.x + rv.y = p.y * c + p.z * s + rv.z = -p.y * s + p.z * c + c = cos(a.y) + s = sin(a.y) + p.x = rv.x * c + rv.z * s + p.y = rv.y + p.z = -rv.x * s + rv.z * c + c = cos(a.z) + s = sin(a.z) + rv.x = p.x * c + p.y * s + rv.y = -p.x * s + p.y * c + rv.z = p.z + + return rv + +#vec3 circle_repeat_transform(vec3 p, float count) { +# float r = 6.28/count; +# float pa = atan(p.x, p.y); +# float a = mod(pa+0.5*r, r)-0.5*r; +# vec3 rv; +# float c = cos(a-pa); +# float s = sin(a-pa); +# rv.x = p.x*c+p.y*s; +# rv.y = -p.x*s+p.y*c; +# rv.z = p.z; +# return rv; +#} + +static func circle_repeat_transform(p : Vector3, count : float) -> Vector3: + var r : float = 6.28 / count + var pa : float = atan2(p.x, p.y) + var a : float = Commons.modf(pa + 0.5 * r, r) - 0.5 * r + var rv : Vector3 = Vector3() + var c : float = cos(a-pa) + var s : float = sin(a-pa) + rv.x = p.x * c + p.y * s + rv.y = -p.x * s + p.y * c + rv.z = p.z + return rv + +#todo this needs to be solved +static func sdf3d_input(p : Vector3) -> Vector2: + return sdf3d_sphere(p, 0.5) + +#raymarching_preview.mmg +#vec3 render_$name(vec2 uv) { +# vec3 p = vec3(uv, 2.0-raymarch_$name(vec3(uv, 2.0), vec3(0.0, 0.0, -1.0))); +# vec3 n = normal_$name(p); +# vec3 l = vec3(5.0, 5.0, 10.0); +# vec3 ld = normalize(l-p); +# +# float o = step(p.z, 0.001); +# float shadow = 1.0-0.75*step(raymarch_$name(l, -ld), length(l-p)-0.01); +# float light = 0.3+0.7*dot(n, ld)*shadow; +# +# return vec3(0.8+0.2*o, 0.8+0.2*o, 1.0)*light; +#} + +#static func sdf3d_render(p : Vector2) -> Vector3: +# return Vector3() diff --git a/game/addons/mat_maker_gd/nodes/common/shapes.gd b/game/addons/mat_maker_gd/nodes/common/shapes.gd new file mode 100644 index 0000000..3a3501e --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/shapes.gd @@ -0,0 +1,292 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#sphere.mmg + +#Outputs: + +#Output - (float) - A heightmap of the specified sphere +#sphere($uv, vec2($cx, $cy), $r) + +#Inputs: +#center, vector2, default: 0.5, min: 0, max: 1, step: 0.01 +#radius, float, min: 0, max: 1, default: 0.5, step:0.01 + +#---------------------- +#shape.mmg + +#Outputs: + +#Output - (float) - Shows a white shape on a black background +#shape_$(shape)($(uv), $(sides), $(radius)*$radius_map($uv), $(edge)*$edge_map($uv)) + +#Inputs: +#shape, enum, default: 0, values: circle, ploygon, star, curved_star, rays +#sides, int, min: 2, max: 32, default: 3, step:1 +#radius, float, min: 0, max: 1, default: 1, step:0.01 (universal input) +#edge, float, min: 0, max: 1, default: 0.2, step:0.01 (universal input) + +#---------------------- +#box.mmg +#A heightmap of the specified box + +# "outputs": [ +# { +# "f": "1.0-box($uv, vec3($cx, $cy, $cz), vec3($sx, $sy, $sz), 0.01745329251*vec3($rx, $ry, $rz))", +# "longdesc": "A heightmap of the specified box", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.5, +# "label": "Center X", +# "longdesc": "X coordinate of the center of the box", +# "max": 1, +# "min": 0, +# "name": "cx", +# "shortdesc": "Center.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Center Y", +# "longdesc": "Y coordinate of the center of the box", +# "max": 1, +# "min": 0, +# "name": "cy", +# "shortdesc": "Center.y", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Center Z", +# "longdesc": "Z coordinate of the center of the box", +# "max": 0.5, +# "min": -0.5, +# "name": "cz", +# "shortdesc": "Center.z", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Size X", +# "longdesc": "Size along X axis", +# "max": 1, +# "min": 0, +# "name": "sx", +# "shortdesc": "Size.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Size Y", +# "longdesc": "Size along Y axis", +# "max": 1, +# "min": 0, +# "name": "sy", +# "shortdesc": "Size.y", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Size Z", +# "longdesc": "Size along Z axis", +# "max": 1, +# "min": 0, +# "name": "sz", +# "shortdesc": "Size.z", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Rot X", +# "longdesc": "Rotation angle around X axis", +# "max": 180, +# "min": -180, +# "name": "rx", +# "shortdesc": "Rot.x", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Rot Y", +# "longdesc": "Rotation angle around Y axis", +# "max": 180, +# "min": -180, +# "name": "ry", +# "shortdesc": "Rot.y", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Rot Z", +# "longdesc": "Rotation angle around Y axis", +# "max": 180, +# "min": -180, +# "name": "rz", +# "shortdesc": "Rot.z", +# "step": 0.1, +# "type": "float" +# } +# ] + +#float sphere(vec2 uv, vec2 c, float r) { +# uv -= c; +# uv /= r; +# return 2.0*r*sqrt(max(0.0, 1.0-dot(uv, uv))); +#} + +static func sphere(uv : Vector2, c : Vector2, r : float) -> float: + return 0.0 + +#float shape_circle(vec2 uv, float sides, float size, float edge) { +# uv = 2.0*uv-1.0; +# edge = max(edge, 1.0e-8); +# float distance = length(uv); +# return clamp((1.0-distance/size)/edge, 0.0, 1.0); +#} + +static func shape_circle(uv : Vector2, sides : float, size : float, edge : float) -> float: + uv.x = 2.0 * uv.x - 1.0 + uv.y = 2.0 * uv.y - 1.0 + + edge = max(edge, 1.0e-8) + + var distance : float = uv.length() + + return clamp((1.0 - distance / size) / edge, 0.0, 1.0) + +#float shape_polygon(vec2 uv, float sides, float size, float edge) { +# uv = 2.0*uv-1.0; +# edge = max(edge, 1.0e-8); +# float angle = atan(uv.x, uv.y)+3.14159265359; +# float slice = 6.28318530718/sides; +# return clamp((1.0-(cos(floor(0.5+angle/slice)*slice-angle)*length(uv))/size)/edge, 0.0, 1.0); +#} + +static func shape_polygon(uv : Vector2, sides : float, size : float, edge : float) -> float: + uv.x = 2.0 * uv.x - 1.0 + uv.y = 2.0 * uv.y - 1.0 + + edge = max(edge, 1.0e-8) + + #simple no branch for division by zero + uv.x += 0.0000001 + + var angle : float = atan(uv.y / uv.x) + 3.14159265359 + var slice : float = 6.28318530718 / sides + + return clamp((size - cos(floor(0.5 + angle / slice) * slice - angle) * uv.length()) / (edge * size), 0.0, 1.0) + +#float shape_star(vec2 uv, float sides, float size, float edge) { +# uv = 2.0*uv-1.0; +# edge = max(edge, 1.0e-8); +# float angle = atan(uv.x, uv.y); +# float slice = 6.28318530718/sides; +# return clamp((1.0-(cos(floor(angle*sides/6.28318530718-0.5+2.0*step(fract(angle*sides/6.28318530718), 0.5))*slice-angle)*length(uv))/size)/edge, 0.0, 1.0); +#} + +static func shape_star(uv : Vector2, sides : float, size : float, edge : float) -> float: + uv.x = 2.0 * uv.x - 1.0 + uv.y = 2.0 * uv.y - 1.0 + + edge = max(edge, 1.0e-8); + + #simple no branch for division by zero + uv.x += 0.0000001 + + var angle : float = atan(uv.y / uv.x) + var slice : float = 6.28318530718 / sides + + return clamp((size - cos(floor(1.5 + angle / slice - 2.0 * Commons.step(0.5 * slice, Commons.modf(angle, slice))) * slice - angle) * uv.length()) / (edge * size), 0.0, 1.0); + +#float shape_curved_star(vec2 uv, float sides, float size, float edge) { +# uv = 2.0*uv-1.0; +# edge = max(edge, 1.0e-8); +# float angle = 2.0*(atan(uv.x, uv.y)+3.14159265359); +# float slice = 6.28318530718/sides; +# return clamp((1.0-cos(floor(0.5+0.5*angle/slice)*2.0*slice-angle)*length(uv)/size)/edge, 0.0, 1.0); +#} + +static func shape_curved_star(uv : Vector2, sides : float, size : float, edge : float) -> float: + uv.x = 2.0 * uv.x - 1.0 + uv.y = 2.0 * uv.y - 1.0 + + edge = max(edge, 1.0e-8); + + #simple no branch for division by zero + uv.x += 0.0000001 + + var angle : float = 2.0*(atan(uv.y / uv.x) + 3.14159265359) + var slice : float = 6.28318530718 / sides + + return clamp((size - cos(floor(0.5 + 0.5 * angle / slice) * 2.0 * slice - angle) * uv.length())/(edge * size), 0.0, 1.0); + +#float shape_rays(vec2 uv, float sides, float size, float edge) { +# uv = 2.0*uv-1.0; +# edge = 0.5*max(edge, 1.0e-8)*size; +# float slice = 6.28318530718/sides; +# float angle = mod(atan(uv.x, uv.y)+3.14159265359, slice)/slice; +# return clamp(min((size-angle)/edge, angle/edge), 0.0, 1.0); +#} + +static func shape_rays(uv : Vector2, sides : float, size : float, edge : float) -> float: + + uv.x = 2.0 * uv.x - 1.0 + uv.y = 2.0 * uv.y - 1.0 + + edge = 0.5 * max(edge, 1.0e-8) * size + + #simple no branch for division by zero + uv.x += 0.0000001 + + var slice : float = 6.28318530718 / sides + var angle : float = Commons.modf(atan(uv.y / uv.x) + 3.14159265359, slice) / slice + + return clamp(min((size - angle) / edge, angle / edge), 0.0, 1.0); + +#float box(vec2 uv, vec3 center, vec3 rad, vec3 rot) {\n\t +# vec3 ro = vec3(uv, 1.0)-center;\n\t +# vec3 rd = vec3(0.0000001, 0.0000001, -1.0);\n\t +# mat3 r = mat3(vec3(1, 0, 0), vec3(0, cos(rot.x), -sin(rot.x)), vec3(0, sin(rot.x), cos(rot.x)));\n\t +# +# r *= mat3(vec3(cos(rot.y), 0, -sin(rot.y)), vec3(0, 1, 0), vec3(sin(rot.y), 0, cos(rot.y)));\n\t +# r *= mat3(vec3(cos(rot.z), -sin(rot.z), 0), vec3(sin(rot.z), cos(rot.z), 0), vec3(0, 0, 1));\n\t +# ro = r * ro;\n\t +# rd = r * rd;\n +# vec3 m = 1.0/rd;\n +# vec3 n = m*ro;\n +# vec3 k = abs(m)*rad;\n +# vec3 t1 = -n - k;\n +# vec3 t2 = -n + k;\n\n +# +# float tN = max(max(t1.x, t1.y), t1.z);\n +# float tF = min(min(t2.x, t2.y), t2.z);\n +# +# if(tN>tF || tF<0.0) return 1.0;\n +# +# return tN;\n +#} + diff --git a/game/addons/mat_maker_gd/nodes/common/simple.gd b/game/addons/mat_maker_gd/nodes/common/simple.gd new file mode 100644 index 0000000..50bfa0c --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/simple.gd @@ -0,0 +1,147 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#profile.mmg + +# "inputs": [ +# { +# "default": "dot($gradient($uv.x).xyz, vec3(1.0/3.0))", +# "label": "2:", +# "name": "in", +# "type": "f" +# } +# ], +# "outputs": [ +# { +# "f": "draw_profile_$style($uv, $in($uv), (dot($gradient($uv.x+0.001).xyz, vec3(1.0/3.0))-dot($gradient($uv.x-0.001).xyz, vec3(1.0/3.0)))/0.002, max(0.0001, $width))", +# "longdesc": "An image showing the profile defined by the gradient", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "longdesc": "Style of the output image (fill or curve)", +# "name": "style", +# "shortdesc": "Style", +# "type": "enum", +# "values": [ +# { +# "name": "Curve", +# "value": "curve" +# }, +# { +# "name": "Fill", +# "value": "fill" +# } +# ] +# }, +# { +# "default": { +# "interpolation": 1, +# "points": [ +# { +# "a": 1, +# "b": 0, +# "g": 0, +# "pos": 0, +# "r": 0 +# }, +# { +# "a": 1, +# "b": 1, +# "g": 1, +# "pos": 1, +# "r": 1 +# } +# ], +# "type": "Gradient" +# }, +# "label": "", +# "longdesc": "Gradient that defines the profile to be shown", +# "name": "gradient", +# "shortdesc": "Gradient", +# "type": "gradient" +# }, +# { +# "control": "None", +# "default": 0.05, +# "label": "", +# "longdesc": "Width of the curve", +# "max": 1, +# "min": 0, +# "name": "width", +# "shortdesc": "Width", +# "step": 0.01, +# "type": "float" +# } +# ] + +#---------------------- +#uniform.mmg +#Draws a uniform image + +# "outputs": [ +# { +# "longdesc": "A uniform image of the selected color", +# "rgba": "$(color)", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": { +# "a": 1, +# "b": 1, +# "g": 1, +# "r": 1 +# }, +# "label": "", +# "longdesc": "Color of the uniform image", +# "name": "color", +# "shortdesc": "Color", +# "type": "color" +# } +# ] + +#---------------------- +#uniform_greyscale.mmg +#Draws a uniform greyscale image + +# "outputs": [ +# { +# "f": "$(color)", +# "longdesc": "A uniform image of the selected value", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.5, +# "label": "", +# "longdesc": "The value of the uniform greyscale image", +# "max": 1, +# "min": 0, +# "name": "color", +# "shortdesc": "Value", +# "step": 0.01, +# "type": "float" +# } +# ] + +#float draw_profile_fill(vec2 uv, float y, float dy, float w) {\n\t +# return 1.0-clamp(sin(1.57079632679-atan(dy))*(1.0-uv.y-y)/w, 0.0, 1.0);\n +#} + +#float draw_profile_curve(vec2 uv, float y, float dy, float w) {\n\t +# return 1.0-clamp(sin(1.57079632679-atan(dy))*abs(1.0-uv.y-y)/w, 0.0, 1.0);\n +#} + diff --git a/game/addons/mat_maker_gd/nodes/common/tex3d.gd b/game/addons/mat_maker_gd/nodes/common/tex3d.gd new file mode 100644 index 0000000..1ef03b6 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/tex3d.gd @@ -0,0 +1,979 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#tex3d_apply.mmg +#Applies 3D textures to a rendered 3D signed distance function scene. + +# "inputs": [ +# { +# "default": "0.0", +# "label": "Height", +# "longdesc": "The height map generated by the Render node", +# "name": "z", +# "shortdesc": "HeightMap", +# "type": "f" +# }, +# { +# "default": "0.0", +# "label": "Color", +# "longdesc": "The color map generated by the Render node", +# "name": "c", +# "shortdesc": "ColorMap", +# "type": "f" +# }, +# { +# "default": "vec3(1.0)", +# "label": "Texture", +# "longdesc": "The 3D texture", +# "name": "t", +# "shortdesc": "Tex3D", +# "type": "tex3d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The textured 3D scene", +# "rgb": "$t(vec4($uv, $z($uv), $c($uv)))", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], + +#---------------------- +#tex3d_apply_invuvmap.mmg +#This node applies a 3D texture to an object using its inverse UV map. + +# "inputs": [ +# { +# "default": "vec3(1.0)", +# "label": "Texture", +# "longdesc": "The input 3D texture", +# "name": "t", +# "shortdesc": "Texture", +# "type": "tex3d" +# }, +# { +# "default": "vec3(0.0)", +# "label": "Inv. UV Map", +# "longdesc": "The inverse UV map of the object", +# "name": "map", +# "shortdesc": "InvUVMap", +# "type": "rgb" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The generated texture", +# "rgb": "$t(vec4($map($uv), 0.0))", +# "shortdesc": "Output", +# "type": "rgb" +# } +# ], + +#---------------------- +#tex3d_blend.mmg +#Blends its 3D texture inputs, using an optional mask + +# "inputs": [ +# { +# "default": "vec3($uv.x, 1.0, 1.0)", +# "label": "Source1", +# "longdesc": "The foreground input", +# "name": "s1", +# "shortdesc": "Foreground", +# "type": "tex3d" +# }, +# { +# "default": "vec3(1.0, $uv.y, 1.0)", +# "label": "Source2", +# "longdesc": "The background input", +# "name": "s2", +# "shortdesc": "Background", +# "type": "tex3d" +# }, +# { +# "default": "vec3(1.0)", +# "label": "Opacity", +# "longdesc": "The optional opacity mask", +# "name": "a", +# "shortdesc": "Mask", +# "type": "tex3d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The 3D texture generated by the blend operation", +# "shortdesc": "Output", +# "tex3d": "blend3d_$blend_type($s1($uv).rgb, $s2($uv).rgb, $amount*dot($a($uv), vec3(1.0))/3.0)", +# "type": "tex3d" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "longdesc": "The algorithm used to blend the inputs", +# "name": "blend_type", +# "shortdesc": "Blend mode", +# "type": "enum", +# "values": [ +# { +# "name": "Normal", +# "value": "normal" +# }, +# { +# "name": "Multiply", +# "value": "multiply" +# }, +# { +# "name": "Screen", +# "value": "screen" +# }, +# { +# "name": "Overlay", +# "value": "overlay" +# }, +# { +# "name": "Hard Light", +# "value": "hard_light" +# }, +# { +# "name": "Soft Light", +# "value": "soft_light" +# }, +# { +# "name": "Burn", +# "value": "burn" +# }, +# { +# "name": "Dodge", +# "value": "dodge" +# }, +# { +# "name": "Lighten", +# "value": "lighten" +# }, +# { +# "name": "Darken", +# "value": "darken" +# }, +# { +# "name": "Difference", +# "value": "difference" +# } +# ] +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "3:", +# "longdesc": "The opacity of the blend operation", +# "max": 1, +# "min": 0, +# "name": "amount", +# "shortdesc": "Opacity", +# "step": 0, +# "type": "float" +# } +# ], + +#---------------------- +#tex3d_colorize.mmg +#Remaps a greyscale 3D texture to a custom gradient + +# "inputs": [ +# { +# "default": "vec3($uv.x+0.5)", +# "label": "", +# "longdesc": "The input greyscale 3D texture", +# "name": "in", +# "shortdesc": "Input", +# "type": "tex3d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The remapped color 3D texture ", +# "shortdesc": "Output", +# "tex3d": "$g(dot($in($uv), vec3(1.0))/3.0).rgb", +# "type": "tex3d" +# } +# ], +# "parameters": [ +# { +# "default": { +# "interpolation": 1, +# "points": [ +# { +# "a": 1, +# "b": 0, +# "g": 0, +# "pos": 0, +# "r": 0 +# }, +# { +# "a": 1, +# "b": 1, +# "g": 1, +# "pos": 1, +# "r": 1 +# } +# ], +# "type": "Gradient" +# }, +# "label": "", +# "longdesc": "The gradient to which the input is remapped", +# "name": "g", +# "shortdesc": "Gradient", +# "type": "gradient" +# } +# ], + +#---------------------- +#tex3d_distort.mmg +#Distorts its input 3D texture using another 3D texture + +# "inputs": [ +# { +# "default": "vec3(1.0)", +# "label": "", +# "longdesc": "The 3D texture to be distorted", +# "name": "in1", +# "shortdesc": "Input1", +# "type": "tex3d" +# }, +# { +# "default": "vec3(0.0)", +# "label": "", +# "longdesc": "The 3D texture used to distort Input1", +# "name": "in2", +# "shortdesc": "Input2", +# "type": "tex3d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The distorted 3D texture", +# "shortdesc": "Output", +# "tex3d": "$in1(vec4($uv.xyz+($in2($uv)*$Distort*0.5-0.5), 0.0))", +# "type": "tex3d" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.5, +# "label": "Distort", +# "longdesc": "The strength of the distort effect", +# "max": 1, +# "min": 0, +# "name": "Distort", +# "shortdesc": "Strength", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#tex3d_fbm.mmg +#Generates a 3D noise made of several octaves of a simple noise + +# "instance": "float $(name)_fbm(vec3 coord, vec3 size, int octaves, float persistence, float seed) {\n\tfloat normalize_factor = 0.0;\n\tfloat value = 0.0;\n\tfloat scale = 1.0;\n\tfor (int i = 0; i < octaves; i++) {\n\t\tvalue += tex3d_fbm_$noise(coord*size, size, seed) * scale;\n\t\tnormalize_factor += scale;\n\t\tsize *= 2.0;\n\t\tscale *= persistence;\n\t}\n\treturn value / normalize_factor;\n}\n", +# "outputs": [ +# { +# "longdesc": "Shows a greyscale 3D texture of the generated noise", +# "shortdesc": "Output", +# "tex3d": "vec3($(name)_fbm($(uv).xyz, vec3($(scale_x), $(scale_y), $(scale_z)), int($(iterations)), $(persistence), float($(seed))))", +# "type": "tex3d" +# } +# ], +# "parameters": [ +# { +# "default": 2, +# "label": "Noise", +# "longdesc": "The simple noise type", +# "name": "noise", +# "shortdesc": "Noise type", +# "type": "enum", +# "values": [ +# { +# "name": "Value", +# "value": "value" +# }, +# { +# "name": "Perlin", +# "value": "perlin" +# }, +# { +# "name": "Cellular", +# "value": "cellular" +# } +# ] +# }, +# { +# "control": "None", +# "default": 4, +# "label": "Scale X", +# "longdesc": "The scale of the first octave along the X axis", +# "max": 32, +# "min": 1, +# "name": "scale_x", +# "shortdesc": "Scale.x", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 4, +# "label": "Scale Y", +# "longdesc": "The scale of the first octave along the Y axis", +# "max": 32, +# "min": 1, +# "name": "scale_y", +# "shortdesc": "Scale.y", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 4, +# "label": "Scale Z", +# "longdesc": "The scale of the first octave along the Z axis", +# "max": 32, +# "min": 1, +# "name": "scale_z", +# "shortdesc": "Scale.z", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 3, +# "label": "Iterations", +# "longdesc": "The number of noise octaves", +# "max": 10, +# "min": 1, +# "name": "iterations", +# "shortdesc": "Octaves", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Persistence", +# "longdesc": "The persistence between two consecutive octaves", +# "max": 1, +# "min": 0, +# "name": "persistence", +# "shortdesc": "Persistence", +# "step": 0.05, +# "type": "float" +# } +# ], + +#---------------------- +#tex3d_from2d.mmg +#Creates a 3D texture from a 2D texture + +# "inputs": [ +# { +# "default": "vec3(0.5)", +# "label": "", +# "longdesc": "The input 2D texture", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgb" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The generated 3D texture", +# "shortdesc": "Output", +# "tex3d": "$in($uv.xy+vec2(0.5))", +# "type": "tex3d" +# } +# ], + +#---------------------- +#tex3d_pattern.mmg +#A greyscale 3D texture that combines patterns along all 3 axes + +# "instance": "float $(name)_fct(vec3 uv) {\n\treturn mix3d_$(mix)(wave3d_$(x_wave)($(x_scale)*uv.x), wave3d_$(y_wave)($(y_scale)*uv.y), wave3d_$(z_wave)($(z_scale)*uv.z));\n}", +# "outputs": [ +# { +# "longdesc": "The generated 3D texture", +# "shortdesc": "Output", +# "tex3d": "vec3($(name)_fct($(uv).xyz))", +# "type": "tex3d" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "Combiner", +# "longdesc": "The operation used to combine the X, Y and Z patterns", +# "name": "mix", +# "shortdesc": "Combine", +# "type": "enum", +# "values": [ +# { +# "name": "Multiply", +# "value": "mul" +# }, +# { +# "name": "Add", +# "value": "add" +# }, +# { +# "name": "Max", +# "value": "max" +# }, +# { +# "name": "Min", +# "value": "min" +# }, +# { +# "name": "Xor", +# "value": "xor" +# }, +# { +# "name": "Pow", +# "value": "pow" +# } +# ] +# }, +# { +# "default": 0, +# "label": "X", +# "longdesc": "Pattern generated along the X axis", +# "name": "x_wave", +# "shortdesc": "Pattern.x", +# "type": "enum", +# "values": [ +# { +# "name": "Sine", +# "value": "sine" +# }, +# { +# "name": "Triangle", +# "value": "triangle" +# }, +# { +# "name": "Square", +# "value": "square" +# }, +# { +# "name": "Sawtooth", +# "value": "sawtooth" +# }, +# { +# "name": "Constant", +# "value": "constant" +# }, +# { +# "name": "Bounce", +# "value": "bounce" +# } +# ] +# }, +# { +# "control": "None", +# "default": 4, +# "label": "2:", +# "longdesc": "Repetitions of the pattern along X axis", +# "max": 32, +# "min": 0, +# "name": "x_scale", +# "shortdesc": "Repeat.x", +# "step": 1, +# "type": "float" +# }, +# { +# "default": 0, +# "label": "Y", +# "longdesc": "Pattern generated along the Y axis", +# "name": "y_wave", +# "shortdesc": "Pattern.y", +# "type": "enum", +# "values": [ +# { +# "name": "Sine", +# "value": "sine" +# }, +# { +# "name": "Triangle", +# "value": "triangle" +# }, +# { +# "name": "Square", +# "value": "square" +# }, +# { +# "name": "Sawtooth", +# "value": "sawtooth" +# }, +# { +# "name": "Constant", +# "value": "constant" +# }, +# { +# "name": "Bounce", +# "value": "bounce" +# } +# ] +# }, +# { +# "control": "None", +# "default": 4, +# "label": "3:", +# "longdesc": "Repetitions of the pattern along Y axis", +# "max": 32, +# "min": 0, +# "name": "y_scale", +# "shortdesc": "Repeat.y", +# "step": 1, +# "type": "float" +# }, +# { +# "default": 0, +# "label": "Z", +# "longdesc": "Pattern generated along the Z axis", +# "name": "z_wave", +# "shortdesc": "Pattern.z", +# "type": "enum", +# "values": [ +# { +# "name": "Sine", +# "value": "sine" +# }, +# { +# "name": "Triangle", +# "value": "triangle" +# }, +# { +# "name": "Square", +# "value": "square" +# }, +# { +# "name": "Sawtooth", +# "value": "sawtooth" +# }, +# { +# "name": "Constant", +# "value": "constant" +# }, +# { +# "name": "Bounce", +# "value": "bounce" +# } +# ] +# }, +# { +# "control": "None", +# "default": 4, +# "label": "4:", +# "longdesc": "Repetitions of the pattern along Z axis", +# "max": 32, +# "min": 0, +# "name": "z_scale", +# "shortdesc": "Repeat.z", +# "step": 1, +# "type": "float" +# } +# ], + +#---------------------- +#tex3d_rotate.mmg +#Rotates a 3D texture + +# "inputs": [ +# { +# "default": "vec3(1.0)", +# "label": "", +# "longdesc": "The input 3D texture", +# "name": "in", +# "shortdesc": "Input", +# "type": "tex3d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The rotated 3D texture", +# "shortdesc": "Output", +# "tex3d": "$in(vec4(tex3d_rotate($uv.xyz, -vec3($ax, $ay, $az)*0.01745329251), $uv.w))", +# "type": "tex3d" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0, +# "label": "X", +# "longdesc": "The rotation around the X axis", +# "max": 180, +# "min": -180, +# "name": "ax", +# "shortdesc": "Rotate.x", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Y", +# "longdesc": "The rotation around the Y axis", +# "max": 180, +# "min": -180, +# "name": "ay", +# "shortdesc": "Rotate.y", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Z", +# "longdesc": "The rotation around the Z axis", +# "max": 180, +# "min": -180, +# "name": "az", +# "shortdesc": "Rotate.z", +# "step": 1, +# "type": "float" +# } +# ], + +#---------------------- +#tex3d_select.mmg +#Selects a 3D texture for a given color index. This can be used to map several textures into a single 3D scene. + +# "code": "float $(name_uv)_d = ($uv.w-$v)/$t;", +# "inputs": [ +# { +# "default": "vec3(0.5)", +# "label": "", +# "longdesc": "The 3D texture associated to the specified color index", +# "name": "in1", +# "shortdesc": "Input1", +# "type": "tex3d" +# }, +# { +# "default": "vec3(0.5)", +# "label": "", +# "longdesc": "The 3D texture(s) associated to other color indices", +# "name": "in2", +# "shortdesc": "Input2", +# "type": "tex3d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The merged 3D texture", +# "shortdesc": "Output", +# "tex3d": "mix($in1($uv), $in2($uv), clamp(1.0-$(name_uv)_d*$(name_uv)_d, 0.0, 1.0))", +# "type": "tex3d" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.5, +# "label": "Value", +# "longdesc": "The value of the selected color index", +# "max": 1, +# "min": 0, +# "name": "v", +# "shortdesc": "Value", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.1, +# "label": "Tolerance", +# "longdesc": "The tolerance used when comparing color indices", +# "max": 1, +# "min": 0.01, +# "name": "t", +# "shortdesc": "Tolerance", +# "step": 0.001, +# "type": "float" +# } +# ], + +#---------------------- +#tex3d_select_shape.mmg +#Selects a 3D texture inside, and another outside a shape. This can be used to map several textures into a single 3D scene. + +# "inputs": [ +# { +# "default": "vec3(0.5)", +# "label": "", +# "longdesc": "The 3D texture associated to the specified color index", +# "name": "in1", +# "shortdesc": "Input1", +# "type": "tex3d" +# }, +# { +# "default": "vec3(0.5)", +# "label": "", +# "longdesc": "The 3D texture(s) associated to other color indices", +# "name": "in2", +# "shortdesc": "Input2", +# "type": "tex3d" +# }, +# { +# "default": "0.0", +# "label": "", +# "longdesc": "The shape in which input1 is applied", +# "name": "shape", +# "shortdesc": "Shape", +# "type": "sdf3d" +# } +# ], +# "outputs": [ +# { +# "longdesc": "The merged 3D texture", +# "shortdesc": "Output", +# "tex3d": "mix($in1($uv), $in2($uv), clamp($shape($uv.xyz)/max($d, 0.0001), 0.0, 1.0))", +# "type": "tex3d" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0.5, +# "label": "Smoothness", +# "longdesc": "The width of the transition area between both textures", +# "max": 1, +# "min": 0, +# "name": "d", +# "shortdesc": "Smoothness", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#tex3d_apply.mmg + +#---------------------- +#tex3d_apply.mmg + +#---------------------- +#tex3d_apply.mmg + +#---------------------- +#tex3d_apply.mmg + +#vec3 blend3d_normal(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*c1 + (1.0-opacity)*c2;\n +#} + +#vec3 blend3d_multiply(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*c1*c2 + (1.0-opacity)*c2;\n +#} + +#vec3 blend3d_screen(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*(1.0-(1.0-c1)*(1.0-c2)) + (1.0-opacity)*c2;\n +#} + +#float blend3d_overlay_f(float c1, float c2) {\n\t +# return (c1 < 0.5) ? (2.0*c1*c2) : (1.0-2.0*(1.0-c1)*(1.0-c2));\n +#} + +#vec3 blend3d_overlay(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*vec3(blend3d_overlay_f(c1.x, c2.x), blend3d_overlay_f(c1.y, c2.y), blend3d_overlay_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n +#} + +#vec3 blend3d_hard_light(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*0.5*(c1*c2+blend3d_overlay(c1, c2, 1.0)) + (1.0-opacity)*c2;\n +#} + +#float blend3d_soft_light_f(float c1, float c2) {\n\t +# return (c2 < 0.5) ? (2.0*c1*c2+c1*c1*(1.0-2.0*c2)) : 2.0*c1*(1.0-c2)+sqrt(c1)*(2.0*c2-1.0);\n +#} + +#vec3 blend3d_soft_light(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*vec3(blend3d_soft_light_f(c1.x, c2.x), blend3d_soft_light_f(c1.y, c2.y), blend3d_soft_light_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n +#} + +#float blend3d_burn_f(float c1, float c2) {\n\t +# return (c1==0.0)?c1:max((1.0-((1.0-c2)/c1)),0.0);\n +#} + +#vec3 blend3d_burn(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*vec3(blend3d_burn_f(c1.x, c2.x), blend3d_burn_f(c1.y, c2.y), blend3d_burn_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n +#} + +#float blend3d_dodge_f(float c1, float c2) {\n\t +# return (c1==1.0)?c1:min(c2/(1.0-c1),1.0);\n +#} + +#vec3 blend3d_dodge(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*vec3(blend3d_dodge_f(c1.x, c2.x), blend3d_dodge_f(c1.y, c2.y), blend3d_dodge_f(c1.z, c2.z)) + (1.0-opacity)*c2;\n +#} + +#vec3 blend3d_lighten(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*max(c1, c2) + (1.0-opacity)*c2;\n +#} + +#vec3 blend3d_darken(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*min(c1, c2) + (1.0-opacity)*c2; +#} + +#vec3 blend3d_difference(vec3 c1, vec3 c2, float opacity) {\n\t +# return opacity*clamp(c2-c1, vec3(0.0), vec3(1.0)) + (1.0-opacity)*c2;\n +#} + +#float rand31(vec3 p) {\n\t +# return fract(sin(dot(p,vec3(127.1,311.7, 74.7)))*43758.5453123);\n +#} + +#vec3 rand33(vec3 p) {\n\t +# p = vec3( dot(p,vec3(127.1,311.7, 74.7)), +# dot(p,vec3(269.5,183.3,246.1)),\n\t\t\t +# dot(p,vec3(113.5,271.9,124.6)));\n\n\t +# +# return -1.0 + 2.0*fract(sin(p)*43758.5453123); +#} + +#float tex3d_fbm_value(vec3 coord, vec3 size, float seed) {\n\t +# vec3 o = floor(coord)+rand3(vec2(seed, 1.0-seed))+size;\n\t +# vec3 f = fract(coord);\n\t +# float p000 = rand31(mod(o, size));\n\t +# float p001 = rand31(mod(o + vec3(0.0, 0.0, 1.0), size));\n\t +# float p010 = rand31(mod(o + vec3(0.0, 1.0, 0.0), size));\n\t +# float p011 = rand31(mod(o + vec3(0.0, 1.0, 1.0), size));\n\t +# float p100 = rand31(mod(o + vec3(1.0, 0.0, 0.0), size));\n\t +# float p101 = rand31(mod(o + vec3(1.0, 0.0, 1.0), size));\n\t +# float p110 = rand31(mod(o + vec3(1.0, 1.0, 0.0), size));\n\t +# float p111 = rand31(mod(o + vec3(1.0, 1.0, 1.0), size));\n\t +# +# vec3 t = f * f * (3.0 - 2.0 * f);\n\t +# +# return mix(mix(mix(p000, p100, t.x), mix(p010, p110, t.x), t.y), mix(mix(p001, p101, t.x), mix(p011, p111, t.x), t.y), t.z);\n +#} + +#float tex3d_fbm_perlin(vec3 coord, vec3 size, float seed) {\n\t +# vec3 o = floor(coord)+rand3(vec2(seed, 1.0-seed))+size;\n\t +# vec3 f = fract(coord);\n\t +# vec3 v000 = normalize(rand33(mod(o, size))-vec3(0.5));\n\t +# vec3 v001 = normalize(rand33(mod(o + vec3(0.0, 0.0, 1.0), size))-vec3(0.5));\n\t +# vec3 v010 = normalize(rand33(mod(o + vec3(0.0, 1.0, 0.0), size))-vec3(0.5));\n\t +# vec3 v011 = normalize(rand33(mod(o + vec3(0.0, 1.0, 1.0), size))-vec3(0.5));\n\t +# vec3 v100 = normalize(rand33(mod(o + vec3(1.0, 0.0, 0.0), size))-vec3(0.5));\n\t +# vec3 v101 = normalize(rand33(mod(o + vec3(1.0, 0.0, 1.0), size))-vec3(0.5));\n\t +# vec3 v110 = normalize(rand33(mod(o + vec3(1.0, 1.0, 0.0), size))-vec3(0.5));\n\t +# vec3 v111 = normalize(rand33(mod(o + vec3(1.0, 1.0, 1.0), size))-vec3(0.5));\n\t +# +# float p000 = dot(v000, f);\n\tfloat p001 = dot(v001, f - vec3(0.0, 0.0, 1.0));\n\t +# float p010 = dot(v010, f - vec3(0.0, 1.0, 0.0));\n\t +# float p011 = dot(v011, f - vec3(0.0, 1.0, 1.0));\n\t +# float p100 = dot(v100, f - vec3(1.0, 0.0, 0.0));\n\t +# float p101 = dot(v101, f - vec3(1.0, 0.0, 1.0));\n\t +# float p110 = dot(v110, f - vec3(1.0, 1.0, 0.0));\n\t +# float p111 = dot(v111, f - vec3(1.0, 1.0, 1.0));\n\t +# +# vec3 t = f * f * (3.0 - 2.0 * f);\n\t +# +# return 0.5 + mix(mix(mix(p000, p100, t.x), mix(p010, p110, t.x), t.y), mix(mix(p001, p101, t.x), mix(p011, p111, t.x), t.y), t.z); +#} + +#float tex3d_fbm_cellular(vec3 coord, vec3 size, float seed) {\n\t +# vec3 o = floor(coord)+rand3(vec2(seed, 1.0-seed))+size;\n\t +# vec3 f = fract(coord);\n\tfloat min_dist = 3.0;\n\t +# +# for (float x = -1.0; x <= 1.0; x++) {\n\t\t +# for (float y = -1.0; y <= 1.0; y++) {\n\t\t\t +# for (float z = -1.0; z <= 1.0; z++) {\n\t\t\t\t +# vec3 node = 0.4*rand33(mod(o + vec3(x, y, z), size)) + vec3(x, y, z);\n\t\t\t\t +# float dist = sqrt((f - node).x * (f - node).x + (f - node).y * (f - node).y + (f - node).z * (f - node).z);\n\t\t\t\t +# min_dist = min(min_dist, dist);\n\t\t\t +# }\n\t\t +# +# }\n\t +# +# }\n\t +# +# return min_dist; +#} + + +#float wave3d_constant(float x) {\n\t +# return 1.0;\n +#} + +#float wave3d_sine(float x) {\n\t +# return 0.5-0.5*cos(3.14159265359*2.0*x);\n +#} + +#float wave3d_triangle(float x) {\n\t +# x = fract(x);\n\t +# return min(2.0*x, 2.0-2.0*x);\n +#} + +#float wave3d_sawtooth(float x) {\n\t +# return fract(x);\n +#} + +#float wave3d_square(float x) {\n\t +# return (fract(x) < 0.5) ? 0.0 : 1.0;\n +#} + +#float wave3d_bounce(float x) {\n\t +# x = 2.0*(fract(x)-0.5);\n\t +# return sqrt(1.0-x*x);\n +#} + +#float mix3d_mul(float x, float y, float z) {\n\t +# return x*y*z;\n +#} + +#float mix3d_add(float x, float y, float z) {\n\t +# return min(x+y+z, 1.0);\n +#} + +#float mix3d_max(float x, float y, float z) {\n\t +# return max(max(x, y), z);\n +#} + +#float mix3d_min(float x, float y, float z) {\n\t +# return min(min(x, y), z);\n +#} + +#float mix3d_xor(float x, float y, float z) {\n\t +# float xy = min(x+y, 2.0-x-y);\n\t +# return min(xy+z, 2.0-xy-z);\n +#} + +#float mix3d_pow(float x, float y, float z) {\n\t +# return pow(pow(x, y), z);\n +#} + +#vec3 tex3d_rotate(vec3 p, vec3 a) {\n\t +# vec3 rv;\n\t +# float c;\n\t +# float s;\n\t +# c = cos(a.x);\n\t +# s = sin(a.x);\n\t +# rv.x = p.x;\n\t +# rv.y = p.y*c+p.z*s;\n\t +# rv.z = -p.y*s+p.z*c;\n\t +# c = cos(a.y);\n\t +# s = sin(a.y);\n\t +# p.x = rv.x*c+rv.z*s;\n\t +# p.y = rv.y;\n\t +# p.z = -rv.x*s+rv.z*c;\n\t +# c = cos(a.z);\n\t +# s = sin(a.z);\n\t +# rv.x = p.x*c+p.y*s;\n\t +# rv.y = -p.x*s+p.y*c;\n\t +# rv.z = p.z;\n\t +# return rv;\n +#} + diff --git a/game/addons/mat_maker_gd/nodes/common/tile.gd b/game/addons/mat_maker_gd/nodes/common/tile.gd new file mode 100644 index 0000000..25fb5e1 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/tile.gd @@ -0,0 +1,707 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#tile2x2.mmg +#Places 4 input images into a single output to create an atlas of 4 images. +#Chaining Tile2x2 nodes can be useful to create 16 images atlases. +#Atlases are used by remapping nodes such as CustomUV, Tiler and Splatter. + +# "inputs": [ +# { +# "default": "vec4(0.0)", +# "label": "", +# "longdesc": "The first input", +# "name": "in1", +# "shortdesc": "Input1", +# "type": "rgba" +# }, +# { +# "default": "vec4(0.0)", +# "label": "", +# "longdesc": "The second input", +# "name": "in2", +# "shortdesc": "Input2", +# "type": "rgba" +# }, +# { +# "default": "vec4(0.0)", +# "label": "", +# "longdesc": "The third input", +# "name": "in3", +# "shortdesc": "Input3", +# "type": "rgba" +# }, +# { +# "default": "vec4(0.0)", +# "label": "", +# "longdesc": "The fourth input", +# "name": "in4", +# "shortdesc": "Input4", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the generated atlas", +# "rgba": "($uv.y < 0.5) ? (($uv.x < 0.5) ? ($in1(2.0*$uv)) : ($in2(2.0*$uv-vec2(1.0, 0.0)))) : (($uv.x < 0.5) ? ($in3(2.0*$uv-vec2(0.0, 1.0))) : ($in4(2.0*$uv-vec2(1.0, 1.0))))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], + +#---------------------- +#tile2x2_variations.mmg +#Places 4 input images into a single output to create an atlas of 4 images. +#Chaining Tile2x2 nodes can be useful to create 16 images atlases. +#Atlases are used by remapping nodes such as CustomUV, Tiler and Splatter. + +# "inputs": [ +# { +# "default": "vec4(0.0)", +# "function": true, +# "label": "", +# "longdesc": "The first input", +# "name": "in", +# "shortdesc": "Input1", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the generated atlas", +# "rgba": "($uv.y < 0.5) ? (($uv.x < 0.5) ? ($in.variation(2.0*$uv, $seed)) : ($in.variation(2.0*$uv-vec2(1.0, 0.0), $seed+0.1))) : (($uv.x < 0.5) ? ($in.variation(2.0*$uv-vec2(0.0, 1.0), $seed+0.2)) : ($in.variation(2.0*$uv-vec2(1.0, 1.0), $seed+0.3)))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], + +#---------------------- +#tiler.mmg +#Tiles several occurences of an input image while adding randomness. + +#vec4 $(name_uv)_rch = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), vec2(float($seed))); + +#instance +#vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, vec2 _seed) {\n\t +# float c = 0.0;\n\t +# vec3 rc = vec3(0.0);\n\t +# vec3 rc1;\n\t +# for (int dx = -overlap; dx <= overlap; ++dx) {\n\t\t +# for (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\t +# vec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));\n\t\t\t +# vec2 seed = rand2(pos+_seed);\n\t\t\t +# rc1 = rand3(seed);\n\t\t\t +# pos = fract(pos+vec2($fixed_offset/tile.x, 0.0)*floor(mod(pos.y*tile.y, 2.0))+$offset*seed/tile);\n\t\t\t +# float mask = $mask(fract(pos+vec2(0.5)));\n\t\t\t +# +# if (mask > 0.01) {\n\t\t\t\t +# vec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\t +# seed = rand2(seed);\n\t\t\t\t +# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251;\n\t\t\t\t +# float ca = cos(angle);\n\t\t\t\t +# float sa = sin(angle);\n\t\t\t\t +# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\t +# pv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t\t +# pv /= vec2($scale_x, $scale_y);\n\t\t\t\t +# pv += vec2(0.5);\n\t\t\t\t +# seed = rand2(seed);\n\t\t\t\t +# vec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t\t +# if (pv.x != clamped_pv.x || pv.y != clamped_pv.y) {\n\t\t\t\t\t +# continue;\n\t\t\t\t +# }\n\t\t\t\t +# +# $select_inputs\n\t\t\t\t +# +# float c1 = $in.variation(pv, $variations ? seed.x : 0.0)*mask*(1.0-$value*seed.x);\n\t\t\t\t +# c = max(c, c1);\n\t\t\t\t +# rc = mix(rc, rc1, step(c, c1));\n\t\t\t +# }\n\t\t +# }\n\t +# }\n\t +# +# return vec4(rc, c);\n +#} + +#Inputs: + +#in, float, default: 0, - The input image or atlas of 4 or 16 input images +#Mask, float, default: 1, - The mask applied to the pattern + +#Outputs: +#Output, float, Shows the generated pattern +#$(name_uv)_rch.a + +#Instance map, rgb, Shows a random color for each instance of the input image +#$(name_uv)_rch.rgb + +#select_inputs enum +#1, " " +#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" +#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" + +#Parameters: +#tile, Vector2, default 4, min:1, max:64, step:1 - The number of columns of the tiles pattern +#overlap, float, default 1, min 0, max 5, step 1 - The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance. +#select_inputs (Inputs), enum, default 0, values 1, 4, 16 +#scale, Vector2, default 1, min:0, max:2, step:0.01 - "The scale of input images on the X axis +#fixed_offset, float, default 0.5, min 0, max 1, step 0.01 - The relative offset of odd rows +#offset (rnd_offset), float, default 0.5, min 0, max 1, step 0.01 +#rotate (rnd_rotate), float, default 0, min 0, max 180, step 0.1 +#scale (rnd_scale), float, default 0.5, min 0, max 1, step 0.01 - The random scale applied to each image instance +#value (rnd_value), float, default 0.5, min 0, max 1, step 0.01 - The random greyscale value applied to each image instance +#variations, bool, default false, (disabled) - Check to tile variations of the input + +#---------------------- +#tiler_advanced.mmg +#Tiles several occurences of an input image while adding randomness. + +# "code": "vec4 $(name_uv)_rch = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), float($seed));", +# "inputs": [ +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "longdesc": "The input image or atlas of 4 or 16 input images", +# "name": "in", +# "shortdesc": "Input", +# "type": "f" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "longdesc": "The mask applied to the pattern", +# "name": "mask", +# "shortdesc": "Mask", +# "type": "f" +# }, +# { +# "default": "vec4(rand2($uv+vec2(float($seed))), rand2($uv-vec2(float($seed))))", +# "label": "", +# "longdesc": "An input color map used to generate the Instance map 1 output", +# "name": "color1", +# "shortdesc": "Color map 1", +# "type": "rgba" +# }, +# { +# "default": "vec4(rand2(-$uv+vec2(float($seed))), rand2(-$uv-vec2(float($seed))))", +# "label": "", +# "longdesc": "An input color map used to generate the Instance map 2 output", +# "name": "color2", +# "shortdesc": "Color map 2", +# "type": "rgba" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "5:", +# "longdesc": "A map for translation along the X axis", +# "name": "tr_x", +# "shortdesc": "Translate map X", +# "type": "f" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "longdesc": "A map for translation along the Y axis", +# "name": "tr_y", +# "shortdesc": "Translate map Y", +# "type": "f" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "longdesc": "A map for rotation", +# "name": "r", +# "shortdesc": "Rotate map", +# "type": "f" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "longdesc": "A map for scale along the X axis", +# "name": "sc_x", +# "shortdesc": "Scale map X", +# "type": "f" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "longdesc": "A map for scale along the Y axis", +# "name": "sc_y", +# "shortdesc": "Scale map Y", +# "type": "f" +# } +# ], +# "instance": "vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, float _seed) {\n\tfloat c = 0.0;\n\tvec2 map_uv = vec2(0.0);\n\tfor (int dx = -overlap; dx <= overlap; ++dx) {\n\t\tfor (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\tvec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));\n\t\t\tfloat mask = $mask(fract(pos+vec2(0.5)));\n\t\t\tif (mask > 0.01) {\n\t\t\t\tvec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\tpos = fract(pos+vec2(0.5));\n\t\t\t\tpv -= vec2($translate_x*$tr_x(pos), $translate_y*$tr_y(pos))/tile;\n\t\t\t\tfloat angle = $r(pos) * $rotate * 0.01745329251;\n\t\t\t\tfloat ca = cos(angle);\n\t\t\t\tfloat sa = sin(angle);\n\t\t\t\tpv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\tpv /= vec2($scale_x*$sc_x(pos), $scale_y*$sc_y(pos));\n\t\t\t\tpv += vec2(0.5);\n\t\t\t\tif (pv != clamp(pv, vec2(0.0), vec2(1.0))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvec2 seed = rand2(vec2(_seed)+pos);\n\t\t\t\t$select_inputs\n\t\t\t\tfloat c1 = $in.variation(pv, $variations ? seed.x : 0.0)*mask;\n\t\t\t\tc = max(c, c1);\n\t\t\t\tmap_uv = mix(map_uv, pos, step(c, c1));\n\t\t\t}\n\t\t}\n\t}\n\treturn vec4(map_uv, 0.0, c);\n}", +# "outputs": [ +# { +# "f": "$(name_uv)_rch.a", +# "longdesc": "Shows the generated pattern", +# "shortdesc": "Output", +# "type": "f" +# }, +# { +# "longdesc": "Shows a color for each instance of the input image", +# "rgba": "$color1($(name_uv)_rch.rg)", +# "shortdesc": "Instance map 1", +# "type": "rgba" +# }, +# { +# "longdesc": "Shows a color for each instance of the input image", +# "rgba": "$color2($(name_uv)_rch.rg)", +# "shortdesc": "Instance map 2", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 4, +# "label": "Tile X", +# "longdesc": "The number of columns of the tiles pattern", +# "max": 64, +# "min": 1, +# "name": "tx", +# "shortdesc": "Tile.x", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 4, +# "label": "Tile Y", +# "longdesc": "The number of rows of the tiles pattern", +# "max": 64, +# "min": 1, +# "name": "ty", +# "shortdesc": "Tile.y", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Overlap", +# "longdesc": "The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance.", +# "max": 5, +# "min": 0, +# "name": "overlap", +# "shortdesc": "Overlap", +# "step": 1, +# "type": "float" +# }, +# { +# "default": 0, +# "label": "Inputs", +# "longdesc": "The input type of the node:\n- 1: single image\n- 4: atlas of 4 images\n- 16: atlas of 16 images\nAtlases can be created using the Tile2x2 node.", +# "name": "select_inputs", +# "shortdesc": "Input", +# "type": "enum", +# "values": [ +# { +# "name": "1", +# "value": " " +# }, +# { +# "name": "4", +# "value": "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" +# }, +# { +# "name": "16", +# "value": "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" +# } +# ] +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Translate X", +# "longdesc": "The translation along the X axis applied to the instances", +# "max": 1, +# "min": 0, +# "name": "translate_x", +# "shortdesc": "Translate.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Translate Y", +# "longdesc": "The translation along the Y axis applied to the instances", +# "max": 1, +# "min": 0, +# "name": "translate_y", +# "shortdesc": "Translate.y", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Rotate", +# "longdesc": "The angle of instances of the input", +# "max": 180, +# "min": 0, +# "name": "rotate", +# "shortdesc": "Rotate", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Scale X", +# "longdesc": "The scale of input images on the X axis", +# "max": 2, +# "min": 0, +# "name": "scale_x", +# "shortdesc": "Scale.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Scale Y", +# "longdesc": "The scale of input images on the Y axis", +# "max": 2, +# "min": 0, +# "name": "scale_y", +# "shortdesc": "Scale.y", +# "step": 0.01, +# "type": "float" +# }, +# { +# "default": false, +# "label": "Variations", +# "longdesc": "Check to tile variations of the input", +# "name": "variations", +# "shortdesc": "Variations", +# "type": "boolean" +# } +# ], + +#---------------------- +#tiler_advanced_color.mmg +#Tiles several occurences of an input image while adding randomness. + +# "code": "vec2 $(name_uv)_mapuv;\nvec4 $(name_uv)_rch = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), float($seed), $(name_uv)_mapuv);", +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "function": true, +# "label": "", +# "longdesc": "The input image or atlas of 4 or 16 input images", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "longdesc": "The mask applied to the pattern", +# "name": "mask", +# "shortdesc": "Mask", +# "type": "f" +# }, +# { +# "default": "vec4(rand2($uv+vec2(float($seed))), rand2($uv-vec2(float($seed))))", +# "label": "", +# "longdesc": "An input color map used to generate the Instance map 1 output", +# "name": "color1", +# "shortdesc": "Color map 1", +# "type": "rgba" +# }, +# { +# "default": "vec4(rand2(-$uv+vec2(float($seed))), rand2(-$uv-vec2(float($seed))))", +# "label": "", +# "longdesc": "An input color map used to generate the Instance map 2 output", +# "name": "color2", +# "shortdesc": "Color map 2", +# "type": "rgba" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "5:", +# "longdesc": "A map for translation along the X axis", +# "name": "tr_x", +# "shortdesc": "Translate map X", +# "type": "f" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "longdesc": "A map for translation along the Y axis", +# "name": "tr_y", +# "shortdesc": "Translate map Y", +# "type": "f" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "longdesc": "A map for rotation", +# "name": "r", +# "shortdesc": "Rotate map", +# "type": "f" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "longdesc": "A map for scale along the X axis", +# "name": "sc_x", +# "shortdesc": "Scale map X", +# "type": "f" +# }, +# { +# "default": "1.0", +# "function": true, +# "label": "", +# "longdesc": "A map for scale along the Y axis", +# "name": "sc_y", +# "shortdesc": "Scale map Y", +# "type": "f" +# } +# ], +# "instance": "vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, float _seed, out vec2 outmapuv) {\n\t// $seed\n\tvec4 c = vec4(0.0);\n\toutmapuv = vec2(0.0);\n\tfor (int dx = -overlap; dx <= overlap; ++dx) {\n\t\tfor (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\tvec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));\n\t\t\tfloat mask = $mask(fract(pos+vec2(0.5)));\n\t\t\tif (mask > 0.01) {\n\t\t\t\tvec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\tpos = fract(pos+vec2(0.5));\n\t\t\t\tpv -= vec2($translate_x*$tr_x(pos), $translate_y*$tr_y(pos))/tile;\n\t\t\t\tfloat angle = $r(pos) * $rotate * 0.01745329251;\n\t\t\t\tfloat ca = cos(angle);\n\t\t\t\tfloat sa = sin(angle);\n\t\t\t\tpv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\tpv /= vec2($scale_x*$sc_x(pos), $scale_y*$sc_y(pos));\n\t\t\t\tpv += vec2(0.5);\n\t\t\t\tif (pv != clamp(pv, vec2(0.0), vec2(1.0))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvec2 seed = rand2(vec2(_seed)+pos);\n\t\t\t\t$select_inputs\n\t\t\t\tvec4 n = $in.variation(pv, $variations ? seed.x : 0.0);\n\t\t\t\tfloat na = n.a*mask;\n\t\t\t\toutmapuv = mix(outmapuv, pos, step(c.a, na));\n\t\t\t\tc = mix(c, n, na);\n\t\t\t}\n\t\t}\n\t}\n\treturn c;\n}\n", +# "outputs": [ +# { +# "longdesc": "Shows the generated pattern", +# "rgba": "$(name_uv)_rch", +# "shortdesc": "Output", +# "type": "rgba" +# }, +# { +# "longdesc": "Shows a color for each instance of the input image", +# "rgba": "$color1($(name_uv)_mapuv)", +# "shortdesc": "Instance map 1", +# "type": "rgba" +# }, +# { +# "longdesc": "Shows a color for each instance of the input image", +# "rgba": "$color2($(name_uv)_mapuv)", +# "shortdesc": "Instance map 2", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 4, +# "label": "Tile X", +# "longdesc": "The number of columns of the tiles pattern", +# "max": 64, +# "min": 1, +# "name": "tx", +# "shortdesc": "Tile.x", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 4, +# "label": "Tile Y", +# "longdesc": "The number of rows of the tiles pattern", +# "max": 64, +# "min": 1, +# "name": "ty", +# "shortdesc": "Tile.y", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Overlap", +# "longdesc": "The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance.", +# "max": 5, +# "min": 0, +# "name": "overlap", +# "shortdesc": "Overlap", +# "step": 1, +# "type": "float" +# }, +# { +# "default": 0, +# "label": "Inputs", +# "longdesc": "The input type of the node:\n- 1: single image\n- 4: atlas of 4 images\n- 16: atlas of 16 images\nAtlases can be created using the Tile2x2 node.", +# "name": "select_inputs", +# "shortdesc": "Input", +# "type": "enum", +# "values": [ +# { +# "name": "1", +# "value": " " +# }, +# { +# "name": "4", +# "value": "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" +# }, +# { +# "name": "16", +# "value": "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" +# } +# ] +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Translate X", +# "longdesc": "The translation along the X axis applied to the instances", +# "max": 1, +# "min": 0, +# "name": "translate_x", +# "shortdesc": "Translate.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Translate Y", +# "longdesc": "The translation along the Y axis applied to the instances", +# "max": 1, +# "min": 0, +# "name": "translate_y", +# "shortdesc": "Translate.y", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Rotate", +# "longdesc": "The angle of instances of the input", +# "max": 180, +# "min": 0, +# "name": "rotate", +# "shortdesc": "Rotate", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Scale X", +# "longdesc": "The scale of input images on the X axis", +# "max": 2, +# "min": 0, +# "name": "scale_x", +# "shortdesc": "Scale.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Scale Y", +# "longdesc": "The scale of input images on the Y axis", +# "max": 2, +# "min": 0, +# "name": "scale_y", +# "shortdesc": "Scale.y", +# "step": 0.01, +# "type": "float" +# }, +# { +# "default": false, +# "label": "Variations", +# "longdesc": "Check to tile variations of the input", +# "name": "variations", +# "shortdesc": "Variations", +# "type": "boolean" +# } +# ], + +#---------------------- +#tiler_color.mmg +#Tiles several occurences of an input image while adding randomness. + +#vec3 $(name_uv)_random_color;\n +#vec4 $(name_uv)_tiled_output = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), vec2(float($seed)), $(name_uv)_random_color); + +#vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, vec2 _seed, out vec3 random_color) {\n\t +# vec4 c = vec4(0.0);\n\t +# vec3 rc = vec3(0.0);\n\t +# vec3 rc1;\n\t +# +# for (int dx = -overlap; dx <= overlap; ++dx) {\n\t\t +# for (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\t +# vec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));\n\t\t\t +# vec2 seed = rand2(pos+_seed);\n\t\t\t +# rc1 = rand3(seed);\n\t\t\t +# pos = fract(pos+vec2($fixed_offset/tile.x, 0.0)*floor(mod(pos.y*tile.y, 2.0))+$offset*seed/tile);\n\t\t\t +# float mask = $mask(fract(pos+vec2(0.5)));\n\t\t\t +# if (mask > 0.01) {\n\t\t\t\t +# vec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\t +# seed = rand2(seed);\n\t\t\t\t +# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251;\n\t\t\t\t +# float ca = cos(angle);\n\t\t\t\t +# float sa = sin(angle);\n\t\t\t\t +# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\t +# pv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t\t +# pv /= vec2($scale_x, $scale_y);\n\t\t\t\t +# pv += vec2(0.5);\n\t\t\t\t +# pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t\t +# +# $select_inputs\n\t\t\t\t +# +# vec4 n = $in.variation(pv, $variations ? seed.x : 0.0);\n\t\t\t\t +# +# seed = rand2(seed);\n\t\t\t\t +# float na = n.a*mask*(1.0-$opacity*seed.x);\n\t\t\t\t +# float a = (1.0-c.a)*(1.0*na);\n\t\t\t\t +# +# c = mix(c, n, na);\n\t\t\t\t +# rc = mix(rc, rc1, n.a);\n\t\t\t +# }\n\t\t +# }\n\t +# }\n\t +# +# random_color = rc;\n\t +# return c;\n +#} + + +#Inputs: + +#in, rgba, default: 0, - The input image or atlas of 4 or 16 input images +#Mask, float, default: 1, - The mask applied to the pattern + +#Outputs: +#Output, float, Shows the generated pattern +#$(name_uv)_tiled_output + +#Instance map, rgb, Shows a random color for each instance of the input image +#$(name_uv)_random_color + +#select_inputs enum +#1, " " +#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" +#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" + +#Parameters: +#tile, Vector2, default 4, min:1, max:64, step:1 - The number of columns of the tiles pattern +#overlap, float, default 1, min 0, max 5, step 1 - The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance. +#select_inputs (Inputs), enum, default 0, values 1, 4, 16 +#scale, Vector2, default 1, min:0, max:2, step:0.01 - "The scale of input images on the X axis +#fixed_offset, float, default 0.5, min 0, max 1, step 0.01 - The relative offset of odd rows +#offset (rnd_offset), float, default 0.5, min 0, max 1, step 0.01 +#rotate (rnd_rotate), float, default 0, min 0, max 180, step 0.1 +#scale (rnd_scale), float, default 0.5, min 0, max 1, step 0.01 - The random scale applied to each image instance +#opacity (rnd_opacity), float, default 0, min 0, max 1, step 0.01 - The random greyscale value applied to each image instance +#variations, bool, default false, (disabled) - Check to tile variations of the input + diff --git a/game/addons/mat_maker_gd/nodes/common/transforms.gd b/game/addons/mat_maker_gd/nodes/common/transforms.gd new file mode 100644 index 0000000..0037140 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/transforms.gd @@ -0,0 +1,1765 @@ +tool +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +#---------------------- +#transform.mmg +#Translates, rotates and scales its input + +# "inputs": [ +# { +# "default": "vec4($uv, 0.0, 1.0)", +# "label": "", +# "longdesc": "The input image to be transformed", +# "name": "i", +# "shortdesc": "Input", +# "type": "rgba" +# }, +# { +# "default": "1.0", +# "label": "", +# "longdesc": "An optional map for translation along the X axis", +# "name": "tx", +# "shortdesc": "TranslateMap.x", +# "type": "f" +# }, +# { +# "default": "1.0", +# "label": "", +# "longdesc": "An optional map for translation along the Y axis", +# "name": "ty", +# "shortdesc": "TranslateMap.y", +# "type": "f" +# }, +# { +# "default": "1.0", +# "label": "", +# "longdesc": "An optional map for rotation", +# "name": "r", +# "shortdesc": "RotateMap", +# "type": "f" +# }, +# { +# "default": "1.0", +# "label": "", +# "longdesc": "An optional map for scaling along the X axis", +# "name": "sx", +# "shortdesc": "ScaleMap.x", +# "type": "f" +# }, +# { +# "default": "1.0", +# "label": "", +# "longdesc": "An optional map for scaling along the Y axis", +# "name": "sy", +# "shortdesc": "ScaleMap.y", +# "type": "f" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the transformed image", +# "rgba": "$i(transform($uv, vec2($translate_x*(2.0*$tx($uv)-1.0), $translate_y*(2.0*$ty($uv)-1.0)), $rotate*0.01745329251*(2.0*$r($uv)-1.0), vec2($scale_x*(2.0*$sx($uv)-1.0), $scale_y*(2.0*$sy($uv)-1.0)), $repeat))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "P1.x", +# "default": 0, +# "label": "2:Translate X:", +# "longdesc": "The translation along the X axis", +# "max": 1, +# "min": -1, +# "name": "translate_x", +# "shortdesc": "Translate.x", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": 0, +# "label": "Translate Y:", +# "longdesc": "The translation along the Y axis", +# "max": 1, +# "min": -1, +# "name": "translate_y", +# "shortdesc": "Translate.y", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "Radius1.a", +# "default": 0, +# "label": "Rotate:", +# "longdesc": "The rotation angle", +# "max": 720, +# "min": -720, +# "name": "rotate", +# "shortdesc": "Rotate", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "Scale1.x", +# "default": 1, +# "label": "Scale X:", +# "longdesc": "The scaling factor along the X axis", +# "max": 50, +# "min": 0, +# "name": "scale_x", +# "shortdesc": "Scale.x", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "Scale1.y", +# "default": 1, +# "label": "Scale Y:", +# "longdesc": "The scaling factor along the Y axis", +# "max": 50, +# "min": 0, +# "name": "scale_y", +# "shortdesc": "Scale.y", +# "step": 0.005, +# "type": "float" +# }, +# { +# "default": false, +# "label": "Repeat:", +# "longdesc": "Repeat the input if checked, clamps otherwise", +# "name": "repeat", +# "shortdesc": "Repeat", +# "type": "boolean" +# } +# ] + +#---------------------- +#transform2.mmg +#Translates, rotates and scales its input + + +# "inputs": [ +# { +# "default": "vec4($uv, 0.0, 1.0)", +# "label": "", +# "longdesc": "The input image to be transformed", +# "name": "i", +# "shortdesc": "Input", +# "type": "rgba" +# }, +# { +# "default": "1.0", +# "label": "", +# "longdesc": "An optional map for translation along the X axis", +# "name": "tx", +# "shortdesc": "TranslateMap.x", +# "type": "f" +# }, +# { +# "default": "1.0", +# "label": "", +# "longdesc": "An optional map for translation along the Y axis", +# "name": "ty", +# "shortdesc": "TranslateMap.y", +# "type": "f" +# }, +# { +# "default": "1.0", +# "label": "", +# "longdesc": "An optional map for rotation", +# "name": "r", +# "shortdesc": "RotateMap", +# "type": "f" +# }, +# { +# "default": "1.0", +# "label": "", +# "longdesc": "An optional map for scaling along the X axis", +# "name": "sx", +# "shortdesc": "ScaleMap.x", +# "type": "f" +# }, +# { +# "default": "1.0", +# "label": "", +# "longdesc": "An optional map for scaling along the Y axis", +# "name": "sy", +# "shortdesc": "ScaleMap.y", +# "type": "f" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the transformed image", +# "rgba": "$i($mode(transform2($uv, vec2($translate_x*(2.0*$tx($uv)-1.0), $translate_y*(2.0*$ty($uv)-1.0)), $rotate*0.01745329251*(2.0*$r($uv)-1.0), vec2($scale_x*(2.0*$sx($uv)-1.0), $scale_y*(2.0*$sy($uv)-1.0)))))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "P1.x", +# "default": 0, +# "label": "2:Translate X:", +# "longdesc": "The translation along the X axis", +# "max": 1, +# "min": -1, +# "name": "translate_x", +# "shortdesc": "Translate.x", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": 0, +# "label": "Translate Y:", +# "longdesc": "The translation along the Y axis", +# "max": 1, +# "min": -1, +# "name": "translate_y", +# "shortdesc": "Translate.y", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "Radius1.a", +# "default": 0, +# "label": "Rotate:", +# "longdesc": "The rotation angle", +# "max": 720, +# "min": -720, +# "name": "rotate", +# "shortdesc": "Rotate", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "Scale1.x", +# "default": 1, +# "label": "Scale X:", +# "longdesc": "The scaling factor along the X axis", +# "max": 50, +# "min": 0, +# "name": "scale_x", +# "shortdesc": "Scale.x", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "Scale1.y", +# "default": 1, +# "label": "Scale Y:", +# "longdesc": "The scaling factor along the Y axis", +# "max": 50, +# "min": 0, +# "name": "scale_y", +# "shortdesc": "Scale.y", +# "step": 0.005, +# "type": "float" +# }, +# { +# "default": 0, +# "label": "Mode", +# "longdesc": "Defines the behavior beyond the limits or the input image:\n- Clamp stretches the edges\n- Repeat tiles the input\n- Extend shows parts of the input that are beyond the edges", +# "name": "mode", +# "shortdesc": "Mode", +# "type": "enum", +# "values": [ +# { +# "name": "Clamp", +# "value": "transform2_clamp" +# }, +# { +# "name": "Repeat", +# "value": "fract" +# }, +# { +# "name": "Extend", +# "value": "" +# } +# ] +# } +# ] + +#---------------------- +#translate.mmg +#Translates its input + +# "inputs": [ +# { +# "default": "vec4($uv, 0.0, 1.0)", +# "label": "", +# "longdesc": "The input image", +# "name": "i", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the translated image", +# "rgba": "$i($uv-vec2($translate_x, $translate_y))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "P1.x", +# "default": 0, +# "label": "Translate X:", +# "longdesc": "The translation along the X axis", +# "max": 1, +# "min": -1, +# "name": "translate_x", +# "shortdesc": "Translate.x", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": 0, +# "label": "Translate Y:", +# "longdesc": "The translation along the Y axis", +# "max": 1, +# "min": -1, +# "name": "translate_y", +# "shortdesc": "Translate.y", +# "step": 0.005, +# "type": "float" +# } +# ], + +#---------------------- +#rotate.mmg +#Rotates its input + +# "inputs": [ +# { +# "default": "vec4($uv, 0.0, 1.0)", +# "label": "", +# "longdesc": "The input image", +# "name": "i", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the rotated image", +# "rgba": "$i(rotate($uv, vec2(0.5+$cx, 0.5+$cy), $rotate*0.01745329251))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "P1.x", +# "default": 0, +# "label": "Center X:", +# "longdesc": "The position of the rotation center", +# "max": 1, +# "min": -1, +# "name": "cx", +# "shortdesc": "Center.x", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": 0, +# "label": "Center Y:", +# "longdesc": "The position of the rotation center", +# "max": 1, +# "min": -1, +# "name": "cy", +# "shortdesc": "Center.y", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "Radius1.a", +# "default": 0, +# "label": "Rotate:", +# "longdesc": "The angle of the rotation", +# "max": 720, +# "min": -720, +# "name": "rotate", +# "shortdesc": "Angle", +# "step": 0.005, +# "type": "float" +# } +# ], + +#---------------------- +#scale.mmg +#Scales its input + +# "inputs": [ +# { +# "default": "vec4($uv, 0.0, 1.0)", +# "label": "", +# "longdesc": "The input image", +# "name": "i", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the scaled image", +# "rgba": "$i(scale($uv, vec2(0.5+$cx, 0.5+$cy), vec2($scale_x, $scale_y)))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "P1.x", +# "default": 0, +# "label": "Center X:", +# "longdesc": "The position of the scale center", +# "max": 1, +# "min": -1, +# "name": "cx", +# "shortdesc": "Center.x", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "P1.y", +# "default": 0, +# "label": "Center Y:", +# "longdesc": "The poisition of the scale center", +# "max": 1, +# "min": -1, +# "name": "cy", +# "shortdesc": "Center.y", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "Scale1.x", +# "default": 1, +# "label": "Scale X:", +# "longdesc": "The scale amount along the X axis", +# "max": 50, +# "min": 0, +# "name": "scale_x", +# "shortdesc": "Scale.x", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "Scale1.y", +# "default": 1, +# "label": "Scale Y:", +# "longdesc": "The scale amount along the Y axis", +# "max": 50, +# "min": 0, +# "name": "scale_y", +# "shortdesc": "Scale.y", +# "step": 0.005, +# "type": "float" +# } +# ], + +#---------------------- +#shear.mmg +#Performs a shear stress transform on its input + +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the transformed image", +# "rgba": "$in($uv+$amount*($uv.yx-vec2($center))*vec2($direction))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 1, +# "label": "", +# "longdesc": "The direction of the shear transform (horizontal or vertical)", +# "name": "direction", +# "shortdesc": "Direction", +# "type": "enum", +# "values": [ +# { +# "name": "Horizontal", +# "value": "1.0, 0.0" +# }, +# { +# "name": "Vertical", +# "value": "0.0, 1.0" +# } +# ] +# }, +# { +# "control": "None", +# "default": 0, +# "label": "", +# "longdesc": "The amount of the transform", +# "max": 1, +# "min": -1, +# "name": "amount", +# "shortdesc": "Amount", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "", +# "longdesc": "The position of the shear center", +# "max": 1, +# "min": 0, +# "name": "center", +# "shortdesc": "Center", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#mirror.mmg +#Mirrors its input while applying an offset from the center + +# "inputs": [ +# { +# "default": "vec4($uv, 0, 1)", +# "label": "", +# "longdesc": "The input image", +# "name": "i", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the mirrored image", +# "rgba": "$i(uvmirror_$direction($uv, $offset))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "longdesc": "The mirror direction (horizontal or vertical)", +# "name": "direction", +# "shortdesc": "Direction", +# "type": "enum", +# "values": [ +# { +# "name": "Horizontal", +# "value": "h" +# }, +# { +# "name": "Vertical", +# "value": "v" +# } +# ] +# }, +# { +# "control": "None", +# "default": 0, +# "label": "", +# "longdesc": "The offset from the center", +# "max": 1, +# "min": 0, +# "name": "offset", +# "shortdesc": "Offset", +# "step": 0.005, +# "type": "float" +# } +# ], + +#---------------------- +#kaleidoscope.mmg +#Replicated an angle of the input image several times around the center. + +# "inputs": [ +# { +# "default": "vec4($uv, 0, 1)", +# "label": "", +# "longdesc": "The input image", +# "name": "i", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the transformed image", +# "rgba": "$i(kal_rotate($uv, $count, $offset))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0, +# "label": "", +# "longdesc": "The number of replications of an angle of the input", +# "max": 10, +# "min": 2, +# "name": "count", +# "shortdesc": "Count", +# "step": 1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "", +# "longdesc": "The angular offset of the replicated angle of the input", +# "max": 180, +# "min": -180, +# "name": "offset", +# "shortdesc": "Offset", +# "step": 0.1, +# "type": "float" +# } +# ], + +#---------------------- +#warp.mmg +#Warps its input according to a heightmap + +# "code": "vec2 $(name_uv)_slope = $(name)_slope($uv, $eps);\nvec2 $(name_uv)_warp = $mode;", +# "global": "", +# "inputs": [ +# { +# "default": "vec4(sin($uv.x*20.0)*0.5+0.5, sin($uv.y*20.0)*0.5+0.5, 0, 1)", +# "label": "", +# "longdesc": "The input image to be warped", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# }, +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "longdesc": "The height map whose slopes are used to deform the input", +# "name": "d", +# "shortdesc": "Height map", +# "type": "f" +# } +# ], +# "instance": "vec2 $(name)_slope(vec2 uv, float epsilon) {\n\treturn vec2($d(fract(uv+vec2(epsilon, 0.0)))-$d(fract(uv-vec2(epsilon, 0.0))), $d(fract(uv+vec2(0.0, epsilon)))-$d(fract(uv-vec2(0.0, epsilon))));\n}", +# "outputs": [ +# { +# "longdesc": "Shows the warped image", +# "rgba": "$in($uv+$amount*$(name_uv)_warp)", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "longdesc": "Both warp modes extract their direction from the height map slopes:\n- Slope warp intensity only depends on the slope\n- Distance to top warp intensity depends on the slope and the distance to the top, and can be used to create mosaic-like patterns\n\nA Transform node with translate maps can produce effects similar to Slope Warp and is generally faster.", +# "name": "mode", +# "shortdesc": "Mode", +# "type": "enum", +# "values": [ +# { +# "name": "Slope", +# "value": "$(name_uv)_slope" +# }, +# { +# "name": "Distance to top", +# "value": "$(name_uv)_slope*(1.0-$d($uv))" +# } +# ] +# }, +# { +# "control": "None", +# "default": 0, +# "label": "", +# "longdesc": "The strength of the warp effect", +# "max": 1, +# "min": 0, +# "name": "amount", +# "shortdesc": "Strength", +# "step": 0.005, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "", +# "longdesc": "The offset used to measure slopes", +# "max": 0.2, +# "min": 0.005, +# "name": "eps", +# "shortdesc": "Epsilon", +# "step": 0.005, +# "type": "float" +# } +# ], + +#---------------------- +#warp2.mmg +#Warps its input according to a heightmap + +# "code": "vec2 $(name_uv)_slope = $(name)_slope($uv);\nvec2 $(name_uv)_warp = $mode;", +# "inputs": [ +# { +# "default": "vec4(sin($uv.x*20.0)*0.5+0.5, sin($uv.y*20.0)*0.5+0.5, 0, 1)", +# "label": "", +# "longdesc": "The input image to be warped", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# }, +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "longdesc": "The height map whose slopes are used to deform the input", +# "name": "d", +# "shortdesc": "Height map", +# "type": "f" +# } +# ], +# "instance": "vec2 $(name)_slope(vec2 uv) {\n vec2 e = vec2(0.001, 0.0);\n return 0.5*vec2($d(uv+e)-$d(uv-e), $d(uv+e.yx)-$d(uv-e.yx))/e.x;\n}", +# "outputs": [ +# { +# "longdesc": "Shows the warped image", +# "rgba": "$in($uv+$amount*$(name_uv)_warp)", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "", +# "longdesc": "Both warp modes extract their direction from the height map slopes:\n- Slope warp intensity only depends on the slope\n- Distance to top warp intensity depends on the slope and the distance to the top, and can be used to create mosaic-like patterns\n\nA Transform node with translate maps can produce effects similar to Slope Warp and is generally faster.", +# "name": "mode", +# "shortdesc": "Mode", +# "type": "enum", +# "values": [ +# { +# "name": "Slope", +# "value": "$(name_uv)_slope" +# }, +# { +# "name": "Distance to top", +# "value": "$(name_uv)_slope*(1.0-$d($uv))" +# } +# ] +# }, +# { +# "control": "None", +# "default": 0, +# "label": "", +# "longdesc": "The strength of the warp effect", +# "max": 1, +# "min": 0, +# "name": "amount", +# "shortdesc": "Strength", +# "step": 0.005, +# "type": "float" +# } +# ], + +#---------------------- +#circle_map.mmg +#Maps its input into a circle + +# "inputs": [ +# { +# "default": "vec4($uv, 0.0, 1.0)", +# "label": "", +# "longdesc": "The input image to be remapped", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the remapped image", +# "rgba": "$in(vec2(fract($repeat*atan($uv.y-0.5, $uv.x-0.5)*0.15915494309), min(0.99999, 2.0/$radius*length($uv-vec2(0.5)))))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 1, +# "label": "Radius", +# "longdesc": "The radius of the circle where the input is mapped", +# "max": 1.5, +# "min": 0, +# "name": "radius", +# "shortdesc": "Radius", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Repeat", +# "longdesc": "The number of repetitions of the input image around the circle", +# "max": 16, +# "min": 0, +# "name": "repeat", +# "shortdesc": "Repeat", +# "step": 1, +# "type": "float" +# } +# ], + +#---------------------- +#custom_uv.mmg +#Remaps an Input image using a custom UV map. + +# "code": "vec3 $(name_uv)_map = $map($uv);\nfloat $(name_uv)_rnd = float($seed)+$(name_uv)_map.z;\n", +# "inputs": [ +# { +# "default": "vec4(1.0)", +# "label": "Input", +# "longdesc": "The image or atlas of images to be remapped.", +# "name": "in", +# "shortdesc": "Input", +# "type": "rgba" +# }, +# { +# "default": "vec3(1.0)", +# "label": "UV", +# "longdesc": "The custom UV map to be used for remapping.", +# "name": "map", +# "shortdesc": "Map", +# "type": "rgb" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the remapped image", +# "rgba": "$in(get_from_tileset($inputs, $(name_uv)_rnd, custom_uv_transform($(name_uv)_map.xy, vec2($sx, $sy), $rotate*0.01745329251, $scale, vec2($(name_uv)_map.z, float($seed)))))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "Inputs", +# "longdesc": "The input type of the node:\n- 1: single image\n- 4: atlas of 4 images\n- 16: atlas of 16 images\nAtlases can be created using the Tile2x2 node.", +# "name": "inputs", +# "shortdesc": "Inputs", +# "type": "enum", +# "values": [ +# { +# "name": "1", +# "value": "1.0" +# }, +# { +# "name": "4", +# "value": "2.0" +# }, +# { +# "name": "16", +# "value": "4.0" +# } +# ] +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Scale X", +# "longdesc": "The scale of the input image along the X axis.", +# "max": 5, +# "min": 0, +# "name": "sx", +# "shortdesc": "Scale.x", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 1, +# "label": "Scale Y", +# "longdesc": "The scale of the input image along the Y axis.", +# "max": 5, +# "min": 0, +# "name": "sy", +# "shortdesc": "Scale.y", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Rnd Rotate", +# "longdesc": "The random rotation applied to each remapped instance.", +# "max": 180, +# "min": 0, +# "name": "rotate", +# "shortdesc": "RndRotate", +# "step": 0.1, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0.5, +# "label": "Rnd Scale", +# "longdesc": "The random scale applied to each remapped instance.", +# "max": 1, +# "min": 0, +# "name": "scale", +# "shortdesc": "RndScale", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#splatter.mmg +#Spreads several occurences of an input image randomly. + +#vec4 $(name_uv)_rch = splatter_$(name)($uv, int($count), vec2(float($seed))); + +#vec4 splatter_$(name)(vec2 uv, int count, vec2 seed) {\n\t +# float c = 0.0;\n\t +# vec3 rc = vec3(0.0);\n\t +# vec3 rc1;\n\t +# +# for (int i = 0; i < count; ++i) {\n\t\t +# seed = rand2(seed);\n\t\t +# rc1 = rand3(seed);\n\t\t +# float mask = $mask(fract(seed+vec2(0.5)));\n\t\t +# +# if (mask > 0.01) {\n\t\t\t +# vec2 pv = fract(uv - seed)-vec2(0.5);\n\t\t\t +# seed = rand2(seed);\n\t\t\t +# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251;\n\t\t\t +# float ca = cos(angle);\n\t\t\t +# float sa = sin(angle);\n\t\t\t +# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t +# pv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t +# pv /= vec2($scale_x, $scale_y);\n\t\t\t +# pv += vec2(0.5);\n\t\t\t +# seed = rand2(seed);\n\t\t\t +# vec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0));\n\t\t\t +# +# if (pv.x != clamped_pv.x || pv.y != clamped_pv.y) {\n\t\t\t\t +# continue;\n\t\t\t +# }\n\t\t\t +# +# $select_inputs\n\t\t\t +# +# float c1 = $in.variation(pv, $variations ? seed.x : 0.0)*mask*(1.0-$value*seed.x);\n\t\t\t +# c = max(c, c1);\n\t\t\t +# rc = mix(rc, rc1, step(c, c1));\n\t\t +# }\n\t +# }\n\t +# +# return vec4(rc, c);\n +#} + +#Inputs: + +#in, float, default: 0, - The input image or atlas of 4 or 16 input images +#Mask, float, default: 1, - The mask applied to the pattern + +#Outputs: +#Output, float, Shows the generated pattern +#$(name_uv)_rch.a + +#Instance map, rgb, Shows a random color for each instance of the input image +#$(name_uv)_rch.rgb + +#select_inputs enum +#1, " " +#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" +#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" + +#Parameters: +#count, int, default 25, min 1, max 100, - The number of occurences of the input image +#select_inputs (Inputs), enum, default 0, values 1, 4, 16 +#tile, Vector2, default 4, min:1, max:64, step:1 - The number of columns of the tiles pattern +#overlap, float, default 1, min 0, max 5, step 1 - The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance. +#scale, Vector2, default 1, min:0, max:2, step:0.01 - "The scale of input images on the X axis +#rotate (rnd_rotate), float, default 0, min 0, max 180, step 0.1 +#scale (rnd_scale), float, default 0, min 0, max 1, step 0.01 - The random scale applied to each image instance +#value (rnd_value), float, default 0, min 0, max 1, step 0.01 + +#---------------------- +#splatter_color.mmg +#preads several occurences of an input image randomly. + +#vec4 splatter_$(name)(vec2 uv, int count, vec2 seed) {\n\t +# vec4 c = vec4(0.0);\n\t +# +# for (int i = 0; i < count; ++i) {\n\t\t +# seed = rand2(seed);\n\t\t +# float mask = $mask(fract(seed+vec2(0.5)));\n\t\t +# +# if (mask > 0.01) {\n\t\t\t +# vec2 pv = fract(uv - seed)-vec2(0.5);\n\t\t\t +# seed = rand2(seed);\n\t\t\t +# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251;\n\t\t\t +# float ca = cos(angle);\n\t\t\t +# float sa = sin(angle);\n\t\t\t +# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t +# pv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t +# pv /= vec2($scale_x, $scale_y);\n\t\t\tpv += vec2(0.5);\n\t\t\t +# seed = rand2(seed);\n\t\t\t +# +# if (pv != clamp(pv, vec2(0.0), vec2(1.0))) {\n\t\t\t\t +# continue;\n\t\t\t +# }\n\t\t\t +# +# $select_inputs\n\t\t\t +# +# vec4 n = $in.variation(pv, $variations ? seed.x : 0.0);\n\t\t\t +# +# float na = n.a*mask*(1.0-$opacity*seed.x);\n\t\t\t +# float a = (1.0-c.a)*(1.0*na);\n\t\t\t +# c = mix(c, n, na);\n\t\t +# }\n\t +# }\n\t +# +# return c;\n +#} + +#Inputs: + +#in, rgba, default: 0, - The input image or atlas of 4 or 16 input images +#Mask, float, default: 1, - The mask applied to the pattern + +#Outputs: +#Output, rgba, Shows the generated pattern +#splatter_$(name)($uv, int($count), vec2(float($seed))) + +#select_inputs enum +#1, " " +#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" +#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" + +#Parameters: +#count, int, default 25, min 1, max 100, - The number of occurences of the input image +#select_inputs (Inputs), enum, default 0, values 1, 4, 16 +#tile, Vector2, default 4, min:1, max:64, step:1 - The number of columns of the tiles pattern +#overlap, float, default 1, min 0, max 5, step 1 - The number of neighbour tiles an instance of the input image can overlap. Set this parameter to the lowest value that generates the expected result (where all instances are fully visible) to improve performance. +#scale, Vector2, default 1, min:0, max:2, step:0.01 - "The scale of input images on the X axis +#rotate (rnd_rotate), float, default 0, min 0, max 180, step 0.1 +#scale (rnd_scale), float, default 0, min 0, max 1, step 0.01 - The random scale applied to each image instance +#value (rnd_value), float, default 0, min 0, max 1, step 0.01 +#variations bool + +#---------------------- +#circle_splatter.mmg +#Spreads several occurences of an input image in a circle or spiral pattern. + +#vec4 $(name_uv)_rch = splatter_$(name)($uv, int($count), int($rings), vec2(float($seed))); + +#vec4 splatter_$(name)(vec2 uv, int count, int rings, vec2 seed) {\n\t +# float c = 0.0;\n\t +# vec3 rc = vec3(0.0);\n\t +# vec3 rc1;\n\t +# seed = rand2(seed);\n\t +# +# for (int i = 0; i < count; ++i) {\n\t\t +# float a = -1.57079632679+6.28318530718*float(i)*$rings/float(count);\n\t\t +# float rings_distance = ceil(float(i+1)*float(rings)/float(count))/float(rings);\n\t\t +# float spiral_distance = float(i+1)/float(count);\n\t\t +# vec2 pos = $radius*mix(rings_distance, spiral_distance, $spiral)*vec2(cos(a), sin(a));\n\t\t +# float mask = $mask(fract(pos-vec2(0.5)));\n\t\t +# +# if (mask > 0.01) {\n\t\t\t +# vec2 pv = uv-0.5-pos;\n\t\t\t +# rc1 = rand3(seed);\n\t\t\tseed = rand2(seed);\n\t\t\t +# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251 + (a+1.57079632679) * $i_rotate;\n\t\t\t +# float ca = cos(angle);\n\t\t\t +# float sa = sin(angle);\n\t\t\t +# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t +# pv /= mix(1.0, float(i+1)/float(count+1), $i_scale);\n\t\t\t +# pv /= vec2($scale_x, $scale_y);\n\t\t\t +# pv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t +# pv += vec2(0.5);\n\t\t\tseed = rand2(seed);\n\t\t\t +# +# if (pv != clamp(pv, vec2(0.0), vec2(1.0))) {\n\t\t\t\t +# continue;\n\t\t\t +# }\n\t\t\t +# +# $select_inputs\n\t\t\t +# +# float c1 = $in(pv)*mask*(1.0-$value*seed.x);\n\t\t\t +# +# c = max(c, c1);\n\t\t\trc = mix(rc, rc1, step(c, c1));\n\t\t +# }\n\t +# }\n\t +# +# return vec4(rc, c);\n +#} + + +#Inputs: + +#in, float, default: 0, - The input image or atlas of 4 or 16 input images +#Mask, float, default: 1, - The mask applied to the pattern + +#Outputs: +#Output, float, Shows the generated pattern +#$(name_uv)_rch.rgb + +#select_inputs enum +#1, " " +#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" +#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" + +#Parameters: +#count, int, default 10, min 1, max 256, - The number of occurences of the input image +#rings, int, default 1, min 1, max 16, - The number of occurences of the input image +#select_inputs (Inputs), enum, default 0, values 1, 4, 16 +#scale, Vector2, default 1, min:0, max:2, step:0.01 - "The scale of input images on the X axis +#radius, float, default 0.4, min 0, max 0.5, step 0.01 +#spiral, float, default 0, min 0, max 1, step 0.01 +#i_rotate (inc_rotate), float, default 0, min 0, max 180, step 0.1 +#i_scale (inc_scale), float, default 0, min 0, max 1, step 0.01 +#rotate (rnd_rotate), float, default 0, min 0, max 180, step 0.1 +#scale (rnd_scale), float, default 0, min 0, max 1, step 0.01 - The random scale applied to each image instance +#value (rnd_value), float, default 0, min 0, max 1, step 0.01 + +#---------------------- +#warp_dilation.mmg + +#{ +# "connections": [ +# { +# "from": "warp_dilation", +# "from_port": 0, +# "to": "buffer_5", +# "to_port": 0 +# }, +# { +# "from": "buffer_5", +# "from_port": 0, +# "to": "gen_outputs", +# "to_port": 0 +# }, +# { +# "from": "gen_inputs", +# "from_port": 1, +# "to": "buffer_6", +# "to_port": 0 +# }, +# { +# "from": "buffer_6", +# "from_port": 0, +# "to": "warp_dilation", +# "to_port": 1 +# }, +# { +# "from": "gen_inputs", +# "from_port": 0, +# "to": "buffer_7", +# "to_port": 0 +# }, +# { +# "from": "buffer_7", +# "from_port": 0, +# "to": "warp_dilation", +# "to_port": 0 +# } +# ], +# "label": "Warp Dilation", +# "longdesc": "", +# "name": "warp_dilation", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "nodes": [ +# { +# "name": "buffer_5", +# "node_position": { +# "x": -387.923584, +# "y": -38 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# }, +# { +# "name": "buffer_6", +# "node_position": { +# "x": -636.189514, +# "y": -90.757477 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# }, +# { +# "name": "buffer_7", +# "node_position": { +# "x": -635.189514, +# "y": -199.757477 +# }, +# "parameters": { +# "lod": 0, +# "size": 9 +# }, +# "type": "buffer" +# }, +# { +# "name": "warp_dilation", +# "node_position": { +# "x": -404.125, +# "y": -172.25 +# }, +# "parameters": { +# "a": 0, +# "d": 0.5, +# "mode": 0, +# "s": 9 +# }, +# "type": "warp_dilation_nobuf" +# }, +# { +# "name": "gen_inputs", +# "node_position": { +# "x": -1127.189453, +# "y": -144.691238 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "name": "port1", +# "type": "f" +# }, +# { +# "group_size": 0, +# "name": "port0", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_outputs", +# "node_position": { +# "x": -70.923584, +# "y": -122.691238 +# }, +# "parameters": { +# +# }, +# "ports": [ +# { +# "group_size": 0, +# "name": "port0", +# "type": "f" +# } +# ], +# "type": "ios" +# }, +# { +# "name": "gen_parameters", +# "node_position": { +# "x": -463.856934, +# "y": -398.757477 +# }, +# "parameters": { +# "a": 0, +# "d": 0.5, +# "mode": 0, +# "s": 9 +# }, +# "type": "remote", +# "widgets": [ +# { +# "label": "Mode", +# "linked_widgets": [ +# { +# "node": "warp_dilation", +# "widget": "mode" +# } +# ], +# "name": "mode", +# "type": "linked_control" +# }, +# { +# "label": "Resolution", +# "linked_widgets": [ +# { +# "node": "warp_dilation", +# "widget": "s" +# }, +# { +# "node": "buffer_7", +# "widget": "size" +# }, +# { +# "node": "buffer_6", +# "widget": "size" +# }, +# { +# "node": "buffer_5", +# "widget": "size" +# } +# ], +# "name": "s", +# "type": "linked_control" +# }, +# { +# "label": "Distance", +# "linked_widgets": [ +# { +# "node": "warp_dilation", +# "widget": "d" +# } +# ], +# "name": "d", +# "type": "linked_control" +# }, +# { +# "label": "Attenuation", +# "linked_widgets": [ +# { +# "node": "warp_dilation", +# "widget": "a" +# } +# ], +# "name": "a", +# "type": "linked_control" +# } +# ] +# } +# ], +# "parameters": { +# "a": 0, +# "d": 0.5, +# "mode": 0, +# "s": 9 +# }, +# "shortdesc": "", +# "type": "graph" +#} + +#---------------------- +#warp_dilation_nobuf.mmg + +#{ +# "name": "warp_dilation", +# "node_position": { +# "x": 0, +# "y": 0 +# }, +# "parameters": { +# "a": 0, +# "d": 0.5, +# "mode": 0, +# "s": 9 +# }, +# "shader_model": { +# "code": "", +# "global": "", +# "inputs": [ +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "longdesc": "The input image", +# "name": "in", +# "shortdesc": "Input", +# "type": "f" +# }, +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "longdesc": "The height map whose contours or slopes are followed", +# "name": "hm", +# "shortdesc": "Height map", +# "type": "f" +# } +# ], +# "instance": "vec2 $(name)_slope(vec2 uv, float epsilon) {\n\tfloat dx = $hm(fract(uv+vec2(epsilon, 0.0)))-$hm(fract(uv-vec2(epsilon, 0.0)));\n\tfloat dy = $hm(fract(uv+vec2(0.0, epsilon)))-$hm(fract(uv-vec2(0.0, epsilon)));\n\treturn vec2($mode);\n}\n\nfloat $(name)_dilate(vec2 uv, vec2 slope) {\n\tfloat e = 1.0/$s;\n\tfloat v = 0.0;\n\tfor (float x = 0.0; x <= $d; x += e) {\n\t\tv = max(v, $in(fract(uv))*(1.0-x/$d*$a));\n\t\tuv += e*normalize($(name)_slope(uv, 0.0001));\n\t}\n\treturn v;\n}", +# "longdesc": "Dilates its input following the contours or slope of an input heightmap", +# "name": "Warp Dilation", +# "outputs": [ +# { +# "f": "$(name)_dilate($uv, normalize($(name)_slope($uv, 0.001)))", +# "longdesc": "The dilated image", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "default": 0, +# "label": "Mode", +# "longdesc": "The dilate mode (clockwise contour, counter clockwise contour or slope)", +# "name": "mode", +# "shortdesc": "Mode", +# "type": "enum", +# "values": [ +# { +# "name": "Contour (cw)", +# "value": "-dy,dx" +# }, +# { +# "name": "Contour (ccw)", +# "value": "dy, -dx" +# }, +# { +# "name": "Slope", +# "value": "dx,dy" +# } +# ] +# }, +# { +# "default": 9, +# "first": 6, +# "label": "Resolution", +# "last": 12, +# "longdesc": "The resolution at which the contours or slopes are followed (higher values will be more precise but rendering time will be higher)", +# "name": "s", +# "shortdesc": "Resolution", +# "type": "size" +# }, +# { +# "control": "None", +# "default": 0.1, +# "label": "Distance", +# "longdesc": "The distance along which the contours or slopes are followed", +# "max": 0.5, +# "min": 0, +# "name": "d", +# "shortdesc": "Distance", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Attenuation", +# "longdesc": "The attenuation applied along the path", +# "max": 1, +# "min": 0, +# "name": "a", +# "shortdesc": "Attenuation", +# "step": 0.01, +# "type": "float" +# } +# ], +# "shortdesc": "Warp Dilation" +# }, +# "type": "shader" +#} + +#---------------------- +#repeat.mmg +#Translates, rotates and scales its input + +# "inputs": [ +# { +# "default": "vec4($uv, 0.0, 1.0)", +# "label": "", +# "longdesc": "The input image to be transformed", +# "name": "i", +# "shortdesc": "Input", +# "type": "rgba" +# } +# ], +# "outputs": [ +# { +# "longdesc": "Shows the transformed image", +# "rgba": "$i(fract($uv))", +# "shortdesc": "Output", +# "type": "rgba" +# } +# ], + +#---------------------- +#remap.mmg +#The remapped image map + +# "code": "float $(name_uv)_x = $in($uv)*($max-$min);", +# "inputs": [ +# { +# "default": "0.0", +# "label": "", +# "longdesc": "The greyscale input map", +# "name": "in", +# "shortdesc": "Input", +# "type": "f" +# } +# ], +# "outputs": [ +# { +# "f": "$min+$(name_uv)_x-mod($(name_uv)_x, max($step, 0.00000001))", +# "longdesc": "The remapped image map", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0, +# "label": "Min", +# "longdesc": "The value generated for black areas of the input", +# "max": 10, +# "min": -10, +# "name": "min", +# "shortdesc": "Min", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Max", +# "longdesc": "The value generated for white areas of the input", +# "max": 10, +# "min": -10, +# "name": "max", +# "shortdesc": "Max", +# "step": 0.01, +# "type": "float" +# }, +# { +# "control": "None", +# "default": 0, +# "label": "Step", +# "longdesc": "The step between generated values", +# "max": 1, +# "min": 0, +# "name": "step", +# "shortdesc": "Step", +# "step": 0.01, +# "type": "float" +# } +# ], + +#---------------------- +#height_to_angle.mmg +#Generates an angle map to be used by Advances Tiler nodes from a heightmap + +# "inputs": [ +# { +# "default": "0.0", +# "function": true, +# "label": "", +# "longdesc": "The input heightmap", +# "name": "in", +# "shortdesc": "Input", +# "type": "f" +# } +# ], +# "instance": "float $(name)_fct(vec2 uv, float epsilon) {\n\tvec3 e = vec3(epsilon, -epsilon, 0);\n\tvec2 rv = vec2(1.0, -1.0)*$in(uv+e.xy);\n\trv += vec2(-1.0, 1.0)*$in(uv-e.xy);\n\trv += vec2(1.0, 1.0)*$in(uv+e.xx);\n\trv += vec2(-1.0, -1.0)*$in(uv-e.xx);\n\trv += vec2(2.0, 0.0)*$in(uv+e.xz);\n\trv += vec2(-2.0, 0.0)*$in(uv-e.xz);\n\trv += vec2(0.0, 2.0)*$in(uv+e.zx);\n\trv += vec2(0.0, -2.0)*$in(uv-e.zx);\n\treturn atan(rv.y, rv.x)/3.141592;\n}", +# "outputs": [ +# { +# "f": "$(name)_fct($uv, 0.0001)+$angle/180.0", +# "longdesc": "The generated angle map. Values are between -1 and 1 and the corresponding Advanced Tiler parameter (Rotate) must be set to 180.", +# "shortdesc": "Output", +# "type": "f" +# } +# ], +# "parameters": [ +# { +# "control": "None", +# "default": 0, +# "label": "", +# "longdesc": "The offset angle applied to the generated map", +# "max": 180, +# "min": -180, +# "name": "angle", +# "shortdesc": "Angle", +# "step": 0.01, +# "type": "float" +# } +# ], + +#vec2 transform(vec2 uv, vec2 translate, float rotate, vec2 scale, bool repeat) {\n \t +# vec2 rv;\n\t +# uv -= translate;\n\t +# uv -= vec2(0.5);\n\t +# rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y;\n\t +# rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y;\n\t +# rv /= scale;\n\t +# rv += vec2(0.5);\n +# +# if (repeat) {\n\t\t +# return fract(rv);\n\t +# } else {\n\t\t +# return clamp(rv, vec2(0.0), vec2(1.0));\n\t +# }\t\n +#} + +static func transform(uv : Vector2, translate : Vector2, rotate : float, scale : Vector2, repeat : bool) -> Vector2: + var rv : Vector2 = Vector2() + uv -= translate + uv -= Vector2(0.5, 0.5) + rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y + rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y + rv /= scale + rv += Vector2(0.5, 0.5) + + if (repeat): + return Commons.fractv2(rv) + else: + return Commons.clampv2(rv, Vector2(0, 0), Vector2(1, 1)) + +#vec2 transform2_clamp(vec2 uv) {\n\t +# return clamp(uv, vec2(0.0), vec2(1.0));\n +#} + +static func transform2_clamp(uv : Vector2) -> Vector2: + return Commons.clampv2(uv, Vector2(0, 0), Vector2(1, 1)) + +#vec2 transform2(vec2 uv, vec2 translate, float rotate, vec2 scale) {\n \t +# vec2 rv;\n\t +# uv -= translate;\n\t +# uv -= vec2(0.5);\n\t +# rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y;\n\t +# rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y;\n\t +# rv /= scale;\n\t +# rv += vec2(0.5);\n\t +# return rv;\t\n +#} + +static func transform2(uv : Vector2, translate : Vector2, rotate : float, scale : Vector2) -> Vector2: + var rv : Vector2 = Vector2() + uv -= translate + uv -= Vector2(0.5, 0.5) + rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y + rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y + rv /= scale + rv += Vector2(0.5, 0.5) + return rv + +#vec2 rotate(vec2 uv, vec2 center, float rotate) {\n \t +# vec2 rv;\n\t +# uv -= center;\n\t +# rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y;\n\t +# rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y;\n\t +# rv += center;\n +# return rv;\t\n +#} + +static func rotate(uv : Vector2, center : Vector2, rotate : float) -> Vector2: + var rv : Vector2 = Vector2() + uv -= center + rv.x = cos(rotate)*uv.x + sin(rotate)*uv.y + rv.y = -sin(rotate)*uv.x + cos(rotate)*uv.y + rv += center + return rv + +#vec2 scale(vec2 uv, vec2 center, vec2 scale) {\n\t +# uv -= center;\n\t +# uv /= scale;\n\t +# uv += center;\n +# return uv;\n +#} + +static func scale(uv : Vector2, center : Vector2, scale : Vector2) -> Vector2: + uv -= center + uv /= scale + uv += center + return uv + +#vec2 uvmirror_h(vec2 uv, float offset) {\n\t +# return vec2(max(0, abs(uv.x-0.5)-0.5*offset)+0.5, uv.y); +#} + +static func uvmirror_h(uv : Vector2, offset : float) -> Vector2: + return Vector2(max(0, abs(uv.x - 0.5) - 0.5 * offset)+0.5, uv.y) + +#vec2 uvmirror_v(vec2 uv, float offset) {\n\t +# return vec2(uv.x, max(0, abs(uv.y-0.5)-0.5*offset)+0.5);\n +#} + +static func uvmirror_v(uv : Vector2, offset : float) -> Vector2: + return Vector2(uv.x, max(0, abs(uv.y - 0.5) - 0.5 * offset) + 0.5) + +#vec2 kal_rotate(vec2 uv, float count, float offset) {\n\t +# float pi = 3.14159265359;\n\t +# offset *= pi/180.0;\n\t +# offset += pi*(1.0/count+0.5);\n\t +# uv -= vec2(0.5);\n\t +# +# float l = length(uv);\n\t +# float a = mod(atan(uv.y, uv.x)+offset, 2.0*pi/count)-offset;\n\t +# +# return vec2(0.5)+l*vec2(cos(a), sin(a));\n +#} + +static func kal_rotate(uv : Vector2, count : float, offset : float) -> Vector2: + var pi : float = 3.14159265359 + offset *= pi / 180.0 + offset += pi * (1.0/ count + 0.5) + uv -= Vector2(0.5, 0.5) + + var l : float = uv.length() + var a : float = Commons.modf(atan2(uv.y, uv.x) + offset, 2.0 * pi / count) - offset + + return Vector2(0.5, 0.5) + l * Vector2(cos(a), sin(a)) + +#vec2 get_from_tileset(float count, float seed, vec2 uv) {\n\t +# return clamp((uv+floor(rand2(vec2(seed))*count))/count, vec2(0.0), vec2(1.0));\n +#} + +static func get_from_tileset(count : float, pseed : float, uv : Vector2) -> Vector2: + return Commons.clampv2((uv + Commons.floorv2(Commons.rand2(Vector2(pseed, pseed))*count))/count, Vector2(0, 0), Vector2(1, 1)) + +#vec2 custom_uv_transform(vec2 uv, vec2 cst_scale, float rnd_rotate, float rnd_scale, vec2 seed) {\n\t +# seed = rand2(seed);\n\t +# uv -= vec2(0.5);\n\t +# float angle = (seed.x * 2.0 - 1.0) * rnd_rotate;\n\t +# float ca = cos(angle);\n\t +# float sa = sin(angle);\n\t +# uv = vec2(ca*uv.x+sa*uv.y, -sa*uv.x+ca*uv.y);\n\t +# uv *= (seed.y-0.5)*2.0*rnd_scale+1.0;\n\t +# uv /= cst_scale;\n\t +# uv += vec2(0.5);\n\t +# +# return uv;\n +#} + +static func custom_uv_transform(uv : Vector2, cst_scale : Vector2, rnd_rotate : float, rnd_scale : float, pseed : Vector2) -> Vector2: + pseed = Commons.rand2(pseed) + uv -= Vector2(0.5, 0.5) + var angle : float = (pseed.x * 2.0 - 1.0) * rnd_rotate + var ca : float = cos(angle) + var sa : float = sin(angle) + uv = Vector2(ca * uv.x + sa * uv.y, -sa * uv.x + ca * uv.y) + uv *= (pseed.y-0.5)*2.0*rnd_scale+1.0 + uv /= cst_scale + uv += Vector2(0.5, 0.5) + + return uv diff --git a/game/addons/mat_maker_gd/nodes/filter/adjust_hsv.gd b/game/addons/mat_maker_gd/nodes/filter/adjust_hsv.gd new file mode 100644 index 0000000..664ff95 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/adjust_hsv.gd @@ -0,0 +1,75 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(float) var hue : float = 0 +export(float) var saturation : float = 1 +export(float) var value : float = 1 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_float("get_hue", "set_hue", "Hue", 0.01) + mm_graph_node.add_slot_float("get_saturation", "set_saturation", "Saturation", 0.01) + mm_graph_node.add_slot_float("get_value", "set_value", "Value", 0.01) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var c : Color = input.get_value(uv) + + return Filter.adjust_hsv(c, hue, saturation, value) + +#hue +func get_hue() -> float: + return hue + +func set_hue(val : float) -> void: + hue = val + + set_dirty(true) + +#saturation +func get_saturation() -> float: + return saturation + +func set_saturation(val : float) -> void: + saturation = val + + set_dirty(true) + +#value +func get_value() -> float: + return value + +func set_value(val : float) -> void: + value = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/blend.gd b/game/addons/mat_maker_gd/nodes/filter/blend.gd new file mode 100644 index 0000000..ffeed8a --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/blend.gd @@ -0,0 +1,125 @@ +tool +extends MMNode + +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +enum BlendType { + NORMAL = 0, + DISSOLVE, + MULTIPLY, + SCREEN, + OVERLAY, + HARD_LIGHT, + SOFT_LIGHT, + BURN, + DODGE, + LIGHTEN, + DARKEN, + DIFFRENCE +} + +export(Resource) var image : Resource +export(Resource) var input1 : Resource +export(Resource) var input2 : Resource +export(int, "Normal,Dissolve,Multiply,Screen,Overlay,Hard Light,Soft Light,Burn,Dodge,Lighten,Darken,Difference") var blend_type : int = 0 +export(Resource) var opacity : Resource + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !input1: + input1 = MMNodeUniversalProperty.new() + input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input1.set_default_value(Color(1, 1, 1, 1)) + + input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input1.slot_name = ">>> Input1 " + + if !input2: + input2 = MMNodeUniversalProperty.new() + input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input2.set_default_value(Color(1, 1, 1, 1)) + + input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input2.slot_name = ">>> Input2 " + + if !opacity: + opacity = MMNodeUniversalProperty.new() + opacity.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + opacity.set_default_value(0.5) + opacity.value_range = Vector2(0, 1) + opacity.value_step = 0.01 + + opacity.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + opacity.slot_name = "opacity" + + register_input_property(input1) + register_input_property(input2) + + register_output_property(image) + register_input_property(opacity) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_blend_type", "set_blend_type", "blend_type", [ "Normal", "Dissolve", "Multiply", "Screen", "Overlay", "Hard Light", "Soft Light", "Burn", "Dodge", "Lighten", "Darken", "Difference" ]) + + mm_graph_node.add_slot_label_universal(input1) + mm_graph_node.add_slot_label_universal(input2) + mm_graph_node.add_slot_float_universal(opacity) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var b : Vector3 = Vector3() + + #vec4 $(name_uv)_s1 = $s1($uv); + var s1 : Color = input1.get_value(uv) + #vec4 $(name_uv)_s2 = $s2($uv); + var s2 : Color = input2.get_value(uv) + #float $(name_uv)_a = $amount*$a($uv); + var a : float = opacity.get_value(uv) + + #vec4(blend_$blend_type($uv, $(name_uv)_s1.rgb, $(name_uv)_s2.rgb, $(name_uv)_a*$(name_uv)_s1.a), min(1.0, $(name_uv)_s2.a+$(name_uv)_a*$(name_uv)_s1.a)) + + #"Normal,Dissolve,Multiply,Screen,Overlay,Hard Light,Soft Light,Burn,Dodge,Lighten,Darken,Difference" + if blend_type == BlendType.NORMAL: + b = Filter.blend_normal(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.DISSOLVE: + b = Filter.blend_dissolve(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.MULTIPLY: + b = Filter.blend_multiply(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.SCREEN: + b = Filter.blend_screen(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.OVERLAY: + b = Filter.blend_overlay(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.HARD_LIGHT: + b = Filter.blend_hard_light(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.SOFT_LIGHT: + b = Filter.blend_soft_light(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.BURN: + b = Filter.blend_burn(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.DODGE: + b = Filter.blend_dodge(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.LIGHTEN: + b = Filter.blend_lighten(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.DARKEN: + b = Filter.blend_darken(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + elif blend_type == BlendType.DIFFRENCE: + b = Filter.blend_difference(uv, Vector3(s1.r, s1.g, s1.b), Vector3(s2.r, s2.g, s2.b), a * s1.a) + + return Color(b.x, b.y, b.z, min(1, s2.a + a * s1.a)) + +func get_blend_type() -> int: + return blend_type + +func set_blend_type(val : int) -> void: + blend_type = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/blur_gaussian.gd b/game/addons/mat_maker_gd/nodes/filter/blur_gaussian.gd new file mode 100644 index 0000000..afcfcb2 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/blur_gaussian.gd @@ -0,0 +1,220 @@ +tool +extends MMNode + +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(Resource) var sigma : Resource +export(int, "Both,X,Y") var direction : int = 0 + +var size : int = 0 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color()) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + if !sigma: + sigma = MMNodeUniversalProperty.new() + sigma.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + sigma.set_default_value(50) + + sigma.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + sigma.slot_name = "Sigma" + + register_input_property(input) + register_output_property(image) + register_input_property(sigma) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_int_universal(sigma) + + mm_graph_node.add_slot_enum("get_direction", "set_direction", "Direction", [ "Both", "X", "Y" ]) + + +func _render(material) -> void: + size = max(material.image_size.x, material.image_size.y) + + var img : Image = render_image(material) + + image.set_value(img) + +func render_image(material) -> Image: + var img : Image = Image.new() + img.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + + img.lock() + + var w : float = img.get_width() + var h : float = img.get_width() + + var pseed : float = randf() + randi() + + if direction == 0: + for x in range(img.get_width()): + for y in range(img.get_height()): + var v : Vector2 = Vector2(x / w, y / h) + var col : Color = get_value_x(v, pseed) + img.set_pixel(x, y, col) + + img.unlock() + image.set_value(img) + + var image2 : Image = Image.new() + image2.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + image2.lock() + + for x in range(img.get_width()): + for y in range(img.get_height()): + var v : Vector2 = Vector2(x / w, y / h) + var col : Color = get_value_y_img(v, pseed) + image2.set_pixel(x, y, col) + + image2.unlock() + + return image2 + + if direction == 1: + for x in range(img.get_width()): + for y in range(img.get_height()): + var v : Vector2 = Vector2(x / w, y / h) + var col : Color = get_value_x(v, pseed) + img.set_pixel(x, y, col) + + if direction == 2: + for x in range(img.get_width()): + for y in range(img.get_height()): + var v : Vector2 = Vector2(x / w, y / h) + var col : Color = get_value_y(v, pseed) + img.set_pixel(x, y, col) + + img.unlock() + + return img + +func get_value_x(uv : Vector2, pseed : int) -> Color: + var sig_def : float = sigma.get_default_value(uv) + var sig : float = sigma.get_value(uv) + + return gaussian_blur_x(uv, size, sig_def, sig) + +func get_value_y(uv : Vector2, pseed : int) -> Color: + var sig_def : float = sigma.get_default_value(uv) + var sig : float = sigma.get_value(uv) + + return gaussian_blur_y(uv, size, sig_def, sig) + +func get_value_y_img(uv : Vector2, pseed : int) -> Color: + var sig_def : float = sigma.get_default_value(uv) + var sig : float = sigma.get_value(uv) + + return gaussian_blur_y_img(uv, size, sig_def, sig) + +func get_direction() -> int: + return direction + +func set_direction(val : int) -> void: + direction = val + + set_dirty(true) + +#---------------------- +#gaussian_blur_x.mmg + +#vec4 $(name)_fct(vec2 uv) { +# float e = 1.0 / $size; +# vec4 rv = vec4(0.0); +# float sum = 0.0; +# float sigma = max(0.000001, $sigma * $amount(uv)); +# +# for (float i = -50.0; i <= 50.0; i += 1.0) { +# float coef = exp(-0.5 * (pow(i / sigma, 2.0))) / (6.28318530718 * sigma * sigma); +# rv += $in(uv+vec2(i*e, 0.0))*coef; +# sum += coef; +# } +# +# return rv/sum; +#} + +func gaussian_blur_x(uv : Vector2, psize : float, psigma : float, pamount : float) -> Color: + var e : float = 1.0 / psize + var rv : Color = Color() + var sum : float = 0.0 + var sigma : float = max(0.000001, psigma * pamount)#pamount(uv)) + + var i : float = -50 + + while i <= 50: #for (float i = -50.0; i <= 50.0; i += 1.0) { + var coef : float = exp(-0.5 * (pow(i / sigma, 2.0))) / (6.28318530718 * sigma * sigma) + rv += input.get_value(uv + Vector2(i*e, 0.0)) * coef + sum += coef + + i += 1 + + return rv / sum; + + +#---------------------- +#gaussian_blur_y.mmg + +#vec4 $(name)_fct(vec2 uv) { +# float e = 1.0/$size; +# vec4 rv = vec4(0.0); +# float sum = 0.0; +# float sigma = max(0.000001, $sigma*$amount(uv)); +# for (float i = -50.0; i <= 50.0; i += 1.0) { +# float coef = exp(-0.5 * (pow(i / sigma, 2.0))) / (6.28318530718*sigma*sigma); +# rv += $in(uv+vec2(0.0, i*e))*coef; +# sum += coef; +# } +# +# return rv/sum; +#} + +func gaussian_blur_y(uv : Vector2, psize : float, psigma : float, pamount : float) -> Color: + var e : float = 1.0 / psize + var rv : Color = Color() + var sum : float = 0.0 + var sigma : float = max(0.000001, psigma * pamount)#pamount(uv)) + + var i : float = -50 + + while i <= 50: #for (float i = -50.0; i <= 50.0; i += 1.0) { + var coef : float = exp(-0.5 * (pow(i / sigma, 2.0))) / (6.28318530718 * sigma * sigma) + rv += input.get_value(uv + Vector2(0.0, i * e)) * coef + sum += coef + + i += 1 + + return rv / sum; + + +func gaussian_blur_y_img(uv : Vector2, psize : float, psigma : float, pamount : float) -> Color: + var e : float = 1.0 / psize + var rv : Color = Color() + var sum : float = 0.0 + var sigma : float = max(0.000001, psigma * pamount)#pamount(uv)) + + var i : float = -50 + + while i <= 50: #for (float i = -50.0; i <= 50.0; i += 1.0) { + var coef : float = exp(-0.5 * (pow(i / sigma, 2.0))) / (6.28318530718 * sigma * sigma) + rv += image.get_value(uv + Vector2(0.0, i * e)) * coef + sum += coef + + i += 1 + + return rv / sum; diff --git a/game/addons/mat_maker_gd/nodes/filter/brightness_contrast.gd b/game/addons/mat_maker_gd/nodes/filter/brightness_contrast.gd new file mode 100644 index 0000000..b22db91 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/brightness_contrast.gd @@ -0,0 +1,64 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(float) var brightness : float = 0 +export(float) var contrast : float = 1 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_float("get_brightness", "set_brightness", "Brightness", 0.01) + mm_graph_node.add_slot_float("get_contrast", "set_contrast", "Contrast", 0.01) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var c : Color = input.get_value(uv) + + return Filter.brightness_contrast(c, brightness, contrast) + +#brightness +func get_brightness() -> float: + return brightness + +func set_brightness(val : float) -> void: + brightness = val + + set_dirty(true) + +#contrast +func get_contrast() -> float: + return contrast + +func set_contrast(val : float) -> void: + contrast = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/colorize.gd b/game/addons/mat_maker_gd/nodes/filter/colorize.gd new file mode 100644 index 0000000..52fdb81 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/colorize.gd @@ -0,0 +1,55 @@ +tool +extends "res://addons/mat_maker_gd/nodes/bases/gradient_base.gd" + +var Gradients = preload("res://addons/mat_maker_gd/nodes/common/gradients.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + input.set_default_value(1) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_gradient() + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var f : float = input.get_value(uv) + + return get_gradient_color(f) +# return Color(0.5, 0.5, 0.5, 1) + +func get_gradient_color(x : float) -> Color: + if interpolation_type == 0: + return Gradients.gradient_type_1(x, points) + elif interpolation_type == 1: + return Gradients.gradient_type_2(x, points) + elif interpolation_type == 2: + return Gradients.gradient_type_3(x, points) + elif interpolation_type == 3: + return Gradients.gradient_type_4(x, points) + + return Color(1, 1, 1, 1) diff --git a/game/addons/mat_maker_gd/nodes/filter/combine.gd b/game/addons/mat_maker_gd/nodes/filter/combine.gd new file mode 100644 index 0000000..326ea37 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/combine.gd @@ -0,0 +1,78 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input_r : Resource +export(Resource) var input_g : Resource +export(Resource) var input_b : Resource +export(Resource) var input_a : Resource + +func _init_properties(): + if !input_r: + input_r = MMNodeUniversalProperty.new() + input_r.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + input_r.set_default_value(0) + + input_r.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input_r.slot_name = ">>> R " + + if !input_g: + input_g = MMNodeUniversalProperty.new() + input_g.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + input_g.set_default_value(0) + + input_g.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input_g.slot_name = ">>> G " + + if !input_b: + input_b = MMNodeUniversalProperty.new() + input_b.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + input_b.set_default_value(0) + + input_b.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input_b.slot_name = ">>> B " + + if !input_a: + input_a = MMNodeUniversalProperty.new() + input_a.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + input_a.set_default_value(1) + + input_a.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input_a.slot_name = ">>> A " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input_r) + register_input_property(input_g) + register_input_property(input_b) + register_input_property(input_a) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input_r) + mm_graph_node.add_slot_label_universal(input_g) + mm_graph_node.add_slot_label_universal(input_b) + mm_graph_node.add_slot_label_universal(input_a) + mm_graph_node.add_slot_texture_universal(image) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var r : float = input_r.get_value(uv) + var g : float = input_g.get_value(uv) + var b : float = input_b.get_value(uv) + var a : float = input_a.get_value(uv) + + return Color(r, g, b, a) diff --git a/game/addons/mat_maker_gd/nodes/filter/decompose.gd b/game/addons/mat_maker_gd/nodes/filter/decompose.gd new file mode 100644 index 0000000..5dd5be9 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/decompose.gd @@ -0,0 +1,104 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var NoiseVoronoi = preload("res://addons/mat_maker_gd/nodes/common/noise_voronoi.gd") + +export(Resource) var input : Resource +export(Resource) var out_r : Resource +export(Resource) var out_g : Resource +export(Resource) var out_b : Resource +export(Resource) var out_a : Resource + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !out_r: + out_r = MMNodeUniversalProperty.new() + out_r.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_r.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_g: + out_g = MMNodeUniversalProperty.new() + out_g.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_g.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_b: + out_b = MMNodeUniversalProperty.new() + out_b.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_b.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_a: + out_a = MMNodeUniversalProperty.new() + out_a.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_a.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_input_property(input) + register_output_property(out_r) + register_output_property(out_g) + register_output_property(out_b) + register_output_property(out_a) + + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(out_r) + mm_graph_node.add_slot_texture_universal(out_g) + mm_graph_node.add_slot_texture_universal(out_b) + mm_graph_node.add_slot_texture_universal(out_a) + + +func _render(material) -> void: + var img_r : Image = Image.new() + var img_g : Image = Image.new() + var img_b : Image = Image.new() + var img_a : Image = Image.new() + + img_r.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + img_g.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + img_b.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + img_a.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + + img_r.lock() + img_g.lock() + img_b.lock() + img_a.lock() + + var w : float = material.image_size.x + var h : float = material.image_size.y + + var pseed : float = randf() + randi() + + for x in range(material.image_size.x): + for y in range(material.image_size.y): + var uv : Vector2 = Vector2(x / w, y / h) + + var c : Color = input.get_value(uv) + + img_r.set_pixel(x, y, Color(c.r, c.r, c.r, 1)) + img_g.set_pixel(x, y, Color(c.g, c.g, c.g, 1)) + img_b.set_pixel(x, y, Color(c.b, c.b, c.b, 1)) + img_a.set_pixel(x, y, Color(c.a, c.a, c.a, c.a)) + + img_r.unlock() + img_g.unlock() + img_b.unlock() + img_a.unlock() + + out_r.set_value(img_r) + out_g.set_value(img_g) + out_b.set_value(img_b) + out_a.set_value(img_a) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return Color() diff --git a/game/addons/mat_maker_gd/nodes/filter/emboss.gd b/game/addons/mat_maker_gd/nodes/filter/emboss.gd new file mode 100644 index 0000000..1269371 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/emboss.gd @@ -0,0 +1,112 @@ +tool +extends MMNode + +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(float) var angle : float = 0 +export(float) var amount : float = 5 +export(float) var width : float = 1 + +var size : int = 0 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + input.set_default_value(1) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_label_universal(input) + + mm_graph_node.add_slot_float("get_angle", "set_angle", "Angle", 0.1) + mm_graph_node.add_slot_float("get_amount", "set_amount", "Amount", 0.1) + mm_graph_node.add_slot_float("get_width", "set_width", "Width", 1) + + +func _render(material) -> void: + size = max(material.image_size.x, material.image_size.y) + + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var f : float = 0 + + f = emboss(uv, size, angle, amount, width) + + return Color(f, f, f, 1) + +func get_angle() -> float: + return angle + +func set_angle(val : float) -> void: + angle = val + + set_dirty(true) + +func get_amount() -> float: + return amount + +func set_amount(val : float) -> void: + amount = val + + set_dirty(true) + +func get_width() -> float: + return width + +func set_width(val : float) -> void: + width = val + + set_dirty(true) + +#float $(name)_fct(vec2 uv) { +# float pixels = max(1.0, $width); +# float e = 1.0/$size; +# float rv = 0.0; +# +# for (float dx = -pixels; dx <= pixels; dx += 1.0) { +# for (float dy = -pixels; dy <= pixels; dy += 1.0) { +# if (abs(dx) > 0.5 || abs(dy) > 0.5) { +# rv += $in(uv+e*vec2(dx, dy))*cos(atan(dy, dx)-$angle*3.14159265359/180.0)/length(vec2(dx, dy)); +# } +# } +# } +# +# return $amount*rv/pixels+0.5; +#} + +func emboss(uv : Vector2, psize : float, pangle : float, pamount : float, pwidth : float) -> float: + var pixels : float = max(1.0, pwidth) + var e : float = 1.0 / psize + var rv : float = 0.0 + + var dx : float = -pixels + var dy : float = -pixels + + while dx <= pixels: #for (float dx = -pixels; dx <= pixels; dx += 1.0) { + while dy <= pixels: #for (float dy = -pixels; dy <= pixels; dy += 1.0) { + if (abs(dx) > 0.5 || abs(dy) > 0.5): + rv += input.get_value(uv + e * Vector2(dx, dy)) * cos(atan2(dy, dx) - pangle * 3.14159265359 / 180.0) / Vector2(dx, dy).length() + + dx += 1 + dy += 1 + + return pamount * rv / pixels + 0.5 + diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_channel.gd b/game/addons/mat_maker_gd/nodes/filter/fill_channel.gd new file mode 100644 index 0000000..53a5169 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/fill_channel.gd @@ -0,0 +1,72 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(Resource) var value : Resource +export(int, "R,G,B,A") var channel : int = 3 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color()) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + if !value: + value = MMNodeUniversalProperty.new() + value.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + value.set_default_value(1) + + value.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + value.value_step = 0.01 + value.value_range = Vector2(0, 1) + + register_input_property(input) + register_output_property(image) + register_input_property(value) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_float_universal(value) + mm_graph_node.add_slot_enum("get_channel", "set_channel", "Channel", [ "R", "G", "B", "A" ]) + + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var col : Color = input.get_value(uv) + + if channel == 0: + col.r = value.get_value(uv) + if channel == 1: + col.g = value.get_value(uv) + if channel == 2: + col.b = value.get_value(uv) + if channel == 3: + col.a = value.get_value(uv) + + return col + +func get_channel() -> int: + return channel + +func set_channel(val : int) -> void: + channel = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_color.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_color.gd new file mode 100644 index 0000000..3f660f2 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_color.gd @@ -0,0 +1,70 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(Resource) var color_map : Resource +export(Color) var edge_color : Color = Color(1, 1, 1, 1) + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !color_map: + color_map = MMNodeUniversalProperty.new() + color_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + color_map.set_default_value(Color(1, 1, 1, 1)) + + color_map.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + color_map.slot_name = ">>> Color Map " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_input_property(color_map) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(color_map) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_color("get_edge_color", "set_edge_color") + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #vec4 $(name_uv)_bb = $in($uv); + var c : Color = input.get_value(uv) + + #mix($edgecolor, $map(fract($(name_uv)_bb.xy+0.5*$(name_uv)_bb.zw)), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0)))) + + var rc : Color = color_map.get_value(Commons.fractv2(Vector2(c.r, c.g) + 0.5 * Vector2(c.b, c.a))) + var s : float = Commons.step(0.0000001, Vector2(c.b, c.a).dot(Vector2(1, 1))) + + return lerp(edge_color, rc, s) + +#edge_color +func get_edge_color() -> Color: + return edge_color + +func set_edge_color(val : Color) -> void: + edge_color = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_position.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_position.gd new file mode 100644 index 0000000..69eded4 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_position.gd @@ -0,0 +1,68 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(int, "X,Y,Radial") var axis : int = 2 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_axis", "set_axis", "Axis", [ "X", "Y", "Radial" ]) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var c : Color = input.get_value(uv) + #vec2 $(name_uv)_c = fract($in($uv).xy+0.5*$in($uv).zw); + var cnv : Vector2 = Commons.fractv2(Vector2(c.r, c.g) + 0.5 * Vector2(c.b, c.a)) + + #X, $(name_uv)_c.x + #Y, $(name_uv)_c.y + #Radial, length($(name_uv)_c-vec2(0.5)) + + if axis == 0: + return Color(cnv.x, cnv.x, cnv.x, 1) + elif axis == 1: + return Color(cnv.y, cnv.y, cnv.y, 1) + elif axis == 2: + var f : float = (cnv - Vector2(0.5, 0.5)).length() + + return Color(f, f, f, 1) + + return Color(0, 0, 0, 1) + +#axis +func get_axis() -> int: + return axis + +func set_axis(val : int) -> void: + axis = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_random_color.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_random_color.gd new file mode 100644 index 0000000..3360a29 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_random_color.gd @@ -0,0 +1,61 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(Color) var edge_color : Color = Color(1, 1, 1, 1) + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_color("get_edge_color", "set_edge_color") + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #vec4 $(name_uv)_bb = $in($uv); + var c : Color = input.get_value(uv) + + #mix($edgecolor.rgb, rand3(vec2(float($seed), rand(vec2(rand($(name_uv)_bb.xy), rand($(name_uv)_bb.zw))))), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0)))) + + var r1 : float = Commons.rand(Vector2(c.r, c.g)) + var r2 : float = Commons.rand(Vector2(c.b, c.a)) + var s : float = Commons.step(0.0000001, Vector2(c.b, c.a).dot(Vector2(1, 1))) + + var f : Vector3 = lerp(Vector3(edge_color.r, edge_color.g, edge_color.b), Commons.rand3(Vector2(1.0 / float(pseed), Commons.rand(Vector2(r1, r2)))), s) + return Color(f.x, f.y, f.z, 1) + +#edge_color +func get_edge_color() -> Color: + return edge_color + +func set_edge_color(val : Color) -> void: + edge_color = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_random_grey.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_random_grey.gd new file mode 100644 index 0000000..53e7c4d --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_random_grey.gd @@ -0,0 +1,60 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(float) var edge_color : float = 1 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_float("get_edge_color", "set_edge_color", "Edge color", 0.01) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #vec4 $(name_uv)_bb = $in($uv); + var c : Color = input.get_value(uv) + + #mix($edgecolor, rand(vec2(float($seed), rand(vec2(rand($(name_uv)_bb.xy), rand($(name_uv)_bb.zw))))), step(0.0000001, dot($(name_uv)_bb.zw, vec2(1.0)))) + var r1 : float = Commons.rand(Vector2(c.r, c.g)) + var r2 : float = Commons.rand(Vector2(c.b, c.a)) + var s : float = Commons.step(0.0000001, Vector2(c.b, c.a).dot(Vector2(1, 1))) + + var f : float = lerp(edge_color, Commons.rand(Vector2(1.0 / float(pseed), Commons.rand(Vector2(r1, r2)))), s) + return Color(f, f, f, 1) + +#edge_color +func get_edge_color() -> float: + return edge_color + +func set_edge_color(val : float) -> void: + edge_color = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_size.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_size.gd new file mode 100644 index 0000000..edfe95d --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_size.gd @@ -0,0 +1,70 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(int, "Area,Width,Height,Max(W,H)") var formula : int = 0 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_formula", "set_formula", "Formula", [ "Area", "Width", "Height", "Max(W,H)" ]) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #vec4 $(name_uv)_bb = $in($uv); + var c : Color = input.get_value(uv) + + var f : float = 0 + + #"Area" sqrt($(name_uv)_bb.z*$(name_uv)_bb.w) + #"Width" $(name_uv)_bb.z + #"Height" $(name_uv)_bb.w + #"max(W, H)" max($(name_uv)_bb.z, $(name_uv)_bb.w) + + if formula == 0: + f = sqrt(c.b * c.a) + elif formula == 1: + f = c.b + elif formula == 2: + f = c.a + elif formula == 3: + f = max(c.b, c.a) + + return Color(f, f, f, 1) + +#formula +func get_formula() -> int: + return formula + +func set_formula(val : int) -> void: + formula = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/fill_to_uv.gd b/game/addons/mat_maker_gd/nodes/filter/fill_to_uv.gd new file mode 100644 index 0000000..63db519 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/fill_to_uv.gd @@ -0,0 +1,62 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(int, "Stretch,Square") var mode : int = 0 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_mode", "set_mode", "Mode", [ "Stretch", "Square" ]) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #vec4 $(name_uv)_bb = $in($uv); + var c : Color = input.get_value(uv) + + #fill_to_uv_$mode($uv, $(name_uv)_bb, float($seed)) + var r : Vector3 = Vector3() + + if mode == 0: + r = Fills.fill_to_uv_stretch(uv, c, float(pseed)) + elif mode == 1: + r = Fills.fill_to_uv_square(uv, c, float(pseed)) + + return Color(r.x, r.y, r.z, 1) + +#mode +func get_mode() -> int: + return mode + +func set_mode(val : int) -> void: + mode = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/greyscale.gd b/game/addons/mat_maker_gd/nodes/filter/greyscale.gd new file mode 100644 index 0000000..cc95b1e --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/greyscale.gd @@ -0,0 +1,66 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(int, "Lightness,Average,Luminosity,Min,Max") var type : int = 2 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_type", "set_type", "Type", [ "Lightness", "Average", "Luminosity", "Min", "Max" ]) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var c : Color = input.get_value(uv) + + var f : float = 0 + + if type == 0: + f = Filter.grayscale_lightness(Vector3(c.r, c.g, c.b)) + elif type == 1: + f = Filter.grayscale_average(Vector3(c.r, c.g, c.b)) + elif type == 2: + f = Filter.grayscale_luminosity(Vector3(c.r, c.g, c.b)) + elif type == 3: + f = Filter.grayscale_min(Vector3(c.r, c.g, c.b)) + elif type == 4: + f = Filter.grayscale_max(Vector3(c.r, c.g, c.b)) + + return Color(f, f, f, c.a) + +#type +func get_type() -> int: + return type + +func set_type(val : int) -> void: + type = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/invert.gd b/game/addons/mat_maker_gd/nodes/filter/invert.gd new file mode 100644 index 0000000..994c7b7 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/invert.gd @@ -0,0 +1,42 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var c : Color = input.get_value(uv) + + return Filter.invert(c) diff --git a/game/addons/mat_maker_gd/nodes/filter/make_tileable.gd b/game/addons/mat_maker_gd/nodes/filter/make_tileable.gd new file mode 100644 index 0000000..1abeff8 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/make_tileable.gd @@ -0,0 +1,78 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(float) var width : float = 0.1 + +var size : int = 0 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color()) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_label_universal(input) + + mm_graph_node.add_slot_float("get_width", "set_width", "Width", 0.01) + + +func _render(material) -> void: + size = max(material.image_size.x, material.image_size.y) + + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #make_tileable_$(name)($uv, 0.5*$w) + return make_tileable(uv, 0.5 * width) + +func get_width() -> float: + return width + +func set_width(val : float) -> void: + width = val + + set_dirty(true) + + +#---------------------- +#make_tileable.mmg + +#vec4 make_tileable_$(name)(vec2 uv, float w) { +# vec4 a = $in(uv); +# vec4 b = $in(fract(uv+vec2(0.5))); +# float coef_ab = sin(1.57079632679*clamp((length(uv-vec2(0.5))-0.5+w)/w, 0.0, 1.0)); +# vec4 c = $in(fract(uv+vec2(0.25))); +# float coef_abc = sin(1.57079632679*clamp((min(min(length(uv-vec2(0.0, 0.5)), length(uv-vec2(0.5, 0.0))), min(length(uv-vec2(1.0, 0.5)), length(uv-vec2(0.5, 1.0))))-w)/w, 0.0, 1.0)); +# return mix(c, mix(a, b, coef_ab), coef_abc); +#} + +func make_tileable(uv : Vector2, w : float) -> Color: + var a: Color = input.get_value(uv); + var b : Color = input.get_value(Commons.fractv2(uv + Vector2(0.5, 0.5))); + var coef_ab : float = sin(1.57079632679 * clamp(((uv - Vector2(0.5, 0.5)).length() - 0.5 + w) / w, 0.0, 1.0)); + var c: Color = input.get_value(Commons.fractv2(uv + Vector2(0.25, 0.25))); + var coef_abc : float = sin(1.57079632679 * clamp((min(min((uv - Vector2(0.0, 0.5)).length(), (uv - Vector2(0.5, 0.0)).length()), min((uv- Vector2(1.0, 0.5)).length(), (uv - Vector2(0.5, 1.0)).length())) - w) / w, 0.0, 1.0)); + + return lerp(c, lerp(a, b, coef_ab), coef_abc) + diff --git a/game/addons/mat_maker_gd/nodes/filter/math.gd b/game/addons/mat_maker_gd/nodes/filter/math.gd new file mode 100644 index 0000000..56defca --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/math.gd @@ -0,0 +1,151 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Fills = preload("res://addons/mat_maker_gd/nodes/common/fills.gd") + +export(Resource) var image : Resource +export(Resource) var a : Resource +export(Resource) var b : Resource +export(Resource) var output : Resource + +export(int, "A+B,A-B,A*B,A/B,log(A),log2(A),pow(A; B),abs(A),round(A),floor(A),ceil(A),trunc(A),fract(A),min(A; B),max(A; B),A void: + mm_graph_node.add_slot_label_universal(a) + mm_graph_node.add_slot_label_universal(b) + mm_graph_node.add_slot_label_universal(output) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_operation", "set_operation", "Operation", [ "A+B", "A-B", "A*B", "A/B", "log(A)", "log2(A)", "pow(A, B)", "abs(A)", "round(A)", "floor(A)", "ceil(A)", "trunc(A)", "fract(A)", "min(A, B)", "max(A, B)", "A float: + var af : float = a.get_value(uv) + var bf : float = b.get_value(uv) + + var f : float = 0 + + if operation == 0:#"A+B", + f = af + bf + elif operation == 1:#"A-B", + f = af - bf + elif operation == 2:#"A*B", + f = af * bf + elif operation == 3:#"A/B", + if bf == 0: + bf = 0.000001 + f = af / bf + elif operation == 4:#"log(A)", + #todo needs to be implemented + f = log(af) + elif operation == 5:#"log2(A)", + #todo needs to be implemented + f = log(af) + elif operation == 6:#"pow(A, B)", + f = pow(af, bf) + elif operation == 7:#"abs(A)", + f = abs(af) + elif operation == 8:#"round(A)", + f = round(af) + elif operation == 9:#"floor(A)", + f = floor(af) + elif operation == 10:#"ceil(A)", + f = ceil(af) + elif operation == 11:#"trunc(A)", + f = int(af) + elif operation == 12:#"fract(A)", + f = Commons.fractf(af) + elif operation == 13:#"min(A, B)", + f = min(af, bf) + elif operation == 14:#"max(A, B)", + f = max(af, bf) + elif operation == 15:#"A void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var f : float = get_property_value(uv) + + return Color(f, f, f, 1) + +#operation +func get_operation() -> int: + return operation + +func set_operation(val : int) -> void: + operation = val + + set_dirty(true) + output.emit_changed() + +#clamp_result +func get_clamp_result() -> bool: + return clamp_result + +func set_clamp_result(val : bool) -> void: + clamp_result = val + + set_dirty(true) + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/filter/quantize.gd b/game/addons/mat_maker_gd/nodes/filter/quantize.gd new file mode 100644 index 0000000..a86b4c5 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/quantize.gd @@ -0,0 +1,56 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(int) var steps : int = 4 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_int("get_steps", "set_steps", "Steps") + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var c : Color = input.get_value(uv) + + #vec4(floor($in($uv).rgb*$steps)/$steps, $in($uv).a) + var v : Vector3 = Commons.floorv3(Vector3(c.r, c.g, c.b) * steps) / float(steps) + + return Color(v.x, v.y, v.z, c.a) + +#steps +func get_steps() -> int: + return steps + +func set_steps(val : int) -> void: + steps = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/swap_channels.gd b/game/addons/mat_maker_gd/nodes/filter/swap_channels.gd new file mode 100644 index 0000000..eca84d1 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/swap_channels.gd @@ -0,0 +1,111 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Filter = preload("res://addons/mat_maker_gd/nodes/common/filter.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(int, "0,1,R,-R,G,-G,B,-B,A,-A") var op_r : int = 2 +export(int, "0,1,R,-R,G,-G,B,-B,A,-A") var op_g : int = 4 +export(int, "0,1,R,-R,G,-G,B,-B,A,-A") var op_b : int = 6 +export(int, "0,1,R,-R,G,-G,B,-B,A,-A") var op_a : int = 8 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + + mm_graph_node.add_slot_enum("get_op_r", "set_op_r", "R", [ "0", "1", "R", "-R", "G", "-G", "B", "-B", "A","-A" ]) + mm_graph_node.add_slot_enum("get_op_g", "set_op_g", "G", [ "0", "1", "R", "-R", "G", "-G", "B", "-B", "A","-A" ]) + mm_graph_node.add_slot_enum("get_op_b", "set_op_b", "B", [ "0", "1", "R", "-R", "G", "-G", "B", "-B", "A","-A" ]) + mm_graph_node.add_slot_enum("get_op_a", "set_op_a", "A", [ "0", "1", "R", "-R", "G", "-G", "B", "-B", "A","-A" ]) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func apply(op : int, val : Color) -> float: + if op == 0: + return 0.0 + elif op == 1: + return 1.0 + elif op == 2: + return val.r + elif op == 3: + return 1.0 - val.r + elif op == 4: + return val.g + elif op == 5: + return 1.0 - val.g + elif op == 6: + return val.b + elif op == 7: + return 1.0 - val.b + elif op == 8: + return val.a + elif op == 9: + return 1.0 - val.a + + return 0.0 + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var c : Color = input.get_value(uv) + + return Color(apply(op_r, c), apply(op_g, c), apply(op_b, c), apply(op_a, c)) + +#op_r +func get_op_r() -> int: + return op_r + +func set_op_r(val : int) -> void: + op_r = val + + set_dirty(true) + +#op_g +func get_op_g() -> int: + return op_g + +func set_op_g(val : int) -> void: + op_g = val + + set_dirty(true) + +#op_b +func get_op_b() -> int: + return op_b + +func set_op_b(val : int) -> void: + op_b = val + + set_dirty(true) + +#op_a +func get_op_a() -> int: + return op_a + +func set_op_a(val : int) -> void: + op_a = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/filter/tonality.gd b/game/addons/mat_maker_gd/nodes/filter/tonality.gd new file mode 100644 index 0000000..66f1aba --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/filter/tonality.gd @@ -0,0 +1,50 @@ +tool +extends "res://addons/mat_maker_gd/nodes/bases/curve_base.gd" + +var Curves = preload("res://addons/mat_maker_gd/nodes/common/curves.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource + +func _init(): + init_points_01() + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + input.set_default_value(0) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_curve() + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var f : float = input.get_value(uv) + + var cf : float = Curves.curve(f, points) + + return Color(cf, cf, cf, 1) + +func _curve_changed() -> void: + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/gradient/circular_gradient.gd b/game/addons/mat_maker_gd/nodes/gradient/circular_gradient.gd new file mode 100644 index 0000000..1fc45b7 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/gradient/circular_gradient.gd @@ -0,0 +1,60 @@ +tool +extends "res://addons/mat_maker_gd/nodes/bases/gradient_base.gd" + +var Gradients = preload("res://addons/mat_maker_gd/nodes/common/gradients.gd") + +export(Resource) var image : Resource +export(float) var repeat : float = 1 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_float("get_repeat", "set_repeat", "repeat") + mm_graph_node.add_slot_gradient() + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + if interpolation_type == 0: + return Gradients.circular_gradient_type_1(uv, repeat, points) + elif interpolation_type == 1: + return Gradients.circular_gradient_type_2(uv, repeat, points) + elif interpolation_type == 2: + return Gradients.circular_gradient_type_3(uv, repeat, points) + elif interpolation_type == 3: + return Gradients.circular_gradient_type_4(uv, repeat, points) + + return Color(1, 1, 1, 1) + + +func get_gradient_color(x : float) -> Color: + if interpolation_type == 0: + return Gradients.gradient_type_1(x, points) + elif interpolation_type == 1: + return Gradients.gradient_type_2(x, points) + elif interpolation_type == 2: + return Gradients.gradient_type_3(x, points) + elif interpolation_type == 3: + return Gradients.gradient_type_4(x, points) + + return Color(1, 1, 1, 1) + +func get_repeat() -> float: + return repeat + +func set_repeat(val : float) -> void: + repeat = val + + set_dirty(true) + diff --git a/game/addons/mat_maker_gd/nodes/gradient/gradient.gd b/game/addons/mat_maker_gd/nodes/gradient/gradient.gd new file mode 100644 index 0000000..6db5aff --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/gradient/gradient.gd @@ -0,0 +1,68 @@ +tool +extends "res://addons/mat_maker_gd/nodes/bases/gradient_base.gd" + +var Gradients = preload("res://addons/mat_maker_gd/nodes/common/gradients.gd") + +export(Resource) var image : Resource +export(float) var repeat : float = 1 +export(float) var rotate : float = 0 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_float("get_repeat", "set_repeat", "repeat") + mm_graph_node.add_slot_float("get_rotate", "set_rotate", "rotate") + mm_graph_node.add_slot_gradient() + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + if interpolation_type == 0: + return Gradients.normal_gradient_type_1(uv, repeat, rotate, points) + elif interpolation_type == 1: + return Gradients.normal_gradient_type_2(uv, repeat, rotate, points) + elif interpolation_type == 2: + return Gradients.normal_gradient_type_3(uv, repeat, rotate, points) + elif interpolation_type == 3: + return Gradients.normal_gradient_type_4(uv, repeat, rotate, points) + + return Color(1, 1, 1, 1) + +func get_gradient_color(x : float) -> Color: + if interpolation_type == 0: + return Gradients.gradient_type_1(x, points) + elif interpolation_type == 1: + return Gradients.gradient_type_2(x, points) + elif interpolation_type == 2: + return Gradients.gradient_type_3(x, points) + elif interpolation_type == 3: + return Gradients.gradient_type_4(x, points) + + return Color(1, 1, 1, 1) + +func get_repeat() -> float: + return repeat + +func set_repeat(val : float) -> void: + repeat = val + + set_dirty(true) + +func get_rotate() -> float: + return rotate + +func set_rotate(val : float) -> void: + rotate = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/gradient/radial_gradient.gd b/game/addons/mat_maker_gd/nodes/gradient/radial_gradient.gd new file mode 100644 index 0000000..76e84c5 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/gradient/radial_gradient.gd @@ -0,0 +1,60 @@ +tool +extends "res://addons/mat_maker_gd/nodes/bases/gradient_base.gd" + +var Gradients = preload("res://addons/mat_maker_gd/nodes/common/gradients.gd") + +export(Resource) var image : Resource +export(float) var repeat : float = 1 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_float("get_repeat", "set_repeat", "repeat") + mm_graph_node.add_slot_gradient() + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + if interpolation_type == 0: + return Gradients.radial_gradient_type_1(uv, repeat, points) + elif interpolation_type == 1: + return Gradients.radial_gradient_type_2(uv, repeat, points) + elif interpolation_type == 2: + return Gradients.radial_gradient_type_3(uv, repeat, points) + elif interpolation_type == 3: + return Gradients.radial_gradient_type_4(uv, repeat, points) + + return Color(1, 1, 1, 1) + + +func get_gradient_color(x : float) -> Color: + if interpolation_type == 0: + return Gradients.gradient_type_1(x, points) + elif interpolation_type == 1: + return Gradients.gradient_type_2(x, points) + elif interpolation_type == 2: + return Gradients.gradient_type_3(x, points) + elif interpolation_type == 3: + return Gradients.gradient_type_4(x, points) + + return Color(1, 1, 1, 1) + +func get_repeat() -> float: + return repeat + +func set_repeat(val : float) -> void: + repeat = val + + set_dirty(true) + diff --git a/game/addons/mat_maker_gd/nodes/mm_material.gd b/game/addons/mat_maker_gd/nodes/mm_material.gd new file mode 100644 index 0000000..c13055c --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/mm_material.gd @@ -0,0 +1,119 @@ +tool +class_name MMMateial +extends Resource + +#threads are implemented using my thread pool engine module. +#if you want to use this without that module in your engine set this to false, +#and comment out the lines that give errors +const USE_THREADS = true + +export(Vector2) var image_size : Vector2 = Vector2(128, 128) +export(Array) var nodes : Array + +var initialized : bool = false +var rendering : bool = false +var queued_render : bool = false +var job : ThreadPoolExecuteJob = ThreadPoolExecuteJob.new() + +func initialize(): + if !initialized: + initialized = true + + job.setup(self, "_thread_func") + + for n in nodes: + n.connect("changed", self, "on_node_changed") + +func add_node(node : MMNode) -> void: + nodes.append(node) + + node.connect("changed", self, "on_node_changed") + + emit_changed() + +func remove_node(node : MMNode) -> void: + if !node: + return + + for op in node.output_properties: + for n in nodes: + if n: + for ip in n.input_properties: + if ip.input_property == op: + ip.set_input_property(null) + + nodes.erase(node) + + node.disconnect("changed", self, "on_node_changed") + + emit_changed() + +func render() -> void: + if USE_THREADS: + render_threaded() + else: + render_non_threaded() + +func render_non_threaded() -> void: + if !initialized: + initialize() + + var did_render : bool = true + + while did_render: + did_render = false + + for n in nodes: + if n && n.render(self): + did_render = true + +func render_threaded() -> void: + job.cancelled = false + + if rendering: + queued_render = true + return + + if !initialized: + initialize() + + if !ThreadPool.has_job(job): + ThreadPool.add_job(job) + +func _thread_func() -> void: + if job.cancelled: + rendering = false + return + + rendering = true + job.cancelled = false + + var did_render : bool = true + + while did_render: + did_render = false + + for n in nodes: + if n && n.render(self): + did_render = true + + if job.cancelled: + rendering = false + return + + rendering = false + + if queued_render: + queued_render = false + _thread_func() + +func cancel_render_and_wait() -> void: + if rendering: + ThreadPool.cancel_task_wait(job) + + job.cancelled = false + + pass + +func on_node_changed() -> void: + call_deferred("render") diff --git a/game/addons/mat_maker_gd/nodes/mm_node.gd b/game/addons/mat_maker_gd/nodes/mm_node.gd new file mode 100644 index 0000000..a296825 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/mm_node.gd @@ -0,0 +1,121 @@ +tool +class_name MMNode +extends Resource + +export(Vector2) var graph_position : Vector2 = Vector2() + +var input_properties : Array +var output_properties : Array + +var properties_initialized : bool = false + +var dirty : bool = true + +#MMMateial +func render(material) -> bool: + if !dirty: + return false + + for p in input_properties: + if p.input_property && p.input_property.owner.dirty: + return false + + _render(material) + + dirty = false + + return true + +#MMMateial +func _render(material) -> void: + pass + +func render_image(material) -> Image: + var image : Image = Image.new() + image.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + + image.lock() + + var w : float = image.get_width() + var h : float = image.get_width() + + var pseed : float = randf() + randi() + + for x in range(image.get_width()): + for y in range(image.get_height()): + var v : Vector2 = Vector2(x / w, y / h) + + var col : Color = get_value_for(v, pseed) + + image.set_pixel(x, y, col) + + image.unlock() + + return image + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return Color() + +func init_properties() -> void: + if !properties_initialized: + properties_initialized = true + + _init_properties() + +func _init_properties() -> void: + pass + +func register_methods(mm_graph_node) -> void: + init_properties() + _register_methods(mm_graph_node) + +func _register_methods(mm_graph_node) -> void: + pass + +func get_graph_position() -> Vector2: + return graph_position + +func set_graph_position(pos : Vector2) -> void: + graph_position = pos + + emit_changed() + +func register_input_property(prop : MMNodeUniversalProperty) -> void: + prop.owner = self + + if !prop.is_connected("changed", self, "on_input_property_changed"): + prop.connect("changed", self, "on_input_property_changed") + + input_properties.append(prop) + +func unregister_input_property(prop : MMNodeUniversalProperty) -> void: + if prop.owner == self: + prop.owner = null + + if prop.is_connected("changed", self, "on_input_property_changed"): + prop.disconnect("changed", self, "on_input_property_changed") + + input_properties.erase(prop) + +func register_output_property(prop : MMNodeUniversalProperty) -> void: + prop.owner = self + + output_properties.append(prop) + +func unregister_output_property(prop : MMNodeUniversalProperty) -> void: + if prop.owner == self: + prop.owner = null + + output_properties.erase(prop) + +func set_dirty(val : bool) -> void: + var changed : bool = val != dirty + + dirty = val + + if changed: + emit_changed() + +func on_input_property_changed() -> void: + set_dirty(true) + emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/mm_node_universal_property.gd b/game/addons/mat_maker_gd/nodes/mm_node_universal_property.gd new file mode 100644 index 0000000..d79dc27 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/mm_node_universal_property.gd @@ -0,0 +1,316 @@ +tool +class_name MMNodeUniversalProperty +extends Resource + +enum SlotTypes { + SLOT_TYPE_NONE = -1, + SLOT_TYPE_IMAGE = 0, + SLOT_TYPE_INT = 1, + SLOT_TYPE_FLOAT = 2, + SLOT_TYPE_VECTOR2 = 3, + SLOT_TYPE_VECTOR3 = 4, + SLOT_TYPE_COLOR = 5, + SLOT_TYPE_UNIVERSAL = 6, +} + +enum MMNodeUniversalPropertyDefaultType { + DEFAULT_TYPE_INT = 0, + DEFAULT_TYPE_FLOAT = 1, + DEFAULT_TYPE_VECTOR2 = 2, + DEFAULT_TYPE_VECTOR3 = 3, + DEFAULT_TYPE_COLOR = 4, + DEFAULT_TYPE_IMAGE = 5, +} + +export(int, "Int,Float,Vector2,Vector3,Color,Image") var default_type : int + +export(int) var default_int : int +export(float) var default_float : float +export(Vector2) var default_vector2 : Vector2 +export(Vector3) var default_vector3 : Vector3 +export(Color) var default_color : Color +export(Image) var default_image : Image + +var get_value_from_owner : bool = false +var force_override : bool = false +#This is not exported on purpose! +var override_image : Image + +#Should be a MMNodeUniversalProperty, but can't set it up like that +export(Resource) var input_property : Resource + +var input_slot_type : int = SlotTypes.SLOT_TYPE_NONE +var output_slot_type : int = SlotTypes.SLOT_TYPE_NONE +var slot_name : String +var value_step : float = 0.1 +var value_range : Vector2 = Vector2(-1000, 1000) + +#MMNode +var owner + +func _init(): + if input_property: + input_property.connect("changed", self, "on_input_property_changed") + +func get_value(uv : Vector2, skip_owner_val : bool = false): + if get_value_from_owner && !skip_owner_val: + return get_owner_value(uv) + + if !input_property: + return get_default_value(uv) + + if default_type == input_property.default_type: + return input_property.get_value(uv) + + if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT: + return to_int(input_property.get_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT: + return to_float(input_property.get_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2: + return to_vector2(input_property.get_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3: + return to_vector3(input_property.get_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR: + return to_color(input_property.get_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE: + return to_color(input_property.get_value(uv)) + + return input_property.get_value(uv) + +func get_owner_value(uv : Vector2): + if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT: + return to_int(owner.get_property_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT: + return to_float(owner.get_property_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2: + return to_vector2(owner.get_property_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3: + return to_vector3(owner.get_property_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR: + return to_color(owner.get_property_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE: + return to_color(owner.get_property_value(uv)) + +func get_value_or_zero(uv : Vector2, skip_owner_val : bool = false): + if get_value_from_owner && !skip_owner_val: + return get_owner_value(uv) + + if !input_property: + return get_zero_value() + + if default_type == input_property.default_type: + return input_property.get_value(uv) + + if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT: + return to_int(input_property.get_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT: + return to_float(input_property.get_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2: + return to_vector2(input_property.get_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3: + return to_vector3(input_property.get_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR: + return to_color(input_property.get_value(uv)) + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE: + return to_color(input_property.get_value(uv)) + + return input_property.get_value(uv) + +func get_value_sdf3d(uv3 : Vector3, skip_owner_val : bool = false) -> Vector2: + if get_value_from_owner && !skip_owner_val: + return owner.get_property_value_sdf3d(uv3) + + if !input_property: + return default_vector2 + + return input_property.get_value_sdf3d(uv3) + +func to_int(val) -> int: + if val is int: + return val + + if val is float: + return int(val) + + if val is Vector2: + return int(val.x) + + if val is Vector3: + return int(val.x) + + if val is Color: + return int(val.r) + + return 0 + +func to_float(val) -> float: + if val is float: + return val + + if val is int: + return float(val) + + if val is Vector2: + return float(val.x) + + if val is Vector3: + return float(val.x) + + if val is Color: + return float(val.r) + + return 0.0 + +func to_vector2(val) -> Vector2: + if val is Vector2: + return val + + if val is int: + return Vector2(val, val) + + if val is float: + return Vector2(val, val) + + if val is Vector3: + return Vector2(val.x, val.y) + + if val is Color: + return Vector2(val.r, val.g) + + return Vector2() + +func to_vector3(val) -> Vector3: + if val is Vector3: + return val + + if val is int: + return Vector3(val, val, val) + + if val is float: + return Vector3(val, val, val) + + if val is Vector2: + return Vector3(val.x, val.y, 0) + + if val is Color: + return Vector3(val.r, val.g, val.b) + + return Vector3() + +func to_color(val) -> Color: + if val is Color: + return val + + if val is int: + return Color(val, val, val, 1) + + if val is float: + return Color(val, val, val, 1) + + if val is Vector2: + return Color(val.x, val.y, 0, 1) + + if val is Vector3: + return Color(val.x, val.y, val.z, 1) + + return Color() + +func set_value(val): + if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE: + override_image = val + emit_changed() + return + + set_default_value(val) + +func get_zero_value(): + if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT: + return 0 + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT: + return 0.0 + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2: + return Vector2() + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3: + return Vector3() + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR: + return Color() + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE: + return Color() + + return null + +func get_default_value(uv : Vector2 = Vector2()): + if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT: + return default_int + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT: + return default_float + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2: + return default_vector2 + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3: + return default_vector3 + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR: + return default_color + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE: + var image : Image = default_image + + if override_image: + image = override_image + + if !image: + return default_color + + image.lock() + var x : int = uv.x * image.get_width() + var y : int = uv.y * image.get_height() + + x = clamp(x, 0, image.get_width() - 1) + y = clamp(y, 0, image.get_width() - 1) + + var c : Color = image.get_pixel(x, y) + image.unlock() + + return c + + return null + +func set_default_value(val): + if default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_INT: + default_int = val + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT: + default_float = val + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2: + default_vector2 = val + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR3: + default_vector3 = val + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR: + default_color = val + elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE: + default_image = val + + emit_changed() + +func get_active_image() -> Image: + if !force_override && input_property: + return input_property.get_active_image() + + if override_image: + return override_image + + return default_image + +func set_input_property(val : MMNodeUniversalProperty) -> void: + if input_property == val: + return + + if input_property: + input_property.disconnect("changed", self, "on_input_property_changed") + + input_property = val + + if input_property: + input_property.connect("changed", self, "on_input_property_changed") + + emit_changed() + +func on_input_property_changed() -> void: + emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/noise/anisotropic_noise.gd b/game/addons/mat_maker_gd/nodes/noise/anisotropic_noise.gd new file mode 100644 index 0000000..2b27849 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/noise/anisotropic_noise.gd @@ -0,0 +1,60 @@ +tool +extends MMNode + +var Noises = preload("res://addons/mat_maker_gd/nodes/common/noises.gd") + +export(Resource) var image : Resource + +export(Vector2) var scale : Vector2 = Vector2(4, 256) +export(float) var smoothness : float = 1 +export(float) var interpolation : float = 1 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale", 1)#, Vector2(1, 10)) + mm_graph_node.add_slot_float("get_smoothness", "set_smoothness", "Smoothness", 0.01)#, Vector2(0, 1)) + mm_graph_node.add_slot_float("get_interpolation", "set_interpolation", "Interpolation", 0.01)#, Vector2(0, 1)) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var ps : float = 1.0 / float(pseed) + + #anisotropic($(uv), vec2($(scale_x), $(scale_y)), $(seed), $(smoothness), $(interpolation)) + return Noises.anisotropicc(uv, scale, ps, smoothness, interpolation) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_scale() -> Vector2: + return scale + +func set_scale(val : Vector2) -> void: + scale = val + + set_dirty(true) + +func get_smoothness() -> float: + return smoothness + +func set_smoothness(val : float) -> void: + smoothness = val + + set_dirty(true) + +func get_interpolation() -> float: + return interpolation + +func set_interpolation(val : float) -> void: + interpolation = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/noise/color_noise.gd b/game/addons/mat_maker_gd/nodes/noise/color_noise.gd new file mode 100644 index 0000000..d5dbdee --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/noise/color_noise.gd @@ -0,0 +1,52 @@ +tool +extends MMNode + +var Noises = preload("res://addons/mat_maker_gd/nodes/common/noises.gd") + +export(Resource) var image : Resource + +export(int) var size : int = 8 + +#---------------------- +#color_noise.mmg + +#Outputs: + +#Output - (rgb) - Shows the noise pattern +#color_dots($(uv), 1.0/$(size), $(seed)) + +#Inputs: +#size, float, default: 8, min: 2, max: 12, step: 1 + + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_int("get_size", "set_size", "Size")#, Vector2(1, 10)) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var ps : float = 1.0 / float(pseed) + + #color_dots($(uv), 1.0/$(size), $(seed)) + return Noises.noise_color(uv, float(size), ps) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_size() -> int: + return size + +func set_size(val : int) -> void: + size = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/noise/color_value.gd b/game/addons/mat_maker_gd/nodes/noise/color_value.gd new file mode 100644 index 0000000..97fff54 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/noise/color_value.gd @@ -0,0 +1,60 @@ +tool +extends MMNode + +var NoisePerlin = preload("res://addons/mat_maker_gd/nodes/common/noise_perlin.gd") + +export(Resource) var image : Resource + +export(Vector2) var scale : Vector2 = Vector2(4, 4) +export(int) var iterations : int = 3 +export(float) var persistence : float = 0.5 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale")#, Vector2(1, 10)) + mm_graph_node.add_slot_int("get_iterations", "set_iterations", "Iterations")#, Vector2(0, 1)) + mm_graph_node.add_slot_float("get_persistence", "set_persistence", "Persistence", 0.01)#, Vector2(0, 1)) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var ps : float = 1.0 / float(pseed) + + #perlin_color($(uv), vec2($(scale_x), $(scale_y)), int($(iterations)), $(persistence), $(seed)) + return NoisePerlin.perlin_colorc(uv, scale, iterations, persistence, ps) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_scale() -> Vector2: + return scale + +func set_scale(val : Vector2) -> void: + scale = val + + set_dirty(true) + +func get_iterations() -> int: + return iterations + +func set_iterations(val : int) -> void: + iterations = val + + set_dirty(true) + +func get_persistence() -> float: + return persistence + +func set_persistence(val : float) -> void: + persistence = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/noise/fbm_noise.gd b/game/addons/mat_maker_gd/nodes/noise/fbm_noise.gd new file mode 100644 index 0000000..036b9cb --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/noise/fbm_noise.gd @@ -0,0 +1,99 @@ +tool +extends MMNode + +var NoiseFBM = preload("res://addons/mat_maker_gd/nodes/common/noise_fbm.gd") + +export(Resource) var image : Resource + +export(int, "Value,Perlin,Simplex,Cellular1,Cellular2,Cellular3,Cellular4,Cellular5,Cellular6") var type : int = 0 +export(Vector2) var scale : Vector2 = Vector2(2, 2) +export(int) var folds : int = 0 +export(int) var iterations : int = 5 +export(float) var persistence : float = 0.5 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_type", "set_type", "Type", [ "Value", "Perlin", "Simplex", "Cellular1", "Cellular2", "Cellular3", "Cellular4", "Cellular5", "Cellular6" ])#, Vector2(0, 1)) + mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale")#, Vector2(1, 10)) + mm_graph_node.add_slot_int("get_folds", "set_folds", "folds")#, Vector2(0, 1)) + mm_graph_node.add_slot_int("get_iterations", "set_iterations", "Iterations")#, Vector2(0, 1)) + mm_graph_node.add_slot_float("get_persistence", "set_persistence", "Persistence", 0.01)#, Vector2(0, 1)) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var ps : float = 1.0 / float(pseed) + + #"Value,Perlin,Simplex,Cellular1,Cellular2,Cellular3,Cellular4,Cellular5,Cellular6" + if type == 0: + return NoiseFBM.fbmval(uv, scale, folds, iterations, persistence, ps) + elif type == 1: + return NoiseFBM.perlin(uv, scale, folds, iterations, persistence, ps) + elif type == 2: + return NoiseFBM.simplex(uv, scale, folds, iterations, persistence, ps) + elif type == 3: + return NoiseFBM.cellular(uv, scale, folds, iterations, persistence, ps) + elif type == 4: + return NoiseFBM.cellular2(uv, scale, folds, iterations, persistence, ps) + elif type == 5: + return NoiseFBM.cellular3(uv, scale, folds, iterations, persistence, ps) + elif type == 6: + return NoiseFBM.cellular4(uv, scale, folds, iterations, persistence, ps) + elif type == 7: + return NoiseFBM.cellular5(uv, scale, folds, iterations, persistence, ps) + elif type == 8: + return NoiseFBM.cellular6(uv, scale, folds, iterations, persistence, ps) + + return Color() + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_type() -> int: + return type + +func set_type(val : int) -> void: + type = val + + set_dirty(true) + +func get_scale() -> Vector2: + return scale + +func set_scale(val : Vector2) -> void: + scale = val + + set_dirty(true) + +func get_folds() -> int: + return folds + +func set_folds(val : int) -> void: + folds = val + + set_dirty(true) + +func get_iterations() -> int: + return iterations + +func set_iterations(val : int) -> void: + iterations = val + + set_dirty(true) + +func get_persistence() -> float: + return persistence + +func set_persistence(val : float) -> void: + persistence = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/noise/noise.gd b/game/addons/mat_maker_gd/nodes/noise/noise.gd new file mode 100644 index 0000000..30e23ee --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/noise/noise.gd @@ -0,0 +1,52 @@ +tool +extends MMNode + +var Noises = preload("res://addons/mat_maker_gd/nodes/common/noises.gd") + +export(Resource) var image : Resource + +export(int) var grid_size : int = 16 +export(float) var density : float = 0.5 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_int("get_grid_size", "set_grid_size", "Grid Size")#, Vector2(1, 10)) + mm_graph_node.add_slot_float("get_density", "set_density", "Density", 0.01)#, Vector2(0, 1)) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var ps : float = 1.0 / float(pseed) + + #return dots(uv, 1.0/$(size), $(density), $(seed)); + var f : float = Noises.dots(uv, 1.0 / float(grid_size), density, ps) + + return Color(f, f, f, 1) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_grid_size() -> int: + return grid_size + +func set_grid_size(val : int) -> void: + grid_size = val + + set_dirty(true) + +func get_density() -> float: + return density + +func set_density(val : float) -> void: + density = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/noise/voronoi.gd b/game/addons/mat_maker_gd/nodes/noise/voronoi.gd new file mode 100644 index 0000000..0c45239 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/noise/voronoi.gd @@ -0,0 +1,163 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var NoiseVoronoi = preload("res://addons/mat_maker_gd/nodes/common/noise_voronoi.gd") + +export(Resource) var out_nodes : Resource +export(Resource) var out_borders : Resource +export(Resource) var out_random_color : Resource +export(Resource) var out_fill : Resource + +export(Vector2) var scale : Vector2 = Vector2(4, 4) +export(Vector2) var stretch : Vector2 = Vector2(1, 1) +export(float) var intensity : float = 1 +export(float) var randomness : float = 0.85 + +func _init_properties(): + if !out_nodes: + out_nodes = MMNodeUniversalProperty.new() + out_nodes.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_nodes.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_borders: + out_borders = MMNodeUniversalProperty.new() + out_borders.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_borders.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_random_color: + out_random_color = MMNodeUniversalProperty.new() + out_random_color.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_random_color.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_fill: + out_fill = MMNodeUniversalProperty.new() + out_fill.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_fill.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(out_nodes) + register_output_property(out_borders) + register_output_property(out_random_color) + register_output_property(out_fill) + + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(out_nodes) + mm_graph_node.add_slot_texture_universal(out_borders) + mm_graph_node.add_slot_texture_universal(out_random_color) + mm_graph_node.add_slot_texture_universal(out_fill) + + mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale", 0.1)#, Vector2(1, 32))#, Vector2(0, 32)) + mm_graph_node.add_slot_vector2("get_stretch", "set_stretch", "stretch", 0.01)#, Vector2(1, 32))#, Vector2(0, 32)) + mm_graph_node.add_slot_float("get_intensity", "set_intensity", "Intensity", 0.01)#, Vector2(1, 32))#, Vector2(0, 32)) + mm_graph_node.add_slot_float("get_randomness", "set_randomness", "Randomness", 0.01)#, Vector2(1, 32))#, Vector2(0, 32)) + + + + +func _render(material) -> void: + var nodes : Image = Image.new() + var borders : Image = Image.new() + var random_color : Image = Image.new() + var fill : Image = Image.new() + + nodes.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + borders.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + random_color.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + fill.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + + nodes.lock() + borders.lock() + random_color.lock() + fill.lock() + + var w : float = material.image_size.x + var h : float = material.image_size.y + + var pseed : float = randf() + randi() + + for x in range(material.image_size.x): + for y in range(material.image_size.y): + var uv : Vector2 = Vector2(x / w, y / h) + + var ps : float = 1.0 / float(pseed) + + #vec4 $(name_uv)_xyzw = voronoi($uv, vec2($scale_x, $scale_y), vec2($stretch_y, $stretch_x), $intensity, $randomness, $seed); + var voronoi : Color = NoiseVoronoi.voronoi(uv, scale, stretch, intensity, randomness, ps) + + #Nodes - float - A greyscale pattern based on the distance to cell centers + #$(name_uv)_xyzw.z + var nodes_col : Color = Color(voronoi.b, voronoi.b, voronoi.b, 1) + + #Borders - float - A greyscale pattern based on the distance to borders + #$(name_uv)_xyzw.w + var borders_col : Color = Color(voronoi.a, voronoi.a, voronoi.a, 1) + + #Random color - rgb - A color pattern that assigns a random color to each cell + #rand3(fract(floor($(name_uv)_xyzw.xy)/vec2($scale_x, $scale_y))) + var rv3 : Vector3 = Commons.rand3(Commons.fractv2(Vector2(voronoi.r, voronoi.g) / scale)) + var random_color_col : Color = Color(rv3.x, rv3.y, rv3.z, 1) + + #Fill - rgba - An output that should be plugged into a Fill companion node + #vec4(fract(($(name_uv)_xyzw.xy-1.0)/vec2($scale_x, $scale_y)), vec2(2.0)/vec2($scale_x, $scale_y)) + var fv21 : Vector2 = Commons.fractv2((Vector2(voronoi.r, voronoi.g) - Vector2(1, 1)) / scale) + var fv22 : Vector2 = Vector2(2, 2) / scale + var fill_col : Color = Color(fv21.x, fv21.y, fv22.x, fv22.y) + + nodes.set_pixel(x, y, nodes_col) + borders.set_pixel(x, y, borders_col) + random_color.set_pixel(x, y, random_color_col) + fill.set_pixel(x, y, fill_col) + + nodes.unlock() + borders.unlock() + random_color.unlock() + fill.unlock() + + out_nodes.set_value(nodes) + out_borders.set_value(borders) + out_random_color.set_value(random_color) + out_fill.set_value(fill) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return Color() + +#scale +func get_scale() -> Vector2: + return scale + +func set_scale(val : Vector2) -> void: + scale = val + + set_dirty(true) + +#stretch +func get_stretch() -> Vector2: + return stretch + +func set_stretch(val : Vector2) -> void: + stretch = val + + set_dirty(true) + +#intensity +func get_intensity() -> float: + return intensity + +func set_intensity(val : float) -> void: + intensity = val + + set_dirty(true) + +#randomness +func get_randomness() -> float: + return randomness + +func set_randomness(val : float) -> void: + randomness = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/other/output_image.gd b/game/addons/mat_maker_gd/nodes/other/output_image.gd new file mode 100644 index 0000000..84a77fb --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/other/output_image.gd @@ -0,0 +1,45 @@ +tool +extends MMNode + +export(Resource) var image : Resource + +export(String) var postfix : String = "" + +func _init_properties(): + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + image.slot_name = "image" + + register_input_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_line_edit("get_postfix", "set_postfix", "postfix") + +func _render(material) -> void: + if !image: + return + + var img : Image = image.get_active_image() + + if !img: + return + + var matpath : String = material.get_path() + + if matpath == "": + return + + var matbn : String = matpath.get_basename() + var final_file_name : String = matbn + postfix + ".png" + + img.save_png(final_file_name) + +func get_postfix() -> String: + return postfix + +func set_postfix(pf : String) -> void: + postfix = pf + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/pattern/beehive.gd b/game/addons/mat_maker_gd/nodes/pattern/beehive.gd new file mode 100644 index 0000000..b439ae3 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/pattern/beehive.gd @@ -0,0 +1,113 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd") + +export(Resource) var out_main : Resource +export(Resource) var out_random_color : Resource +export(Resource) var out_uv_map : Resource + +export(Vector2) var size : Vector2 = Vector2(4, 4) + +func _init_properties(): + if !out_main: + out_main = MMNodeUniversalProperty.new() + out_main.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_main.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_random_color: + out_random_color = MMNodeUniversalProperty.new() + out_random_color.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_random_color.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_uv_map: + out_uv_map = MMNodeUniversalProperty.new() + out_uv_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_uv_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(out_main) + register_output_property(out_random_color) + register_output_property(out_uv_map) + + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(out_main) + mm_graph_node.add_slot_texture_universal(out_random_color) + mm_graph_node.add_slot_texture_universal(out_uv_map) + + mm_graph_node.add_slot_vector2("get_size", "set_size", "Size")#, Vector2(1, 32))#, Vector2(0, 32)) + + +func _render(material) -> void: + var main_pattern : Image = Image.new() + var random_color : Image = Image.new() + var uv_map : Image = Image.new() + + main_pattern.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + random_color.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + uv_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + + main_pattern.lock() + random_color.lock() + uv_map.lock() + + var w : float = material.image_size.x + var h : float = material.image_size.y + + var pseed : float = randf() + randi() + + for x in range(material.image_size.x): + for y in range(material.image_size.y): + var uv : Vector2 = Vector2(x / w, y / h) + + var ps : float = 1.0 / float(pseed) + + #vec2 $(name_uv)_uv = $uv*vec2($sx, $sy*1.73205080757); + #vec4 $(name_uv)_center = beehive_center($(name_uv)_uv); + var beehive_uv : Vector2 = uv * size; + var beehive_uv_center : Color = Patterns.beehive_center(beehive_uv); + + #Output (float) - Shows the greyscale pattern + #1.0-2.0*beehive_dist($(name_uv)_center.xy) + var f : float = 1.0 - 2.0 * Patterns.beehive_dist(Vector2(beehive_uv_center.r, beehive_uv_center.g)) + var main_pattern_col : Color = Color(f, f, f, 1) + + #Random color (rgb) - Shows a random color for each hexagonal tile + #rand3(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed))) + var rcv3 : Vector3 = Commons.rand3(Commons.fractv2(Vector2(beehive_uv_center.b, beehive_uv_center.a) / size) + Vector2(ps, ps)) + var random_color_col : Color = Color(rcv3.x, rcv3.y, rcv3.z, 1) + + #UV map (rgb) - Shows an UV map to be connected to the UV map port of the Custom UV node + #vec3(vec2(0.5)+$(name_uv)_center.xy, rand(fract($(name_uv)_center.zw/vec2($sx, $sy))+vec2(float($seed)))) + var uvm1 : Vector2 = Vector2(0.5, 0.5) + Vector2(beehive_uv_center.r, beehive_uv_center.g) + var uvm2 : Vector2 = Commons.rand2(Commons.fractv2(Vector2(beehive_uv_center.b, beehive_uv_center.a) / size) + Vector2(ps, ps)) + + var uv_map_col : Color = Color(uvm1.x, uvm1.y, uvm2.x, 1) + + main_pattern.set_pixel(x, y, main_pattern_col) + random_color.set_pixel(x, y, random_color_col) + uv_map.set_pixel(x, y, uv_map_col) + + main_pattern.unlock() + random_color.unlock() + uv_map.unlock() + + out_main.set_value(main_pattern) + out_random_color.set_value(random_color) + out_uv_map.set_value(uv_map) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return Color() + +#size +func get_size() -> Vector2: + return size + +func set_size(val : Vector2) -> void: + size = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/pattern/bricks.gd b/game/addons/mat_maker_gd/nodes/pattern/bricks.gd new file mode 100644 index 0000000..498460f --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/pattern/bricks.gd @@ -0,0 +1,288 @@ +tool +extends MMNode + +var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd") + +export(Resource) var out_bricks_pattern : Resource +export(Resource) var out_random_color : Resource +export(Resource) var out_position_x : Resource +export(Resource) var out_position_y : Resource +export(Resource) var out_brick_uv : Resource +export(Resource) var out_corner_uv : Resource +export(Resource) var out_direction : Resource + +export(int, "Running Bond,Running Bond (2),HerringBone,Basket Weave,Spanish Bond") var type : int = 0 +export(int) var repeat : int = 1 +export(Vector2) var col_row : Vector2 = Vector2(4, 4) +export(float) var offset : float = 0.5 +export(Resource) var mortar : Resource +export(Resource) var bevel : Resource +export(Resource) var roundness : Resource +export(float) var corner : float = 0.3 + +func _init_properties(): + if !out_bricks_pattern: + out_bricks_pattern = MMNodeUniversalProperty.new() + out_bricks_pattern.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_bricks_pattern.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_random_color: + out_random_color = MMNodeUniversalProperty.new() + out_random_color.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_random_color.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_position_x: + out_position_x = MMNodeUniversalProperty.new() + out_position_x.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_position_x.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_position_y: + out_position_y = MMNodeUniversalProperty.new() + out_position_y.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_position_y.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_brick_uv: + out_brick_uv = MMNodeUniversalProperty.new() + out_brick_uv.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_brick_uv.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_corner_uv: + out_corner_uv = MMNodeUniversalProperty.new() + out_corner_uv.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_corner_uv.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_direction: + out_direction = MMNodeUniversalProperty.new() + out_direction.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_direction.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !mortar: + mortar = MMNodeUniversalProperty.new() + mortar.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + mortar.set_default_value(0.1) + + mortar.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + mortar.slot_name = "Mortar" + mortar.value_step = 0.01 + mortar.value_range = Vector2(0, 0.5) + + if !bevel: + bevel = MMNodeUniversalProperty.new() + bevel.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + bevel.set_default_value(0.1) + + bevel.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + bevel.slot_name = "Bevel" + bevel.value_step = 0.01 + bevel.value_range = Vector2(0, 0.5) + + if !roundness: + roundness = MMNodeUniversalProperty.new() + roundness.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + roundness.set_default_value(0.1) + + roundness.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + roundness.slot_name = "Roundness" + roundness.value_step = 0.01 + roundness.value_range = Vector2(0, 0.5) + + register_output_property(out_bricks_pattern) + register_output_property(out_random_color) + register_output_property(out_position_x) + register_output_property(out_position_y) + register_output_property(out_brick_uv) + register_output_property(out_corner_uv) + register_output_property(out_direction) + + register_input_property(mortar) + register_input_property(bevel) + register_input_property(roundness) + + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(out_bricks_pattern) + mm_graph_node.add_slot_texture_universal(out_random_color) + mm_graph_node.add_slot_texture_universal(out_position_x) + mm_graph_node.add_slot_texture_universal(out_position_y) + mm_graph_node.add_slot_texture_universal(out_brick_uv) + mm_graph_node.add_slot_texture_universal(out_corner_uv) + mm_graph_node.add_slot_texture_universal(out_direction) + + mm_graph_node.add_slot_enum("get_type", "set_type", "Type", [ "Running Bond", "Running Bond (2)", "HerringBone", "Basket Weave", "Spanish Bond" ]) + mm_graph_node.add_slot_int("get_repeat", "set_repeat", "Repeat") + + mm_graph_node.add_slot_vector2("get_col_row", "set_col_row", "Col, Row")#, Vector2(1, 32))#, Vector2(0, 32)) + mm_graph_node.add_slot_float("get_offset", "set_offset", "Offset") + + mm_graph_node.add_slot_float_universal(mortar) + mm_graph_node.add_slot_float_universal(bevel) + mm_graph_node.add_slot_float_universal(roundness) + + mm_graph_node.add_slot_float("get_corner", "set_corner", "Corner") + +func _render(material) -> void: + var bricks_pattern : Image = Image.new() + var random_color : Image = Image.new() + var position_x : Image = Image.new() + var position_y : Image = Image.new() + var brick_uv : Image = Image.new() + var corner_uv : Image = Image.new() + var direction : Image = Image.new() + + bricks_pattern.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + random_color.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + position_x.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + position_y.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + brick_uv.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + corner_uv.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + direction.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + + bricks_pattern.lock() + random_color.lock() + position_x.lock() + position_y.lock() + brick_uv.lock() + corner_uv.lock() + direction.lock() + + var w : float = material.image_size.x + var h : float = material.image_size.y + + var pseed : float = randf() + randi() + + for x in range(material.image_size.x): + for y in range(material.image_size.y): + var uv : Vector2 = Vector2(x / w, y / h) + + #vec4 $(name_uv)_rect = bricks_$pattern($uv, vec2($columns, $rows), $repeat, $row_offset); + var brick_rect : Color = Color() + + #"Running Bond,Running Bond (2),HerringBone,Basket Weave,Spanish Bond" + + if type == 0: + brick_rect = Patterns.bricks_rb(uv, col_row, repeat, offset) + elif type == 1: + brick_rect = Patterns.bricks_rb2(uv, col_row, repeat, offset) + elif type == 2: + brick_rect = Patterns.bricks_hb(uv, col_row, repeat, offset) + elif type == 3: + brick_rect = Patterns.bricks_bw(uv, col_row, repeat, offset) + elif type == 4: + brick_rect = Patterns.bricks_sb(uv, col_row, repeat, offset) + + + #vec4 $(name_uv) = brick($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $round*$round_map($uv), max(0.001, $bevel*$bevel_map($uv))); + var brick : Color = Patterns.brick(uv, Vector2(brick_rect.r, brick_rect.g), Vector2(brick_rect.b, brick_rect.a), mortar.get_value(uv), roundness.get_value(uv), max(0.001, bevel.get_value(uv))) + + #Bricks pattern (float) - A greyscale image that shows the bricks pattern + #$(name_uv).x + var bricks_pattern_col : Color = Color(brick.r, brick.r, brick.r, 1) + + #Random color (rgb) - A random color for each brick + #brick_random_color($(name_uv)_rect.xy, $(name_uv)_rect.zw, float($seed)) + var brc : Vector3 = Patterns.brick_random_color(Vector2(brick_rect.r, brick_rect.g), Vector2(brick_rect.b, brick_rect.a), 1 / float(pseed)) + var random_color_col : Color = Color(brc.x, brc.y, brc.z, 1) + + #Position.x (float) - The position of each brick along the X axis", + #$(name_uv).y + var position_x_col : Color = Color(brick.g, brick.g, brick.g, 1) + + #Position.y (float) - The position of each brick along the Y axis + #$(name_uv).z + var position_y_col : Color = Color(brick.b, brick.b, brick.b, 1) + + #Brick UV (rgb) - An UV map output for each brick, to be connected to the Map input of a CustomUV node + #brick_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, float($seed)) + var buv : Vector3 = Patterns.brick_uv(uv, Vector2(brick_rect.r, brick_rect.g), Vector2(brick_rect.b, brick_rect.a), pseed) + var brick_uv_col : Color = Color(buv.x, buv.y, buv.z, 1) + + #Corner UV (rgb) - An UV map output for each brick corner, to be connected to the Map input of a CustomUV node + #brick_corner_uv($uv, $(name_uv)_rect.xy, $(name_uv)_rect.zw, $mortar*$mortar_map($uv), $corner, float($seed)) + var bcuv : Vector3 = Patterns.brick_corner_uv(uv, Vector2(brick_rect.r, brick_rect.g), Vector2(brick_rect.b, brick_rect.a), mortar.get_value(uv), corner, pseed) + var corner_uv_col : Color = Color(bcuv.x, bcuv.y, bcuv.z, 1) + + #Direction (float) - The direction of each brick (white: horizontal, black: vertical) + #0.5*(sign($(name_uv)_rect.z-$(name_uv)_rect.x-$(name_uv)_rect.w+$(name_uv)_rect.y)+1.0) + var d : float = 0.5 * (sign(brick_rect.b - brick_rect.r - brick_rect.a + brick_rect.g) + 1.0) + var direction_col : Color = Color(d, d, d, 1) + + bricks_pattern.set_pixel(x, y, bricks_pattern_col) + random_color.set_pixel(x, y, random_color_col) + position_x.set_pixel(x, y, position_x_col) + position_y.set_pixel(x, y, position_y_col) + brick_uv.set_pixel(x, y, brick_uv_col) + corner_uv.set_pixel(x, y, corner_uv_col) + direction.set_pixel(x, y, direction_col) + + bricks_pattern.unlock() + random_color.unlock() + position_x.unlock() + position_y.unlock() + brick_uv.unlock() + corner_uv.unlock() + direction.unlock() + + out_bricks_pattern.set_value(bricks_pattern) + out_random_color.set_value(random_color) + out_position_x.set_value(position_x) + out_position_y.set_value(position_y) + out_brick_uv.set_value(brick_uv) + out_corner_uv.set_value(corner_uv) + out_direction.set_value(direction) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return Color() + +#type +func get_type() -> int: + return type + +func set_type(val : int) -> void: + type = val + + set_dirty(true) + +#repeat +func get_repeat() -> int: + return repeat + +func set_repeat(val : int) -> void: + repeat = val + + set_dirty(true) + +#col_row +func get_col_row() -> Vector2: + return col_row + +func set_col_row(val : Vector2) -> void: + col_row = val + + set_dirty(true) + +#offset +func get_offset() -> float: + return offset + +func set_offset(val : float) -> void: + offset = val + + set_dirty(true) + +#corner +func get_corner() -> float: + return corner + +func set_corner(val : float) -> void: + corner = val + + set_dirty(true) + + diff --git a/game/addons/mat_maker_gd/nodes/pattern/iching.gd b/game/addons/mat_maker_gd/nodes/pattern/iching.gd new file mode 100644 index 0000000..5daceba --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/pattern/iching.gd @@ -0,0 +1,40 @@ +tool +extends MMNode + +var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd") + +export(Resource) var image : Resource +export(Vector2) var size : Vector2 = Vector2(4, 4) + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_vector2("get_size", "set_size", "Size", 1) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var ps : float = 1.0 / float(pseed) + + #IChing(vec2($columns, $rows)*$uv, float($seed)) + return Patterns.IChingc(uv, size, ps) + +#size +func get_size() -> Vector2: + return size + +func set_size(val : Vector2) -> void: + size = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/pattern/pattern.gd b/game/addons/mat_maker_gd/nodes/pattern/pattern.gd new file mode 100644 index 0000000..1bc9ac1 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/pattern/pattern.gd @@ -0,0 +1,72 @@ +tool +extends MMNode + +var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd") + +export(Resource) var image : Resource +export(int, "Multiply,Add,Max,Min,Xor,Pow") var combiner_type : int = 0 +export(int, "Sine,Triangle,Square,Sawtooth,Constant,Bounce") var combiner_axis_type_x : int = 0 +export(int, "Sine,Triangle,Square,Sawtooth,Constant,Bounce") var combiner_axis_type_y : int = 0 +export(Vector2) var repeat : Vector2 = Vector2(4, 4) + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_combiner_type", "set_combiner_type", "Combiner Type", [ "Multiply", "Add" , "Max", "Min", "Xor", "Pow" ]) + mm_graph_node.add_slot_enum("get_combiner_axis_type_x", "set_combiner_axis_type_x", "Combiner Axis type", [ "Sine", "Triangle", "Square", "Sawtooth", "Constant", "Bounce" ]) + mm_graph_node.add_slot_enum("get_combiner_axis_type_y", "set_combiner_axis_type_y", "", [ "Sine", "Triangle", "Square", "Sawtooth", "Constant", "Bounce" ]) + mm_graph_node.add_slot_vector2("get_repeat", "set_repeat", "Repeat", 1)#, Vector2(0, 32)) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var f : float = Patterns.pattern(uv, repeat.x, repeat.y, combiner_type, combiner_axis_type_x, combiner_axis_type_y) + + return Color(f, f, f, 1) + +#combiner_type +func get_combiner_type() -> int: + return combiner_type + +func set_combiner_type(val : int) -> void: + combiner_type = val + + set_dirty(true) + +#combiner_axis_type_x +func get_combiner_axis_type_x() -> int: + return combiner_axis_type_x + +func set_combiner_axis_type_x(val : int) -> void: + combiner_axis_type_x = val + + set_dirty(true) + +#combiner_axis_type_y +func get_combiner_axis_type_y() -> int: + return combiner_axis_type_y + +func set_combiner_axis_type_y(val : int) -> void: + combiner_axis_type_y = val + + set_dirty(true) + +#repeat +func get_repeat() -> Vector2: + return repeat + +func set_repeat(val : Vector2) -> void: + repeat = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/pattern/runes.gd b/game/addons/mat_maker_gd/nodes/pattern/runes.gd new file mode 100644 index 0000000..fd7a965 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/pattern/runes.gd @@ -0,0 +1,40 @@ +tool +extends MMNode + +var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd") + +export(Resource) var image : Resource +export(Vector2) var size : Vector2 = Vector2(4, 4) + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_vector2("get_size", "set_size", "Size", 1) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var ps : float = 1.0 / float(pseed) + + #Rune(vec2($columns, $rows)*$uv, float($seed)) + return Patterns.runesc(uv, size, ps) + +#size +func get_size() -> Vector2: + return size + +func set_size(val : Vector2) -> void: + size = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/pattern/scratches.gd b/game/addons/mat_maker_gd/nodes/pattern/scratches.gd new file mode 100644 index 0000000..f333b2d --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/pattern/scratches.gd @@ -0,0 +1,82 @@ +tool +extends MMNode + +var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd") + +export(Resource) var image : Resource +export(Vector2) var size : Vector2 = Vector2(0.25, 0.4) +export(int) var layers : int = 4 +export(float) var waviness : float = 0.51 +export(int) var angle : int = 0 +export(float) var randomness : float = 0.44 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_vector2("get_size", "set_size", "Size", 0.01) + mm_graph_node.add_slot_int("get_layers", "set_layers", "Layers") + mm_graph_node.add_slot_float("get_waviness", "set_waviness", "Waviness", 0.01) + mm_graph_node.add_slot_int("get_angle", "set_angle", "Angle") + mm_graph_node.add_slot_float("get_randomness", "set_randomness", "Randomness", 0.01) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #scratches($uv, int($layers), vec2($length, $width), $waviness, $angle, $randomness, vec2(float($seed), 0.0)) + return Patterns.scratchesc(uv, layers, size, waviness, angle, randomness, Vector2(pseed, 0.0)) + +#size +func get_size() -> Vector2: + return size + +func set_size(val : Vector2) -> void: + size = val + + set_dirty(true) + +#layers +func get_layers() -> int: + return layers + +func set_layers(val : int) -> void: + layers = val + + set_dirty(true) + +#waviness +func get_waviness() -> float: + return waviness + +func set_waviness(val : float) -> void: + waviness = val + + set_dirty(true) + +#angle +func get_angle() -> int: + return angle + +func set_angle(val : int) -> void: + angle = val + + set_dirty(true) + +#randomness +func get_randomness() -> float: + return randomness + +func set_randomness(val : float) -> void: + randomness = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/pattern/sine_wave.gd b/game/addons/mat_maker_gd/nodes/pattern/sine_wave.gd new file mode 100644 index 0000000..d343bfc --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/pattern/sine_wave.gd @@ -0,0 +1,61 @@ +tool +extends MMNode + +var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd") + +export(Resource) var image : Resource +export(float) var amplitude : float = 0.5 +export(float) var frequency : float = 2 +export(float) var phase : float = 0 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_float("get_amplitude", "set_amplitude", "Amplitude", 0.01) + mm_graph_node.add_slot_float("get_frequency", "set_frequency", "Frequency", 0.1) + mm_graph_node.add_slot_float("get_phase", "set_phase", "Phase", 0.01) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var f : float = 1.0 - abs(2.0 * (uv.y - 0.5) - amplitude *sin((frequency * uv.x + phase)*6.28318530718)) + + return Color(f, f, f, 1) + +#amplitude +func get_amplitude() -> float: + return amplitude + +func set_amplitude(val : float) -> void: + amplitude = val + + set_dirty(true) + +#frequency +func get_frequency() -> float: + return frequency + +func set_frequency(val : float) -> void: + frequency = val + + set_dirty(true) + +#phase +func get_phase() -> float: + return phase + +func set_phase(val : float) -> void: + phase = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/pattern/truchet.gd b/game/addons/mat_maker_gd/nodes/pattern/truchet.gd new file mode 100644 index 0000000..b07ec96 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/pattern/truchet.gd @@ -0,0 +1,53 @@ +tool +extends MMNode + +var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd") + +export(Resource) var image : Resource +export(int, "Line,Circle") var shape : int = 0 +export(float) var size : float = 4 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_shape", "set_shape", "Shape", [ "Line", "Circle" ]) + mm_graph_node.add_slot_float("get_size", "set_size", "Size", 1) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + if shape == 0: + return Patterns.truchet1c(uv, size, pseed) + elif shape == 1: + return Patterns.truchet2c(uv, size, pseed) + + return Color() + +#shape +func get_shape() -> int: + return shape + +func set_shape(val : int) -> void: + shape = val + + set_dirty(true) + +#size +func get_size() -> float: + return size + +func set_size(val : float) -> void: + size = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/pattern/weave.gd b/game/addons/mat_maker_gd/nodes/pattern/weave.gd new file mode 100644 index 0000000..f846549 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/pattern/weave.gd @@ -0,0 +1,134 @@ +tool +extends MMNode + +var Patterns = preload("res://addons/mat_maker_gd/nodes/common/patterns.gd") + +export(Resource) var out_main : Resource +export(Resource) var out_horizontal_map : Resource +export(Resource) var out_vertical_map : Resource + +export(Vector2) var size : Vector2 = Vector2(4, 4) +export(Resource) var width : Resource +export(int) var stitch : int = 1 + +func _init_properties(): + if !out_main: + out_main = MMNodeUniversalProperty.new() + out_main.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_main.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_horizontal_map: + out_horizontal_map = MMNodeUniversalProperty.new() + out_horizontal_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_horizontal_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_vertical_map: + out_vertical_map = MMNodeUniversalProperty.new() + out_vertical_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_vertical_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !width: + width = MMNodeUniversalProperty.new() + width.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + width.set_default_value(Vector2(0.9, 0.9)) + + width.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + width.slot_name = "Width" + width.value_step = 0.01 + width.value_range = Vector2(0, 1) + + register_output_property(out_main) + register_output_property(out_horizontal_map) + register_output_property(out_vertical_map) + + register_input_property(width) + + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(out_main) + mm_graph_node.add_slot_texture_universal(out_horizontal_map) + mm_graph_node.add_slot_texture_universal(out_vertical_map) + + mm_graph_node.add_slot_vector2("get_size", "set_size", "Size")#, Vector2(1, 32))#, Vector2(0, 32)) + mm_graph_node.add_slot_vector2_universal(width) + + mm_graph_node.add_slot_int("get_stitch", "set_stitch", "Stitch") + + +func _render(material) -> void: + var main_pattern : Image = Image.new() + var horizontal_map : Image = Image.new() + var vertical_map : Image = Image.new() + + main_pattern.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + horizontal_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + vertical_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + + main_pattern.lock() + horizontal_map.lock() + vertical_map.lock() + + var w : float = material.image_size.x + var h : float = material.image_size.y + + var pseed : float = randf() + randi() + + for x in range(material.image_size.x): + for y in range(material.image_size.y): + var uv : Vector2 = Vector2(x / w, y / h) + + var width_val : Vector2 = width.get_value(uv) + + #vec3 $(name_uv) = weave2($uv, vec2($columns, $rows), $stitch, $width_x*$width_map($uv), $width_y*$width_map($uv)); + var weave : Vector3 = Patterns.weave2(uv, size, stitch, width_val.x, width_val.y); + + #Outputs: + + #Output (float) - Shows the generated greyscale weave pattern. + #$(name_uv).x + var main_pattern_col : Color = Color(weave.x, weave.x, weave.x, 1) + + #Horizontal mask (float) - Horizontal mask + #$(name_uv).y + var horizontal_map_col : Color = Color(weave.y, weave.y, weave.y, 1) + + #Vertical mask (float) - Mask for vertical stripes + #$(name_uv).z + var vertical_map_col : Color = Color(weave.z, weave.z, weave.z, 1) + + main_pattern.set_pixel(x, y, main_pattern_col) + horizontal_map.set_pixel(x, y, horizontal_map_col) + vertical_map.set_pixel(x, y, vertical_map_col) + + main_pattern.unlock() + horizontal_map.unlock() + vertical_map.unlock() + + out_main.set_value(main_pattern) + out_horizontal_map.set_value(horizontal_map) + out_vertical_map.set_value(vertical_map) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return Color() + +#size +func get_size() -> Vector2: + return size + +func set_size(val : Vector2) -> void: + size = val + + set_dirty(true) + +#stitch +func get_stitch() -> int: + return stitch + +func set_stitch(val : int) -> void: + stitch = val + + set_dirty(true) + diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_annular_shape.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_annular_shape.gd new file mode 100644 index 0000000..c7e8829 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_annular_shape.gd @@ -0,0 +1,53 @@ +tool +extends MMNode + +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource +export(float) var width : float = 0.1 +export(int) var ripples : int = 1 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Apply >>>" + output.get_value_from_owner = true + + register_input_property(output) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_width", "set_width", "Width", 0.01) + mm_graph_node.add_slot_int("get_ripples", "set_ripples", "Ripples") + +func get_property_value(uv : Vector2): + var val : float = output.get_value(uv, true) + + return SDF2D.sdRipples(val, width, ripples) + +#width +func get_width() -> float: + return width + +func set_width(val : float) -> void: + width = val + + emit_changed() + output.emit_changed() + +#ripples +func get_ripples() -> int: + return ripples + +func set_ripples(val : int) -> void: + ripples = val + + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_bool.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_bool.gd new file mode 100644 index 0000000..69ee787 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_bool.gd @@ -0,0 +1,76 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var input1 : Resource +export(Resource) var input2 : Resource +export(Resource) var output : Resource +export(int, "Union,Substraction,Intersection") var operation : int = 0 + +func _init_properties(): + if !input1: + input1 = MMNodeUniversalProperty.new() + input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + input1.slot_name = ">>> Input 1 " + if !input1.is_connected("changed", self, "on_input_changed"): + input1.connect("changed", self, "on_input_changed") + + if !input2: + input2 = MMNodeUniversalProperty.new() + input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + input2.slot_name = ">>> Input 2 " + + if !input2.is_connected("changed", self, "on_input_changed"): + input2.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = " Output >>>" + output.get_value_from_owner = true + + register_input_property(input1) + register_input_property(input2) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input1) + mm_graph_node.add_slot_label_universal(input2) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_enum("get_operation", "set_operation", "Operation", [ "Union", "Substraction", "Intersection" ]) + +func get_property_value(uv : Vector2) -> float: + if operation == 0: + return SDF2D.sdf_boolean_union(input1.get_value(uv), input2.get_value(uv)) + elif operation == 1: + return SDF2D.sdf_boolean_substraction(input1.get_value(uv), input2.get_value(uv)) + elif operation == 2: + return SDF2D.sdf_boolean_intersection(input1.get_value(uv), input2.get_value(uv)) + + return 0.0 + +#operation +func get_operation() -> int: + return operation + +func set_operation(val : int) -> void: + operation = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_circle_repeat.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_circle_repeat.gd new file mode 100644 index 0000000..f61f6dc --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_circle_repeat.gd @@ -0,0 +1,43 @@ +tool +extends MMNode + +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource +export(int) var count : int = 6 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Apply >>>" + output.get_value_from_owner = true + + register_input_property(output) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_int("get_count", "set_count", "Count") + +func get_property_value(uv : Vector2): + #$in(circle_repeat_transform_2d($uv-vec2(0.5), $c)+vec2(0.5)) + var new_uv : Vector2 = SDF2D.circle_repeat_transform_2d(uv - Vector2(0.5, 0.5), count) + Vector2(0.5, 0.5) + + return output.get_value(new_uv, true) + +#count +func get_count() -> int: + return count + +func set_count(val : int) -> void: + count = val + + emit_changed() + output.emit_changed() + diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_morph.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_morph.gd new file mode 100644 index 0000000..e5aee5b --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_morph.gd @@ -0,0 +1,69 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var input1 : Resource +export(Resource) var input2 : Resource +export(Resource) var output : Resource +export(float) var amount : float = 0.5 + +func _init_properties(): + if !input1: + input1 = MMNodeUniversalProperty.new() + input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + input1.slot_name = ">>> Input 1 " + if !input1.is_connected("changed", self, "on_input_changed"): + input1.connect("changed", self, "on_input_changed") + + if !input2: + input2 = MMNodeUniversalProperty.new() + input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + input2.slot_name = ">>> Input 2 " + + if !input2.is_connected("changed", self, "on_input_changed"): + input2.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = " Output >>>" + output.get_value_from_owner = true + + register_input_property(input1) + register_input_property(input2) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input1) + mm_graph_node.add_slot_label_universal(input2) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_amount", "set_amount", "Amount", 0.01) + +func get_property_value(uv : Vector2) -> float: + return SDF2D.sdf_morph(input1.get_value(uv), input2.get_value(uv), amount) + +#amount +func get_amount() -> float: + return amount + +func set_amount(val : float) -> void: + amount = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_repeat.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_repeat.gd new file mode 100644 index 0000000..f36ca99 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_repeat.gd @@ -0,0 +1,68 @@ +tool +extends MMNode + +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource +export(int) var x : int = 3 +export(int) var y : int = 3 +export(float) var random_rotation : float = 0.5 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Apply >>>" + output.get_value_from_owner = true + + register_input_property(output) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_int("get_x", "set_x", "X") + mm_graph_node.add_slot_int("get_y", "set_y", "Y") + mm_graph_node.add_slot_float("get_random_rotation", "set_random_rotation", "Random rotation", 0.01) + +func get_property_value(uv : Vector2): + #todo add this as a parameter + var pseed : int = 123123 + + #$in(repeat_2d($uv, vec2(1.0/$rx, 1.0/$ry), float($seed), $r)) + var new_uv : Vector2 = SDF2D.repeat_2d(uv, Vector2(1.0 / float(x), 1.0/ float(y)), 1.0/float(pseed), random_rotation) + + return output.get_value(new_uv, true) +#x +func get_x() -> int: + return x + +func set_x(val : int) -> void: + x = val + + emit_changed() + output.emit_changed() + +#y +func get_y() -> int: + return y + +func set_y(val : int) -> void: + y = val + + emit_changed() + output.emit_changed() + +#random_rotation +func get_random_rotation() -> float: + return random_rotation + +func set_random_rotation(val : float) -> void: + random_rotation = val + + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_rounded_shape.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_rounded_shape.gd new file mode 100644 index 0000000..ac71fd5 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_rounded_shape.gd @@ -0,0 +1,42 @@ +tool +extends MMNode + +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource +export(float) var radius : float = 0 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Apply >>>" + output.get_value_from_owner = true + + register_input_property(output) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01) + +func get_property_value(uv : Vector2): + var val : float = output.get_value(uv, true) + + return SDF2D.sdf_rounded_shape(val, radius) + +#radius +func get_radius() -> float: + return radius + +func set_radius(val : float) -> void: + radius = val + + emit_changed() + output.emit_changed() + diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_smooth_bool.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_smooth_bool.gd new file mode 100644 index 0000000..3b7a768 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_op_smooth_bool.gd @@ -0,0 +1,88 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var input1 : Resource +export(Resource) var input2 : Resource +export(Resource) var output : Resource +export(int, "Union,Substraction,Intersection") var operation : int = 0 +export(float) var smoothness : float = 0.15 + +func _init_properties(): + if !input1: + input1 = MMNodeUniversalProperty.new() + input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + input1.slot_name = ">>> Input 1 " + if !input1.is_connected("changed", self, "on_input_changed"): + input1.connect("changed", self, "on_input_changed") + + if !input2: + input2 = MMNodeUniversalProperty.new() + input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + input2.slot_name = ">>> Input 2 " + + if !input2.is_connected("changed", self, "on_input_changed"): + input2.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = " Output >>>" + output.get_value_from_owner = true + + register_input_property(input1) + register_input_property(input2) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input1) + mm_graph_node.add_slot_label_universal(input2) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_enum("get_operation", "set_operation", "Operation", [ "Union", "Substraction", "Intersection" ]) + mm_graph_node.add_slot_float("get_smoothness", "set_smoothness", "Smoothness", 0.01) + +func get_property_value(uv : Vector2) -> float: + if operation == 0: + return SDF2D.sdf_smooth_boolean_union(input1.get_value(uv), input2.get_value(uv), smoothness) + elif operation == 1: + return SDF2D.sdf_smooth_boolean_substraction(input1.get_value(uv), input2.get_value(uv), smoothness) + elif operation == 2: + return SDF2D.sdf_smooth_boolean_intersection(input1.get_value(uv), input2.get_value(uv), smoothness) + + return 0.0 + +#operation +func get_operation() -> int: + return operation + +func set_operation(val : int) -> void: + operation = val + + emit_changed() + output.emit_changed() + +#smoothness +func get_smoothness() -> float: + return smoothness + +func set_smoothness(val : float) -> void: + smoothness = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_arc.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_arc.gd new file mode 100644 index 0000000..b543604 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_arc.gd @@ -0,0 +1,61 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource +export(Vector2) var angle : Vector2 = Vector2(30, 150) +export(float) var radius : float = 0.3 +export(float) var width : float = 0.1 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector2("get_angle", "set_angle", "Angle", 1) + mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01) + mm_graph_node.add_slot_float("get_width", "set_width", "Width", 0.01) + +func get_property_value(uv : Vector2) -> float: + return SDF2D.sdf_arc(uv, angle, Vector2(radius, width)) + +#angle +func get_angle() -> Vector2: + return angle + +func set_angle(val : Vector2) -> void: + angle = val + + emit_changed() + output.emit_changed() + +#radius +func get_radius() -> float: + return radius + +func set_radius(val : float) -> void: + radius = val + + emit_changed() + output.emit_changed() + +#width +func get_width() -> float: + return width + +func set_width(val : float) -> void: + width = val + + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_box.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_box.gd new file mode 100644 index 0000000..35c866e --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_box.gd @@ -0,0 +1,49 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource +export(Vector2) var center : Vector2 = Vector2(0, 0) +export(Vector2) var size : Vector2 = Vector2(0.3, 0.2) + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector2("get_center", "set_center", "Center", 0.01) + mm_graph_node.add_slot_vector2("get_size", "set_size", "Size", 0.01) + +func get_property_value(uv : Vector2) -> float: + return SDF2D.sdf_box(uv, center, size) + +#center +func get_center() -> Vector2: + return center + +func set_center(val : Vector2) -> void: + center = val + + emit_changed() + output.emit_changed() + +#size +func get_size() -> Vector2: + return size + +func set_size(val : Vector2) -> void: + size = val + + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_circle.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_circle.gd new file mode 100644 index 0000000..bc8488a --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_circle.gd @@ -0,0 +1,49 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource +export(Vector2) var center : Vector2 = Vector2(0, 0) +export(float) var radius : float = 0.4 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector2("get_center", "set_center", "Center", 0.01) + mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01) + +func get_property_value(uv : Vector2) -> float: + return SDF2D.sdf_circle(uv, center, radius) + +#center +func get_center() -> Vector2: + return center + +func set_center(val : Vector2) -> void: + center = val + + emit_changed() + output.emit_changed() + +#radius +func get_radius() -> float: + return radius + +func set_radius(val : float) -> void: + radius = val + + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_line.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_line.gd new file mode 100644 index 0000000..fa3a5e4 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_line.gd @@ -0,0 +1,74 @@ +tool +extends "res://addons/mat_maker_gd/nodes/bases/curve_base.gd" + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") +var Curves = preload("res://addons/mat_maker_gd/nodes/common/curves.gd") + +export(Resource) var output : Resource +export(Vector2) var A : Vector2 = Vector2(-0.3, -0.3) +export(Vector2) var B : Vector2 = Vector2(0.3, 0.3) +export(float) var width : float = 0.1 + +func _init(): + init_points_11() + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector2("get_a", "set_a", "A", 0.01) + mm_graph_node.add_slot_vector2("get_b", "set_b", "B", 0.01) + mm_graph_node.add_slot_float("get_width", "set_width", "Width", 0.01) + mm_graph_node.add_slot_curve() + +func get_property_value(uv : Vector2) -> float: + var line : Vector2 = SDF2D.sdf_line(uv, A, B, width) + + #$(name_uv)_sdl.x - $r * $profile($(name_uv)_sdl.y) + + return line.x - width * Curves.curve(line.y, points) + +#a +func get_a() -> Vector2: + return A + +func set_a(val : Vector2) -> void: + A = val + + emit_changed() + output.emit_changed() + +#b +func get_b() -> Vector2: + return B + +func set_b(val : Vector2) -> void: + B = val + + emit_changed() + output.emit_changed() + +#width +func get_width() -> float: + return width + +func set_width(val : float) -> void: + width = val + + emit_changed() + output.emit_changed() + +func _curve_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_polygon.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_polygon.gd new file mode 100644 index 0000000..daecf36 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_polygon.gd @@ -0,0 +1,29 @@ +tool +extends "res://addons/mat_maker_gd/nodes/bases/polygon_base.gd" + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + mm_graph_node.add_slot_polygon() + +func get_property_value(uv : Vector2) -> float: + return SDF2D.sdPolygon(uv, points) + +func _polygon_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_rhombus.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_rhombus.gd new file mode 100644 index 0000000..07b5ed4 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_shape_rhombus.gd @@ -0,0 +1,49 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource +export(Vector2) var center : Vector2 = Vector2(0, 0) +export(Vector2) var size : Vector2 = Vector2(0.3, 0.2) + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector2("get_center", "set_center", "Center", 0.01) + mm_graph_node.add_slot_vector2("get_size", "set_size", "Size", 0.01) + +func get_property_value(uv : Vector2) -> float: + return SDF2D.sdf_rhombus(uv, center, size) + +#center +func get_center() -> Vector2: + return center + +func set_center(val : Vector2) -> void: + center = val + + emit_changed() + output.emit_changed() + +#size +func get_size() -> Vector2: + return size + +func set_size(val : Vector2) -> void: + size = val + + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_show.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_show.gd new file mode 100644 index 0000000..65697a7 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_show.gd @@ -0,0 +1,67 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(float) var bevel : float = 0 +export(float) var base : float = 0 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + #for some reason this doesn't work, todo check +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = "Input" + + register_output_property(image) + register_input_property(input) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_label_universal(input) + + mm_graph_node.add_slot_float("get_bevel", "set_bevel", "Bevel", 0.01) + mm_graph_node.add_slot_float("get_base", "set_base", "Base", 0.01) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var f : float = input.get_value(uv) + + #clamp($base-$in($uv)/max($bevel, 0.00001), 0.0, 1.0) + var cf : float = clamp(base - f / max(bevel, 0.00001), 0.0, 1.0) + + return Color(cf, cf, cf, 1) + +#bevel +func get_bevel() -> float: + return bevel + +func set_bevel(val : float) -> void: + bevel = val + + set_dirty(true) + +#base +func get_base() -> float: + return base + +func set_base(val : float) -> void: + base = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_rotate.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_rotate.gd new file mode 100644 index 0000000..9ec52f7 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_rotate.gd @@ -0,0 +1,41 @@ +tool +extends MMNode + +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource +export(float) var angle : float = 0 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Apply >>>" + output.get_value_from_owner = true + + register_input_property(output) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_angle", "set_angle", "Angle", 1) + +func get_property_value(uv : Vector2): + #$in(sdf2d_rotate($uv, $a*0.01745329251))", + return output.get_value(SDF2D.sdf2d_rotate(uv, angle * 0.01745329251), true) + +#angle +func get_angle() -> float: + return angle + +func set_angle(val : float) -> void: + angle = val + + emit_changed() + output.emit_changed() + diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_scale.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_scale.gd new file mode 100644 index 0000000..f6302fa --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_scale.gd @@ -0,0 +1,41 @@ +tool +extends MMNode + +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var output : Resource +export(float) var scale : float = 1 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Apply >>>" + output.get_value_from_owner = true + + register_input_property(output) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_scale", "set_scale", "Scale", 0.01) + +func get_property_value(uv : Vector2): + #$in(($uv-vec2(0.5))/$s+vec2(0.5))*$s + return output.get_value(((uv - Vector2(0.5, 0.5)) / scale + Vector2(0.5, 0.5)), true) + +#scale +func get_scale() -> float: + return scale + +func set_scale(val : float) -> void: + scale = val + + emit_changed() + output.emit_changed() + diff --git a/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_translate.gd b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_translate.gd new file mode 100644 index 0000000..c3099e0 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf2d/sd_tf_translate.gd @@ -0,0 +1,38 @@ +tool +extends MMNode + +export(Resource) var output : Resource +export(Vector2) var translation : Vector2 = Vector2(0, 0) + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + output.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + #output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Apply >>>" + output.get_value_from_owner = true + + register_input_property(output) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector2("get_translation", "set_translation", "Translation", 0.01) + +func get_property_value(uv : Vector2): + return output.get_value(uv - translation, true) + +#a +func get_translation() -> Vector2: + return translation + +func set_translation(val : Vector2) -> void: + translation = val + + emit_changed() + output.emit_changed() + diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_color.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_color.gd new file mode 100644 index 0000000..4c26ee4 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_color.gd @@ -0,0 +1,59 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource +export(Resource) var output : Resource +export(float) var color : float = 0.5 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input.slot_name = ">>> Input " + if !input.is_connected("changed", self, "on_input_changed"): + input.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_color", "set_color", "Color", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + var v : Vector2 = input.get_value_sdf3d(uv3) + + v.y = color + + return v + + +#color +func get_color() -> float: + return color + +func set_color(val : float) -> void: + color = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_bool.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_bool.gd new file mode 100644 index 0000000..bff3538 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_bool.gd @@ -0,0 +1,79 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input1 : Resource +export(Resource) var input2 : Resource +export(Resource) var output : Resource +export(int, "Union,Substraction,Intersection") var operation : int = 0 + +func _init_properties(): + if !input1: + input1 = MMNodeUniversalProperty.new() + input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input1.slot_name = ">>> Input 1 " + + if !input1.is_connected("changed", self, "on_input_changed"): + input1.connect("changed", self, "on_input_changed") + + if !input2: + input2 = MMNodeUniversalProperty.new() + input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input2.slot_name = ">>> Input 2 " + + if !input2.is_connected("changed", self, "on_input_changed"): + input2.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input1) + register_input_property(input2) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input1) + mm_graph_node.add_slot_label_universal(input2) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_enum("get_operation", "set_operation", "Operation", [ "Union", "Substraction", "Intersection" ]) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + var s1 : Vector2 = input1.get_value_sdf3d(uv3) + var s2 : Vector2 = input2.get_value_sdf3d(uv3) + + if operation == 0: + return SDF3D.sdf3dc_union(s1, s2) + elif operation == 1: + return SDF3D.sdf3dc_sub(s1, s2) + elif operation == 2: + return SDF3D.sdf3dc_inter(s1, s2) + + return Vector2() + +#operation +func get_operation() -> int: + return operation + +func set_operation(val : int) -> void: + operation = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_circle_repeat.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_circle_repeat.gd new file mode 100644 index 0000000..9186c89 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_circle_repeat.gd @@ -0,0 +1,59 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource +export(Resource) var output : Resource +export(int) var count : int = 5 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input.slot_name = ">>> Input " + + if !input.is_connected("changed", self, "on_input_changed"): + input.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_int("get_count", "set_count", "Count") + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + #todo make seed a class variable probably into MMNode + + var new_uv : Vector3 = SDF3D.circle_repeat_transform(uv3, count) + + return input.get_value_sdf3d(new_uv) + +#count +func get_count() -> int: + return count + +func set_count(val : int) -> void: + count = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_elongation.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_elongation.gd new file mode 100644 index 0000000..b0b52d2 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_elongation.gd @@ -0,0 +1,59 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource +export(Resource) var output : Resource +export(Vector3) var length : Vector3 = Vector3(0.2, 0, 0) + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input.slot_name = ">>> Input " + if !input.is_connected("changed", self, "on_input_changed"): + input.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector3("get_length", "set_length", "Length", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + #$in($uv - clamp($uv, -abs(vec3($x, $y, $z)), abs(vec3($x, $y, $z)))) + + var new_uv : Vector3 = uv3 - Commons.clampv3(uv3, -Commons.absv3(length), Commons.absv3(length)) + + return input.get_value_sdf3d(new_uv) + + +#length +func get_length() -> Vector3: + return length + +func set_length(val : Vector3) -> void: + length = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_extrusion.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_extrusion.gd new file mode 100644 index 0000000..7f7613a --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_extrusion.gd @@ -0,0 +1,63 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource +export(Resource) var output : Resource +export(float) var length : float = 0.25 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + input.slot_name = ">>> Input " + + if !input.is_connected("changed", self, "on_input_changed"): + input.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_length", "set_length", "Length", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + #vec2 $(name_uv)_w = vec2($in($uv.xz+vec2(0.5)),abs($uv.y)-$d); + #ret min(max($(name_uv)_w.x,$(name_uv)_w.y),0.0)+length(max($(name_uv)_w,0.0)) + + var f : float = input.get_value(Vector2(uv3.x, uv3.z) + Vector2(0.5, 0.5)) + var w : Vector2 = Vector2(f, abs(uv3.y) - length) + + var ff : float = min(max(w.x,w.y),0.0) + Commons.maxv2(w, Vector2()).length() + + return Vector2(ff, 0) + +#length +func get_length() -> float: + return length + +func set_length(val : float) -> void: + length = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_morph.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_morph.gd new file mode 100644 index 0000000..67f70a6 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_morph.gd @@ -0,0 +1,74 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input1 : Resource +export(Resource) var input2 : Resource +export(Resource) var output : Resource +export(float) var amount : float = 0.5 + +func _init_properties(): + if !input1: + input1 = MMNodeUniversalProperty.new() + input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input1.slot_name = ">>> Input 1 " + + if !input1.is_connected("changed", self, "on_input_changed"): + input1.connect("changed", self, "on_input_changed") + + if !input2: + input2 = MMNodeUniversalProperty.new() + input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input2.slot_name = ">>> Input 2 " + + if !input2.is_connected("changed", self, "on_input_changed"): + input2.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input1) + register_input_property(input2) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input1) + mm_graph_node.add_slot_label_universal(input2) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_amount", "set_amount", "Amount", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + var s1 : Vector2 = input1.get_value_sdf3d(uv3) + var s2 : Vector2 = input2.get_value_sdf3d(uv3) + + #mix($in1($uv), $in2($uv), $amount) + + return lerp(s1, s2, amount) + +#amount +func get_amount() -> float: + return amount + +func set_amount(val : float) -> void: + amount = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_repeat.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_repeat.gd new file mode 100644 index 0000000..f428e96 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_repeat.gd @@ -0,0 +1,71 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource +export(Resource) var output : Resource +export(Vector2) var col_row : Vector2 = Vector2(3, 3) +export(float) var rotation : float = 0.3 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input.slot_name = ">>> Input " + + if !input.is_connected("changed", self, "on_input_changed"): + input.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector2("get_col_row", "set_col_row", "Col,Row", 1) + mm_graph_node.add_slot_float("get_rotation", "set_rotation", "Rotation", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + #todo make seed a class variable probably into MMNode + + var new_uv : Vector3 = SDF3D.sdf3d_repeat(uv3, col_row, rotation, 1) + + return input.get_value_sdf3d(new_uv) + +#col_row +func get_col_row() -> Vector2: + return col_row + +func set_col_row(val : Vector2) -> void: + col_row = val + + emit_changed() + output.emit_changed() + +#rotation +func get_rotation() -> float: + return rotation + +func set_rotation(val : float) -> void: + rotation = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_revolution.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_revolution.gd new file mode 100644 index 0000000..98df2ab --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_revolution.gd @@ -0,0 +1,60 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource +export(Resource) var output : Resource +export(float) var offset : float = 0.25 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + input.slot_name = ">>> Input " + + if !input.is_connected("changed", self, "on_input_changed"): + input.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_offset", "set_offset", "Offset", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + #vec2 $(name_uv)_q = vec2(length($uv.xy) - $d + 0.5, $uv.z + 0.5); + + var uv : Vector2 = Vector2(Vector2(uv3.x, uv3.y).length() - offset + 0.5, uv3.z + 0.5) + var f : float = input.get_value(uv) + + return Vector2(f, 0) + +#offset +func get_offset() -> float: + return offset + +func set_offset(val : float) -> void: + offset = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_rounded.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_rounded.gd new file mode 100644 index 0000000..338c510 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_rounded.gd @@ -0,0 +1,61 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource +export(Resource) var output : Resource +export(float) var radius : float = 0.15 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input.slot_name = ">>> Input " + if !input.is_connected("changed", self, "on_input_changed"): + input.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + var v : Vector2 = input.get_value_sdf3d(uv3) + + #vec2($(name_uv)_v.x-$r, $(name_uv)_v.y) + + v.x -= radius + + return v + + +#radius +func get_radius() -> float: + return radius + +func set_radius(val : float) -> void: + radius = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_smooth_bool.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_smooth_bool.gd new file mode 100644 index 0000000..01e03fe --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_op_smooth_bool.gd @@ -0,0 +1,91 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input1 : Resource +export(Resource) var input2 : Resource +export(Resource) var output : Resource +export(int, "Union,Substraction,Intersection") var operation : int = 0 +export(float) var smoothness : float = 0.15 + +func _init_properties(): + if !input1: + input1 = MMNodeUniversalProperty.new() + input1.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input1.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input1.slot_name = ">>> Input 1 " + + if !input1.is_connected("changed", self, "on_input_changed"): + input1.connect("changed", self, "on_input_changed") + + if !input2: + input2 = MMNodeUniversalProperty.new() + input2.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input2.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input2.slot_name = ">>> Input 2 " + + if !input2.is_connected("changed", self, "on_input_changed"): + input2.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input1) + register_input_property(input2) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input1) + mm_graph_node.add_slot_label_universal(input2) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_enum("get_operation", "set_operation", "Operation", [ "Union", "Substraction", "Intersection" ]) + mm_graph_node.add_slot_float("get_smoothness", "set_smoothness", "Smoothness", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + var s1 : Vector2 = input1.get_value_sdf3d(uv3) + var s2 : Vector2 = input2.get_value_sdf3d(uv3) + + if operation == 0: + return SDF3D.sdf3d_smooth_union(s1, s2, smoothness) + elif operation == 1: + return SDF3D.sdf3d_smooth_subtraction(s1, s2, smoothness) + elif operation == 2: + return SDF3D.sdf3d_smooth_intersection(s1, s2, smoothness) + + return Vector2() + +#operation +func get_operation() -> int: + return operation + +func set_operation(val : int) -> void: + operation = val + + emit_changed() + output.emit_changed() + +#smoothness +func get_smoothness() -> float: + return smoothness + +func set_smoothness(val : float) -> void: + smoothness = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_render.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_render.gd new file mode 100644 index 0000000..4bd2918 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_render.gd @@ -0,0 +1,179 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource + +export(Resource) var out_height_map : Resource +export(Resource) var out_normal_map : Resource +export(Resource) var out_color_map : Resource + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + #for some reason this doesn't work, todo check +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = "Input" + + if !out_height_map: + out_height_map = MMNodeUniversalProperty.new() + out_height_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_height_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_normal_map: + out_normal_map = MMNodeUniversalProperty.new() + out_normal_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_normal_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !out_color_map: + out_color_map = MMNodeUniversalProperty.new() + out_color_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + out_color_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(out_height_map) + register_output_property(out_normal_map) + register_output_property(out_color_map) + register_input_property(input) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(out_height_map) + mm_graph_node.add_slot_texture_universal(out_normal_map) + mm_graph_node.add_slot_texture_universal(out_color_map) + + +func _render(material) -> void: + var height_map : Image = Image.new() + var normal_map : Image = Image.new() + var color_map : Image = Image.new() + + height_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + normal_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + color_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + + height_map.lock() + normal_map.lock() + color_map.lock() + + var w : float = material.image_size.x + var h : float = material.image_size.y + + var pseed : float = randf() + randi() + + for x in range(material.image_size.x): + for y in range(material.image_size.y): + var uv : Vector2 = Vector2(x / w, y / h) + + var raymarch : Vector2 = sdf3d_raymarch(uv) + + #HeightMap - float - The generated height map + #1.0-$(name_uv)_d.x + var hmf : float = 1.0 - raymarch.x + var height_map_col : Color = Color(hmf, hmf, hmf, 1) + + #NormalMap - rgb - The generated normal map + #vec3(0.5) + 0.5* normal_$name(vec3($uv-vec2(0.5), 1.0-$(name_uv)_d.x)) + var nuv : Vector2 = uv - Vector2(0.5, 0.5) + var n : Vector3 = sdf3d_normal(Vector3(nuv.x, nuv.y, 1.0 - raymarch.x)) + var nn : Vector3 = Vector3(0.5, 0.5, 0.5) + 0.5 * n + + var normal_map_col : Color = Color(nn.x, nn.y, nn.z, 1) + + #ColorMap - float - The generated color index map + #$(name_uv)_d.y + var color_map_col : Color = Color(raymarch.y, raymarch.y, raymarch.y, 1) + + height_map.set_pixel(x, y, height_map_col) + normal_map.set_pixel(x, y, normal_map_col) + color_map.set_pixel(x, y, color_map_col) + + height_map.unlock() + normal_map.unlock() + color_map.unlock() + + out_height_map.set_value(height_map) + out_normal_map.set_value(normal_map) + out_color_map.set_value(color_map) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return Color() + +#vec2 raymarch_$name(vec2 uv) { +# vec3 ro = vec3(uv-vec2(0.5), 1.0); +# vec3 rd = vec3(0.0, 0.0, -1.0); +# float dO = 0.0; +# float c = 0.0; +# +# for (int i=0; i < 100; i++) { +# vec3 p = ro + rd*dO; +# vec2 dS = $sdf(p); +# dO += dS.x; +# +# if (dO >= 1.0) { +# break; +# } else if (dS.x < 0.0001) { +# c = dS.y; +# break; +# } +# } +# +# return vec2(dO, c); +#} + +func sdf3d_raymarch(uv : Vector2) -> Vector2: + var ro : Vector3 = Vector3(uv.x - 0.5, uv.y - 0.5, 1.0); + var rd : Vector3 = Vector3(0.0, 0.0, -1.0); + var dO : float = 0.0; + var c : float = 0.0; + + for i in range(100): + var p : Vector3 = ro + rd * dO; + var dS : Vector2 = input.get_value_sdf3d(p) + + dO += dS.x; + + if (dO >= 1.0): + break; + elif (dS.x < 0.0001): + c = dS.y; + break; + + return Vector2(dO, c); + +#vec3 normal_$name(vec3 p) { +# if (p.z <= 0.0) { +# return vec3(0.0, 0.0, 1.0); +# } +# +# float d = $sdf(p).x; +# float e = .001; +# vec3 n = d - vec3( +# $sdf(p-vec3(e, 0.0, 0.0)).x, +# $sdf(p-vec3(0.0, e, 0.0)).x, +# $sdf(p-vec3(0.0, 0.0, e)).x); +# +# return vec3(-1.0, -1.0, -1.0)*normalize(n); +#} + +func sdf3d_normal(p : Vector3) -> Vector3: + if (p.z <= 0.0): + return Vector3(0.0, 0.0, 1.0); + + var d : float = input.get_value_sdf3d(p).x + var e : float = .001; + + var n : Vector3 = Vector3( + d - input.get_value_sdf3d(p - Vector3(e, 0.0, 0.0)).x, + d - input.get_value_sdf3d(p - Vector3(0.0, e, 0.0)).x, + d - input.get_value_sdf3d(p - Vector3(0.0, 0.0, e)).x) + + return Vector3(-1.0, -1.0, -1.0) * n.normalized() + diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_box.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_box.gd new file mode 100644 index 0000000..3711c3c --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_box.gd @@ -0,0 +1,49 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var output : Resource +export(Vector3) var size : Vector3 = Vector3(0.3, 0.25, 0.25) +export(float) var radius : float = 0.01 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector3("get_size", "set_size", "Size", 0.01) + mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + return SDF3D.sdf3d_box(uv3, size.x, size.y, size.z, radius) + +#size +func get_size() -> Vector3: + return size + +func set_size(val : Vector3) -> void: + size = val + + emit_changed() + output.emit_changed() + +#radius +func get_radius() -> float: + return radius + +func set_radius(val : float) -> void: + radius = val + + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_capsule.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_capsule.gd new file mode 100644 index 0000000..138f881 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_capsule.gd @@ -0,0 +1,111 @@ +tool +extends "res://addons/mat_maker_gd/nodes/bases/curve_base.gd" + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") +var Curves = preload("res://addons/mat_maker_gd/nodes/common/curves.gd") + +export(Resource) var output : Resource +export(int, "X,Y,Z") var axis : int = 1 +export(float) var length : float = 0.3 +export(float) var radius : float = 0.2 + +func _init(): + init_points_11() + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_enum("get_axis", "set_axis", "Axis", [ "X", "Y", "Z" ]) + mm_graph_node.add_slot_float("get_length", "set_length", "Length", 0.01) + mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01) + mm_graph_node.add_slot_curve() + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + if axis == 0: + return sdf3d_capsule_x(uv3, radius, length) + elif axis == 1: + return sdf3d_capsule_y(uv3, radius, length) + elif axis == 2: + return sdf3d_capsule_z(uv3, radius, length) + + return Vector2() + +#vec3 $(name_uv)_p = $uv; +#$(name_uv)_p.$axis -= clamp($(name_uv)_p.$axis, -$l, $l); +#return length($(name_uv)_p) - $r * $profile(clamp(0.5+0.5*($uv).$axis/$l, 0.0, 1.0)) + +func sdf3d_capsule_y(p : Vector3, r : float, l : float) -> Vector2: + var v : Vector3 = p; + v.y -= clamp(v.y, -l, l); + + var cx : float = clamp(0.5 + 0.5 * p.y / l, 0.0, 1.0) + var cp : float = Curves.curve(cx, points) + var f : float = v.length() - r * cp + + return Vector2(f, 0.0); + +func sdf3d_capsule_x(p : Vector3, r : float, l : float) -> Vector2: + var v : Vector3 = p; + v.x -= clamp(v.x, -l, l); + + var cx : float = clamp(0.5 + 0.5 * p.x / l, 0.0, 1.0) + var cp : float = Curves.curve(cx, points) + var f : float = v.length() - r * cp + + return Vector2(f, 0.0); + +func sdf3d_capsule_z(p : Vector3, r : float, l : float) -> Vector2: + var v : Vector3 = p; + v.z -= clamp(v.z, -l, l); + + var cx : float = clamp(0.5 + 0.5 * p.z / l, 0.0, 1.0) + var cp : float = Curves.curve(cx, points) + var f : float = v.length() - r * cp + + return Vector2(f, 0.0); + +#axis +func get_axis() -> int: + return axis + +func set_axis(val : int) -> void: + axis = val + + emit_changed() + output.emit_changed() + +#length +func get_length() -> float: + return length + +func set_length(val : float) -> void: + length = val + + emit_changed() + output.emit_changed() + +#radius +func get_radius() -> float: + return radius + +func set_radius(val : float) -> void: + radius = val + + emit_changed() + output.emit_changed() + +func _curve_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cone.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cone.gd new file mode 100644 index 0000000..9151b46 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cone.gd @@ -0,0 +1,63 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var output : Resource +export(int, "+X,-X,+Y,-Y,+Z,-Z") var axis : int = 2 +export(float) var angle : float = 30 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_enum("get_axis", "set_axis", "Axis", [ "+X", "-X", "+Y", "-Y", "+Z", "-Z" ]) + mm_graph_node.add_slot_float("get_angle", "set_angle", "Angle", 1) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + if axis == 0: + return SDF3D.sdf3d_cone_px(uv3, angle) + elif axis == 1: + return SDF3D.sdf3d_cone_nx(uv3, angle) + elif axis == 2: + return SDF3D.sdf3d_cone_py(uv3, angle) + elif axis == 3: + return SDF3D.sdf3d_cone_ny(uv3, angle) + elif axis == 4: + return SDF3D.sdf3d_cone_pz(uv3, angle) + elif axis == 5: + return SDF3D.sdf3d_cone_nz(uv3, angle) + + return Vector2() + +#axis +func get_axis() -> int: + return axis + +func set_axis(val : int) -> void: + axis = val + + emit_changed() + output.emit_changed() + +#angle +func get_angle() -> float: + return angle + +func set_angle(val : float) -> void: + angle = val + + emit_changed() + output.emit_changed() + diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cylinder.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cylinder.gd new file mode 100644 index 0000000..f13c3c2 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_cylinder.gd @@ -0,0 +1,68 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var output : Resource +export(int, "X,Y,Z") var axis : int = 1 +export(float) var length : float = 0.25 +export(float) var radius : float = 0.25 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_enum("get_axis", "set_axis", "Axis", [ "X", "Y", "Z" ]) + mm_graph_node.add_slot_float("get_length", "set_length", "Length", 0.01) + mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + if axis == 0: + return SDF3D.sdf3d_cylinder_x(uv3, radius, length) + elif axis == 1: + return SDF3D.sdf3d_cylinder_y(uv3, radius, length) + elif axis == 2: + return SDF3D.sdf3d_cylinder_z(uv3, radius, length) + + return Vector2() + +#axis +func get_axis() -> int: + return axis + +func set_axis(val : int) -> void: + axis = val + + emit_changed() + output.emit_changed() + +#length +func get_length() -> float: + return length + +func set_length(val : float) -> void: + length = val + + emit_changed() + output.emit_changed() + +#radius +func get_radius() -> float: + return radius + +func set_radius(val : float) -> void: + radius = val + + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_sphere.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_sphere.gd new file mode 100644 index 0000000..145206b --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_sphere.gd @@ -0,0 +1,37 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var output : Resource +export(float) var radius : float = 0.5 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + return SDF3D.sdf3d_sphere(uv3, radius) + +#radius +func get_radius() -> float: + return radius + +func set_radius(val : float) -> void: + radius = val + + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_torus.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_torus.gd new file mode 100644 index 0000000..682bba5 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_torus.gd @@ -0,0 +1,68 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var output : Resource +export(int, "X,Y,Z") var axis : int = 2 +export(float) var major_radius : float = 0.3 +export(float) var minor_radius : float = 0.15 + +func _init_properties(): + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_enum("get_axis", "set_axis", "Axis", [ "X", "Y", "Z" ]) + mm_graph_node.add_slot_float("get_major_radius", "set_major_radius", "Major_radius", 0.01) + mm_graph_node.add_slot_float("get_minor_radius", "set_minor_radius", "Minor_radius", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + if axis == 0: + return SDF3D.sdf3d_torus_x(uv3, major_radius, minor_radius) + elif axis == 1: + return SDF3D.sdf3d_torus_y(uv3, major_radius, minor_radius) + elif axis == 2: + return SDF3D.sdf3d_torus_z(uv3, major_radius, minor_radius) + + return Vector2() + +#axis +func get_axis() -> int: + return axis + +func set_axis(val : int) -> void: + axis = val + + emit_changed() + output.emit_changed() + +#major_radius +func get_major_radius() -> float: + return major_radius + +func set_major_radius(val : float) -> void: + major_radius = val + + emit_changed() + output.emit_changed() + +#minor_radius +func get_minor_radius() -> float: + return minor_radius + +func set_minor_radius(val : float) -> void: + minor_radius = val + + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_rotate.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_rotate.gd new file mode 100644 index 0000000..114056c --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_rotate.gd @@ -0,0 +1,57 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource +export(Resource) var output : Resource +export(Vector3) var rotation : Vector3 = Vector3() + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input.slot_name = ">>> Input " + + if !input.is_connected("changed", self, "on_input_changed"): + input.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector3("get_rotation", "set_rotation", "Rotation", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + #$in(rotate3d($uv, -vec3($ax, $ay, $az)*0.01745329251)) + + return input.get_value_sdf3d(SDF3D.rotate3d(uv3, -rotation * 0.01745329251)) + +#rotation +func get_rotation() -> Vector3: + return rotation + +func set_rotation(val : Vector3) -> void: + rotation = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_scale.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_scale.gd new file mode 100644 index 0000000..e29b633 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_scale.gd @@ -0,0 +1,56 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource +export(Resource) var output : Resource +export(float) var scale : float = 1 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input.slot_name = ">>> Input " + + if !input.is_connected("changed", self, "on_input_changed"): + input.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_float("get_scale", "set_scale", "Scale", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + #vec2 $(name_uv)_in = $in(($uv)/$s); + return input.get_value_sdf3d(uv3 / scale) + +#scale +func get_scale() -> float: + return scale + +func set_scale(val : float) -> void: + scale = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_translate.gd b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_translate.gd new file mode 100644 index 0000000..b166af9 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_tf_translate.gd @@ -0,0 +1,56 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd") + +export(Resource) var input : Resource +export(Resource) var output : Resource +export(Vector3) var translation : Vector3 = Vector3() + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL +# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_VECTOR2 + input.slot_name = ">>> Input " + + if !input.is_connected("changed", self, "on_input_changed"): + input.connect("changed", self, "on_input_changed") + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2 + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + output.slot_name = ">>> Output >>>" + output.get_value_from_owner = true + + register_input_property(input) + register_output_property(output) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(output) + + mm_graph_node.add_slot_vector3("get_translation", "set_translation", "Translation", 0.01) + +func get_property_value_sdf3d(uv3 : Vector3) -> Vector2: + #$in($uv-vec3($x, $y, $z)) + return input.get_value_sdf3d(uv3 - translation) + +#translation +func get_translation() -> Vector3: + return translation + +func set_translation(val : Vector3) -> void: + translation = val + + emit_changed() + output.emit_changed() + +func on_input_changed() -> void: + emit_changed() + output.emit_changed() diff --git a/game/addons/mat_maker_gd/nodes/simple/curve.gd b/game/addons/mat_maker_gd/nodes/simple/curve.gd new file mode 100644 index 0000000..c6ed800 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/simple/curve.gd @@ -0,0 +1,118 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf2d.gd") + +export(Resource) var image : Resource + +export(Resource) var input : Resource +export(Vector2) var a : Vector2 = Vector2(-0.35, -0.2) +export(Vector2) var b : Vector2 = Vector2(0, 0.5) +export(Vector2) var c : Vector2 = Vector2(0.35, -0.2) +export(float) var width : float = 0.05 +export(int) var repeat : int = 1 + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + input.set_default_value(1.0) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_label_universal(input) + + mm_graph_node.add_slot_vector2("get_a", "set_a", "A", 0.01) + mm_graph_node.add_slot_vector2("get_b", "set_b", "B", 0.01) + mm_graph_node.add_slot_vector2("get_c", "set_c", "C", 0.01) + mm_graph_node.add_slot_float("get_width", "set_width", "Width", 0.01) + mm_graph_node.add_slot_int("get_repeat", "set_repeat", "Repeat") + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var nuv : Vector2 = transform_uv(uv) + + var f : float = 0 + + if nuv.x != 0 && nuv.y != 0: + f = input.get_value(nuv) + + return Color(f, f, f, 1) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func transform_uv(uv : Vector2) -> Vector2: + #vec2 $(name_uv)_bezier = sdBezier($uv, vec2($ax+0.5, $ay+0.5), vec2($bx+0.5, $by+0.5), vec2($cx+0.5, $cy+0.5)); + var bezier : Vector2 = SDF2D.sdBezier(uv, Vector2(a.x + 0.5, a.y + 0.5), Vector2(b.x + 0.5, b.y + 0.5), Vector2(c.x + 0.5, c.y + 0.5)) + + #vec2 $(name_uv)_uv = vec2($(name_uv)_bezier.x, $(name_uv)_bezier.y / $width+0.5); + var new_uv : Vector2 = Vector2(bezier.x, bezier.y / width + 0.5) + + #vec2 $(name_uv)_uvtest = step(vec2(0.5), abs($(name_uv)_uv-vec2(0.5))); + var uv_test : Vector2 = Commons.stepv2(Vector2(0.5, 0.5), Commons.absv2(new_uv - Vector2(0.5, 0.5))) + + #$(name_uv)_uv = mix(vec2(fract($repeat*$(name_uv)_uv.x), $(name_uv)_uv.y), vec2(0.0), max($(name_uv)_uvtest.x, $(name_uv)_uvtest.y)); + var final_uv : Vector2 = lerp(Vector2(Commons.fract(repeat * new_uv.x), new_uv.y), Vector2(), max(uv_test.x, uv_test.y)) + + return final_uv + +#b +func get_a() -> Vector2: + return a + +func set_a(val : Vector2) -> void: + a = val + + set_dirty(true) + +#b +func get_b() -> Vector2: + return b + +func set_b(val : Vector2) -> void: + b = val + + set_dirty(true) + +#c +func get_c() -> Vector2: + return c + +func set_c(val : Vector2) -> void: + c = val + + set_dirty(true) + +#width +func get_width() -> float: + return width + +func set_width(val : float) -> void: + width = val + + set_dirty(true) + +#repeat +func get_repeat() -> int: + return repeat + +func set_repeat(val : int) -> void: + repeat = val + + set_dirty(true) + diff --git a/game/addons/mat_maker_gd/nodes/simple/image.gd b/game/addons/mat_maker_gd/nodes/simple/image.gd new file mode 100644 index 0000000..033a9eb --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/simple/image.gd @@ -0,0 +1,41 @@ +tool +extends MMNode + +export(Resource) var image : Resource +export(String) var image_path : String + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_image_path_universal(image, "get_image_path", "set_image_path") + +#func _render(material) -> void: +# var img : Image = render_image(material) +# +# image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return image.get_value(uv) + +func get_image_path() -> String: + return image_path + +func set_image_path(val : String) -> void: + image_path = val + + var img : Image = Image.new() + + if image_path && image_path != "": + img.load(image_path) + + image.set_value(img) + + set_dirty(true) + diff --git a/game/addons/mat_maker_gd/nodes/simple/shape.gd b/game/addons/mat_maker_gd/nodes/simple/shape.gd new file mode 100644 index 0000000..0104274 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/simple/shape.gd @@ -0,0 +1,101 @@ +tool +extends MMNode + +var Shapes = preload("res://addons/mat_maker_gd/nodes/common/shapes.gd") + +enum ShapeType { + SHAPE_TYPE_CIRCLE = 0, + SHAPE_TYPE_POLYGON = 1, + SHAPE_TYPE_STAR = 2, + SHAPE_TYPE_CURVED_STAR = 3, + SHAPE_TYPE_RAYS = 4, +} + +export(Resource) var image : Resource +export(int, "Circle,Polygon,Star,Curved Star,Rays") var shape_type : int = 0 +export(int) var sides : int = 6 +export(Resource) var radius : Resource +export(Resource) var edge : Resource + +func _init_properties(): + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !radius: + radius = MMNodeUniversalProperty.new() + radius.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + radius.set_default_value(0.34375) + + radius.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + radius.slot_name = "radius" + radius.value_step = 0.05 + + if !edge: + edge = MMNodeUniversalProperty.new() + edge.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + edge.set_default_value(0.2) + + edge.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + edge.slot_name = "edge" + edge.value_step = 0.05 + + register_input_property(radius) + register_input_property(edge) + + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_shape_typoe", "set_shape_typoe", "shape_type", [ "Circle", "Polygon", "Star", "Curved Star", "Rays" ]) + mm_graph_node.add_slot_int("get_sides", "set_sides", "sides")#, Vector2(1, 10)) + mm_graph_node.add_slot_float_universal(radius) + mm_graph_node.add_slot_float_universal(edge) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var c : float = 0 + + var rad : float = radius.get_value(uv) + var edg : float = edge.get_value(uv) + + if rad == 0: + rad = 0.0000001 + + if edg == 0: + edg = 0.0000001 + + if shape_type == ShapeType.SHAPE_TYPE_CIRCLE: + c = Shapes.shape_circle(uv, sides, rad, edg) + elif shape_type == ShapeType.SHAPE_TYPE_POLYGON: + c = Shapes.shape_polygon(uv, sides, rad, edg) + elif shape_type == ShapeType.SHAPE_TYPE_STAR: + c = Shapes.shape_star(uv, sides, rad, edg) + elif shape_type == ShapeType.SHAPE_TYPE_CURVED_STAR: + c = Shapes.shape_curved_star(uv, sides, rad, edg) + elif shape_type == ShapeType.SHAPE_TYPE_RAYS: + c = Shapes.shape_rays(uv, sides, rad, edg) + + return Color(c, c, c, 1) + +func get_shape_typoe() -> int: + return shape_type + +func set_shape_typoe(val : int) -> void: + shape_type = val + + set_dirty(true) + +func get_sides() -> int: + return sides + +func set_sides(val : int) -> void: + sides = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/transform/circle_map.gd b/game/addons/mat_maker_gd/nodes/transform/circle_map.gd new file mode 100644 index 0000000..fb8e710 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/circle_map.gd @@ -0,0 +1,70 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource + +export(float) var radius : float = 1 +export(int) var repeat : int = 1 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01) + mm_graph_node.add_slot_int("get_repeat", "set_repeat", "Repeat") + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #$in(vec2(fract($repeat*atan($uv.y-0.5, $uv.x-0.5)*0.15915494309), min(0.99999, 2.0/$radius*length($uv-vec2(0.5)))))", + + var nuv : Vector2 = Vector2(Commons.fractf(repeat*atan2(uv.y - 0.5, uv.x - 0.5) * 0.15915494309), min(0.99999, 2.0 / radius * (uv - Vector2(0.5, 0.5)).length())) + + return input.get_value(nuv) + +#radius +func get_radius() -> float: + return radius + +func set_radius(val : float) -> void: + radius = val + + if radius == 0: + radius = 0.000000001 + + set_dirty(true) + +#repeat +func get_repeat() -> int: + return repeat + +func set_repeat(val : int) -> void: + repeat = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/transform/color_tiler.gd b/game/addons/mat_maker_gd/nodes/transform/color_tiler.gd new file mode 100644 index 0000000..79e4765 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/color_tiler.gd @@ -0,0 +1,305 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +export(Resource) var input : Resource +export(Resource) var in_mask : Resource + +export(Resource) var output : Resource +export(Resource) var instance_map : Resource + +export(Vector2) var tile : Vector2 = Vector2(4, 4) +export(float) var overlap : float = 1 +export(int, "1,4,16") var select_inputs : int = 0 +export(Vector2) var scale : Vector2 = Vector2(0.5, 0.5) +export(float) var fixed_offset : float = 0 +export(float) var rnd_offset : float = 0.25 +export(float) var rnd_rotate : float = 45 +export(float) var rnd_scale : float = 0.2 +export(float) var rnd_opacity : float = 0 +export(bool) var variations : bool = false + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !in_mask: + in_mask = MMNodeUniversalProperty.new() + in_mask.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + in_mask.set_default_value(1) + + in_mask.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + in_mask.slot_name = ">>> Mask " + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !instance_map: + instance_map = MMNodeUniversalProperty.new() + instance_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + instance_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_input_property(input) + register_input_property(in_mask) + register_output_property(output) + register_output_property(instance_map) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(in_mask) + mm_graph_node.add_slot_texture_universal(output) + mm_graph_node.add_slot_texture_universal(instance_map) + + mm_graph_node.add_slot_vector2("get_tile", "set_tile", "Tile", 1) + mm_graph_node.add_slot_float("get_overlap", "set_overlap", "Overlap", 1) + mm_graph_node.add_slot_enum("get_select_inputs", "set_select_inputs", "Select inputs", [ "1", "4", "16" ]) + mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale", 0.01) + mm_graph_node.add_slot_float("get_fixed_offset", "set_fixed_offset", "Fixed Offset", 0.01) + mm_graph_node.add_slot_float("get_rnd_offset", "set_rnd_offset", "Rnd Offset", 0.01) + mm_graph_node.add_slot_float("get_rnd_rotate", "set_rnd_rotate", "Rnd Rotate", 0.1) + mm_graph_node.add_slot_float("get_rnd_scale", "set_rnd_scale", "Rnd Scale", 0.01) + mm_graph_node.add_slot_float("get_rnd_opacity", "set_rnd_opacity", "Rnd Opacity", 0.01) + #mm_graph_node.add_slot_bool("get_variations", "set_variations", "Variations") + +func _render(material) -> void: + var output_img : Image = Image.new() + var instance_map_img : Image = Image.new() + + output_img.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + instance_map_img.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + + output_img.lock() + instance_map_img.lock() + + var w : float = material.image_size.x + var h : float = material.image_size.y + + var pseed : float = randf() + randi() + + var ps : float = 1.0 / float(pseed) + + var ix : int = int(material.image_size.x) + var iy : int = int(material.image_size.y) + + for x in range(ix): + for y in range(iy): + var uv : Vector2 = Vector2(x / w, y / h) + + #vec3 $(name_uv)_random_color; + #vec4 $(name_uv)_tiled_output = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), vec2(float($seed)), $(name_uv)_random_color); + var rch : PoolColorArray = tiler_calc(uv, tile, overlap, Vector2(ps, ps)) + + output_img.set_pixel(x, y, rch[1]) + instance_map_img.set_pixel(x, y, rch[0]) + + output_img.unlock() + instance_map_img.unlock() + + output.set_value(output_img) + instance_map.set_value(instance_map_img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return Color() + +#tile +func get_tile() -> Vector2: + return tile + +func set_tile(val : Vector2) -> void: + tile = val + + set_dirty(true) + +#overlap +func get_overlap() -> float: + return overlap + +func set_overlap(val : float) -> void: + overlap = val + + set_dirty(true) + +#select_inputs +func get_select_inputs() -> int: + return select_inputs + +func set_select_inputs(val : int) -> void: + select_inputs = val + + set_dirty(true) + +#scale +func get_scale() -> Vector2: + return scale + +func set_scale(val : Vector2) -> void: + scale = val + + set_dirty(true) + +#fixed_offset +func get_fixed_offset() -> float: + return fixed_offset + +func set_fixed_offset(val : float) -> void: + fixed_offset = val + + set_dirty(true) + +#rnd_offset +func get_rnd_offset() -> float: + return rnd_offset + +func set_rnd_offset(val : float) -> void: + rnd_offset = val + + set_dirty(true) + + +#rnd_rotate +func get_rnd_rotate() -> float: + return rnd_rotate + +func set_rnd_rotate(val : float) -> void: + rnd_rotate = val + + set_dirty(true) + +#rnd_scale +func get_rnd_scale() -> float: + return rnd_scale + +func set_rnd_scale(val : float) -> void: + rnd_scale = val + + set_dirty(true) + +#rnd_opacity +func get_rnd_opacity() -> float: + return rnd_opacity + +func set_rnd_opacity(val : float) -> void: + rnd_opacity = val + + set_dirty(true) + +#variations +func get_variations() -> bool: + return variations + +func set_variations(val : bool) -> void: + variations = val + + set_dirty(true) + +#---------------------- +#color_tiler.mmg +#Tiles several occurences of an input image while adding randomness. + +#vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, vec2 _seed, out vec3 random_color) { +# vec4 c = vec4(0.0); +# vec3 rc = vec3(0.0); +# vec3 rc1; +# +# for (int dx = -overlap; dx <= overlap; ++dx) { +# for (int dy = -overlap; dy <= overlap; ++dy) { +# vec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5)); +# vec2 seed = rand2(pos+_seed); +# rc1 = rand3(seed); +# pos = fract(pos+vec2($fixed_offset/tile.x, 0.0)*floor(mod(pos.y*tile.y, 2.0))+$offset*seed/tile); +# float mask = $mask(fract(pos+vec2(0.5))); +# if (mask > 0.01) { +# vec2 pv = fract(uv - pos)-vec2(0.5); +# seed = rand2(seed); +# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251; +# float ca = cos(angle); +# float sa = sin(angle); +# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y); +# pv *= (seed.y-0.5)*2.0*$scale+1.0; +# pv /= vec2($scale_x, $scale_y); +# pv += vec2(0.5); +# pv = clamp(pv, vec2(0.0), vec2(1.0)); +# +# $select_inputs +# +# vec4 n = $in.variation(pv, $variations ? seed.x : 0.0); +# +# seed = rand2(seed); +# float na = n.a*mask*(1.0-$opacity*seed.x); +# float a = (1.0-c.a)*(1.0*na); +# +# c = mix(c, n, na); +# rc = mix(rc, rc1, n.a); +# } +# } +# } +# +# random_color = rc; +# return c; +#} + + +#select_inputs enum +#1, " " +#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" +#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" + +func tiler_calc(uv : Vector2, tile : Vector2, overlap : int, _seed : Vector2) -> PoolColorArray: + var c : Color = Color() + var rc : Vector3 = Vector3() + var rc1 : Vector3 = Vector3() + + for dx in range(-overlap, overlap): #for (int dx = -overlap; dx <= overlap; ++dx) { + for dy in range(-overlap, overlap): #for (int dy = -overlap; dy <= overlap; ++dy) { + var pos : Vector2 = Commons.fractv2((Commons.floorv2(uv * tile) + Vector2(dx, dy) + Vector2(0.5, 0.5)) / tile - Vector2(0.5, 0.5)) + var vseed : Vector2 = Commons.rand2(pos + _seed) + rc1 = Commons.rand3(vseed) + pos = Commons.fractv2(pos + Vector2(fixed_offset / tile.x, 0.0) * floor(Commons.modf(pos.y * tile.y, 2.0)) + rnd_offset * vseed / tile) + var mask : float = in_mask.get_value(Commons.fractv2(pos + Vector2(0.5, 0.5))) + + if (mask > 0.01): + var pv : Vector2 = Commons.fractv2(uv - pos) - Vector2(0.5, 0.5) + vseed = Commons.rand2(vseed) + var angle : float = (vseed.x * 2.0 - 1.0) * rnd_rotate * 0.01745329251 + var ca : float = cos(angle) + var sa : float = sin(angle) + pv = Vector2(ca * pv.x + sa * pv.y, -sa * pv.x + ca * pv.y) + pv *= (vseed.y-0.5) * 2.0 * rnd_scale + 1.0 + pv /= scale + pv += Vector2(0.5, 0.5) + pv = Commons.clampv2(pv, Vector2(), Vector2(1, 1)) + + #1, " " + #4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" + #16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" + + if select_inputs == 1: + pv = Commons.clampv2(0.5*(pv + Commons.floorv2(Commons.rand2(vseed)*2.0)), Vector2(), Vector2(1, 1)); + elif select_inputs == 2: + pv = Commons.clampv2(0.25*(pv + Commons.floorv2(Commons.rand2(vseed)*4.0)), Vector2(), Vector2(1, 1)); + +# vec4 n = $in.variation(pv, $variations ? seed.x : 0.0); + var n : Color = input.get_value(pv) * mask * (1.0 - rnd_opacity * vseed.x) + + vseed = Commons.rand2(vseed) + var na : float = n.a * mask * (1.0 - rnd_opacity * vseed.x) + var a : float = (1.0 - c.a) * (1.0 * na) + + c = lerp(c, n, na); + rc = lerp(rc, rc1, n.a); + + var pc : PoolColorArray = PoolColorArray() + pc.append(Color(rc.x, rc.y, rc.z, 1)) + pc.append(c) + + return pc diff --git a/game/addons/mat_maker_gd/nodes/transform/kaleidoscope.gd b/game/addons/mat_maker_gd/nodes/transform/kaleidoscope.gd new file mode 100644 index 0000000..a784f9b --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/kaleidoscope.gd @@ -0,0 +1,63 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(int) var count : int = 5 +export(float) var offset : float = 0 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_int("get_count", "set_count", "Count") + mm_graph_node.add_slot_float("get_offset", "set_offset", "Offset", 0.5) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #$i(kal_rotate($uv, $count, $offset)) + return input.get_value(Transforms.kal_rotate(uv, count, offset)) + +#count +func get_count() -> int: + return count + +func set_count(val : int) -> void: + count = val + + set_dirty(true) + +#offset +func get_offset() -> float: + return offset + +func set_offset(val : float) -> void: + offset = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/transform/mirror.gd b/game/addons/mat_maker_gd/nodes/transform/mirror.gd new file mode 100644 index 0000000..a0413e4 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/mirror.gd @@ -0,0 +1,69 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(int, "Horizontal,Vertical") var direction : int = 0 +export(float) var offset : float = 0 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_direction", "set_direction", "Direction", [ "Horizontal", "Vertical" ]) + mm_graph_node.add_slot_float("get_offset", "set_offset", "offset", 0.01) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #$i(uvmirror_$direction($uv, $offset)) + + if direction == 0: + return input.get_value(Transforms.uvmirror_h(uv, offset)) + elif direction == 1: + return input.get_value(Transforms.uvmirror_v(uv, offset)) + + return Color(0, 0, 0, 1) + +#direction +func get_direction() -> int: + return direction + +func set_direction(val : int) -> void: + direction = val + + set_dirty(true) + +#offset +func get_offset() -> float: + return offset + +func set_offset(val : float) -> void: + offset = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/transform/repeat.gd b/game/addons/mat_maker_gd/nodes/transform/repeat.gd new file mode 100644 index 0000000..5f0e387 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/repeat.gd @@ -0,0 +1,27 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +export(Resource) var input : Resource + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Apply >>>" + #input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR + input.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.get_value_from_owner = true + + register_input_property(input) + register_output_property(input) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + +func get_property_value(uv : Vector2): + return input.get_value(Commons.fractv2(uv), true) diff --git a/game/addons/mat_maker_gd/nodes/transform/rotate.gd b/game/addons/mat_maker_gd/nodes/transform/rotate.gd new file mode 100644 index 0000000..a2416a4 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/rotate.gd @@ -0,0 +1,63 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(Vector2) var center : Vector2 = Vector2() +export(float) var rotate : float = 0 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_vector2("get_center", "set_center", "Center", 0.01) + mm_graph_node.add_slot_float("get_rotate", "set_rotate", "Rotate", 0.1) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #$i(rotate($uv, vec2(0.5+$cx, 0.5+$cy), $rotate*0.01745329251)) + return input.get_value(Transforms.rotate(uv, center + Vector2(0.5, 0.5), rotate*0.01745329251)) + +#center +func get_center() -> Vector2: + return center + +func set_center(val : Vector2) -> void: + center = val + + set_dirty(true) + +#rotate +func get_rotate() -> float: + return rotate + +func set_rotate(val : float) -> void: + rotate = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/transform/scale.gd b/game/addons/mat_maker_gd/nodes/transform/scale.gd new file mode 100644 index 0000000..8f8d1e4 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/scale.gd @@ -0,0 +1,63 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(Vector2) var center : Vector2 = Vector2() +export(Vector2) var scale : Vector2 = Vector2(1, 1) + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_vector2("get_center", "set_center", "Center", 0.01) + mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale", 0.01) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #$i(scale($uv, vec2(0.5+$cx, 0.5+$cy), vec2($scale_x, $scale_y))) + return input.get_value(Transforms.scale(uv, center + Vector2(0.5, 0.5), scale)) + +#center +func get_center() -> Vector2: + return center + +func set_center(val : Vector2) -> void: + center = val + + set_dirty(true) + +#scale +func get_scale() -> Vector2: + return scale + +func set_scale(val : Vector2) -> void: + scale = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/transform/shear.gd b/game/addons/mat_maker_gd/nodes/transform/shear.gd new file mode 100644 index 0000000..98236ed --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/shear.gd @@ -0,0 +1,79 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(int, "Horizontal,Vertical") var direction : int = 0 +export(float) var amount : float = 1 +export(float) var center : float = 0 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_enum("get_direction", "set_direction", "Direction", [ "Horizontal", "Vertical" ]) + mm_graph_node.add_slot_float("get_amount", "set_amount", "Amount", 0.01) + mm_graph_node.add_slot_float("get_center", "set_center", "Center", 0.01) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #$in($uv+$amount*($uv.yx-vec2($center))*vec2($direction)) + + if direction == 0: + return input.get_value(uv + amount * (Vector2(uv.y, uv.x) - Vector2(center, center)) * Vector2(1, 0)) + elif direction == 1: + return input.get_value(uv + amount * (Vector2(uv.y, uv.x) - Vector2(center, center)) * Vector2(0, 1)) + + return Color(0, 0, 0, 1) + +#direction +func get_direction() -> int: + return direction + +func set_direction(val : int) -> void: + direction = val + + set_dirty(true) + +#amount +func get_amount() -> float: + return amount + +func set_amount(val : float) -> void: + amount = val + + set_dirty(true) + +#center +func get_center() -> float: + return center + +func set_center(val : float) -> void: + center = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/transform/tiler.gd b/game/addons/mat_maker_gd/nodes/transform/tiler.gd new file mode 100644 index 0000000..d6d75f3 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/tiler.gd @@ -0,0 +1,306 @@ +tool +extends MMNode + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +export(Resource) var input : Resource +export(Resource) var in_mask : Resource + +export(Resource) var output : Resource +export(Resource) var instance_map : Resource + +export(Vector2) var tile : Vector2 = Vector2(4, 4) +export(float) var overlap : float = 1 +export(int, "1,4,16") var select_inputs : int = 0 +export(Vector2) var scale : Vector2 = Vector2(0.5, 0.5) +export(float) var fixed_offset : float = 0 +export(float) var rnd_offset : float = 0.25 +export(float) var rnd_rotate : float = 45 +export(float) var rnd_scale : float = 0.2 +export(float) var rnd_value : float = 2 +export(bool) var variations : bool = false + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + input.set_default_value(0) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !in_mask: + in_mask = MMNodeUniversalProperty.new() + in_mask.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + in_mask.set_default_value(1) + + in_mask.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + in_mask.slot_name = ">>> Mask " + + if !output: + output = MMNodeUniversalProperty.new() + output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + if !instance_map: + instance_map = MMNodeUniversalProperty.new() + instance_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + instance_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + + register_input_property(input) + register_input_property(in_mask) + register_output_property(output) + register_output_property(instance_map) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_label_universal(in_mask) + mm_graph_node.add_slot_texture_universal(output) + mm_graph_node.add_slot_texture_universal(instance_map) + + mm_graph_node.add_slot_vector2("get_tile", "set_tile", "Tile", 1) + mm_graph_node.add_slot_float("get_overlap", "set_overlap", "Overlap", 1) + mm_graph_node.add_slot_enum("get_select_inputs", "set_select_inputs", "Select inputs", [ "1", "4", "16" ]) + mm_graph_node.add_slot_vector2("get_scale", "set_scale", "Scale", 0.01) + mm_graph_node.add_slot_float("get_fixed_offset", "set_fixed_offset", "Fixed Offset", 0.01) + mm_graph_node.add_slot_float("get_rnd_offset", "set_rnd_offset", "Rnd Offset", 0.01) + mm_graph_node.add_slot_float("get_rnd_rotate", "set_rnd_rotate", "Rnd Rotate", 0.1) + mm_graph_node.add_slot_float("get_rnd_scale", "set_rnd_scale", "Rnd Scale", 0.01) + mm_graph_node.add_slot_float("get_rnd_value", "set_rnd_value", "Rnd Value", 0.01) + #mm_graph_node.add_slot_bool("get_variations", "set_variations", "Variations") + +func _render(material) -> void: + var output_img : Image = Image.new() + var instance_map_img : Image = Image.new() + + output_img.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + instance_map_img.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8) + + output_img.lock() + instance_map_img.lock() + + var w : float = material.image_size.x + var h : float = material.image_size.y + + var pseed : float = randf() + randi() + + var ps : float = 1.0 / float(pseed) + + var ix : int = int(material.image_size.x) + var iy : int = int(material.image_size.y) + + for x in range(ix): + for y in range(iy): + var uv : Vector2 = Vector2(x / w, y / h) + + #vec4 $(name_uv)_rch = tiler_$(name)($uv, vec2($tx, $ty), int($overlap), vec2(float($seed))) + var rch : Color = tiler_calc(uv, tile, overlap, Vector2(ps, ps)) + + #Output, float, Shows the generated pattern + #$(name_uv)_rch.a + var output_img_col : Color = Color(rch.a, rch.a, rch.a, 1) + + #Instance map, rgb, Shows a random color for each instance of the input image + #$(name_uv)_rch.rgb + var instance_map_img_col : Color = Color(rch.r, rch.g, rch.b, 1) + + output_img.set_pixel(x, y, output_img_col) + instance_map_img.set_pixel(x, y, instance_map_img_col) + + output_img.unlock() + instance_map_img.unlock() + + output.set_value(output_img) + instance_map.set_value(instance_map_img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return Color() + +#tile +func get_tile() -> Vector2: + return tile + +func set_tile(val : Vector2) -> void: + tile = val + + set_dirty(true) + +#overlap +func get_overlap() -> float: + return overlap + +func set_overlap(val : float) -> void: + overlap = val + + set_dirty(true) + +#select_inputs +func get_select_inputs() -> int: + return select_inputs + +func set_select_inputs(val : int) -> void: + select_inputs = val + + set_dirty(true) + +#scale +func get_scale() -> Vector2: + return scale + +func set_scale(val : Vector2) -> void: + scale = val + + set_dirty(true) + +#fixed_offset +func get_fixed_offset() -> float: + return fixed_offset + +func set_fixed_offset(val : float) -> void: + fixed_offset = val + + set_dirty(true) + +#rnd_offset +func get_rnd_offset() -> float: + return rnd_offset + +func set_rnd_offset(val : float) -> void: + rnd_offset = val + + set_dirty(true) + + +#rnd_rotate +func get_rnd_rotate() -> float: + return rnd_rotate + +func set_rnd_rotate(val : float) -> void: + rnd_rotate = val + + set_dirty(true) + +#rnd_scale +func get_rnd_scale() -> float: + return rnd_scale + +func set_rnd_scale(val : float) -> void: + rnd_scale = val + + set_dirty(true) + +#rnd_value +func get_rnd_value() -> float: + return rnd_value + +func set_rnd_value(val : float) -> void: + rnd_value = val + + set_dirty(true) + +#variations +func get_variations() -> bool: + return variations + +func set_variations(val : bool) -> void: + variations = val + + set_dirty(true) + +#---------------------- +#tiler.mmg +#Tiles several occurences of an input image while adding randomness. + +#instance +#vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, vec2 _seed) { +# float c = 0.0; +# vec3 rc = vec3(0.0); +# vec3 rc1; +# for (int dx = -overlap; dx <= overlap; ++dx) { +# for (int dy = -overlap; dy <= overlap; ++dy) { +# vec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5)); +# vec2 seed = rand2(pos+_seed); +# rc1 = rand3(seed); +# pos = fract(pos+vec2($fixed_offset/tile.x, 0.0)*floor(mod(pos.y*tile.y, 2.0))+$offset*seed/tile); +# float mask = $mask(fract(pos+vec2(0.5))); +# +# if (mask > 0.01) { +# vec2 pv = fract(uv - pos)-vec2(0.5); +# seed = rand2(seed); +# float angle = (seed.x * 2.0 - 1.0) * $rotate * 0.01745329251; +# float ca = cos(angle); +# float sa = sin(angle); +# pv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y); +# pv *= (seed.y-0.5)*2.0*$scale+1.0; +# pv /= vec2($scale_x, $scale_y); +# pv += vec2(0.5); +# seed = rand2(seed); +# vec2 clamped_pv = clamp(pv, vec2(0.0), vec2(1.0)); +# if (pv.x != clamped_pv.x || pv.y != clamped_pv.y) { +# continue; +# } +# +# $select_inputs +# +# float c1 = $in.variation(pv, $variations ? seed.x : 0.0)*mask*(1.0-$value*seed.x); +# c = max(c, c1); +# rc = mix(rc, rc1, step(c, c1)); +# } +# } +# } +# +# return vec4(rc, c); +#} + +#select_inputs enum +#1, " " +#4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" +#16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" + +func tiler_calc(uv : Vector2, tile : Vector2, overlap : int, _seed : Vector2) -> Color: + var c : float = 0.0 + var rc : Vector3 = Vector3() + var rc1 : Vector3 = Vector3() + + for dx in range(-overlap, overlap): #for (int dx = -overlap; dx <= overlap; ++dx) { + for dy in range(-overlap, overlap): #for (int dy = -overlap; dy <= overlap; ++dy) { + var pos : Vector2 = Commons.fractv2((Commons.floorv2(uv * tile) + Vector2(dx, dy) + Vector2(0.5, 0.5)) / tile - Vector2(0.5, 0.5)) + var vseed : Vector2 = Commons.rand2(pos+_seed) + rc1 = Commons.rand3(vseed) + pos = Commons.fractv2(pos + Vector2(fixed_offset / tile.x, 0.0) * floor(Commons.modf(pos.y * tile.y, 2.0)) + rnd_offset * vseed / tile) + var mask : float = in_mask.get_value(Commons.fractv2(pos + Vector2(0.5, 0.5))) + + if (mask > 0.01): + var pv : Vector2 = Commons.fractv2(uv - pos) - Vector2(0.5, 0.5) + vseed = Commons.rand2(vseed) + var angle : float = (vseed.x * 2.0 - 1.0) * rnd_rotate * 0.01745329251 + var ca : float = cos(angle) + var sa : float = sin(angle) + pv = Vector2(ca * pv.x + sa * pv.y, -sa * pv.x + ca * pv.y) + pv *= (vseed.y-0.5) * 2.0 * rnd_scale + 1.0 + pv /= scale + pv += Vector2(0.5, 0.5) + vseed = Commons.rand2(vseed) + var clamped_pv : Vector2 = Commons.clampv2(pv, Vector2(), Vector2(1, 1)) + + if (pv.x != clamped_pv.x || pv.y != clamped_pv.y): + continue + + #1, " " + #4, "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));" + #16, "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));" + + if select_inputs == 1: + pv = Commons.clampv2(0.5*(pv + Commons.floorv2(Commons.rand2(vseed)*2.0)), Vector2(), Vector2(1, 1)); + elif select_inputs == 2: + pv = Commons.clampv2(0.25*(pv + Commons.floorv2(Commons.rand2(vseed)*4.0)), Vector2(), Vector2(1, 1)); + + #float c1 = $in.variation(pv, $variations ? vseed.x : 0.0) * mask * (1.0-$value*vseed.x) + var c1 : float = input.get_value(pv) * mask * (1.0 - rnd_value * vseed.x) + c = max(c, c1) + rc = lerp(rc, rc1, Commons.step(c, c1)) + + return Color(rc.x, rc.y, rc.z, c) + diff --git a/game/addons/mat_maker_gd/nodes/transform/transform.gd b/game/addons/mat_maker_gd/nodes/transform/transform.gd new file mode 100644 index 0000000..94aab52 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/transform.gd @@ -0,0 +1,132 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var Transforms = preload("res://addons/mat_maker_gd/nodes/common/transforms.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource + +export(Resource) var translate_x : Resource +export(Resource) var translate_y : Resource +export(Resource) var rotate : Resource +export(Resource) var scale_x : Resource +export(Resource) var scale_y : Resource +export(int, "Clamp,Repeat,Extend") var mode : int = 0 + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + if !translate_x: + translate_x = MMNodeUniversalProperty.new() + translate_x.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + translate_x.set_default_value(0) + translate_x.value_step = 0.01 + + translate_x.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + translate_x.slot_name = "Translate X" + + if !translate_y: + translate_y = MMNodeUniversalProperty.new() + translate_y.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + translate_y.set_default_value(0) + translate_y.value_step = 0.01 + + translate_y.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + translate_y.slot_name = "Translate Y" + + if !rotate: + rotate = MMNodeUniversalProperty.new() + rotate.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + rotate.set_default_value(0) + rotate.value_step = 0.01 + + rotate.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + rotate.slot_name = "Rotate" + + if !scale_x: + scale_x = MMNodeUniversalProperty.new() + scale_x.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + scale_x.set_default_value(1) + scale_x.value_step = 0.01 + + scale_x.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + scale_x.slot_name = "Scale X" + + if !scale_y: + scale_y = MMNodeUniversalProperty.new() + scale_y.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + scale_y.set_default_value(1) + scale_y.value_step = 0.01 + + scale_y.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + scale_y.slot_name = "Scale Y" + + register_input_property(input) + register_output_property(image) + register_input_property(translate_x) + register_input_property(translate_y) + register_input_property(rotate) + register_input_property(scale_x) + register_input_property(scale_y) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + + mm_graph_node.add_slot_float_universal(translate_x) + mm_graph_node.add_slot_float_universal(translate_y) + mm_graph_node.add_slot_float_universal(rotate) + mm_graph_node.add_slot_float_universal(scale_x) + mm_graph_node.add_slot_float_universal(scale_y) + + mm_graph_node.add_slot_enum("get_mode", "set_mode", "Mode", [ "Clamp", "Repeat", "Extend" ]) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #$i($mode(transform2($uv, vec2($translate_x*(2.0*$tx($uv)-1.0), $translate_y*(2.0*$ty($uv)-1.0)), $rotate*0.01745329251*(2.0*$r($uv)-1.0), vec2($scale_x*(2.0*$sx($uv)-1.0), $scale_y*(2.0*$sy($uv)-1.0)))))", + + #Mode: + #Clamp -> transform2_clamp + #Repeat -> fract + #Extend -> "" + + var tr : Vector2 = Vector2(translate_x.get_default_value() * (2.0 * translate_x.get_value_or_zero(uv) - 1.0), translate_y.get_default_value() *(2.0 * translate_y.get_value_or_zero(uv) - 1.0)) + var rot : float = rotate.get_default_value() * 0.01745329251*(2.0 * rotate.get_value_or_zero(uv) - 1.0) + var sc : Vector2 = Vector2(scale_x.get_default_value() *(2.0 * scale_x.get_value_or_zero(uv) - 1.0), scale_y.get_default_value() *(2.0 * scale_y.get_value_or_zero(uv) - 1.0)) + + var nuv : Vector2 = Transforms.transform2(uv, tr, rot, sc) + + if mode == 0: + nuv = Transforms.transform2_clamp(nuv) + elif mode == 1: + nuv = Commons.fractv2(nuv) + + return input.get_value(nuv) + +#mode +func get_mode() -> int: + return mode + +func set_mode(val : int) -> void: + mode = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/transform/translate.gd b/game/addons/mat_maker_gd/nodes/transform/translate.gd new file mode 100644 index 0000000..8c03d04 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/transform/translate.gd @@ -0,0 +1,51 @@ +tool +extends MMNode + +var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +export(Resource) var image : Resource +export(Resource) var input : Resource +export(Vector2) var translation : Vector2 = Vector2() + +func _init_properties(): + if !input: + input = MMNodeUniversalProperty.new() + input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + input.set_default_value(Color(0, 0, 0, 1)) + + input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL + input.slot_name = ">>> Input1 " + + if !image: + image = MMNodeUniversalProperty.new() + image.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE + + #image.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT + image.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE + #image.force_override = true + + register_input_property(input) + register_output_property(image) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_label_universal(input) + mm_graph_node.add_slot_texture_universal(image) + mm_graph_node.add_slot_vector2("get_translation", "set_translation", "Translation", 0.01) + +func _render(material) -> void: + var img : Image = render_image(material) + + image.set_value(img) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + #$i($uv-vec2($translate_x, $translate_y)) + return input.get_value(uv - translation) + +#translation +func get_translation() -> Vector2: + return translation + +func set_translation(val : Vector2) -> void: + translation = val + + set_dirty(true) diff --git a/game/addons/mat_maker_gd/nodes/uniform/greyscale_uniform.gd b/game/addons/mat_maker_gd/nodes/uniform/greyscale_uniform.gd new file mode 100644 index 0000000..c3bf2d6 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/uniform/greyscale_uniform.gd @@ -0,0 +1,25 @@ +tool +extends MMNode + +export(Resource) var uniform : Resource + +func _init_properties(): + if !uniform: + uniform = MMNodeUniversalProperty.new() + uniform.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_FLOAT + uniform.set_default_value(0.5) + uniform.slot_name = "Value (Color)" + uniform.value_step = 0.01 + uniform.value_range = Vector2(0, 1) + + uniform.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR + + register_output_property(uniform) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_float_universal(uniform) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + var f : float = uniform.get_value(uv) + + return Color(f, f, f, 1) diff --git a/game/addons/mat_maker_gd/nodes/uniform/uniform.gd b/game/addons/mat_maker_gd/nodes/uniform/uniform.gd new file mode 100644 index 0000000..dbd409a --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/uniform/uniform.gd @@ -0,0 +1,20 @@ +tool +extends MMNode + +export(Resource) var uniform : Resource + +func _init_properties(): + if !uniform: + uniform = MMNodeUniversalProperty.new() + uniform.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_COLOR + uniform.set_default_value(Color(1, 1, 1, 1)) + + uniform.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_COLOR + + register_output_property(uniform) + +func _register_methods(mm_graph_node) -> void: + mm_graph_node.add_slot_color_universal(uniform) + +func get_value_for(uv : Vector2, pseed : int) -> Color: + return uniform.get_value(uv) diff --git a/game/addons/mat_maker_gd/plugin.cfg b/game/addons/mat_maker_gd/plugin.cfg new file mode 100644 index 0000000..0431311 --- /dev/null +++ b/game/addons/mat_maker_gd/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="mat_maker_gd" +description="" +author="Relintai" +version="" +script="plugin.gd" diff --git a/game/addons/mat_maker_gd/plugin.gd b/game/addons/mat_maker_gd/plugin.gd new file mode 100644 index 0000000..c3b47e1 --- /dev/null +++ b/game/addons/mat_maker_gd/plugin.gd @@ -0,0 +1,66 @@ +tool +extends EditorPlugin + +var MMNode = preload("res://addons/mat_maker_gd/nodes/mm_node.gd") +var MMMaterial = preload("res://addons/mat_maker_gd/nodes/mm_material.gd") +var MMNodeUniversalProperty = preload("res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd") + +var editor_packed_scene = preload("res://addons/mat_maker_gd/editor/MatMakerGDEditor.tscn") +var editor_scene = null + +var tool_button : ToolButton = null + +func _enter_tree(): + add_custom_type("MMNode", "Resource", MMNode, null) + add_custom_type("MMMaterial", "Resource", MMMaterial, null) + add_custom_type("MMNodeUniversalProperty", "Resource", MMNodeUniversalProperty, null) + + editor_scene = editor_packed_scene.instance() + + tool_button = add_control_to_bottom_panel(editor_scene, "MMGD") + tool_button.hide() + +func _exit_tree(): + remove_custom_type("MMNode") + remove_custom_type("MMMaterial") + remove_custom_type("MMNodeUniversalProperty") + + remove_control_from_bottom_panel(editor_scene) + + if editor_scene: + editor_scene.queue_free() + + editor_scene = null + tool_button = null + +func handles(object): + return object is MMMateial + +func edit(object): + #if editor_scene: + # make_bottom_panel_item_visible(editor_scene) + + if object is MMMateial: + editor_scene.set_mmmaterial(object as MMMateial) + +func make_visible(visible): + if tool_button: + if visible: + tool_button.show() + else: + #if tool_button.pressed: + # tool_button.pressed = false + + if !tool_button.pressed: + tool_button.hide() + +func get_plugin_icon(): + return null + +func get_plugin_name(): + return "MatMakerGD" + +func has_main_screen(): + return false + + diff --git a/game/addons/mat_maker_gd/widgets/color_picker_button/color_picker_button.gd b/game/addons/mat_maker_gd/widgets/color_picker_button/color_picker_button.gd new file mode 100644 index 0000000..cf0e819 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/color_picker_button/color_picker_button.gd @@ -0,0 +1,16 @@ +tool +extends ColorPickerButton + +func get_drag_data(_position): + var preview = ColorRect.new() + preview.color = color + preview.rect_min_size = Vector2(32, 32) + set_drag_preview(preview) + return color + +func can_drop_data(_position, data) -> bool: + return typeof(data) == TYPE_COLOR + +func drop_data(_position, data) -> void: + color = data + emit_signal("color_changed", color) diff --git a/game/addons/mat_maker_gd/widgets/color_picker_popup/color_picker_popup.tscn b/game/addons/mat_maker_gd/widgets/color_picker_popup/color_picker_popup.tscn new file mode 100644 index 0000000..c4003f3 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/color_picker_popup/color_picker_popup.tscn @@ -0,0 +1,14 @@ +[gd_scene format=2] + +[node name="ColorPickerPopup" type="PopupPanel"] +margin_right = 316.0 +margin_bottom = 470.0 + +[node name="ColorPicker" type="ColorPicker" parent="."] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 312.0 +margin_bottom = 466.0 +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/control_point.gd b/game/addons/mat_maker_gd/widgets/curve_edit/control_point.gd new file mode 100644 index 0000000..5fd5e48 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/control_point.gd @@ -0,0 +1,70 @@ +tool +extends Control + +var MMCurve = preload("res://addons/mat_maker_gd/nodes/bases/curve_base.gd") + +var moving : bool = false + +var min_x : float +var max_x : float +var min_y : float +var max_y : float + +const OFFSET : Vector2 = Vector2(3, 3) + +signal moved(index) +signal removed(index) + +func _ready(): + pass # Replace with function body. + +func _draw(): +# var current_theme : Theme = get_node("/root/MainWindow").theme +# var color : Color = current_theme.get_color("font_color", "Label") + + var color : Color = Color(1, 1, 1, 1) + for c in get_children(): + if c.visible: + draw_line(OFFSET, c.rect_position+OFFSET, color) + + draw_rect(Rect2(0, 0, 7, 7), color) + +#p : MMCurve.Point +func initialize(p) -> void: + rect_position = get_parent().transform_point(p.p)-OFFSET + if p.ls != INF: + $LeftSlope.rect_position = $LeftSlope.distance*(get_parent().rect_size*Vector2(1.0, -p.ls)).normalized() + if p.rs != INF: + $RightSlope.rect_position = $RightSlope.distance*(get_parent().rect_size*Vector2(1.0, -p.rs)).normalized() + +func set_constraint(x : float, X : float, y : float, Y : float) -> void: + min_x = x + max_x = X + min_y = y + max_y = Y + +func _on_ControlPoint_gui_input(event): + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT: + if event.pressed: + moving = true + else: + moving = false + get_parent().update_controls() + elif event.button_index == BUTTON_RIGHT and event.pressed: + emit_signal("removed", get_index()) + elif moving and event is InputEventMouseMotion: + rect_position += event.relative + if rect_position.x < min_x: + rect_position.x = min_x + elif rect_position.x > max_x: + rect_position.x = max_x + if rect_position.y < min_y: + rect_position.y = min_y + elif rect_position.y > max_y: + rect_position.y = max_y + emit_signal("moved", get_index()) + +func update_tangents() -> void: + update() + emit_signal("moved", get_index()) diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/control_point.tscn b/game/addons/mat_maker_gd/widgets/curve_edit/control_point.tscn new file mode 100644 index 0000000..03bfd28 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/control_point.tscn @@ -0,0 +1,39 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/slope_point.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/control_point.gd" type="Script" id=2] + +[node name="ControlPoint" type="Control"] +margin_left = 56.9864 +margin_top = 33.8615 +margin_right = 63.9864 +margin_bottom = 40.8615 +rect_min_size = Vector2( 7, 7 ) +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="LeftSlope" type="Control" parent="."] +margin_left = -18.5235 +margin_right = -11.5235 +margin_bottom = 7.0 +rect_min_size = Vector2( 7, 7 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +distance = -30.0 + +[node name="RightSlope" type="Control" parent="."] +margin_left = 15.6919 +margin_right = 22.6919 +margin_bottom = 7.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +distance = 30.0 +[connection signal="gui_input" from="." to="." method="_on_ControlPoint_gui_input"] +[connection signal="gui_input" from="LeftSlope" to="LeftSlope" method="_on_ControlPoint_gui_input"] +[connection signal="gui_input" from="RightSlope" to="RightSlope" method="_on_ControlPoint_gui_input"] diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.gd b/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.gd new file mode 100644 index 0000000..df8f79a --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.gd @@ -0,0 +1,37 @@ +tool +extends WindowDialog + +var MMCurve = preload("res://addons/mat_maker_gd/nodes/bases/curve_base.gd") + +var previous_points : Array +var curve + +signal curve_changed(curve) + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +func _on_CurveDialog_popup_hide(): + queue_free() + +func _on_OK_pressed(): + emit_signal("curve_changed", curve) + curve.curve_changed() + + queue_free() + +func _on_Cancel_pressed(): + curve.set_points(previous_points) + emit_signal("curve_changed", curve) + + queue_free() + +func edit_curve(c) -> void: + curve = c + previous_points = curve.get_points() + $VBoxContainer/EditorContainer/CurveEditor.set_curve(curve) + popup_centered() + +func _on_CurveEditor_value_changed(value): + emit_signal("curve_changed", value) diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.tscn b/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.tscn new file mode 100644 index 0000000..4898a89 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_dialog.tscn @@ -0,0 +1,81 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_editor.tscn" type="PackedScene" id=1] +[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_dialog.gd" type="Script" id=2] + +[node name="CurveDialog" type="WindowDialog"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 307.0 +margin_top = 151.0 +margin_right = -347.0 +margin_bottom = -174.0 +window_title = "Edit curve" +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 5.0 +margin_top = 5.0 +margin_right = -5.0 +margin_bottom = -5.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="EditorContainer" type="MarginContainer" parent="VBoxContainer"] +margin_right = 616.0 +margin_bottom = 353.0 +rect_clip_content = true +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_constants/margin_right = 4 +custom_constants/margin_top = 4 +custom_constants/margin_left = 4 +custom_constants/margin_bottom = 4 + +[node name="CurveEditor" parent="VBoxContainer/EditorContainer" instance=ExtResource( 1 )] +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 4.0 +margin_top = 4.0 +margin_right = 612.0 +margin_bottom = 349.0 +size_flags_vertical = 3 + +[node name="HSeparator" type="HSeparator" parent="VBoxContainer"] +margin_top = 357.0 +margin_right = 616.0 +margin_bottom = 361.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_top = 365.0 +margin_right = 616.0 +margin_bottom = 385.0 + +[node name="Control" type="Control" parent="VBoxContainer/HBoxContainer"] +margin_right = 488.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 + +[node name="OK" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 492.0 +margin_right = 552.0 +margin_bottom = 20.0 +rect_min_size = Vector2( 60, 0 ) +text = "OK" + +[node name="Cancel" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 556.0 +margin_right = 616.0 +margin_bottom = 20.0 +rect_min_size = Vector2( 60, 0 ) +text = "Cancel" +[connection signal="popup_hide" from="." to="." method="_on_CurveDialog_popup_hide"] +[connection signal="value_changed" from="VBoxContainer/EditorContainer/CurveEditor" to="." method="_on_CurveEditor_value_changed"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer/OK" to="." method="_on_OK_pressed"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer/Cancel" to="." method="_on_Cancel_pressed"] diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.gd b/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.gd new file mode 100644 index 0000000..885adbc --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.gd @@ -0,0 +1,24 @@ +tool +extends Control + +var MMCurve = preload("res://addons/mat_maker_gd/nodes/bases/curve_base.gd") + +var value = null setget set_value + +signal updated(curve) + +func set_value(v) -> void: + value = v + $CurveView.set_curve(value) + $CurveView.update() + +func _on_CurveEdit_pressed(): + var dialog = preload("res://addons/mat_maker_gd/widgets/curve_edit/curve_dialog.tscn").instance() + add_child(dialog) + dialog.connect("curve_changed", self, "on_value_changed") + dialog.edit_curve(value) + +func on_value_changed(v) -> void: + #set_value(v) + emit_signal("updated", v) + $CurveView.update() diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn b/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn new file mode 100644 index 0000000..9c018b5 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_edit.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn" type="PackedScene" id=2] + +[node name="CurveEdit" type="Button"] +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -1280.0 +margin_right = -1220.0 +margin_bottom = -700.0 +rect_min_size = Vector2( 60, 20 ) +focus_mode = 1 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="CurveView" parent="." instance=ExtResource( 2 )] + +[connection signal="pressed" from="." to="." method="_on_CurveEdit_pressed"] diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.gd b/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.gd new file mode 100644 index 0000000..abbe57f --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.gd @@ -0,0 +1,80 @@ +tool +extends "res://addons/mat_maker_gd/widgets/curve_edit/curve_view.gd" + +signal value_changed(value) + +func _ready(): + update_controls() + +func set_curve(c) -> void: + curve = c + update() + update_controls() + +func update_controls() -> void: + if !curve: + return + + for c in get_children(): + c.queue_free() + + var points = curve.get_points() + + for i in points.size(): + var p = points[i] + var control_point = preload("res://addons/mat_maker_gd/widgets/curve_edit/control_point.tscn").instance() + add_child(control_point) + control_point.initialize(p) + control_point.rect_position = transform_point(p.p)-control_point.OFFSET + + if i == 0 or i == points.size()-1: + control_point.set_constraint(control_point.rect_position.x, control_point.rect_position.x, -control_point.OFFSET.y, rect_size.y-control_point.OFFSET.y) + if i == 0: + control_point.get_child(0).visible = false + else: + control_point.get_child(1).visible = false + else: + var min_x = transform_point(points[i-1].p).x+1 + var max_x = transform_point(points[i+1].p).x-1 + control_point.set_constraint(min_x, max_x, -control_point.OFFSET.y, rect_size.y-control_point.OFFSET.y) + + control_point.connect("moved", self, "_on_ControlPoint_moved") + control_point.connect("removed", self, "_on_ControlPoint_removed") + + emit_signal("value_changed", curve) + +func _on_ControlPoint_moved(index): + var points : Array = curve.get_points() + + var control_point = get_child(index) + points[index].p = reverse_transform_point(control_point.rect_position+control_point.OFFSET) + + if control_point.has_node("LeftSlope"): + var slope_vector = control_point.get_node("LeftSlope").rect_position/rect_size + if slope_vector.x != 0: + points[index].ls = -slope_vector.y / slope_vector.x + + if control_point.has_node("RightSlope"): + var slope_vector = control_point.get_node("RightSlope").rect_position/rect_size + if slope_vector.x != 0: + points[index].rs = -slope_vector.y / slope_vector.x + + curve.set_points(points, false) + update() + emit_signal("value_changed", curve) + +func _on_ControlPoint_removed(index): + if curve.remove_point(index): + update() + update_controls() + +func _on_CurveEditor_gui_input(event): + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT and event.doubleclick: + var new_point_position = reverse_transform_point(get_local_mouse_position()) + curve.add_point(new_point_position.x, new_point_position.y, 0.0, 0.0) + update_controls() + +func _on_resize() -> void: + ._on_resize() + update_controls() diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.tscn b/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.tscn new file mode 100644 index 0000000..60d5c38 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_editor.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn" type="PackedScene" id=1] +[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_editor.gd" type="Script" id=2] + +[node name="CurveEditor" instance=ExtResource( 1 )] +margin_left = 10.0 +margin_top = 10.0 +margin_right = -10.0 +margin_bottom = -10.0 +mouse_filter = 0 +script = ExtResource( 2 ) +[connection signal="gui_input" from="." to="." method="_on_CurveEditor_gui_input"] diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.gd b/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.gd new file mode 100644 index 0000000..b6ea144 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.gd @@ -0,0 +1,70 @@ +tool +extends Control + +var MMCurve = preload("res://addons/mat_maker_gd/nodes/bases/curve_base.gd") + +export var show_axes : bool = false + +var curve #: MMCurve + +func _ready() -> void: +# curve = MMCurve.new() + connect("resized", self, "_on_resize") + update() + +func set_curve(val) -> void: + curve = val + update() + +func transform_point(p : Vector2) -> Vector2: + return (Vector2(0.0, 1.0)+Vector2(1.0, -1.0)*p)*rect_size + +func reverse_transform_point(p : Vector2) -> Vector2: + return Vector2(0.0, 1.0)+Vector2(1.0, -1.0)*p/rect_size + +func _draw(): + if !curve: + return + +# var current_theme : Theme = get_node("/root/MainWindow").theme +# +# var bg = current_theme.get_stylebox("panel", "Panel").bg_color +# var fg = current_theme.get_color("font_color", "Label") +# +# var axes_color : Color = bg.linear_interpolate(fg, 0.25) +# var curve_color : Color = bg.linear_interpolate(fg, 0.75) + + var axes_color : Color = Color(0.9, 0.9, 0.9, 1) + var curve_color : Color = Color(1, 1, 1, 1) + + if show_axes: + for i in range(5): + var p = transform_point(0.25*Vector2(i, i)) + draw_line(Vector2(p.x, 0), Vector2(p.x, rect_size.y-1), axes_color) + draw_line(Vector2(0, p.y), Vector2(rect_size.x-1, p.y), axes_color) + + var points = curve.get_points() + + for i in range(points.size() - 1): + var p1 = points[i].p + var p2 = points[i+1].p + var d = (p2.x-p1.x)/3.0 + var yac = p1.y+d*points[i].rs + var ybc = p2.y-d*points[i+1].ls + var p = transform_point(p1) + var count : int = max(1, int((transform_point(p2).x-p.x/5.0))) + + for tt in range(count): + var t = (tt+1.0)/count + var omt = (1.0 - t) + var omt2 = omt * omt + var omt3 = omt2 * omt + var t2 = t * t + var t3 = t2 * t + var x = p1.x+(p2.x-p1.x)*t + var np = transform_point(Vector2(x, p1.y*omt3 + yac*omt2*t*3.0 + ybc*omt*t2*3.0 + p2.y*t3)) + draw_line(p, np, curve_color) + p = np + +func _on_resize() -> void: + update() diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn b/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn new file mode 100644 index 0000000..ffae7ac --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_view.gd" type="Script" id=1] + +[node name="CurveView" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 4.0 +margin_top = 4.0 +margin_right = -4.0 +margin_bottom = -4.0 +mouse_filter = 2 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/addons/mat_maker_gd/widgets/curve_edit/slope_point.gd b/game/addons/mat_maker_gd/widgets/curve_edit/slope_point.gd new file mode 100644 index 0000000..bcbaa4e --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/curve_edit/slope_point.gd @@ -0,0 +1,49 @@ +tool +extends Control + +export var distance : float + +var moving = false + +const OFFSET = -Vector2(0, 0) + +func _ready(): + pass # Replace with function body. + +func _draw(): +# var current_theme : Theme = get_node("/root/MainWindow").theme +# var color : Color = current_theme.get_color("font_color", "Label") + + var color : Color = Color(1, 1, 1, 1) + + draw_circle(Vector2(3.0, 3.0), 3.0, color) + +func _on_ControlPoint_gui_input(event): + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT: + if event.pressed: + if event.doubleclick: + var parent = get_parent() + var vector : Vector2 + if get_index() == 0: + vector = parent.rect_position-parent.get_parent().get_child(parent.get_index()-1).rect_position + else: + vector = parent.get_parent().get_child(parent.get_index()+1).rect_position-parent.rect_position + vector = distance*vector.normalized() + rect_position = vector-OFFSET + if event.control: + get_parent().get_child(1-get_index()).rect_position = -vector-OFFSET + get_parent().update_tangents() + else: + moving = true + else: + moving = false + elif moving and event is InputEventMouseMotion: + var vector = get_global_mouse_position()-get_parent().get_global_rect().position+OFFSET + vector *= sign(vector.x) + vector = distance*vector.normalized() + rect_position = vector-OFFSET + if event.control: + get_parent().get_child(1-get_index()).rect_position = -vector-OFFSET + + get_parent().update_tangents() diff --git a/game/addons/mat_maker_gd/widgets/float_edit/float_edit.gd b/game/addons/mat_maker_gd/widgets/float_edit/float_edit.gd new file mode 100644 index 0000000..cdb73e5 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/float_edit/float_edit.gd @@ -0,0 +1,139 @@ +tool +extends LineEdit + +export var value : float = 0.5 setget set_value +export var min_value : float = 0.0 setget set_min_value +export var max_value : float = 1.0 setget set_max_value +export var step : float = 0.0 setget set_step +export var float_only : bool = false + +var sliding : bool = false +var start_position : float +var last_position : float +var start_value : float +var modifiers : int +var from_lower_bound : bool = false +var from_upper_bound : bool = false + +onready var slider = $Slider +onready var cursor = $Slider/Cursor + +signal value_changed(value) + +func _ready() -> void: + do_update() + +func set_value(v) -> void: + if v is float: + value = v + do_update() + $Slider.visible = true + elif v is String and !float_only: + text = v + $Slider.visible = false + +func set_min_value(v : float) -> void: + min_value = v + do_update() + +func set_max_value(v : float) -> void: + max_value = v + do_update() + +func set_step(v : float) -> void: + step = v + do_update() + +func do_update(update_text : bool = true) -> void: + if update_text and $Slider.visible: + text = str(value) + if cursor != null: + if max_value != min_value: + cursor.rect_position.x = (clamp(value, min_value, max_value)-min_value)*(slider.rect_size.x-cursor.rect_size.x)/(max_value-min_value) + else: + cursor.rect_position.x = 0 + +func get_modifiers(event): + var new_modifiers = 0 + if event.shift: + new_modifiers |= 1 + if event.control: + new_modifiers |= 2 + if event.alt: + new_modifiers |= 4 + return new_modifiers + +func _on_LineEdit_gui_input(event : InputEvent) -> void: + if !$Slider.visible or !editable: + return + if event is InputEventMouseButton and event.button_index == BUTTON_LEFT: + if event.is_pressed(): + last_position = event.position.x + start_position = last_position + start_value = value + sliding = true + from_lower_bound = value <= min_value + from_upper_bound = value >= max_value + modifiers = get_modifiers(event) + else: + sliding = false + elif sliding and event is InputEventMouseMotion and event.button_mask == BUTTON_MASK_LEFT: + var new_modifiers = get_modifiers(event) + if new_modifiers != modifiers: + start_position = last_position + start_value = value + modifiers = new_modifiers + else: + last_position = event.position.x + var delta : float = last_position-start_position + var current_step = step + if event.control: + delta *= 0.2 + elif event.shift: + delta *= 5.0 + if event.alt: + current_step *= 0.01 + var v : float = start_value+sign(delta)*pow(abs(delta)*0.005, 2)*abs(max_value - min_value) + if current_step != 0: + v = min_value+floor((v - min_value)/current_step)*current_step + if !from_lower_bound and v < min_value: + v = min_value + if !from_upper_bound and v > max_value: + v = max_value + set_value(v) + select(0, 0) + emit_signal("value_changed", value) + release_focus() + elif event is InputEventKey and !event.echo: + match event.scancode: + KEY_SHIFT, KEY_CONTROL, KEY_ALT: + start_position = last_position + start_value = value + modifiers = get_modifiers(event) + +func _on_LineEdit_text_changed(new_text : String) -> void: + if new_text.is_valid_float(): + value = new_text.to_float() + do_update(false) + +func _on_LineEdit_text_entered(new_text : String, release = true) -> void: + if new_text.is_valid_float(): + value = new_text.to_float() + do_update() + emit_signal("value_changed", value) + $Slider.visible = true + elif float_only: + do_update() + emit_signal("value_changed", value) + $Slider.visible = true + else: + emit_signal("value_changed", new_text) + $Slider.visible = false + if release: + release_focus() + +func _on_FloatEdit_focus_entered(): + select_all() + +func _on_LineEdit_focus_exited() -> void: + _on_LineEdit_text_entered(text, false) diff --git a/game/addons/mat_maker_gd/widgets/float_edit/float_edit.tscn b/game/addons/mat_maker_gd/widgets/float_edit/float_edit.tscn new file mode 100644 index 0000000..7f13ead --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/float_edit/float_edit.tscn @@ -0,0 +1,46 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/float_edit/float_edit.gd" type="Script" id=1] + +[node name="FloatEdit" type="LineEdit"] +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -1280.0 +margin_right = -1222.0 +margin_bottom = -696.0 +focus_mode = 1 +text = "0.5" +max_length = 100 +context_menu_enabled = false +caret_blink = true +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Slider" type="ColorRect" parent="."] +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 2.0 +margin_top = -3.0 +margin_right = -2.0 +margin_bottom = -3.0 +rect_min_size = Vector2( 0, 2 ) +mouse_filter = 2 +color = Color( 0.501961, 0.501961, 0.501961, 1 ) + +[node name="Cursor" type="ColorRect" parent="Slider"] +margin_right = 3.0 +margin_bottom = 1.0 +rect_min_size = Vector2( 3, 2 ) +mouse_filter = 2 + +[connection signal="focus_entered" from="." to="." method="_on_FloatEdit_focus_entered"] +[connection signal="focus_exited" from="." to="." method="_on_LineEdit_focus_exited"] +[connection signal="gui_input" from="." to="." method="_on_LineEdit_gui_input"] +[connection signal="resized" from="." to="." method="do_update"] +[connection signal="text_changed" from="." to="." method="_on_LineEdit_text_changed"] +[connection signal="text_entered" from="." to="." method="_on_LineEdit_text_entered"] +[connection signal="resized" from="Slider" to="." method="do_update"] diff --git a/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.gd b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.gd new file mode 100644 index 0000000..b12a420 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.gd @@ -0,0 +1,223 @@ +tool +extends Control + +class GradientCursor: + extends Control + + var color : Color + var sliding : bool = false + + onready var label : Label = get_parent().get_node("Value") + + const WIDTH : int = 10 + + func _ready() -> void: + rect_position = Vector2(0, 15) + rect_size = Vector2(WIDTH, 15) + + func _draw() -> void: +# warning-ignore:integer_division + var polygon : PoolVector2Array = PoolVector2Array([Vector2(0, 5), Vector2(WIDTH/2, 0), Vector2(WIDTH, 5), Vector2(WIDTH, 15), Vector2(0, 15), Vector2(0, 5)]) + var c = color + c.a = 1.0 + draw_colored_polygon(polygon, c) + draw_polyline(polygon, Color(0.0, 0.0, 0.0) if color.v > 0.5 else Color(1.0, 1.0, 1.0)) + + func _gui_input(ev) -> void: + if ev is InputEventMouseButton: + if ev.button_index == BUTTON_LEFT: + if ev.doubleclick: + get_parent().select_color(self, ev.global_position) + elif ev.pressed: + sliding = true + label.visible = true + label.text = "%.03f" % get_cursor_position() + else: + sliding = false + label.visible = false + elif ev.button_index == BUTTON_RIGHT and get_parent().get_sorted_cursors().size() > 2: + var parent = get_parent() + parent.remove_child(self) + parent.update_value() + queue_free() + elif ev is InputEventMouseMotion and (ev.button_mask & BUTTON_MASK_LEFT) != 0 and sliding: + rect_position.x += get_local_mouse_position().x + if ev.control: + rect_position.x = round(get_cursor_position()*20.0)*0.05*(get_parent().rect_size.x - WIDTH) + rect_position.x = min(max(0, rect_position.x), get_parent().rect_size.x-rect_size.x) + get_parent().update_value() + label.text = "%.03f" % get_cursor_position() + + func get_cursor_position() -> float: + return rect_position.x / (get_parent().rect_size.x - WIDTH) + + func set_color(c) -> void: + color = c + get_parent().update_value() + update() + + static func sort(a, b) -> bool: + return a.get_position() < b.get_position() + + func can_drop_data(_position, data) -> bool: + return typeof(data) == TYPE_COLOR + + func drop_data(_position, data) -> void: + set_color(data) + + +var value = null setget set_value +export var embedded : bool = true + +signal updated(value) + +func _init(): + connect("resized", self, "on_resized") + +#func get_gradient_from_data(data): +# if typeof(data) == TYPE_ARRAY: +# return data +# elif typeof(data) == TYPE_DICTIONARY: +# if data.has("parameters") and data.parameters.has("gradient"): +# return data.parameters.gradient +# if data.has("type") and data.type == "Gradient": +# return data +# return null + +#func get_drag_data(_position : Vector2): +# var data = 0#MMType.serialize_value(value) +# var preview = ColorRect.new() +# preview.rect_size = Vector2(64, 24) +# preview.material = $Gradient.material +# set_drag_preview(preview) +# return data +# +#func can_drop_data(_position : Vector2, data) -> bool: +# return get_gradient_from_data(data) != null +# +#func drop_data(_position : Vector2, data) -> void: +# var gradient = get_gradient_from_data(data) +# #if gradient != null: +# #set_value(MMType.deserialize_value(gradient)) + +func set_value(v) -> void: + value = v + + update_preview() + call_deferred("update_cursors") + +func update_cursors() -> void: + for c in get_children(): + if c is GradientCursor: + remove_child(c) + c.free() + + var vs : int = value.get_point_count() + + for i in range(vs): + add_cursor(value.get_point_value(i) * (rect_size.x-GradientCursor.WIDTH), value.get_point_color(i)) + + $Interpolation.selected = value.interpolation_type + +func update_value() -> void: + value.clear() + + var sc : Array = get_sorted_cursors() + + for c in sc: + value.add_point(c.rect_position.x/(rect_size.x-GradientCursor.WIDTH), c.color) + + update_preview() + +func add_cursor(x, color) -> void: + var cursor = GradientCursor.new() + add_child(cursor) + cursor.rect_position.x = x + cursor.color = color + +func _gui_input(ev) -> void: + if ev is InputEventMouseButton and ev.button_index == 1 and ev.doubleclick: + if ev.position.y > 15: + var p = clamp(ev.position.x, 0, rect_size.x-GradientCursor.WIDTH) + add_cursor(p, get_gradient_color(p)) + update_value() + elif embedded: + var popup = load("res://addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.tscn").instance() + add_child(popup) + var popup_size = popup.rect_size + popup.popup(Rect2(ev.global_position, Vector2(0, 0))) + popup.set_global_position(ev.global_position-Vector2(popup_size.x / 2, popup_size.y)) + popup.init(value) + popup.connect("updated", self, "set_value") + popup.connect("popup_hide", popup, "queue_free") + +# Showing a color picker popup to change a cursor's color + +var active_cursor + +func select_color(cursor, position) -> void: + active_cursor = cursor + var color_picker_popup = preload("res://addons/mat_maker_gd/widgets/color_picker_popup/color_picker_popup.tscn").instance() + add_child(color_picker_popup) + var color_picker = color_picker_popup.get_node("ColorPicker") + color_picker.color = cursor.color + color_picker.connect("color_changed", cursor, "set_color") + color_picker_popup.rect_position = position + color_picker_popup.connect("popup_hide", color_picker_popup, "queue_free") + color_picker_popup.popup() + +# Calculating a color from the gradient and generating the shader + +func get_sorted_cursors() -> Array: + var array = [] + for c in get_children(): + if c is GradientCursor: + array.append(c) + array.sort_custom(GradientCursor, "sort") + return array + +func generate_preview_image() -> void: + var tex : ImageTexture = $Gradient.texture + + if !tex: + tex = ImageTexture.new() + $Gradient.texture = tex + + var img : Image = tex.get_data() + + var w : float = $Gradient.rect_size.x + var h : float = $Gradient.rect_size.y + + if !img: + img = Image.new() + + if img.get_size().x != w || img.get_size().y != h: + img.create(w, h, false, Image.FORMAT_RGBA8) + + img.lock() + + for i in range(w): + var x : float = float(i) / float(w) + var col : Color = value.get_gradient_color(x) + + for j in range(h): + img.set_pixel(i, j, col) + + img.unlock() + + tex.create_from_image(img, 0) + +func get_gradient_color(x) -> Color: + return value.get_gradient_color(x / (rect_size.x - GradientCursor.WIDTH)) + +func update_preview() -> void: + call_deferred("generate_preview_image") + +func _on_Interpolation_item_selected(ID) -> void: + value.interpolation_type = ID + update_preview() + +func on_resized() -> void: + if value: + update_preview() + call_deferred("update_cursors") diff --git a/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn new file mode 100644 index 0000000..db3be48 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn @@ -0,0 +1,96 @@ +[gd_scene load_steps=10 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/icons/icons.tres" type="Texture" id=2] + +[sub_resource type="Shader" id=1] +code = "shader_type canvas_item; + +void fragment() { + COLOR = vec4(vec3(2.0*fract(0.5*(floor(0.12*FRAGCOORD.x)+floor(0.125*FRAGCOORD.y)))), 1.0); +}" + +[sub_resource type="ShaderMaterial" id=2] +shader = SubResource( 1 ) + +[sub_resource type="Theme" id=5] + +[sub_resource type="AtlasTexture" id=6] +flags = 7 +atlas = ExtResource( 2 ) +region = Rect2( 96, 0, 32, 16 ) + +[sub_resource type="AtlasTexture" id=7] +flags = 7 +atlas = ExtResource( 2 ) +region = Rect2( 64, 0, 32, 16 ) + +[sub_resource type="AtlasTexture" id=8] +flags = 7 +atlas = ExtResource( 2 ) +region = Rect2( 64, 16, 32, 16 ) + +[sub_resource type="AtlasTexture" id=9] +flags = 7 +atlas = ExtResource( 2 ) +region = Rect2( 96, 16, 32, 16 ) + +[node name="Control" type="Control"] +margin_right = 120.0 +margin_bottom = 30.0 +rect_min_size = Vector2( 120, 32 ) +focus_mode = 1 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Background" type="ColorRect" parent="."] +material = SubResource( 2 ) +anchor_right = 1.0 +margin_left = 4.0 +margin_right = -4.0 +margin_bottom = 15.0 +rect_min_size = Vector2( 112, 17 ) +mouse_filter = 2 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Gradient" type="TextureRect" parent="."] +anchor_right = 1.0 +margin_left = 4.0 +margin_right = -4.0 +margin_bottom = 15.0 +rect_min_size = Vector2( 112, 17 ) +mouse_filter = 2 +theme = SubResource( 5 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Interpolation" type="OptionButton" parent="."] +margin_left = 0.418457 +margin_top = -2.90374 +margin_right = 73.4185 +margin_bottom = 19.0963 +rect_scale = Vector2( 0.5, 0.5 ) +icon = SubResource( 6 ) +items = [ "", SubResource( 7 ), false, 0, null, "", SubResource( 6 ), false, 1, null, "", SubResource( 8 ), false, 2, null, "", SubResource( 9 ), false, 3, null ] +selected = 1 + +[node name="Value" type="Label" parent="."] +anchor_right = 1.0 +margin_top = -1.0 +margin_bottom = 14.0 +custom_colors/font_color = Color( 1, 1, 1, 1 ) +custom_colors/font_color_shadow = Color( 0, 0, 0, 1 ) +custom_constants/shadow_offset_x = 1 +custom_constants/shadow_offset_y = 1 +custom_constants/shadow_as_outline = 1 +align = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[connection signal="item_selected" from="Interpolation" to="." method="_on_Interpolation_item_selected"] diff --git a/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.gd b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.gd new file mode 100644 index 0000000..d45a20c --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.gd @@ -0,0 +1,13 @@ +tool +extends Popup + +signal updated(value) + +func init(value) -> void: + $Panel/Control.set_value(value) + +func _on_Control_updated(value) -> void: + emit_signal("updated", value) + +func _on_GradientPopup_popup_hide() -> void: + queue_free() diff --git a/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.tscn b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.tscn new file mode 100644 index 0000000..1b9c5b1 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/gradient_editor/gradient_popup.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn" type="PackedScene" id=2] + +[sub_resource type="StyleBoxFlat" id=1] +bg_color = Color( 0, 0, 0.25098, 0.752941 ) + +[node name="GradientPopup" type="Popup"] +margin_right = 632.0 +margin_bottom = 49.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +script = ExtResource( 1 ) + +[node name="Panel" type="Panel" parent="."] +margin_right = 632.0 +margin_bottom = 49.0 +custom_styles/panel = SubResource( 1 ) + +[node name="Control" parent="Panel" instance=ExtResource( 2 )] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 10.0 +margin_top = 10.0 +margin_right = -10.0 +margin_bottom = -10.0 +embedded = false + +[connection signal="popup_hide" from="." to="." method="_on_GradientPopup_popup_hide"] +[connection signal="updated" from="Panel/Control" to="." method="_on_Control_updated"] diff --git a/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.gd b/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.gd new file mode 100644 index 0000000..73072e1 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.gd @@ -0,0 +1,46 @@ +tool +extends TextureButton + + +var image_path = "" + + +signal on_file_selected(f) + + +func _ready(): + texture_normal = ImageTexture.new() + +func do_set_image_path(path) -> void: + if path == null: + return + image_path = path + + texture_normal.load(image_path) + +func set_image_path(path) -> void: + do_set_image_path(path) + emit_signal("on_file_selected", path) + +func _on_ImagePicker_pressed(): + var dialog = preload("res://addons/mat_maker_gd/windows/file_dialog/file_dialog.tscn").instance() + add_child(dialog) + dialog.rect_min_size = Vector2(500, 500) + dialog.access = FileDialog.ACCESS_FILESYSTEM + dialog.mode = FileDialog.MODE_OPEN_FILE + dialog.add_filter("*.bmp;BMP Image") + dialog.add_filter("*.exr;EXR Image") + dialog.add_filter("*.hdr;Radiance HDR Image") + dialog.add_filter("*.jpg,*.jpeg;JPEG Image") + dialog.add_filter("*.png;PNG Image") + dialog.add_filter("*.svg;SVG Image") + dialog.add_filter("*.tga;TGA Image") + dialog.add_filter("*.webp;WebP Image") + var files = dialog.select_files() + while files is GDScriptFunctionState: + files = yield(files, "completed") + if files.size() > 0: + set_image_path(files[0]) + +func on_drop_image_file(file_name : String) -> void: + set_image_path(file_name) diff --git a/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.tscn b/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.tscn new file mode 100644 index 0000000..e374a08 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/image_picker_button/image_picker_button.gd" type="Script" id=2] + +[sub_resource type="ImageTexture" id=1] + +[node name="ImagePicker" type="TextureButton"] +margin_right = 64.0 +margin_bottom = 64.0 +rect_min_size = Vector2( 64, 64 ) +rect_clip_content = true +texture_normal = SubResource( 1 ) +expand = true +stretch_mode = 5 +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[connection signal="pressed" from="." to="." method="_on_ImagePicker_pressed"] diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.gd b/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.gd new file mode 100644 index 0000000..156957f --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.gd @@ -0,0 +1,33 @@ +tool +extends Control + +var moving : bool = false + +const OFFSET : Vector2 = Vector2(3, 3) + +signal moved(index) +signal removed(index) + +func _draw(): +# var current_theme : Theme = get_node("/root/MainWindow").theme +# var color : Color = current_theme.get_color("font_color", "Label") + + var color : Color = Color(1, 1, 1, 1) + draw_rect(Rect2(0, 0, 7, 7), color) + +func initialize(p : Vector2) -> void: + rect_position = get_parent().transform_point(p) - OFFSET + +func _on_ControlPoint_gui_input(event): + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT: + if event.pressed: + moving = true + else: + moving = false + get_parent().update_controls() + elif event.button_index == BUTTON_RIGHT and event.pressed: + emit_signal("removed", get_index()) + elif moving and event is InputEventMouseMotion: + rect_position += event.relative + emit_signal("moved", get_index()) diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.tscn b/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.tscn new file mode 100644 index 0000000..2d445f3 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/polygon_edit/control_point.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/control_point.gd" type="Script" id=1] + +[node name="ControlPoint" type="Control"] +margin_left = 56.9864 +margin_top = 33.8615 +margin_right = 63.9864 +margin_bottom = 40.8615 +rect_min_size = Vector2( 7, 7 ) +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} +[connection signal="gui_input" from="." to="." method="_on_ControlPoint_gui_input"] diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.gd b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.gd new file mode 100644 index 0000000..da96c7a --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.gd @@ -0,0 +1,46 @@ +tool +extends WindowDialog + +export var closed : bool = true setget set_closed +var previous_points : PoolVector2Array +var polygon + +signal polygon_changed(polygon) + +func set_closed(c : bool = true): + closed = c + window_title = "Edit polygon" if closed else "Edit polyline" + $VBoxContainer/EditorContainer/PolygonEditor.set_closed(closed) + +func _on_CurveDialog_popup_hide(): +# emit_signal("return_polygon", null) + queue_free() + pass + +func _on_OK_pressed(): + emit_signal("polygon_changed", polygon) + polygon.polygon_changed() + + queue_free() + +func _on_Cancel_pressed(): + polygon.set_points(previous_points) + emit_signal("polygon_changed", polygon) + + queue_free() + +func edit_polygon(poly): + polygon = poly + previous_points = polygon.points + + $VBoxContainer/EditorContainer/PolygonEditor.set_polygon(polygon) + popup_centered() + + #var result = yield(self, "return_polygon") + + #queue_free() + + #return result + +func _on_PolygonEditor_value_changed(value): + emit_signal("polygon_changed", value) diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.tscn b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.tscn new file mode 100644 index 0000000..1bf6da5 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.tscn @@ -0,0 +1,81 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.tscn" type="PackedScene" id=1] +[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.gd" type="Script" id=2] + +[node name="PolygonDialog" type="WindowDialog"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 307.0 +margin_top = 151.0 +margin_right = -508.0 +margin_bottom = -70.0 +window_title = "Edit polygon" +script = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 5.0 +margin_top = 5.0 +margin_right = -5.0 +margin_bottom = -5.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="EditorContainer" type="MarginContainer" parent="VBoxContainer"] +margin_right = 455.0 +margin_bottom = 457.0 +rect_clip_content = true +size_flags_horizontal = 3 +size_flags_vertical = 3 +custom_constants/margin_right = 4 +custom_constants/margin_top = 4 +custom_constants/margin_left = 4 +custom_constants/margin_bottom = 4 + +[node name="PolygonEditor" parent="VBoxContainer/EditorContainer" instance=ExtResource( 1 )] +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 4.0 +margin_top = 4.0 +margin_right = 451.0 +margin_bottom = 453.0 + +[node name="HSeparator" type="HSeparator" parent="VBoxContainer"] +margin_top = 461.0 +margin_right = 455.0 +margin_bottom = 465.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +margin_top = 469.0 +margin_right = 455.0 +margin_bottom = 489.0 + +[node name="Control" type="Control" parent="VBoxContainer/HBoxContainer"] +margin_right = 327.0 +margin_bottom = 20.0 +size_flags_horizontal = 3 + +[node name="OK" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 331.0 +margin_right = 391.0 +margin_bottom = 20.0 +rect_min_size = Vector2( 60, 0 ) +text = "OK" + +[node name="Cancel" type="Button" parent="VBoxContainer/HBoxContainer"] +margin_left = 395.0 +margin_right = 455.0 +margin_bottom = 20.0 +rect_min_size = Vector2( 60, 0 ) +text = "Cancel" + +[connection signal="popup_hide" from="." to="." method="_on_CurveDialog_popup_hide"] +[connection signal="value_changed" from="VBoxContainer/EditorContainer/PolygonEditor" to="." method="_on_PolygonEditor_value_changed"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer/OK" to="." method="_on_OK_pressed"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer/Cancel" to="." method="_on_Cancel_pressed"] diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.gd b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.gd new file mode 100644 index 0000000..e8febfd --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.gd @@ -0,0 +1,34 @@ +tool +extends Control + +var MMPolygon = preload("res://addons/mat_maker_gd/nodes/bases/polygon_base.gd") + +export var closed : bool = true setget set_closed +var value = null setget set_value + +signal updated(polygon) + +func set_closed(c : bool = true): + closed = c + $PolygonView.set_closed(c) + +func set_value(v) -> void: + value = v + $PolygonView.set_polygon(value) + $PolygonView.update() + +func _on_PolygonEdit_pressed(): + var dialog = preload("res://addons/mat_maker_gd/widgets/polygon_edit/polygon_dialog.tscn").instance() + dialog.set_closed(closed) + add_child(dialog) + + dialog.connect("polygon_changed", self, "on_value_changed") + + dialog.edit_polygon(value) + + + +func on_value_changed(v) -> void: + #set_value(v) + emit_signal("updated", v) + $PolygonView.update() diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn new file mode 100644 index 0000000..ccea5f9 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn @@ -0,0 +1,26 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_view.tscn" type="PackedScene" id=2] + +[node name="PolygonEdit" type="Button"] +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -1280.0 +margin_right = -1248.0 +margin_bottom = -688.0 +rect_min_size = Vector2( 32, 32 ) +focus_mode = 1 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="PolygonView" parent="." instance=ExtResource( 2 )] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_right = 0.0 +margin_bottom = 0.0 + +[connection signal="pressed" from="." to="." method="_on_PolygonEdit_pressed"] diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.gd b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.gd new file mode 100644 index 0000000..90c9d01 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.gd @@ -0,0 +1,57 @@ +tool +extends "res://addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd" + +signal value_changed(value) + +func _ready(): + update_controls() + +func set_polygon(p) -> void: + polygon = p + update() + update_controls() + +func update_controls() -> void: + for c in get_children(): + c.queue_free() + + if !polygon: + return + + for i in polygon.points.size(): + var p = polygon.points[i] + var control_point = preload("res://addons/mat_maker_gd/widgets/polygon_edit/control_point.tscn").instance() + add_child(control_point) + control_point.initialize(p) + control_point.rect_position = transform_point(p)-control_point.OFFSET + control_point.connect("moved", self, "_on_ControlPoint_moved") + control_point.connect("removed", self, "_on_ControlPoint_removed") + + emit_signal("value_changed", polygon) + +func _on_ControlPoint_moved(index): + var control_point = get_child(index) + polygon.points[index] = reverse_transform_point(control_point.rect_position+control_point.OFFSET) + + update() + + emit_signal("value_changed", polygon) + +func _on_ControlPoint_removed(index): + if polygon.remove_point(index): + update() + update_controls() + +func _on_PolygonEditor_gui_input(event): + if !polygon: + return + + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT and event.doubleclick: + var new_point_position = reverse_transform_point(get_local_mouse_position()) + polygon.add_point(new_point_position.x, new_point_position.y, closed) + update_controls() + +func _on_resize() -> void: + ._on_resize() + update_controls() diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.tscn b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.tscn new file mode 100644 index 0000000..166b925 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/curve_edit/curve_view.tscn" type="PackedScene" id=1] +[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_editor.gd" type="Script" id=2] + +[node name="PolygonEditor" instance=ExtResource( 1 )] +margin_left = 10.0 +margin_top = 10.0 +margin_right = -10.0 +margin_bottom = -10.0 +mouse_filter = 0 +script = ExtResource( 2 ) + +[connection signal="gui_input" from="." to="." method="_on_PolygonEditor_gui_input"] diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd new file mode 100644 index 0000000..cf64af9 --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd @@ -0,0 +1,58 @@ +tool +extends Control + +var MMPolygon = preload("res://addons/mat_maker_gd/nodes/bases/polygon_base.gd") + +#: MMPolygon +var polygon + +var draw_size : Vector2 = Vector2(1, 1) +var draw_offset : Vector2 = Vector2(0, 0) +var closed : bool = true + +func set_closed(c : bool = true): + closed = c + update() + +func _ready() -> void: +# polygon = MMPolygon.new() + connect("resized", self, "_on_resize") + _on_resize() + +func transform_point(p : Vector2) -> Vector2: + return draw_offset+p*draw_size + +func reverse_transform_point(p : Vector2) -> Vector2: + return (p-draw_offset)/draw_size + +func set_polygon(val): + polygon = val + + update() + +func _draw(): + if !polygon: + return + +# var current_theme : Theme = get_node("/root/MainWindow").theme +# var bg = current_theme.get_stylebox("panel", "Panel").bg_color +# var fg = current_theme.get_color("font_color", "Label") +# var axes_color : Color = bg.linear_interpolate(fg, 0.25) +# var curve_color : Color = bg.linear_interpolate(fg, 0.75) + + var axes_color : Color = Color(0.9, 0.9, 0.9, 1) + var curve_color : Color = Color(1, 1, 1, 1) + + draw_rect(Rect2(draw_offset, draw_size), axes_color, false) + var tp : Vector2 = transform_point(polygon.points[polygon.points.size()-1 if closed else 0]) + + for p in polygon.points: + var tnp = transform_point(p) + draw_line(tp, tnp, curve_color) + tp = tnp + +func _on_resize() -> void: + var ds : float = min(rect_size.x, rect_size.y) + draw_size = Vector2(ds, ds) + draw_offset = 0.5*(rect_size-draw_size) + update() diff --git a/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.tscn b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.tscn new file mode 100644 index 0000000..0b9f2ee --- /dev/null +++ b/game/addons/mat_maker_gd/widgets/polygon_edit/polygon_view.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/widgets/polygon_edit/polygon_view.gd" type="Script" id=1] + +[node name="PolygonView" type="Control"] +margin_right = 64.0 +margin_bottom = 64.0 +mouse_filter = 2 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/addons/mat_maker_gd/windows/file_dialog/fav_button.tscn b/game/addons/mat_maker_gd/windows/file_dialog/fav_button.tscn new file mode 100644 index 0000000..95d056c --- /dev/null +++ b/game/addons/mat_maker_gd/windows/file_dialog/fav_button.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/mat_maker_gd/icons/icons.svg" type="Texture" id=1] + +[sub_resource type="AtlasTexture" id=1] +flags = 4 +atlas = ExtResource( 1 ) +region = Rect2( 80, 80, 16, 16 ) + +[node name="FavButton" type="Button"] +margin_right = 12.0 +margin_bottom = 20.0 +icon = SubResource( 1 ) +flat = true +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.gd b/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.gd new file mode 100644 index 0000000..f384b95 --- /dev/null +++ b/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.gd @@ -0,0 +1,57 @@ +tool +extends FileDialog + + +var left_panel = null +var volume_option = null + + +signal return_paths(path_list) + +func _ready() -> void: + var vbox = get_child(3) + var hbox = HSplitContainer.new() + add_child(hbox) + remove_child(vbox) + left_panel = preload("res://addons/mat_maker_gd/windows/file_dialog/left_panel.tscn").instance() + hbox.add_child(left_panel) + left_panel.connect("open_directory", self, "set_current_dir") + hbox.add_child(vbox) + vbox.size_flags_horizontal = SIZE_EXPAND_FILL + var fav_button = preload("res://addons/mat_maker_gd/windows/file_dialog/fav_button.tscn").instance() + vbox.get_child(0).add_child(fav_button) + fav_button.connect("pressed", self, "add_favorite") + if OS.get_name() == "Windows": + volume_option = vbox.get_child(0).get_child(3) + if ! volume_option is OptionButton: + volume_option = null + + +func get_full_current_dir() -> String: + var prefix = "" + if volume_option != null and volume_option.visible: + prefix = volume_option.get_item_text(volume_option.selected) + return prefix+get_current_dir() + +func _on_FileDialog_file_selected(path) -> void: + left_panel.add_recent(get_full_current_dir()) + emit_signal("return_paths", [ path ]) + +func _on_FileDialog_files_selected(paths) -> void: + left_panel.add_recent(get_full_current_dir()) + emit_signal("return_paths", paths) + +func _on_FileDialog_dir_selected(dir) -> void: + emit_signal("return_paths", [ dir ]) + +func _on_FileDialog_popup_hide() -> void: + emit_signal("return_paths", [ ]) + +func select_files() -> Array: + popup_centered() + var result = yield(self, "return_paths") + queue_free() + return result + +func add_favorite(): + left_panel.add_favorite(get_full_current_dir()) diff --git a/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.tscn b/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.tscn new file mode 100644 index 0000000..a95bb78 --- /dev/null +++ b/game/addons/mat_maker_gd/windows/file_dialog/file_dialog.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/windows/file_dialog/file_dialog.gd" type="Script" id=1] + +[node name="FileDialog" type="FileDialog"] +margin_right = 360.0 +margin_bottom = 130.0 +window_title = "Enregistrer un fichier" +resizable = true +script = ExtResource( 1 ) + +[connection signal="dir_selected" from="." to="." method="_on_FileDialog_dir_selected"] +[connection signal="file_selected" from="." to="." method="_on_FileDialog_file_selected"] +[connection signal="files_selected" from="." to="." method="_on_FileDialog_files_selected"] +[connection signal="popup_hide" from="." to="." method="_on_FileDialog_popup_hide"] diff --git a/game/addons/mat_maker_gd/windows/file_dialog/left_panel.gd b/game/addons/mat_maker_gd/windows/file_dialog/left_panel.gd new file mode 100644 index 0000000..5673e70 --- /dev/null +++ b/game/addons/mat_maker_gd/windows/file_dialog/left_panel.gd @@ -0,0 +1,71 @@ +tool +extends VBoxContainer + +var recents : Array = [] +var favorites : Array = [] + +signal open_directory(dirpath) + +#func _ready(): +# if get_node("/root/MainWindow") != null: +# var config_cache = get_node("/root/MainWindow").config_cache +# if config_cache.has_section_key("file_dialog", "recents"): +# var parse_result = JSON.parse(config_cache.get_value("file_dialog", "recents")) +# if parse_result != null: +# recents = parse_result.result +# if config_cache.has_section_key("file_dialog", "favorites"): +# var parse_result = JSON.parse(config_cache.get_value("file_dialog", "favorites")) +# if parse_result != null: +# favorites = parse_result.result +# update_lists() + +#func _exit_tree(): +# if get_node("/root/MainWindow") != null: +# var config_cache = get_node("/root/MainWindow").config_cache +# config_cache.set_value("file_dialog", "recents", JSON.print(recents)) +# config_cache.set_value("file_dialog", "favorites", JSON.print(favorites)) + +func add_recent(file_path : String): + if recents.find(file_path) != -1: + recents.erase(file_path) + recents.push_front(file_path) + update_lists() + +func add_favorite(file_path : String): + if favorites.find(file_path) == -1: + favorites.push_back(file_path) + update_lists() + +func my_basename(s : String) -> String: + var slash_pos : int = s.find_last("/") + if slash_pos == -1 or slash_pos+1 == s.length(): + return s + return s.right(slash_pos+1) + +func update_lists(): + $FavList.clear() + for d in favorites: + $FavList.add_item(my_basename(d)) + $FavList.set_item_tooltip($FavList.get_item_count()-1, d) + $RecentList.clear() + for d in recents: + $RecentList.add_item(my_basename(d)) + $RecentList.set_item_tooltip($RecentList.get_item_count()-1, d) + +func _on_FavList_item_activated(index): + emit_signal("open_directory", $FavList.get_item_tooltip(index)) + +func _on_RecentList_item_activated(index): + emit_signal("open_directory", $RecentList.get_item_tooltip(index)) + +func _on_FavList_gui_input(event): + if event is InputEventKey and event.pressed and event.scancode == KEY_DELETE: + if ! $FavList.get_selected_items().empty(): + favorites.remove($FavList.get_selected_items()[0]) + update_lists() + +func _on_RecentList_gui_input(event): + if event is InputEventKey and event.pressed and event.scancode == KEY_DELETE: + if ! $RecentList.get_selected_items().empty(): + recents.remove($RecentList.get_selected_items()[0]) + update_lists() diff --git a/game/addons/mat_maker_gd/windows/file_dialog/left_panel.tscn b/game/addons/mat_maker_gd/windows/file_dialog/left_panel.tscn new file mode 100644 index 0000000..a5ad9b0 --- /dev/null +++ b/game/addons/mat_maker_gd/windows/file_dialog/left_panel.tscn @@ -0,0 +1,48 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/mat_maker_gd/windows/file_dialog/left_panel.gd" type="Script" id=1] + +[node name="LeftPanel" type="VBoxContainer"] +margin_right = 40.0 +margin_bottom = 40.0 +size_flags_vertical = 3 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="RecentLabel" type="Label" parent="."] +margin_right = 100.0 +margin_bottom = 14.0 +text = "Recent" + +[node name="RecentList" type="ItemList" parent="."] +margin_top = 18.0 +margin_right = 100.0 +margin_bottom = 18.0 +rect_min_size = Vector2( 100, 0 ) +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="FavLabel" type="Label" parent="."] +margin_top = 22.0 +margin_right = 100.0 +margin_bottom = 36.0 +text = "Favorite" + +[node name="FavList" type="ItemList" parent="."] +margin_top = 40.0 +margin_right = 100.0 +margin_bottom = 40.0 +rect_min_size = Vector2( 100, 0 ) +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[connection signal="gui_input" from="RecentList" to="." method="_on_RecentList_gui_input"] +[connection signal="item_activated" from="RecentList" to="." method="_on_RecentList_item_activated"] +[connection signal="gui_input" from="FavList" to="." method="_on_FavList_gui_input"] +[connection signal="item_activated" from="FavList" to="." method="_on_FavList_item_activated"] diff --git a/game/modules/planets/textures/dirt.tres b/game/modules/planets/textures/dirt.tres new file mode 100644 index 0000000..3224135 --- /dev/null +++ b/game/modules/planets/textures/dirt.tres @@ -0,0 +1,470 @@ +[gd_resource type="Resource" load_steps=61 format=2] + +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=2] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/noise.gd" type="Script" id=3] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=4] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/emboss.gd" type="Script" id=5] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=6] +[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=7] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=8] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/make_tileable.gd" type="Script" id=9] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/fill_channel.gd" type="Script" id=10] + +[sub_resource type="Resource" id=1] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=2] +script = ExtResource( 3 ) +graph_position = Vector2( -480, -80 ) +image = SubResource( 1 ) +grid_size = 512 +density = 0.0 + +[sub_resource type="Resource" id=3] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=39] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 1 ) + +[sub_resource type="Resource" id=4] +script = ExtResource( 4 ) +graph_position = Vector2( -260, -80 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0, 0, 0, 0, 0.677966, 0.188235, 0.141176, 0.101961, 1, 1, 0.282353, 0.235294, 0.0901961, 1 ) +image = SubResource( 3 ) +input = SubResource( 39 ) + +[sub_resource type="Resource" id=5] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=6] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 3 ) + +[sub_resource type="Resource" id=7] +script = ExtResource( 5 ) +graph_position = Vector2( -40, -80 ) +image = SubResource( 5 ) +input = SubResource( 6 ) +angle = 47.9 +amount = 7.3 +width = 1.0 + +[sub_resource type="Resource" id=8] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=40] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 5 ) + +[sub_resource type="Resource" id=9] +script = ExtResource( 4 ) +graph_position = Vector2( 180, -80 ) +interpolation_type = 1 +points = PoolRealArray( 0.584746, 0, 0, 0, 0, 0.79661, 0.286275, 0.192157, 0.054902, 1, 1, 0.396078, 0.439216, 0.443137, 1 ) +image = SubResource( 8 ) +input = SubResource( 40 ) + +[sub_resource type="Resource" id=10] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=11] +script = ExtResource( 6 ) +graph_position = Vector2( -460, 340 ) +image = SubResource( 10 ) +type = 0 +scale = Vector2( 40, 40 ) +folds = 0 +iterations = 4 +persistence = 1.0 + +[sub_resource type="Resource" id=12] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=41] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 10 ) + +[sub_resource type="Resource" id=13] +script = ExtResource( 4 ) +graph_position = Vector2( -260, 360 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0.447059, 0.345098, 0.215686, 1, 0.245763, 0.529412, 0.423529, 0.301961, 1, 0.38983, 0.219608, 0.2, 0.14902, 1, 0.584746, 0.298039, 0.25098, 0.164706, 1, 0.745763, 0.447059, 0.333333, 0.223529, 1, 1, 0.662745, 0.478431, 0.207843, 1 ) +image = SubResource( 12 ) +input = SubResource( 41 ) + +[sub_resource type="Resource" id=14] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=15] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 8 ) + +[sub_resource type="Resource" id=16] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 12 ) + +[sub_resource type="Resource" id=17] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 0.76 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=18] +script = ExtResource( 8 ) +graph_position = Vector2( -20, 360 ) +image = SubResource( 14 ) +input1 = SubResource( 15 ) +input2 = SubResource( 16 ) +blend_type = 6 +opacity = SubResource( 17 ) + +[sub_resource type="Resource" id=19] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=20] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 14 ) + +[sub_resource type="Resource" id=23] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=24] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 23 ) + +[sub_resource type="Resource" id=25] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 0.6 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=26] +script = ExtResource( 8 ) +graph_position = Vector2( 240, 520 ) +image = SubResource( 19 ) +input1 = SubResource( 20 ) +input2 = SubResource( 24 ) +blend_type = 0 +opacity = SubResource( 25 ) + +[sub_resource type="Resource" id=27] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=28] +script = ExtResource( 6 ) +graph_position = Vector2( 0, 1280 ) +image = SubResource( 27 ) +type = 0 +scale = Vector2( 15, 25 ) +folds = 0 +iterations = 3 +persistence = 0.5 + +[sub_resource type="Resource" id=29] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=30] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) + +[sub_resource type="Resource" id=31] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 27 ) + +[sub_resource type="Resource" id=32] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 0.5 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=33] +script = ExtResource( 8 ) +graph_position = Vector2( 240, 1340 ) +image = SubResource( 29 ) +input1 = SubResource( 30 ) +input2 = SubResource( 31 ) +blend_type = 0 +opacity = SubResource( 32 ) + +[sub_resource type="Resource" id=21] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=34] +script = ExtResource( 6 ) +graph_position = Vector2( -460, 900 ) +image = SubResource( 21 ) +type = 1 +scale = Vector2( 100, 100 ) +folds = 0 +iterations = 10 +persistence = 0.2 + +[sub_resource type="Resource" id=22] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=42] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 21 ) + +[sub_resource type="Resource" id=35] +script = ExtResource( 4 ) +graph_position = Vector2( -240, 940 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0, 0, 0, 0, 0.822034, 0, 0, 0, 0, 1, 1, 1, 1, 1 ) +image = SubResource( 22 ) +input = SubResource( 42 ) + +[sub_resource type="Resource" id=43] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 22 ) + +[sub_resource type="Resource" id=36] +script = ExtResource( 4 ) +graph_position = Vector2( 0, 940 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0, 0, 0, 0, 0.59322, 0, 0, 0, 0, 0.635593, 0.0823529, 0.360784, 0.109804, 1, 0.745763, 0.458824, 0.682353, 0.0901961, 1, 0.872881, 0.227451, 0.462745, 0.25098, 1, 1, 0.494118, 0.839216, 0.6, 1 ) +image = SubResource( 23 ) +input = SubResource( 43 ) + +[sub_resource type="Resource" id=53] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=38] +script = ExtResource( 7 ) +graph_position = Vector2( 980, 540 ) +image = SubResource( 53 ) +postfix = "_albedo" + +[sub_resource type="Resource" id=45] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=49] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=46] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 49 ) + +[sub_resource type="Resource" id=47] +script = ExtResource( 9 ) +graph_position = Vector2( 760, 540 ) +image = SubResource( 45 ) +input = SubResource( 46 ) +width = 0.1 + +[sub_resource type="Resource" id=50] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 19 ) + +[sub_resource type="Resource" id=51] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=52] +script = ExtResource( 10 ) +graph_position = Vector2( 520, 540 ) +image = SubResource( 49 ) +input = SubResource( 50 ) +value = SubResource( 51 ) +channel = 3 + +[resource] +script = ExtResource( 1 ) +image_size = Vector2( 256, 256 ) +nodes = [ SubResource( 2 ), SubResource( 4 ), SubResource( 7 ), SubResource( 9 ), SubResource( 11 ), SubResource( 13 ), SubResource( 18 ), SubResource( 26 ), SubResource( 28 ), SubResource( 33 ), SubResource( 34 ), SubResource( 35 ), SubResource( 36 ), SubResource( 38 ), SubResource( 47 ), SubResource( 52 ) ] diff --git a/game/modules/planets/textures/dirt_albedo.png b/game/modules/planets/textures/dirt_albedo.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5e4fee08beba5b9e74c1e57d886d0cfad6db03 GIT binary patch literal 114890 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%0Ai@CQllw(3m5W`ap))Z;}B)&CZ`w_ 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�H|rXk?X~AxZT!JIP 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
  • 5&3J@fV5vvx_Q6vwrVnZxd%a} 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≦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 literal 0 HcmV?d00001 diff --git a/game/modules/planets/textures/dirt_albedo.png.import b/game/modules/planets/textures/dirt_albedo.png.import new file mode 100644 index 0000000..71cd7e6 --- /dev/null +++ b/game/modules/planets/textures/dirt_albedo.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/dirt_albedo.png-b12f2598fac748786b25d7fed2e8ceea.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://modules/planets/textures/dirt_albedo.png" +dest_files=[ "res://.import/dirt_albedo.png-b12f2598fac748786b25d7fed2e8ceea.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +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 diff --git a/game/modules/planets/textures/grass.tres b/game/modules/planets/textures/grass.tres new file mode 100644 index 0000000..5af0416 --- /dev/null +++ b/game/modules/planets/textures/grass.tres @@ -0,0 +1,289 @@ +[gd_resource type="Resource" load_steps=40 format=2] + +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=2] +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=3] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/voronoi.gd" type="Script" id=4] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=5] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/noise.gd" type="Script" id=6] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=7] +[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=8] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/make_tileable.gd" type="Script" id=9] + +[sub_resource type="Resource" id=1] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=2] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=3] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=4] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=5] +script = ExtResource( 4 ) +graph_position = Vector2( -500, -20 ) +out_nodes = SubResource( 3 ) +out_borders = SubResource( 1 ) +out_random_color = SubResource( 4 ) +out_fill = SubResource( 2 ) +scale = Vector2( 4, 4 ) +stretch = Vector2( 1, 1 ) +intensity = 1.0 +randomness = 0.79 + +[sub_resource type="Resource" id=6] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=7] +script = ExtResource( 6 ) +graph_position = Vector2( -260, 300 ) +image = SubResource( 6 ) +grid_size = 256 +density = 0.0 + +[sub_resource type="Resource" id=8] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=14] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=9] +script = ExtResource( 3 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 14 ) + +[sub_resource type="Resource" id=10] +script = ExtResource( 2 ) +graph_position = Vector2( 220, 40 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0, 0, 0, 0, 0.754237, 0.447059, 0.4, 0.2, 1, 1, 0.811765, 0.886275, 0.0980392, 1 ) +image = SubResource( 8 ) +input = SubResource( 9 ) + +[sub_resource type="Resource" id=11] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=19] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=12] +script = ExtResource( 3 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 19 ) + +[sub_resource type="Resource" id=13] +script = ExtResource( 2 ) +graph_position = Vector2( 220, 640 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0.227451, 0.286275, 0.215686, 1, 0.313559, 0.0901961, 0.113725, 0.0941176, 1, 0.669492, 0.14902, 0.223529, 0.14902, 1, 1, 0.376471, 0.521569, 0.329412, 1 ) +image = SubResource( 11 ) +input = SubResource( 12 ) + +[sub_resource type="Resource" id=15] +script = ExtResource( 3 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 3 ) + +[sub_resource type="Resource" id=16] +script = ExtResource( 3 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 6 ) + +[sub_resource type="Resource" id=17] +script = ExtResource( 3 ) +default_type = 1 +default_int = 0 +default_float = 0.22 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=18] +script = ExtResource( 7 ) +graph_position = Vector2( -20, 20 ) +image = SubResource( 14 ) +input1 = SubResource( 15 ) +input2 = SubResource( 16 ) +blend_type = 11 +opacity = SubResource( 17 ) + +[sub_resource type="Resource" id=20] +script = ExtResource( 5 ) +graph_position = Vector2( -20, 640 ) +image = SubResource( 19 ) +type = 0 +scale = Vector2( 30, 30 ) +folds = 0 +iterations = 6 +persistence = 0.8 + +[sub_resource type="Resource" id=21] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=22] +script = ExtResource( 3 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 8 ) + +[sub_resource type="Resource" id=23] +script = ExtResource( 3 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 11 ) + +[sub_resource type="Resource" id=24] +script = ExtResource( 3 ) +default_type = 1 +default_int = 0 +default_float = 0.74 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=25] +script = ExtResource( 7 ) +graph_position = Vector2( 440, 280 ) +image = SubResource( 21 ) +input1 = SubResource( 22 ) +input2 = SubResource( 23 ) +blend_type = 4 +opacity = SubResource( 24 ) + +[sub_resource type="Resource" id=28] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=26] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 28 ) + +[sub_resource type="Resource" id=27] +script = ExtResource( 8 ) +graph_position = Vector2( 900, 340 ) +image = SubResource( 26 ) +postfix = "_albedo" + +[sub_resource type="Resource" id=29] +script = ExtResource( 3 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 21 ) + +[sub_resource type="Resource" id=30] +script = ExtResource( 9 ) +graph_position = Vector2( 680, 340 ) +image = SubResource( 28 ) +input = SubResource( 29 ) +width = 0.1 + +[resource] +script = ExtResource( 1 ) +image_size = Vector2( 256, 256 ) +nodes = [ SubResource( 5 ), SubResource( 7 ), SubResource( 10 ), SubResource( 13 ), SubResource( 18 ), SubResource( 20 ), SubResource( 25 ), SubResource( 27 ), SubResource( 30 ) ] diff --git a/game/modules/planets/textures/grass_albedo.png b/game/modules/planets/textures/grass_albedo.png new file mode 100644 index 0000000000000000000000000000000000000000..e5bac0208fa5c394a161958ef03bdc7114d96307 GIT binary patch literal 86150 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 VBlS;O5NiMc002ovPDHLkV1ns9`HKJm literal 0 HcmV?d00001 diff --git a/game/modules/planets/textures/grass_albedo.png.import b/game/modules/planets/textures/grass_albedo.png.import new file mode 100644 index 0000000..5d3d67a --- /dev/null +++ b/game/modules/planets/textures/grass_albedo.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/grass_albedo.png-0370b00eba0f4d6a0653d2cbbd6b27b8.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://modules/planets/textures/grass_albedo.png" +dest_files=[ "res://.import/grass_albedo.png-0370b00eba0f4d6a0653d2cbbd6b27b8.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=1 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +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 diff --git a/game/modules/planets/textures/grass_mossy.tres b/game/modules/planets/textures/grass_mossy.tres new file mode 100644 index 0000000..ff95b56 --- /dev/null +++ b/game/modules/planets/textures/grass_mossy.tres @@ -0,0 +1,288 @@ +[gd_resource type="Resource" load_steps=40 format=2] + +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=2] +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=3] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/voronoi.gd" type="Script" id=4] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=5] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/noise.gd" type="Script" id=6] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=7] +[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=8] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/make_tileable.gd" type="Script" id=9] + +[sub_resource type="Resource" id=1] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=2] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=3] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=4] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=5] +script = ExtResource( 4 ) +graph_position = Vector2( -500, -20 ) +out_nodes = SubResource( 3 ) +out_borders = SubResource( 1 ) +out_random_color = SubResource( 4 ) +out_fill = SubResource( 2 ) +scale = Vector2( 4, 4 ) +stretch = Vector2( 1, 1 ) +intensity = 1.0 +randomness = 0.79 + +[sub_resource type="Resource" id=6] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=7] +script = ExtResource( 6 ) +graph_position = Vector2( -260, 300 ) +image = SubResource( 6 ) +grid_size = 256 +density = 0.0 + +[sub_resource type="Resource" id=8] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=14] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=9] +script = ExtResource( 3 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 14 ) + +[sub_resource type="Resource" id=10] +script = ExtResource( 2 ) +graph_position = Vector2( 220, 40 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0, 0, 0, 0, 0.754237, 0.447059, 0.4, 0.2, 1, 1, 0.811765, 0.886275, 0.0980392, 1 ) +image = SubResource( 8 ) +input = SubResource( 9 ) + +[sub_resource type="Resource" id=11] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=28] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=12] +script = ExtResource( 3 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 28 ) + +[sub_resource type="Resource" id=13] +script = ExtResource( 2 ) +graph_position = Vector2( 220, 640 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0.227451, 0.286275, 0.215686, 1, 0.313559, 0.0901961, 0.113725, 0.0941176, 1, 0.669492, 0.14902, 0.223529, 0.14902, 1, 1, 0.376471, 0.521569, 0.329412, 1 ) +image = SubResource( 11 ) +input = SubResource( 12 ) + +[sub_resource type="Resource" id=15] +script = ExtResource( 3 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 3 ) + +[sub_resource type="Resource" id=16] +script = ExtResource( 3 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 6 ) + +[sub_resource type="Resource" id=17] +script = ExtResource( 3 ) +default_type = 1 +default_int = 0 +default_float = 0.22 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=18] +script = ExtResource( 7 ) +graph_position = Vector2( -20, 20 ) +image = SubResource( 14 ) +input1 = SubResource( 15 ) +input2 = SubResource( 16 ) +blend_type = 11 +opacity = SubResource( 17 ) + +[sub_resource type="Resource" id=19] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=20] +script = ExtResource( 5 ) +graph_position = Vector2( -220, 640 ) +image = SubResource( 19 ) +type = 0 +scale = Vector2( 30, 30 ) +folds = 0 +iterations = 6 +persistence = 0.8 + +[sub_resource type="Resource" id=21] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=22] +script = ExtResource( 3 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 8 ) + +[sub_resource type="Resource" id=23] +script = ExtResource( 3 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 11 ) + +[sub_resource type="Resource" id=24] +script = ExtResource( 3 ) +default_type = 1 +default_int = 0 +default_float = 0.74 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=25] +script = ExtResource( 7 ) +graph_position = Vector2( 440, 280 ) +image = SubResource( 21 ) +input1 = SubResource( 22 ) +input2 = SubResource( 23 ) +blend_type = 4 +opacity = SubResource( 24 ) + +[sub_resource type="Resource" id=31] +script = ExtResource( 3 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=27] +script = ExtResource( 8 ) +graph_position = Vector2( 660, 340 ) +image = SubResource( 31 ) +postfix = "_albedo" + +[sub_resource type="Resource" id=29] +script = ExtResource( 3 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 19 ) + +[sub_resource type="Resource" id=30] +script = ExtResource( 9 ) +graph_position = Vector2( -20, 640 ) +image = SubResource( 28 ) +input = SubResource( 29 ) +width = 0.01 + +[resource] +script = ExtResource( 1 ) +image_size = Vector2( 256, 256 ) +nodes = [ SubResource( 5 ), SubResource( 7 ), SubResource( 10 ), SubResource( 13 ), SubResource( 18 ), SubResource( 20 ), SubResource( 25 ), SubResource( 27 ), SubResource( 30 ) ] diff --git a/game/modules/planets/textures/grass_mossy_albedo.png b/game/modules/planets/textures/grass_mossy_albedo.png new file mode 100644 index 0000000000000000000000000000000000000000..9949d8854f24e05a147195e7024fdd2566507692 GIT binary patch literal 85694 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 literal 0 HcmV?d00001 diff --git a/game/modules/planets/textures/grass_mossy_albedo.png.import b/game/modules/planets/textures/grass_mossy_albedo.png.import new file mode 100644 index 0000000..39b20c5 --- /dev/null +++ b/game/modules/planets/textures/grass_mossy_albedo.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/grass_mossy_albedo.png-89be3f7f64f99f8dc346761a8d10564a.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://modules/planets/textures/grass_mossy_albedo.png" +dest_files=[ "res://.import/grass_mossy_albedo.png-89be3f7f64f99f8dc346761a8d10564a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +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 diff --git a/game/modules/planets/textures/stone_1.tres b/game/modules/planets/textures/stone_1.tres new file mode 100644 index 0000000..90b38a9 --- /dev/null +++ b/game/modules/planets/textures/stone_1.tres @@ -0,0 +1,198 @@ +[gd_resource type="Resource" load_steps=28 format=2] + +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=2] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=3] +[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=4] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=5] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/voronoi.gd" type="Script" id=6] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=7] + +[sub_resource type="Resource" id=1] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=2] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=3] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=4] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=5] +script = ExtResource( 6 ) +graph_position = Vector2( 120, 0 ) +out_nodes = SubResource( 3 ) +out_borders = SubResource( 1 ) +out_random_color = SubResource( 4 ) +out_fill = SubResource( 2 ) +scale = Vector2( 14, 14 ) +stretch = Vector2( 1, 1 ) +intensity = 1.0 +randomness = 0.95 + +[sub_resource type="Resource" id=6] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=7] +script = ExtResource( 5 ) +graph_position = Vector2( 360, 320 ) +image = SubResource( 6 ) +type = 0 +scale = Vector2( 20, 20 ) +folds = 0 +iterations = 9 +persistence = 0.9 + +[sub_resource type="Resource" id=8] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=9] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 1 ) + +[sub_resource type="Resource" id=10] +script = ExtResource( 7 ) +graph_position = Vector2( 360, 20 ) +interpolation_type = 1 +points = PoolRealArray( 0.00635593, 0, 0, 0, 1, 0.53178, 1, 1, 1, 1, 1, 1, 1, 1, 1 ) +image = SubResource( 8 ) +input = SubResource( 9 ) + +[sub_resource type="Resource" id=11] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=12] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 8 ) + +[sub_resource type="Resource" id=13] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 6 ) + +[sub_resource type="Resource" id=14] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 0.63 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=15] +script = ExtResource( 3 ) +graph_position = Vector2( 620, 100 ) +image = SubResource( 11 ) +input1 = SubResource( 12 ) +input2 = SubResource( 13 ) +blend_type = 2 +opacity = SubResource( 14 ) + +[sub_resource type="Resource" id=16] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=17] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 11 ) + +[sub_resource type="Resource" id=18] +script = ExtResource( 7 ) +graph_position = Vector2( 860, 140 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0, 0, 0, 1, 0.0911017, 0, 0, 0, 1, 0.472458, 0.129412, 0.133333, 0.137255, 1, 0.735169, 0.121569, 0.12549, 0.12549, 1, 1, 0.156863, 0.152941, 0.152941, 1 ) +image = SubResource( 16 ) +input = SubResource( 17 ) + +[sub_resource type="Resource" id=19] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 16 ) + +[sub_resource type="Resource" id=20] +script = ExtResource( 4 ) +graph_position = Vector2( 1120, 100 ) +image = SubResource( 19 ) +postfix = "_albedo" + +[resource] +script = ExtResource( 1 ) +image_size = Vector2( 256, 256 ) +nodes = [ SubResource( 5 ), SubResource( 7 ), SubResource( 10 ), SubResource( 15 ), SubResource( 18 ), SubResource( 20 ) ] diff --git a/game/modules/planets/textures/stone_1_albedo.png b/game/modules/planets/textures/stone_1_albedo.png new file mode 100644 index 0000000000000000000000000000000000000000..3bc5cb7b3fefabf2789603c45a4f9700eb48a6bb GIT binary patch literal 86784 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 literal 0 HcmV?d00001 diff --git a/game/modules/planets/textures/stone_dungeon_1_albedo.png.import b/game/modules/planets/textures/stone_dungeon_1_albedo.png.import new file mode 100644 index 0000000..1d204e8 --- /dev/null +++ b/game/modules/planets/textures/stone_dungeon_1_albedo.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/stone_dungeon_1_albedo.png-a589b6e6212398a160eb6e1a4ab49807.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://modules/planets/textures/stone_dungeon_1_albedo.png" +dest_files=[ "res://.import/stone_dungeon_1_albedo.png-a589b6e6212398a160eb6e1a4ab49807.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +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 diff --git a/game/modules/planets/textures/test.png.import b/game/modules/planets/textures/test.png.import new file mode 100644 index 0000000..c58ee37 --- /dev/null +++ b/game/modules/planets/textures/test.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/test.png-e87bdfc7eb0364f7afee143bf66dc9dd.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://data/voxel_textures/test.png" +dest_files=[ "res://.import/test.png-e87bdfc7eb0364f7afee143bf66dc9dd.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/game/modules/planets/textures/test_brick.tres b/game/modules/planets/textures/test_brick.tres new file mode 100644 index 0000000..3ee0bf0 --- /dev/null +++ b/game/modules/planets/textures/test_brick.tres @@ -0,0 +1,326 @@ +[gd_resource type="Resource" load_steps=42 format=2] + +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1] +[ext_resource path="res://addons/mat_maker_gd/nodes/mm_node_universal_property.gd" type="Script" id=2] +[ext_resource path="res://addons/mat_maker_gd/nodes/pattern/bricks.gd" type="Script" id=3] +[ext_resource path="res://addons/mat_maker_gd/nodes/noise/fbm_noise.gd" type="Script" id=4] +[ext_resource path="res://addons/mat_maker_gd/nodes/other/output_image.gd" type="Script" id=5] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/blend.gd" type="Script" id=6] +[ext_resource path="res://addons/mat_maker_gd/nodes/pattern/scratches.gd" type="Script" id=7] +[ext_resource path="res://addons/mat_maker_gd/nodes/filter/colorize.gd" type="Script" id=8] + +[sub_resource type="Resource" id=1] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=2] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 0.03 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=3] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=4] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=5] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=6] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=7] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=8] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=9] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=10] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=11] +script = ExtResource( 3 ) +graph_position = Vector2( 0, 0 ) +out_bricks_pattern = SubResource( 4 ) +out_random_color = SubResource( 9 ) +out_position_x = SubResource( 7 ) +out_position_y = SubResource( 8 ) +out_brick_uv = SubResource( 3 ) +out_corner_uv = SubResource( 5 ) +out_direction = SubResource( 6 ) +type = 0 +repeat = 1 +col_row = Vector2( 3, 7 ) +offset = 0.5 +mortar = SubResource( 2 ) +bevel = SubResource( 1 ) +roundness = SubResource( 10 ) +corner = 0.3 + +[sub_resource type="Resource" id=12] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=13] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 4 ) + +[sub_resource type="Resource" id=14] +script = ExtResource( 8 ) +graph_position = Vector2( 240, 200 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0.168627, 0.109804, 0.109804, 1, 1, 0.780392, 0.298039, 0.247059, 1 ) +image = SubResource( 12 ) +input = SubResource( 13 ) + +[sub_resource type="Resource" id=15] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=22] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=16] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 22 ) + +[sub_resource type="Resource" id=17] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 12 ) + +[sub_resource type="Resource" id=18] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 0.52 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=19] +script = ExtResource( 6 ) +graph_position = Vector2( 500, 20 ) +image = SubResource( 15 ) +input1 = SubResource( 16 ) +input2 = SubResource( 17 ) +blend_type = 0 +opacity = SubResource( 18 ) + +[sub_resource type="Resource" id=20] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=21] +script = ExtResource( 7 ) +graph_position = Vector2( 260, -340 ) +image = SubResource( 20 ) +size = Vector2( 0.23, 0.3 ) +layers = 2 +waviness = 0.05 +angle = 171 +randomness = 0.35 + +[sub_resource type="Resource" id=23] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 1.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 20 ) + +[sub_resource type="Resource" id=24] +script = ExtResource( 8 ) +graph_position = Vector2( 500, -300 ) +interpolation_type = 1 +points = PoolRealArray( 0, 0, 0, 0, 0, 0.40678, 0, 0, 0, 1, 1, 0, 0, 0, 1 ) +image = SubResource( 22 ) +input = SubResource( 23 ) + +[sub_resource type="Resource" id=25] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=26] +script = ExtResource( 4 ) +graph_position = Vector2( 760, -320 ) +image = SubResource( 25 ) +type = 0 +scale = Vector2( 20, 20 ) +folds = 0 +iterations = 7 +persistence = 0.9 + +[sub_resource type="Resource" id=27] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=28] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 25 ) + +[sub_resource type="Resource" id=29] +script = ExtResource( 2 ) +default_type = 4 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 1, 1, 1, 1 ) +input_property = SubResource( 15 ) + +[sub_resource type="Resource" id=30] +script = ExtResource( 2 ) +default_type = 1 +default_int = 0 +default_float = 0.61 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) + +[sub_resource type="Resource" id=31] +script = ExtResource( 6 ) +graph_position = Vector2( 960, 20 ) +image = SubResource( 27 ) +input1 = SubResource( 28 ) +input2 = SubResource( 29 ) +blend_type = 11 +opacity = SubResource( 30 ) + +[sub_resource type="Resource" id=34] +script = ExtResource( 2 ) +default_type = 5 +default_int = 0 +default_float = 0.0 +default_vector2 = Vector2( 0, 0 ) +default_vector3 = Vector3( 0, 0, 0 ) +default_color = Color( 0, 0, 0, 1 ) +input_property = SubResource( 27 ) + +[sub_resource type="Resource" id=33] +script = ExtResource( 5 ) +graph_position = Vector2( 1200, 60 ) +image = SubResource( 34 ) +postfix = "_albedo" + +[resource] +script = ExtResource( 1 ) +image_size = Vector2( 256, 256 ) +nodes = [ SubResource( 11 ), SubResource( 14 ), SubResource( 19 ), SubResource( 21 ), SubResource( 24 ), SubResource( 26 ), SubResource( 31 ), SubResource( 33 ) ] diff --git a/game/modules/planets/textures/test_brick_albedo.png b/game/modules/planets/textures/test_brick_albedo.png new file mode 100644 index 0000000000000000000000000000000000000000..1242411dbfea953f6bf15fbb94d730ace2dbd45e GIT binary patch literal 85566 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 JPDHLkV1l_