From 5f4b8c5b4ba0887ae782d594db1a7703bc02bd64 Mon Sep 17 00:00:00 2001 From: Marco Date: Thu, 11 Sep 2025 15:02:08 +0200 Subject: [PATCH] Upgraded func_godot to 2025.8.2 --- 3D/MapScenes/Factory_003.tscn | 649 +++++---- IsoTest/Factory4.tscn | 55 +- addons/func_godot/fgd/func_detail.tres | 11 +- .../fgd/func_detail_illusionary.tres | 11 +- addons/func_godot/fgd/func_geo.tres | 11 +- addons/func_godot/fgd/func_godot_fgd.tres | 8 +- addons/func_godot/fgd/func_illusionary.tres | 11 +- addons/func_godot/fgd/phong_base.tres | 3 +- .../fgd/vertex_merge_distance_base.tres | 24 + addons/func_godot/fgd/worldspawn.tres | 13 +- .../func_godot/func_godot_local_config.tres | 4 +- ...dot_netradiant_custom_gamepack_config.tres | 4 +- .../netradiant_custom_shader_clip.tres | 2 +- .../netradiant_custom_shader_origin.tres | 2 +- .../netradiant_custom_shader_skip.tres | 2 +- .../func_godot_tb_game_config.tres | 3 +- .../trenchbroom/tb_brush_tag_func.tres | 2 +- .../trenchbroom/tb_brush_tag_trigger.tres | 2 +- .../trenchbroom/tb_face_tag_clip.tres | 5 +- .../trenchbroom/tb_face_tag_origin.tres | 5 +- .../trenchbroom/tb_face_tag_skip.tres | 5 +- addons/func_godot/icon.svg.import | 6 + .../icons/icon_godambler.svg.import | 6 + .../icons/icon_godambler3d.svg.import | 6 + .../icons/icon_godot_ranger.svg.import | 6 + .../icons/icon_godot_ranger3d.svg.import | 6 + .../icons/icon_quake_file.svg.import | 6 + addons/func_godot/icons/icon_slipgate.svg | 13 + .../func_godot/icons/icon_slipgate.svg.import | 43 + .../icons/icon_slipgate3d.svg.import | 6 + addons/func_godot/plugin.cfg | 6 +- addons/func_godot/src/core/data.gd | 190 +++ addons/func_godot/src/core/data.gd.uid | 1 + .../func_godot/src/core/entity_assembler.gd | 451 ++++++ .../src/core/entity_assembler.gd.uid | 1 + .../func_godot/src/core/geometry_generator.gd | 567 ++++++++ .../src/core/geometry_generator.gd.uid | 1 + addons/func_godot/src/core/parser.gd | 439 ++++++ addons/func_godot/src/core/parser.gd.uid | 1 + .../src/fgd/func_godot_fgd_base_class.gd | 13 +- .../src/fgd/func_godot_fgd_base_class.gd.uid | 2 +- .../src/fgd/func_godot_fgd_entity_class.gd | 42 +- .../fgd/func_godot_fgd_entity_class.gd.uid | 2 +- .../func_godot/src/fgd/func_godot_fgd_file.gd | 39 +- .../src/fgd/func_godot_fgd_file.gd.uid | 2 +- .../fgd/func_godot_fgd_model_point_class.gd | 106 +- .../func_godot_fgd_model_point_class.gd.uid | 2 +- .../src/fgd/func_godot_fgd_point_class.gd | 28 +- .../src/fgd/func_godot_fgd_point_class.gd.uid | 2 +- .../src/fgd/func_godot_fgd_solid_class.gd | 56 +- .../src/fgd/func_godot_fgd_solid_class.gd.uid | 2 +- addons/func_godot/src/func_godot_plugin.gd | 195 +-- .../func_godot/src/func_godot_plugin.gd.uid | 2 +- .../func_godot/src/import/quake_map_file.gd | 14 +- .../src/import/quake_map_file.gd.uid | 2 +- .../src/import/quake_map_import_plugin.gd | 14 +- .../src/import/quake_map_import_plugin.gd.uid | 2 +- .../src/import/quake_palette_file.gd | 10 +- .../src/import/quake_palette_file.gd.uid | 2 +- .../src/import/quake_palette_import_plugin.gd | 7 +- .../import/quake_palette_import_plugin.gd.uid | 2 +- .../func_godot/src/import/quake_wad_file.gd | 12 +- .../src/import/quake_wad_file.gd.uid | 2 +- .../src/import/quake_wad_import_plugin.gd | 4 +- .../src/import/quake_wad_import_plugin.gd.uid | 2 +- addons/func_godot/src/map/func_godot_map.gd | 1230 ++--------------- .../func_godot/src/map/func_godot_map.gd.uid | 2 +- .../src/map/func_godot_map_settings.gd | 84 +- .../src/map/func_godot_map_settings.gd.uid | 2 +- .../netradiant_custom_gamepack_config.gd | 67 +- .../netradiant_custom_gamepack_config.gd.uid | 2 +- .../netradiant_custom_shader.gd | 6 +- .../netradiant_custom_shader.gd.uid | 2 +- .../trenchbroom/trenchbroom_game_config.gd | 78 +- .../trenchbroom_game_config.gd.uid | 2 +- .../src/trenchbroom/trenchbroom_tag.gd | 14 +- .../src/trenchbroom/trenchbroom_tag.gd.uid | 2 +- .../src/util/func_godot_local_config.gd | 92 +- .../src/util/func_godot_local_config.gd.uid | 2 +- addons/func_godot/src/util/func_godot_util.gd | 418 +++++- .../src/util/func_godot_util.gd.uid | 2 +- project.godot | 6 + 82 files changed, 3226 insertions(+), 1938 deletions(-) create mode 100644 addons/func_godot/fgd/vertex_merge_distance_base.tres create mode 100644 addons/func_godot/icons/icon_slipgate.svg create mode 100644 addons/func_godot/icons/icon_slipgate.svg.import create mode 100644 addons/func_godot/src/core/data.gd create mode 100644 addons/func_godot/src/core/data.gd.uid create mode 100644 addons/func_godot/src/core/entity_assembler.gd create mode 100644 addons/func_godot/src/core/entity_assembler.gd.uid create mode 100644 addons/func_godot/src/core/geometry_generator.gd create mode 100644 addons/func_godot/src/core/geometry_generator.gd.uid create mode 100644 addons/func_godot/src/core/parser.gd create mode 100644 addons/func_godot/src/core/parser.gd.uid diff --git a/3D/MapScenes/Factory_003.tscn b/3D/MapScenes/Factory_003.tscn index 9937d799..0505c544 100644 --- a/3D/MapScenes/Factory_003.tscn +++ b/3D/MapScenes/Factory_003.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=269 format=4 uid="uid://d21ewu3hfa3us"] -[ext_resource type="Script" uid="uid://kno58homctew" path="res://addons/func_godot/src/map/func_godot_map.gd" id="1_ifqpu"] +[ext_resource type="Script" uid="uid://cwu5cf7a0awcd" path="res://addons/func_godot/src/map/func_godot_map.gd" id="1_ifqpu"] [ext_resource type="Resource" uid="uid://cx41lsryg5wpm" path="res://3D/TrenchBroom/map_settings.tres" id="2_dvbie"] [ext_resource type="Script" uid="uid://oq2ep51w11u5" path="res://3D/TrenchBroom/EntityScripts/Solid/worldspawn.gd" id="3_bjdn5"] [ext_resource type="Material" uid="uid://6jxfmj53vfm5" path="res://textures/Floors/Floor5.tres" id="5_irnve"] @@ -75,8 +75,8 @@ texture_filter = 2 [sub_resource type="ArrayMesh" id="ArrayMesh_6mo82"] _surfaces = [{ -"aabb": AABB(-11, -1, -22, 82, 6, 41), -"attribute_data": PackedByteArray("AACAPwAAgL4AAIA/AAAAvgAAMMAAAAC+AAAwwAAAgL4AAKC/AACAvgAAEEAAAIC+AAAQQAAAAL4AAKC/AAAAvgAAoD8AADDAAACgPwAAgD8AABDAAACAPwAAEMAAADDAAACgPwAAgL4AAKA/AAAAvgAAEMAAAAC+AAAQwAAAgL4AAIC/AACAvgAAMEAAAIC+AAAwQAAAAL4AAIC/AAAAvgAAOEAAAEC/AAA4QAAAgL4AAMA/AACAvgAAwD8AAEC/AAAAvwAAQL8AAMC+AABAvwAAwL4AAIC+AAAAvwAAgL4AAAA/AADAPwAAAD8AADhAAADAPgAAOEAAAMA+AADAPwAAAL8AAMA/AADAvgAAwD8AAMC+AAA4QAAAAL8AADhAAAAAPwAAQL8AAAA/AACAvgAAwD4AAIC+AADAPgAAQL8AACBAAABAvwAAIEAAAIC+AAAYQAAAgL4AABhAAABAvwAAAL8AAEC/AACQPwAAQL8AAJA/AACAvgAAAL8AAIC+AAAAPwAAGEAAAAA/AAAgQAAAkL8AACBAAACQvwAAGEAAAAC/AAAYQAAAkD8AABhAAACQPwAAIEAAAAC/AAAgQAAAMEAAAEC/AAAwQAAAgL4AAMA/AACAvgAAwD8AAEC/AACAPwAAQL8AAJA/AABAvwAAkD8AAIC+AACAPwAAgL4AAIC/AADAPwAAgL8AADBAAACQvwAAMEAAAJC/AADAPwAAgD8AAMA/AACQPwAAwD8AAJA/AAAwQAAAgD8AADBAAACAvwAAQL8AAIC/AACAvgAAkL8AAIC+AACQvwAAQL8AAMC/AABAvwAAwL8AAIC+AACwvwAAgL4AALC/AABAvwAAID8AAEC/AAAYQAAAQL8AABhAAACAvgAAID8AAIC+AAAgvwAAsD8AACC/AADAPwAAGMAAAMA/AAAYwAAAsD8AACA/AACwPwAAGEAAALA/AAAYQAAAwD8AACA/AADAPwAAwL8AAEC/AACwvwAAQL8AALC/AACAvgAAwL8AAIC+AADAPwAAQL8AAMA/AACAvgAAsD8AAIC+AACwPwAAQL8AAKC/AABAvwAAAAAAAEC/AAAAAAAAgL4AAKC/AACAvgAAoD8AALA/AACgPwAAwD8AAAAAAADAPwAAAAAAALA/AACgvwAAsD8AAAAAAACwPwAAAAAAAMA/AACgvwAAwD8AAMC/AABAvwAAsL8AAEC/AACwvwAAgL4AAMC/AACAvgAAwL8AAAC/AADAvwAAAAAAALC/AAAAAAAAsL8AAAC/AAAgPwAAAL8AAEA/AAAAvwAAQD8AAAAAAAAgPwAAAAAAACC/AACwPwAAIL8AAMA/AABAvwAAwD8AAEC/AACwPwAAID8AALA/AABAPwAAsD8AAEA/AADAPwAAID8AAMA/AADAvwAAAL8AALC/AAAAvwAAsL8AAAAAAADAvwAAAAAAAGA/AABAvwAAYD8AAIC+AAA4wAAAgL4AADjAAABAvwAAgL8AAEC/AABgvwAAQL8AAGC/AACAvgAAgL8AAIC+AACAPwAAOMAAAIA/AABgPwAAYD8AAGA/AABgPwAAOMAAAIC/AAA4wAAAYL8AADjAAABgvwAAYD8AAIC/AABgPwAAgD8AAEC/AACAPwAAgL4AAGA/AACAvgAAYD8AAEC/AACwPwAAQL8AALA/AACAvgAAAL8AAIC+AAAAvwAAQL8AACBAAABAvwAAKEAAAEC/AAAoQAAAgL4AACBAAACAvgAAIMAAAAC/AAAgwAAAsD8AACjAAACwPwAAKMAAAAC/AAAgQAAAAL8AAChAAAAAvwAAKEAAALA/AAAgQAAAsD8AACDAAABAvwAAIMAAAIC+AAAowAAAgL4AACjAAABAvwAAIEAAAEC/AAAgQAAAgL4AAChAAACAvgAAKEAAAEC/AADAvgAAQL8AAIA+AABAvwAAgD4AAIC+AADAvgAAgL4AAMA+AAAowAAAwD4AACDAAACAvgAAIMAAAIC+AAAowAAAwL4AACjAAACAPgAAKMAAAIA+AAAgwAAAwL4AACDAAAAgQAAAQL8AACBAAACAvgAAKEAAAIC+AAAoQAAAQL8AALC/AABAvwAAYL8AAEC/AABgvwAAgL4AALC/AACAvgAAsD8AACjAAACwPwAAIMAAAGA/AAAgwAAAYD8AACjAAACwvwAAKMAAAGC/AAAowAAAYL8AACDAAACwvwAAIMAAACBAAABAvwAAKEAAAEC/AAAoQAAAgL4AACBAAACAvgAAIMAAAIC+AAAgwAAAAL4AAMjAAAAAvgAAyMAAAIC+AACgvwAAgL4AAAA+AACAvgAAAD4AAAC+AACgvwAAAL4AAKA/AADIwAAAoD8AACDAAAAAvgAAIMAAAAC+AADIwAAAoD8AAIC+AACgPwAAAL4AAAC+AAAAvgAAAL4AAIC+AAAowAAAAL8AACjAAACAvgAAzMAAAIC+AADMwAAAAL8AAAAAAAAAvwAAAD4AAAC/AAAAPgAAgL4AAAAAAACAvgAAAAAAAMzAAAAAAAAAKMAAAAC+AAAowAAAAL4AAMzAAAAAAAAAAL8AAAAAAACAvgAAAL4AAIC+AAAAvgAAAL8AACjAAABAvwAAKMAAAIC+AABYwAAAgL4AAFjAAABAvwAAgL8AAEC/AABgvwAAQL8AAGC/AACAvgAAgL8AAIC+AACAPwAAWMAAAIA/AAAowAAAYD8AACjAAABgPwAAWMAAAIC/AABAvwAAgL8AAIC+AABgvwAAgL4AAGC/AABAvwAAeMAAAEC/AAB4wAAAgL4AAKDAAACAvgAAoMAAAEC/AACAvwAAQL8AAGC/AABAvwAAYL8AAIC+AACAvwAAgL4AAIA/AACgwAAAgD8AAHjAAABgPwAAeMAAAGA/AACgwAAAgD8AAEC/AACAPwAAgL4AAGA/AACAvgAAYD8AAEC/AACwwAAAQL8AALDAAACAvgAAzMAAAIC+AADMwAAAQL8AAIA/AABAvwAAYD8AAEC/AABgPwAAgL4AAIA/AACAvgAAgD8AAMzAAACAPwAAsMAAAGA/AACwwAAAYD8AAMzAAACAPwAAQL8AAIA/AACAvgAAYD8AAIC+AABgPwAAQL8AAKDAAACAvgAAoMAAAAC+AACwwAAAAL4AALDAAACAvgAAoL8AAIC+AACAvwAAgL4AAIC/AAAAvgAAoL8AAAC+AACgPwAAsMAAAKA/AACgwAAAgD8AAKDAAACAPwAAsMAAAKC/AACwwAAAgL8AALDAAACAvwAAoMAAAKC/AACgwAAAoD8AAIC+AACgPwAAAL4AAIA/AAAAvgAAgD8AAIC+AACgQAAAgL4AALBAAACAvgAAsEAAAAC+AACgQAAAAL4AAKDAAABAvwAAoMAAAIC+AACwwAAAgL4AALDAAABAvwAAgD8AAEC/AABgPwAAQL8AAGA/AACAvgAAgD8AAIC+AACAPwAAsMAAAIA/AACgwAAAYD8AAKDAAABgPwAAsMAAAIC/AACwwAAAYL8AALDAAABgvwAAoMAAAIC/AACgwAAAgD8AAEC/AACAPwAAgL4AAGA/AACAvgAAYD8AAEC/AACgQAAAQL8AALBAAABAvwAAsEAAAIC+AACgQAAAgL4AANBAAABAvwAA0EAAAIC+AADUQAAAgL4AANRAAABAvwAAMMAAAEC/AADAvgAAQL8AAMC+AACAvgAAMMAAAIC+AAAwQAAA1MAAADBAAADQwAAAwD4AANDAAADAPgAA1MAAADDAAADUwAAAwL4AANTAAADAvgAA0MAAADDAAADQwAAAMEAAAEC/AAAwQAAAgL4AAMA+AACAvgAAwD4AAEC/AADQQAAAQL8AANRAAABAvwAA1EAAAIC+AADQQAAAgL4AAMBAAABAvwAAwEAAAIC+AADEQAAAgL4AAMRAAABAvwAAwL4AAEC/AADwPwAAQL8AAPA/AACAvgAAwL4AAIC+AADAPgAAxMAAAMA+AADAwAAA8L8AAMDAAADwvwAAxMAAAMC+AADEwAAA8D8AAMTAAADwPwAAwMAAAMC+AADAwAAAwD4AAEC/AADAPgAAgL4AAPC/AACAvgAA8L8AAEC/AADAQAAAQL8AAMRAAABAvwAAxEAAAIC+AADAQAAAgL4AAGDAAACAvgAAYMAAAAC+AACAwAAAAL4AAIDAAACAvgAAoL8AAIC+AACAvwAAgL4AAIC/AAAAvgAAoL8AAAC+AACgPwAAgMAAAKA/AABgwAAAgD8AAGDAAACAPwAAgMAAAKC/AACAwAAAgL8AAIDAAACAvwAAYMAAAKC/AABgwAAAoD8AAIC+AACgPwAAAL4AAIA/AAAAvgAAgD8AAIC+AABgQAAAgL4AAIBAAACAvgAAgEAAAAC+AABgQAAAAL4AAGDAAABAvwAAYMAAAIC+AACAwAAAgL4AAIDAAABAvwAAwD8AAEC/AACwPwAAQL8AALA/AACAvgAAwD8AAIC+AADAPwAAgMAAAMA/AABgwAAAsD8AAGDAAACwPwAAgMAAAMC/AACAwAAAsL8AAIDAAACwvwAAYMAAAMC/AABgwAAAwD8AAEC/AADAPwAAgL4AALA/AACAvgAAsD8AAEC/AABgQAAAQL8AAIBAAABAvwAAgEAAAIC+AABgQAAAgL4AAIC+AACAvgAAgL4AAAC+AAAQwAAAAL4AABDAAACAvgAAMEAAAIC+AABYQAAAgL4AAFhAAAAAvgAAMEAAAAC+AAAwwAAAEMAAADDAAACAvgAAWMAAAIC+AABYwAAAEMAAADDAAACAvgAAMMAAAAC+AABYwAAAAL4AAFjAAACAvgAAgD4AAIC+AAAQQAAAgL4AABBAAAAAvgAAgD4AAAC+AAAgvwAAQL8AACC/AAAAvgAAKMAAAAC+AAAowAAAQL8AAEBAAABAvwAASEAAAEC/AABIQAAAAL4AAEBAAAAAvgAAQMAAACjAAABAwAAAIL8AAEjAAAAgvwAASMAAACjAAABAQAAAKMAAAEhAAAAowAAASEAAACC/AABAQAAAIL8AAAAAAABAvwAAAAAAAIC+AAAAPgAAgL4AAAA+AABAvwAAKEAAAEC/AABQQAAAQL8AAFBAAACAvgAAKEAAAIC+AAAowAAAAL4AACjAAAAAAAAAUMAAAAAAAABQwAAAAL4AAChAAAAAvgAAUEAAAAC+AABQQAAAAAAAAChAAAAAAAAAAMEAAIC+AAAAwQAAAL4AABzBAAAAvgAAHMEAAIC+AACAPgAAgL4AAABAAACAvgAAAEAAAAC+AACAPgAAAL4AAIC+AAAcwQAAgL4AAADBAAAAwAAAAMEAAADAAAAcwQAAgL4AAIC+AACAvgAAAL4AAADAAAAAvgAAAMAAAIC+AAAAQQAAgL4AABxBAACAvgAAHEEAAAC+AAAAQQAAAL4AACDBAACAvgAAIMEAAAC+AAA8wQAAAL4AADzBAACAvgAAQMAAAIC+AAAAQAAAgL4AAABAAAAAvgAAQMAAAAC+AABAQAAAPMEAAEBAAAAgwQAAAMAAACDBAAAAwAAAPMEAAEBAAACAvgAAQEAAAAC+AAAAwAAAAL4AAADAAACAvgAAIEEAAIC+AAA8QQAAgL4AADxBAAAAvgAAIEEAAAC+AAAKwQAAQL8AAArBAACAvgAAEsEAAIC+AAASwQAAQL8AAEDAAABAvwAAOMAAAEC/AAA4wAAAgL4AAEDAAACAvgAAQEAAABLBAABAQAAACsEAADhAAAAKwQAAOEAAABLBAABAwAAAQL8AAEDAAACAvgAAOMAAAIC+AAA4wAAAQL8AADLBAABAvwAAMsEAAIC+AABAwQAAgL4AAEDBAABAvwAAAMAAAEC/AAAIwAAAQL8AAAjAAACAvgAAAMAAAIC+AAAAwAAAQMEAAADAAAAywQAACMAAADLBAAAIwAAAQMEAAABAAABAwQAACEAAAEDBAAAIQAAAMsEAAABAAAAywQAAAMAAAEC/AAAAwAAAgL4AAAjAAACAvgAACMAAAEC/AABAQQAAQL8AAEBBAACAvgAAQkEAAIC+AABCQQAAQL8AAFjAAABAvwAA0D8AAEC/AADQPwAAgL4AAFjAAACAvgAAWEAAAELBAABYQAAAQMEAANC/AABAwQAA0L8AAELBAABYwAAAQsEAANA/AABCwQAA0D8AAEDBAABYwAAAQMEAAAjBAACAPgAACMEAAMA+AAAkwQAAwD4AACTBAACAPgAAwL8AAIA+AADAPgAAgD4AAMA+AADAPgAAwL8AAMA+AADAPwAAJMEAAMA/AAAIwQAAwL4AAAjBAADAvgAAJMEAAMA/AACAPgAAwD8AAMA+AADAvgAAwD4AAMC+AACAPgAACEEAAIA+AAAkQQAAgD4AACRBAADAPgAACEEAAMA+AAASwQAAoL8AABLBAABAvwAAQsEAAEC/AABCwQAAoL8AAEDAAACgvwAAOMAAAKC/AAA4wAAAQL8AAEDAAABAvwAAQEAAAELBAABAQAAAEsEAADhAAAASwQAAOEAAAELBAABAQAAAoL8AAEBAAABAvwAAOEAAAEC/AAA4QAAAoL8AANzAAACgvwAA3MAAAEC/AAAKwQAAQL8AAArBAACgvwAAQMAAAKC/AAA4wAAAoL8AADjAAABAvwAAQMAAAEC/AABAQAAACsEAAEBAAADcwAAAOEAAANzAAAA4QAAACsEAAEDAAACgvwAAQMAAAEC/AAA4wAAAQL8AADjAAACgvwAA1MAAAEC/AADUwAAAgL4AACrBAACAvgAAKsEAAEC/AAAAQAAAQL8AAAhAAABAvwAACEAAAIC+AAAAQAAAgL4AAADAAAAqwQAAAMAAANTAAAAIwAAA1MAAAAjAAAAqwQAAAEAAACrBAAAIQAAAKsEAAAhAAADUwAAAAEAAANTAAAAAwAAAQL8AAADAAACAvgAACMAAAIC+AAAIwAAAQL8AAB7BAACAvgAAHsEAAAC+AAA4wQAAAL4AADjBAACAvgAAIEAAAIC+AACAQAAAgL4AAIBAAAAAvgAAIEAAAAC+AAAgwAAAOMEAACDAAAAewQAAgMAAAB7BAACAwAAAOMEAACDAAACAvgAAIMAAAAC+AACAwAAAAL4AAIDAAACAvgAAHkEAAIC+AAA4QQAAgL4AADhBAAAAvgAAHkEAAAC+AAAAwQAAQL8AAADBAAAgvwAAHMEAACC/AAAcwQAAQL8AAKjAAABAvwAAQMAAAEC/AABAwAAAIL8AAKjAAAAgvwAAqEAAABzBAACoQAAAAMEAAEBAAAAAwQAAQEAAABzBAACoQAAAQL8AAKhAAAAgvwAAQEAAACC/AABAQAAAQL8AAABBAABAvwAAHEEAAEC/AAAcQQAAIL8AAABBAAAgvwAAFMEAAKC+AAAUwQAAgL4AABXBAACAvgAAFcEAAKC+AABAwAAAoL4AACzAAACgvgAALMAAAIC+AABAwAAAgL4AAEBAAAAVwQAAQEAAABTBAAAsQAAAFMEAACxAAAAVwQAAQMAAABXBAAAswAAAFcEAACzAAAAUwQAAQMAAABTBAABAQAAAoL4AAEBAAACAvgAALEAAAIC+AAAsQAAAoL4AABRBAACgvgAAFUEAAKC+AAAVQQAAgL4AABRBAACAvgAAFMEAAKC+AAAUwQAAgL4AABXBAACAvgAAFcEAAKC+AAAwwAAAoL4AACzAAACgvgAALMAAAIC+AAAwwAAAgL4AADBAAAAVwQAAMEAAABTBAAAsQAAAFMEAACxAAAAVwQAAMMAAABXBAAAswAAAFcEAACzAAAAUwQAAMMAAABTBAAAwQAAAoL4AADBAAACAvgAALEAAAIC+AAAsQAAAoL4AABRBAACgvgAAFUEAAKC+AAAVQQAAgL4AABRBAACAvgAAJMEAAKC+AAAkwQAAgL4AACXBAACAvgAAJcEAAKC+AABAwAAAoL4AACzAAACgvgAALMAAAIC+AABAwAAAgL4AAEBAAAAlwQAAQEAAACTBAAAsQAAAJMEAACxAAAAlwQAAQMAAACXBAAAswAAAJcEAACzAAAAkwQAAQMAAACTBAABAQAAAoL4AAEBAAACAvgAALEAAAIC+AAAsQAAAoL4AACRBAACgvgAAJUEAAKC+AAAlQQAAgL4AACRBAACAvgAAFMEAAKC+AAAUwQAAgL4AACXBAACAvgAAJcEAAKC+AAAUwAAAoL4AABDAAACgvgAAEMAAAIC+AAAUwAAAgL4AABRAAAAlwQAAFEAAABTBAAAQQAAAFMEAABBAAAAlwQAAFMAAACXBAAAQwAAAJcEAABDAAAAUwQAAFMAAABTBAAAUQAAAoL4AABRAAACAvgAAEEAAAIC+AAAQQAAAoL4AABRBAACgvgAAJUEAAKC+AAAlQQAAgL4AABRBAACAvgAA0MAAAKC+AADQwAAAgL4AANrAAACAvgAA2sAAAKC+AADAvwAAoL4AALi/AACgvgAAuL8AAIC+AADAvwAAgL4AAMA/AADawAAAwD8AANDAAAC4PwAA0MAAALg/AADawAAAwL8AANrAAAC4vwAA2sAAALi/AADQwAAAwL8AANDAAADAPwAAoL4AAMA/AACAvgAAuD8AAIC+AAC4PwAAoL4AANBAAACgvgAA2kAAAKC+AADaQAAAgL4AANBAAACAvgAA0MAAAKC+AADQwAAAgL4AANrAAACAvgAA2sAAAKC+AAAYwAAAoL4AABTAAACgvgAAFMAAAIC+AAAYwAAAgL4AABhAAADawAAAGEAAANDAAAAUQAAA0MAAABRAAADawAAAGMAAANrAAAAUwAAA2sAAABTAAADQwAAAGMAAANDAAAAYQAAAoL4AABhAAACAvgAAFEAAAIC+AAAUQAAAoL4AANBAAACgvgAA2kAAAKC+AADaQAAAgL4AANBAAACAvgAA2MAAAKC+AADYwAAAgL4AANrAAACAvgAA2sAAAKC+AAAQwAAAoL4AAMC/AACgvgAAwL8AAIC+AAAQwAAAgL4AABBAAADawAAAEEAAANjAAADAPwAA2MAAAMA/AADawAAAEMAAANrAAADAvwAA2sAAAMC/AADYwAAAEMAAANjAAAAQQAAAoL4AABBAAACAvgAAwD8AAIC+AADAPwAAoL4AANhAAACgvgAA2kAAAKC+AADaQAAAgL4AANhAAACAvgAA2MAAAKC+AADYwAAAgL4AAPjAAACAvgAA+MAAAKC+AAAwPwAAoL4AAEA/AACgvgAAQD8AAIC+AAAwPwAAgL4AADC/AAD4wAAAML8AANjAAABAvwAA2MAAAEC/AAD4wAAAMD8AAPjAAABAPwAA+MAAAEA/AADYwAAAMD8AANjAAAAwvwAAoL4AADC/AACAvgAAQL8AAIC+AABAvwAAoL4AANhAAACgvgAA+EAAAKC+AAD4QAAAgL4AANhAAACAvgAA9sAAAKC+AAD2wAAAgL4AAPjAAACAvgAA+MAAAKC+AABAPwAAoL4AAOA/AACgvgAA4D8AAIC+AABAPwAAgL4AAEC/AAD4wAAAQL8AAPbAAADgvwAA9sAAAOC/AAD4wAAAQD8AAPjAAADgPwAA+MAAAOA/AAD2wAAAQD8AAPbAAABAvwAAoL4AAEC/AACAvgAA4L8AAIC+AADgvwAAoL4AAPZAAACgvgAA+EAAAKC+AAD4QAAAgL4AAPZAAACAvgAA5sAAAKC+AADmwAAAgL4AAOjAAACAvgAA6MAAAKC+AABAPwAAoL4AAOA/AACgvgAA4D8AAIC+AABAPwAAgL4AAEC/AADowAAAQL8AAObAAADgvwAA5sAAAOC/AADowAAAQD8AAOjAAADgPwAA6MAAAOA/AADmwAAAQD8AAObAAABAvwAAoL4AAEC/AACAvgAA4L8AAIC+AADgvwAAoL4AAOZAAACgvgAA6EAAAKC+AADoQAAAgL4AAOZAAACAvgAA2MAAAKC+AADYwAAAgL4AAPjAAACAvgAA+MAAAKC+AADYPwAAoL4AAOA/AACgvgAA4D8AAIC+AADYPwAAgL4AANi/AAD4wAAA2L8AANjAAADgvwAA2MAAAOC/AAD4wAAA2D8AAPjAAADgPwAA+MAAAOA/AADYwAAA2D8AANjAAADYvwAAoL4AANi/AACAvgAA4L8AAIC+AADgvwAAoL4AANhAAACgvgAA+EAAAKC+AAD4QAAAgL4AANhAAACAvgAAEsEAAEC/AAASwQAAgL4AAELBAACAvgAAQsEAAEC/AABAwAAAQL8AADjAAABAvwAAOMAAAIC+AABAwAAAgL4AAEBAAABCwQAAQEAAABLBAAA4QAAAEsEAADhAAABCwQAAQEAAAEC/AABAQAAAgL4AADhAAACAvgAAOEAAAEC/AADcwAAAQL8AANzAAACAvgAACsEAAIC+AAAKwQAAQL8AAEDAAABAvwAAOMAAAEC/AAA4wAAAgL4AAEDAAACAvgAAQEAAAArBAABAQAAA3MAAADhAAADcwAAAOEAAAArBAABAwAAAQL8AAEDAAACAvgAAOMAAAIC+AAA4wAAAQL8AAPBAAACgvwAA8EAAAEC/AAD0QAAAQL8AAPRAAACgvwAAtsAAAKC/AABcwAAAoL8AAFzAAABAvwAAtsAAAEC/AAC2QAAA9MAAALZAAADwwAAAXEAAAPDAAABcQAAA9MAAALbAAAD0wAAAXMAAAPTAAABcwAAA8MAAALbAAADwwAAAtkAAAKC/AAC2QAAAQL8AAFxAAABAvwAAXEAAAKC/AADwQAAAoL8AAPRAAACgvwAA9EAAAEC/AADwQAAAQL8AABhBAABAvwAAGEEAAIC+AAAaQQAAgL4AABpBAABAvwAACEAAAEC/AABwQAAAQL8AAHBAAACAvgAACEAAAIC+AAAIwAAAGsEAAAjAAAAYwQAAcMAAABjBAABwwAAAGsEAAAhAAAAawQAAcEAAABrBAABwQAAAGMEAAAhAAAAYwQAACMAAAEC/AAAIwAAAgL4AAHDAAACAvgAAcMAAAEC/AAAYQQAAQL8AABpBAABAvwAAGkEAAIC+AAAYQQAAgL4AACLBAABAvwAAIsEAAIC+AAA6wQAAgL4AADrBAABAvwAAYMAAAEC/AABowAAAQL8AAGjAAACAvgAAYMAAAIC+AABgwAAAOsEAAGDAAAAiwQAAaMAAACLBAABowAAAOsEAAGBAAAA6wQAAaEAAADrBAABoQAAAIsEAAGBAAAAiwQAAYMAAAEC/AABgwAAAgL4AAGjAAACAvgAAaMAAAEC/AAA4QQAAQL8AADhBAACAvgAAOkEAAIC+AAA6QQAAQL8AAEhAAABAvwAAmEAAAEC/AACYQAAAgL4AAEhAAACAvgAASMAAADrBAABIwAAAOMEAAJjAAAA4wQAAmMAAADrBAABIQAAAOsEAAJhAAAA6wQAAmEAAADjBAABIQAAAOMEAADhBAABAvwAAOEEAAIC+AAA6QQAAgL4AADpBAABAvwAACEAAAEC/AAAoQAAAQL8AAChAAACAvgAACEAAAIC+AAAIwAAAOsEAAAjAAAA4wQAAKMAAADjBAAAowAAAOsEAAAhAAAA6wQAAKEAAADrBAAAoQAAAOMEAAAhAAAA4wQAAOEEAAEC/AAA6QQAAQL8AADpBAACAvgAAOEEAAIC+AAA4wQAAgL4AADjBAAAAvgAAbMEAAAC+AABswQAAgL4AACBAAACAvgAAoEAAAIC+AACgQAAAAL4AACBAAAAAvgAAIMAAAGzBAAAgwAAAOMEAAKDAAAA4wQAAoMAAAGzBAAAgwAAAgL4AACDAAAAAvgAAoMAAAAC+AACgwAAAgL4AADhBAACAvgAAbEEAAIC+AABsQQAAAL4AADhBAAAAvgAAQsEAAEC/AABCwQAAgL4AAGLBAACAvgAAYsEAAEC/AAAAwAAAQL8AAAjAAABAvwAACMAAAIC+AAAAwAAAgL4AAADAAABiwQAAAMAAAELBAAAIwAAAQsEAAAjAAABiwQAAAEAAAGLBAAAIQAAAYsEAAAhAAABCwQAAAEAAAELBAAAAwAAAQL8AAADAAACAvgAACMAAAIC+AAAIwAAAQL8AAGrBAABAvwAAasEAAIC+AABywQAAgL4AAHLBAABAvwAAAMAAAEC/AAAIwAAAQL8AAAjAAACAvgAAAMAAAIC+AAAAwAAAcsEAAADAAABqwQAACMAAAGrBAAAIwAAAcsEAAABAAABywQAACEAAAHLBAAAIQAAAasEAAABAAABqwQAAAMAAAEC/AAAAwAAAgL4AAAjAAACAvgAACMAAAEC/AABwQQAAAL8AAHBBAACAvgAAckEAAIC+AAByQQAAAL8AAAhAAAAAvwAAmEAAAAC/AACYQAAAgL4AAAhAAACAvgAACMAAAHLBAAAIwAAAcMEAAJjAAABwwQAAmMAAAHLBAAAIQAAAcsEAAJhAAABywQAAmEAAAHDBAAAIQAAAcMEAADTBAAAAvwAANMEAAIC+AABqwQAAgL4AAGrBAAAAvwAAkMAAAAC/AACUwAAAAL8AAJTAAACAvgAAkMAAAIC+AACQwAAAasEAAJDAAAA0wQAAlMAAADTBAACUwAAAasEAAJBAAABqwQAAlEAAAGrBAACUQAAANMEAAJBAAAA0wQAAkMAAAAC/AACQwAAAgL4AAJTAAACAvgAAlMAAAAC/AAA4wQAAgL4AADjBAAAAvgAAVMEAAAC+AABUwQAAgL4AADDAAACAvgAAQD8AAIC+AABAPwAAAL4AADDAAAAAvgAAMEAAAFTBAAAwQAAAOMEAAEC/AAA4wQAAQL8AAFTBAAAwQAAAgL4AADBAAAAAvgAAQL8AAAC+AABAvwAAgL4AADjBAACAvgAAVMEAAIC+AABUwQAAAL4AADjBAAAAvgAAOMEAAIC+AAA4wQAAAL4AAHjBAAAAvgAAeMEAAIC+AAAAPwAAgL4AAABAAACAvgAAAEAAAAC+AAAAPwAAAL4AAAC/AAB4wQAAAL8AADjBAAAAwAAAOMEAAADAAAB4wQAAAL8AAIC+AAAAvwAAAL4AAADAAAAAvgAAAMAAAIC+AAA4QQAAgL4AAHhBAACAvgAAeEEAAAC+AAA4QQAAAL4AAIBBAABAvwAAgEEAAAA+AACBQQAAAD4AAIFBAABAvwAAEMAAAEC/AADAvwAAQL8AAMC/AAAAPgAAEMAAAAA+AAAQQAAAgcEAABBAAACAwQAAwD8AAIDBAADAPwAAgcEAABDAAACBwQAAwL8AAIHBAADAvwAAgMEAABDAAACAwQAAgEEAAEC/AACBQQAAQL8AAIFBAAAAPgAAgEEAAAA+AACAQQAAAL8AAIBBAAAAPgAAgUEAAAA+AACBQQAAAL8AAAA/AAAAvwAAAEAAAAC/AAAAQAAAAD4AAAA/AAAAPgAAAL8AAIHBAAAAvwAAgMEAAADAAACAwQAAAMAAAIHBAAAAPwAAgcEAAABAAACBwQAAAEAAAIDBAAAAPwAAgMEAAGzBAAAAvwAAbMEAAIC+AAB6wQAAgL4AAHrBAAAAvwAAAMAAAAC/AAAIwAAAAL8AAAjAAACAvgAAAMAAAIC+AAAAwAAAesEAAADAAABswQAACMAAAGzBAAAIwAAAesEAAABAAAB6wQAACEAAAHrBAAAIQAAAbMEAAABAAABswQAAAMAAAAC/AAAAwAAAgL4AAAjAAACAvgAACMAAAAC/AACAwQAAgL4AAIDBAAAAvgAAjsEAAAC+AACOwQAAgL4AAIzAAACAvgAA4L8AAIC+AADgvwAAAL4AAIzAAAAAvgAAjEAAAI7BAACMQAAAgMEAAOA/AACAwQAA4D8AAI7BAACMQAAAgL4AAIxAAAAAvgAA4D8AAAC+AADgPwAAgL4AAIDBAACAvgAAjsEAAIC+AACOwQAAAL4AAIDBAAAAvgAAgEEAAAC/AACAQQAAAD4AAIFBAAAAPgAAgUEAAAC/AADAvwAAAL8AAAA/AAAAvwAAAD8AAAA+AADAvwAAAD4AAMA/AACBwQAAwD8AAIDBAAAAvwAAgMEAAAC/AACBwQAAwL8AAIHBAAAAPwAAgcEAAAA/AACAwQAAwL8AAIDBAACAQQAAAL8AAIFBAAAAvwAAgUEAAAA+AACAQQAAAD4AAIBBAABAvwAAgEEAAAA+AACBQQAAAD4AAIFBAABAvwAAjMAAAEC/AAAwwAAAQL8AADDAAAAAPgAAjMAAAAA+AACMQAAAgcEAAIxAAACAwQAAMEAAAIDBAAAwQAAAgcEAAIzAAACBwQAAMMAAAIHBAAAwwAAAgMEAAIzAAACAwQAAgEEAAEC/AACBQQAAQL8AAIFBAAAAPgAAgEEAAAA+AADowAAAoL4AAOjAAACAvgAA6sAAAIC+AADqwAAAoL4AAEDAAACgvgAALMAAAKC+AAAswAAAgL4AAEDAAACAvgAAQEAAAOrAAABAQAAA6MAAACxAAADowAAALEAAAOrAAABAwAAA6sAAACzAAADqwAAALMAAAOjAAABAwAAA6MAAAEBAAACgvgAAQEAAAIC+AAAsQAAAgL4AACxAAACgvgAA6EAAAKC+AADqQAAAoL4AAOpAAACAvgAA6EAAAIC+AAD4wAAAoL4AAPjAAACAvgAA+sAAAIC+AAD6wAAAoL4AAEDAAACgvgAALMAAAKC+AAAswAAAgL4AAEDAAACAvgAAQEAAAPrAAABAQAAA+MAAACxAAAD4wAAALEAAAPrAAABAwAAA+sAAACzAAAD6wAAALMAAAPjAAABAwAAA+MAAAEBAAACgvgAAQEAAAIC+AAAsQAAAgL4AACxAAACgvgAA+EAAAKC+AAD6QAAAoL4AAPpAAACAvgAA+EAAAIC+AAD4wAAAoL4AAPjAAACAvgAA+sAAAIC+AAD6wAAAoL4AADDAAACgvgAALMAAAKC+AAAswAAAgL4AADDAAACAvgAAMEAAAPrAAAAwQAAA+MAAACxAAAD4wAAALEAAAPrAAAAwwAAA+sAAACzAAAD6wAAALMAAAPjAAAAwwAAA+MAAADBAAACgvgAAMEAAAIC+AAAsQAAAgL4AACxAAACgvgAA+EAAAKC+AAD6QAAAoL4AAPpAAACAvgAA+EAAAIC+AAD4wAAAoL4AAPjAAACAvgAA+sAAAIC+AAD6wAAAoL4AADDAAACgvgAALMAAAKC+AAAswAAAgL4AADDAAACAvgAAMEAAAPrAAAAwQAAA+MAAACxAAAD4wAAALEAAAPrAAAAwwAAA+sAAACzAAAD6wAAALMAAAPjAAAAwwAAA+MAAADBAAACgvgAAMEAAAIC+AAAsQAAAgL4AACxAAACgvgAA+EAAAKC+AAD6QAAAoL4AAPpAAACAvgAA+EAAAIC+AACMQQAAAL8AAIxBAAAAPgAAjUEAAAA+AACNQQAAAL8AAJDAAAAAvwAAoL8AAAC/AACgvwAAAD4AAJDAAAAAPgAAkEAAAI3BAACQQAAAjMEAAKA/AACMwQAAoD8AAI3BAACQwAAAjcEAAKC/AACNwQAAoL8AAIzBAACQwAAAjMEAAIxBAAAAvwAAjUEAAAC/AACNQQAAAD4AAIxBAAAAPgAAgsEAAAC/AACCwQAAgL4AAJDBAACAvgAAkMEAAAC/AADAPwAAAL8AALA/AAAAvwAAsD8AAIC+AADAPwAAgL4AAMA/AACQwQAAwD8AAILBAACwPwAAgsEAALA/AACQwQAAwL8AAJDBAACwvwAAkMEAALC/AACCwQAAwL8AAILBAADAPwAAAL8AAMA/AACAvgAAsD8AAIC+AACwPwAAAL8AACBAAAAAvwAAIEAAAAC+AAAoQAAAAL4AAChAAAAAvwAAgD4AAAC/AABAQAAAAL8AAEBAAAAAvgAAgD4AAAC+AACAvgAAKMAAAIC+AAAgwAAAQMAAACDAAABAwAAAKMAAAALBAACgvwAAAsEAAEC/AAAewQAAQL8AAB7BAACgvwAAsMAAAKC/AACswAAAoL8AAKzAAABAvwAAsMAAAEC/AACwQAAAHsEAALBAAAACwQAArEAAAALBAACsQAAAHsEAALBAAACgvwAAsEAAAEC/AACsQAAAQL8AAKxAAACgvwAAGEEAAKC/AAAYQQAAQL8AABpBAABAvwAAGkEAAKC/AAC6wAAAoL8AAFzAAACgvwAAXMAAAEC/AAC6wAAAQL8AALpAAAAawQAAukAAABjBAABcQAAAGMEAAFxAAAAawQAAusAAABrBAABcwAAAGsEAAFzAAAAYwQAAusAAABjBAAC6QAAAoL8AALpAAABAvwAAXEAAAEC/AABcQAAAoL8AABhBAACgvwAAGkEAAKC/AAAaQQAAQL8AABhBAABAvwAAEcEAAIC+AAARwQAAAL4AACTBAAAAvgAAJMEAAIC+AABAwAAAgL4AAJC/AACAvgAAkL8AAAC+AABAwAAAAL4AAEBAAAAkwQAAQEAAABHBAACQPwAAEcEAAJA/AAAkwQAAQEAAAIC+AABAQAAAAL4AAJA/AAAAvgAAkD8AAIC+AAARQQAAgL4AACRBAACAvgAAJEEAAAC+AAARQQAAAL4AAAfBAACAvgAAB8EAAAC+AAARwQAAAL4AABHBAACAvgAAHMAAAIC+AACQvwAAgL4AAJC/AAAAvgAAHMAAAAC+AAAcQAAAEcEAABxAAAAHwQAAkD8AAAfBAACQPwAAEcEAABzAAACAvgAAHMAAAAC+AACQvwAAAL4AAJC/AACAvgAAB0EAAIC+AAARQQAAgL4AABFBAAAAvgAAB0EAAAC+AADQwAAAgL4AANDAAAAAvgAABMEAAAC+AAAEwQAAgL4AAJC/AACAvgAAAEAAAIC+AAAAQAAAAL4AAJC/AAAAvgAAkD8AAATBAACQPwAA0MAAAADAAADQwAAAAMAAAATBAACQPwAAgL4AAJA/AAAAvgAAAMAAAAC+AAAAwAAAgL4AANBAAACAvgAABEEAAIC+AAAEQQAAAL4AANBAAAAAvgAA0MAAAIC+AADQwAAAQL4AAAPBAABAvgAAA8EAAIC+AABEwAAAgL4AAJC/AACAvgAAkL8AAEC+AABEwAAAQL4AAERAAAADwQAAREAAANDAAACQPwAA0MAAAJA/AAADwQAAREAAAIC+AABEQAAAQL4AAJA/AABAvgAAkD8AAIC+AADQwAAAgL4AAAPBAACAvgAAA8EAAEC+AADQwAAAQL4="), +"aabb": AABB(-11, -1.0002441, -22, 82, 6.000244, 41), +"attribute_data": PackedByteArray("AAAwwAAAgL4A/H8/AACAvgD8fz8AAAC+AAAwwAAAAL4AABBAAAAAvgACoL8AAAC+AAKgvwAAgL4AABBAAACAvgAAEMAA/H8/AAAQwAAAMMAAAqA/AAAwwAACoD8A/H8/AAAQwAAAgL4AAqA/AACAvgACoD8AAAC+AAAQwAAAAL4AADBAAAAAvgD8f78AAAC+APx/vwAAgL4AADBAAACAvgAAwD8AAEC/AP83QAAAQL8A/zdAAACAvgAAwD8AAIC+AADAvgAAgL4A+P++AACAvgD4/74AAEC/AADAvgAAQL8AAMA+AP83QAAAwD4AAMA/APj/PgAAwD8A+P8+AP83QAAAwL4A/zdAAPj/vgD/N0AA+P++AADAPwAAwL4AAMA/AADAPgAAQL8A+P8+AABAvwD4/z4AAIC+AADAPgAAgL4AABhAAABAvwD/H0AAAEC/AP8fQAAAgL4AABhAAACAvgAAkD8AAIC+AAQAvwAAgL4ABAC/AABAvwAAkD8AAEC/AACQvwD/H0AAAJC/AAAYQAAEAD8AABhAAAQAPwD/H0AAAJA/AP8fQAAEAL8A/x9AAAQAvwAAGEAAAJA/AAAYQAAAwD8AAEC/AAEwQAAAQL8AATBAAACAvgAAwD8AAIC+AACQPwAAgL4AAIA/AACAvgAAgD8AAEC/AACQPwAAQL8AAJC/AAEwQAAAkL8AAMA/AACAvwAAwD8AAIC/AAEwQAAAkD8AATBAAACAPwABMEAAAIA/AADAPwAAkD8AAMA/AACQvwAAQL8AAIC/AABAvwAAgL8AAIC+AACQvwAAgL4AALC/AABAvwAAwL8AAEC/AADAvwAAgL4AALC/AACAvgAAGEAAAIC+AAAgPwAAgL4AACA/AABAvwAAGEAAAEC/AAAYwAAAwD8AABjAAACwPwAAIL8AALA/AAAgvwAAwD8AABhAAADAPwAAID8AAMA/AAAgPwAAsD8AABhAAACwPwAAsL8AAIC+AADAvwAAgL4AAMC/AABAvwAAsL8AAEC/AACwPwAAQL8AAMA/AABAvwAAwD8AAIC+AACwPwAAgL4AAAAAAACAvgACoL8AAIC+AAKgvwAAQL8AAAAAAABAvwAAAAAAAMA/AAAAAAAAsD8AAqA/AACwPwACoD8AAMA/AAAAAAAAwD8AAqC/AADAPwACoL8AALA/AAAAAAAAsD8AALC/AACAvgAAwL8AAIC+AADAvwAAQL8AALC/AABAvwAAsL8AAAC/AADAvwAAAL8AAMC/AAAAAAAAsL8AAAAAAABAPwAAAAAAACA/AAAAAAAAID8AAAC/AABAPwAAAL8AAEC/AADAPwAAQL8AALA/AAAgvwAAsD8AACC/AADAPwAAQD8AAMA/AAAgPwAAwD8AACA/AACwPwAAQD8AALA/AACwvwAAAAAAAMC/AAAAAAAAwL8AAAC/AACwvwAAAL8AADjAAABAvwD8Xz8AAEC/APxfPwAAgL4AADjAAACAvgAAYL8AAIC+AAKAvwAAgL4AAoC/AABAvwAAYL8AAEC/AABgPwD8Xz8AAGA/AAA4wAACgD8AADjAAAKAPwD8Xz8AAGC/APxfPwACgL8A/F8/AAKAvwAAOMAAAGC/AAA4wAAAYD8AAEC/AAKAPwAAQL8AAoA/AACAvgAAYD8AAIC+AAAAvwAAQL8AALA/AABAvwAAsD8AAIC+AAAAvwAAgL4AAChAAACAvgAAIEAAAIC+AAAgQAAAQL8AAChAAABAvwAAKMAAALA/AAAowAAAAL8AACDAAAAAvwAAIMAAALA/AAAoQAAAsD8AACBAAACwPwAAIEAAAAC/AAAoQAAAAL8AACjAAABAvwAAIMAAAEC/AAAgwAAAgL4AACjAAACAvgAAKEAAAEC/AAAgQAAAQL8AACBAAACAvgAAKEAAAIC+AACAPgAAgL4AAMC+AACAvgAAwL4AAEC/AACAPgAAQL8AAIC+AAAgwAAAgL4AACjAAADAPgAAKMAAAMA+AAAgwAAAgD4AACDAAADAvgAAIMAAAMC+AAAowAAAgD4AACjAAAAoQAAAQL8AACBAAABAvwAAIEAAAIC+AAAoQAAAgL4AAGC/AACAvgACsL8AAIC+AAKwvwAAQL8AAGC/AABAvwAAYD8AACDAAABgPwAAKMAAArA/AAAowAACsD8AACDAAABgvwAAIMAAArC/AAAgwAACsL8AACjAAABgvwAAKMAAAChAAACAvgAAIEAAAIC+AAAgQAAAQL8AAChAAABAvwAAyMAAAIC+AAAgwAAAgL4AACDAAAAAvgAAyMAAAAC+AAAAPgAAAL4AAqC/AAAAvgACoL8AAIC+AAAAPgAAgL4AAAC+AAAgwAAAAL4AAMjAAAKgPwAAyMAAAqA/AAAgwAAAAL4AAIC+AAKgPwAAgL4AAqA/AAAAvgAAAL4AAAC+AADMwAAAAL8AACjAAAAAvwAAKMAAAIC+AADMwAAAgL4AAAA+AACAvgAAAAAAAIC+AAAAAAAAAL8AAAA+AAAAvwAAAL4AACjAAAAAvgAAzMAAAAAAAADMwAAAAAAAACjAAAAAvgAAAL8AAAAAAAAAvwAAAAAAAIC+AAAAvgAAgL4AAFjAAABAvwAAKMAAAEC/AAAowAAAgL4AAFjAAACAvgAAYL8AAIC+AAKAvwAAgL4AAoC/AABAvwAAYL8AAEC/AABgPwAAKMAAAGA/AABYwAACgD8AAFjAAAKAPwAAKMAAAGC/AABAvwACgL8AAEC/AAKAvwAAgL4AAGC/AACAvgAAoMAAAEC/AAB4wAAAQL8AAHjAAACAvgAAoMAAAIC+AABgvwAAgL4AAoC/AACAvgACgL8AAEC/AABgvwAAQL8AAGA/AAB4wAAAYD8AAKDAAAKAPwAAoMAAAoA/AAB4wAAAYD8AAEC/AAKAPwAAQL8AAoA/AACAvgAAYD8AAIC+AADMwAAAQL8AALDAAABAvwAAsMAAAIC+AADMwAAAgL4AAGA/AACAvgACgD8AAIC+AAKAPwAAQL8AAGA/AABAvwAAYD8AALDAAABgPwAAzMAAAoA/AADMwAACgD8AALDAAABgPwAAQL8AAoA/AABAvwACgD8AAIC+AABgPwAAgL4AALDAAACAvgAAoMAAAIC+AACgwAAAAL4AALDAAAAAvgAAgL8AAAC+AP6fvwAAAL4A/p+/AACAvgAAgL8AAIC+AACAPwAAoMAAAIA/AACwwAD+nz8AALDAAP6fPwAAoMAAAIC/AACgwAD+n78AAKDAAP6fvwAAsMAAAIC/AACwwAAAgD8AAIC+AP6fPwAAgL4A/p8/AAAAvgAAgD8AAAC+AACwQAAAAL4AAKBAAAAAvgAAoEAAAIC+AACwQAAAgL4AALDAAABAvwAAoMAAAEC/AACgwAAAgL4AALDAAACAvgAAYD8AAIC+AACAPwAAgL4AAIA/AABAvwAAYD8AAEC/AABgPwAAoMAAAGA/AACwwAAAgD8AALDAAACAPwAAoMAAAGC/AACgwAAAgL8AAKDAAACAvwAAsMAAAGC/AACwwAAAYD8AAEC/AACAPwAAQL8AAIA/AACAvgAAYD8AAIC+AACwQAAAgL4AAKBAAACAvgAAoEAAAEC/AACwQAAAQL8AANRAAABAvwAA0EAAAEC/AADQQAAAgL4AANRAAACAvgAAwL4AAIC+AAAwwAAAgL4AADDAAABAvwAAwL4AAEC/AADAPgAA0MAAAMA+AADUwAAAMEAAANTAAAAwQAAA0MAAAMC+AADQwAAAMMAAANDAAAAwwAAA1MAAAMC+AADUwAAAwD4AAEC/AAAwQAAAQL8AADBAAACAvgAAwD4AAIC+AADUQAAAgL4AANBAAACAvgAA0EAAAEC/AADUQAAAQL8AAMRAAABAvwAAwEAAAEC/AADAQAAAgL4AAMRAAACAvgAA8D8AAIC+AADAvgAAgL4AAMC+AABAvwAA8D8AAEC/AADwvwAAwMAAAPC/AADEwAAAwD4AAMTAAADAPgAAwMAAAPA/AADAwAAAwL4AAMDAAADAvgAAxMAAAPA/AADEwAAA8L8AAEC/AADAPgAAQL8AAMA+AACAvgAA8L8AAIC+AADEQAAAgL4AAMBAAACAvgAAwEAAAEC/AADEQAAAQL8AAIDAAACAvgAAYMAAAIC+AABgwAAAAL4AAIDAAAAAvgAAgL8AAAC+AACgvwAAAL4AAKC/AACAvgAAgL8AAIC+AACAPwAAYMAAAIA/AACAwAAAoD8AAIDAAACgPwAAYMAAAIC/AABgwAAAoL8AAGDAAACgvwAAgMAAAIC/AACAwAAAgD8AAIC+AACgPwAAgL4AAKA/AAAAvgAAgD8AAAC+AACAQAAAAL4AAGBAAAAAvgAAYEAAAIC+AACAQAAAgL4AAIDAAABAvwAAYMAAAEC/AABgwAAAgL4AAIDAAACAvgAAsD8AAIC+AADAPwAAgL4AAMA/AABAvwAAsD8AAEC/AACwPwAAYMAAALA/AACAwAAAwD8AAIDAAADAPwAAYMAAALC/AABgwAAAwL8AAGDAAADAvwAAgMAAALC/AACAwAAAsD8AAEC/AADAPwAAQL8AAMA/AACAvgAAsD8AAIC+AACAQAAAgL4AAGBAAACAvgAAYEAAAEC/AACAQAAAQL8AABDAAACAvgAAgL4AAIC+AACAvgAAAL4AABDAAAAAvgAAWEAAAAC+AAAwQAAAAL4AADBAAACAvgAAWEAAAIC+AABYwAAAgL4AAFjAAAAQwAAAMMAAABDAAAAwwAAAgL4AAFjAAACAvgAAMMAAAIC+AAAwwAAAAL4AAFjAAAAAvgAAEEAAAAC+AACAPgAAAL4AAIA+AACAvgAAEEAAAIC+AAAowAAAQL8AACC/AABAvwAAIL8AAAC+AAAowAAAAL4AAEhAAAAAvgAAQEAAAAC+AABAQAAAQL8AAEhAAABAvwAASMAAACC/AABIwAAAKMAAAEDAAAAowAAAQMAAACC/AABIQAAAIL8AAEBAAAAgvwAAQEAAACjAAABIQAAAKMAAAAA+AABAvwAAAAAAAEC/AAAAAAAAgL4AAAA+AACAvgAAUEAAAIC+AAAoQAAAgL4AAChAAABAvwAAUEAAAEC/AABQwAAAAAAAAFDAAAAAvgAAKMAAAAC+AAAowAAAAAAAAFBAAAAAAAAAKEAAAAAAAAAoQAAAAL4AAFBAAAAAvgAAHMEAAIC+AAAAwQAAgL4AAADBAAAAvgAAHMEAAAC+AAAAQAAAAL4AAIA+AAAAvgAAgD4AAIC+AAAAQAAAgL4AAADAAAAAwQAAAMAAABzBAACAvgAAHMEAAIC+AAAAwQAAAMAAAIC+AACAvgAAgL4AAIC+AAAAvgAAAMAAAAC+AAAcQQAAAL4AAABBAAAAvgAAAEEAAIC+AAAcQQAAgL4AADzBAACAvgAAIMEAAIC+AAAgwQAAAL4AADzBAAAAvgAAAEAAAAC+AABAwAAAAL4AAEDAAACAvgAAAEAAAIC+AAAAwAAAIMEAAADAAAA8wQAAQEAAADzBAABAQAAAIMEAAADAAACAvgAAQEAAAIC+AABAQAAAAL4AAADAAAAAvgAAPEEAAAC+AAAgQQAAAL4AACBBAACAvgAAPEEAAIC+AAASwQAAQL8AAArBAABAvwAACsEAAIC+AAASwQAAgL4AADjAAACAvgAAQMAAAIC+AABAwAAAQL8AADjAAABAvwAAOEAAAArBAAA4QAAAEsEAAEBAAAASwQAAQEAAAArBAAA4wAAAQL8AAEDAAABAvwAAQMAAAIC+AAA4wAAAgL4AAEDBAABAvwAAMsEAAEC/AAAywQAAgL4AAEDBAACAvgAACMAAAIC+AAAAwAAAgL4AAADAAABAvwAACMAAAEC/AAAIwAAAMsEAAAjAAABAwQAAAMAAAEDBAAAAwAAAMsEAAAhAAAAywQAAAEAAADLBAAAAQAAAQMEAAAhAAABAwQAACMAAAEC/AAAAwAAAQL8AAADAAACAvgAACMAAAIC+AABCQQAAQL8AAEBBAABAvwAAQEEAAIC+AABCQQAAgL4AANA/AACAvgAAWMAAAIC+AABYwAAAQL8AANA/AABAvwAA0L8AAEDBAADQvwAAQsEAAFhAAABCwQAAWEAAAEDBAADQPwAAQMEAAFjAAABAwQAAWMAAAELBAADQPwAAQsEAACTBAACAPgAACMEAAIA+AAAIwQAIwD4AACTBAAjAPgAAwD4ACMA+AADAvwAIwD4AAMC/AACAPgAAwD4AAIA+AADAvgAACMEAAMC+AAAkwQAAwD8AACTBAADAPwAACMEAAMC+AACAPgAAwD8AAIA+AADAPwAIwD4AAMC+AAjAPgAAJEEACMA+AAAIQQAIwD4AAAhBAACAPgAAJEEAAIA+AABCwQAAoL8AABLBAACgvwAAEsEAAEC/AABCwQAAQL8AADjAAABAvwAAQMAAAEC/AABAwAAAoL8AADjAAACgvwAAOEAAABLBAAA4QAAAQsEAAEBAAABCwQAAQEAAABLBAAA4QAAAoL8AAEBAAACgvwAAQEAAAEC/AAA4QAAAQL8AAArBAACgvwAA3MAAAKC/AADcwAAAQL8AAArBAABAvwAAOMAAAEC/AABAwAAAQL8AAEDAAACgvwAAOMAAAKC/AAA4QAAA3MAAADhAAAAKwQAAQEAAAArBAABAQAAA3MAAADjAAACgvwAAQMAAAKC/AABAwAAAQL8AADjAAABAvwAAKsEAAEC/AADUwAAAQL8AANTAAACAvgAAKsEAAIC+AAAIQAAAgL4AAABAAACAvgAAAEAAAEC/AAAIQAAAQL8AAAjAAADUwAAACMAAACrBAAAAwAAAKsEAAADAAADUwAAACEAAANTAAAAAQAAA1MAAAABAAAAqwQAACEAAACrBAAAIwAAAQL8AAADAAABAvwAAAMAAAIC+AAAIwAAAgL4AADjBAACAvgAAHsEAAIC+AAAewQAAAL4AADjBAAAAvgAAgEAAAAC+AAAgQAAAAL4AACBAAACAvgAAgEAAAIC+AACAwAAAHsEAAIDAAAA4wQAAIMAAADjBAAAgwAAAHsEAAIDAAACAvgAAIMAAAIC+AAAgwAAAAL4AAIDAAAAAvgAAOEEAAAC+AAAeQQAAAL4AAB5BAACAvgAAOEEAAIC+AAAcwQAAQL8AAADBAABAvwAAAMEAACC/AAAcwQAAIL8AAEDAAAAgvwAAqMAAACC/AACowAAAQL8AAEDAAABAvwAAQEAAAADBAABAQAAAHMEAAKhAAAAcwQAAqEAAAADBAABAQAAAQL8AAKhAAABAvwAAqEAAACC/AABAQAAAIL8AABxBAAAgvwAAAEEAACC/AAAAQQAAQL8AABxBAABAvwAAFcEAAKC+AAAUwQAAoL4AABTBAACAvgAAFcEAAIC+AAAswAAAgL4AAEDAAACAvgAAQMAAAKC+AAAswAAAoL4AACxAAAAUwQAALEAAABXBAABAQAAAFcEAAEBAAAAUwQAALMAAABTBAABAwAAAFMEAAEDAAAAVwQAALMAAABXBAAAsQAAAoL4AAEBAAACgvgAAQEAAAIC+AAAsQAAAgL4AABVBAACAvgAAFEEAAIC+AAAUQQAAoL4AABVBAACgvgAAFcEAAKC+AAAUwQAAoL4AABTBAACAvgAAFcEAAIC+AAAswAAAgL4A/y/AAACAvgD/L8AAAKC+AAAswAAAoL4AACxAAAAUwQAALEAAABXBAP8vQAAAFcEA/y9AAAAUwQAALMAAABTBAP8vwAAAFMEA/y/AAAAVwQAALMAAABXBAAAsQAAAoL4A/y9AAACgvgD/L0AAAIC+AAAsQAAAgL4AABVBAACAvgAAFEEAAIC+AAAUQQAAoL4AABVBAACgvgAAJcEAAKC+AAAkwQAAoL4AACTBAACAvgAAJcEAAIC+AAAswAAAgL4AAEDAAACAvgAAQMAAAKC+AAAswAAAoL4AACxAAAAkwQAALEAAACXBAABAQAAAJcEAAEBAAAAkwQAALMAAACTBAABAwAAAJMEAAEDAAAAlwQAALMAAACXBAAAsQAAAoL4AAEBAAACgvgAAQEAAAIC+AAAsQAAAgL4AACVBAACAvgAAJEEAAIC+AAAkQQAAoL4AACVBAACgvgAAJcEAAKC+AAAUwQAAoL4AABTBAACAvgAAJcEAAIC+AAAQwAAAgL4A/xPAAACAvgD/E8AAAKC+AAAQwAAAoL4AABBAAAAUwQAAEEAAACXBAP8TQAAAJcEA/xNAAAAUwQAAEMAAABTBAP8TwAAAFMEA/xPAAAAlwQAAEMAAACXBAAAQQAAAoL4A/xNAAACgvgD/E0AAAIC+AAAQQAAAgL4AACVBAACAvgAAFEEAAIC+AAAUQQAAoL4AACVBAACgvgAA2sAAAKC+AADQwAAAoL4AANDAAACAvgAA2sAAAIC+AAC4vwAAgL4AAMC/AACAvgAAwL8AAKC+AAC4vwAAoL4AALg/AADQwAAAuD8AANrAAADAPwAA2sAAAMA/AADQwAAAuL8AANDAAADAvwAA0MAAAMC/AADawAAAuL8AANrAAAC4PwAAoL4AAMA/AACgvgAAwD8AAIC+AAC4PwAAgL4AANpAAACAvgAA0EAAAIC+AADQQAAAoL4AANpAAACgvgAA2sAAAKC+AADQwAAAoL4AANDAAACAvgAA2sAAAIC+AAAUwAAAgL4A/xfAAACAvgD/F8AAAKC+AAAUwAAAoL4AABRAAADQwAAAFEAAANrAAP8XQAAA2sAA/xdAAADQwAAAFMAAANDAAP8XwAAA0MAA/xfAAADawAAAFMAAANrAAAAUQAAAoL4A/xdAAACgvgD/F0AAAIC+AAAUQAAAgL4AANpAAACAvgAA0EAAAIC+AADQQAAAoL4AANpAAACgvgAA2sAAAKC+AADYwAAAoL4AANjAAACAvgAA2sAAAIC+AADAvwAAgL4AABDAAACAvgAAEMAAAKC+AADAvwAAoL4AAMA/AADYwAAAwD8AANrAAAAQQAAA2sAAABBAAADYwAAAwL8AANjAAAAQwAAA2MAAABDAAADawAAAwL8AANrAAADAPwAAoL4AABBAAACgvgAAEEAAAIC+AADAPwAAgL4AANpAAACAvgAA2EAAAIC+AADYQAAAoL4AANpAAACgvgAA+MAAAKC+AADYwAAAoL4AANjAAACAvgAA+MAAAIC+AABAPwAAgL4AADA/AACAvgAAMD8AAKC+AABAPwAAoL4AAEC/AADYwAAAQL8AAPjAAAAwvwAA+MAAADC/AADYwAAAQD8AANjAAAAwPwAA2MAAADA/AAD4wAAAQD8AAPjAAABAvwAAoL4AADC/AACgvgAAML8AAIC+AABAvwAAgL4AAPhAAACAvgAA2EAAAIC+AADYQAAAoL4AAPhAAACgvgAA+MAAAKC+AAD2wAAAoL4AAPbAAACAvgAA+MAAAIC+AADgPwAAgL4AAEA/AACAvgAAQD8AAKC+AADgPwAAoL4AAOC/AAD2wAAA4L8AAPjAAABAvwAA+MAAAEC/AAD2wAAA4D8AAPbAAABAPwAA9sAAAEA/AAD4wAAA4D8AAPjAAADgvwAAoL4AAEC/AACgvgAAQL8AAIC+AADgvwAAgL4AAPhAAACAvgAA9kAAAIC+AAD2QAAAoL4AAPhAAACgvgAA6MAAAKC+AADmwAAAoL4AAObAAACAvgAA6MAAAIC+AADgPwAAgL4AAEA/AACAvgAAQD8AAKC+AADgPwAAoL4AAOC/AADmwAAA4L8AAOjAAABAvwAA6MAAAEC/AADmwAAA4D8AAObAAABAPwAA5sAAAEA/AADowAAA4D8AAOjAAADgvwAAoL4AAEC/AACgvgAAQL8AAIC+AADgvwAAgL4AAOhAAACAvgAA5kAAAIC+AADmQAAAoL4AAOhAAACgvgAA+MAAAKC+AADYwAAAoL4AANjAAACAvgAA+MAAAIC+AADgPwAAgL4AANg/AACAvgAA2D8AAKC+AADgPwAAoL4AAOC/AADYwAAA4L8AAPjAAADYvwAA+MAAANi/AADYwAAA4D8AANjAAADYPwAA2MAAANg/AAD4wAAA4D8AAPjAAADgvwAAoL4AANi/AACgvgAA2L8AAIC+AADgvwAAgL4AAPhAAACAvgAA2EAAAIC+AADYQAAAoL4AAPhAAACgvgAAQsEAAEC/AAASwQAAQL8AABLBAACAvgAAQsEAAIC+AAA4wAAAgL4AAEDAAACAvgAAQMAAAEC/AAA4wAAAQL8AADhAAAASwQAAOEAAAELBAABAQAAAQsEAAEBAAAASwQAAOEAAAEC/AABAQAAAQL8AAEBAAACAvgAAOEAAAIC+AAAKwQAAQL8AANzAAABAvwAA3MAAAIC+AAAKwQAAgL4AADjAAACAvgAAQMAAAIC+AABAwAAAQL8AADjAAABAvwAAOEAAANzAAAA4QAAACsEAAEBAAAAKwQAAQEAAANzAAAA4wAAAQL8AAEDAAABAvwAAQMAAAIC+AAA4wAAAgL4AAPRAAACgvwAA8EAAAKC/AADwQAAAQL8AAPRAAABAvwAAXMAAAEC/AAC2wAAAQL8AALbAAACgvwAAXMAAAKC/AABcQAAA8MAAAFxAAAD0wAAAtkAAAPTAAAC2QAAA8MAAAFzAAADwwAAAtsAAAPDAAAC2wAAA9MAAAFzAAAD0wAAAXEAAAKC/AAC2QAAAoL8AALZAAABAvwAAXEAAAEC/AAD0QAAAQL8AAPBAAABAvwAA8EAAAKC/AAD0QAAAoL8AABpBAABAvwAAGEEAAEC/AAAYQQAAgL4AABpBAACAvgAAcEAAAIC+AAAIQAAAgL4AAAhAAABAvwAAcEAAAEC/AABwwAAAGMEAAHDAAAAawQAACMAAABrBAAAIwAAAGMEAAHBAAAAYwQAACEAAABjBAAAIQAAAGsEAAHBAAAAawQAAcMAAAEC/AAAIwAAAQL8AAAjAAACAvgAAcMAAAIC+AAAaQQAAgL4AABhBAACAvgAAGEEAAEC/AAAaQQAAQL8AADrBAABAvwAAIsEAAEC/AAAiwQAAgL4AADrBAACAvgAAaMAAAIC+AABgwAAAgL4AAGDAAABAvwAAaMAAAEC/AABowAAAIsEAAGjAAAA6wQAAYMAAADrBAABgwAAAIsEAAGhAAAAiwQAAYEAAACLBAABgQAAAOsEAAGhAAAA6wQAAaMAAAEC/AABgwAAAQL8AAGDAAACAvgAAaMAAAIC+AAA6QQAAQL8AADhBAABAvwAAOEEAAIC+AAA6QQAAgL4AAJhAAACAvgAASEAAAIC+AABIQAAAQL8AAJhAAABAvwAAmMAAADjBAACYwAAAOsEAAEjAAAA6wQAASMAAADjBAACYQAAAOMEAAEhAAAA4wQAASEAAADrBAACYQAAAOsEAADpBAABAvwAAOEEAAEC/AAA4QQAAgL4AADpBAACAvgAAKEAAAIC+AAAIQAAAgL4AAAhAAABAvwAAKEAAAEC/AAAowAAAOMEAACjAAAA6wQAACMAAADrBAAAIwAAAOMEAAChAAAA4wQAACEAAADjBAAAIQAAAOsEAAChAAAA6wQAAOkEAAIC+AAA4QQAAgL4AADhBAABAvwAAOkEAAEC/AABswQAAgL4AADjBAACAvgAAOMEAAAC+AABswQAAAL4AAKBAAAAAvgAAIEAAAAC+AAAgQAAAgL4AAKBAAACAvgAAoMAAADjBAACgwAAAbMEAACDAAABswQAAIMAAADjBAACgwAAAgL4AACDAAACAvgAAIMAAAAC+AACgwAAAAL4AAGxBAAAAvgAAOEEAAAC+AAA4QQAAgL4AAGxBAACAvgAAYsEAAEC/AABCwQAAQL8AAELBAACAvgAAYsEAAIC+AAAIwAAAgL4AAADAAACAvgAAAMAAAEC/AAAIwAAAQL8AAAjAAABCwQAACMAAAGLBAAAAwAAAYsEAAADAAABCwQAACEAAAELBAAAAQAAAQsEAAABAAABiwQAACEAAAGLBAAAIwAAAQL8AAADAAABAvwAAAMAAAIC+AAAIwAAAgL4AAHLBAABAvwAAasEAAEC/AABqwQAAgL4AAHLBAACAvgAACMAAAIC+AAAAwAAAgL4AAADAAABAvwAACMAAAEC/AAAIwAAAasEAAAjAAABywQAAAMAAAHLBAAAAwAAAasEAAAhAAABqwQAAAEAAAGrBAAAAQAAAcsEAAAhAAABywQAACMAAAEC/AAAAwAAAQL8AAADAAACAvgAACMAAAIC+AAByQQAAAL8AAHBBAAAAvwAAcEEAAIC+AAByQQAAgL4AAJhAAACAvgAACEAAAIC+AAAIQAAAAL8AAJhAAAAAvwAAmMAAAHDBAACYwAAAcsEAAAjAAABywQAACMAAAHDBAACYQAAAcMEAAAhAAABwwQAACEAAAHLBAACYQAAAcsEAAGrBAAAAvwAANMEAAAC/AAA0wQAAgL4AAGrBAACAvgAAlMAAAIC+AACQwAAAgL4AAJDAAAAAvwAAlMAAAAC/AACUwAAANMEAAJTAAABqwQAAkMAAAGrBAACQwAAANMEAAJRAAAA0wQAAkEAAADTBAACQQAAAasEAAJRAAABqwQAAlMAAAAC/AACQwAAAAL8AAJDAAACAvgAAlMAAAIC+AABUwQAAgL4AADjBAACAvgAAOMEAAAC+AABUwQAAAL4AAEA/AAAAvgAAMMAAAAC+AAAwwAAAgL4AAEA/AACAvgAAQL8AADjBAABAvwAAVMEAADBAAABUwQAAMEAAADjBAABAvwAAgL4AADBAAACAvgAAMEAAAAC+AABAvwAAAL4AAFTBAAAAvgAAOMEAAAC+AAA4wQAAgL4AAFTBAACAvgAAeMEAAIC+AAA4wQAAgL4AADjBAAAAvgAAeMEAAAC+AAAAQAAAAL4AAAA/AAAAvgAAAD8AAIC+AAAAQAAAgL4AAADAAAA4wQAAAMAAAHjBAAAAvwAAeMEAAAC/AAA4wQAAAMAAAIC+AAAAvwAAgL4AAAC/AAAAvgAAAMAAAAC+AAB4QQAAAL4AADhBAAAAvgAAOEEAAIC+AAB4QQAAgL4AAIFBAABAvwAAgEEAAEC/AACAQQAAAD4AAIFBAAAAPgAAwL8AAAA+AAAQwAAAAD4AABDAAABAvwAAwL8AAEC/AADAPwAAgMEAAMA/AACBwQAAEEAAAIHBAAAQQAAAgMEAAMC/AACAwQAAEMAAAIDBAAAQwAAAgcEAAMC/AACBwQAAgUEAAAA+AACAQQAAAD4AAIBBAABAvwAAgUEAAEC/AACBQQAAAL8AAIBBAAAAvwAAgEEAAAA+AACBQQAAAD4AAABAAAAAPgAAAD8AAAA+AAAAPwAAAL8AAABAAAAAvwAAAMAAAIDBAAAAwAAAgcEAAAC/AACBwQAAAL8AAIDBAAAAQAAAgMEAAAA/AACAwQAAAD8AAIHBAAAAQAAAgcEAAHrBAAAAvwAAbMEAAAC/AABswQAAgL4AAHrBAACAvgAACMAAAIC+AAAAwAAAgL4AAADAAAAAvwAACMAAAAC/AAAIwAAAbMEAAAjAAAB6wQAAAMAAAHrBAAAAwAAAbMEAAAhAAABswQAAAEAAAGzBAAAAQAAAesEAAAhAAAB6wQAACMAAAAC/AAAAwAAAAL8AAADAAACAvgAACMAAAIC+AACOwQAAgL4AAIDBAACAvgAAgMEAAAC+AACOwQAAAL4AAOC/AAAAvgAAjMAAAAC+AACMwAAAgL4AAOC/AACAvgAA4D8AAIDBAADgPwAAjsEAAIxAAACOwQAAjEAAAIDBAADgPwAAgL4AAIxAAACAvgAAjEAAAAC+AADgPwAAAL4AAI7BAAAAvgAAgMEAAAC+AACAwQAAgL4AAI7BAACAvgAAgUEAAAC/AACAQQAAAL8AAIBBAAAAPgAAgUEAAAA+AAAAPwAAAD4AAMC/AAAAPgAAwL8AAAC/AAAAPwAAAL8AAAC/AACAwQAAAL8AAIHBAADAPwAAgcEAAMA/AACAwQAAAD8AAIDBAADAvwAAgMEAAMC/AACBwQAAAD8AAIHBAACBQQAAAD4AAIBBAAAAPgAAgEEAAAC/AACBQQAAAL8AAIFBAABAvwAAgEEAAEC/AACAQQAAAD4AAIFBAAAAPgAAMMAAAAA+AACMwAAAAD4AAIzAAABAvwAAMMAAAEC/AAAwQAAAgMEAADBAAACBwQAAjEAAAIHBAACMQAAAgMEAADDAAACAwQAAjMAAAIDBAACMwAAAgcEAADDAAACBwQAAgUEAAAA+AACAQQAAAD4AAIBBAABAvwAAgUEAAEC/AADqwAAAoL4AAOjAAACgvgAA6MAAAIC+AADqwAAAgL4AACzAAACAvgAAQMAAAIC+AABAwAAAoL4AACzAAACgvgAALEAAAOjAAAAsQAAA6sAAAEBAAADqwAAAQEAAAOjAAAAswAAA6MAAAEDAAADowAAAQMAAAOrAAAAswAAA6sAAACxAAACgvgAAQEAAAKC+AABAQAAAgL4AACxAAACAvgAA6kAAAIC+AADoQAAAgL4AAOhAAACgvgAA6kAAAKC+AAD6wAAAoL4AAPjAAACgvgAA+MAAAIC+AAD6wAAAgL4AACzAAACAvgAAQMAAAIC+AABAwAAAoL4AACzAAACgvgAALEAAAPjAAAAsQAAA+sAAAEBAAAD6wAAAQEAAAPjAAAAswAAA+MAAAEDAAAD4wAAAQMAAAPrAAAAswAAA+sAAACxAAACgvgAAQEAAAKC+AABAQAAAgL4AACxAAACAvgAA+kAAAIC+AAD4QAAAgL4AAPhAAACgvgAA+kAAAKC+AAD6wAAAoL4AAPjAAACgvgAA+MAAAIC+AAD6wAAAgL4AACzAAACAvgD/L8AAAIC+AP8vwAAAoL4AACzAAACgvgAALEAAAPjAAAAsQAAA+sAA/y9AAAD6wAD/L0AAAPjAAAAswAAA+MAA/y/AAAD4wAD/L8AAAPrAAAAswAAA+sAAACxAAACgvgD/L0AAAKC+AP8vQAAAgL4AACxAAACAvgAA+kAAAIC+AAD4QAAAgL4AAPhAAACgvgAA+kAAAKC+AAD6wAAAoL4AAPjAAACgvgAA+MAAAIC+AAD6wAAAgL4AACzAAACAvgD/L8AAAIC+AP8vwAAAoL4AACzAAACgvgAALEAAAPjAAAAsQAAA+sAA/y9AAAD6wAD/L0AAAPjAAAAswAAA+MAA/y/AAAD4wAD/L8AAAPrAAAAswAAA+sAAACxAAACgvgD/L0AAAKC+AP8vQAAAgL4AACxAAACAvgAA+kAAAIC+AAD4QAAAgL4AAPhAAACgvgAA+kAAAKC+AACNQQAAAL8AAIxBAAAAvwAAjEEAAAA+AACNQQAAAD4AAKC/AAAAPgAAkMAAAAA+AACQwAAAAL8AAKC/AAAAvwAAoD8AAIzBAACgPwAAjcEAAJBAAACNwQAAkEAAAIzBAACgvwAAjMEAAJDAAACMwQAAkMAAAI3BAACgvwAAjcEAAI1BAAAAPgAAjEEAAAA+AACMQQAAAL8AAI1BAAAAvwAAkMEAAAC/AACCwQAAAL8AAILBAACAvgAAkMEAAIC+AACwPwAAgL4AAMA/AACAvgAAwD8AAAC/AACwPwAAAL8AALA/AACCwQAAsD8AAJDBAADAPwAAkMEAAMA/AACCwQAAsL8AAILBAADAvwAAgsEAAMC/AACQwQAAsL8AAJDBAACwPwAAAL8AAMA/AAAAvwAAwD8AAIC+AACwPwAAgL4AAChAAAAAvwAAIEAAAAC/AAAgQAAAAL4AAChAAAAAvgAAQEAAAAC+AACAPgAAAL4AAIA+AAAAvwAAQEAAAAC/AABAwAAAIMAAAEDAAAAowAAAgL4AACjAAACAvgAAIMAAAB7BAACgvwAAAsEAAKC/AAACwQAAQL8AAB7BAABAvwAArMAAAEC/AACwwAAAQL8AALDAAACgvwAArMAAAKC/AACsQAAAAsEAAKxAAAAewQAAsEAAAB7BAACwQAAAAsEAAKxAAACgvwAAsEAAAKC/AACwQAAAQL8AAKxAAABAvwAAGkEAAKC/AAAYQQAAoL8AABhBAABAvwAAGkEAAEC/AABcwAAAQL8AALrAAABAvwAAusAAAKC/AABcwAAAoL8AAFxAAAAYwQAAXEAAABrBAAC6QAAAGsEAALpAAAAYwQAAXMAAABjBAAC6wAAAGMEAALrAAAAawQAAXMAAABrBAABcQAAAoL8AALpAAACgvwAAukAAAEC/AABcQAAAQL8AABpBAABAvwAAGEEAAEC/AAAYQQAAoL8AABpBAACgvwAAJMEAAIC+AAARwQAAgL4AABHBAAAAvgAAJMEAAAC+AACQvwAAAL4AAEDAAAAAvgAAQMAAAIC+AACQvwAAgL4AAJA/AAARwQAAkD8AACTBAABAQAAAJMEAAEBAAAARwQAAkD8AAIC+AABAQAAAgL4AAEBAAAAAvgAAkD8AAAC+AAAkQQAAAL4AABFBAAAAvgAAEUEAAIC+AAAkQQAAgL4AABHBAACAvgAAB8EAAIC+AAAHwQAAAL4AABHBAAAAvgAAkL8AAAC+AP8bwAAAAL4A/xvAAACAvgAAkL8AAIC+AACQPwAAB8EAAJA/AAARwQD/G0AAABHBAP8bQAAAB8EAAJC/AACAvgD/G8AAAIC+AP8bwAAAAL4AAJC/AAAAvgAAEUEAAAC+AAAHQQAAAL4AAAdBAACAvgAAEUEAAIC+AAAEwQAAgL4AANDAAACAvgAA0MAAAAC+AAAEwQAAAL4AAABAAAAAvgACkL8AAAC+AAKQvwAAgL4AAABAAACAvgAAAMAAANDAAAAAwAAABMEAApA/AAAEwQACkD8AANDAAAAAwAAAgL4AApA/AACAvgACkD8AAAC+AAAAwAAAAL4AAARBAAAAvgAA0EAAAAC+AADQQAAAgL4AAARBAACAvgAAA8EAAIC+AADQwAAAgL4AANDAAABAvgAAA8EAAEC+AACQvwAAQL4AAETAAABAvgAARMAAAIC+AACQvwAAgL4AAJA/AADQwAAAkD8AAAPBAABEQAAAA8EAAERAAADQwAAAkD8AAIC+AABEQAAAgL4AAERAAABAvgAAkD8AAEC+AAADwQAAQL4AANDAAABAvgAA0MAAAIC+AAADwQAAgL4="), "format": 34359742487, "index_count": 2418, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsAPAA9AD4APAA+AD8AQABBAEIAQABCAEMARABFAEYARABGAEcASABJAEoASABKAEsATABNAE4ATABOAE8AUABRAFIAUABSAFMAVABVAFYAVABWAFcAWABZAFoAWABaAFsAXABdAF4AXABeAF8AYABhAGIAYABiAGMAZABlAGYAZABmAGcAaABpAGoAaABqAGsAbABtAG4AbABuAG8AcABxAHIAcAByAHMAdAB1AHYAdAB2AHcAeAB5AHoAeAB6AHsAfAB9AH4AfAB+AH8AgACBAIIAgACCAIMAhACFAIYAhACGAIcAiACJAIoAiACKAIsAjACNAI4AjACOAI8AkACRAJIAkACSAJMAlACVAJYAlACWAJcAmACZAJoAmACaAJsAnACdAJ4AnACeAJ8AoAChAKIAoACiAKMApAClAKYApACmAKcAqACpAKoAqACqAKsArACtAK4ArACuAK8AsACxALIAsACyALMAtAC1ALYAtAC2ALcAuAC5ALoAuAC6ALsAvAC9AL4AvAC+AL8AwADBAMIAwADCAMMAxADFAMYAxADGAMcAyADJAMoAyADKAMsAzADNAM4AzADOAM8A0ADRANIA0ADSANMA1ADVANYA1ADWANcA2ADZANoA2ADaANsA3ADdAN4A3ADeAN8A4ADhAOIA4ADiAOMA5ADlAOYA5ADmAOcA6ADpAOoA6ADqAOsA7ADtAO4A7ADuAO8A8ADxAPIA8ADyAPMA9AD1APYA9AD2APcA+AD5APoA+AD6APsA/AD9AP4A/AD+AP8AAAEBAQIBAAECAQMBBAEFAQYBBAEGAQcBCAEJAQoBCAEKAQsBDAENAQ4BDAEOAQ8BEAERARIBEAESARMBFAEVARYBFAEWARcBGAEZARoBGAEaARsBHAEdAR4BHAEeAR8BIAEhASIBIAEiASMBJAElASYBJAEmAScBKAEpASoBKAEqASsBLAEtAS4BLAEuAS8BMAExATIBMAEyATMBNAE1ATYBNAE2ATcBOAE5AToBOAE6ATsBPAE9AT4BPAE+AT8BQAFBAUIBQAFCAUMBRAFFAUYBRAFGAUcBSAFJAUoBSAFKAUsBTAFNAU4BTAFOAU8BUAFRAVIBUAFSAVMBVAFVAVYBVAFWAVcBWAFZAVoBWAFaAVsBXAFdAV4BXAFeAV8BYAFhAWIBYAFiAWMBZAFlAWYBZAFmAWcBaAFpAWoBaAFqAWsBbAFtAW4BbAFuAW8BcAFxAXIBcAFyAXMBdAF1AXYBdAF2AXcBeAF5AXoBeAF6AXsBfAF9AX4BfAF+AX8BgAGBAYIBgAGCAYMBhAGFAYYBhAGGAYcBiAGJAYoBiAGKAYsBjAGNAY4BjAGOAY8BkAGRAZIBkAGSAZMBlAGVAZYBlAGWAZcBmAGZAZoBmAGaAZsBnAGdAZ4BnAGeAZ8BoAGhAaIBoAGiAaMBpAGlAaYBpAGmAacBqAGpAaoBqAGqAasBrAGtAa4BrAGuAa8BsAGxAbIBsAGyAbMBtAG1AbYBtAG2AbcBuAG5AboBuAG6AbsBvAG9Ab4BvAG+Ab8BwAHBAcIBwAHCAcMBxAHFAcYBxAHGAccByAHJAcoByAHKAcsBzAHNAc4BzAHOAc8B0AHRAdIB0AHSAdMB1AHVAdYB1AHWAdcB2AHZAdoB2AHaAdsB3AHdAd4B3AHeAd8B4AHhAeIB4AHiAeMB5AHlAeYB5AHmAecB6AHpAeoB6AHqAesB7AHtAe4B7AHuAe8B8AHxAfIB8AHyAfMB9AH1AfYB9AH2AfcB+AH5AfoB+AH6AfsB/AH9Af4B/AH+Af8BAAIBAgICAAICAgMCBAIFAgYCBAIGAgcCCAIJAgoCCAIKAgsCDAINAg4CDAIOAg8CEAIRAhICEAISAhMCFAIVAhYCFAIWAhcCGAIZAhoCGAIaAhsCHAIdAh4CHAIeAh8CIAIhAiICIAIiAiMCJAIlAiYCJAImAicCKAIpAioCKAIqAisCLAItAi4CLAIuAi8CMAIxAjICMAIyAjMCNAI1AjYCNAI2AjcCOAI5AjoCOAI6AjsCPAI9Aj4CPAI+Aj8CQAJBAkICQAJCAkMCRAJFAkYCRAJGAkcCSAJJAkoCSAJKAksCTAJNAk4CTAJOAk8CUAJRAlICUAJSAlMCVAJVAlYCVAJWAlcCWAJZAloCWAJaAlsCXAJdAl4CXAJeAl8CYAJhAmICYAJiAmMCZAJlAmYCZAJmAmcCaAJpAmoCaAJqAmsCbAJtAm4CbAJuAm8CcAJxAnICcAJyAnMCdAJ1AnYCdAJ2AncCeAJ5AnoCeAJ6AnsCfAJ9An4CfAJ+An8CgAKBAoICgAKCAoMChAKFAoYChAKGAocCiAKJAooCiAKKAosCjAKNAo4CjAKOAo8CkAKRApICkAKSApMClAKVApYClAKWApcCmAKZApoCmAKaApsCnAKdAp4CnAKeAp8CoAKhAqICoAKiAqMCpAKlAqYCpAKmAqcCqAKpAqoCqAKqAqsCrAKtAq4CrAKuAq8CsAKxArICsAKyArMCtAK1ArYCtAK2ArcCuAK5AroCuAK6ArsCvAK9Ar4CvAK+Ar8CwALBAsICwALCAsMCxALFAsYCxALGAscCyALJAsoCyALKAssCzALNAs4CzALOAs8C0ALRAtIC0ALSAtMC1ALVAtYC1ALWAtcC2ALZAtoC2ALaAtsC3ALdAt4C3ALeAt8C4ALhAuIC4ALiAuMC5ALlAuYC5ALmAucC6ALpAuoC6ALqAusC7ALtAu4C7ALuAu8C8ALxAvIC8ALyAvMC9AL1AvYC9AL2AvcC+AL5AvoC+AL6AvsC/AL9Av4C/AL+Av8CAAMBAwIDAAMCAwMDBAMFAwYDBAMGAwcDCAMJAwoDCAMKAwsDDAMNAw4DDAMOAw8DEAMRAxIDEAMSAxMDFAMVAxYDFAMWAxcDGAMZAxoDGAMaAxsDHAMdAx4DHAMeAx8DIAMhAyIDIAMiAyMDJAMlAyYDJAMmAycDKAMpAyoDKAMqAysDLAMtAy4DLAMuAy8DMAMxAzIDMAMyAzMDNAM1AzYDNAM2AzcDOAM5AzoDOAM6AzsDPAM9Az4DPAM+Az8DQANBA0IDQANCA0MDRANFA0YDRANGA0cDSANJA0oDSANKA0sDTANNA04DTANOA08DUANRA1IDUANSA1MDVANVA1YDVANWA1cDWANZA1oDWANaA1sDXANdA14DXANeA18DYANhA2IDYANiA2MDZANlA2YDZANmA2cDaANpA2oDaANqA2sDbANtA24DbANuA28DcANxA3IDcANyA3MDdAN1A3YDdAN2A3cDeAN5A3oDeAN6A3sDfAN9A34DfAN+A38DgAOBA4IDgAOCA4MDhAOFA4YDhAOGA4cDiAOJA4oDiAOKA4sDjAONA44DjAOOA48DkAORA5IDkAOSA5MDlAOVA5YDlAOWA5cDmAOZA5oDmAOaA5sDnAOdA54DnAOeA58DoAOhA6IDoAOiA6MDpAOlA6YDpAOmA6cDqAOpA6oDqAOqA6sDrAOtA64DrAOuA68DsAOxA7IDsAOyA7MDtAO1A7YDtAO2A7cDuAO5A7oDuAO6A7sDvAO9A74DvAO+A78DwAPBA8IDwAPCA8MDxAPFA8YDxAPGA8cDyAPJA8oDyAPKA8sDzAPNA84DzAPOA88D0APRA9ID0APSA9MD1APVA9YD1APWA9cD2APZA9oD2APaA9sD3APdA94D3APeA98D4APhA+ID4APiA+MD5APlA+YD5APmA+cD6APpA+oD6APqA+sD7APtA+4D7APuA+8D8APxA/ID8APyA/MD9AP1A/YD9AP2A/cD+AP5A/oD+AP6A/sD/AP9A/4D/AP+A/8DAAQBBAIEAAQCBAMEBAQFBAYEBAQGBAcECAQJBAoECAQKBAsEDAQNBA4EDAQOBA8EEAQRBBIEEAQSBBMEFAQVBBYEFAQWBBcEGAQZBBoEGAQaBBsEHAQdBB4EHAQeBB8EIAQhBCIEIAQiBCMEJAQlBCYEJAQmBCcEKAQpBCoEKAQqBCsELAQtBC4ELAQuBC8EMAQxBDIEMAQyBDMENAQ1BDYENAQ2BDcEOAQ5BDoEOAQ6BDsEPAQ9BD4EPAQ+BD8EQARBBEIEQARCBEMERARFBEYERARGBEcESARJBEoESARKBEsETARNBE4ETAROBE8EUARRBFIEUARSBFMEVARVBFYEVARWBFcEWARZBFoEWARaBFsEXARdBF4EXAReBF8EYARhBGIEYARiBGMEZARlBGYEZARmBGcEaARpBGoEaARqBGsEbARtBG4EbARuBG8EcARxBHIEcARyBHMEdAR1BHYEdAR2BHcEeAR5BHoEeAR6BHsEfAR9BH4EfAR+BH8EgASBBIIEgASCBIMEhASFBIYEhASGBIcEiASJBIoEiASKBIsEjASNBI4EjASOBI8EkASRBJIEkASSBJMElASVBJYElASWBJcEmASZBJoEmASaBJsEnASdBJ4EnASeBJ8EoAShBKIEoASiBKMEpASlBKYEpASmBKcEqASpBKoEqASqBKsErAStBK4ErASuBK8EsASxBLIEsASyBLMEtAS1BLYEtAS2BLcEuAS5BLoEuAS6BLsEvAS9BL4EvAS+BL8EwATBBMIEwATCBMMExATFBMYExATGBMcEyATJBMoEyATKBMsEzATNBM4EzATOBM8E0ATRBNIE0ATSBNME1ATVBNYE1ATWBNcE2ATZBNoE2ATaBNsE3ATdBN4E3ATeBN8E4AThBOIE4ATiBOME5ATlBOYE5ATmBOcE6ATpBOoE6ATqBOsE7ATtBO4E7ATuBO8E8ATxBPIE8ATyBPME9AT1BPYE9AT2BPcE+AT5BPoE+AT6BPsE/AT9BP4E/AT+BP8EAAUBBQIFAAUCBQMFBAUFBQYFBAUGBQcFCAUJBQoFCAUKBQsFDAUNBQ4FDAUOBQ8FEAURBRIFEAUSBRMFFAUVBRYFFAUWBRcFGAUZBRoFGAUaBRsFHAUdBR4FHAUeBR8FIAUhBSIFIAUiBSMFJAUlBSYFJAUmBScFKAUpBSoFKAUqBSsFLAUtBS4FLAUuBS8FMAUxBTIFMAUyBTMFNAU1BTYFNAU2BTcFOAU5BToFOAU6BTsFPAU9BT4FPAU+BT8FQAVBBUIFQAVCBUMFRAVFBUYFRAVGBUcFSAVJBUoFSAVKBUsFTAVNBU4FTAVOBU8FUAVRBVIFUAVSBVMFVAVVBVYFVAVWBVcFWAVZBVoFWAVaBVsFXAVdBV4FXAVeBV8FYAVhBWIFYAViBWMFZAVlBWYFZAVmBWcFaAVpBWoFaAVqBWsFbAVtBW4FbAVuBW8FcAVxBXIFcAVyBXMFdAV1BXYFdAV2BXcFeAV5BXoFeAV6BXsFfAV9BX4FfAV+BX8FgAWBBYIFgAWCBYMFhAWFBYYFhAWGBYcFiAWJBYoFiAWKBYsFjAWNBY4FjAWOBY8FkAWRBZIFkAWSBZMFlAWVBZYFlAWWBZcFmAWZBZoFmAWaBZsFnAWdBZ4FnAWeBZ8FoAWhBaIFoAWiBaMFpAWlBaYFpAWmBacFqAWpBaoFqAWqBasFrAWtBa4FrAWuBa8FsAWxBbIFsAWyBbMFtAW1BbYFtAW2BbcFuAW5BboFuAW6BbsFvAW9Bb4FvAW+Bb8FwAXBBcIFwAXCBcMFxAXFBcYFxAXGBccFyAXJBcoFyAXKBcsFzAXNBc4FzAXOBc8F0AXRBdIF0AXSBdMF1AXVBdYF1AXWBdcF2AXZBdoF2AXaBdsF3AXdBd4F3AXeBd8F4AXhBeIF4AXiBeMF5AXlBeYF5AXmBecF6AXpBeoF6AXqBesF7AXtBe4F7AXuBe8F8AXxBfIF8AXyBfMF9AX1BfYF9AX2BfcF+AX5BfoF+AX6BfsF/AX9Bf4F/AX+Bf8FAAYBBgIGAAYCBgMGBAYFBgYGBAYGBgcGCAYJBgoGCAYKBgsGDAYNBg4GDAYOBg8GEAYRBhIGEAYSBhMGFAYVBhYGFAYWBhcGGAYZBhoGGAYaBhsGHAYdBh4GHAYeBh8GIAYhBiIGIAYiBiMGJAYlBiYGJAYmBicGKAYpBioGKAYqBisGLAYtBi4GLAYuBi8GMAYxBjIGMAYyBjMGNAY1BjYGNAY2BjcGOAY5BjoGOAY6BjsGPAY9Bj4GPAY+Bj8GQAZBBkIGQAZCBkMGRAZFBkYGRAZGBkcGSAZJBkoGSAZKBksG"), @@ -85,10 +85,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 1612, -"vertex_data": PackedByteArray("AACgwAAAgD8AAIDAAACgwAAAAD8AAIDAAAAgQQAAAD8AAIDAAAAgQQAAgD8AAIDAAACgwAAAgD8AAIDAAACgwAAAgD8AACBBAACgwAAAAD8AACBBAACgwAAAAD8AAIDAAAAgQQAAAD8AAIDAAACgwAAAAD8AAIDAAACgwAAAAD8AACBBAAAgQQAAAD8AACBBAAAgQQAAgD8AAIDAAAAgQQAAAD8AAIDAAAAgQQAAAD8AACBBAAAgQQAAgD8AACBBAACgwAAAgD8AACBBAAAgQQAAgD8AACBBAAAgQQAAAD8AACBBAACgwAAAAD8AACBBAAAwwQAAQEAAAADAAAAwwQAAgD8AAADAAACwwAAAgD8AAADAAACwwAAAQEAAAADAAAAwwQAAQEAAAADAAAAwwQAAQEAAAMC/AAAwwQAAgD8AAMC/AAAwwQAAgD8AAADAAACwwAAAgD8AAADAAAAwwQAAgD8AAADAAAAwwQAAgD8AAMC/AACwwAAAgD8AAMC/AACwwAAAQEAAAADAAACwwAAAQEAAAMC/AAAwwQAAQEAAAMC/AAAwwQAAQEAAAADAAACwwAAAQEAAAADAAACwwAAAgD8AAADAAACwwAAAgD8AAMC/AACwwAAAQEAAAMC/AAAwwQAAQEAAAMC/AAAwwQAAgD8AAMC/AAAowQAAgD8AAMC/AAAowQAAQEAAAMC/AAAwwQAAQEAAAMC/AAAwwQAAQEAAAKBAAAAwwQAAgD8AAKBAAAAwwQAAgD8AAMC/AAAowQAAgD8AAMC/AAAwwQAAgD8AAMC/AAAwwQAAgD8AAKBAAAAowQAAgD8AAKBAAAAowQAAQEAAAMC/AAAowQAAQEAAAKBAAAAwwQAAQEAAAKBAAAAwwQAAQEAAAMC/AAAowQAAQEAAAJBAAAAowQAAgD8AAJBAAACwwAAAgD8AAJBAAACwwAAAQEAAAJBAAAAowQAAQEAAAJBAAAAowQAAQEAAAKBAAAAowQAAgD8AAKBAAAAowQAAgD8AAJBAAACwwAAAgD8AAJBAAAAowQAAgD8AAJBAAAAowQAAgD8AAKBAAACwwAAAgD8AAKBAAACwwAAAQEAAAJBAAACwwAAAQEAAAKBAAAAowQAAQEAAAKBAAAAowQAAQEAAAJBAAACwwAAAQEAAAJBAAACwwAAAgD8AAJBAAACwwAAAgD8AAKBAAACwwAAAQEAAAKBAAACwwAAAQEAAAEBAAACwwAAAgD8AAEBAAACgwAAAgD8AAEBAAACgwAAAQEAAAEBAAACwwAAAQEAAAEBAAACwwAAAQEAAACBBAACwwAAAgD8AACBBAACwwAAAgD8AAEBAAACgwAAAgD8AAEBAAACwwAAAgD8AAEBAAACwwAAAgD8AACBBAACgwAAAgD8AACBBAACgwAAAQEAAAEBAAACgwAAAQEAAACBBAACwwAAAQEAAACBBAACwwAAAQEAAAEBAAACwwAAAQEAAACBBAACgwAAAQEAAACBBAACgwAAAgD8AACBBAACwwAAAgD8AACBBAACwwAAAQEAAAJDAAACwwAAAgD8AAJDAAACgwAAAgD8AAJDAAACgwAAAQEAAAJDAAACwwAAAQEAAAJDAAACwwAAAQEAAAAA/AACwwAAAgD8AAAA/AACwwAAAgD8AAJDAAACgwAAAgD8AAJDAAACwwAAAgD8AAJDAAACwwAAAgD8AAAA/AACgwAAAgD8AAAA/AACgwAAAQEAAAJDAAACgwAAAQEAAAAA/AACwwAAAQEAAAAA/AACwwAAAQEAAAJDAAACwwAAAQEAAAAA/AACgwAAAQEAAAAA/AACgwAAAgD8AAAA/AACwwAAAgD8AAAA/AACwwAAAQEAAACBAAACwwAAAgD8AACBAAACgwAAAgD8AACBAAACgwAAAQEAAACBAAACwwAAAQEAAACBAAACwwAAAQEAAAEBAAACwwAAAgD8AAEBAAACwwAAAgD8AACBAAACgwAAAgD8AACBAAACwwAAAgD8AACBAAACwwAAAgD8AAEBAAACgwAAAgD8AAEBAAACgwAAAQEAAACBAAACgwAAAQEAAAEBAAACwwAAAQEAAAEBAAACwwAAAQEAAACBAAACwwAAAQEAAAEBAAACgwAAAQEAAAEBAAACgwAAAgD8AAEBAAACwwAAAgD8AAEBAAACgwAAAQEAAAJDAAACgwAAAgD8AAJDAAAAgQQAAgD8AAJDAAAAgQQAAQEAAAJDAAACgwAAAQEAAAJDAAACgwAAAQEAAAIDAAACgwAAAgD8AAIDAAACgwAAAgD8AAJDAAAAgQQAAgD8AAJDAAACgwAAAgD8AAJDAAACgwAAAgD8AAIDAAAAgQQAAgD8AAIDAAAAgQQAAQEAAAJDAAAAgQQAAQEAAAIDAAACgwAAAQEAAAIDAAACgwAAAQEAAAJDAAAAgQQAAQEAAAJDAAAAgQQAAgD8AAJDAAAAgQQAAgD8AAIDAAAAgQQAAQEAAAIDAAACwwAAAQEAAACBBAACwwAAAgD8AACBBAAAAQAAAgD8AACBBAAAAQAAAQEAAACBBAACwwAAAQEAAACBBAACwwAAAQEAAAChBAACwwAAAgD8AAChBAACwwAAAgD8AACBBAAAAQAAAgD8AACBBAACwwAAAgD8AACBBAACwwAAAgD8AAChBAAAAQAAAgD8AAChBAAAAQAAAQEAAACBBAAAAQAAAQEAAAChBAACwwAAAQEAAAChBAACwwAAAQEAAACBBAAAAQAAAQEAAACBBAAAAQAAAgD8AACBBAAAAQAAAgD8AAChBAAAAQAAAQEAAAChBAAAgQQAAQEAAAAC/AAAgQQAAgD8AAAC/AAAoQQAAgD8AAAC/AAAoQQAAQEAAAAC/AAAgQQAAQEAAAAC/AAAgQQAAQEAAAABAAAAgQQAAgD8AAABAAAAgQQAAgD8AAAC/AAAoQQAAgD8AAAC/AAAgQQAAgD8AAAC/AAAgQQAAgD8AAABAAAAoQQAAgD8AAABAAAAoQQAAQEAAAAC/AAAoQQAAQEAAAABAAAAgQQAAQEAAAABAAAAgQQAAQEAAAAC/AAAgQQAAQEAAAJDAAAAgQQAAgD8AAJDAAAAoQQAAgD8AAJDAAAAoQQAAQEAAAJDAAAAgQQAAQEAAAJDAAAAgQQAAQEAAACDAAAAgQQAAgD8AACDAAAAgQQAAgD8AAJDAAAAoQQAAgD8AAJDAAAAgQQAAgD8AAJDAAAAgQQAAgD8AACDAAAAoQQAAgD8AACDAAAAoQQAAQEAAAJDAAAAoQQAAQEAAACDAAAAgQQAAQEAAACDAAAAgQQAAQEAAAJDAAAAgQQAAQEAAACDAAAAoQQAAQEAAACDAAAAoQQAAgD8AACDAAAAgQQAAgD8AACDAAAAoQQAAgD8AAIDAAAAoQQAAAD8AAIDAAADMQQAAAD8AAIDAAADMQQAAgD8AAIDAAAAoQQAAgD8AAIDAAAAoQQAAgD8AAMA/AAAoQQAAAD8AAMA/AAAoQQAAAD8AAIDAAADMQQAAAD8AAIDAAAAoQQAAAD8AAIDAAAAoQQAAAD8AAMA/AADMQQAAAD8AAMA/AADMQQAAgD8AAIDAAADMQQAAAD8AAIDAAADMQQAAAD8AAMA/AADMQQAAgD8AAMA/AAAoQQAAAEAAAMA/AAAoQQAAgD8AAMA/AADMQQAAgD8AAMA/AADMQQAAAEAAAMA/AAAoQQAAAEAAAMA/AAAoQQAAAEAAAABAAAAoQQAAgD8AAABAAAAoQQAAgD8AAMA/AADMQQAAgD8AAMA/AAAoQQAAgD8AAMA/AAAoQQAAgD8AAABAAADMQQAAgD8AAABAAADMQQAAAEAAAMA/AADMQQAAgD8AAMA/AADMQQAAgD8AAABAAADMQQAAAEAAAABAAAAoQQAAQEAAAJDAAAAoQQAAgD8AAJDAAABYQQAAgD8AAJDAAABYQQAAQEAAAJDAAAAoQQAAQEAAAJDAAAAoQQAAQEAAAIDAAAAoQQAAgD8AAIDAAAAoQQAAgD8AAJDAAABYQQAAgD8AAJDAAAAoQQAAgD8AAJDAAAAoQQAAgD8AAIDAAABYQQAAgD8AAIDAAABYQQAAQEAAAJDAAABYQQAAgD8AAJDAAABYQQAAgD8AAIDAAABYQQAAQEAAAIDAAAB4QQAAQEAAAJDAAAB4QQAAgD8AAJDAAACgQQAAgD8AAJDAAACgQQAAQEAAAJDAAAB4QQAAQEAAAJDAAAB4QQAAQEAAAIDAAAB4QQAAgD8AAIDAAAB4QQAAgD8AAJDAAACgQQAAgD8AAJDAAAB4QQAAgD8AAJDAAAB4QQAAgD8AAIDAAACgQQAAgD8AAIDAAACgQQAAQEAAAJDAAACgQQAAgD8AAJDAAACgQQAAgD8AAIDAAACgQQAAQEAAAIDAAACwQQAAQEAAAJDAAACwQQAAgD8AAJDAAADMQQAAgD8AAJDAAADMQQAAQEAAAJDAAACwQQAAQEAAAJDAAACwQQAAQEAAAIDAAACwQQAAgD8AAIDAAACwQQAAgD8AAJDAAADMQQAAgD8AAJDAAACwQQAAgD8AAJDAAACwQQAAgD8AAIDAAADMQQAAgD8AAIDAAADMQQAAQEAAAJDAAADMQQAAgD8AAJDAAADMQQAAgD8AAIDAAADMQQAAQEAAAIDAAACgQQAAgD8AAKDAAACgQQAAAD8AAKDAAACwQQAAAD8AAKDAAACwQQAAgD8AAKDAAACgQQAAgD8AAKDAAACgQQAAgD8AAIDAAACgQQAAAD8AAIDAAACgQQAAAD8AAKDAAACwQQAAAD8AAKDAAACgQQAAAD8AAKDAAACgQQAAAD8AAIDAAACwQQAAAD8AAIDAAACwQQAAgD8AAKDAAACwQQAAgD8AAIDAAACgQQAAgD8AAIDAAACgQQAAgD8AAKDAAACwQQAAgD8AAKDAAACwQQAAAD8AAKDAAACwQQAAAD8AAIDAAACwQQAAgD8AAIDAAACgQQAAgD8AAIDAAACwQQAAgD8AAIDAAACwQQAAAD8AAIDAAACgQQAAAD8AAIDAAACgQQAAQEAAALDAAACgQQAAgD8AALDAAACwQQAAgD8AALDAAACwQQAAQEAAALDAAACgQQAAQEAAALDAAACgQQAAQEAAAKDAAACgQQAAgD8AAKDAAACgQQAAgD8AALDAAACwQQAAgD8AALDAAACgQQAAgD8AALDAAACgQQAAgD8AAKDAAACwQQAAgD8AAKDAAACwQQAAQEAAALDAAACwQQAAQEAAAKDAAACgQQAAQEAAAKDAAACgQQAAQEAAALDAAACwQQAAQEAAALDAAACwQQAAgD8AALDAAACwQQAAgD8AAKDAAACwQQAAQEAAAKDAAACgQQAAQEAAAKDAAACwQQAAQEAAAKDAAACwQQAAgD8AAKDAAACgQQAAgD8AAKDAAADMQQAAQEAAAEDBAADMQQAAgD8AAEDBAADQQQAAgD8AAEDBAADQQQAAQEAAAEDBAADMQQAAQEAAAEDBAADMQQAAQEAAACDAAADMQQAAgD8AACDAAADMQQAAgD8AAEDBAADQQQAAgD8AAEDBAADMQQAAgD8AAEDBAADMQQAAgD8AACDAAADQQQAAgD8AACDAAADQQQAAQEAAAEDBAADQQQAAQEAAACDAAADMQQAAQEAAACDAAADMQQAAQEAAAEDBAADQQQAAQEAAAEDBAADQQQAAgD8AAEDBAADQQQAAgD8AACDAAADQQQAAQEAAACDAAADMQQAAQEAAACDAAADQQQAAQEAAACDAAADQQQAAgD8AACDAAADMQQAAgD8AACDAAADMQQAAQEAAAAC/AADMQQAAgD8AAAC/AADQQQAAgD8AAAC/AADQQQAAQEAAAAC/AADMQQAAQEAAAAC/AADMQQAAQEAAAAhBAADMQQAAgD8AAAhBAADMQQAAgD8AAAC/AADQQQAAgD8AAAC/AADMQQAAgD8AAAC/AADMQQAAgD8AAAhBAADQQQAAgD8AAAhBAADQQQAAQEAAAAC/AADQQQAAQEAAAAhBAADMQQAAQEAAAAhBAADMQQAAQEAAAAC/AADQQQAAQEAAAAC/AADQQQAAgD8AAAC/AADQQQAAgD8AAAhBAADQQQAAQEAAAAhBAADMQQAAQEAAAAhBAADQQQAAQEAAAAhBAADQQQAAgD8AAAhBAADMQQAAgD8AAAhBAABYQQAAgD8AALDAAABYQQAAAD8AALDAAAB4QQAAAD8AALDAAAB4QQAAgD8AALDAAABYQQAAgD8AALDAAABYQQAAgD8AAJDAAABYQQAAAD8AAJDAAABYQQAAAD8AALDAAAB4QQAAAD8AALDAAABYQQAAAD8AALDAAABYQQAAAD8AAJDAAAB4QQAAAD8AAJDAAAB4QQAAgD8AALDAAAB4QQAAgD8AAJDAAABYQQAAgD8AAJDAAABYQQAAgD8AALDAAAB4QQAAgD8AALDAAAB4QQAAAD8AALDAAAB4QQAAAD8AAJDAAAB4QQAAgD8AAJDAAABYQQAAgD8AAJDAAAB4QQAAgD8AAJDAAAB4QQAAAD8AAJDAAABYQQAAAD8AAJDAAABYQQAAQEAAALDAAABYQQAAgD8AALDAAAB4QQAAgD8AALDAAAB4QQAAQEAAALDAAABYQQAAQEAAALDAAABYQQAAQEAAAKDAAABYQQAAgD8AAKDAAABYQQAAgD8AALDAAAB4QQAAgD8AALDAAABYQQAAgD8AALDAAABYQQAAgD8AAKDAAAB4QQAAgD8AAKDAAAB4QQAAQEAAALDAAAB4QQAAQEAAAKDAAABYQQAAQEAAAKDAAABYQQAAQEAAALDAAAB4QQAAQEAAALDAAAB4QQAAgD8AALDAAAB4QQAAgD8AAKDAAAB4QQAAQEAAAKDAAABYQQAAQEAAAKDAAAB4QQAAQEAAAKDAAAB4QQAAgD8AAKDAAABYQQAAgD8AAKDAAAAAQAAAgD8AACBBAAAAQAAAAD8AACBBAAAgQQAAAD8AACBBAAAgQQAAgD8AACBBAAAAQAAAgD8AACBBAAAAQAAAgD8AAEhBAAAAQAAAAD8AAEhBAAAAQAAAAD8AACBBAAAgQQAAAD8AACBBAAAAQAAAAD8AACBBAAAAQAAAAD8AAEhBAAAgQQAAAD8AAEhBAAAgQQAAgD8AACBBAAAgQQAAAD8AACBBAAAgQQAAAD8AAEhBAAAgQQAAgD8AAEhBAAAAQAAAgD8AAEhBAAAgQQAAgD8AAEhBAAAgQQAAAD8AAEhBAAAAQAAAAD8AAEhBAAAAQAAAQEAAAEhBAAAAQAAAAD8AAEhBAAAgQQAAAD8AAEhBAAAgQQAAQEAAAEhBAAAAQAAAQEAAAEhBAAAAQAAAQEAAAFBBAAAAQAAAAD8AAFBBAAAAQAAAAD8AAEhBAAAgQQAAAD8AAEhBAAAAQAAAAD8AAEhBAAAAQAAAAD8AAFBBAAAgQQAAAD8AAFBBAAAgQQAAQEAAAEhBAAAgQQAAQEAAAFBBAAAAQAAAQEAAAFBBAAAAQAAAQEAAAEhBAADAPwAAQEAAAChBAADAPwAAgD8AAChBAAAAQAAAgD8AAChBAAAAQAAAQEAAAChBAADAPwAAQEAAAChBAADAPwAAQEAAAFBBAADAPwAAgD8AAFBBAADAPwAAgD8AAChBAAAAQAAAgD8AAChBAADAPwAAgD8AAChBAADAPwAAgD8AAFBBAAAAQAAAgD8AAFBBAAAAQAAAQEAAAChBAAAAQAAAQEAAAFBBAADAPwAAQEAAAFBBAADAPwAAQEAAAChBAAAEQgAAgD8AAIA/AAAEQgAAAD8AAIA/AAAgQgAAAD8AAIA/AAAgQgAAgD8AAIA/AAAEQgAAgD8AAIA/AAAEQgAAgD8AAABBAAAEQgAAAD8AAABBAAAEQgAAAD8AAIA/AAAgQgAAAD8AAIA/AAAEQgAAAD8AAIA/AAAEQgAAAD8AAABBAAAgQgAAAD8AAABBAAAgQgAAgD8AAIA/AAAgQgAAAD8AAIA/AAAgQgAAAD8AAABBAAAgQgAAgD8AAABBAAAEQgAAgD8AAABBAAAgQgAAgD8AAABBAAAgQgAAAD8AAABBAAAEQgAAAD8AAABBAAAgQgAAgD8AAEDBAAAgQgAAAD8AAEDBAAA8QgAAAD8AAEDBAAA8QgAAgD8AAEDBAAAgQgAAgD8AAEDBAAAgQgAAgD8AAABBAAAgQgAAAD8AAABBAAAgQgAAAD8AAEDBAAA8QgAAAD8AAEDBAAAgQgAAAD8AAEDBAAAgQgAAAD8AAABBAAA8QgAAAD8AAABBAAA8QgAAgD8AAEDBAAA8QgAAAD8AAEDBAAA8QgAAAD8AAABBAAA8QgAAgD8AAABBAAAgQgAAgD8AAABBAAA8QgAAgD8AAABBAAA8QgAAAD8AAABBAAAgQgAAAD8AAABBAAAEQgAAQEAAAEjBAAAEQgAAgD8AAEjBAAAMQgAAgD8AAEjBAAAMQgAAQEAAAEjBAAAEQgAAQEAAAEjBAAAEQgAAQEAAAEDBAAAEQgAAgD8AAEDBAAAEQgAAgD8AAEjBAAAMQgAAgD8AAEjBAAAEQgAAgD8AAEjBAAAEQgAAgD8AAEDBAAAMQgAAgD8AAEDBAAAMQgAAQEAAAEjBAAAMQgAAgD8AAEjBAAAMQgAAgD8AAEDBAAAMQgAAQEAAAEDBAAAwQgAAQEAAAABBAAAwQgAAgD8AAABBAAA+QgAAgD8AAABBAAA+QgAAQEAAAABBAAAwQgAAQEAAAABBAAAwQgAAQEAAAAhBAAAwQgAAgD8AAAhBAAAwQgAAgD8AAABBAAA+QgAAgD8AAABBAAAwQgAAgD8AAABBAAAwQgAAgD8AAAhBAAA+QgAAgD8AAAhBAAA+QgAAQEAAAABBAAA+QgAAQEAAAAhBAAAwQgAAQEAAAAhBAAAwQgAAQEAAAABBAAA+QgAAQEAAAABBAAA+QgAAgD8AAABBAAA+QgAAgD8AAAhBAAA+QgAAQEAAAAhBAAA8QgAAQEAAAEDBAAA8QgAAgD8AAEDBAAA+QgAAgD8AAEDBAAA+QgAAQEAAAEDBAAA8QgAAQEAAAEDBAAA8QgAAQEAAAABBAAA8QgAAgD8AAABBAAA8QgAAgD8AAEDBAAA+QgAAgD8AAEDBAAA8QgAAgD8AAEDBAAA8QgAAgD8AAABBAAA+QgAAgD8AAABBAAA+QgAAQEAAAEDBAAA+QgAAQEAAAABBAAA8QgAAQEAAAABBAAA8QgAAQEAAAEDBAAAEQgAAAL8AALDAAAAEQgAAgL8AALDAAAAgQgAAgL8AALDAAAAgQgAAAL8AALDAAAAEQgAAAL8AALDAAAAEQgAAAL8AAABAAAAEQgAAgL8AAABAAAAEQgAAgL8AALDAAAAgQgAAgL8AALDAAAAEQgAAgL8AALDAAAAEQgAAgL8AAABAAAAgQgAAgL8AAABAAAAgQgAAAL8AALDAAAAgQgAAgL8AALDAAAAgQgAAgL8AAABAAAAgQgAAAL8AAABAAAAEQgAAAL8AAABAAAAgQgAAAL8AAABAAAAgQgAAgL8AAABAAAAEQgAAgL8AAABAAAAMQgAAoEAAAEjBAAAMQgAAQEAAAEjBAAA8QgAAQEAAAEjBAAA8QgAAoEAAAEjBAAAMQgAAoEAAAEjBAAAMQgAAoEAAAEDBAAAMQgAAQEAAAEDBAAAMQgAAQEAAAEjBAAA8QgAAQEAAAEjBAAAMQgAAQEAAAEjBAAAMQgAAQEAAAEDBAAA8QgAAQEAAAEDBAAA8QgAAoEAAAEjBAAA8QgAAQEAAAEjBAAA8QgAAQEAAAEDBAAA8QgAAoEAAAEDBAADQQQAAoEAAAEjBAADQQQAAQEAAAEjBAAAEQgAAQEAAAEjBAAAEQgAAoEAAAEjBAADQQQAAoEAAAEjBAADQQQAAoEAAAEDBAADQQQAAQEAAAEDBAADQQQAAQEAAAEjBAAAEQgAAQEAAAEjBAADQQQAAQEAAAEjBAADQQQAAQEAAAEDBAAAEQgAAQEAAAEDBAAAEQgAAoEAAAEjBAAAEQgAAQEAAAEjBAAAEQgAAQEAAAEDBAAAEQgAAoEAAAEDBAADQQQAAQEAAAABBAADQQQAAgD8AAABBAAAoQgAAgD8AAABBAAAoQgAAQEAAAABBAADQQQAAQEAAAABBAADQQQAAQEAAAAhBAADQQQAAgD8AAAhBAADQQQAAgD8AAABBAAAoQgAAgD8AAABBAADQQQAAgD8AAABBAADQQQAAgD8AAAhBAAAoQgAAgD8AAAhBAAAoQgAAQEAAAABBAAAoQgAAQEAAAAhBAADQQQAAQEAAAAhBAADQQQAAQEAAAABBAAAoQgAAQEAAAABBAAAoQgAAgD8AAABBAAAoQgAAgD8AAAhBAAAoQgAAQEAAAAhBAAAeQgAAgD8AAAhBAAAeQgAAAD8AAAhBAAA4QgAAAD8AAAhBAAA4QgAAgD8AAAhBAAAeQgAAgD8AAAhBAAAeQgAAgD8AAGhBAAAeQgAAAD8AAGhBAAAeQgAAAD8AAAhBAAA4QgAAAD8AAAhBAAAeQgAAAD8AAAhBAAAeQgAAAD8AAGhBAAA4QgAAAD8AAGhBAAA4QgAAgD8AAAhBAAA4QgAAAD8AAAhBAAA4QgAAAD8AAGhBAAA4QgAAgD8AAGhBAAAeQgAAgD8AAGhBAAA4QgAAgD8AAGhBAAA4QgAAAD8AAGhBAAAeQgAAAD8AAGhBAAD4QQAAQEAAAKzBAAD4QQAAIEAAAKzBAAAYQgAAIEAAAKzBAAAYQgAAQEAAAKzBAAD4QQAAQEAAAKzBAAD4QQAAQEAAAEjBAAD4QQAAIEAAAEjBAAD4QQAAIEAAAKzBAAAYQgAAIEAAAKzBAAD4QQAAIEAAAKzBAAD4QQAAIEAAAEjBAAAYQgAAIEAAAEjBAAAYQgAAQEAAAKzBAAAYQgAAIEAAAKzBAAAYQgAAIEAAAEjBAAAYQgAAQEAAAEjBAAD4QQAAQEAAAEjBAAAYQgAAQEAAAEjBAAAYQgAAIEAAAEjBAAD4QQAAIEAAAEjBAAAUQgAAwD8AAEDBAAAUQgAAoD8AAEDBAAAVQgAAoD8AAEDBAAAVQgAAwD8AAEDBAAAUQgAAwD8AAEDBAAAUQgAAwD8AACzBAAAUQgAAoD8AACzBAAAUQgAAoD8AAEDBAAAVQgAAoD8AAEDBAAAUQgAAoD8AAEDBAAAUQgAAoD8AACzBAAAVQgAAoD8AACzBAAAVQgAAwD8AAEDBAAAVQgAAwD8AACzBAAAUQgAAwD8AACzBAAAUQgAAwD8AAEDBAAAVQgAAwD8AAEDBAAAVQgAAoD8AAEDBAAAVQgAAoD8AACzBAAAVQgAAwD8AACzBAAAUQgAAwD8AACzBAAAVQgAAwD8AACzBAAAVQgAAoD8AACzBAAAUQgAAoD8AACzBAAAUQgAAoD8AADDBAAAUQgAAgD8AADDBAAAVQgAAgD8AADDBAAAVQgAAoD8AADDBAAAUQgAAoD8AADDBAAAUQgAAoD8AACzBAAAUQgAAgD8AACzBAAAUQgAAgD8AADDBAAAVQgAAgD8AADDBAAAUQgAAgD8AADDBAAAUQgAAgD8AACzBAAAVQgAAgD8AACzBAAAVQgAAoD8AADDBAAAVQgAAoD8AACzBAAAUQgAAoD8AACzBAAAUQgAAoD8AADDBAAAVQgAAoD8AADDBAAAVQgAAgD8AADDBAAAVQgAAgD8AACzBAAAVQgAAoD8AACzBAAAUQgAAoD8AACzBAAAVQgAAoD8AACzBAAAVQgAAgD8AACzBAAAUQgAAgD8AACzBAAAkQgAAwD8AAEDBAAAkQgAAoD8AAEDBAAAlQgAAoD8AAEDBAAAlQgAAwD8AAEDBAAAkQgAAwD8AAEDBAAAkQgAAwD8AACzBAAAkQgAAoD8AACzBAAAkQgAAoD8AAEDBAAAlQgAAoD8AAEDBAAAkQgAAoD8AAEDBAAAkQgAAoD8AACzBAAAlQgAAoD8AACzBAAAlQgAAwD8AAEDBAAAlQgAAwD8AACzBAAAkQgAAwD8AACzBAAAkQgAAwD8AAEDBAAAlQgAAwD8AAEDBAAAlQgAAoD8AAEDBAAAlQgAAoD8AACzBAAAlQgAAwD8AACzBAAAkQgAAwD8AACzBAAAlQgAAwD8AACzBAAAlQgAAoD8AACzBAAAkQgAAoD8AACzBAAAUQgAAwD8AABTBAAAUQgAAoD8AABTBAAAlQgAAoD8AABTBAAAlQgAAwD8AABTBAAAUQgAAwD8AABTBAAAUQgAAwD8AABDBAAAUQgAAoD8AABDBAAAUQgAAoD8AABTBAAAlQgAAoD8AABTBAAAUQgAAoD8AABTBAAAUQgAAoD8AABDBAAAlQgAAoD8AABDBAAAlQgAAwD8AABTBAAAlQgAAwD8AABDBAAAUQgAAwD8AABDBAAAUQgAAwD8AABTBAAAlQgAAwD8AABTBAAAlQgAAoD8AABTBAAAlQgAAoD8AABDBAAAlQgAAwD8AABDBAAAUQgAAwD8AABDBAAAlQgAAwD8AABDBAAAlQgAAoD8AABDBAAAUQgAAoD8AABDBAADQQQAAwD8AAMDAAADQQQAAoD8AAMDAAADaQQAAoD8AAMDAAADaQQAAwD8AAMDAAADQQQAAwD8AAMDAAADQQQAAwD8AALjAAADQQQAAoD8AALjAAADQQQAAoD8AAMDAAADaQQAAoD8AAMDAAADQQQAAoD8AAMDAAADQQQAAoD8AALjAAADaQQAAoD8AALjAAADaQQAAwD8AAMDAAADaQQAAwD8AALjAAADQQQAAwD8AALjAAADQQQAAwD8AAMDAAADaQQAAwD8AAMDAAADaQQAAoD8AAMDAAADaQQAAoD8AALjAAADaQQAAwD8AALjAAADQQQAAwD8AALjAAADaQQAAwD8AALjAAADaQQAAoD8AALjAAADQQQAAoD8AALjAAADQQQAAwD8AABTBAADQQQAAoD8AABTBAADaQQAAoD8AABTBAADaQQAAwD8AABTBAADQQQAAwD8AABTBAADQQQAAwD8AABDBAADQQQAAoD8AABDBAADQQQAAoD8AABTBAADaQQAAoD8AABTBAADQQQAAoD8AABTBAADQQQAAoD8AABDBAADaQQAAoD8AABDBAADaQQAAwD8AABTBAADaQQAAwD8AABDBAADQQQAAwD8AABDBAADQQQAAwD8AABTBAADaQQAAwD8AABTBAADaQQAAoD8AABTBAADaQQAAoD8AABDBAADaQQAAwD8AABDBAADQQQAAwD8AABDBAADaQQAAwD8AABDBAADaQQAAoD8AABDBAADQQQAAoD8AABDBAADYQQAAwD8AABDBAADYQQAAoD8AABDBAADaQQAAoD8AABDBAADaQQAAwD8AABDBAADYQQAAwD8AABDBAADYQQAAwD8AAMDAAADYQQAAoD8AAMDAAADYQQAAoD8AABDBAADaQQAAoD8AABDBAADYQQAAoD8AABDBAADYQQAAoD8AAMDAAADaQQAAoD8AAMDAAADaQQAAwD8AABDBAADaQQAAwD8AAMDAAADYQQAAwD8AAMDAAADYQQAAwD8AABDBAADaQQAAwD8AABDBAADaQQAAoD8AABDBAADaQQAAoD8AAMDAAADaQQAAwD8AAMDAAADYQQAAwD8AAMDAAADaQQAAwD8AAMDAAADaQQAAoD8AAMDAAADYQQAAoD8AAMDAAADYQQAAwD8AADBAAADYQQAAoD8AADBAAAD4QQAAoD8AADBAAAD4QQAAwD8AADBAAADYQQAAwD8AADBAAADYQQAAwD8AAEBAAADYQQAAoD8AAEBAAADYQQAAoD8AADBAAAD4QQAAoD8AADBAAADYQQAAoD8AADBAAADYQQAAoD8AAEBAAAD4QQAAoD8AAEBAAAD4QQAAwD8AADBAAAD4QQAAwD8AAEBAAADYQQAAwD8AAEBAAADYQQAAwD8AADBAAAD4QQAAwD8AADBAAAD4QQAAoD8AADBAAAD4QQAAoD8AAEBAAAD4QQAAwD8AAEBAAADYQQAAwD8AAEBAAAD4QQAAwD8AAEBAAAD4QQAAoD8AAEBAAADYQQAAoD8AAEBAAAD2QQAAwD8AAEBAAAD2QQAAoD8AAEBAAAD4QQAAoD8AAEBAAAD4QQAAwD8AAEBAAAD2QQAAwD8AAEBAAAD2QQAAwD8AAOBAAAD2QQAAoD8AAOBAAAD2QQAAoD8AAEBAAAD4QQAAoD8AAEBAAAD2QQAAoD8AAEBAAAD2QQAAoD8AAOBAAAD4QQAAoD8AAOBAAAD4QQAAwD8AAEBAAAD4QQAAwD8AAOBAAAD2QQAAwD8AAOBAAAD2QQAAwD8AAEBAAAD4QQAAwD8AAEBAAAD4QQAAoD8AAEBAAAD4QQAAoD8AAOBAAAD4QQAAwD8AAOBAAAD2QQAAwD8AAOBAAAD4QQAAwD8AAOBAAAD4QQAAoD8AAOBAAAD2QQAAoD8AAOBAAADYQQAAwD8AAEBAAADYQQAAoD8AAEBAAADaQQAAoD8AAEBAAADaQQAAwD8AAEBAAADYQQAAwD8AAEBAAADYQQAAwD8AAOBAAADYQQAAoD8AAOBAAADYQQAAoD8AAEBAAADaQQAAoD8AAEBAAADYQQAAoD8AAEBAAADYQQAAoD8AAOBAAADaQQAAoD8AAOBAAADaQQAAwD8AAEBAAADaQQAAwD8AAOBAAADYQQAAwD8AAOBAAADYQQAAwD8AAEBAAADaQQAAwD8AAEBAAADaQQAAoD8AAEBAAADaQQAAoD8AAOBAAADaQQAAwD8AAOBAAADYQQAAwD8AAOBAAADaQQAAwD8AAOBAAADaQQAAoD8AAOBAAADYQQAAoD8AAOBAAADYQQAAwD8AAOBAAADYQQAAoD8AAOBAAAD4QQAAoD8AAOBAAAD4QQAAwD8AAOBAAADYQQAAwD8AAOBAAADYQQAAwD8AAOhAAADYQQAAoD8AAOhAAADYQQAAoD8AAOBAAAD4QQAAoD8AAOBAAADYQQAAoD8AAOBAAADYQQAAoD8AAOhAAAD4QQAAoD8AAOhAAAD4QQAAwD8AAOBAAAD4QQAAwD8AAOhAAADYQQAAwD8AAOhAAADYQQAAwD8AAOBAAAD4QQAAwD8AAOBAAAD4QQAAoD8AAOBAAAD4QQAAoD8AAOhAAAD4QQAAwD8AAOhAAADYQQAAwD8AAOhAAAD4QQAAwD8AAOhAAAD4QQAAoD8AAOhAAADYQQAAoD8AAOhAAAAMQgAAQEAAAEjBAAAMQgAAgD8AAEjBAAA8QgAAgD8AAEjBAAA8QgAAQEAAAEjBAAAMQgAAQEAAAEjBAAAMQgAAQEAAAEDBAAAMQgAAgD8AAEDBAAAMQgAAgD8AAEjBAAA8QgAAgD8AAEjBAAAMQgAAgD8AAEjBAAAMQgAAgD8AAEDBAAA8QgAAgD8AAEDBAAA8QgAAQEAAAEjBAAA8QgAAgD8AAEjBAAA8QgAAgD8AAEDBAAA8QgAAQEAAAEDBAADQQQAAQEAAAEjBAADQQQAAgD8AAEjBAAAEQgAAgD8AAEjBAAAEQgAAQEAAAEjBAADQQQAAQEAAAEjBAADQQQAAQEAAAEDBAADQQQAAgD8AAEDBAADQQQAAgD8AAEjBAAAEQgAAgD8AAEjBAADQQQAAgD8AAEjBAADQQQAAgD8AAEDBAAAEQgAAgD8AAEDBAAAEQgAAQEAAAEjBAAAEQgAAgD8AAEjBAAAEQgAAgD8AAEDBAAAEQgAAQEAAAEDBAAD4QQAAoEAAAKzBAAD4QQAAQEAAAKzBAAD8QQAAQEAAAKzBAAD8QQAAoEAAAKzBAAD4QQAAoEAAAKzBAAD4QQAAoEAAAEjBAAD4QQAAQEAAAEjBAAD4QQAAQEAAAKzBAAD8QQAAQEAAAKzBAAD4QQAAQEAAAKzBAAD4QQAAQEAAAEjBAAD8QQAAQEAAAEjBAAD8QQAAoEAAAKzBAAD8QQAAoEAAAEjBAAD4QQAAoEAAAEjBAAD4QQAAoEAAAKzBAAD8QQAAoEAAAKzBAAD8QQAAQEAAAKzBAAD8QQAAQEAAAEjBAAD8QQAAoEAAAEjBAAD4QQAAoEAAAEjBAAD8QQAAoEAAAEjBAAD8QQAAQEAAAEjBAAD4QQAAQEAAAEjBAAAeQgAAQEAAAAhBAAAeQgAAgD8AAAhBAAAgQgAAgD8AAAhBAAAgQgAAQEAAAAhBAAAeQgAAQEAAAAhBAAAeQgAAQEAAAHBBAAAeQgAAgD8AAHBBAAAeQgAAgD8AAAhBAAAgQgAAgD8AAAhBAAAeQgAAgD8AAAhBAAAeQgAAgD8AAHBBAAAgQgAAgD8AAHBBAAAgQgAAQEAAAAhBAAAgQgAAQEAAAHBBAAAeQgAAQEAAAHBBAAAeQgAAQEAAAAhBAAAgQgAAQEAAAAhBAAAgQgAAgD8AAAhBAAAgQgAAgD8AAHBBAAAgQgAAQEAAAHBBAAAeQgAAQEAAAHBBAAAgQgAAQEAAAHBBAAAgQgAAgD8AAHBBAAAeQgAAgD8AAHBBAAAgQgAAQEAAAGhBAAAgQgAAgD8AAGhBAAA4QgAAgD8AAGhBAAA4QgAAQEAAAGhBAAAgQgAAQEAAAGhBAAAgQgAAQEAAAHBBAAAgQgAAgD8AAHBBAAAgQgAAgD8AAGhBAAA4QgAAgD8AAGhBAAAgQgAAgD8AAGhBAAAgQgAAgD8AAHBBAAA4QgAAgD8AAHBBAAA4QgAAQEAAAGhBAAA4QgAAQEAAAHBBAAAgQgAAQEAAAHBBAAAgQgAAQEAAAGhBAAA4QgAAQEAAAGhBAAA4QgAAgD8AAGhBAAA4QgAAgD8AAHBBAAA4QgAAQEAAAHBBAAA4QgAAQEAAAEhBAAA4QgAAgD8AAEhBAAA6QgAAgD8AAEhBAAA6QgAAQEAAAEhBAAA4QgAAQEAAAEhBAAA4QgAAQEAAAJhBAAA4QgAAgD8AAJhBAAA4QgAAgD8AAEhBAAA6QgAAgD8AAEhBAAA4QgAAgD8AAEhBAAA4QgAAgD8AAJhBAAA6QgAAgD8AAJhBAAA6QgAAQEAAAEhBAAA6QgAAQEAAAJhBAAA4QgAAQEAAAJhBAAA4QgAAQEAAAEhBAAA4QgAAQEAAAAhBAAA4QgAAgD8AAAhBAAA6QgAAgD8AAAhBAAA6QgAAQEAAAAhBAAA4QgAAQEAAAAhBAAA4QgAAQEAAAChBAAA4QgAAgD8AAChBAAA4QgAAgD8AAAhBAAA6QgAAgD8AAAhBAAA4QgAAgD8AAAhBAAA4QgAAgD8AAChBAAA6QgAAgD8AAChBAAA6QgAAQEAAAAhBAAA6QgAAQEAAAChBAAA4QgAAQEAAAChBAAA4QgAAQEAAAAhBAAA4QgAAQEAAAChBAAA6QgAAQEAAAChBAAA6QgAAgD8AAChBAAA4QgAAgD8AAChBAAA6QgAAgD8AAAhBAAA6QgAAAD8AAAhBAABuQgAAAD8AAAhBAABuQgAAgD8AAAhBAAA6QgAAgD8AAAhBAAA6QgAAgD8AAJRBAAA6QgAAAD8AAJRBAAA6QgAAAD8AAAhBAABuQgAAAD8AAAhBAAA6QgAAAD8AAAhBAAA6QgAAAD8AAJRBAABuQgAAAD8AAJRBAABuQgAAgD8AAAhBAABuQgAAAD8AAAhBAABuQgAAAD8AAJRBAABuQgAAgD8AAJRBAAA6QgAAgD8AAJRBAABuQgAAgD8AAJRBAABuQgAAAD8AAJRBAAA6QgAAAD8AAJRBAAA+QgAAQEAAAABBAAA+QgAAgD8AAABBAABeQgAAgD8AAABBAABeQgAAQEAAAABBAAA+QgAAQEAAAABBAAA+QgAAQEAAAAhBAAA+QgAAgD8AAAhBAAA+QgAAgD8AAABBAABeQgAAgD8AAABBAAA+QgAAgD8AAABBAAA+QgAAgD8AAAhBAABeQgAAgD8AAAhBAABeQgAAQEAAAABBAABeQgAAQEAAAAhBAAA+QgAAQEAAAAhBAAA+QgAAQEAAAABBAABeQgAAQEAAAABBAABeQgAAgD8AAABBAABeQgAAgD8AAAhBAABeQgAAQEAAAAhBAABmQgAAQEAAAABBAABmQgAAgD8AAABBAABuQgAAgD8AAABBAABuQgAAQEAAAABBAABmQgAAQEAAAABBAABmQgAAQEAAAAhBAABmQgAAgD8AAAhBAABmQgAAgD8AAABBAABuQgAAgD8AAABBAABmQgAAgD8AAABBAABmQgAAgD8AAAhBAABuQgAAgD8AAAhBAABuQgAAQEAAAABBAABuQgAAQEAAAAhBAABmQgAAQEAAAAhBAABmQgAAQEAAAABBAABuQgAAQEAAAABBAABuQgAAgD8AAABBAABuQgAAgD8AAAhBAABuQgAAQEAAAAhBAABuQgAAAEAAAABBAABuQgAAgD8AAABBAABwQgAAgD8AAABBAABwQgAAAEAAAABBAABuQgAAAEAAAABBAABuQgAAAEAAAJRBAABuQgAAgD8AAJRBAABuQgAAgD8AAABBAABwQgAAgD8AAABBAABuQgAAgD8AAABBAABuQgAAgD8AAJRBAABwQgAAgD8AAJRBAABwQgAAAEAAAABBAABwQgAAAEAAAJRBAABuQgAAAEAAAJRBAABuQgAAAEAAAABBAAA6QgAAAEAAAJRBAAA6QgAAgD8AAJRBAABwQgAAgD8AAJRBAABwQgAAAEAAAJRBAAA6QgAAAEAAAJRBAAA6QgAAAEAAAJhBAAA6QgAAgD8AAJhBAAA6QgAAgD8AAJRBAABwQgAAgD8AAJRBAAA6QgAAgD8AAJRBAAA6QgAAgD8AAJhBAABwQgAAgD8AAJhBAABwQgAAAEAAAJRBAABwQgAAAEAAAJhBAAA6QgAAAEAAAJhBAAA6QgAAAEAAAJRBAABwQgAAAEAAAJRBAABwQgAAgD8AAJRBAABwQgAAgD8AAJhBAABwQgAAAEAAAJhBAAA8QgAAgD8AAEDBAAA8QgAAAD8AAEDBAABYQgAAAD8AAEDBAABYQgAAgD8AAEDBAAA8QgAAgD8AAEDBAAA8QgAAgD8AAABAAAA8QgAAAD8AAABAAAA8QgAAAD8AAEDBAABYQgAAAD8AAEDBAAA8QgAAAD8AAEDBAAA8QgAAAD8AAABAAABYQgAAAD8AAABAAABYQgAAgD8AAEDBAABYQgAAAD8AAEDBAABYQgAAAD8AAABAAABYQgAAgD8AAABAAAA8QgAAgD8AAABAAABYQgAAgD8AAABAAABYQgAAAD8AAABAAAA8QgAAAD8AAABAAAA8QgAAgD8AAABAAAA8QgAAAD8AAABAAAB8QgAAAD8AAABAAAB8QgAAgD8AAABAAAA8QgAAgD8AAABAAAA8QgAAgD8AAABBAAA8QgAAAD8AAABBAAA8QgAAAD8AAABAAAB8QgAAAD8AAABAAAA8QgAAAD8AAABAAAA8QgAAAD8AAABBAAB8QgAAAD8AAABBAAB8QgAAgD8AAABAAAB8QgAAAD8AAABAAAB8QgAAAD8AAABBAAB8QgAAgD8AAABBAAA8QgAAgD8AAABBAAB8QgAAgD8AAABBAAB8QgAAAD8AAABBAAA8QgAAAD8AAABBAAB8QgAAQEAAABDBAAB8QgAAAL8AABDBAAB+QgAAAL8AABDBAAB+QgAAQEAAABDBAAB8QgAAQEAAABDBAAB8QgAAQEAAAMDAAAB8QgAAAL8AAMDAAAB8QgAAAL8AABDBAAB+QgAAAL8AABDBAAB8QgAAAL8AABDBAAB8QgAAAL8AAMDAAAB+QgAAAL8AAMDAAAB+QgAAQEAAABDBAAB+QgAAQEAAAMDAAAB8QgAAQEAAAMDAAAB8QgAAQEAAABDBAAB8QgAAQEAAAMDAAAB+QgAAQEAAAMDAAAB+QgAAAL8AAMDAAAB8QgAAAL8AAMDAAAB8QgAAAEAAAABAAAB8QgAAAL8AAABAAAB+QgAAAL8AAABAAAB+QgAAAEAAAABAAAB8QgAAAEAAAABAAAB8QgAAAEAAAABBAAB8QgAAAL8AAABBAAB8QgAAAL8AAABAAAB+QgAAAL8AAABAAAB8QgAAAL8AAABAAAB8QgAAAL8AAABBAAB+QgAAAL8AAABBAAB+QgAAAEAAAABAAAB+QgAAAEAAAABBAAB8QgAAAEAAAABBAAB8QgAAAEAAAABAAABuQgAAAEAAAPBAAABuQgAAgD8AAPBAAAB8QgAAgD8AAPBAAAB8QgAAAEAAAPBAAABuQgAAAEAAAPBAAABuQgAAAEAAAABBAABuQgAAgD8AAABBAABuQgAAgD8AAPBAAAB8QgAAgD8AAPBAAABuQgAAgD8AAPBAAABuQgAAgD8AAABBAAB8QgAAgD8AAABBAAB8QgAAAEAAAPBAAAB8QgAAAEAAAABBAABuQgAAAEAAAABBAABuQgAAAEAAAPBAAAB8QgAAAEAAAPBAAAB8QgAAgD8AAPBAAAB8QgAAgD8AAABBAAB8QgAAAEAAAABBAAB+QgAAgD8AAIjBAAB+QgAAAD8AAIjBAACNQgAAAD8AAIjBAACNQgAAgD8AAIjBAAB+QgAAgD8AAIjBAAB+QgAAgD8AANDAAAB+QgAAAD8AANDAAAB+QgAAAD8AAIjBAACNQgAAAD8AAIjBAAB+QgAAAD8AAIjBAAB+QgAAAD8AANDAAACNQgAAAD8AANDAAACNQgAAgD8AAIjBAACNQgAAAD8AAIjBAACNQgAAAD8AANDAAACNQgAAgD8AANDAAAB+QgAAgD8AANDAAACNQgAAgD8AANDAAACNQgAAAD8AANDAAAB+QgAAAD8AANDAAAB8QgAAAEAAAMDAAAB8QgAAAL8AAMDAAAB+QgAAAL8AAMDAAAB+QgAAAEAAAMDAAAB8QgAAAEAAAMDAAAB8QgAAAEAAAABAAAB8QgAAAL8AAABAAAB8QgAAAL8AAMDAAAB+QgAAAL8AAMDAAAB8QgAAAL8AAMDAAAB8QgAAAL8AAABAAAB+QgAAAL8AAABAAAB+QgAAAEAAAMDAAAB+QgAAAEAAAABAAAB8QgAAAEAAAABAAAB8QgAAAEAAAMDAAAB8QgAAAEAAAABAAAB+QgAAAEAAAABAAAB+QgAAAL8AAABAAAB8QgAAAL8AAABAAAB8QgAAQEAAAIzBAAB8QgAAAL8AAIzBAAB+QgAAAL8AAIzBAAB+QgAAQEAAAIzBAAB8QgAAQEAAAIzBAAB8QgAAQEAAADDBAAB8QgAAAL8AADDBAAB8QgAAAL8AAIzBAAB+QgAAAL8AAIzBAAB8QgAAAL8AAIzBAAB8QgAAAL8AADDBAAB+QgAAAL8AADDBAAB+QgAAQEAAAIzBAAB+QgAAQEAAADDBAAB8QgAAQEAAADDBAAB8QgAAQEAAAIzBAAB8QgAAQEAAADDBAAB+QgAAQEAAADDBAAB+QgAAAL8AADDBAAB8QgAAAL8AADDBAADsQQAAwD8AAEDBAADsQQAAoD8AAEDBAADuQQAAoD8AAEDBAADuQQAAwD8AAEDBAADsQQAAwD8AAEDBAADsQQAAwD8AACzBAADsQQAAoD8AACzBAADsQQAAoD8AAEDBAADuQQAAoD8AAEDBAADsQQAAoD8AAEDBAADsQQAAoD8AACzBAADuQQAAoD8AACzBAADuQQAAwD8AAEDBAADuQQAAwD8AACzBAADsQQAAwD8AACzBAADsQQAAwD8AAEDBAADuQQAAwD8AAEDBAADuQQAAoD8AAEDBAADuQQAAoD8AACzBAADuQQAAwD8AACzBAADsQQAAwD8AACzBAADuQQAAwD8AACzBAADuQQAAoD8AACzBAADsQQAAoD8AACzBAAD8QQAAwD8AAEDBAAD8QQAAoD8AAEDBAAD+QQAAoD8AAEDBAAD+QQAAwD8AAEDBAAD8QQAAwD8AAEDBAAD8QQAAwD8AACzBAAD8QQAAoD8AACzBAAD8QQAAoD8AAEDBAAD+QQAAoD8AAEDBAAD8QQAAoD8AAEDBAAD8QQAAoD8AACzBAAD+QQAAoD8AACzBAAD+QQAAwD8AAEDBAAD+QQAAwD8AACzBAAD8QQAAwD8AACzBAAD8QQAAwD8AAEDBAAD+QQAAwD8AAEDBAAD+QQAAoD8AAEDBAAD+QQAAoD8AACzBAAD+QQAAwD8AACzBAAD8QQAAwD8AACzBAAD+QQAAwD8AACzBAAD+QQAAoD8AACzBAAD8QQAAoD8AACzBAADsQQAAoD8AADDBAADsQQAAgD8AADDBAADuQQAAgD8AADDBAADuQQAAoD8AADDBAADsQQAAoD8AADDBAADsQQAAoD8AACzBAADsQQAAgD8AACzBAADsQQAAgD8AADDBAADuQQAAgD8AADDBAADsQQAAgD8AADDBAADsQQAAgD8AACzBAADuQQAAgD8AACzBAADuQQAAoD8AADDBAADuQQAAoD8AACzBAADsQQAAoD8AACzBAADsQQAAoD8AADDBAADuQQAAoD8AADDBAADuQQAAgD8AADDBAADuQQAAgD8AACzBAADuQQAAoD8AACzBAADsQQAAoD8AACzBAADuQQAAoD8AACzBAADuQQAAgD8AACzBAADsQQAAgD8AACzBAAD8QQAAoD8AADDBAAD8QQAAgD8AADDBAAD+QQAAgD8AADDBAAD+QQAAoD8AADDBAAD8QQAAoD8AADDBAAD8QQAAoD8AACzBAAD8QQAAgD8AACzBAAD8QQAAgD8AADDBAAD+QQAAgD8AADDBAAD8QQAAgD8AADDBAAD8QQAAgD8AACzBAAD+QQAAgD8AACzBAAD+QQAAoD8AADDBAAD+QQAAoD8AACzBAAD8QQAAoD8AACzBAAD8QQAAoD8AADDBAAD+QQAAoD8AADDBAAD+QQAAgD8AADDBAAD+QQAAgD8AACzBAAD+QQAAoD8AACzBAAD8QQAAoD8AACzBAAD+QQAAoD8AACzBAAD+QQAAgD8AACzBAAD8QQAAgD8AACzBAACNQgAAAEAAAJjBAACNQgAAAL8AAJjBAACOQgAAAL8AAJjBAACOQgAAAEAAAJjBAACNQgAAAEAAAJjBAACNQgAAAEAAAMDAAACNQgAAAL8AAMDAAACNQgAAAL8AAJjBAACOQgAAAL8AAJjBAACNQgAAAL8AAJjBAACNQgAAAL8AAMDAAACOQgAAAL8AAMDAAACOQgAAAEAAAJjBAACOQgAAAEAAAMDAAACNQgAAAEAAAMDAAACNQgAAAEAAAJjBAACNQgAAAEAAAMDAAACOQgAAAEAAAMDAAACOQgAAAL8AAMDAAACNQgAAAL8AAMDAAAB+QgAAAEAAANDAAAB+QgAAgD8AANDAAACNQgAAgD8AANDAAACNQgAAAEAAANDAAAB+QgAAAEAAANDAAAB+QgAAAEAAAMDAAAB+QgAAgD8AAMDAAAB+QgAAgD8AANDAAACNQgAAgD8AANDAAAB+QgAAgD8AANDAAAB+QgAAgD8AAMDAAACNQgAAgD8AAMDAAACNQgAAAEAAANDAAACNQgAAAEAAAMDAAAB+QgAAAEAAAMDAAAB+QgAAAEAAANDAAACNQgAAAEAAANDAAACNQgAAgD8AANDAAACNQgAAgD8AAMDAAACNQgAAAEAAAMDAAAAgQQAAAEAAAABAAAAgQQAAAD8AAABAAAAoQQAAAD8AAABAAAAoQQAAAEAAAABAAAAgQQAAAEAAAABAAAAgQQAAAEAAAFBBAAAgQQAAAD8AAFBBAAAgQQAAAD8AAABAAAAoQQAAAD8AAABAAAAgQQAAAD8AAABAAAAgQQAAAD8AAFBBAAAoQQAAAD8AAFBBAAD4QQAAoEAAALDBAAD4QQAAQEAAALDBAAAYQgAAQEAAALDBAAAYQgAAoEAAALDBAAD4QQAAoEAAALDBAAD4QQAAoEAAAKzBAAD4QQAAQEAAAKzBAAD4QQAAQEAAALDBAAAYQgAAQEAAALDBAAD4QQAAQEAAALDBAAD4QQAAQEAAAKzBAAAYQgAAQEAAAKzBAAAYQgAAoEAAALDBAAAYQgAAQEAAALDBAAAYQgAAQEAAAKzBAAAYQgAAoEAAAKzBAAAYQgAAoEAAALDBAAAYQgAAQEAAALDBAAAaQgAAQEAAALDBAAAaQgAAoEAAALDBAAAYQgAAoEAAALDBAAAYQgAAoEAAAEjBAAAYQgAAQEAAAEjBAAAYQgAAQEAAALDBAAAaQgAAQEAAALDBAAAYQgAAQEAAALDBAAAYQgAAQEAAAEjBAAAaQgAAQEAAAEjBAAAaQgAAoEAAALDBAAAaQgAAoEAAAEjBAAAYQgAAoEAAAEjBAAAYQgAAoEAAALDBAAAaQgAAoEAAALDBAAAaQgAAQEAAALDBAAAaQgAAQEAAAEjBAAAaQgAAoEAAAEjBAAAYQgAAoEAAAEjBAAAaQgAAoEAAAEjBAAAaQgAAQEAAAEjBAAAYQgAAQEAAAEjBAAANQgAAgD8AAEDBAAANQgAAAD8AAEDBAAAgQgAAAD8AAEDBAAAgQgAAgD8AAEDBAAANQgAAgD8AAEDBAAANQgAAgD8AAJDAAAANQgAAAD8AAJDAAAANQgAAAD8AAEDBAAAgQgAAAD8AAEDBAAANQgAAAD8AAEDBAAANQgAAAD8AAJDAAAAgQgAAAD8AAJDAAAAgQgAAgD8AAEDBAAAgQgAAAD8AAEDBAAAgQgAAAD8AAJDAAAAgQgAAgD8AAJDAAAANQgAAgD8AAJDAAAAgQgAAgD8AAJDAAAAgQgAAAD8AAJDAAAANQgAAAD8AAJDAAAADQgAAgD8AABzBAAADQgAAAD8AABzBAAANQgAAAD8AABzBAAANQgAAgD8AABzBAAADQgAAgD8AABzBAAADQgAAgD8AAJDAAAADQgAAAD8AAJDAAAADQgAAAD8AABzBAAANQgAAAD8AABzBAAADQgAAAD8AABzBAAADQgAAAD8AAJDAAAANQgAAAD8AAJDAAAANQgAAgD8AABzBAAANQgAAAD8AABzBAAANQgAAAD8AAJDAAAANQgAAgD8AAJDAAAADQgAAgD8AAJDAAAANQgAAgD8AAJDAAAANQgAAAD8AAJDAAAADQgAAAD8AAJDAAADQQQAAgD8AAJDAAADQQQAAAD8AAJDAAAAEQgAAAD8AAJDAAAAEQgAAgD8AAJDAAADQQQAAgD8AAJDAAADQQQAAgD8AAABBAADQQQAAAD8AAABBAADQQQAAAD8AAJDAAAAEQgAAAD8AAJDAAADQQQAAAD8AAJDAAADQQQAAAD8AAABBAAAEQgAAAD8AAABBAAAEQgAAgD8AAJDAAAAEQgAAAD8AAJDAAAAEQgAAAD8AAABBAAAEQgAAgD8AAABBAADQQQAAgD8AAABBAAAEQgAAgD8AAABBAAAEQgAAAD8AAABBAADQQQAAAD8AAABBAADQQQAAgD8AAETBAADQQQAAQD8AAETBAAADQgAAQD8AAETBAAADQgAAgD8AAETBAADQQQAAgD8AAETBAADQQQAAgD8AAJDAAADQQQAAQD8AAJDAAADQQQAAQD8AAETBAAADQgAAQD8AAETBAADQQQAAQD8AAETBAADQQQAAQD8AAJDAAAADQgAAQD8AAJDAAAADQgAAgD8AAETBAAADQgAAQD8AAETBAAADQgAAQD8AAJDAAAADQgAAgD8AAJDAAADQQQAAgD8AAJDAAAADQgAAgD8AAJDAAAADQgAAQD8AAJDAAADQQQAAQD8AAJDA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////v/////////8//////////z//////////P/////////8/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////////////8//////////z//////////P/////////8/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+//////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//3//P////3//f/8/////f/9//z////9//3//P/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/9//z////9//3//P////3//f/8/////f/9//z//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//3//P////3//f/8/////f/9//z////9//3//P/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/9//z////9//3//P////3//f/8/////f/9//z//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f///AAAAAP9///8AAAAA/3///wAAAAD/f///AAD/fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/AAD/P/9//38AAP8//3//fwAA/z//f/9/AAD/P/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+//////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/AAD/P/9//38AAP8//3//fwAA/z//f/9/AAD/P/////////8//////////z//////////P/////////8/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f///AAAAAP9///8AAAAA/3///wAAAAD/f///AAD/fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//////////3//////////f/////////9///////////////8//////////z//////////P/////////8/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//3//P////3//f/8/////f/9//z////9//3//P/9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////3//fwAA/z//f/9/AAD/P/9//38AAP8//3//fwAA/z8=") +"vertex_data": PackedByteArray("AAAgQQAAgD8AAIDAAP6fwAAAgD8AAIDAAP6fwAAAAD8AAIDAAAAgQQAAAD8AAIDAAACgwAAAAD8AACBBAACgwAAAAD8AAoDAAACgwAAAgD8AAoDAAACgwAAAgD8AACBBAP6fwAAAAD8AACBBAAAgQQAAAD8AACBBAAAgQQAAAD8AAoDAAP6fwAAAAD8AAoDAAAAgQQAAgD8AACBBAAAgQQAAgD8AAoDAAAAgQQAAAD8AAoDAAAAgQQAAAD8AACBBAAAgQQAAAD8AACBBAP6fwAAAAD8AACBBAP6fwAAAgD8AACBBAAAgQQAAgD8AACBBAACwwAAAQEAAAADAAP8vwQAAQEAAAADAAP8vwQAAgD8AAADAAACwwAAAgD8AAADAAAAwwQAAgD8AAMC/AAAwwQAAgD8A+P+/AAAwwQAAQEAA+P+/AAAwwQAAQEAAAMC/AP8vwQAAgD8AAMC/AACwwAAAgD8AAMC/AACwwAAAgD8A+P+/AP8vwQAAgD8A+P+/AP8vwQAAQEAAAMC/AP8vwQAAQEAA+P+/AACwwAAAQEAA+P+/AACwwAAAQEAAAMC/AACwwAAAQEAAAMC/AACwwAAAQEAA+P+/AACwwAAAgD8A+P+/AACwwAAAgD8AAMC/AAAowQAAQEAAAMC/AP8vwQAAQEAAAMC/AP8vwQAAgD8AAMC/AAAowQAAgD8AAMC/AAAwwQAAgD8AAKBAAAAwwQAAgD8ACMC/AAAwwQAAQEAACMC/AAAwwQAAQEAAAKBAAP8vwQAAgD8AAKBAAAAowQAAgD8AAKBAAAAowQAAgD8ACMC/AP8vwQAAgD8ACMC/AP8vwQAAQEAAAKBAAP8vwQAAQEAACMC/AAAowQAAQEAACMC/AAAowQAAQEAAAKBAAACwwAAAQEAAAJBAAAEowQAAQEAAAJBAAAEowQAAgD8AAJBAAACwwAAAgD8AAJBAAAAowQAAgD8AAKBAAAAowQAAgD8AAJBAAAAowQAAQEAAAJBAAAAowQAAQEAAAKBAAAEowQAAgD8AAKBAAACwwAAAgD8AAKBAAACwwAAAgD8AAJBAAAEowQAAgD8AAJBAAAEowQAAQEAAAKBAAAEowQAAQEAAAJBAAACwwAAAQEAAAJBAAACwwAAAQEAAAKBAAACwwAAAQEAAAKBAAACwwAAAQEAAAJBAAACwwAAAgD8AAJBAAACwwAAAgD8AAKBAAACgwAAAQEAAAEBAAACwwAAAQEAAAEBAAACwwAAAgD8AAEBAAACgwAAAgD8AAEBAAACwwAAAgD8AACBBAACwwAAAgD8AAEBAAACwwAAAQEAAAEBAAACwwAAAQEAAACBBAACwwAAAgD8AACBBAACgwAAAgD8AACBBAACgwAAAgD8AAEBAAACwwAAAgD8AAEBAAACwwAAAQEAAACBBAACwwAAAQEAAAEBAAACgwAAAQEAAAEBAAACgwAAAQEAAACBBAACgwAAAgD8AACBBAACwwAAAgD8AACBBAACwwAAAQEAAACBBAACgwAAAQEAAACBBAACgwAAAQEAAAJDAAACwwAAAQEAAAJDAAACwwAAAgD8AAJDAAACgwAAAgD8AAJDAAACwwAAAgD8AAAA/AACwwAAAgD8AApDAAACwwAAAQEAAApDAAACwwAAAQEAAAAA/AACwwAAAgD8AAAA/AACgwAAAgD8AAAA/AACgwAAAgD8AApDAAACwwAAAgD8AApDAAACwwAAAQEAAAAA/AACwwAAAQEAAApDAAACgwAAAQEAAApDAAACgwAAAQEAAAAA/AACgwAAAgD8AAAA/AACwwAAAgD8AAAA/AACwwAAAQEAAAAA/AACgwAAAQEAAAAA/AACgwAAAQEAAACBAAACwwAAAQEAAACBAAACwwAAAgD8AACBAAACgwAAAgD8AACBAAACwwAAAgD8AAEBAAACwwAAAgD8AACBAAACwwAAAQEAAACBAAACwwAAAQEAAAEBAAACwwAAAgD8AAEBAAACgwAAAgD8AAEBAAACgwAAAgD8AACBAAACwwAAAgD8AACBAAACwwAAAQEAAAEBAAACwwAAAQEAAACBAAACgwAAAQEAAACBAAACgwAAAQEAAAEBAAACgwAAAgD8AAEBAAACwwAAAgD8AAEBAAACwwAAAQEAAAEBAAACgwAAAQEAAAEBAAAAgQQAAQEAAAJDAAP6fwAAAQEAAAJDAAP6fwAAAgD8AAJDAAAAgQQAAgD8AAJDAAACgwAAAgD8AAIDAAACgwAAAgD8AApDAAACgwAAAQEAAApDAAACgwAAAQEAAAIDAAP6fwAAAgD8AAIDAAAAgQQAAgD8AAIDAAAAgQQAAgD8AApDAAP6fwAAAgD8AApDAAP6fwAAAQEAAAIDAAP6fwAAAQEAAApDAAAAgQQAAQEAAApDAAAAgQQAAQEAAAIDAAAAgQQAAQEAAAIDAAAAgQQAAQEAAApDAAAAgQQAAgD8AApDAAAAgQQAAgD8AAIDAAAAAQAAAQEAAACBBAACwwAAAQEAAACBBAACwwAAAgD8AACBBAAAAQAAAgD8AACBBAACwwAAAgD8AAChBAACwwAAAgD8AACBBAACwwAAAQEAAACBBAACwwAAAQEAAAChBAACwwAAAgD8AAChBAAAAQAAAgD8AAChBAAAAQAAAgD8AACBBAACwwAAAgD8AACBBAACwwAAAQEAAAChBAACwwAAAQEAAACBBAAAAQAAAQEAAACBBAAAAQAAAQEAAAChBAAAAQAAAQEAAAChBAAAAQAAAQEAAACBBAAAAQAAAgD8AACBBAAAAQAAAgD8AAChBAAAoQQAAQEAAAAC/AAAgQQAAQEAAAAC/AAAgQQAAgD8AAAC/AAAoQQAAgD8AAAC/AAAgQQAAgD8AAABAAAAgQQAAgD8AAAC/AAAgQQAAQEAAAAC/AAAgQQAAQEAAAABAAAAgQQAAgD8AAABAAAAoQQAAgD8AAABAAAAoQQAAgD8AAAC/AAAgQQAAgD8AAAC/AAAgQQAAQEAAAABAAAAgQQAAQEAAAAC/AAAoQQAAQEAAAAC/AAAoQQAAQEAAAABAAAAoQQAAQEAAAJDAAAAgQQAAQEAAAJDAAAAgQQAAgD8AAJDAAAAoQQAAgD8AAJDAAAAgQQAAgD8AACDAAAAgQQAAgD8AApDAAAAgQQAAQEAAApDAAAAgQQAAQEAAACDAAAAgQQAAgD8AACDAAAAoQQAAgD8AACDAAAAoQQAAgD8AApDAAAAgQQAAgD8AApDAAAAgQQAAQEAAACDAAAAgQQAAQEAAApDAAAAoQQAAQEAAApDAAAAoQQAAQEAAACDAAAAoQQAAgD8AACDAAAAgQQAAgD8AACDAAAAgQQAAQEAAACDAAAAoQQAAQEAAACDAAADMQQAAgD8AAIDAAAAoQQAAgD8AAIDAAAAoQQAAAD8AAIDAAADMQQAAAD8AAIDAAAAoQQAAAD8AAMA/AAAoQQAAAD8AAoDAAAAoQQAAgD8AAoDAAAAoQQAAgD8AAMA/AAAoQQAAAD8AAMA/AADMQQAAAD8AAMA/AADMQQAAAD8AAoDAAAAoQQAAAD8AAoDAAADMQQAAgD8AAMA/AADMQQAAgD8AAoDAAADMQQAAAD8AAoDAAADMQQAAAD8AAMA/AADMQQAAAEAAAMA/AAAoQQAAAEAAAMA/AAAoQQAAgD8AAMA/AADMQQAAgD8AAMA/AAAoQQAAgD8AAABAAAAoQQAAgD8AAMA/AAAoQQAAAEAAAMA/AAAoQQAAAEAAAABAAAAoQQAAgD8AAABAAADMQQAAgD8AAABAAADMQQAAgD8AAMA/AAAoQQAAgD8AAMA/AADMQQAAAEAAAABAAADMQQAAAEAAAMA/AADMQQAAgD8AAMA/AADMQQAAgD8AAABAAABYQQAAQEAAAJDAAAAoQQAAQEAAAJDAAAAoQQAAgD8AAJDAAABYQQAAgD8AAJDAAAAoQQAAgD8AAIDAAAAoQQAAgD8AApDAAAAoQQAAQEAAApDAAAAoQQAAQEAAAIDAAAAoQQAAgD8AAIDAAABYQQAAgD8AAIDAAABYQQAAgD8AApDAAAAoQQAAgD8AApDAAABYQQAAQEAAAIDAAABYQQAAQEAAApDAAABYQQAAgD8AApDAAABYQQAAgD8AAIDAAACgQQAAQEAAAJDAAAB4QQAAQEAAAJDAAAB4QQAAgD8AAJDAAACgQQAAgD8AAJDAAAB4QQAAgD8AAIDAAAB4QQAAgD8AApDAAAB4QQAAQEAAApDAAAB4QQAAQEAAAIDAAAB4QQAAgD8AAIDAAACgQQAAgD8AAIDAAACgQQAAgD8AApDAAAB4QQAAgD8AApDAAACgQQAAQEAAAIDAAACgQQAAQEAAApDAAACgQQAAgD8AApDAAACgQQAAgD8AAIDAAADMQQAAQEAAAJDAAACwQQAAQEAAAJDAAACwQQAAgD8AAJDAAADMQQAAgD8AAJDAAACwQQAAgD8AAIDAAACwQQAAgD8AApDAAACwQQAAQEAAApDAAACwQQAAQEAAAIDAAACwQQAAgD8AAIDAAADMQQAAgD8AAIDAAADMQQAAgD8AApDAAACwQQAAgD8AApDAAADMQQAAQEAAAIDAAADMQQAAQEAAApDAAADMQQAAgD8AApDAAADMQQAAgD8AAIDAAACwQQAAgD8AAKDAAACgQQAAgD8AAKDAAACgQQAAAD8AAKDAAACwQQAAAD8AAKDAAACgQQAAAD8AAIDAAACgQQAAAD8A/p/AAACgQQAAgD8A/p/AAACgQQAAgD8AAIDAAACgQQAAAD8AAIDAAACwQQAAAD8AAIDAAACwQQAAAD8A/p/AAACgQQAAAD8A/p/AAACgQQAAgD8AAIDAAACgQQAAgD8A/p/AAACwQQAAgD8A/p/AAACwQQAAgD8AAIDAAACwQQAAgD8AAIDAAACwQQAAgD8A/p/AAACwQQAAAD8A/p/AAACwQQAAAD8AAIDAAACwQQAAAD8AAIDAAACgQQAAAD8AAIDAAACgQQAAgD8AAIDAAACwQQAAgD8AAIDAAACwQQAAQEAAALDAAACgQQAAQEAAALDAAACgQQAAgD8AALDAAACwQQAAgD8AALDAAACgQQAAgD8AAKDAAACgQQAAgD8AALDAAACgQQAAQEAAALDAAACgQQAAQEAAAKDAAACgQQAAgD8AAKDAAACwQQAAgD8AAKDAAACwQQAAgD8AALDAAACgQQAAgD8AALDAAACgQQAAQEAAAKDAAACgQQAAQEAAALDAAACwQQAAQEAAALDAAACwQQAAQEAAAKDAAACwQQAAQEAAAKDAAACwQQAAQEAAALDAAACwQQAAgD8AALDAAACwQQAAgD8AAKDAAACwQQAAgD8AAKDAAACgQQAAgD8AAKDAAACgQQAAQEAAAKDAAACwQQAAQEAAAKDAAADQQQAAQEAAAEDBAADMQQAAQEAAAEDBAADMQQAAgD8AAEDBAADQQQAAgD8AAEDBAADMQQAAgD8AACDAAADMQQAAgD8AAEDBAADMQQAAQEAAAEDBAADMQQAAQEAAACDAAADMQQAAgD8AACDAAADQQQAAgD8AACDAAADQQQAAgD8AAEDBAADMQQAAgD8AAEDBAADMQQAAQEAAACDAAADMQQAAQEAAAEDBAADQQQAAQEAAAEDBAADQQQAAQEAAACDAAADQQQAAQEAAACDAAADQQQAAQEAAAEDBAADQQQAAgD8AAEDBAADQQQAAgD8AACDAAADQQQAAgD8AACDAAADMQQAAgD8AACDAAADMQQAAQEAAACDAAADQQQAAQEAAACDAAADQQQAAQEAAAAC/AADMQQAAQEAAAAC/AADMQQAAgD8AAAC/AADQQQAAgD8AAAC/AADMQQAAgD8AAAhBAADMQQAAgD8AAAC/AADMQQAAQEAAAAC/AADMQQAAQEAAAAhBAADMQQAAgD8AAAhBAADQQQAAgD8AAAhBAADQQQAAgD8AAAC/AADMQQAAgD8AAAC/AADMQQAAQEAAAAhBAADMQQAAQEAAAAC/AADQQQAAQEAAAAC/AADQQQAAQEAAAAhBAADQQQAAQEAAAAhBAADQQQAAQEAAAAC/AADQQQAAgD8AAAC/AADQQQAAgD8AAAhBAADQQQAAgD8AAAhBAADMQQAAgD8AAAhBAADMQQAAQEAAAAhBAADQQQAAQEAAAAhBAAB4QQAAgD8AALDAAABYQQAAgD8AALDAAABYQQAAAD8AALDAAAB4QQAAAD8AALDAAABYQQAAAD8AAJDAAABYQQAAAD8AALDAAABYQQAAgD8AALDAAABYQQAAgD8AAJDAAABYQQAAAD8AAJDAAAB4QQAAAD8AAJDAAAB4QQAAAD8AALDAAABYQQAAAD8AALDAAABYQQAAgD8AAJDAAABYQQAAgD8AALDAAAB4QQAAgD8AALDAAAB4QQAAgD8AAJDAAAB4QQAAgD8AAJDAAAB4QQAAgD8AALDAAAB4QQAAAD8AALDAAAB4QQAAAD8AAJDAAAB4QQAAAD8AAJDAAABYQQAAAD8AAJDAAABYQQAAgD8AAJDAAAB4QQAAgD8AAJDAAAB4QQAAQEAAALDAAABYQQAAQEAAALDAAABYQQAAgD8AALDAAAB4QQAAgD8AALDAAABYQQAAgD8AAKDAAABYQQAAgD8AALDAAABYQQAAQEAAALDAAABYQQAAQEAAAKDAAABYQQAAgD8AAKDAAAB4QQAAgD8AAKDAAAB4QQAAgD8AALDAAABYQQAAgD8AALDAAABYQQAAQEAAAKDAAABYQQAAQEAAALDAAAB4QQAAQEAAALDAAAB4QQAAQEAAAKDAAAB4QQAAQEAAAKDAAAB4QQAAQEAAALDAAAB4QQAAgD8AALDAAAB4QQAAgD8AAKDAAAB4QQAAgD8AAKDAAABYQQAAgD8AAKDAAABYQQAAQEAAAKDAAAB4QQAAQEAAAKDAAAAgQQAAgD8AACBBAAAAQAAAgD8AACBBAAAAQAAAAD8AACBBAAAgQQAAAD8AACBBAAAAQAAAAD8AAEhBAAAAQAAAAD8AACBBAAAAQAAAgD8AACBBAAAAQAAAgD8AAEhBAAAAQAAAAD8AAEhBAAAgQQAAAD8AAEhBAAAgQQAAAD8AACBBAAAAQAAAAD8AACBBAAAgQQAAgD8AAEhBAAAgQQAAgD8AACBBAAAgQQAAAD8AACBBAAAgQQAAAD8AAEhBAAAgQQAAAD8AAEhBAAAAQAAAAD8AAEhBAAAAQAAAgD8AAEhBAAAgQQAAgD8AAEhBAAAgQQAAQEAAAEhBAAAAQAAAQEAAAEhBAAAAQAAAAD8AAEhBAAAgQQAAAD8AAEhBAAAAQAAAAD8AAFBBAAAAQAAAAD8AAEhBAAAAQAAAQEAAAEhBAAAAQAAAQEAAAFBBAAAAQAAAAD8AAFBBAAAgQQAAAD8AAFBBAAAgQQAAAD8AAEhBAAAAQAAAAD8AAEhBAAAAQAAAQEAAAFBBAAAAQAAAQEAAAEhBAAAgQQAAQEAAAEhBAAAgQQAAQEAAAFBBAAAAQAAAQEAAAChBAADAPwAAQEAAAChBAADAPwAAgD8AAChBAAAAQAAAgD8AAChBAADAPwAAgD8AAFBBAADAPwAAgD8AAChBAADAPwAAQEAAAChBAADAPwAAQEAAAFBBAADAPwAAgD8AAFBBAAAAQAAAgD8AAFBBAAAAQAAAgD8AAChBAADAPwAAgD8AAChBAADAPwAAQEAAAFBBAADAPwAAQEAAAChBAAAAQAAAQEAAAChBAAAAQAAAQEAAAFBBAAAgQgAAgD8AAIA/AAAEQgAAgD8AAIA/AAAEQgAAAD8AAIA/AAAgQgAAAD8AAIA/AAAEQgAAAD8AAABBAAAEQgAAAD8AAIA/AAAEQgAAgD8AAIA/AAAEQgAAgD8AAABBAAAEQgAAAD8AAABBAAAgQgAAAD8AAABBAAAgQgAAAD8AAIA/AAAEQgAAAD8AAIA/AAAgQgAAgD8AAABBAAAgQgAAgD8AAIA/AAAgQgAAAD8AAIA/AAAgQgAAAD8AAABBAAAgQgAAAD8AAABBAAAEQgAAAD8AAABBAAAEQgAAgD8AAABBAAAgQgAAgD8AAABBAAA8QgAAgD8AAEDBAAAgQgAAgD8AAEDBAAAgQgAAAD8AAEDBAAA8QgAAAD8AAEDBAAAgQgAAAD8AAABBAAAgQgAAAD8AAEDBAAAgQgAAgD8AAEDBAAAgQgAAgD8AAABBAAAgQgAAAD8AAABBAAA8QgAAAD8AAABBAAA8QgAAAD8AAEDBAAAgQgAAAD8AAEDBAAA8QgAAgD8AAABBAAA8QgAAgD8AAEDBAAA8QgAAAD8AAEDBAAA8QgAAAD8AAABBAAA8QgAAAD8AAABBAAAgQgAAAD8AAABBAAAgQgAAgD8AAABBAAA8QgAAgD8AAABBAAAMQgAAQEAAAEjBAAAEQgAAQEAAAEjBAAAEQgAAgD8AAEjBAAAMQgAAgD8AAEjBAAAEQgAAgD8AAEDBAAAEQgAAgD8AAEjBAAAEQgAAQEAAAEjBAAAEQgAAQEAAAEDBAAAEQgAAgD8AAEDBAAAMQgAAgD8AAEDBAAAMQgAAgD8AAEjBAAAEQgAAgD8AAEjBAAAMQgAAQEAAAEDBAAAMQgAAQEAAAEjBAAAMQgAAgD8AAEjBAAAMQgAAgD8AAEDBAAA+QgAAQEAAAABBAAAwQgAAQEAAAABBAAAwQgAAgD8AAABBAAA+QgAAgD8AAABBAAAwQgAAgD8AAAhBAAAwQgAAgD8AAABBAAAwQgAAQEAAAABBAAAwQgAAQEAAAAhBAAAwQgAAgD8AAAhBAAA+QgAAgD8AAAhBAAA+QgAAgD8AAABBAAAwQgAAgD8AAABBAAAwQgAAQEAAAAhBAAAwQgAAQEAAAABBAAA+QgAAQEAAAABBAAA+QgAAQEAAAAhBAAA+QgAAQEAAAAhBAAA+QgAAQEAAAABBAAA+QgAAgD8AAABBAAA+QgAAgD8AAAhBAAA+QgAAQEAAAEDBAAA8QgAAQEAAAEDBAAA8QgAAgD8AAEDBAAA+QgAAgD8AAEDBAAA8QgAAgD8AAABBAAA8QgAAgD8AAEDBAAA8QgAAQEAAAEDBAAA8QgAAQEAAAABBAAA8QgAAgD8AAABBAAA+QgAAgD8AAABBAAA+QgAAgD8AAEDBAAA8QgAAgD8AAEDBAAA8QgAAQEAAAABBAAA8QgAAQEAAAEDBAAA+QgAAQEAAAEDBAAA+QgAAQEAAAABBAAAgQgAAAL8AALDAAAAEQgAAAL8AALDAAAAEQgAIgL8AALDAAAAgQgAIgL8AALDAAAAEQgAIgL8AAABAAAAEQgAIgL8AALDAAAAEQgAAAL8AALDAAAAEQgAAAL8AAABAAAAEQgAAgL8AAABAAAAgQgAAgL8AAABAAAAgQgAAgL8AALDAAAAEQgAAgL8AALDAAAAgQgAAAL8AAABAAAAgQgAAAL8AALDAAAAgQgAIgL8AALDAAAAgQgAIgL8AAABAAAAgQgAIgL8AAABAAAAEQgAIgL8AAABAAAAEQgAAAL8AAABAAAAgQgAAAL8AAABAAAA8QgAAoEAAAEjBAAAMQgAAoEAAAEjBAAAMQgAAQEAAAEjBAAA8QgAAQEAAAEjBAAAMQgAAQEAAAEDBAAAMQgAAQEAAAEjBAAAMQgAAoEAAAEjBAAAMQgAAoEAAAEDBAAAMQgAAQEAAAEDBAAA8QgAAQEAAAEDBAAA8QgAAQEAAAEjBAAAMQgAAQEAAAEjBAAA8QgAAoEAAAEDBAAA8QgAAoEAAAEjBAAA8QgAAQEAAAEjBAAA8QgAAQEAAAEDBAAAEQgAAoEAAAEjBAADQQQAAoEAAAEjBAADQQQAAQEAAAEjBAAAEQgAAQEAAAEjBAADQQQAAQEAAAEDBAADQQQAAQEAAAEjBAADQQQAAoEAAAEjBAADQQQAAoEAAAEDBAADQQQAAQEAAAEDBAAAEQgAAQEAAAEDBAAAEQgAAQEAAAEjBAADQQQAAQEAAAEjBAAAEQgAAoEAAAEDBAAAEQgAAoEAAAEjBAAAEQgAAQEAAAEjBAAAEQgAAQEAAAEDBAAAoQgAAQEAAAABBAADQQQAAQEAAAABBAADQQQAAgD8AAABBAAAoQgAAgD8AAABBAADQQQAAgD8AAAhBAADQQQAAgD8AAABBAADQQQAAQEAAAABBAADQQQAAQEAAAAhBAADQQQAAgD8AAAhBAAAoQgAAgD8AAAhBAAAoQgAAgD8AAABBAADQQQAAgD8AAABBAADQQQAAQEAAAAhBAADQQQAAQEAAAABBAAAoQgAAQEAAAABBAAAoQgAAQEAAAAhBAAAoQgAAQEAAAAhBAAAoQgAAQEAAAABBAAAoQgAAgD8AAABBAAAoQgAAgD8AAAhBAAA4QgAAgD8AAAhBAAAeQgAAgD8AAAhBAAAeQgAAAD8AAAhBAAA4QgAAAD8AAAhBAAAeQgAAAD8AAGhBAAAeQgAAAD8AAAhBAAAeQgAAgD8AAAhBAAAeQgAAgD8AAGhBAAAeQgAAAD8AAGhBAAA4QgAAAD8AAGhBAAA4QgAAAD8AAAhBAAAeQgAAAD8AAAhBAAA4QgAAgD8AAGhBAAA4QgAAgD8AAAhBAAA4QgAAAD8AAAhBAAA4QgAAAD8AAGhBAAA4QgAAAD8AAGhBAAAeQgAAAD8AAGhBAAAeQgAAgD8AAGhBAAA4QgAAgD8AAGhBAAAYQgAAQEAAAKzBAAD4QQAAQEAAAKzBAAD4QQAAIEAAAKzBAAAYQgAAIEAAAKzBAAD4QQAAIEAAAEjBAAD4QQAAIEAAAKzBAAD4QQAAQEAAAKzBAAD4QQAAQEAAAEjBAAD4QQAAIEAAAEjBAAAYQgAAIEAAAEjBAAAYQgAAIEAAAKzBAAD4QQAAIEAAAKzBAAAYQgAAQEAAAEjBAAAYQgAAQEAAAKzBAAAYQgAAIEAAAKzBAAAYQgAAIEAAAEjBAAAYQgAAIEAAAEjBAAD4QQAAIEAAAEjBAAD4QQAAQEAAAEjBAAAYQgAAQEAAAEjBAAAVQgAAwD8AAEDBAAAUQgAAwD8AAEDBAAAUQgAAoD8AAEDBAAAVQgAAoD8AAEDBAAAUQgAAoD8AACzBAAAUQgAAoD8AAEDBAAAUQgAAwD8AAEDBAAAUQgAAwD8AACzBAAAUQgAAoD8AACzBAAAVQgAAoD8AACzBAAAVQgAAoD8AAEDBAAAUQgAAoD8AAEDBAAAUQgAAwD8AACzBAAAUQgAAwD8AAEDBAAAVQgAAwD8AAEDBAAAVQgAAwD8AACzBAAAVQgAAwD8AACzBAAAVQgAAwD8AAEDBAAAVQgAAoD8AAEDBAAAVQgAAoD8AACzBAAAVQgAAoD8AACzBAAAUQgAAoD8AACzBAAAUQgAAwD8AACzBAAAVQgAAwD8AACzBAAAVQgAAoD8AADDBAAAUQgAAoD8AADDBAAAUQgAAgD8AADDBAAAVQgAAgD8AADDBAAAUQgAAgD8AACzBAAAUQgAAgD8A/y/BAAAUQgAAoD8A/y/BAAAUQgAAoD8AACzBAAAUQgAAgD8AACzBAAAVQgAAgD8AACzBAAAVQgAAgD8A/y/BAAAUQgAAgD8A/y/BAAAUQgAAoD8AACzBAAAUQgAAoD8A/y/BAAAVQgAAoD8A/y/BAAAVQgAAoD8AACzBAAAVQgAAoD8AACzBAAAVQgAAoD8A/y/BAAAVQgAAgD8A/y/BAAAVQgAAgD8AACzBAAAVQgAAgD8AACzBAAAUQgAAgD8AACzBAAAUQgAAoD8AACzBAAAVQgAAoD8AACzBAAAlQgAAwD8AAEDBAAAkQgAAwD8AAEDBAAAkQgAAoD8AAEDBAAAlQgAAoD8AAEDBAAAkQgAAoD8AACzBAAAkQgAAoD8AAEDBAAAkQgAAwD8AAEDBAAAkQgAAwD8AACzBAAAkQgAAoD8AACzBAAAlQgAAoD8AACzBAAAlQgAAoD8AAEDBAAAkQgAAoD8AAEDBAAAkQgAAwD8AACzBAAAkQgAAwD8AAEDBAAAlQgAAwD8AAEDBAAAlQgAAwD8AACzBAAAlQgAAwD8AACzBAAAlQgAAwD8AAEDBAAAlQgAAoD8AAEDBAAAlQgAAoD8AACzBAAAlQgAAoD8AACzBAAAkQgAAoD8AACzBAAAkQgAAwD8AACzBAAAlQgAAwD8AACzBAAAlQgAAwD8AABTBAAAUQgAAwD8AABTBAAAUQgAAoD8AABTBAAAlQgAAoD8AABTBAAAUQgAAoD8AABDBAAAUQgAAoD8A/xPBAAAUQgAAwD8A/xPBAAAUQgAAwD8AABDBAAAUQgAAoD8AABDBAAAlQgAAoD8AABDBAAAlQgAAoD8A/xPBAAAUQgAAoD8A/xPBAAAUQgAAwD8AABDBAAAUQgAAwD8A/xPBAAAlQgAAwD8A/xPBAAAlQgAAwD8AABDBAAAlQgAAwD8AABDBAAAlQgAAwD8A/xPBAAAlQgAAoD8A/xPBAAAlQgAAoD8AABDBAAAlQgAAoD8AABDBAAAUQgAAoD8AABDBAAAUQgAAwD8AABDBAAAlQgAAwD8AABDBAADaQQAAwD8AAMDAAADQQQAAwD8AAMDAAADQQQAAoD8AAMDAAADaQQAAoD8AAMDAAADQQQAAoD8AALjAAADQQQAAoD8AAMDAAADQQQAAwD8AAMDAAADQQQAAwD8AALjAAADQQQAAoD8AALjAAADaQQAAoD8AALjAAADaQQAAoD8AAMDAAADQQQAAoD8AAMDAAADQQQAAwD8AALjAAADQQQAAwD8AAMDAAADaQQAAwD8AAMDAAADaQQAAwD8AALjAAADaQQAAwD8AALjAAADaQQAAwD8AAMDAAADaQQAAoD8AAMDAAADaQQAAoD8AALjAAADaQQAAoD8AALjAAADQQQAAoD8AALjAAADQQQAAwD8AALjAAADaQQAAwD8AALjAAADaQQAAwD8AABTBAADQQQAAwD8AABTBAADQQQAAoD8AABTBAADaQQAAoD8AABTBAADQQQAAoD8AABDBAADQQQAAoD8A/xPBAADQQQAAwD8A/xPBAADQQQAAwD8AABDBAADQQQAAoD8AABDBAADaQQAAoD8AABDBAADaQQAAoD8A/xPBAADQQQAAoD8A/xPBAADQQQAAwD8AABDBAADQQQAAwD8A/xPBAADaQQAAwD8A/xPBAADaQQAAwD8AABDBAADaQQAAwD8AABDBAADaQQAAwD8A/xPBAADaQQAAoD8A/xPBAADaQQAAoD8AABDBAADaQQAAoD8AABDBAADQQQAAoD8AABDBAADQQQAAwD8AABDBAADaQQAAwD8AABDBAADaQQAAwD8AABDBAADYQQAAwD8AABDBAADYQQAAoD8AABDBAADaQQAAoD8AABDBAADYQQAAoD8AAMDAAADYQQAAoD8AABDBAADYQQAAwD8AABDBAADYQQAAwD8AAMDAAADYQQAAoD8AAMDAAADaQQAAoD8AAMDAAADaQQAAoD8AABDBAADYQQAAoD8AABDBAADYQQAAwD8AAMDAAADYQQAAwD8AABDBAADaQQAAwD8AABDBAADaQQAAwD8AAMDAAADaQQAAwD8AAMDAAADaQQAAwD8AABDBAADaQQAAoD8AABDBAADaQQAAoD8AAMDAAADaQQAAoD8AAMDAAADYQQAAoD8AAMDAAADYQQAAwD8AAMDAAADaQQAAwD8AAMDAAAD4QQAAwD8AADBAAADYQQAAwD8AADBAAADYQQAAoD8AADBAAAD4QQAAoD8AADBAAADYQQAAoD8AAEBAAADYQQAAoD8AADBAAADYQQAAwD8AADBAAADYQQAAwD8AAEBAAADYQQAAoD8AAEBAAAD4QQAAoD8AAEBAAAD4QQAAoD8AADBAAADYQQAAoD8AADBAAADYQQAAwD8AAEBAAADYQQAAwD8AADBAAAD4QQAAwD8AADBAAAD4QQAAwD8AAEBAAAD4QQAAwD8AAEBAAAD4QQAAwD8AADBAAAD4QQAAoD8AADBAAAD4QQAAoD8AAEBAAAD4QQAAoD8AAEBAAADYQQAAoD8AAEBAAADYQQAAwD8AAEBAAAD4QQAAwD8AAEBAAAD4QQAAwD8AAEBAAAD2QQAAwD8AAEBAAAD2QQAAoD8AAEBAAAD4QQAAoD8AAEBAAAD2QQAAoD8AAOBAAAD2QQAAoD8AAEBAAAD2QQAAwD8AAEBAAAD2QQAAwD8AAOBAAAD2QQAAoD8AAOBAAAD4QQAAoD8AAOBAAAD4QQAAoD8AAEBAAAD2QQAAoD8AAEBAAAD2QQAAwD8AAOBAAAD2QQAAwD8AAEBAAAD4QQAAwD8AAEBAAAD4QQAAwD8AAOBAAAD4QQAAwD8AAOBAAAD4QQAAwD8AAEBAAAD4QQAAoD8AAEBAAAD4QQAAoD8AAOBAAAD4QQAAoD8AAOBAAAD2QQAAoD8AAOBAAAD2QQAAwD8AAOBAAAD4QQAAwD8AAOBAAADaQQAAwD8AAEBAAADYQQAAwD8AAEBAAADYQQAAoD8AAEBAAADaQQAAoD8AAEBAAADYQQAAoD8AAOBAAADYQQAAoD8AAEBAAADYQQAAwD8AAEBAAADYQQAAwD8AAOBAAADYQQAAoD8AAOBAAADaQQAAoD8AAOBAAADaQQAAoD8AAEBAAADYQQAAoD8AAEBAAADYQQAAwD8AAOBAAADYQQAAwD8AAEBAAADaQQAAwD8AAEBAAADaQQAAwD8AAOBAAADaQQAAwD8AAOBAAADaQQAAwD8AAEBAAADaQQAAoD8AAEBAAADaQQAAoD8AAOBAAADaQQAAoD8AAOBAAADYQQAAoD8AAOBAAADYQQAAwD8AAOBAAADaQQAAwD8AAOBAAAD4QQAAwD8AAOBAAADYQQAAwD8AAOBAAADYQQAAoD8AAOBAAAD4QQAAoD8AAOBAAADYQQAAoD8AAOhAAADYQQAAoD8AAOBAAADYQQAAwD8AAOBAAADYQQAAwD8AAOhAAADYQQAAoD8AAOhAAAD4QQAAoD8AAOhAAAD4QQAAoD8AAOBAAADYQQAAoD8AAOBAAADYQQAAwD8AAOhAAADYQQAAwD8AAOBAAAD4QQAAwD8AAOBAAAD4QQAAwD8AAOhAAAD4QQAAwD8AAOhAAAD4QQAAwD8AAOBAAAD4QQAAoD8AAOBAAAD4QQAAoD8AAOhAAAD4QQAAoD8AAOhAAADYQQAAoD8AAOhAAADYQQAAwD8AAOhAAAD4QQAAwD8AAOhAAAA8QgAAQEAAAEjBAAAMQgAAQEAAAEjBAAAMQgAAgD8AAEjBAAA8QgAAgD8AAEjBAAAMQgAAgD8AAEDBAAAMQgAAgD8AAEjBAAAMQgAAQEAAAEjBAAAMQgAAQEAAAEDBAAAMQgAAgD8AAEDBAAA8QgAAgD8AAEDBAAA8QgAAgD8AAEjBAAAMQgAAgD8AAEjBAAA8QgAAQEAAAEDBAAA8QgAAQEAAAEjBAAA8QgAAgD8AAEjBAAA8QgAAgD8AAEDBAAAEQgAAQEAAAEjBAADQQQAAQEAAAEjBAADQQQAAgD8AAEjBAAAEQgAAgD8AAEjBAADQQQAAgD8AAEDBAADQQQAAgD8AAEjBAADQQQAAQEAAAEjBAADQQQAAQEAAAEDBAADQQQAAgD8AAEDBAAAEQgAAgD8AAEDBAAAEQgAAgD8AAEjBAADQQQAAgD8AAEjBAAAEQgAAQEAAAEDBAAAEQgAAQEAAAEjBAAAEQgAAgD8AAEjBAAAEQgAAgD8AAEDBAAD8QQAAoEAAAKzBAAD4QQAAoEAAAKzBAAD4QQAAQEAAAKzBAAD8QQAAQEAAAKzBAAD4QQAAQEAAAEjBAAD4QQAAQEAAAKzBAAD4QQAAoEAAAKzBAAD4QQAAoEAAAEjBAAD4QQAAQEAAAEjBAAD8QQAAQEAAAEjBAAD8QQAAQEAAAKzBAAD4QQAAQEAAAKzBAAD4QQAAoEAAAEjBAAD4QQAAoEAAAKzBAAD8QQAAoEAAAKzBAAD8QQAAoEAAAEjBAAD8QQAAoEAAAEjBAAD8QQAAoEAAAKzBAAD8QQAAQEAAAKzBAAD8QQAAQEAAAEjBAAD8QQAAQEAAAEjBAAD4QQAAQEAAAEjBAAD4QQAAoEAAAEjBAAD8QQAAoEAAAEjBAAAgQgAAQEAAAAhBAAAeQgAAQEAAAAhBAAAeQgAAgD8AAAhBAAAgQgAAgD8AAAhBAAAeQgAAgD8AAHBBAAAeQgAAgD8AAAhBAAAeQgAAQEAAAAhBAAAeQgAAQEAAAHBBAAAeQgAAgD8AAHBBAAAgQgAAgD8AAHBBAAAgQgAAgD8AAAhBAAAeQgAAgD8AAAhBAAAeQgAAQEAAAHBBAAAeQgAAQEAAAAhBAAAgQgAAQEAAAAhBAAAgQgAAQEAAAHBBAAAgQgAAQEAAAHBBAAAgQgAAQEAAAAhBAAAgQgAAgD8AAAhBAAAgQgAAgD8AAHBBAAAgQgAAgD8AAHBBAAAeQgAAgD8AAHBBAAAeQgAAQEAAAHBBAAAgQgAAQEAAAHBBAAA4QgAAQEAAAGhBAAAgQgAAQEAAAGhBAAAgQgAAgD8AAGhBAAA4QgAAgD8AAGhBAAAgQgAAgD8AAHBBAAAgQgAAgD8AAGhBAAAgQgAAQEAAAGhBAAAgQgAAQEAAAHBBAAAgQgAAgD8AAHBBAAA4QgAAgD8AAHBBAAA4QgAAgD8AAGhBAAAgQgAAgD8AAGhBAAAgQgAAQEAAAHBBAAAgQgAAQEAAAGhBAAA4QgAAQEAAAGhBAAA4QgAAQEAAAHBBAAA4QgAAQEAAAHBBAAA4QgAAQEAAAGhBAAA4QgAAgD8AAGhBAAA4QgAAgD8AAHBBAAA6QgAAQEAAAEhBAAA4QgAAQEAAAEhBAAA4QgAAgD8AAEhBAAA6QgAAgD8AAEhBAAA4QgAAgD8AAJhBAAA4QgAAgD8AAEhBAAA4QgAAQEAAAEhBAAA4QgAAQEAAAJhBAAA4QgAAgD8AAJhBAAA6QgAAgD8AAJhBAAA6QgAAgD8AAEhBAAA4QgAAgD8AAEhBAAA4QgAAQEAAAJhBAAA4QgAAQEAAAEhBAAA6QgAAQEAAAEhBAAA6QgAAQEAAAJhBAAA6QgAAQEAAAAhBAAA4QgAAQEAAAAhBAAA4QgAAgD8AAAhBAAA6QgAAgD8AAAhBAAA4QgAAgD8AAChBAAA4QgAAgD8AAAhBAAA4QgAAQEAAAAhBAAA4QgAAQEAAAChBAAA4QgAAgD8AAChBAAA6QgAAgD8AAChBAAA6QgAAgD8AAAhBAAA4QgAAgD8AAAhBAAA4QgAAQEAAAChBAAA4QgAAQEAAAAhBAAA6QgAAQEAAAAhBAAA6QgAAQEAAAChBAAA6QgAAgD8AAChBAAA4QgAAgD8AAChBAAA4QgAAQEAAAChBAAA6QgAAQEAAAChBAABuQgAAgD8AAAhBAAA6QgAAgD8AAAhBAAA6QgAAAD8AAAhBAABuQgAAAD8AAAhBAAA6QgAAAD8AAJRBAAA6QgAAAD8AAAhBAAA6QgAAgD8AAAhBAAA6QgAAgD8AAJRBAAA6QgAAAD8AAJRBAABuQgAAAD8AAJRBAABuQgAAAD8AAAhBAAA6QgAAAD8AAAhBAABuQgAAgD8AAJRBAABuQgAAgD8AAAhBAABuQgAAAD8AAAhBAABuQgAAAD8AAJRBAABuQgAAAD8AAJRBAAA6QgAAAD8AAJRBAAA6QgAAgD8AAJRBAABuQgAAgD8AAJRBAABeQgAAQEAAAABBAAA+QgAAQEAAAABBAAA+QgAAgD8AAABBAABeQgAAgD8AAABBAAA+QgAAgD8AAAhBAAA+QgAAgD8AAABBAAA+QgAAQEAAAABBAAA+QgAAQEAAAAhBAAA+QgAAgD8AAAhBAABeQgAAgD8AAAhBAABeQgAAgD8AAABBAAA+QgAAgD8AAABBAAA+QgAAQEAAAAhBAAA+QgAAQEAAAABBAABeQgAAQEAAAABBAABeQgAAQEAAAAhBAABeQgAAQEAAAAhBAABeQgAAQEAAAABBAABeQgAAgD8AAABBAABeQgAAgD8AAAhBAABuQgAAQEAAAABBAABmQgAAQEAAAABBAABmQgAAgD8AAABBAABuQgAAgD8AAABBAABmQgAAgD8AAAhBAABmQgAAgD8AAABBAABmQgAAQEAAAABBAABmQgAAQEAAAAhBAABmQgAAgD8AAAhBAABuQgAAgD8AAAhBAABuQgAAgD8AAABBAABmQgAAgD8AAABBAABmQgAAQEAAAAhBAABmQgAAQEAAAABBAABuQgAAQEAAAABBAABuQgAAQEAAAAhBAABuQgAAQEAAAAhBAABuQgAAQEAAAABBAABuQgAAgD8AAABBAABuQgAAgD8AAAhBAABwQgAAAEAAAABBAABuQgAAAEAAAABBAABuQgAAgD8AAABBAABwQgAAgD8AAABBAABuQgAAgD8AAJRBAABuQgAAgD8AAABBAABuQgAAAEAAAABBAABuQgAAAEAAAJRBAABuQgAAgD8AAJRBAABwQgAAgD8AAJRBAABwQgAAgD8AAABBAABuQgAAgD8AAABBAABuQgAAAEAAAJRBAABuQgAAAEAAAABBAABwQgAAAEAAAABBAABwQgAAAEAAAJRBAABwQgAAAEAAAJRBAAA6QgAAAEAAAJRBAAA6QgAAgD8AAJRBAABwQgAAgD8AAJRBAAA6QgAAgD8AAJhBAAA6QgAAgD8AAJRBAAA6QgAAAEAAAJRBAAA6QgAAAEAAAJhBAAA6QgAAgD8AAJhBAABwQgAAgD8AAJhBAABwQgAAgD8AAJRBAAA6QgAAgD8AAJRBAAA6QgAAAEAAAJhBAAA6QgAAAEAAAJRBAABwQgAAAEAAAJRBAABwQgAAAEAAAJhBAABwQgAAAEAAAJhBAABwQgAAAEAAAJRBAABwQgAAgD8AAJRBAABwQgAAgD8AAJhBAABYQgAAgD8AAEDBAAA8QgAAgD8AAEDBAAA8QgAAAD8AAEDBAABYQgAAAD8AAEDBAAA8QgAAAD8AAABAAAA8QgAAAD8AAEDBAAA8QgAAgD8AAEDBAAA8QgAAgD8AAABAAAA8QgAAAD8AAABAAABYQgAAAD8AAABAAABYQgAAAD8AAEDBAAA8QgAAAD8AAEDBAABYQgAAgD8AAABAAABYQgAAgD8AAEDBAABYQgAAAD8AAEDBAABYQgAAAD8AAABAAABYQgAAAD8AAABAAAA8QgAAAD8AAABAAAA8QgAAgD8AAABAAABYQgAAgD8AAABAAAB8QgAAgD8AAABAAAA8QgAAgD8AAABAAAA8QgAAAD8AAABAAAB8QgAAAD8AAABAAAA8QgAAAD8AAABBAAA8QgAAAD8AAABAAAA8QgAAgD8AAABAAAA8QgAAgD8AAABBAAA8QgAAAD8AAABBAAB8QgAAAD8AAABBAAB8QgAAAD8AAABAAAA8QgAAAD8AAABAAAB8QgAAgD8AAABBAAB8QgAAgD8AAABAAAB8QgAAAD8AAABAAAB8QgAAAD8AAABBAAB8QgAAAD8AAABBAAA8QgAAAD8AAABBAAA8QgAAgD8AAABBAAB8QgAAgD8AAABBAAB+QgAAQEAAABDBAAB8QgAAQEAAABDBAAB8QgAAAL8AABDBAAB+QgAAAL8AABDBAAB8QgAAAL8AAMDAAAB8QgAAAL8AABDBAAB8QgAAQEAAABDBAAB8QgAAQEAAAMDAAAB8QgAAAL8AAMDAAAB+QgAAAL8AAMDAAAB+QgAAAL8AABDBAAB8QgAAAL8AABDBAAB8QgAAQEAAAMDAAAB8QgAAQEAAABDBAAB+QgAAQEAAABDBAAB+QgAAQEAAAMDAAAB+QgAAAL8AAMDAAAB8QgAAAL8AAMDAAAB8QgAAQEAAAMDAAAB+QgAAQEAAAMDAAAB+QgAAAEAAAABAAAB8QgAAAEAAAABAAAB8QgAAAL8AAABAAAB+QgAAAL8AAABAAAB8QgAAAL8AAABBAAB8QgAAAL8AAABAAAB8QgAAAEAAAABAAAB8QgAAAEAAAABBAAB8QgAAAL8AAABBAAB+QgAAAL8AAABBAAB+QgAAAL8AAABAAAB8QgAAAL8AAABAAAB8QgAAAEAAAABBAAB8QgAAAEAAAABAAAB+QgAAAEAAAABAAAB+QgAAAEAAAABBAAB8QgAAAEAAAPBAAABuQgAAAEAAAPBAAABuQgAAgD8AAPBAAAB8QgAAgD8AAPBAAABuQgAAgD8AAABBAABuQgAAgD8AAPBAAABuQgAAAEAAAPBAAABuQgAAAEAAAABBAABuQgAAgD8AAABBAAB8QgAAgD8AAABBAAB8QgAAgD8AAPBAAABuQgAAgD8AAPBAAABuQgAAAEAAAABBAABuQgAAAEAAAPBAAAB8QgAAAEAAAPBAAAB8QgAAAEAAAABBAAB8QgAAAEAAAABBAAB8QgAAAEAAAPBAAAB8QgAAgD8AAPBAAAB8QgAAgD8AAABBAACNQgAAgD8AAIjBAAB+QgAAgD8AAIjBAAB+QgAAAD8AAIjBAACNQgAAAD8AAIjBAAB+QgAAAD8AANDAAAB+QgAAAD8AAIjBAAB+QgAAgD8AAIjBAAB+QgAAgD8AANDAAAB+QgAAAD8AANDAAACNQgAAAD8AANDAAACNQgAAAD8AAIjBAAB+QgAAAD8AAIjBAACNQgAAgD8AANDAAACNQgAAgD8AAIjBAACNQgAAAD8AAIjBAACNQgAAAD8AANDAAACNQgAAAD8AANDAAAB+QgAAAD8AANDAAAB+QgAAgD8AANDAAACNQgAAgD8AANDAAAB+QgAAAEAAAMDAAAB8QgAAAEAAAMDAAAB8QgAAAL8AAMDAAAB+QgAAAL8AAMDAAAB8QgAAAL8AAABAAAB8QgAAAL8AAMDAAAB8QgAAAEAAAMDAAAB8QgAAAEAAAABAAAB8QgAAAL8AAABAAAB+QgAAAL8AAABAAAB+QgAAAL8AAMDAAAB8QgAAAL8AAMDAAAB8QgAAAEAAAABAAAB8QgAAAEAAAMDAAAB+QgAAAEAAAMDAAAB+QgAAAEAAAABAAAB+QgAAAL8AAABAAAB8QgAAAL8AAABAAAB8QgAAAEAAAABAAAB+QgAAAEAAAABAAAB+QgAAQEAAAIzBAAB8QgAAQEAAAIzBAAB8QgAAAL8AAIzBAAB+QgAAAL8AAIzBAAB8QgAAAL8AADDBAAB8QgAAAL8AAIzBAAB8QgAAQEAAAIzBAAB8QgAAQEAAADDBAAB8QgAAAL8AADDBAAB+QgAAAL8AADDBAAB+QgAAAL8AAIzBAAB8QgAAAL8AAIzBAAB8QgAAQEAAADDBAAB8QgAAQEAAAIzBAAB+QgAAQEAAAIzBAAB+QgAAQEAAADDBAAB+QgAAAL8AADDBAAB8QgAAAL8AADDBAAB8QgAAQEAAADDBAAB+QgAAQEAAADDBAADuQQAAwD8AAEDBAADsQQAAwD8AAEDBAADsQQAAoD8AAEDBAADuQQAAoD8AAEDBAADsQQAAoD8AACzBAADsQQAAoD8AAEDBAADsQQAAwD8AAEDBAADsQQAAwD8AACzBAADsQQAAoD8AACzBAADuQQAAoD8AACzBAADuQQAAoD8AAEDBAADsQQAAoD8AAEDBAADsQQAAwD8AACzBAADsQQAAwD8AAEDBAADuQQAAwD8AAEDBAADuQQAAwD8AACzBAADuQQAAwD8AACzBAADuQQAAwD8AAEDBAADuQQAAoD8AAEDBAADuQQAAoD8AACzBAADuQQAAoD8AACzBAADsQQAAoD8AACzBAADsQQAAwD8AACzBAADuQQAAwD8AACzBAAD+QQAAwD8AAEDBAAD8QQAAwD8AAEDBAAD8QQAAoD8AAEDBAAD+QQAAoD8AAEDBAAD8QQAAoD8AACzBAAD8QQAAoD8AAEDBAAD8QQAAwD8AAEDBAAD8QQAAwD8AACzBAAD8QQAAoD8AACzBAAD+QQAAoD8AACzBAAD+QQAAoD8AAEDBAAD8QQAAoD8AAEDBAAD8QQAAwD8AACzBAAD8QQAAwD8AAEDBAAD+QQAAwD8AAEDBAAD+QQAAwD8AACzBAAD+QQAAwD8AACzBAAD+QQAAwD8AAEDBAAD+QQAAoD8AAEDBAAD+QQAAoD8AACzBAAD+QQAAoD8AACzBAAD8QQAAoD8AACzBAAD8QQAAwD8AACzBAAD+QQAAwD8AACzBAADuQQAAoD8AADDBAADsQQAAoD8AADDBAADsQQAAgD8AADDBAADuQQAAgD8AADDBAADsQQAAgD8AACzBAADsQQAAgD8A/y/BAADsQQAAoD8A/y/BAADsQQAAoD8AACzBAADsQQAAgD8AACzBAADuQQAAgD8AACzBAADuQQAAgD8A/y/BAADsQQAAgD8A/y/BAADsQQAAoD8AACzBAADsQQAAoD8A/y/BAADuQQAAoD8A/y/BAADuQQAAoD8AACzBAADuQQAAoD8AACzBAADuQQAAoD8A/y/BAADuQQAAgD8A/y/BAADuQQAAgD8AACzBAADuQQAAgD8AACzBAADsQQAAgD8AACzBAADsQQAAoD8AACzBAADuQQAAoD8AACzBAAD+QQAAoD8AADDBAAD8QQAAoD8AADDBAAD8QQAAgD8AADDBAAD+QQAAgD8AADDBAAD8QQAAgD8AACzBAAD8QQAAgD8A/y/BAAD8QQAAoD8A/y/BAAD8QQAAoD8AACzBAAD8QQAAgD8AACzBAAD+QQAAgD8AACzBAAD+QQAAgD8A/y/BAAD8QQAAgD8A/y/BAAD8QQAAoD8AACzBAAD8QQAAoD8A/y/BAAD+QQAAoD8A/y/BAAD+QQAAoD8AACzBAAD+QQAAoD8AACzBAAD+QQAAoD8A/y/BAAD+QQAAgD8A/y/BAAD+QQAAgD8AACzBAAD+QQAAgD8AACzBAAD8QQAAgD8AACzBAAD8QQAAoD8AACzBAAD+QQAAoD8AACzBAACOQgAAAEAAAJjBAACNQgAAAEAAAJjBAACNQgAAAL8AAJjBAACOQgAAAL8AAJjBAACNQgAAAL8AAMDAAACNQgAAAL8AAJjBAACNQgAAAEAAAJjBAACNQgAAAEAAAMDAAACNQgAAAL8AAMDAAACOQgAAAL8AAMDAAACOQgAAAL8AAJjBAACNQgAAAL8AAJjBAACNQgAAAEAAAMDAAACNQgAAAEAAAJjBAACOQgAAAEAAAJjBAACOQgAAAEAAAMDAAACOQgAAAL8AAMDAAACNQgAAAL8AAMDAAACNQgAAAEAAAMDAAACOQgAAAEAAAMDAAACNQgAAAEAAANDAAAB+QgAAAEAAANDAAAB+QgAAgD8AANDAAACNQgAAgD8AANDAAAB+QgAAgD8AAMDAAAB+QgAAgD8AANDAAAB+QgAAAEAAANDAAAB+QgAAAEAAAMDAAAB+QgAAgD8AAMDAAACNQgAAgD8AAMDAAACNQgAAgD8AANDAAAB+QgAAgD8AANDAAAB+QgAAAEAAAMDAAAB+QgAAAEAAANDAAACNQgAAAEAAANDAAACNQgAAAEAAAMDAAACNQgAAAEAAAMDAAACNQgAAAEAAANDAAACNQgAAgD8AANDAAACNQgAAgD8AAMDAAAAoQQAAAEAAAABAAAAgQQAAAEAAAABAAAAgQQAAAD8AAABAAAAoQQAAAD8AAABAAAAgQQAAAD8AAFBBAAAgQQAAAD8AAABAAAAgQQAAAEAAAABAAAAgQQAAAEAAAFBBAAAgQQAAAD8AAFBBAAAoQQAAAD8AAFBBAAAoQQAAAD8AAABAAAAgQQAAAD8AAABAAAAYQgAAoEAAALDBAAD4QQAAoEAAALDBAAD4QQAAQEAAALDBAAAYQgAAQEAAALDBAAD4QQAAQEAAAKzBAAD4QQAAQEAAALDBAAD4QQAAoEAAALDBAAD4QQAAoEAAAKzBAAD4QQAAQEAAAKzBAAAYQgAAQEAAAKzBAAAYQgAAQEAAALDBAAD4QQAAQEAAALDBAAAYQgAAoEAAAKzBAAAYQgAAoEAAALDBAAAYQgAAQEAAALDBAAAYQgAAQEAAAKzBAAAaQgAAoEAAALDBAAAYQgAAoEAAALDBAAAYQgAAQEAAALDBAAAaQgAAQEAAALDBAAAYQgAAQEAAAEjBAAAYQgAAQEAAALDBAAAYQgAAoEAAALDBAAAYQgAAoEAAAEjBAAAYQgAAQEAAAEjBAAAaQgAAQEAAAEjBAAAaQgAAQEAAALDBAAAYQgAAQEAAALDBAAAYQgAAoEAAAEjBAAAYQgAAoEAAALDBAAAaQgAAoEAAALDBAAAaQgAAoEAAAEjBAAAaQgAAoEAAAEjBAAAaQgAAoEAAALDBAAAaQgAAQEAAALDBAAAaQgAAQEAAAEjBAAAaQgAAQEAAAEjBAAAYQgAAQEAAAEjBAAAYQgAAoEAAAEjBAAAaQgAAoEAAAEjBAAAgQgAAgD8AAEDBAAANQgAAgD8AAEDBAAANQgAAAD8AAEDBAAAgQgAAAD8AAEDBAAANQgAAAD8AAJDAAAANQgAAAD8AAEDBAAANQgAAgD8AAEDBAAANQgAAgD8AAJDAAAANQgAAAD8AAJDAAAAgQgAAAD8AAJDAAAAgQgAAAD8AAEDBAAANQgAAAD8AAEDBAAAgQgAAgD8AAJDAAAAgQgAAgD8AAEDBAAAgQgAAAD8AAEDBAAAgQgAAAD8AAJDAAAAgQgAAAD8AAJDAAAANQgAAAD8AAJDAAAANQgAAgD8AAJDAAAAgQgAAgD8AAJDAAAANQgAAgD8AABzBAAADQgAAgD8AABzBAAADQgAAAD8AABzBAAANQgAAAD8AABzBAAADQgAAAD8AAJDAAAADQgAAAD8A/xvBAAADQgAAgD8A/xvBAAADQgAAgD8AAJDAAAADQgAAAD8AAJDAAAANQgAAAD8AAJDAAAANQgAAAD8A/xvBAAADQgAAAD8A/xvBAAANQgAAgD8AAJDAAAANQgAAgD8A/xvBAAANQgAAAD8A/xvBAAANQgAAAD8AAJDAAAANQgAAAD8AAJDAAAADQgAAAD8AAJDAAAADQgAAgD8AAJDAAAANQgAAgD8AAJDAAAAEQgAAgD8AAJDAAADQQQAAgD8AAJDAAADQQQAAAD8AAJDAAAAEQgAAAD8AAJDAAADQQQAAAD8AAABBAADQQQAAAD8AApDAAADQQQAAgD8AApDAAADQQQAAgD8AAABBAADQQQAAAD8AAABBAAAEQgAAAD8AAABBAAAEQgAAAD8AApDAAADQQQAAAD8AApDAAAAEQgAAgD8AAABBAAAEQgAAgD8AApDAAAAEQgAAAD8AApDAAAAEQgAAAD8AAABBAAAEQgAAAD8AAABBAADQQQAAAD8AAABBAADQQQAAgD8AAABBAAAEQgAAgD8AAABBAAADQgAAgD8AAETBAADQQQAAgD8AAETBAADQQQAAQD8AAETBAAADQgAAQD8AAETBAADQQQAAQD8AAJDAAADQQQAAQD8AAETBAADQQQAAgD8AAETBAADQQQAAgD8AAJDAAADQQQAAQD8AAJDAAAADQgAAQD8AAJDAAAADQgAAQD8AAETBAADQQQAAQD8AAETBAAADQgAAgD8AAJDAAAADQgAAgD8AAETBAAADQgAAQD8AAETBAAADQgAAQD8AAJDAAAADQgAAQD8AAJDAAADQQQAAQD8AAJDAAADQQQAAgD8AAJDAAAADQgAAgD8AAJDA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////v/////////8//////////z//////////P/////////8/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////////////8//////////z//////////P/////////8/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+//////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//3//P////3//f/8/////f/9//z////9//3//P/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9///8AAP9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/9//z////9//3//P////3//f/8/////f/9//z//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//3//P////3//f/8/////f/9//z////9//3//P/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/9//z////9//3//P////3//f/8/////f/9//z//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f///AAAAAP9///8AAAAA/3///wAAAAD/f///AAD/fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/AAD/P/9//38AAP8//3//fwAA/z//f/9/AAD/P/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+//////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3///wAAAAD/f///AAAAAP9///8AAAAA/3///wAA/38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/AAD/P/9//38AAP8//3//fwAA/z//f/9/AAD/P/////////8//////////z//////////P/////////8/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f///AAAAAP9///8AAAAA/3///wAAAAD/f///AAD/fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////////P/////////8//////////z//////////PwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//////////3//////////f/////////9///////////////8//////////z//////////P/////////8/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP////////9//3//P////3//f/8/////f/9//z////9//3//P/9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA/////////3//////////f/////////9//////////3///////3//fwAA/z//f/9/AAD/P/9//38AAP8//3//fwAA/z8=") }, { -"aabb": AABB(-5, 1, -4, 15, 1e-05, 16.5), -"attribute_data": PackedByteArray("AACgwAAAMMEAABBBAAAwwQAAEEEAAIBAAACgwAAAgEAAACBBAAAgwQAASEEAACDBAABIQQAAAMAAACBBAAAAwA=="), +"aabb": AABB(-4.999756, 1, -4.000244, 14.999756, 1e-05, 16.500244), +"attribute_data": PackedByteArray("AAAQQQD8f0AAAqDAAPx/QAACoMAAADDBAAAQQQAAMMEAAEhBAAAAwAAAIEEAAADAAAAgQQAAIMEAAEhBAAAgwQ=="), "format": 34359742487, "index_count": 12, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcA"), @@ -97,10 +97,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 8, -"vertex_data": PackedByteArray("AAAgQQAAgD8AAIDAAAAgQQAAgD8AACBBAACgwAAAgD8AACBBAACgwAAAgD8AAIDAAAAgQQAAgD8AACBBAAAgQQAAgD8AAEhBAAAAQAAAgD8AAEhBAAAAQAAAgD8AACBB/3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//vw==") +"vertex_data": PackedByteArray("AP6fwAAAgD8AACBBAP6fwAAAgD8AAoDAAAAgQQAAgD8AAoDAAAAgQQAAgD8AACBBAAAAQAAAgD8AAEhBAAAAQAAAgD8AACBBAAAgQQAAgD8AACBBAAAgQQAAgD8AAEhB/3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//vw==") }, { -"aabb": AABB(-10.5, -0.5, -21.5, 81, 3.5, 40), -"attribute_data": PackedByteArray("AAAwQQAAgL8AADBBAAAAvwAAwEAAAAC/AADAQAAAgL8AAADAAACAvwAAgEAAAIC/AACAQAAAAL8AAADAAAAAvwAAQEAAAMBAAABAQAAAMEEAAEDAAAAwQQAAQMAAAMBAAABAwAAAwEAAAEBAAADAQAAAQEAAADBBAABAwAAAMEEAAEBAAACAvwAAQEAAAAC/AABAwAAAAL8AAEDAAACAvwAAMMEAAIC/AADAwAAAgL8AAMDAAAAAvwAAMMEAAAC/AAAoQQAAoL8AAChBAACAvwAACEEAAIC/AAAIQQAAoL8AAAAAAACgvwAAgD4AAKC/AACAPgAAgL8AAAAAAACAvwAAAAAAAAhBAAAAAAAAKEEAAIC+AAAoQQAAgL4AAAhBAAAAAAAACEEAAIA+AAAIQQAAgD4AAChBAAAAAAAAKEEAAAAAAACgvwAAAAAAAIC/AACAvgAAgL8AAIC+AACgvwAAKMEAAKC/AAAIwQAAoL8AAAjBAACAvwAAKMEAAIC/AAAoQQAAoL8AAChBAACAvwAACEEAAIC/AAAIQQAAoL8AAABAAACgvwAAEEAAAKC/AAAQQAAAgL8AAABAAACAvwAAAMAAAAhBAAAAwAAAKEEAABDAAAAoQQAAEMAAAAhBAAAAQAAACEEAABBAAAAIQQAAEEAAAChBAAAAQAAAKEEAAADAAACgvwAAAMAAAIC/AAAQwAAAgL8AABDAAACgvwAAKMEAAKC/AAAIwQAAoL8AAAjBAACAvwAAKMEAAIC/AAAYQQAAoL8AABhBAACAvwAAFEEAAIC/AAAUQQAAoL8AAABAAACgvwAAEEAAAKC/AAAQQAAAgL8AAABAAACAvwAAAMAAABRBAAAAwAAAGEEAABDAAAAYQQAAEMAAABRBAAAAQAAAFEEAABBAAAAUQQAAEEAAABhBAAAAQAAAGEEAAADAAACgvwAAAMAAAIC/AAAQwAAAgL8AABDAAACgvwAAGMEAAKC/AAAUwQAAoL8AABTBAACAvwAAGMEAAIC/AAAYQQAAoL8AABhBAACAvwAAFEEAAIC/AAAUQQAAoL8AAIA/AACgvwAAoD8AAKC/AACgPwAAgL8AAIA/AACAvwAAgL8AABRBAACAvwAAGEEAAKC/AAAYQQAAoL8AABRBAACAPwAAFEEAAKA/AAAUQQAAoD8AABhBAACAPwAAGEEAAIC/AACgvwAAgL8AAIC/AACgvwAAgL8AAKC/AACgvwAAGMEAAKC/AAAUwQAAoL8AABTBAACAvwAAGMEAAIC/AACgwAAAyMEAAAA/AADIwQAAAD8AACDBAACgwAAAIMEAAIA/AAAgwgAAAEEAACDCAAAAQQAABMIAAIA/AAAEwgAAQMEAADzCAAAAQQAAPMIAAABBAAAgwgAAQMEAACDCAACgwAAAIMIAACBAAAAgwgAAIEAAAATCAACgwAAABMIAABBBAAA4wgAAcEEAADjCAABwQQAAHsIAABBBAAAewgAAsMEAABjCAABQwQAAGMIAAFDBAAD4wQAAsMEAAPjBAAAQQQAAcMIAAJhBAABwwgAAmEEAADzCAAAQQQAAPMIAAEDBAABYwgAAAEAAAFjCAAAAQAAAPMIAAEDBAAA8wgAAAEAAAHzCAAAAQQAAfMIAAABBAAA8wgAAAEAAADzCAACMwQAAjsIAAODAAACOwgAA4MAAAIDCAACMwQAAgMIAAEDBAAAgwgAAkMAAACDCAACQwAAADcIAAEDBAAANwgAAHMEAAA3CAACQwAAADcIAAJDAAAADwgAAHMEAAAPCAACQwAAABMIAAABBAAAEwgAAAEEAANDBAACQwAAA0MEAAETBAAADwgAAkMAAAAPCAACQwAAA0MEAAETBAADQwQ=="), +"aabb": AABB(-10.500244, -0.5, -21.5, 81.000244, 3.5, 40), +"attribute_data": PackedByteArray("AADAQAAAgL8AATBBAACAvwABMEEAAAC/AADAQAAAAL8AAIBAAAAAvwAEAMAAAAC/AAQAwAAAgL8AAIBAAACAvwAAQMAAATBBAABAwAAAwEAABEBAAADAQAAEQEAAATBBAABAQAABMEEABEDAAAEwQQAEQMAAAMBAAABAQAAAwEAAAEDAAACAvwAEQEAAAIC/AARAQAAAAL8AAEDAAAAAvwAAwMAAAAC/AAEwwQAAAL8AATDBAACAvwAAwMAAAIC/AAAIQQAAoL8AAShBAACgvwABKEEAAIC/AAAIQQAAgL8AAIA+AACAvwAAAAAAAIC/AAAAAAAAoL8AAIA+AACgvwAAgL4AAShBAACAvgAACEEAAAAAAAAIQQAAAAAAAShBAACAPgABKEEAAAAAAAEoQQAAAAAAAAhBAACAPgAACEEAAIC+AACgvwAAAAAAAKC/AAAAAAAAgL8AAIC+AACAvwAACMEAAIC/AAEowQAAgL8AASjBAACgvwAACMEAAKC/AAAIQQAAoL8AAShBAACgvwABKEEAAIC/AAAIQQAAgL8AABBAAACAvwAAAEAAAIC/AAAAQAAAoL8AABBAAACgvwAAEMAAAShBAAAQwAAACEEAAADAAAAIQQAAAMAAAShBAAAQQAABKEEAAABAAAEoQQAAAEAAAAhBAAAQQAAACEEAABDAAACgvwAAAMAAAKC/AAAAwAAAgL8AABDAAACAvwAACMEAAIC/AAEowQAAgL8AASjBAACgvwAACMEAAKC/AAAUQQAAoL8AARhBAACgvwABGEEAAIC/AAAUQQAAgL8AABBAAACAvwAAAEAAAIC/AAAAQAAAoL8AABBAAACgvwAAEMAAARhBAAAQwAAAFEEAAADAAAAUQQAAAMAAARhBAAAQQAABGEEAAABAAAEYQQAAAEAAABRBAAAQQAAAFEEAABDAAACgvwAAAMAAAKC/AAAAwAAAgL8AABDAAACAvwAAFMEAAIC/AAEYwQAAgL8AARjBAACgvwAAFMEAAKC/AAAUQQAAoL8AARhBAACgvwABGEEAAIC/AAAUQQAAgL8AAKA/AACAvwAAgD8AAIC/AACAPwAAoL8AAKA/AACgvwAAoL8AARhBAACgvwAAFEEAAIC/AAAUQQAAgL8AARhBAACgPwABGEEAAIA/AAEYQQAAgD8AABRBAACgPwAAFEEAAKC/AACgvwAAgL8AAKC/AACAvwAAgL8AAKC/AACAvwAAFMEAAIC/AAEYwQAAgL8AARjBAACgvwAAFMEAAKC/AAAAPwAAIMEAAqDAAAAgwQACoMAAAMjBAAAAPwAAyMEAAABBAAAEwgAAgD8AAATCAACAPwAAIMIAAABBAAAgwgAAAEEAACDCAABAwQAAIMIAAEDBAAA8wgAAAEEAADzCAAAgQAAABMIAAKDAAAAEwgAAoMAAACDCAAAgQAAAIMIAAHBBAAAewgAAEEEAAB7CAAAQQQAAOMIAAHBBAAA4wgAAUMEAAPjBAACwwQAA+MEAALDBAAAYwgAAUMEAABjCAACYQQAAPMIAABBBAAA8wgAAEEEAAHDCAACYQQAAcMIAAABAAAA8wgAAQMEAADzCAABAwQAAWMIAAABAAABYwgAAAEEAADzCAAAAQAAAPMIAAABAAAB8wgAAAEEAAHzCAADgwAAAgMIAAIzBAACAwgAAjMEAAI7CAADgwAAAjsIAAJDAAAANwgAAQMEAAA3CAABAwQAAIMIAAJDAAAAgwgAAkMAAAAPCAP8bwQAAA8IA/xvBAAANwgAAkMAAAA3CAAAAQQAA0MEAApDAAADQwQACkMAAAATCAAAAQQAABMIAAJDAAADQwQAARMEAANDBAABEwQAAA8IAAJDAAAADwg=="), "format": 34359742487, "index_count": 264, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsAPAA9AD4APAA+AD8AQABBAEIAQABCAEMARABFAEYARABGAEcASABJAEoASABKAEsATABNAE4ATABOAE8AUABRAFIAUABSAFMAVABVAFYAVABWAFcAWABZAFoAWABaAFsAXABdAF4AXABeAF8AYABhAGIAYABiAGMAZABlAGYAZABmAGcAaABpAGoAaABqAGsAbABtAG4AbABuAG8AcABxAHIAcAByAHMAdAB1AHYAdAB2AHcAeAB5AHoAeAB6AHsAfAB9AH4AfAB+AH8AgACBAIIAgACCAIMAhACFAIYAhACGAIcAiACJAIoAiACKAIsAjACNAI4AjACOAI8AkACRAJIAkACSAJMAlACVAJYAlACWAJcAmACZAJoAmACaAJsAnACdAJ4AnACeAJ8AoAChAKIAoACiAKMApAClAKYApACmAKcAqACpAKoAqACqAKsArACtAK4ArACuAK8A"), @@ -109,10 +109,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 176, -"vertex_data": PackedByteArray("AAAowQAAgD8AAMC/AAAowQAAAD8AAMC/AACwwAAAAD8AAMC/AACwwAAAgD8AAMC/AAAowQAAgD8AAMC/AAAowQAAgD8AAJBAAAAowQAAAD8AAJBAAAAowQAAAD8AAMC/AACwwAAAAD8AAMC/AAAowQAAAD8AAMC/AAAowQAAAD8AAJBAAACwwAAAAD8AAJBAAACwwAAAgD8AAMC/AACwwAAAgD8AAJBAAAAowQAAgD8AAJBAAAAowQAAgD8AAMC/AACwwAAAgD8AAMC/AACwwAAAAD8AAMC/AACwwAAAAD8AAJBAAACwwAAAgD8AAJBAAAAowQAAgD8AAJBAAACwwAAAgD8AAJBAAACwwAAAAD8AAJBAAAAowQAAAD8AAJBAAAAowQAAwD8AAAA/AAAowQAAoD8AAAA/AAAIwQAAoD8AAAA/AAAIwQAAwD8AAAA/AAAowQAAwD8AAAA/AAAowQAAwD8AAEA/AAAowQAAoD8AAEA/AAAowQAAoD8AAAA/AAAIwQAAoD8AAAA/AAAowQAAoD8AAAA/AAAowQAAoD8AAEA/AAAIwQAAoD8AAEA/AAAIwQAAwD8AAAA/AAAIwQAAwD8AAEA/AAAowQAAwD8AAEA/AAAowQAAwD8AAAA/AAAIwQAAwD8AAAA/AAAIwQAAoD8AAAA/AAAIwQAAoD8AAEA/AAAIwQAAwD8AAEA/AAAowQAAwD8AAEA/AAAIwQAAwD8AAEA/AAAIwQAAoD8AAEA/AAAowQAAoD8AAEA/AAAowQAAwD8AABBAAAAowQAAoD8AABBAAAAIwQAAoD8AABBAAAAIwQAAwD8AABBAAAAowQAAwD8AABBAAAAowQAAwD8AACBAAAAowQAAoD8AACBAAAAowQAAoD8AABBAAAAIwQAAoD8AABBAAAAowQAAoD8AABBAAAAowQAAoD8AACBAAAAIwQAAoD8AACBAAAAIwQAAwD8AABBAAAAIwQAAwD8AACBAAAAowQAAwD8AACBAAAAowQAAwD8AABBAAAAIwQAAwD8AABBAAAAIwQAAoD8AABBAAAAIwQAAoD8AACBAAAAIwQAAwD8AACBAAAAowQAAwD8AACBAAAAIwQAAwD8AACBAAAAIwQAAoD8AACBAAAAowQAAoD8AACBAAAAMwQAAoD8AABBAAAAMwQAAgD8AABBAAAAIwQAAgD8AABBAAAAIwQAAoD8AABBAAAAMwQAAoD8AABBAAAAMwQAAoD8AACBAAAAMwQAAgD8AACBAAAAMwQAAgD8AABBAAAAIwQAAgD8AABBAAAAMwQAAgD8AABBAAAAMwQAAgD8AACBAAAAIwQAAgD8AACBAAAAIwQAAoD8AABBAAAAIwQAAoD8AACBAAAAMwQAAoD8AACBAAAAMwQAAoD8AABBAAAAIwQAAoD8AABBAAAAIwQAAgD8AABBAAAAIwQAAgD8AACBAAAAIwQAAoD8AACBAAAAMwQAAoD8AACBAAAAIwQAAoD8AACBAAAAIwQAAgD8AACBAAAAMwQAAgD8AACBAAAAMwQAAoD8AAAA/AAAMwQAAgD8AAAA/AAAIwQAAgD8AAAA/AAAIwQAAoD8AAAA/AAAMwQAAoD8AAAA/AAAMwQAAoD8AAEA/AAAMwQAAgD8AAEA/AAAMwQAAgD8AAAA/AAAIwQAAgD8AAAA/AAAMwQAAgD8AAAA/AAAMwQAAgD8AAEA/AAAIwQAAgD8AAEA/AAAIwQAAoD8AAAA/AAAIwQAAoD8AAEA/AAAMwQAAoD8AAEA/AAAMwQAAoD8AAAA/AAAIwQAAoD8AAAA/AAAIwQAAgD8AAAA/AAAIwQAAgD8AAEA/AAAIwQAAoD8AAEA/AAAMwQAAoD8AAEA/AAAIwQAAoD8AAEA/AAAIwQAAgD8AAEA/AAAMwQAAgD8AAEA/AADMQQAAgD8AAIDAAADMQQAAgD8AAMA/AAAoQQAAgD8AAMA/AAAoQQAAgD8AAIDAAAAgQgAAgD8AAIA/AAAgQgAAgD8AAABBAAAEQgAAgD8AAABBAAAEQgAAgD8AAIA/AAA8QgAAgD8AAEDBAAA8QgAAgD8AAABBAAAgQgAAgD8AAABBAAAgQgAAgD8AAEDBAAAgQgAAAL8AALDAAAAgQgAAAL8AAABAAAAEQgAAAL8AAABAAAAEQgAAAL8AALDAAAA4QgAAgD8AAAhBAAA4QgAAgD8AAGhBAAAeQgAAgD8AAGhBAAAeQgAAgD8AAAhBAAAYQgAAQEAAAKzBAAAYQgAAQEAAAEjBAAD4QQAAQEAAAEjBAAD4QQAAQEAAAKzBAABuQgAAgD8AAAhBAABuQgAAgD8AAJRBAAA6QgAAgD8AAJRBAAA6QgAAgD8AAAhBAABYQgAAgD8AAEDBAABYQgAAgD8AAABAAAA8QgAAgD8AAABAAAA8QgAAgD8AAEDBAAB8QgAAgD8AAABAAAB8QgAAgD8AAABBAAA8QgAAgD8AAABBAAA8QgAAgD8AAABAAACNQgAAgD8AAIjBAACNQgAAgD8AANDAAAB+QgAAgD8AANDAAAB+QgAAgD8AAIjBAAAgQgAAgD8AAEDBAAAgQgAAgD8AAJDAAAANQgAAgD8AAJDAAAANQgAAgD8AAEDBAAANQgAAgD8AABzBAAANQgAAgD8AAJDAAAADQgAAgD8AAJDAAAADQgAAgD8AABzBAAAEQgAAgD8AAJDAAAAEQgAAgD8AAABBAADQQQAAgD8AAABBAADQQQAAgD8AAJDAAAADQgAAgD8AAETBAAADQgAAgD8AAJDAAADQQQAAgD8AAJDAAADQQQAAgD8AAETB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//vw==") +"vertex_data": PackedByteArray("AACwwAAAgD8AAMC/AAEowQAAgD8AAMC/AAEowQAAAD8AAMC/AACwwAAAAD8AAMC/AAAowQAAAD8AAJBAAAAowQAAAD8ACMC/AAAowQAAgD8ACMC/AAAowQAAgD8AAJBAAAEowQAAAD8AAJBAAACwwAAAAD8AAJBAAACwwAAAAD8ACMC/AAEowQAAAD8ACMC/AAEowQAAgD8AAJBAAAEowQAAgD8ACMC/AACwwAAAgD8ACMC/AACwwAAAgD8AAJBAAACwwAAAgD8AAJBAAACwwAAAgD8ACMC/AACwwAAAAD8ACMC/AACwwAAAAD8AAJBAAACwwAAAAD8AAJBAAAEowQAAAD8AAJBAAAEowQAAgD8AAJBAAACwwAAAgD8AAJBAAAAIwQAAwD8AAAA/AAEowQAAwD8AAAA/AAEowQAAoD8AAAA/AAAIwQAAoD8AAAA/AAAowQAAoD8AAEA/AAAowQAAoD8AAAA/AAAowQAAwD8AAAA/AAAowQAAwD8AAEA/AAEowQAAoD8AAEA/AAAIwQAAoD8AAEA/AAAIwQAAoD8AAAA/AAEowQAAoD8AAAA/AAEowQAAwD8AAEA/AAEowQAAwD8AAAA/AAAIwQAAwD8AAAA/AAAIwQAAwD8AAEA/AAAIwQAAwD8AAEA/AAAIwQAAwD8AAAA/AAAIwQAAoD8AAAA/AAAIwQAAoD8AAEA/AAAIwQAAoD8AAEA/AAEowQAAoD8AAEA/AAEowQAAwD8AAEA/AAAIwQAAwD8AAEA/AAAIwQAAwD8AABBAAAEowQAAwD8AABBAAAEowQAAoD8AABBAAAAIwQAAoD8AABBAAAAowQAAoD8AACBAAAAowQAAoD8AABBAAAAowQAAwD8AABBAAAAowQAAwD8AACBAAAEowQAAoD8AACBAAAAIwQAAoD8AACBAAAAIwQAAoD8AABBAAAEowQAAoD8AABBAAAEowQAAwD8AACBAAAEowQAAwD8AABBAAAAIwQAAwD8AABBAAAAIwQAAwD8AACBAAAAIwQAAwD8AACBAAAAIwQAAwD8AABBAAAAIwQAAoD8AABBAAAAIwQAAoD8AACBAAAAIwQAAoD8AACBAAAEowQAAoD8AACBAAAEowQAAwD8AACBAAAAIwQAAwD8AACBAAAAIwQAAoD8AABBAAAEMwQAAoD8AABBAAAEMwQAAgD8AABBAAAAIwQAAgD8AABBAAAAMwQAAgD8AACBAAAAMwQAAgD8AABBAAAAMwQAAoD8AABBAAAAMwQAAoD8AACBAAAEMwQAAgD8AACBAAAAIwQAAgD8AACBAAAAIwQAAgD8AABBAAAEMwQAAgD8AABBAAAEMwQAAoD8AACBAAAEMwQAAoD8AABBAAAAIwQAAoD8AABBAAAAIwQAAoD8AACBAAAAIwQAAoD8AACBAAAAIwQAAoD8AABBAAAAIwQAAgD8AABBAAAAIwQAAgD8AACBAAAAIwQAAgD8AACBAAAEMwQAAgD8AACBAAAEMwQAAoD8AACBAAAAIwQAAoD8AACBAAAAIwQAAoD8AAAA/AAEMwQAAoD8AAAA/AAEMwQAAgD8AAAA/AAAIwQAAgD8AAAA/AAAMwQAAgD8AAEA/AAAMwQAAgD8AAAA/AAAMwQAAoD8AAAA/AAAMwQAAoD8AAEA/AAEMwQAAgD8AAEA/AAAIwQAAgD8AAEA/AAAIwQAAgD8AAAA/AAEMwQAAgD8AAAA/AAEMwQAAoD8AAEA/AAEMwQAAoD8AAAA/AAAIwQAAoD8AAAA/AAAIwQAAoD8AAEA/AAAIwQAAoD8AAEA/AAAIwQAAoD8AAAA/AAAIwQAAgD8AAAA/AAAIwQAAgD8AAEA/AAAIwQAAgD8AAEA/AAEMwQAAgD8AAEA/AAEMwQAAoD8AAEA/AAAIwQAAoD8AAEA/AAAoQQAAgD8AAMA/AAAoQQAAgD8AAoDAAADMQQAAgD8AAoDAAADMQQAAgD8AAMA/AAAEQgAAgD8AAABBAAAEQgAAgD8AAIA/AAAgQgAAgD8AAIA/AAAgQgAAgD8AAABBAAAgQgAAgD8AAABBAAAgQgAAgD8AAEDBAAA8QgAAgD8AAEDBAAA8QgAAgD8AAABBAAAEQgAAAL8AAABAAAAEQgAAAL8AALDAAAAgQgAAAL8AALDAAAAgQgAAAL8AAABAAAAeQgAAgD8AAGhBAAAeQgAAgD8AAAhBAAA4QgAAgD8AAAhBAAA4QgAAgD8AAGhBAAD4QQAAQEAAAEjBAAD4QQAAQEAAAKzBAAAYQgAAQEAAAKzBAAAYQgAAQEAAAEjBAAA6QgAAgD8AAJRBAAA6QgAAgD8AAAhBAABuQgAAgD8AAAhBAABuQgAAgD8AAJRBAAA8QgAAgD8AAABAAAA8QgAAgD8AAEDBAABYQgAAgD8AAEDBAABYQgAAgD8AAABAAAA8QgAAgD8AAABBAAA8QgAAgD8AAABAAAB8QgAAgD8AAABAAAB8QgAAgD8AAABBAAB+QgAAgD8AANDAAAB+QgAAgD8AAIjBAACNQgAAgD8AAIjBAACNQgAAgD8AANDAAAANQgAAgD8AAJDAAAANQgAAgD8AAEDBAAAgQgAAgD8AAEDBAAAgQgAAgD8AAJDAAAADQgAAgD8AAJDAAAADQgAAgD8A/xvBAAANQgAAgD8A/xvBAAANQgAAgD8AAJDAAADQQQAAgD8AAABBAADQQQAAgD8AApDAAAAEQgAAgD8AApDAAAAEQgAAgD8AAABBAADQQQAAgD8AAJDAAADQQQAAgD8AAETBAAADQgAAgD8AAETBAAADQgAAgD8AAJDA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//vw==") }, { -"aabb": AABB(-11, -0.5, -17.5, 81.5, 3.5, 36.5), -"attribute_data": PackedByteArray("AAA4wQAAwL8AAMDAAADAvwAAwMAAAAC/AAA4wQAAAL8AAABAAADAvwAAAEAAAAC/AACQwAAAAL8AAJDAAADAvwAAIMAAAMC/AAAgwAAAAL8AABjBAAAAvwAAGMEAAMC/AACgQAAAwL8AAKBAAAAAvwAAAAAAAAC/AAAAAAAAwL8AACDAAACAvwAAIMAAAAAAAABAwAAAAAAAAEDAAACAvwAAYMAAAMC/AAA4QQAAwL8AADhBAAAAvwAAYMAAAAC/AADAPwAAwL8AAMA/AAAAvwAAgL8AAAC/AACAvwAAwL8AALBAAADAvwAAsEAAAAC/AABgQAAAAL8AAGBAAADAvwAAKEEAAMC/AABYQQAAwL8AAFhBAAAAvwAAKEEAAAC/AAB4QQAAwL8AAKBBAADAvwAAoEEAAAC/AAB4QQAAAL8AALBBAADAvwAAzEEAAMC/AADMQQAAAL8AALBBAAAAvwAAKMEAAMC/AAAowQAAAL8AAFDBAAAAvwAAUMEAAMC/AAAwQgAAwL8AAD5CAADAvwAAPkIAAAC/AAAwQgAAAL8AAEBBAADAvwAAQEEAAAC/AAAAwQAAAL8AAADBAADAvwAADkIAAMC/AAA+QgAAwL8AAD5CAAAAvwAADkIAAAC/AADUQQAAwL8AAAZCAADAvwAABkIAAAC/AADUQQAAAL8AAEjBAADAvwAASMEAAAC/AACYwQAAAL8AAJjBAADAvwAACMEAAMC/AAAIwQAAAL8AACjBAAAAvwAAKMEAAMC/AAA+QgAAwL8AAF5CAADAvwAAXkIAAAC/AAA+QgAAAL8AAGZCAADAvwAAbkIAAMC/AABuQgAAAL8AAGZCAAAAvwAAPsIAAMC/AAA+wgAAAL8AAErCAAAAvwAASsIAAMC/AAAgQAAAwL8AAEBAAADAvwAAQEAAAAC/AAAgQAAAAL8AACDAAADKwQAAIMAAAL7BAABAwAAAvsEAAEDAAADKwQAAIEAAAMrBAABAQAAAysEAAEBAAAC+wQAAIEAAAL7BAAAgwAAAwL8AACDAAAAAvwAAQMAAAAC/AABAwAAAwL8AAD5CAADAvwAASkIAAMC/AABKQgAAAL8AAD5CAAAAvwAAEEEAAMC/AAAQQQAAgD4AAMBAAACAPgAAwEAAAMC/AAA+wgAAwL8AAD7CAAAAvwAAfsIAAAC/AAB+wgAAwL8AAFDBAADAvwAASMEAAMC/AABIwQAAAL8AAFDBAAAAvwAAUEEAAP7BAABQQQAAvsEAAEhBAAC+wQAASEEAAP7BAABQwQAA/sEAAEjBAAD+wQAASMEAAL7BAABQwQAAvsEAAFBBAADAvwAAUEEAAAC/AABIQQAAAL8AAEhBAADAvwAAPkIAAMC/AAB+QgAAwL8AAH5CAAAAvwAAPkIAAAC/AACMQQAAwL8AAIxBAACAPgAAMEEAAIA+AAAwQQAAwL8AAHzCAADAvwAAfMIAAAC/AACMwgAAAL8AAIzCAADAvwAAiMEAAMC/AACEwQAAwL8AAITBAAAAvwAAiMEAAAC/AACIQQAADMIAAIhBAAD8wQAAhEEAAPzBAACEQQAADMIAAIjBAAAMwgAAhMEAAAzCAACEwQAA/MEAAIjBAAD8wQAAiEEAAMC/AACIQQAAAL8AAIRBAAAAvwAAhEEAAMC/AAB8QgAAwL8AAIxCAADAvwAAjEIAAAC/AAB8QgAAAL8AAIPCAABAvwAAg8IAAAC/AACEwgAAAL8AAITCAABAvwAAiMEAAEC/AABowQAAQL8AAGjBAAAAvwAAiMEAAAC/AACIQQAABMIAAIhBAAADwgAAaEEAAAPCAABoQQAABMIAAIjBAAAEwgAAaMEAAATCAABowQAAA8IAAIjBAAADwgAAiEEAAEC/AACIQQAAAL8AAGhBAAAAvwAAaEEAAEC/AACDQgAAQL8AAIRCAABAvwAAhEIAAAC/AACDQgAAAL8AAIfCAABAvwAAh8IAAAC/AACIwgAAAL8AAIjCAABAvwAAiMEAAEC/AABowQAAQL8AAGjBAAAAvwAAiMEAAAC/AACIQQAACMIAAIhBAAAHwgAAaEEAAAfCAABoQQAACMIAAIjBAAAIwgAAaMEAAAjCAABowQAAB8IAAIjBAAAHwgAAiEEAAEC/AACIQQAAAL8AAGhBAAAAvwAAaEEAAEC/AACHQgAAQL8AAIhCAABAvwAAiEIAAAC/AACHQgAAAL8AAIPCAADAvwAAg8IAAEC/AACEwgAAQL8AAITCAADAvwAAcMEAAMC/AABowQAAwL8AAGjBAABAvwAAcMEAAEC/AABwQQAABMIAAHBBAAADwgAAaEEAAAPCAABoQQAABMIAAHDBAAAEwgAAaMEAAATCAABowQAAA8IAAHDBAAADwgAAcEEAAMC/AABwQQAAQL8AAGhBAABAvwAAaEEAAMC/AACDQgAAwL8AAIRCAADAvwAAhEIAAEC/AACDQgAAQL8AAIfCAADAvwAAh8IAAEC/AACIwgAAQL8AAIjCAADAvwAAcMEAAMC/AABowQAAwL8AAGjBAABAvwAAcMEAAEC/AABwQQAACMIAAHBBAAAHwgAAaEEAAAfCAABoQQAACMIAAHDBAAAIwgAAaMEAAAjCAABowQAAB8IAAHDBAAAHwgAAcEEAAMC/AABwQQAAQL8AAGhBAABAvwAAaEEAAMC/AACHQgAAwL8AAIhCAADAvwAAiEIAAEC/AACHQgAAQL8="), +"aabb": AABB(-10.999756, -0.5, -17.5, 81.499756, 3.5, 36.5), +"attribute_data": PackedByteArray("AADAwAAAAL8A/zfBAAAAvwD/N8EAAMC/AADAwAAAwL8AAJDAAADAvwAEAEAAAMC/AAQAQAAAAL8AAJDAAAAAvwAAGMEAAMC/AAAgwAAAwL8AACDAAAAAvwAAGMEAAAC/AAAAAAAAwL8AAqBAAADAvwACoEAAAAC/AAAAAAAAAL8AAEDAAACAvwAAIMAAAIC/AAAgwAAAAAAAAEDAAAAAAAAAOEEAAAC/APxfwAAAAL8A/F/AAADAvwAAOEEAAMC/AACAvwAAwL8AAMA/AADAvwAAwD8AAAC/AACAvwAAAL8AAGBAAADAvwACsEAAAMC/AAKwQAAAAL8AAGBAAAAAvwAAWEEAAAC/AAAoQQAAAL8AAChBAADAvwAAWEEAAMC/AACgQQAAAL8AAHhBAAAAvwAAeEEAAMC/AACgQQAAwL8AAMxBAAAAvwAAsEEAAAC/AACwQQAAwL8AAMxBAADAvwAAUMEAAMC/AAAowQAAwL8AACjBAAAAvwAAUMEAAAC/AAA+QgAAAL8AADBCAAAAvwAAMEIAAMC/AAA+QgAAwL8AAADBAADAvwAAQEEAAMC/AABAQQAAAL8AAADBAAAAvwAAPkIAAAC/AAAOQgAAAL8AAA5CAADAvwAAPkIAAMC/AAAGQgAAAL8AANRBAAAAvwAA1EEAAMC/AAAGQgAAwL8AAJjBAADAvwAASMEAAMC/AABIwQAAAL8AAJjBAAAAvwAAKMEAAMC/AAAIwQAAwL8AAAjBAAAAvwAAKMEAAAC/AABeQgAAAL8AAD5CAAAAvwAAPkIAAMC/AABeQgAAwL8AAG5CAAAAvwAAZkIAAAC/AABmQgAAwL8AAG5CAADAvwAASsIAAMC/AAA+wgAAwL8AAD7CAAAAvwAASsIAAAC/AABAQAAAAL8AACBAAAAAvwAAIEAAAMC/AABAQAAAwL8AAEDAAAC+wQAAQMAAAMrBAAAgwAAAysEAACDAAAC+wQAAQEAAAL7BAAAgQAAAvsEAACBAAADKwQAAQEAAAMrBAABAwAAAwL8AACDAAADAvwAAIMAAAAC/AABAwAAAAL8AAEpCAAAAvwAAPkIAAAC/AAA+QgAAwL8AAEpCAADAvwAAwEAAAMC/AAAQQQAAwL8AABBBAACAPgAAwEAAAIA+AAB+wgAAwL8AAD7CAADAvwAAPsIAAAC/AAB+wgAAAL8AAEjBAAAAvwAAUMEAAAC/AABQwQAAwL8AAEjBAADAvwAASEEAAL7BAABIQQAA/sEAAFBBAAD+wQAAUEEAAL7BAABIwQAAvsEAAFDBAAC+wQAAUMEAAP7BAABIwQAA/sEAAEhBAADAvwAAUEEAAMC/AABQQQAAAL8AAEhBAAAAvwAAfkIAAAC/AAA+QgAAAL8AAD5CAADAvwAAfkIAAMC/AAAwQQAAwL8AAIxBAADAvwAAjEEAAIA+AAAwQQAAgD4AAIzCAADAvwAAfMIAAMC/AAB8wgAAAL8AAIzCAAAAvwAAhMEAAAC/AACIwQAAAL8AAIjBAADAvwAAhMEAAMC/AACEQQAA/MEAAIRBAAAMwgAAiEEAAAzCAACIQQAA/MEAAITBAAD8wQAAiMEAAPzBAACIwQAADMIAAITBAAAMwgAAhEEAAMC/AACIQQAAwL8AAIhBAAAAvwAAhEEAAAC/AACMQgAAAL8AAHxCAAAAvwAAfEIAAMC/AACMQgAAwL8AAITCAABAvwAAg8IAAEC/AACDwgAAAL8AAITCAAAAvwAAaMEAAAC/AACIwQAAAL8AAIjBAABAvwAAaMEAAEC/AABoQQAAA8IAAGhBAAAEwgAAiEEAAATCAACIQQAAA8IAAGjBAAADwgAAiMEAAAPCAACIwQAABMIAAGjBAAAEwgAAaEEAAEC/AACIQQAAQL8AAIhBAAAAvwAAaEEAAAC/AACEQgAAAL8AAINCAAAAvwAAg0IAAEC/AACEQgAAQL8AAIjCAABAvwAAh8IAAEC/AACHwgAAAL8AAIjCAAAAvwAAaMEAAAC/AACIwQAAAL8AAIjBAABAvwAAaMEAAEC/AABoQQAAB8IAAGhBAAAIwgAAiEEAAAjCAACIQQAAB8IAAGjBAAAHwgAAiMEAAAfCAACIwQAACMIAAGjBAAAIwgAAaEEAAEC/AACIQQAAQL8AAIhBAAAAvwAAaEEAAAC/AACIQgAAAL8AAIdCAAAAvwAAh0IAAEC/AACIQgAAQL8AAITCAADAvwAAg8IAAMC/AACDwgAAQL8AAITCAABAvwAAaMEAAEC/AABwwQAAQL8AAHDBAADAvwAAaMEAAMC/AABoQQAAA8IAAGhBAAAEwgAAcEEAAATCAABwQQAAA8IAAGjBAAADwgAAcMEAAAPCAABwwQAABMIAAGjBAAAEwgAAaEEAAMC/AABwQQAAwL8AAHBBAABAvwAAaEEAAEC/AACEQgAAQL8AAINCAABAvwAAg0IAAMC/AACEQgAAwL8AAIjCAADAvwAAh8IAAMC/AACHwgAAQL8AAIjCAABAvwAAaMEAAEC/AABwwQAAQL8AAHDBAADAvwAAaMEAAMC/AABoQQAAB8IAAGhBAAAIwgAAcEEAAAjCAABwQQAAB8IAAGjBAAAHwgAAcMEAAAfCAABwwQAACMIAAGjBAAAIwgAAaEEAAMC/AABwQQAAwL8AAHBBAABAvwAAaEEAAEC/AACIQgAAQL8AAIdCAABAvwAAh0IAAMC/AACIQgAAwL8="), "format": 34359742487, "index_count": 384, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsAPAA9AD4APAA+AD8AQABBAEIAQABCAEMARABFAEYARABGAEcASABJAEoASABKAEsATABNAE4ATABOAE8AUABRAFIAUABSAFMAVABVAFYAVABWAFcAWABZAFoAWABaAFsAXABdAF4AXABeAF8AYABhAGIAYABiAGMAZABlAGYAZABmAGcAaABpAGoAaABqAGsAbABtAG4AbABuAG8AcABxAHIAcAByAHMAdAB1AHYAdAB2AHcAeAB5AHoAeAB6AHsAfAB9AH4AfAB+AH8AgACBAIIAgACCAIMAhACFAIYAhACGAIcAiACJAIoAiACKAIsAjACNAI4AjACOAI8AkACRAJIAkACSAJMAlACVAJYAlACWAJcAmACZAJoAmACaAJsAnACdAJ4AnACeAJ8AoAChAKIAoACiAKMApAClAKYApACmAKcAqACpAKoAqACqAKsArACtAK4ArACuAK8AsACxALIAsACyALMAtAC1ALYAtAC2ALcAuAC5ALoAuAC6ALsAvAC9AL4AvAC+AL8AwADBAMIAwADCAMMAxADFAMYAxADGAMcAyADJAMoAyADKAMsAzADNAM4AzADOAM8A0ADRANIA0ADSANMA1ADVANYA1ADWANcA2ADZANoA2ADaANsA3ADdAN4A3ADeAN8A4ADhAOIA4ADiAOMA5ADlAOYA5ADmAOcA6ADpAOoA6ADqAOsA7ADtAO4A7ADuAO8A8ADxAPIA8ADyAPMA9AD1APYA9AD2APcA+AD5APoA+AD6APsA/AD9AP4A/AD+AP8A"), @@ -121,10 +121,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 256, -"vertex_data": PackedByteArray("AAAwwQAAQEAAAMC/AACwwAAAQEAAAMC/AACwwAAAgD8AAMC/AAAwwQAAgD8AAMC/AAAowQAAQEAAAMC/AAAowQAAgD8AAMC/AAAowQAAgD8AAKBAAAAowQAAQEAAAKBAAACgwAAAQEAAAEBAAACgwAAAgD8AAEBAAACgwAAAgD8AACBBAACgwAAAQEAAACBBAACgwAAAQEAAAJDAAACgwAAAgD8AAJDAAACgwAAAgD8AAAA/AACgwAAAQEAAAAA/AACgwAAAQEAAACBAAACgwAAAgD8AACBAAACgwAAAgD8AAEBAAACgwAAAQEAAAEBAAACgwAAAQEAAAIDAAAAgQQAAQEAAAIDAAAAgQQAAgD8AAIDAAACgwAAAgD8AAIDAAAAoQQAAQEAAAAC/AAAoQQAAgD8AAAC/AAAoQQAAgD8AAABAAAAoQQAAQEAAAABAAAAoQQAAQEAAAJDAAAAoQQAAgD8AAJDAAAAoQQAAgD8AACDAAAAoQQAAQEAAACDAAAAoQQAAQEAAAIDAAABYQQAAQEAAAIDAAABYQQAAgD8AAIDAAAAoQQAAgD8AAIDAAAB4QQAAQEAAAIDAAACgQQAAQEAAAIDAAACgQQAAgD8AAIDAAAB4QQAAgD8AAIDAAACwQQAAQEAAAIDAAADMQQAAQEAAAIDAAADMQQAAgD8AAIDAAACwQQAAgD8AAIDAAAAAQAAAQEAAAChBAAAAQAAAgD8AAChBAAAAQAAAgD8AAFBBAAAAQAAAQEAAAFBBAAAwQgAAQEAAAAhBAAA+QgAAQEAAAAhBAAA+QgAAgD8AAAhBAAAwQgAAgD8AAAhBAAA+QgAAQEAAAEDBAAA+QgAAgD8AAEDBAAA+QgAAgD8AAABBAAA+QgAAQEAAAABBAAAMQgAAQEAAAEDBAAA8QgAAQEAAAEDBAAA8QgAAgD8AAEDBAAAMQgAAgD8AAEDBAADQQQAAQEAAAEDBAAAEQgAAQEAAAEDBAAAEQgAAgD8AAEDBAADQQQAAgD8AAEDBAAA6QgAAQEAAAEhBAAA6QgAAgD8AAEhBAAA6QgAAgD8AAJhBAAA6QgAAQEAAAJhBAAA6QgAAQEAAAAhBAAA6QgAAgD8AAAhBAAA6QgAAgD8AAChBAAA6QgAAQEAAAChBAAA+QgAAQEAAAAhBAABeQgAAQEAAAAhBAABeQgAAgD8AAAhBAAA+QgAAgD8AAAhBAABmQgAAQEAAAAhBAABuQgAAQEAAAAhBAABuQgAAgD8AAAhBAABmQgAAgD8AAAhBAAA+QgAAQEAAACBAAAA+QgAAgD8AACBAAABKQgAAgD8AACBAAABKQgAAQEAAACBAAAA+QgAAQEAAACBAAAA+QgAAQEAAAEBAAAA+QgAAgD8AAEBAAAA+QgAAgD8AACBAAABKQgAAgD8AACBAAAA+QgAAgD8AACBAAAA+QgAAgD8AAEBAAABKQgAAgD8AAEBAAABKQgAAQEAAACBAAABKQgAAQEAAAEBAAAA+QgAAQEAAAEBAAAA+QgAAQEAAACBAAABKQgAAQEAAACBAAABKQgAAgD8AACBAAABKQgAAgD8AAEBAAABKQgAAQEAAAEBAAAA+QgAAQEAAAEBAAABKQgAAQEAAAEBAAABKQgAAgD8AAEBAAAA+QgAAgD8AAEBAAAB+QgAAQEAAABDBAAB+QgAAAL8AABDBAAB+QgAAAL8AAMDAAAB+QgAAQEAAAMDAAAA8QgAAQEAAAEjBAAA8QgAAgD8AAEjBAAB8QgAAgD8AAEjBAAB8QgAAQEAAAEjBAAA8QgAAQEAAAEjBAAA8QgAAQEAAAEDBAAA8QgAAgD8AAEDBAAA8QgAAgD8AAEjBAAB8QgAAgD8AAEjBAAA8QgAAgD8AAEjBAAA8QgAAgD8AAEDBAAB8QgAAgD8AAEDBAAB8QgAAQEAAAEjBAAB8QgAAQEAAAEDBAAA8QgAAQEAAAEDBAAA8QgAAQEAAAEjBAAB8QgAAQEAAAEjBAAB8QgAAgD8AAEjBAAB8QgAAgD8AAEDBAAB8QgAAQEAAAEDBAAA8QgAAQEAAAEDBAAB8QgAAQEAAAEDBAAB8QgAAgD8AAEDBAAA8QgAAgD8AAEDBAAB+QgAAQEAAAIzBAAB+QgAAAL8AAIzBAAB+QgAAAL8AADDBAAB+QgAAQEAAADDBAAB+QgAAQEAAAIzBAAB+QgAAgD8AAIzBAACNQgAAgD8AAIzBAACNQgAAQEAAAIzBAAB+QgAAQEAAAIzBAAB+QgAAQEAAAIjBAAB+QgAAgD8AAIjBAAB+QgAAgD8AAIzBAACNQgAAgD8AAIzBAAB+QgAAgD8AAIzBAAB+QgAAgD8AAIjBAACNQgAAgD8AAIjBAACNQgAAQEAAAIzBAACNQgAAQEAAAIjBAAB+QgAAQEAAAIjBAAB+QgAAQEAAAIzBAACNQgAAQEAAAIzBAACNQgAAgD8AAIzBAACNQgAAgD8AAIjBAACNQgAAQEAAAIjBAAB+QgAAQEAAAIjBAACNQgAAQEAAAIjBAACNQgAAgD8AAIjBAAB+QgAAgD8AAIjBAACDQgAAwD8AAIjBAACDQgAAgD8AAIjBAACEQgAAgD8AAIjBAACEQgAAwD8AAIjBAACDQgAAwD8AAIjBAACDQgAAwD8AAGjBAACDQgAAgD8AAGjBAACDQgAAgD8AAIjBAACEQgAAgD8AAIjBAACDQgAAgD8AAIjBAACDQgAAgD8AAGjBAACEQgAAgD8AAGjBAACEQgAAwD8AAIjBAACEQgAAwD8AAGjBAACDQgAAwD8AAGjBAACDQgAAwD8AAIjBAACEQgAAwD8AAIjBAACEQgAAgD8AAIjBAACEQgAAgD8AAGjBAACEQgAAwD8AAGjBAACDQgAAwD8AAGjBAACEQgAAwD8AAGjBAACEQgAAgD8AAGjBAACDQgAAgD8AAGjBAACIQgAAwD8AAIjBAACIQgAAgD8AAIjBAACJQgAAgD8AAIjBAACJQgAAwD8AAIjBAACIQgAAwD8AAIjBAACIQgAAwD8AAGjBAACIQgAAgD8AAGjBAACIQgAAgD8AAIjBAACJQgAAgD8AAIjBAACIQgAAgD8AAIjBAACIQgAAgD8AAGjBAACJQgAAgD8AAGjBAACJQgAAwD8AAIjBAACJQgAAwD8AAGjBAACIQgAAwD8AAGjBAACIQgAAwD8AAIjBAACJQgAAwD8AAIjBAACJQgAAgD8AAIjBAACJQgAAgD8AAGjBAACJQgAAwD8AAGjBAACIQgAAwD8AAGjBAACJQgAAwD8AAGjBAACJQgAAgD8AAGjBAACIQgAAgD8AAGjBAACDQgAAQEAAAHDBAACDQgAAwD8AAHDBAACEQgAAwD8AAHDBAACEQgAAQEAAAHDBAACDQgAAQEAAAHDBAACDQgAAQEAAAGjBAACDQgAAwD8AAGjBAACDQgAAwD8AAHDBAACEQgAAwD8AAHDBAACDQgAAwD8AAHDBAACDQgAAwD8AAGjBAACEQgAAwD8AAGjBAACEQgAAQEAAAHDBAACEQgAAQEAAAGjBAACDQgAAQEAAAGjBAACDQgAAQEAAAHDBAACEQgAAQEAAAHDBAACEQgAAwD8AAHDBAACEQgAAwD8AAGjBAACEQgAAQEAAAGjBAACDQgAAQEAAAGjBAACEQgAAQEAAAGjBAACEQgAAwD8AAGjBAACDQgAAwD8AAGjBAACIQgAAQEAAAHDBAACIQgAAwD8AAHDBAACJQgAAwD8AAHDBAACJQgAAQEAAAHDBAACIQgAAQEAAAHDBAACIQgAAQEAAAGjBAACIQgAAwD8AAGjBAACIQgAAwD8AAHDBAACJQgAAwD8AAHDBAACIQgAAwD8AAHDBAACIQgAAwD8AAGjBAACJQgAAwD8AAGjBAACJQgAAQEAAAHDBAACJQgAAQEAAAGjBAACIQgAAQEAAAGjBAACIQgAAQEAAAHDBAACJQgAAQEAAAHDBAACJQgAAwD8AAHDBAACJQgAAwD8AAGjBAACJQgAAQEAAAGjBAACIQgAAQEAAAGjBAACJQgAAQEAAAGjBAACJQgAAwD8AAGjBAACIQgAAwD8AAGjB/3//f////7//f/9/////v/9//3////+//3//f////7////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/////f/////////9//////////3//////////f/////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////78=") +"vertex_data": PackedByteArray("AACwwAAAgD8AAMC/AP8vwQAAgD8AAMC/AP8vwQAAQEAAAMC/AACwwAAAQEAAAMC/AAAowQAAQEAAAKBAAAAowQAAQEAACMC/AAAowQAAgD8ACMC/AAAowQAAgD8AAKBAAACgwAAAQEAAACBBAACgwAAAQEAAAEBAAACgwAAAgD8AAEBAAACgwAAAgD8AACBBAACgwAAAQEAAAAA/AACgwAAAQEAAApDAAACgwAAAgD8AApDAAACgwAAAgD8AAAA/AACgwAAAQEAAAEBAAACgwAAAQEAAACBAAACgwAAAgD8AACBAAACgwAAAgD8AAEBAAAAgQQAAgD8AAIDAAP6fwAAAgD8AAIDAAP6fwAAAQEAAAIDAAAAgQQAAQEAAAIDAAAAoQQAAQEAAAABAAAAoQQAAQEAAAAC/AAAoQQAAgD8AAAC/AAAoQQAAgD8AAABAAAAoQQAAQEAAACDAAAAoQQAAQEAAApDAAAAoQQAAgD8AApDAAAAoQQAAgD8AACDAAABYQQAAgD8AAIDAAAAoQQAAgD8AAIDAAAAoQQAAQEAAAIDAAABYQQAAQEAAAIDAAACgQQAAgD8AAIDAAAB4QQAAgD8AAIDAAAB4QQAAQEAAAIDAAACgQQAAQEAAAIDAAADMQQAAgD8AAIDAAACwQQAAgD8AAIDAAACwQQAAQEAAAIDAAADMQQAAQEAAAIDAAAAAQAAAQEAAAFBBAAAAQAAAQEAAAChBAAAAQAAAgD8AAChBAAAAQAAAgD8AAFBBAAA+QgAAgD8AAAhBAAAwQgAAgD8AAAhBAAAwQgAAQEAAAAhBAAA+QgAAQEAAAAhBAAA+QgAAQEAAAABBAAA+QgAAQEAAAEDBAAA+QgAAgD8AAEDBAAA+QgAAgD8AAABBAAA8QgAAgD8AAEDBAAAMQgAAgD8AAEDBAAAMQgAAQEAAAEDBAAA8QgAAQEAAAEDBAAAEQgAAgD8AAEDBAADQQQAAgD8AAEDBAADQQQAAQEAAAEDBAAAEQgAAQEAAAEDBAAA6QgAAQEAAAJhBAAA6QgAAQEAAAEhBAAA6QgAAgD8AAEhBAAA6QgAAgD8AAJhBAAA6QgAAQEAAAChBAAA6QgAAQEAAAAhBAAA6QgAAgD8AAAhBAAA6QgAAgD8AAChBAABeQgAAgD8AAAhBAAA+QgAAgD8AAAhBAAA+QgAAQEAAAAhBAABeQgAAQEAAAAhBAABuQgAAgD8AAAhBAABmQgAAgD8AAAhBAABmQgAAQEAAAAhBAABuQgAAQEAAAAhBAABKQgAAQEAAACBAAAA+QgAAQEAAACBAAAA+QgAAgD8AACBAAABKQgAAgD8AACBAAAA+QgAAgD8AAEBAAAA+QgAAgD8AACBAAAA+QgAAQEAAACBAAAA+QgAAQEAAAEBAAAA+QgAAgD8AAEBAAABKQgAAgD8AAEBAAABKQgAAgD8AACBAAAA+QgAAgD8AACBAAAA+QgAAQEAAAEBAAAA+QgAAQEAAACBAAABKQgAAQEAAACBAAABKQgAAQEAAAEBAAABKQgAAQEAAAEBAAABKQgAAQEAAACBAAABKQgAAgD8AACBAAABKQgAAgD8AAEBAAABKQgAAgD8AAEBAAAA+QgAAgD8AAEBAAAA+QgAAQEAAAEBAAABKQgAAQEAAAEBAAAB+QgAAQEAAAMDAAAB+QgAAQEAAABDBAAB+QgAAAL8AABDBAAB+QgAAAL8AAMDAAAB8QgAAQEAAAEjBAAA8QgAAQEAAAEjBAAA8QgAAgD8AAEjBAAB8QgAAgD8AAEjBAAA8QgAAgD8AAEDBAAA8QgAAgD8AAEjBAAA8QgAAQEAAAEjBAAA8QgAAQEAAAEDBAAA8QgAAgD8AAEDBAAB8QgAAgD8AAEDBAAB8QgAAgD8AAEjBAAA8QgAAgD8AAEjBAAA8QgAAQEAAAEDBAAA8QgAAQEAAAEjBAAB8QgAAQEAAAEjBAAB8QgAAQEAAAEDBAAB8QgAAQEAAAEDBAAB8QgAAQEAAAEjBAAB8QgAAgD8AAEjBAAB8QgAAgD8AAEDBAAB8QgAAgD8AAEDBAAA8QgAAgD8AAEDBAAA8QgAAQEAAAEDBAAB8QgAAQEAAAEDBAAB+QgAAQEAAADDBAAB+QgAAQEAAAIzBAAB+QgAAAL8AAIzBAAB+QgAAAL8AADDBAACNQgAAQEAAAIzBAAB+QgAAQEAAAIzBAAB+QgAAgD8AAIzBAACNQgAAgD8AAIzBAAB+QgAAgD8AAIjBAAB+QgAAgD8AAIzBAAB+QgAAQEAAAIzBAAB+QgAAQEAAAIjBAAB+QgAAgD8AAIjBAACNQgAAgD8AAIjBAACNQgAAgD8AAIzBAAB+QgAAgD8AAIzBAAB+QgAAQEAAAIjBAAB+QgAAQEAAAIzBAACNQgAAQEAAAIzBAACNQgAAQEAAAIjBAACNQgAAQEAAAIjBAACNQgAAQEAAAIzBAACNQgAAgD8AAIzBAACNQgAAgD8AAIjBAACNQgAAgD8AAIjBAAB+QgAAgD8AAIjBAAB+QgAAQEAAAIjBAACNQgAAQEAAAIjBAACEQgAAwD8AAIjBAACDQgAAwD8AAIjBAACDQgAAgD8AAIjBAACEQgAAgD8AAIjBAACDQgAAgD8AAGjBAACDQgAAgD8AAIjBAACDQgAAwD8AAIjBAACDQgAAwD8AAGjBAACDQgAAgD8AAGjBAACEQgAAgD8AAGjBAACEQgAAgD8AAIjBAACDQgAAgD8AAIjBAACDQgAAwD8AAGjBAACDQgAAwD8AAIjBAACEQgAAwD8AAIjBAACEQgAAwD8AAGjBAACEQgAAwD8AAGjBAACEQgAAwD8AAIjBAACEQgAAgD8AAIjBAACEQgAAgD8AAGjBAACEQgAAgD8AAGjBAACDQgAAgD8AAGjBAACDQgAAwD8AAGjBAACEQgAAwD8AAGjBAACJQgAAwD8AAIjBAACIQgAAwD8AAIjBAACIQgAAgD8AAIjBAACJQgAAgD8AAIjBAACIQgAAgD8AAGjBAACIQgAAgD8AAIjBAACIQgAAwD8AAIjBAACIQgAAwD8AAGjBAACIQgAAgD8AAGjBAACJQgAAgD8AAGjBAACJQgAAgD8AAIjBAACIQgAAgD8AAIjBAACIQgAAwD8AAGjBAACIQgAAwD8AAIjBAACJQgAAwD8AAIjBAACJQgAAwD8AAGjBAACJQgAAwD8AAGjBAACJQgAAwD8AAIjBAACJQgAAgD8AAIjBAACJQgAAgD8AAGjBAACJQgAAgD8AAGjBAACIQgAAgD8AAGjBAACIQgAAwD8AAGjBAACJQgAAwD8AAGjBAACEQgAAQEAAAHDBAACDQgAAQEAAAHDBAACDQgAAwD8AAHDBAACEQgAAwD8AAHDBAACDQgAAwD8AAGjBAACDQgAAwD8AAHDBAACDQgAAQEAAAHDBAACDQgAAQEAAAGjBAACDQgAAwD8AAGjBAACEQgAAwD8AAGjBAACEQgAAwD8AAHDBAACDQgAAwD8AAHDBAACDQgAAQEAAAGjBAACDQgAAQEAAAHDBAACEQgAAQEAAAHDBAACEQgAAQEAAAGjBAACEQgAAQEAAAGjBAACEQgAAQEAAAHDBAACEQgAAwD8AAHDBAACEQgAAwD8AAGjBAACEQgAAwD8AAGjBAACDQgAAwD8AAGjBAACDQgAAQEAAAGjBAACEQgAAQEAAAGjBAACJQgAAQEAAAHDBAACIQgAAQEAAAHDBAACIQgAAwD8AAHDBAACJQgAAwD8AAHDBAACIQgAAwD8AAGjBAACIQgAAwD8AAHDBAACIQgAAQEAAAHDBAACIQgAAQEAAAGjBAACIQgAAwD8AAGjBAACJQgAAwD8AAGjBAACJQgAAwD8AAHDBAACIQgAAwD8AAHDBAACIQgAAQEAAAGjBAACIQgAAQEAAAHDBAACJQgAAQEAAAHDBAACJQgAAQEAAAGjBAACJQgAAQEAAAGjBAACJQgAAQEAAAHDBAACJQgAAwD8AAHDBAACJQgAAwD8AAGjBAACJQgAAwD8AAGjBAACIQgAAwD8AAGjBAACIQgAAQEAAAGjBAACJQgAAQEAAAGjB/3//f////7//f/9/////v/9//3////+//3//f////7////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/////f/////////9//////////3//////////f/////////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3///////////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////78=") }, { -"aabb": AABB(-11, -0.5, -22, 82, 5.75, 41), -"attribute_data": PackedByteArray("AAAgwwAAQMIAABjDAABAwgAAGMMAAIDBAAAgwwAAgMEAADDDAABAwgAAwMIAAEDCAADAwgAAgMEAADDDAACAwQAAsMIAAEDCAAAAQgAAQMIAAABCAACAwQAAsMIAAIDBAAAgQwAAQMIAAChDAABAwgAAKEMAAIDBAAAgQwAAgMEAAChDAACAwQAAzEMAAIDBAADMQwAAAMEAAChDAAAAwQAAAAAAAMzDAAAAQQAAzMMAAABBAAAowwAAAAAAACjDAAAoQwAAAMIAAMxDAAAAwgAAzEMAAIDBAAAoQwAAgMEAAIDCAABYwwAAYMIAAFjDAABgwgAAKMMAAIDCAAAowwAAgMIAAKDDAABgwgAAoMMAAGDCAAB4wwAAgMIAAHjDAACAwgAAzMMAAGDCAADMwwAAYMIAALDDAACAwgAAsMMAAJDCAAAowwAAAEIAACjDAAAAQgAAIMMAAJDCAAAgwwAAkEIAAFDCAACQQgAAQMIAAADCAABAwgAAAMIAAFDCAAAgQwAAUMIAAChDAABQwgAAKEMAAEDCAAAgQwAAQMIAAJDCAACgQgAAKEMAAKBCAAAoQwAAsEIAAJDCAACwQgAAsMIAAFDCAACgwgAAUMIAAKDCAABAwgAAsMIAAEDCAAAgQwAAUMIAAChDAABQwgAAKEMAAEDCAAAgQwAAQMIAAADCAAAgwwAAAMIAACjDAACgQgAAKMMAAKBCAAAgwwAAoMIAAFDCAAAAQgAAUMIAAABCAABAwgAAoMIAAEDCAACQwgAAUMIAAIDCAABQwgAAgMIAAEDCAACQwgAAQMIAACDDAACQQgAAIMMAAIBCAACgQgAAgEIAAKBCAACQQgAAkMIAAFDCAACAwgAAUMIAAIDCAABAwgAAkMIAAEDCAADMwwAAkEIAAMzDAACAQgAAKMMAAIBCAAAowwAAkEIAAADCAABQwgAAwMEAAFDCAADAwQAAQMIAAADCAABAwgAAsEIAAABCAACwQgAAwEEAAChDAADAQQAAKEMAAABCAAAAwgAAKEMAAKBCAAAoQwAAoEIAADBDAAAAwgAAMEMAADDDAABQwgAAKMMAAFDCAAAowwAAQMIAADDDAABAwgAAkEIAAFDCAACgQgAAUMIAAKBCAABAwgAAkEIAAEDCAACwQgAAkMIAALBCAACgwgAAKEMAAKDCAAAoQwAAkMIAACjDAABQwgAAsMIAAFDCAACwwgAAQMIAACjDAABAwgAAQMMAAEDCAABAwwAAAMEAAEjDAAAAwQAASMMAAEDCAAAAQgAAQMIAACBDAABAwgAAIEMAAADBAAAAQgAAAMEAAAAAAABAwgAAAEEAAEDCAAAAQQAAgMEAAAAAAACAwQAASEMAAFDCAABQQwAAUMIAAFBDAABAwgAASEMAAEDCAAAgwwAASMMAACDDAABQwwAAAMIAAFDDAAAAwgAASMMAADjDAABQwgAAOMMAAEDCAABAwwAAQMIAAEDDAABQwgAAAEIAAFDCAAAgQwAAUMIAACBDAABAwgAAAEIAAEDCAAAoQwAAAMIAAFBDAAAAwgAAUEMAAMDBAAAoQwAAwMEAAMBBAABQwgAAAEIAAFDCAAAAQgAAQMIAAMBBAABAwgAARMMAANDDAAAIQwAA0MMAAAhDAADMwwAARMMAAMzDAADMQwAAUMIAANBDAABQwgAA0EMAAEDCAADMQwAAQMIAADxEAABAwgAAPkQAAEDCAAA+RAAAgMEAADxEAACAwQAASMMAAKjCAABAwwAAqMIAAEDDAACgwgAASMMAAKDCAAA8xAAASEMAADzEAABAQwAA0MMAAEBDAADQwwAASEMAAEjDAAA8xAAAQMMAADzEAABAwwAADMQAAEjDAAAMxAAASMMAAATEAABAwwAABMQAAEDDAADQwwAASMMAANDDAADQQwAAQMIAAChEAABAwgAAKEQAAIDBAADQQwAAgMEAAEjDAAA8xAAAQMMAADzEAABAwwAADMQAAEjDAAAMxAAASMMAAATEAABAwwAABMQAAEDDAADQwwAASMMAANDDAAAgRAAAQMIAADhEAABAwgAAOEQAAIDBAAAgRAAAgMEAADhEAABAwgAAOkQAAEDCAAA6RAAAgMEAADhEAACAwQAAAMMAAADCAAAAwwAAgMEAAJTDAACAwQAAlMMAAADCAABuRAAAAMIAAHBEAAAAwgAAcEQAAIDBAABuRAAAgMEAADpEAAAAwgAAcEQAAADCAABwRAAAgMEAADpEAACAwQAACEMAADrEAACYQwAAOsQAAJhDAAA4xAAACEMAADjEAAA4RAAAUMIAADpEAABQwgAAOkQAAEDCAAA4RAAAQMIAAGhDAABQwgAAcEMAAFDCAABwQwAAQMIAAGhDAABAwgAAOMQAAGjDAAA4xAAAcMMAACDEAABwwwAAIMQAAGjDAAAgRAAAUMIAADhEAABQwgAAOEQAAEDCAAAgRAAAQMIAAAhDAAAgxAAAcEMAACDEAABwQwAAHsQAAAhDAAAexAAAHkQAAFDCAAAgRAAAUMIAACBEAABAwgAAHkQAAEDCAAAAQwAAUMIAAAhDAABQwgAACEMAAEDCAAAAQwAAQMIAAG7EAAAAwwAAbsQAAAjDAAAgxAAACMMAACDEAAAAwwAAAEMAAFDCAAAIQwAAUMIAAAhDAABAwgAAAEMAAEDCAAAgxAAAAMMAACDEAAAIwwAA0MMAAAjDAADQwwAAAMMAANBDAABQwgAAIEQAAFDCAAAgRAAAQMIAANBDAABAwgAAAMIAAADCAAAAwgAAAEEAAADDAAAAQQAAAMMAAADCAAB8RAAAAMIAAH5EAAAAwgAAfkQAAABBAAB8RAAAAEEAAG5EAAAAwgAAfEQAAADCAAB8RAAAgMEAAG5EAACAwQAAQMMAAD7EAAAAQwAAPsQAAABDAAA8xAAAQMMAADzEAAA8RAAAUMIAAD5EAABQwgAAPkQAAEDCAAA8RAAAQMIAAMBCAAAAwgAAwEIAAABBAAAAwgAAAEEAAADCAAAAwgAAmEMAAADCAACYQwAAAEEAAMBCAAAAQQAAwEIAAADCAAB+RAAAAMIAAI1EAAAAwgAAjUQAAIDBAAB+RAAAgMEAAIzDAAB+xAAAwMIAAH7EAADAwgAAfMQAAIzDAAB8xAAAfEQAAFDCAAB+RAAAUMIAAH5EAABAwgAAfEQAAEDCAABIwwAAUMIAAEDDAABQwgAAQMMAAEDCAABIwwAAQMIAAHzEAABIQwAAfMQAAEBDAAA8xAAAQEMAADzEAABIQwAAjMMAAFDCAACIwwAAUMIAAIjDAABAwgAAjMMAAEDCAACNxAAAjEMAAI3EAACIQwAAfsQAAIhDAAB+xAAAjEMAAIBBAAAowwAAQEMAACjDAABAQwAAIMMAAIBBAAAgwwAAgMEAAADCAACAwQAAAMEAAEDDAAAAwQAAQMMAAADCAAAgQwAAAMIAAChDAAAAwgAAKEMAAADBAAAgQwAAAMEAALDDAAAYxAAArMMAABjEAACswwAA+MMAALDDAAD4ww=="), +"aabb": AABB(-10.999756, -0.5, -22, 81.999756, 5.75, 41), +"attribute_data": PackedByteArray("AAAYwwAAgMEA/x/DAACAwQD/H8MAAEDCAAAYwwAAQMIAAMDCAACAwQABMMMAAIDBAAEwwwAAQMIAAMDCAABAwgAAAEIAAIDBAACwwgAAgMEAALDCAABAwgAAAEIAAEDCAAAoQwAAgMEAACBDAACAwQAAIEMAAEDCAAAoQwAAQMIAAMxDAAAAwQAAKEMAAADBAAAoQwAAgMEAAMxDAACAwQAAAEEAACjDAAAAAAAAKMMAAAAAAADMwwAAAEEAAMzDAADMQwAAgMEAAChDAACAwQAAKEMAAADCAADMQwAAAMIAAGDCAAAowwACgMIAACjDAAKAwgAAWMMAAGDCAABYwwAAYMIAAHjDAAKAwgAAeMMAAoDCAACgwwAAYMIAAKDDAABgwgAAsMMAAoDCAACwwwACgMIAAMzDAABgwgAAzMMAAABCAAAgwwACkMIAACDDAAKQwgAAKMMAAABCAAAowwAAAMIAAFDCAAKQQgAAUMIAApBCAABAwgAAAMIAAEDCAAAoQwAAQMIAACBDAABAwgAAIEMAAFDCAAAoQwAAUMIAAChDAACwQgACkMIAALBCAAKQwgAAoEIAAChDAACgQgAAoMIAAEDCAACwwgAAQMIAALDCAABQwgAAoMIAAFDCAAAoQwAAQMIAACBDAABAwgAAIEMAAFDCAAAoQwAAUMIA/p9CAAAowwD+n0IAACDDAAAAwgAAIMMAAADCAAAowwAAAEIAAEDCAP6fwgAAQMIA/p/CAABQwgAAAEIAAFDCAACAwgAAQMIAApDCAABAwgACkMIAAFDCAACAwgAAUMIA/p9CAACAQgD+n0IAApBCAAAgwwACkEIAACDDAACAQgAAgMIAAEDCAAKQwgAAQMIAApDCAABQwgAAgMIAAFDCAAAowwAAgEIAACjDAAKQQgAAzMMAApBCAADMwwAAgEIAAMDBAABAwgD4/8EAAEDCAPj/wQAAUMIAAMDBAABQwgABKEMAAMBBAAEoQwD4/0EAALBCAPj/QQAAsEIAAMBBAACgQgD/L0MA+P/BAP8vQwD4/8EAAChDAACgQgAAKEMAACjDAABAwgD/L8MAAEDCAP8vwwAAUMIAACjDAABQwgAAoEIAAEDCAACQQgAAQMIAAJBCAABQwgAAoEIAAFDCAAEoQwAAoMIAAShDAACQwgAAsEIAAJDCAACwQgAAoMIAALDCAABAwgABKMMAAEDCAAEowwAAUMIAALDCAABQwgAASMMAAEDCAABAwwAAQMIAAEDDAAAAwQAASMMAAADBAAAgQwAAAMEAAABCAAAAwQAAAEIAAEDCAAAgQwAAQMIAAABBAACAwQAAAAAAAIDBAAAAAAAAQMIAAABBAABAwgAAUEMAAEDCAABIQwAAQMIAAEhDAABQwgAAUEMAAFDCAAAAwgAAUMMAAADCAABIwwAAIMMAAEjDAAAgwwAAUMMAAEDDAABQwgAAOMMAAFDCAAA4wwAAQMIAAEDDAABAwgAAIEMAAEDCAAAAQgAAQMIAAABCAABQwgAAIEMAAFDCAABQQwAAwMEAAChDAADAwQAAKEMAAADCAABQQwAAAMIAAABCAABAwgAAwEEAAEDCAADAQQAAUMIAAABCAABQwgAACEMAAMzDAABEwwAAzMMAAETDAADQwwAACEMAANDDAADQQwAAQMIAAMxDAABAwgAAzEMAAFDCAADQQwAAUMIAAD5EAACAwQAAPEQAAIDBAAA8RAAAQMIAAD5EAABAwgAAQMMAAKDCAABIwwAAoMIAAEjDAACowgAAQMMAAKjCAADQwwAAQEMAANDDAABIQwAAPMQAAEhDAAA8xAAAQEMAAEDDAAAMxAAASMMAAAzEAABIwwAAPMQAAEDDAAA8xAAAQMMAANDDAABIwwAA0MMAAEjDAAAExAAAQMMAAATEAAAoRAAAgMEAANBDAACAwQAA0EMAAEDCAAAoRAAAQMIAAEDDAAAMxAAASMMAAAzEAABIwwAAPMQAAEDDAAA8xAAAQMMAANDDAABIwwAA0MMAAEjDAAAExAAAQMMAAATEAAA4RAAAgMEAACBEAACAwQAAIEQAAEDCAAA4RAAAQMIAADpEAACAwQAAOEQAAIDBAAA4RAAAQMIAADpEAABAwgAAlMMAAADCAAAAwwAAAMIAAADDAACAwQAAlMMAAIDBAABwRAAAgMEAAG5EAACAwQAAbkQAAADCAABwRAAAAMIAAHBEAACAwQAAOkQAAIDBAAA6RAAAAMIAAHBEAAAAwgAAmEMAADjEAAAIQwAAOMQAAAhDAAA6xAAAmEMAADrEAAA6RAAAQMIAADhEAABAwgAAOEQAAFDCAAA6RAAAUMIAAHBDAABAwgAAaEMAAEDCAABoQwAAUMIAAHBDAABQwgAAIMQAAHDDAAAgxAAAaMMAADjEAABowwAAOMQAAHDDAAA4RAAAQMIAACBEAABAwgAAIEQAAFDCAAA4RAAAUMIAAHBDAAAexAAACEMAAB7EAAAIQwAAIMQAAHBDAAAgxAAAIEQAAEDCAAAeRAAAQMIAAB5EAABQwgAAIEQAAFDCAAAIQwAAQMIAAABDAABAwgAAAEMAAFDCAAAIQwAAUMIAACDEAAAIwwAAIMQAAADDAABuxAAAAMMAAG7EAAAIwwAACEMAAEDCAAAAQwAAQMIAAABDAABQwgAACEMAAFDCAADQwwAACMMAANDDAAAAwwAAIMQAAADDAAAgxAAACMMAACBEAABAwgAA0EMAAEDCAADQQwAAUMIAACBEAABQwgAAAMMAAADCAAAAwgAAAMIAAADCAAAAQQAAAMMAAABBAAB+RAAAAEEAAHxEAAAAQQAAfEQAAADCAAB+RAAAAMIAAHxEAACAwQAAbkQAAIDBAABuRAAAAMIAAHxEAAAAwgAAAEMAADzEAABAwwAAPMQAAEDDAAA+xAAAAEMAAD7EAAA+RAAAQMIAADxEAABAwgAAPEQAAFDCAAA+RAAAUMIAAADCAAAAwgAAwEIAAADCAADAQgAAAEEAAADCAAAAQQAAwEIAAADCAACYQwAAAMIAAJhDAAAAQQAAwEIAAABBAACNRAAAgMEAAH5EAACAwQAAfkQAAADCAACNRAAAAMIAAMDCAAB8xAAAjMMAAHzEAACMwwAAfsQAAMDCAAB+xAAAfkQAAEDCAAB8RAAAQMIAAHxEAABQwgAAfkQAAFDCAABAwwAAQMIAAEjDAABAwgAASMMAAFDCAABAwwAAUMIAADzEAABAQwAAPMQAAEhDAAB8xAAASEMAAHzEAABAQwAAiMMAAEDCAACMwwAAQMIAAIzDAABQwgAAiMMAAFDCAAB+xAAAiEMAAH7EAACMQwAAjcQAAIxDAACNxAAAiEMAAEBDAAAgwwAAgEEAACDDAACAQQAAKMMAAEBDAAAowwAAQMMAAADCAACAwQAAAMIAAIDBAAAAwQAAQMMAAADBAAAoQwAAAMEAACBDAAAAwQAAIEMAAADCAAAoQwAAAMIAAKzDAAD4wwAAsMMAAPjDAACwwwAAGMQAAKzDAAAYxA=="), "format": 34359742487, "index_count": 498, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsAPAA9AD4APAA+AD8AQABBAEIAQABCAEMARABFAEYARABGAEcASABJAEoASABKAEsATABNAE4ATABOAE8AUABRAFIAUABSAFMAVABVAFYAVABWAFcAWABZAFoAWABaAFsAXABdAF4AXABeAF8AYABhAGIAYABiAGMAZABlAGYAZABmAGcAaABpAGoAaABqAGsAbABtAG4AbABuAG8AcABxAHIAcAByAHMAdAB1AHYAdAB2AHcAeAB5AHoAeAB6AHsAfAB9AH4AfAB+AH8AgACBAIIAgACCAIMAhACFAIYAhACGAIcAiACJAIoAiACKAIsAjACNAI4AjACOAI8AkACRAJIAkACSAJMAlACVAJYAlACWAJcAmACZAJoAmACaAJsAnACdAJ4AnACeAJ8AoAChAKIAoACiAKMApAClAKYApACmAKcAqACpAKoAqACqAKsArACtAK4ArACuAK8AsACxALIAsACyALMAtAC1ALYAtAC2ALcAuAC5ALoAuAC6ALsAvAC9AL4AvAC+AL8AwADBAMIAwADCAMMAxADFAMYAxADGAMcAyADJAMoAyADKAMsAzADNAM4AzADOAM8A0ADRANIA0ADSANMA1ADVANYA1ADWANcA2ADZANoA2ADaANsA3ADdAN4A3ADeAN8A4ADhAOIA4ADiAOMA5ADlAOYA5ADmAOcA6ADpAOoA6ADqAOsA7ADtAO4A7ADuAO8A8ADxAPIA8ADyAPMA9AD1APYA9AD2APcA+AD5APoA+AD6APsA/AD9AP4A/AD+AP8AAAEBAQIBAAECAQMBBAEFAQYBBAEGAQcBCAEJAQoBCAEKAQsBDAENAQ4BDAEOAQ8BEAERARIBEAESARMBFAEVARYBFAEWARcBGAEZARoBGAEaARsBHAEdAR4BHAEeAR8BIAEhASIBIAEiASMBJAElASYBJAEmAScBKAEpASoBKAEqASsBLAEtAS4BLAEuAS8BMAExATIBMAEyATMBNAE1ATYBNAE2ATcBOAE5AToBOAE6ATsBPAE9AT4BPAE+AT8BQAFBAUIBQAFCAUMBRAFFAUYBRAFGAUcBSAFJAUoBSAFKAUsB"), @@ -133,10 +133,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 332, -"vertex_data": PackedByteArray("AAAwwQAAQEAAAKBAAAAowQAAQEAAAKBAAAAowQAAgD8AAKBAAAAwwQAAgD8AAKBAAAAowQAAQEAAAKBAAACwwAAAQEAAAKBAAACwwAAAgD8AAKBAAAAowQAAgD8AAKBAAACwwAAAQEAAAChBAAAAQAAAQEAAAChBAAAAQAAAgD8AAChBAACwwAAAgD8AAChBAAAgQQAAQEAAAABAAAAoQQAAQEAAAABAAAAoQQAAgD8AAABAAAAgQQAAgD8AAABAAAAoQQAAgD8AAMA/AADMQQAAgD8AAMA/AADMQQAAAD8AAMA/AAAoQQAAAD8AAMA/AADMQQAAAEAAAMA/AADMQQAAAEAAAABAAAAoQQAAAEAAAABAAAAoQQAAAEAAAMA/AAAoQQAAAEAAAABAAADMQQAAAEAAAABAAADMQQAAgD8AAABAAAAoQQAAgD8AAABAAABYQQAAQEAAAJDAAABYQQAAQEAAAIDAAAAoQQAAQEAAAIDAAAAoQQAAQEAAAJDAAACgQQAAQEAAAJDAAACgQQAAQEAAAIDAAAB4QQAAQEAAAIDAAAB4QQAAQEAAAJDAAADMQQAAQEAAAJDAAADMQQAAQEAAAIDAAACwQQAAQEAAAIDAAACwQQAAQEAAAJDAAAAoQQAAUEAAAJDAAAAoQQAAUEAAAABAAAAgQQAAUEAAAABAAAAgQQAAUEAAAJDAAAAoQQAAUEAAAJDAAAAoQQAAQEAAAJDAAAAoQQAAQEAAAABAAAAoQQAAUEAAAABAAAAgQQAAUEAAAABAAAAoQQAAUEAAAABAAAAoQQAAQEAAAABAAAAgQQAAQEAAAABAAACgwAAAUEAAAJDAAACgwAAAUEAAAChBAACwwAAAUEAAAChBAACwwAAAUEAAAJDAAACwwAAAUEAAAChBAACgwAAAUEAAAChBAACgwAAAQEAAAChBAACwwAAAQEAAAChBAACgwAAAUEAAACBBAACgwAAAUEAAAChBAACgwAAAQEAAAChBAACgwAAAQEAAACBBAAAAQAAAUEAAACBBAAAAQAAAUEAAAChBAACgwAAAUEAAAChBAACgwAAAUEAAACBBAACgwAAAUEAAAChBAAAAQAAAUEAAAChBAAAAQAAAQEAAAChBAACgwAAAQEAAAChBAACgwAAAUEAAAJDAAACgwAAAUEAAAIDAAACgwAAAQEAAAIDAAACgwAAAQEAAAJDAAAAgQQAAUEAAAJDAAAAgQQAAUEAAAIDAAACgwAAAUEAAAIDAAACgwAAAUEAAAJDAAAAoQQAAUEAAAJDAAAAoQQAAUEAAAIDAAAAoQQAAQEAAAIDAAAAoQQAAQEAAAJDAAADMQQAAUEAAAJDAAADMQQAAUEAAAIDAAAAoQQAAUEAAAIDAAAAoQQAAUEAAAJDAAAAowQAAUEAAAADAAAAowQAAUEAAAMC/AAAowQAAQEAAAMC/AAAowQAAQEAAAADAAACwwAAAUEAAAADAAACwwAAAUEAAAMC/AAAowQAAUEAAAMC/AAAowQAAUEAAAADAAAAowQAAUEAAAADAAAAowQAAUEAAAKBAAAAwwQAAUEAAAKBAAAAwwQAAUEAAAADAAAAwwQAAUEAAAKBAAAAowQAAUEAAAKBAAAAowQAAQEAAAKBAAAAwwQAAQEAAAKBAAAAowQAAUEAAAJBAAAAowQAAUEAAAKBAAAAowQAAQEAAAKBAAAAowQAAQEAAAJBAAACwwAAAUEAAAJBAAACwwAAAUEAAAKBAAAAowQAAUEAAAKBAAAAowQAAUEAAAJBAAAAowQAAUEAAAKBAAACwwAAAUEAAAKBAAACwwAAAQEAAAKBAAAAowQAAQEAAAKBAAAAgQQAAQEAAAEhBAAAgQQAAAD8AAEhBAAAgQQAAAD8AAFBBAAAgQQAAQEAAAFBBAAAAQAAAQEAAAFBBAAAgQQAAQEAAAFBBAAAgQQAAAD8AAFBBAAAAQAAAAD8AAFBBAADAPwAAQEAAAFBBAAAAQAAAQEAAAFBBAAAAQAAAgD8AAFBBAADAPwAAgD8AAFBBAAAAQAAAUEAAAEhBAAAAQAAAUEAAAFBBAAAAQAAAQEAAAFBBAAAAQAAAQEAAAEhBAAAgQQAAUEAAAEhBAAAgQQAAUEAAAFBBAAAAQAAAUEAAAFBBAAAAQAAAUEAAAEhBAAAgQQAAUEAAAEhBAAAgQQAAQEAAAEhBAAAgQQAAQEAAAFBBAAAgQQAAUEAAAFBBAAAAQAAAUEAAAFBBAAAgQQAAUEAAAFBBAAAgQQAAQEAAAFBBAAAAQAAAQEAAAFBBAAAAQAAAUEAAAChBAAAAQAAAUEAAAFBBAADAPwAAUEAAAFBBAADAPwAAUEAAAChBAADAPwAAUEAAAFBBAAAAQAAAUEAAAFBBAAAAQAAAQEAAAFBBAADAPwAAQEAAAFBBAADQQQAAUEAAAETBAADQQQAAUEAAAAhBAADMQQAAUEAAAAhBAADMQQAAUEAAAETBAADMQQAAUEAAAAhBAADQQQAAUEAAAAhBAADQQQAAQEAAAAhBAADMQQAAQEAAAAhBAAA8QgAAQEAAAABBAAA+QgAAQEAAAABBAAA+QgAAgD8AAABBAAA8QgAAgD8AAABBAADQQQAAqEAAAEjBAADQQQAAqEAAAEDBAADQQQAAoEAAAEDBAADQQQAAoEAAAEjBAAA8QgAAqEAAAEjBAAA8QgAAqEAAAEDBAADQQQAAqEAAAEDBAADQQQAAqEAAAEjBAAA8QgAAoEAAAEjBAAA8QgAAoEAAAEDBAAAMQgAAoEAAAEDBAAAMQgAAoEAAAEjBAAAEQgAAoEAAAEjBAAAEQgAAoEAAAEDBAADQQQAAoEAAAEDBAADQQQAAoEAAAEjBAADQQQAAQEAAAAhBAAAoQgAAQEAAAAhBAAAoQgAAgD8AAAhBAADQQQAAgD8AAAhBAAA8QgAAQEAAAEjBAAA8QgAAQEAAAEDBAAAMQgAAQEAAAEDBAAAMQgAAQEAAAEjBAAAEQgAAQEAAAEjBAAAEQgAAQEAAAEDBAADQQQAAQEAAAEDBAADQQQAAQEAAAEjBAAAgQgAAQEAAAHBBAAA4QgAAQEAAAHBBAAA4QgAAgD8AAHBBAAAgQgAAgD8AAHBBAAA4QgAAQEAAAJhBAAA6QgAAQEAAAJhBAAA6QgAAgD8AAJhBAAA4QgAAgD8AAJhBAABwQgAAAEAAAABBAABwQgAAgD8AAABBAABwQgAAgD8AAJRBAABwQgAAAEAAAJRBAABuQgAAAEAAAJRBAABwQgAAAEAAAJRBAABwQgAAgD8AAJRBAABuQgAAgD8AAJRBAAA6QgAAAEAAAJhBAABwQgAAAEAAAJhBAABwQgAAgD8AAJhBAAA6QgAAgD8AAJhBAAA6QgAAUEAAAAhBAAA6QgAAUEAAAJhBAAA4QgAAUEAAAJhBAAA4QgAAUEAAAAhBAAA4QgAAUEAAAJhBAAA6QgAAUEAAAJhBAAA6QgAAQEAAAJhBAAA4QgAAQEAAAJhBAAAgQgAAUEAAAGhBAAAgQgAAUEAAAHBBAAAgQgAAQEAAAHBBAAAgQgAAQEAAAGhBAAA4QgAAUEAAAGhBAAA4QgAAUEAAAHBBAAAgQgAAUEAAAHBBAAAgQgAAUEAAAGhBAAAgQgAAUEAAAHBBAAA4QgAAUEAAAHBBAAA4QgAAQEAAAHBBAAAgQgAAQEAAAHBBAAAgQgAAUEAAAAhBAAAgQgAAUEAAAHBBAAAeQgAAUEAAAHBBAAAeQgAAUEAAAAhBAAAeQgAAUEAAAHBBAAAgQgAAUEAAAHBBAAAgQgAAQEAAAHBBAAAeQgAAQEAAAHBBAAAgQgAAUEAAAABBAAAgQgAAUEAAAAhBAAAgQgAAQEAAAAhBAAAgQgAAQEAAAABBAABuQgAAUEAAAABBAABuQgAAUEAAAAhBAAAgQgAAUEAAAAhBAAAgQgAAUEAAAABBAADQQQAAUEAAAABBAADQQQAAUEAAAAhBAADQQQAAQEAAAAhBAADQQQAAQEAAAABBAAAgQgAAUEAAAABBAAAgQgAAUEAAAAhBAADQQQAAUEAAAAhBAADQQQAAUEAAAABBAADQQQAAUEAAAAhBAAAgQgAAUEAAAAhBAAAgQgAAQEAAAAhBAADQQQAAQEAAAAhBAAB+QgAAAEAAAABAAAB+QgAAAL8AAABAAAB+QgAAAL8AAABBAAB+QgAAAEAAAABBAAB8QgAAAEAAAABBAAB+QgAAAEAAAABBAAB+QgAAAL8AAABBAAB8QgAAAL8AAABBAABuQgAAAEAAAABBAAB8QgAAAEAAAABBAAB8QgAAgD8AAABBAABuQgAAgD8AAABBAAA+QgAAUEAAAEDBAAA+QgAAUEAAAABBAAA8QgAAUEAAAABBAAA8QgAAUEAAAEDBAAA8QgAAUEAAAABBAAA+QgAAUEAAAABBAAA+QgAAQEAAAABBAAA8QgAAQEAAAABBAAB+QgAAAEAAAMDAAAB+QgAAAL8AAMDAAAB+QgAAAL8AAABAAAB+QgAAAEAAAABAAACOQgAAAEAAAJjBAACOQgAAAL8AAJjBAACOQgAAAL8AAMDAAACOQgAAAEAAAMDAAAB+QgAAAEAAAMDAAACNQgAAAEAAAMDAAACNQgAAgD8AAMDAAAB+QgAAgD8AAMDAAAB+QgAAUEAAAIzBAAB+QgAAUEAAAMDAAAB8QgAAUEAAAMDAAAB8QgAAUEAAAIzBAAB8QgAAUEAAAMDAAAB+QgAAUEAAAMDAAAB+QgAAQEAAAMDAAAB8QgAAQEAAAMDAAAA8QgAAUEAAAEjBAAA8QgAAUEAAAEDBAAA8QgAAQEAAAEDBAAA8QgAAQEAAAEjBAAB8QgAAUEAAAEjBAAB8QgAAUEAAAEDBAAA8QgAAUEAAAEDBAAA8QgAAUEAAAEjBAAB+QgAAUEAAAIzBAAB+QgAAUEAAAIjBAAB+QgAAQEAAAIjBAAB+QgAAQEAAAIzBAACNQgAAUEAAAIzBAACNQgAAUEAAAIjBAAB+QgAAUEAAAIjBAAB+QgAAUEAAAIzBAAAoQQAAAEAAAABAAAAoQQAAAEAAAFBBAAAgQQAAAEAAAFBBAAAgQQAAAEAAAABAAAAoQQAAAEAAAABAAAAoQQAAAD8AAABAAAAoQQAAAD8AAFBBAAAoQQAAAEAAAFBBAAAgQQAAAEAAAFBBAAAoQQAAAEAAAFBBAAAoQQAAAD8AAFBBAAAgQQAAAD8AAFBBAAAYQgAAoEAAALDBAAAYQgAAoEAAAKzBAAD4QQAAoEAAAKzBAAD4QQAAoEAAALDB/3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//f///AAD/v/9///8AAP+//3///wAA/7//f///AAD/v/9//3////+//3//f////7//f/9/////v/9//3////+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//f///AAD/v/9///8AAP+//3///wAA/7//f///AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9///8AAP+//3///wAA/7//f///AAD/v/9///8AAP+//3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7//f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9///8AAP+//3///wAA/7//f///AAD/v/9///8AAP+//3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//f///AAD/v/9///8AAP+//3///wAA/7//f///AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7//f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//f///AAD/v/9///8AAP+//3///wAA/7//f///AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7//f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//vw==") +"vertex_data": PackedByteArray("AAAowQAAgD8AAKBAAP8vwQAAgD8AAKBAAP8vwQAAQEAAAKBAAAAowQAAQEAAAKBAAACwwAAAgD8AAKBAAAEowQAAgD8AAKBAAAEowQAAQEAAAKBAAACwwAAAQEAAAKBAAAAAQAAAgD8AAChBAACwwAAAgD8AAChBAACwwAAAQEAAAChBAAAAQAAAQEAAAChBAAAoQQAAgD8AAABAAAAgQQAAgD8AAABAAAAgQQAAQEAAAABAAAAoQQAAQEAAAABAAADMQQAAAD8AAMA/AAAoQQAAAD8AAMA/AAAoQQAAgD8AAMA/AADMQQAAgD8AAMA/AAAoQQAAAEAAAABAAAAoQQAAAEAAAMA/AADMQQAAAEAAAMA/AADMQQAAAEAAAABAAADMQQAAgD8AAABAAAAoQQAAgD8AAABAAAAoQQAAAEAAAABAAADMQQAAAEAAAABAAAAoQQAAQEAAAIDAAAAoQQAAQEAAApDAAABYQQAAQEAAApDAAABYQQAAQEAAAIDAAAB4QQAAQEAAAIDAAAB4QQAAQEAAApDAAACgQQAAQEAAApDAAACgQQAAQEAAAIDAAACwQQAAQEAAAIDAAACwQQAAQEAAApDAAADMQQAAQEAAApDAAADMQQAAQEAAAIDAAAAgQQAAUEAAAABAAAAgQQAAUEAAApDAAAAoQQAAUEAAApDAAAAoQQAAUEAAAABAAAAoQQAAUEAAAABAAAAoQQAAUEAAApDAAAAoQQAAQEAAApDAAAAoQQAAQEAAAABAAAAoQQAAQEAAAABAAAAgQQAAQEAAAABAAAAgQQAAUEAAAABAAAAoQQAAUEAAAABAAACwwAAAUEAAAChBAACwwAAAUEAAApDAAACgwAAAUEAAApDAAACgwAAAUEAAAChBAACgwAAAQEAAAChBAACwwAAAQEAAAChBAACwwAAAUEAAAChBAACgwAAAUEAAAChBAACgwAAAQEAAAChBAACgwAAAQEAAACBBAACgwAAAUEAAACBBAACgwAAAUEAAAChBAP6fwAAAUEAAAChBAP6fwAAAUEAAACBBAAAAQAAAUEAAACBBAAAAQAAAUEAAAChBAAAAQAAAQEAAAChBAP6fwAAAQEAAAChBAP6fwAAAUEAAAChBAAAAQAAAUEAAAChBAACgwAAAQEAAAIDAAACgwAAAQEAAApDAAACgwAAAUEAAApDAAACgwAAAUEAAAIDAAP6fwAAAUEAAAIDAAP6fwAAAUEAAApDAAAAgQQAAUEAAApDAAAAgQQAAUEAAAIDAAAAoQQAAQEAAAIDAAAAoQQAAQEAAApDAAAAoQQAAUEAAApDAAAAoQQAAUEAAAIDAAAAoQQAAUEAAAIDAAAAoQQAAUEAAApDAAADMQQAAUEAAApDAAADMQQAAUEAAAIDAAAAowQAAQEAAAMC/AAAowQAAQEAA+P+/AAAowQAAUEAA+P+/AAAowQAAUEAAAMC/AAEowQAAUEAAAMC/AAEowQAAUEAA+P+/AACwwAAAUEAA+P+/AACwwAAAUEAAAMC/AP8vwQAAUEAAAKBAAP8vwQAAUEAA+P+/AAAowQAAUEAA+P+/AAAowQAAUEAAAKBAAAAowQAAQEAAAKBAAP8vwQAAQEAAAKBAAP8vwQAAUEAAAKBAAAAowQAAUEAAAKBAAAAowQAAQEAAAKBAAAAowQAAQEAAAJBAAAAowQAAUEAAAJBAAAAowQAAUEAAAKBAAAEowQAAUEAAAKBAAAEowQAAUEAAAJBAAACwwAAAUEAAAJBAAACwwAAAUEAAAKBAAACwwAAAQEAAAKBAAAEowQAAQEAAAKBAAAEowQAAUEAAAKBAAACwwAAAUEAAAKBAAAAgQQAAQEAAAFBBAAAgQQAAQEAAAEhBAAAgQQAAAD8AAEhBAAAgQQAAAD8AAFBBAAAgQQAAAD8AAFBBAAAAQAAAAD8AAFBBAAAAQAAAQEAAAFBBAAAgQQAAQEAAAFBBAAAAQAAAgD8AAFBBAADAPwAAgD8AAFBBAADAPwAAQEAAAFBBAAAAQAAAQEAAAFBBAAAAQAAAQEAAAFBBAAAAQAAAQEAAAEhBAAAAQAAAUEAAAEhBAAAAQAAAUEAAAFBBAAAAQAAAUEAAAFBBAAAAQAAAUEAAAEhBAAAgQQAAUEAAAEhBAAAgQQAAUEAAAFBBAAAgQQAAUEAAAFBBAAAgQQAAUEAAAEhBAAAgQQAAQEAAAEhBAAAgQQAAQEAAAFBBAAAgQQAAQEAAAFBBAAAAQAAAQEAAAFBBAAAAQAAAUEAAAFBBAAAgQQAAUEAAAFBBAADAPwAAUEAAAFBBAADAPwAAUEAAAChBAAAAQAAAUEAAAChBAAAAQAAAUEAAAFBBAAAAQAAAQEAAAFBBAADAPwAAQEAAAFBBAADAPwAAUEAAAFBBAAAAQAAAUEAAAFBBAADMQQAAUEAAAAhBAADMQQAAUEAAAETBAADQQQAAUEAAAETBAADQQQAAUEAAAAhBAADQQQAAQEAAAAhBAADMQQAAQEAAAAhBAADMQQAAUEAAAAhBAADQQQAAUEAAAAhBAAA+QgAAgD8AAABBAAA8QgAAgD8AAABBAAA8QgAAQEAAAABBAAA+QgAAQEAAAABBAADQQQAAoEAAAEDBAADQQQAAoEAAAEjBAADQQQAAqEAAAEjBAADQQQAAqEAAAEDBAADQQQAAqEAAAEDBAADQQQAAqEAAAEjBAAA8QgAAqEAAAEjBAAA8QgAAqEAAAEDBAAAMQgAAoEAAAEDBAAAMQgAAoEAAAEjBAAA8QgAAoEAAAEjBAAA8QgAAoEAAAEDBAADQQQAAoEAAAEDBAADQQQAAoEAAAEjBAAAEQgAAoEAAAEjBAAAEQgAAoEAAAEDBAAAoQgAAgD8AAAhBAADQQQAAgD8AAAhBAADQQQAAQEAAAAhBAAAoQgAAQEAAAAhBAAAMQgAAQEAAAEDBAAAMQgAAQEAAAEjBAAA8QgAAQEAAAEjBAAA8QgAAQEAAAEDBAADQQQAAQEAAAEDBAADQQQAAQEAAAEjBAAAEQgAAQEAAAEjBAAAEQgAAQEAAAEDBAAA4QgAAgD8AAHBBAAAgQgAAgD8AAHBBAAAgQgAAQEAAAHBBAAA4QgAAQEAAAHBBAAA6QgAAgD8AAJhBAAA4QgAAgD8AAJhBAAA4QgAAQEAAAJhBAAA6QgAAQEAAAJhBAABwQgAAAEAAAJRBAABwQgAAAEAAAABBAABwQgAAgD8AAABBAABwQgAAgD8AAJRBAABwQgAAgD8AAJRBAABuQgAAgD8AAJRBAABuQgAAAEAAAJRBAABwQgAAAEAAAJRBAABwQgAAgD8AAJhBAAA6QgAAgD8AAJhBAAA6QgAAAEAAAJhBAABwQgAAAEAAAJhBAAA4QgAAUEAAAJhBAAA4QgAAUEAAAAhBAAA6QgAAUEAAAAhBAAA6QgAAUEAAAJhBAAA6QgAAQEAAAJhBAAA4QgAAQEAAAJhBAAA4QgAAUEAAAJhBAAA6QgAAUEAAAJhBAAAgQgAAQEAAAHBBAAAgQgAAQEAAAGhBAAAgQgAAUEAAAGhBAAAgQgAAUEAAAHBBAAAgQgAAUEAAAHBBAAAgQgAAUEAAAGhBAAA4QgAAUEAAAGhBAAA4QgAAUEAAAHBBAAA4QgAAQEAAAHBBAAAgQgAAQEAAAHBBAAAgQgAAUEAAAHBBAAA4QgAAUEAAAHBBAAAeQgAAUEAAAHBBAAAeQgAAUEAAAAhBAAAgQgAAUEAAAAhBAAAgQgAAUEAAAHBBAAAgQgAAQEAAAHBBAAAeQgAAQEAAAHBBAAAeQgAAUEAAAHBBAAAgQgAAUEAAAHBBAAAgQgAAQEAAAAhBAAAgQgAAQEAAAABBAAAgQgAAUEAAAABBAAAgQgAAUEAAAAhBAAAgQgAAUEAAAAhBAAAgQgAAUEAAAABBAABuQgAAUEAAAABBAABuQgAAUEAAAAhBAADQQQAAQEAAAAhBAADQQQAAQEAAAABBAADQQQAAUEAAAABBAADQQQAAUEAAAAhBAADQQQAAUEAAAAhBAADQQQAAUEAAAABBAAAgQgAAUEAAAABBAAAgQgAAUEAAAAhBAAAgQgAAQEAAAAhBAADQQQAAQEAAAAhBAADQQQAAUEAAAAhBAAAgQgAAUEAAAAhBAAB+QgAAAEAAAABBAAB+QgAAAEAAAABAAAB+QgAAAL8AAABAAAB+QgAAAL8AAABBAAB+QgAAAL8AAABBAAB8QgAAAL8AAABBAAB8QgAAAEAAAABBAAB+QgAAAEAAAABBAAB8QgAAgD8AAABBAABuQgAAgD8AAABBAABuQgAAAEAAAABBAAB8QgAAAEAAAABBAAA8QgAAUEAAAABBAAA8QgAAUEAAAEDBAAA+QgAAUEAAAEDBAAA+QgAAUEAAAABBAAA+QgAAQEAAAABBAAA8QgAAQEAAAABBAAA8QgAAUEAAAABBAAA+QgAAUEAAAABBAAB+QgAAAEAAAABAAAB+QgAAAEAAAMDAAAB+QgAAAL8AAMDAAAB+QgAAAL8AAABAAACOQgAAAEAAAMDAAACOQgAAAEAAAJjBAACOQgAAAL8AAJjBAACOQgAAAL8AAMDAAACNQgAAgD8AAMDAAAB+QgAAgD8AAMDAAAB+QgAAAEAAAMDAAACNQgAAAEAAAMDAAAB8QgAAUEAAAMDAAAB8QgAAUEAAAIzBAAB+QgAAUEAAAIzBAAB+QgAAUEAAAMDAAAB+QgAAQEAAAMDAAAB8QgAAQEAAAMDAAAB8QgAAUEAAAMDAAAB+QgAAUEAAAMDAAAA8QgAAQEAAAEDBAAA8QgAAQEAAAEjBAAA8QgAAUEAAAEjBAAA8QgAAUEAAAEDBAAA8QgAAUEAAAEDBAAA8QgAAUEAAAEjBAAB8QgAAUEAAAEjBAAB8QgAAUEAAAEDBAAB+QgAAQEAAAIjBAAB+QgAAQEAAAIzBAAB+QgAAUEAAAIzBAAB+QgAAUEAAAIjBAAB+QgAAUEAAAIjBAAB+QgAAUEAAAIzBAACNQgAAUEAAAIzBAACNQgAAUEAAAIjBAAAgQQAAAEAAAFBBAAAgQQAAAEAAAABAAAAoQQAAAEAAAABAAAAoQQAAAEAAAFBBAAAoQQAAAEAAAFBBAAAoQQAAAEAAAABAAAAoQQAAAD8AAABAAAAoQQAAAD8AAFBBAAAoQQAAAD8AAFBBAAAgQQAAAD8AAFBBAAAgQQAAAEAAAFBBAAAoQQAAAEAAAFBBAAD4QQAAoEAAAKzBAAD4QQAAoEAAALDBAAAYQgAAoEAAALDBAAAYQgAAoEAAAKzB/3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//f///AAD/v/9///8AAP+//3///wAA/7//f///AAD/v/9//3////+//3//f////7//f/9/////v/9//3////+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//f///AAD/v/9///8AAP+//3///wAA/7//f///AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9///8AAP+//3///wAA/7//f///AAD/v/9///8AAP+//3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7//f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9///8AAP+//3///wAA/7//f///AAD/v/9///8AAP+//3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//f///AAD/v/9///8AAP+//3///wAA/7//f///AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7//f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////7////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//v/9//3////+//3//f////7//f/9/////v/9//3////+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//f///AAD/v/9///8AAP+//3///wAA/7//f///AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7//f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//f////3//v/9/////f/+//3////9//7//f////3//vw==") }, { "aabb": AABB(-5.5, 0.5, -5.5, 31.5, 2.5, 8), -"attribute_data": PackedByteArray("AADAwAAAwL8AAMDAAACAvwAAsMAAAIC/AACwwAAAwL8AAMA/AADAvwAAYEAAAMC/AABgQAAAgL8AAMA/AACAvwAAwL8AALBAAADAvwAAwEAAAGDAAADAQAAAYMAAALBAAADAPwAAsEAAAGBAAACwQAAAYEAAAMBAAADAPwAAwEAAAMC/AADAvwAAwL8AAIC/AABgwAAAgL8AAGDAAADAvwAAwMAAAMC/AACwwAAAwL8AALDAAACAvwAAwMAAAIC/AAAgQQAAwL8AACBBAACAvwAAKEEAAIC/AAAoQQAAwL8AACDAAADAvwAAAL8AAMC/AAAAvwAAgL8AACDAAACAvwAAIEAAACjBAAAgQAAAIMEAAAA/AAAgwQAAAD8AACjBAAAgwAAAKMEAAAC/AAAowQAAAL8AACDBAAAgwAAAIMEAACBAAADAvwAAIEAAAIC/AAAAPwAAgL8AAAA/AADAvwAAIEEAAMC/AAAoQQAAwL8AAChBAACAvwAAIEEAAIC/AACcwQAAQMAAAJzBAACAvwAAoMEAAIC/AACgwQAAQMAAAMDAAABAwAAAoMAAAEDAAACgwAAAgL8AAMDAAACAvwAAwEAAAKDBAADAQAAAnMEAAKBAAACcwQAAoEAAAKDBAADAwAAAoMEAAKDAAACgwQAAoMAAAJzBAADAwAAAnMEAAMBAAABAwAAAwEAAAIC/AACgQAAAgL8AAKBAAABAwAAAnEEAAEDAAACgQQAAQMAAAKBBAACAvwAAnEEAAIC/AACswQAAQMAAAKzBAACAvwAAsMEAAIC/AACwwQAAQMAAAMDAAABAwAAAoMAAAEDAAACgwAAAgL8AAMDAAACAvwAAwEAAALDBAADAQAAArMEAAKBAAACswQAAoEAAALDBAADAwAAAsMEAAKDAAACwwQAAoMAAAKzBAADAwAAArMEAAMBAAABAwAAAwEAAAIC/AACgQAAAgL8AAKBAAABAwAAArEEAAEDAAACwQQAAQMAAALBBAACAvwAArEEAAIC/AADQQQAAwL8AANBBAACAvwAA1EEAAIC/AADUQQAAwL8AACDAAADAvwAAAL8AAMC/AAAAvwAAgL8AACDAAACAvwAAIEAAANTBAAAgQAAA0MEAAAA/AADQwQAAAD8AANTBAAAgwAAA1MEAAAC/AADUwQAAAL8AANDBAAAgwAAA0MEAACBAAADAvwAAIEAAAIC/AAAAPwAAgL8AAAA/AADAvwAA0EEAAMC/AADUQQAAwL8AANRBAACAvwAA0EEAAIC/AABYwQAAQMAAAFjBAACAvwAAYMEAAIC/AABgwQAAQMAAAMDAAABAwAAAoMAAAEDAAACgwAAAgL8AAMDAAACAvwAAwEAAAGDBAADAQAAAWMEAAKBAAABYwQAAoEAAAGDBAADAwAAAYMEAAKDAAABgwQAAoMAAAFjBAADAwAAAWMEAAMBAAABAwAAAwEAAAIC/AACgQAAAgL8AAKBAAABAwAAAWEEAAEDAAABgQQAAQMAAAGBBAACAvwAAWEEAAIC/AAB4wQAAQMAAAHjBAACAvwAAgMEAAIC/AACAwQAAQMAAAMDAAABAwAAAoMAAAEDAAACgwAAAgL8AAMDAAACAvwAAwEAAAIDBAADAQAAAeMEAAKBAAAB4wQAAoEAAAIDBAADAwAAAgMEAAKDAAACAwQAAoMAAAHjBAADAwAAAeMEAAMBAAABAwAAAwEAAAIC/AACgQAAAgL8AAKBAAABAwAAAeEEAAEDAAACAQQAAQMAAAIBBAACAvwAAeEEAAIC/"), +"attribute_data": PackedByteArray("AACwwAAAwL8AAMDAAADAvwAAwMAAAIC/AACwwAAAgL8AAGBAAACAvwAAwD8AAIC/AADAPwAAwL8AAGBAAADAvwAAYMAAAMBAAABgwAAAsEAAAMC/AACwQAAAwL8AAMBAAABgQAAAwEAAAMA/AADAQAAAwD8AALBAAABgQAAAsEAAAGDAAADAvwAAwL8AAMC/AADAvwAAgL8AAGDAAACAvwAAsMAAAIC/AADAwAAAgL8AAMDAAADAvwAAsMAAAMC/AAAoQQAAwL8AACBBAADAvwAAIEEAAIC/AAAoQQAAgL8AAAC/AACAvwAAIMAAAIC/AAAgwAAAwL8AAAC/AADAvwAAAD8AACDBAAAAPwAAKMEAACBAAAAowQAAIEAAACDBAAAAvwAAIMEAACDAAAAgwQAAIMAAACjBAAAAvwAAKMEAAAA/AADAvwAAIEAAAMC/AAAgQAAAgL8AAAA/AACAvwAAKEEAAIC/AAAgQQAAgL8AACBBAADAvwAAKEEAAMC/AACgwQAAQMAAAJzBAABAwAAAnMEAAIC/AACgwQAAgL8AAKDAAACAvwAAwMAAAIC/AADAwAAAQMAAAKDAAABAwAAAoEAAAJzBAACgQAAAoMEAAMBAAACgwQAAwEAAAJzBAACgwAAAnMEAAMDAAACcwQAAwMAAAKDBAACgwAAAoMEAAKBAAABAwAAAwEAAAEDAAADAQAAAgL8AAKBAAACAvwAAoEEAAIC/AACcQQAAgL8AAJxBAABAwAAAoEEAAEDAAACwwQAAQMAAAKzBAABAwAAArMEAAIC/AACwwQAAgL8AAKDAAACAvwAAwMAAAIC/AADAwAAAQMAAAKDAAABAwAAAoEAAAKzBAACgQAAAsMEAAMBAAACwwQAAwEAAAKzBAACgwAAArMEAAMDAAACswQAAwMAAALDBAACgwAAAsMEAAKBAAABAwAAAwEAAAEDAAADAQAAAgL8AAKBAAACAvwAAsEEAAIC/AACsQQAAgL8AAKxBAABAwAAAsEEAAEDAAADUQQAAwL8AANBBAADAvwAA0EEAAIC/AADUQQAAgL8AAAC/AACAvwAAIMAAAIC/AAAgwAAAwL8AAAC/AADAvwAAAD8AANDBAAAAPwAA1MEAACBAAADUwQAAIEAAANDBAAAAvwAA0MEAACDAAADQwQAAIMAAANTBAAAAvwAA1MEAAAA/AADAvwAAIEAAAMC/AAAgQAAAgL8AAAA/AACAvwAA1EEAAIC/AADQQQAAgL8AANBBAADAvwAA1EEAAMC/AABgwQAAQMAAAFjBAABAwAAAWMEAAIC/AABgwQAAgL8AAKDAAACAvwAAwMAAAIC/AADAwAAAQMAAAKDAAABAwAAAoEAAAFjBAACgQAAAYMEAAMBAAABgwQAAwEAAAFjBAACgwAAAWMEAAMDAAABYwQAAwMAAAGDBAACgwAAAYMEAAKBAAABAwAAAwEAAAEDAAADAQAAAgL8AAKBAAACAvwAAYEEAAIC/AABYQQAAgL8AAFhBAABAwAAAYEEAAEDAAACAwQAAQMAAAHjBAABAwAAAeMEAAIC/AACAwQAAgL8AAKDAAACAvwAAwMAAAIC/AADAwAAAQMAAAKDAAABAwAAAoEAAAHjBAACgQAAAgMEAAMBAAACAwQAAwEAAAHjBAACgwAAAeMEAAMDAAAB4wQAAwMAAAIDBAACgwAAAgMEAAKBAAABAwAAAwEAAAEDAAADAQAAAgL8AAKBAAACAvwAAgEEAAIC/AAB4QQAAgL8AAHhBAABAwAAAgEEAAEDA"), "format": 34359742487, "index_count": 252, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsAPAA9AD4APAA+AD8AQABBAEIAQABCAEMARABFAEYARABGAEcASABJAEoASABKAEsATABNAE4ATABOAE8AUABRAFIAUABSAFMAVABVAFYAVABWAFcAWABZAFoAWABaAFsAXABdAF4AXABeAF8AYABhAGIAYABiAGMAZABlAGYAZABmAGcAaABpAGoAaABqAGsAbABtAG4AbABuAG8AcABxAHIAcAByAHMAdAB1AHYAdAB2AHcAeAB5AHoAeAB6AHsAfAB9AH4AfAB+AH8AgACBAIIAgACCAIMAhACFAIYAhACGAIcAiACJAIoAiACKAIsAjACNAI4AjACOAI8AkACRAJIAkACSAJMAlACVAJYAlACWAJcAmACZAJoAmACaAJsAnACdAJ4AnACeAJ8AoAChAKIAoACiAKMApAClAKYApACmAKcA"), @@ -145,10 +145,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 168, -"vertex_data": PackedByteArray("AACwwAAAgD8AAAA/AACwwAAAAD8AAAA/AACgwAAAAD8AAAA/AACgwAAAgD8AAAA/AACwwAAAgD8AAAA/AACwwAAAgD8AACBAAACwwAAAAD8AACBAAACwwAAAAD8AAAA/AACgwAAAAD8AAAA/AACwwAAAAD8AAAA/AACwwAAAAD8AACBAAACgwAAAAD8AACBAAACgwAAAgD8AAAA/AACgwAAAgD8AACBAAACwwAAAgD8AACBAAACwwAAAgD8AAAA/AACgwAAAgD8AAAA/AACgwAAAAD8AAAA/AACgwAAAAD8AACBAAACgwAAAgD8AACBAAACwwAAAgD8AACBAAACgwAAAgD8AACBAAACgwAAAAD8AACBAAACwwAAAAD8AACBAAAAgQQAAgD8AACDAAAAgQQAAAD8AACDAAAAoQQAAAD8AACDAAAAoQQAAgD8AACDAAAAgQQAAgD8AACDAAAAgQQAAgD8AAAC/AAAgQQAAAD8AAAC/AAAgQQAAAD8AACDAAAAoQQAAAD8AACDAAAAgQQAAAD8AACDAAAAgQQAAAD8AAAC/AAAoQQAAAD8AAAC/AAAoQQAAgD8AACDAAAAoQQAAgD8AAAC/AAAgQQAAgD8AAAC/AAAgQQAAgD8AACDAAAAoQQAAgD8AACDAAAAoQQAAAD8AACDAAAAoQQAAAD8AAAC/AAAoQQAAgD8AAAC/AAAgQQAAgD8AAAC/AAAoQQAAgD8AAAC/AAAoQQAAAD8AAAC/AAAgQQAAAD8AAAC/AACcQQAAQEAAALDAAACcQQAAgD8AALDAAACgQQAAgD8AALDAAACgQQAAQEAAALDAAACcQQAAQEAAALDAAACcQQAAQEAAAJDAAACcQQAAgD8AAJDAAACcQQAAgD8AALDAAACgQQAAgD8AALDAAACcQQAAgD8AALDAAACcQQAAgD8AAJDAAACgQQAAgD8AAJDAAACgQQAAQEAAALDAAACgQQAAQEAAAJDAAACcQQAAQEAAAJDAAACcQQAAQEAAALDAAACgQQAAQEAAALDAAACgQQAAgD8AALDAAACgQQAAgD8AAJDAAACgQQAAQEAAAJDAAACcQQAAQEAAAJDAAACgQQAAQEAAAJDAAACgQQAAgD8AAJDAAACcQQAAgD8AAJDAAACwQQAAQEAAALDAAACwQQAAgD8AALDAAAC0QQAAgD8AALDAAAC0QQAAQEAAALDAAACwQQAAQEAAALDAAACwQQAAQEAAAJDAAACwQQAAgD8AAJDAAACwQQAAgD8AALDAAAC0QQAAgD8AALDAAACwQQAAgD8AALDAAACwQQAAgD8AAJDAAAC0QQAAgD8AAJDAAAC0QQAAQEAAALDAAAC0QQAAQEAAAJDAAACwQQAAQEAAAJDAAACwQQAAQEAAALDAAAC0QQAAQEAAALDAAAC0QQAAgD8AALDAAAC0QQAAgD8AAJDAAAC0QQAAQEAAAJDAAACwQQAAQEAAAJDAAAC0QQAAQEAAAJDAAAC0QQAAgD8AAJDAAACwQQAAgD8AAJDAAADMQQAAgD8AACDAAADMQQAAAD8AACDAAADQQQAAAD8AACDAAADQQQAAgD8AACDAAADMQQAAgD8AACDAAADMQQAAgD8AAAC/AADMQQAAAD8AAAC/AADMQQAAAD8AACDAAADQQQAAAD8AACDAAADMQQAAAD8AACDAAADMQQAAAD8AAAC/AADQQQAAAD8AAAC/AADQQQAAgD8AACDAAADQQQAAgD8AAAC/AADMQQAAgD8AAAC/AADMQQAAgD8AACDAAADQQQAAgD8AACDAAADQQQAAAD8AACDAAADQQQAAAD8AAAC/AADQQQAAgD8AAAC/AADMQQAAgD8AAAC/AADQQQAAgD8AAAC/AADQQQAAAD8AAAC/AADMQQAAAD8AAAC/AABQQQAAQEAAALDAAABQQQAAgD8AALDAAABYQQAAgD8AALDAAABYQQAAQEAAALDAAABQQQAAQEAAALDAAABQQQAAQEAAAJDAAABQQQAAgD8AAJDAAABQQQAAgD8AALDAAABYQQAAgD8AALDAAABQQQAAgD8AALDAAABQQQAAgD8AAJDAAABYQQAAgD8AAJDAAABYQQAAQEAAALDAAABYQQAAQEAAAJDAAABQQQAAQEAAAJDAAABQQQAAQEAAALDAAABYQQAAQEAAALDAAABYQQAAgD8AALDAAABYQQAAgD8AAJDAAABYQQAAQEAAAJDAAABQQQAAQEAAAJDAAABYQQAAQEAAAJDAAABYQQAAgD8AAJDAAABQQQAAgD8AAJDAAAB4QQAAQEAAALDAAAB4QQAAgD8AALDAAACAQQAAgD8AALDAAACAQQAAQEAAALDAAAB4QQAAQEAAALDAAAB4QQAAQEAAAJDAAAB4QQAAgD8AAJDAAAB4QQAAgD8AALDAAACAQQAAgD8AALDAAAB4QQAAgD8AALDAAAB4QQAAgD8AAJDAAACAQQAAgD8AAJDAAACAQQAAQEAAALDAAACAQQAAQEAAAJDAAAB4QQAAQEAAAJDAAAB4QQAAQEAAALDAAACAQQAAQEAAALDAAACAQQAAgD8AALDAAACAQQAAgD8AAJDAAACAQQAAQEAAAJDAAAB4QQAAQEAAAJDAAACAQQAAQEAAAJDAAACAQQAAgD8AAJDAAAB4QQAAgD8AAJDA/////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACgwAAAgD8AAAA/AACwwAAAgD8AAAA/AACwwAAAAD8AAAA/AACgwAAAAD8AAAA/AACwwAAAAD8AACBAAACwwAAAAD8AAAA/AACwwAAAgD8AAAA/AACwwAAAgD8AACBAAACwwAAAAD8AACBAAACgwAAAAD8AACBAAACgwAAAAD8AAAA/AACwwAAAAD8AAAA/AACwwAAAgD8AACBAAACwwAAAgD8AAAA/AACgwAAAgD8AAAA/AACgwAAAgD8AACBAAACgwAAAgD8AACBAAACgwAAAgD8AAAA/AACgwAAAAD8AAAA/AACgwAAAAD8AACBAAACgwAAAAD8AACBAAACwwAAAAD8AACBAAACwwAAAgD8AACBAAACgwAAAgD8AACBAAAAoQQAAgD8AACDAAAAgQQAAgD8AACDAAAAgQQAAAD8AACDAAAAoQQAAAD8AACDAAAAgQQAAAD8AAAC/AAAgQQAAAD8AACDAAAAgQQAAgD8AACDAAAAgQQAAgD8AAAC/AAAgQQAAAD8AAAC/AAAoQQAAAD8AAAC/AAAoQQAAAD8AACDAAAAgQQAAAD8AACDAAAAgQQAAgD8AAAC/AAAgQQAAgD8AACDAAAAoQQAAgD8AACDAAAAoQQAAgD8AAAC/AAAoQQAAgD8AAAC/AAAoQQAAgD8AACDAAAAoQQAAAD8AACDAAAAoQQAAAD8AAAC/AAAoQQAAAD8AAAC/AAAgQQAAAD8AAAC/AAAgQQAAgD8AAAC/AAAoQQAAgD8AAAC/AACgQQAAQEAAALDAAACcQQAAQEAAALDAAACcQQAAgD8AALDAAACgQQAAgD8AALDAAACcQQAAgD8AAJDAAACcQQAAgD8AALDAAACcQQAAQEAAALDAAACcQQAAQEAAAJDAAACcQQAAgD8AAJDAAACgQQAAgD8AAJDAAACgQQAAgD8AALDAAACcQQAAgD8AALDAAACcQQAAQEAAAJDAAACcQQAAQEAAALDAAACgQQAAQEAAALDAAACgQQAAQEAAAJDAAACgQQAAQEAAAJDAAACgQQAAQEAAALDAAACgQQAAgD8AALDAAACgQQAAgD8AAJDAAACgQQAAgD8AAJDAAACcQQAAgD8AAJDAAACcQQAAQEAAAJDAAACgQQAAQEAAAJDAAAC0QQAAQEAAALDAAACwQQAAQEAAALDAAACwQQAAgD8AALDAAAC0QQAAgD8AALDAAACwQQAAgD8AAJDAAACwQQAAgD8AALDAAACwQQAAQEAAALDAAACwQQAAQEAAAJDAAACwQQAAgD8AAJDAAAC0QQAAgD8AAJDAAAC0QQAAgD8AALDAAACwQQAAgD8AALDAAACwQQAAQEAAAJDAAACwQQAAQEAAALDAAAC0QQAAQEAAALDAAAC0QQAAQEAAAJDAAAC0QQAAQEAAAJDAAAC0QQAAQEAAALDAAAC0QQAAgD8AALDAAAC0QQAAgD8AAJDAAAC0QQAAgD8AAJDAAACwQQAAgD8AAJDAAACwQQAAQEAAAJDAAAC0QQAAQEAAAJDAAADQQQAAgD8AACDAAADMQQAAgD8AACDAAADMQQAAAD8AACDAAADQQQAAAD8AACDAAADMQQAAAD8AAAC/AADMQQAAAD8AACDAAADMQQAAgD8AACDAAADMQQAAgD8AAAC/AADMQQAAAD8AAAC/AADQQQAAAD8AAAC/AADQQQAAAD8AACDAAADMQQAAAD8AACDAAADMQQAAgD8AAAC/AADMQQAAgD8AACDAAADQQQAAgD8AACDAAADQQQAAgD8AAAC/AADQQQAAgD8AAAC/AADQQQAAgD8AACDAAADQQQAAAD8AACDAAADQQQAAAD8AAAC/AADQQQAAAD8AAAC/AADMQQAAAD8AAAC/AADMQQAAgD8AAAC/AADQQQAAgD8AAAC/AABYQQAAQEAAALDAAABQQQAAQEAAALDAAABQQQAAgD8AALDAAABYQQAAgD8AALDAAABQQQAAgD8AAJDAAABQQQAAgD8AALDAAABQQQAAQEAAALDAAABQQQAAQEAAAJDAAABQQQAAgD8AAJDAAABYQQAAgD8AAJDAAABYQQAAgD8AALDAAABQQQAAgD8AALDAAABQQQAAQEAAAJDAAABQQQAAQEAAALDAAABYQQAAQEAAALDAAABYQQAAQEAAAJDAAABYQQAAQEAAAJDAAABYQQAAQEAAALDAAABYQQAAgD8AALDAAABYQQAAgD8AAJDAAABYQQAAgD8AAJDAAABQQQAAgD8AAJDAAABQQQAAQEAAAJDAAABYQQAAQEAAAJDAAACAQQAAQEAAALDAAAB4QQAAQEAAALDAAAB4QQAAgD8AALDAAACAQQAAgD8AALDAAAB4QQAAgD8AAJDAAAB4QQAAgD8AALDAAAB4QQAAQEAAALDAAAB4QQAAQEAAAJDAAAB4QQAAgD8AAJDAAACAQQAAgD8AAJDAAACAQQAAgD8AALDAAAB4QQAAgD8AALDAAAB4QQAAQEAAAJDAAAB4QQAAQEAAALDAAACAQQAAQEAAALDAAACAQQAAQEAAAJDAAACAQQAAQEAAAJDAAACAQQAAQEAAALDAAACAQQAAgD8AALDAAACAQQAAgD8AAJDAAACAQQAAgD8AAJDAAAB4QQAAgD8AAJDAAAB4QQAAQEAAAJDAAACAQQAAQEAAAJDA/////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////////z//////////P/////////8//////////z8AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }, { -"aabb": AABB(-10.5, 3, -17.5, 81, 2.25, 36.5), -"attribute_data": PackedByteArray("AAAQQQAA0MAAABBBAADAwAAAqMEAAMDAAACowQAA0MAAACDBAADQwAAAoEEAANDAAACgQQAAwMAAACDBAADAwAAAqEEAANDAAABMQgAA0MAAAExCAADAwAAAqEEAAMDAAACowQAA0MAAADDBAADQwAAAMMEAAMDAAACowQAAwMAAAGBAAADQwAAAYEAAAMDAAAAowQAAwMAAACjBAADQwAAAqMEAANDAAACowQAAwMAAANDBAADAwAAA0MEAANDAAADEQQAA0MAAAMRBAADAwAAAiMEAAMDAAACIwQAA0MAAAFBCAAAowQAAvEIAACjBAAC8QgAAIMEAAFBCAAAgwQAAiMEAANDAAACIwQAAwMAAABjCAADAwAAAGMIAANDAAACIwQAA0MAAAIjBAADAwAAA8MEAAMDAAADwwQAA0MAAAKBCAADQwAAA7kIAANDAAADuQgAAwMAAAKBCAADAwAAAwEEAANDAAADAQQAAwMAAAIDBAADAwAAAgMEAANDAAAAMQgAA0MAAAAxCAADAwAAAQEEAAMDAAABAQQAA0MAAALxCAADQwAAA/EIAANDAAAD8QgAAwMAAALxCAADAwAAA/kIAANDAAAANQwAA0MAAAA1DAADAwAAA/kIAAMDA"), +"aabb": AABB(-10.500244, 3, -17.5, 81.000244, 2.25, 36.5), +"attribute_data": PackedByteArray("AACowQAA0MAAAhBBAADQwAACEEEAAMDAAACowQAAwMAAAKBBAADAwAD+H8EAAMDAAP4fwQAA0MAAAKBBAADQwAAATEIAAMDAAACoQQAAwMAAAKhBAADQwAAATEIAANDAAAAwwQAAwMAAAajBAADAwAABqMEAANDAAAAwwQAA0MAAACjBAADQwAD4X0AAANDAAPhfQAAAwMAAACjBAADAwAAA0MEAANDAAACowQAA0MAAAKjBAADAwAAA0MEAAMDAAACIwQAA0MAAAMRBAADQwAAAxEEAAMDAAACIwQAAwMAAALxCAAAgwQAAUEIAACDBAABQQgAAKMEAALxCAAAowQAAGMIAANDAAACIwQAA0MAAAIjBAADAwAAAGMIAAMDAAADwwQAA0MAAAIjBAADQwAAAiMEAAMDAAADwwQAAwMAAAO5CAADAwAAAoEIAAMDAAACgQgAA0MAAAO5CAADQwAAAgMEAANDAAADAQQAA0MAAAMBBAADAwAAAgMEAAMDAAABAQQAA0MAAAAxCAADQwAAADEIAAMDAAABAQQAAwMAAAPxCAADAwAAAvEIAAMDAAAC8QgAA0MAAAPxCAADQwAAADUMAAMDAAAD+QgAAwMAAAP5CAADQwAAADUMAANDA"), "format": 34359742487, "index_count": 90, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsA"), @@ -157,10 +157,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 60, -"vertex_data": PackedByteArray("AACgwAAAUEAAAJDAAACgwAAAQEAAAJDAAACgwAAAQEAAAChBAACgwAAAUEAAAChBAACgwAAAUEAAAIDAAAAgQQAAUEAAAIDAAAAgQQAAQEAAAIDAAACgwAAAQEAAAIDAAAAoQQAAUEAAAIDAAADMQQAAUEAAAIDAAADMQQAAQEAAAIDAAAAoQQAAQEAAAIDAAAAowQAAUEAAAMC/AACwwAAAUEAAAMC/AACwwAAAQEAAAMC/AAAowQAAQEAAAMC/AAAowQAAUEAAAADAAAAowQAAQEAAAADAAAAowQAAQEAAAKBAAAAowQAAUEAAAKBAAAAAQAAAUEAAAChBAAAAQAAAQEAAAChBAAAAQAAAQEAAAFBBAAAAQAAAUEAAAFBBAADQQQAAUEAAAETBAADQQQAAQEAAAETBAADQQQAAQEAAAAhBAADQQQAAUEAAAAhBAADQQQAAqEAAAEDBAAA8QgAAqEAAAEDBAAA8QgAAoEAAAEDBAADQQQAAoEAAAEDBAAA6QgAAUEAAAAhBAAA6QgAAQEAAAAhBAAA6QgAAQEAAAJhBAAA6QgAAUEAAAJhBAAAgQgAAUEAAAAhBAAAgQgAAQEAAAAhBAAAgQgAAQEAAAHBBAAAgQgAAUEAAAHBBAAAgQgAAUEAAAAhBAABuQgAAUEAAAAhBAABuQgAAQEAAAAhBAAAgQgAAQEAAAAhBAAA+QgAAUEAAAEDBAAA+QgAAQEAAAEDBAAA+QgAAQEAAAABBAAA+QgAAUEAAAABBAAB+QgAAUEAAAIzBAAB+QgAAQEAAAIzBAAB+QgAAQEAAAMDAAAB+QgAAUEAAAMDAAAA8QgAAUEAAAEDBAAB8QgAAUEAAAEDBAAB8QgAAQEAAAEDBAAA8QgAAQEAAAEDBAAB+QgAAUEAAAIjBAACNQgAAUEAAAIjBAACNQgAAQEAAAIjBAAB+QgAAQEAAAIjB////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACgwAAAUEAAAChBAACgwAAAUEAAApDAAACgwAAAQEAAApDAAACgwAAAQEAAAChBAAAgQQAAQEAAAIDAAP6fwAAAQEAAAIDAAP6fwAAAUEAAAIDAAAAgQQAAUEAAAIDAAADMQQAAQEAAAIDAAAAoQQAAQEAAAIDAAAAoQQAAUEAAAIDAAADMQQAAUEAAAIDAAACwwAAAQEAAAMC/AAEowQAAQEAAAMC/AAEowQAAUEAAAMC/AACwwAAAUEAAAMC/AAAowQAAUEAAAKBAAAAowQAAUEAA+P+/AAAowQAAQEAA+P+/AAAowQAAQEAAAKBAAAAAQAAAUEAAAFBBAAAAQAAAUEAAAChBAAAAQAAAQEAAAChBAAAAQAAAQEAAAFBBAADQQQAAUEAAAAhBAADQQQAAUEAAAETBAADQQQAAQEAAAETBAADQQQAAQEAAAAhBAAA8QgAAoEAAAEDBAADQQQAAoEAAAEDBAADQQQAAqEAAAEDBAAA8QgAAqEAAAEDBAAA6QgAAUEAAAJhBAAA6QgAAUEAAAAhBAAA6QgAAQEAAAAhBAAA6QgAAQEAAAJhBAAAgQgAAUEAAAHBBAAAgQgAAUEAAAAhBAAAgQgAAQEAAAAhBAAAgQgAAQEAAAHBBAABuQgAAQEAAAAhBAAAgQgAAQEAAAAhBAAAgQgAAUEAAAAhBAABuQgAAUEAAAAhBAAA+QgAAUEAAAABBAAA+QgAAUEAAAEDBAAA+QgAAQEAAAEDBAAA+QgAAQEAAAABBAAB+QgAAUEAAAMDAAAB+QgAAUEAAAIzBAAB+QgAAQEAAAIzBAAB+QgAAQEAAAMDAAAB8QgAAQEAAAEDBAAA8QgAAQEAAAEDBAAA8QgAAUEAAAEDBAAB8QgAAUEAAAEDBAACNQgAAQEAAAIjBAAB+QgAAQEAAAIjBAAB+QgAAUEAAAIjBAACNQgAAUEAAAIjB////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v////3//////////f/////////9//////////3//////////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+/") }, { "aabb": AABB(33, 0.5, -12.5, 30.5, 2.5, 25), -"attribute_data": PackedByteArray("AABIwQAADMIAAEDBAAAMwgAAQMEAAATCAABIwQAABMIAABDCAACgvwAAEMIAAIC/AAAewgAAgL8AAB7CAACgvwAAwEAAAKC/AADIQAAAoL8AAMhAAACAvwAAwEAAAIC/AADAwAAAHsIAAMDAAAAQwgAAyMAAABDCAADIwAAAHsIAAMBAAAAewgAAyEAAAB7CAADIQAAAEMIAAMBAAAAQwgAAwMAAAKC/AADAwAAAgL8AAMjAAACAvwAAyMAAAKC/AAAQQgAAoL8AAB5CAACgvwAAHkIAAIC/AAAQQgAAgL8AADLCAACgvwAAMsIAAIC/AAA6wgAAgL8AADrCAACgvwAAgEAAAKC/AACIQAAAoL8AAIhAAACAvwAAgEAAAIC/AACAwAAAOsIAAIDAAAAywgAAiMAAADLCAACIwAAAOsIAAIBAAAA6wgAAiEAAADrCAACIQAAAMsIAAIBAAAAywgAAgMAAAKC/AACAwAAAgL8AAIjAAACAvwAAiMAAAKC/AAAyQgAAoL8AADpCAACgvwAAOkIAAIC/AAAyQgAAgL8AADLCAACgvwAAMsIAAIC/AAA6wgAAgL8AADrCAACgvwAAgD8AAKC/AACgPwAAoL8AAKA/AACAvwAAgD8AAIC/AACAvwAAOsIAAIC/AAAywgAAoL8AADLCAACgvwAAOsIAAIA/AAA6wgAAoD8AADrCAACgPwAAMsIAAIA/AAAywgAAgL8AAKC/AACAvwAAgL8AAKC/AACAvwAAoL8AAKC/AAAyQgAAoL8AADpCAACgvwAAOkIAAIC/AAAyQgAAgL8AACjCAACAvwAAKMIAAAC/AAAwwgAAAL8AADDCAACAvwAAAEEAAIC/AAAIQQAAgL8AAAhBAAAAvwAAAEEAAAC/AAAAwQAAMMIAAADBAAAowgAACMEAACjCAAAIwQAAMMIAAABBAAAwwgAACEEAADDCAAAIQQAAKMIAAABBAAAowgAAAMEAAIC/AAAAwQAAAL8AAAjBAAAAvwAACMEAAIC/AAAoQgAAgL8AADBCAACAvwAAMEIAAAC/AAAoQgAAAL8AADjCAACAvwAAOMIAAAC/AAA6wgAAAL8AADrCAACAvwAAIEEAAIC/AABAQQAAgL8AAEBBAAAAvwAAIEEAAAC/AAA6wgAAIEEAADjCAAAgQQAAOMIAAEBBAAA6wgAAQEEAADpCAAAgQQAAOkIAAEBBAAA4QgAAQEEAADhCAAAgQQAAIMEAAIC/AAAgwQAAAL8AAEDBAAAAvwAAQMEAAIC/AAA4QgAAgL8AADpCAACAvwAAOkIAAAC/AAA4QgAAAL8AAGDCAACAvwAAYMIAAAC/AABowgAAAL8AAGjCAACAvwAAAEEAAIC/AAAIQQAAgL8AAAhBAAAAvwAAAEEAAAC/AAAAwQAAaMIAAADBAABgwgAACMEAAGDCAAAIwQAAaMIAAABBAABowgAACEEAAGjCAAAIQQAAYMIAAABBAABgwgAAAMEAAIC/AAAAwQAAAL8AAAjBAAAAvwAACMEAAIC/AABgQgAAgL8AAGhCAACAvwAAaEIAAAC/AABgQgAAAL8AAHzCAACAvwAAfMIAAAC/AAB+wgAAAL8AAH7CAACAvwAAMMEAAIC/AAAQwQAAgL8AABDBAAAAvwAAMMEAAAC/AAB+wgAAMMEAAHzCAAAwwQAAfMIAABDBAAB+wgAAEMEAAH5CAAAwwQAAfkIAABDBAAB8QgAAEMEAAHxCAAAwwQAAMEEAAIC/AAAwQQAAAL8AABBBAAAAvwAAEEEAAIC/AAB8QgAAgL8AAH5CAACAvwAAfkIAAAC/AAB8QgAAAL8="), +"attribute_data": PackedByteArray("AABAwQAABMIAAEjBAAAEwgAASMEAAAzCAABAwQAADMIAAB7CAACgvwAAEMIAAKC/AAAQwgAAgL8AAB7CAACAvwAAyEAAAIC/AADAQAAAgL8AAMBAAACgvwAAyEAAAKC/AADIwAAAEMIAAMjAAAAewgAAwMAAAB7CAADAwAAAEMIAAMhAAAAQwgAAwEAAABDCAADAQAAAHsIAAMhAAAAewgAAyMAAAKC/AADAwAAAoL8AAMDAAACAvwAAyMAAAIC/AAAeQgAAgL8AABBCAACAvwAAEEIAAKC/AAAeQgAAoL8AADrCAACgvwAAMsIAAKC/AAAywgAAgL8AADrCAACAvwAAiEAAAIC/AACAQAAAgL8AAIBAAACgvwAAiEAAAKC/AACIwAAAMsIAAIjAAAA6wgAAgMAAADrCAACAwAAAMsIAAIhAAAAywgAAgEAAADLCAACAQAAAOsIAAIhAAAA6wgAAiMAAAKC/AACAwAAAoL8AAIDAAACAvwAAiMAAAIC/AAA6QgAAgL8AADJCAACAvwAAMkIAAKC/AAA6QgAAoL8AADrCAACgvwAAMsIAAKC/AAAywgAAgL8AADrCAACAvwAAoD8AAIC/AACAPwAAgL8AAIA/AACgvwAAoD8AAKC/AACgvwAAMsIAAKC/AAA6wgAAgL8AADrCAACAvwAAMsIAAKA/AAAywgAAgD8AADLCAACAPwAAOsIAAKA/AAA6wgAAoL8AAKC/AACAvwAAoL8AAIC/AACAvwAAoL8AAIC/AAA6QgAAgL8AADJCAACAvwAAMkIAAKC/AAA6QgAAoL8AADDCAACAvwAAKMIAAIC/AAAowgAAAL8AADDCAAAAvwAACEEAAAC/AAAAQQAAAL8AAABBAACAvwAACEEAAIC/AAAIwQAAKMIAAAjBAAAwwgAAAMEAADDCAAAAwQAAKMIAAAhBAAAowgAAAEEAACjCAAAAQQAAMMIAAAhBAAAwwgAACMEAAIC/AAAAwQAAgL8AAADBAAAAvwAACMEAAAC/AAAwQgAAAL8AAChCAAAAvwAAKEIAAIC/AAAwQgAAgL8AADrCAACAvwAAOMIAAIC/AAA4wgAAAL8AADrCAAAAvwAAQEEAAAC/AAAgQQAAAL8AACBBAACAvwAAQEEAAIC/AAA4wgAAQEEAADrCAABAQQAAOsIAACBBAAA4wgAAIEEAADhCAABAQQAAOEIAACBBAAA6QgAAIEEAADpCAABAQQAAQMEAAIC/AAAgwQAAgL8AACDBAAAAvwAAQMEAAAC/AAA6QgAAAL8AADhCAAAAvwAAOEIAAIC/AAA6QgAAgL8AAGjCAACAvwAAYMIAAIC/AABgwgAAAL8AAGjCAAAAvwAACEEAAAC/AAAAQQAAAL8AAABBAACAvwAACEEAAIC/AAAIwQAAYMIAAAjBAABowgAAAMEAAGjCAAAAwQAAYMIAAAhBAABgwgAAAEEAAGDCAAAAQQAAaMIAAAhBAABowgAACMEAAIC/AAAAwQAAgL8AAADBAAAAvwAACMEAAAC/AABoQgAAAL8AAGBCAAAAvwAAYEIAAIC/AABoQgAAgL8AAH7CAACAvwAAfMIAAIC/AAB8wgAAAL8AAH7CAAAAvwAAEMEAAAC/AP8vwQAAAL8A/y/BAACAvwAAEMEAAIC/AAB8wgAAEMEAAH7CAAAQwQAAfsIA/y/BAAB8wgD/L8EAAHxCAAAQwQAAfEIA/y/BAAB+QgD/L8EAAH5CAAAQwQAAEEEAAIC/AP8vQQAAgL8A/y9BAAAAvwAAEEEAAAC/AAB+QgAAAL8AAHxCAAAAvwAAfEIAAIC/AAB+QgAAgL8="), "format": 34359742487, "index_count": 258, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsAPAA9AD4APAA+AD8AQABBAEIAQABCAEMARABFAEYARABGAEcASABJAEoASABKAEsATABNAE4ATABOAE8AUABRAFIAUABSAFMAVABVAFYAVABWAFcAWABZAFoAWABaAFsAXABdAF4AXABeAF8AYABhAGIAYABiAGMAZABlAGYAZABmAGcAaABpAGoAaABqAGsAbABtAG4AbABuAG8AcABxAHIAcAByAHMAdAB1AHYAdAB2AHcAeAB5AHoAeAB6AHsAfAB9AH4AfAB+AH8AgACBAIIAgACCAIMAhACFAIYAhACGAIcAiACJAIoAiACKAIsAjACNAI4AjACOAI8AkACRAJIAkACSAJMAlACVAJYAlACWAJcAmACZAJoAmACaAJsAnACdAJ4AnACeAJ8AoAChAKIAoACiAKMApAClAKYApACmAKcAqACpAKoAqACqAKsA"), @@ -169,10 +169,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 172, -"vertex_data": PackedByteArray("AAAMQgAAQEAAAEjBAAAMQgAAQEAAAEDBAAAEQgAAQEAAAEDBAAAEQgAAQEAAAEjBAAAQQgAAwD8AAMBAAAAQQgAAoD8AAMBAAAAeQgAAoD8AAMBAAAAeQgAAwD8AAMBAAAAQQgAAwD8AAMBAAAAQQgAAwD8AAMhAAAAQQgAAoD8AAMhAAAAQQgAAoD8AAMBAAAAeQgAAoD8AAMBAAAAQQgAAoD8AAMBAAAAQQgAAoD8AAMhAAAAeQgAAoD8AAMhAAAAeQgAAwD8AAMBAAAAeQgAAwD8AAMhAAAAQQgAAwD8AAMhAAAAQQgAAwD8AAMBAAAAeQgAAwD8AAMBAAAAeQgAAoD8AAMBAAAAeQgAAoD8AAMhAAAAeQgAAwD8AAMhAAAAQQgAAwD8AAMhAAAAeQgAAwD8AAMhAAAAeQgAAoD8AAMhAAAAQQgAAoD8AAMhAAAA0QgAAwD8AAHBAAAA0QgAAoD8AAHBAAAA8QgAAoD8AAHBAAAA8QgAAwD8AAHBAAAA0QgAAwD8AAHBAAAA0QgAAwD8AAIBAAAA0QgAAoD8AAIBAAAA0QgAAoD8AAHBAAAA8QgAAoD8AAHBAAAA0QgAAoD8AAHBAAAA0QgAAoD8AAIBAAAA8QgAAoD8AAIBAAAA8QgAAwD8AAHBAAAA8QgAAwD8AAIBAAAA0QgAAwD8AAIBAAAA0QgAAwD8AAHBAAAA8QgAAwD8AAHBAAAA8QgAAoD8AAHBAAAA8QgAAoD8AAIBAAAA8QgAAwD8AAIBAAAA0QgAAwD8AAIBAAAA8QgAAwD8AAIBAAAA8QgAAoD8AAIBAAAA0QgAAoD8AAIBAAAA0QgAAwD8AAIA/AAA0QgAAoD8AAIA/AAA8QgAAoD8AAIA/AAA8QgAAwD8AAIA/AAA0QgAAwD8AAIA/AAA0QgAAwD8AAKA/AAA0QgAAoD8AAKA/AAA0QgAAoD8AAIA/AAA8QgAAoD8AAIA/AAA0QgAAoD8AAIA/AAA0QgAAoD8AAKA/AAA8QgAAoD8AAKA/AAA8QgAAwD8AAIA/AAA8QgAAwD8AAKA/AAA0QgAAwD8AAKA/AAA0QgAAwD8AAIA/AAA8QgAAwD8AAIA/AAA8QgAAoD8AAIA/AAA8QgAAoD8AAKA/AAA8QgAAwD8AAKA/AAA0QgAAwD8AAKA/AAA8QgAAwD8AAKA/AAA8QgAAoD8AAKA/AAA0QgAAoD8AAKA/AAAoQgAAgD8AAABBAAAoQgAAAD8AAABBAAAwQgAAAD8AAABBAAAwQgAAgD8AAABBAAAoQgAAgD8AAABBAAAoQgAAgD8AAAhBAAAoQgAAAD8AAAhBAAAoQgAAAD8AAABBAAAwQgAAAD8AAABBAAAoQgAAAD8AAABBAAAoQgAAAD8AAAhBAAAwQgAAAD8AAAhBAAAwQgAAgD8AAABBAAAwQgAAgD8AAAhBAAAoQgAAgD8AAAhBAAAoQgAAgD8AAABBAAAwQgAAgD8AAABBAAAwQgAAAD8AAABBAAAwQgAAAD8AAAhBAAAwQgAAgD8AAAhBAAAoQgAAgD8AAAhBAAAwQgAAgD8AAAhBAAAwQgAAAD8AAAhBAAAoQgAAAD8AAAhBAAA4QgAAgD8AAChBAAA4QgAAAD8AAChBAAA6QgAAAD8AAChBAAA6QgAAgD8AAChBAAA4QgAAgD8AAChBAAA4QgAAgD8AAEhBAAA4QgAAAD8AAEhBAAA4QgAAAD8AAChBAAA6QgAAAD8AAChBAAA4QgAAAD8AAChBAAA4QgAAAD8AAEhBAAA6QgAAAD8AAEhBAAA6QgAAgD8AAChBAAA6QgAAgD8AAEhBAAA4QgAAgD8AAEhBAAA4QgAAgD8AAChBAAA6QgAAgD8AAChBAAA6QgAAAD8AAChBAAA6QgAAAD8AAEhBAAA6QgAAgD8AAEhBAAA4QgAAgD8AAEhBAAA6QgAAgD8AAEhBAAA6QgAAAD8AAEhBAAA4QgAAAD8AAEhBAABeQgAAgD8AAABBAABeQgAAAD8AAABBAABmQgAAAD8AAABBAABmQgAAgD8AAABBAABeQgAAgD8AAABBAABeQgAAgD8AAAhBAABeQgAAAD8AAAhBAABeQgAAAD8AAABBAABmQgAAAD8AAABBAABeQgAAAD8AAABBAABeQgAAAD8AAAhBAABmQgAAAD8AAAhBAABmQgAAgD8AAABBAABmQgAAgD8AAAhBAABeQgAAgD8AAAhBAABeQgAAgD8AAABBAABmQgAAgD8AAABBAABmQgAAAD8AAABBAABmQgAAAD8AAAhBAABmQgAAgD8AAAhBAABeQgAAgD8AAAhBAABmQgAAgD8AAAhBAABmQgAAAD8AAAhBAABeQgAAAD8AAAhBAAB8QgAAgD8AADDBAAB8QgAAAD8AADDBAAB+QgAAAD8AADDBAAB+QgAAgD8AADDBAAB8QgAAgD8AADDBAAB8QgAAgD8AABDBAAB8QgAAAD8AABDBAAB8QgAAAD8AADDBAAB+QgAAAD8AADDBAAB8QgAAAD8AADDBAAB8QgAAAD8AABDBAAB+QgAAAD8AABDBAAB+QgAAgD8AADDBAAB+QgAAgD8AABDBAAB8QgAAgD8AABDBAAB8QgAAgD8AADDBAAB+QgAAgD8AADDBAAB+QgAAAD8AADDBAAB+QgAAAD8AABDBAAB+QgAAgD8AABDBAAB8QgAAgD8AABDBAAB+QgAAgD8AABDBAAB+QgAAAD8AABDBAAB8QgAAAD8AABDB/3////9//7//f////3//v/9/////f/+//3////9//7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//38AAAAA/7//f///////v/9///////+//3///////7//f///////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//38AAAAA/7//f///////v/9///////+//3///////7//f///////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////78=") +"vertex_data": PackedByteArray("AAAEQgAAQEAAAEDBAAAEQgAAQEAAAEjBAAAMQgAAQEAAAEjBAAAMQgAAQEAAAEDBAAAeQgAAwD8AAMBAAAAQQgAAwD8AAMBAAAAQQgAAoD8AAMBAAAAeQgAAoD8AAMBAAAAQQgAAoD8AAMhAAAAQQgAAoD8AAMBAAAAQQgAAwD8AAMBAAAAQQgAAwD8AAMhAAAAQQgAAoD8AAMhAAAAeQgAAoD8AAMhAAAAeQgAAoD8AAMBAAAAQQgAAoD8AAMBAAAAQQgAAwD8AAMhAAAAQQgAAwD8AAMBAAAAeQgAAwD8AAMBAAAAeQgAAwD8AAMhAAAAeQgAAwD8AAMhAAAAeQgAAwD8AAMBAAAAeQgAAoD8AAMBAAAAeQgAAoD8AAMhAAAAeQgAAoD8AAMhAAAAQQgAAoD8AAMhAAAAQQgAAwD8AAMhAAAAeQgAAwD8AAMhAAAA8QgAAwD8AAHBAAAA0QgAAwD8AAHBAAAA0QgAAoD8AAHBAAAA8QgAAoD8AAHBAAAA0QgAAoD8AAIBAAAA0QgAAoD8AAHBAAAA0QgAAwD8AAHBAAAA0QgAAwD8AAIBAAAA0QgAAoD8AAIBAAAA8QgAAoD8AAIBAAAA8QgAAoD8AAHBAAAA0QgAAoD8AAHBAAAA0QgAAwD8AAIBAAAA0QgAAwD8AAHBAAAA8QgAAwD8AAHBAAAA8QgAAwD8AAIBAAAA8QgAAwD8AAIBAAAA8QgAAwD8AAHBAAAA8QgAAoD8AAHBAAAA8QgAAoD8AAIBAAAA8QgAAoD8AAIBAAAA0QgAAoD8AAIBAAAA0QgAAwD8AAIBAAAA8QgAAwD8AAIBAAAA8QgAAwD8AAIA/AAA0QgAAwD8AAIA/AAA0QgAAoD8AAIA/AAA8QgAAoD8AAIA/AAA0QgAAoD8AAKA/AAA0QgAAoD8AAIA/AAA0QgAAwD8AAIA/AAA0QgAAwD8AAKA/AAA0QgAAoD8AAKA/AAA8QgAAoD8AAKA/AAA8QgAAoD8AAIA/AAA0QgAAoD8AAIA/AAA0QgAAwD8AAKA/AAA0QgAAwD8AAIA/AAA8QgAAwD8AAIA/AAA8QgAAwD8AAKA/AAA8QgAAwD8AAKA/AAA8QgAAwD8AAIA/AAA8QgAAoD8AAIA/AAA8QgAAoD8AAKA/AAA8QgAAoD8AAKA/AAA0QgAAoD8AAKA/AAA0QgAAwD8AAKA/AAA8QgAAwD8AAKA/AAAwQgAAgD8AAABBAAAoQgAAgD8AAABBAAAoQgAAAD8AAABBAAAwQgAAAD8AAABBAAAoQgAAAD8AAAhBAAAoQgAAAD8AAABBAAAoQgAAgD8AAABBAAAoQgAAgD8AAAhBAAAoQgAAAD8AAAhBAAAwQgAAAD8AAAhBAAAwQgAAAD8AAABBAAAoQgAAAD8AAABBAAAoQgAAgD8AAAhBAAAoQgAAgD8AAABBAAAwQgAAgD8AAABBAAAwQgAAgD8AAAhBAAAwQgAAgD8AAAhBAAAwQgAAgD8AAABBAAAwQgAAAD8AAABBAAAwQgAAAD8AAAhBAAAwQgAAAD8AAAhBAAAoQgAAAD8AAAhBAAAoQgAAgD8AAAhBAAAwQgAAgD8AAAhBAAA6QgAAgD8AAChBAAA4QgAAgD8AAChBAAA4QgAAAD8AAChBAAA6QgAAAD8AAChBAAA4QgAAAD8AAEhBAAA4QgAAAD8AAChBAAA4QgAAgD8AAChBAAA4QgAAgD8AAEhBAAA4QgAAAD8AAEhBAAA6QgAAAD8AAEhBAAA6QgAAAD8AAChBAAA4QgAAAD8AAChBAAA4QgAAgD8AAEhBAAA4QgAAgD8AAChBAAA6QgAAgD8AAChBAAA6QgAAgD8AAEhBAAA6QgAAgD8AAEhBAAA6QgAAgD8AAChBAAA6QgAAAD8AAChBAAA6QgAAAD8AAEhBAAA6QgAAAD8AAEhBAAA4QgAAAD8AAEhBAAA4QgAAgD8AAEhBAAA6QgAAgD8AAEhBAABmQgAAgD8AAABBAABeQgAAgD8AAABBAABeQgAAAD8AAABBAABmQgAAAD8AAABBAABeQgAAAD8AAAhBAABeQgAAAD8AAABBAABeQgAAgD8AAABBAABeQgAAgD8AAAhBAABeQgAAAD8AAAhBAABmQgAAAD8AAAhBAABmQgAAAD8AAABBAABeQgAAAD8AAABBAABeQgAAgD8AAAhBAABeQgAAgD8AAABBAABmQgAAgD8AAABBAABmQgAAgD8AAAhBAABmQgAAgD8AAAhBAABmQgAAgD8AAABBAABmQgAAAD8AAABBAABmQgAAAD8AAAhBAABmQgAAAD8AAAhBAABeQgAAAD8AAAhBAABeQgAAgD8AAAhBAABmQgAAgD8AAAhBAAB+QgAAgD8AADDBAAB8QgAAgD8AADDBAAB8QgAAAD8AADDBAAB+QgAAAD8AADDBAAB8QgAAAD8AABDBAAB8QgAAAD8A/y/BAAB8QgAAgD8A/y/BAAB8QgAAgD8AABDBAAB8QgAAAD8AABDBAAB+QgAAAD8AABDBAAB+QgAAAD8A/y/BAAB8QgAAAD8A/y/BAAB8QgAAgD8AABDBAAB8QgAAgD8A/y/BAAB+QgAAgD8A/y/BAAB+QgAAgD8AABDBAAB+QgAAgD8AABDBAAB+QgAAgD8A/y/BAAB+QgAAAD8A/y/BAAB+QgAAAD8AABDBAAB+QgAAAD8AABDBAAB8QgAAAD8AABDBAAB8QgAAgD8AABDBAAB+QgAAgD8AABDB/3////9//7//f////3//v/9/////f/+//3////9//7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//38AAAAA/7//f///////v/9///////+//3///////7//f///////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////7//////AAD/v/////8AAP+//////wAA/7//////AAD/vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//38AAAAA/7//f///////v/9///////+//3///////7//f///////v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////78=") }, { "aabb": AABB(33, 1, -12, 2, 2, 1e-05), -"attribute_data": PackedByteArray("AAAGQgAAQMAAAA5CAABAwAAADkIAAIC/AAAGQgAAgL8="), +"attribute_data": PackedByteArray("AAAOQgAAgL8AAAZCAACAvwAABkIAAEDAAAAOQgAAQMA="), "format": 34359742487, "index_count": 6, "index_data": PackedByteArray("AAABAAIAAAACAAMA"), @@ -181,10 +181,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 4, -"vertex_data": PackedByteArray("AAAEQgAAQEAAAEDBAAAMQgAAQEAAAEDBAAAMQgAAgD8AAEDBAAAEQgAAgD8AAEDB/3//f////7//f/9/////v/9//3////+//3//f////78=") +"vertex_data": PackedByteArray("AAAMQgAAgD8AAEDBAAAEQgAAgD8AAEDBAAAEQgAAQEAAAEDBAAAMQgAAQEAAAEDB/3//f////7//f/9/////v/9//3////+//3//f////78=") }, { "aabb": AABB(26, -0.5, -21.5, 21, 5.5, 23.5), -"attribute_data": PackedByteArray("AACEwQAAQL8AAITBAACAvgAAoMEAAIC+AACgwQAAQL8AACDAAABAvwAAEMAAAEC/AAAQwAAAgL4AACDAAACAvgAAIEAAAKDBAAAgQAAAhMEAABBAAACEwQAAEEAAAKDBAAAgwAAAoMEAABDAAACgwQAAEMAAAITBAAAgwAAAhMEAACBAAABAvwAAIEAAAIC+AAAQQAAAgL4AABBAAABAvwAAhEEAAEC/AACgQQAAQL8AAKBBAACAvgAAhEEAAIC+AACEwQAAQL8AAITBAACAvgAAoMEAAIC+AACgwQAAQL8AAAA/AABAvwAAQD8AAEC/AABAPwAAgL4AAAA/AACAvgAAAL8AAKDBAAAAvwAAhMEAAEC/AACEwQAAQL8AAKDBAAAAPwAAoMEAAEA/AACgwQAAQD8AAITBAAAAPwAAhMEAAAC/AABAvwAAAL8AAIC+AABAvwAAgL4AAEC/AABAvwAAhEEAAEC/AACgQQAAQL8AAKBBAACAvgAAhEEAAIC+AACCwQAAQL8AAILBAACAvgAAhMEAAIC+AACEwQAAQL8AACDAAABAvwAAgD8AAEC/AACAPwAAgL4AACDAAACAvgAAhEEAACBAAACCQQAAIEAAAIJBAACAvwAAhEEAAIC/AACEwQAAIEAAAITBAACAvwAAgsEAAIC/AACCwQAAIEAAACBAAABAvwAAIEAAAIC+AACAvwAAgL4AAIC/AABAvwAAgkEAAEC/AACEQQAAQL8AAIRBAACAvgAAgkEAAIC+AACiwQAAQL8AAKLBAACAvgAApMEAAIC+AACkwQAAQL8AACDAAABAvwAAgD8AAEC/AACAPwAAgL4AACDAAACAvgAApEEAACBAAACiQQAAIEAAAKJBAACAvwAApEEAAIC/AACkwQAAIEAAAKTBAACAvwAAosEAAIC/AACiwQAAIEAAACBAAABAvwAAIEAAAIC+AACAvwAAgL4AAIC/AABAvwAAokEAAEC/AACkQQAAQL8AAKRBAACAvgAAokEAAIC+AACQQQAAAMAAAMBBAAAAwAAAwEEAAIC/AACQQQAAgL8AAFhBAAAAwAAAiEEAAADAAACIQQAAgL8AAFhBAACAvwAAgEEAAADAAACcQQAAAMAAAJxBAACAvwAAgEEAAIC/"), +"attribute_data": PackedByteArray("AACgwQAAQL8AAITBAABAvwAAhMEAAIC+AACgwQAAgL4AABDAAACAvgD+H8AAAIC+AP4fwAAAQL8AABDAAABAvwAAEEAAAITBAAAQQAAAoMEA/h9AAACgwQD+H0AAAITBAAAQwAAAhMEA/h/AAACEwQD+H8AAAKDBAAAQwAAAoMEAABBAAABAvwD+H0AAAEC/AP4fQAAAgL4AABBAAACAvgAAoEEAAIC+AACEQQAAgL4AAIRBAABAvwAAoEEAAEC/AACgwQAAQL8AAITBAABAvwAAhMEAAIC+AACgwQAAgL4AAEA/AACAvgAAAD8AAIC+AAAAPwAAQL8AAEA/AABAvwAAQL8AAITBAABAvwAAoMEAAAC/AACgwQAAAL8AAITBAABAPwAAhMEAAAA/AACEwQAAAD8AAKDBAABAPwAAoMEAAEC/AABAvwAAAL8AAEC/AAAAvwAAgL4AAEC/AACAvgAAoEEAAIC+AACEQQAAgL4AAIRBAABAvwAAoEEAAEC/AACEwQAAQL8AAILBAABAvwAAgsEAAIC+AACEwQAAgL4AAIA/AACAvgD+H8AAAIC+AP4fwAAAQL8AAIA/AABAvwAAgkEAAIC/AACEQQAAgL8AAIRBAP4fQAAAgkEA/h9AAACCwQAAgL8AAILBAP4fQAAAhMEA/h9AAACEwQAAgL8AAIC/AABAvwD+H0AAAEC/AP4fQAAAgL4AAIC/AACAvgAAhEEAAIC+AACCQQAAgL4AAIJBAABAvwAAhEEAAEC/AACkwQAAQL8AAKLBAABAvwAAosEAAIC+AACkwQAAgL4AAIA/AACAvgD+H8AAAIC+AP4fwAAAQL8AAIA/AABAvwAAokEAAIC/AACkQQAAgL8AAKRBAP4fQAAAokEA/h9AAACiwQAAgL8AAKLBAP4fQAAApMEA/h9AAACkwQAAgL8AAIC/AABAvwD+H0AAAEC/AP4fQAAAgL4AAIC/AACAvgAApEEAAIC+AACiQQAAgL4AAKJBAABAvwAApEEAAEC/AADAQQAAgL8AAJBBAACAvwAAkEEAAADAAADAQQAAAMAAAIhBAACAvwAAWEEAAIC/AABYQQAAAMAAAIhBAAAAwAAAnEEAAIC/AACAQQAAgL8AAIBBAAAAwAAAnEEAAADA"), "format": 34359742487, "index_count": 162, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsAPAA9AD4APAA+AD8AQABBAEIAQABCAEMARABFAEYARABGAEcASABJAEoASABKAEsATABNAE4ATABOAE8AUABRAFIAUABSAFMAVABVAFYAVABWAFcAWABZAFoAWABaAFsAXABdAF4AXABeAF8AYABhAGIAYABiAGMAZABlAGYAZABmAGcAaABpAGoAaABqAGsA"), @@ -193,10 +193,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 108, -"vertex_data": PackedByteArray("AAAEQgAAAD8AAKDAAAAEQgAAAL8AAKDAAAAgQgAAAL8AAKDAAAAgQgAAAD8AAKDAAAAEQgAAAD8AAKDAAAAEQgAAAD8AAJDAAAAEQgAAAL8AAJDAAAAEQgAAAL8AAKDAAAAgQgAAAL8AAKDAAAAEQgAAAL8AAKDAAAAEQgAAAL8AAJDAAAAgQgAAAL8AAJDAAAAgQgAAAD8AAKDAAAAgQgAAAD8AAJDAAAAEQgAAAD8AAJDAAAAEQgAAAD8AAKDAAAAgQgAAAD8AAKDAAAAgQgAAAL8AAKDAAAAgQgAAAL8AAJDAAAAgQgAAAD8AAJDAAAAEQgAAAD8AAJDAAAAgQgAAAD8AAJDAAAAgQgAAAL8AAJDAAAAEQgAAAL8AAJDAAAAEQgAAAD8AAIA/AAAEQgAAAL8AAIA/AAAgQgAAAL8AAIA/AAAgQgAAAD8AAIA/AAAEQgAAAD8AAIA/AAAEQgAAAD8AAMA/AAAEQgAAAL8AAMA/AAAEQgAAAL8AAIA/AAAgQgAAAL8AAIA/AAAEQgAAAL8AAIA/AAAEQgAAAL8AAMA/AAAgQgAAAL8AAMA/AAAgQgAAAD8AAIA/AAAgQgAAAD8AAMA/AAAEQgAAAD8AAMA/AAAEQgAAAD8AAIA/AAAgQgAAAD8AAIA/AAAgQgAAAL8AAIA/AAAgQgAAAL8AAMA/AAAgQgAAAD8AAMA/AAAEQgAAAD8AAMA/AAAgQgAAAD8AAMA/AAAgQgAAAL8AAMA/AAAEQgAAAL8AAMA/AAACQgAAAD8AAKDAAAACQgAAAL8AAKDAAAAEQgAAAL8AAKDAAAAEQgAAAD8AAKDAAAACQgAAAD8AAKDAAAACQgAAAD8AAABAAAACQgAAAL8AAABAAAACQgAAAL8AAKDAAAAEQgAAAL8AAKDAAAACQgAAAL8AAKDAAAACQgAAAL8AAABAAAAEQgAAAL8AAABAAAAEQgAAAD8AAKDAAAAEQgAAAD8AAABAAAACQgAAAD8AAABAAAACQgAAAD8AAKDAAAAEQgAAAD8AAKDAAAAEQgAAAL8AAKDAAAAEQgAAAL8AAABAAAAEQgAAAD8AAABAAAACQgAAAD8AAABAAAAEQgAAAD8AAABAAAAEQgAAAL8AAABAAAACQgAAAL8AAABAAAAgQgAAAD8AAKDAAAAgQgAAAL8AAKDAAAAiQgAAAL8AAKDAAAAiQgAAAD8AAKDAAAAgQgAAAD8AAKDAAAAgQgAAAD8AAABAAAAgQgAAAL8AAABAAAAgQgAAAL8AAKDAAAAiQgAAAL8AAKDAAAAgQgAAAL8AAKDAAAAgQgAAAL8AAABAAAAiQgAAAL8AAABAAAAiQgAAAD8AAKDAAAAiQgAAAD8AAABAAAAgQgAAAD8AAABAAAAgQgAAAD8AAKDAAAAiQgAAAD8AAKDAAAAiQgAAAL8AAKDAAAAiQgAAAL8AAABAAAAiQgAAAD8AAABAAAAgQgAAAD8AAABAAAAiQgAAAD8AAABAAAAiQgAAAL8AAABAAAAgQgAAAL8AAABAAAAMQgAAoEAAAEDBAAA8QgAAoEAAAEDBAAA8QgAAQEAAAEDBAAAMQgAAQEAAAEDBAADQQQAAoEAAAEDBAAAEQgAAoEAAAEDBAAAEQgAAQEAAAEDBAADQQQAAQEAAAEDBAAD4QQAAoEAAAKzBAAAYQgAAoEAAAKzBAAAYQgAAQEAAAKzBAAD4QQAAQEAAAKzB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD///+//38AAP///7//fwAA////v/9/AAD///+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD///+//38AAP///7//fwAA////v/9/AAD///+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AAAgQgAAAD8AAKDAAAAEQgAAAD8AAKDAAAAEQgAAAL8AAKDAAAAgQgAAAL8AAKDAAAAEQgAAAL8AAJDAAAAEQgAAAL8A/p/AAAAEQgAAAD8A/p/AAAAEQgAAAD8AAJDAAAAEQgAAAL8AAJDAAAAgQgAAAL8AAJDAAAAgQgAAAL8A/p/AAAAEQgAAAL8A/p/AAAAEQgAAAD8AAJDAAAAEQgAAAD8A/p/AAAAgQgAAAD8A/p/AAAAgQgAAAD8AAJDAAAAgQgAAAD8AAJDAAAAgQgAAAD8A/p/AAAAgQgAAAL8A/p/AAAAgQgAAAL8AAJDAAAAgQgAAAL8AAJDAAAAEQgAAAL8AAJDAAAAEQgAAAD8AAJDAAAAgQgAAAD8AAJDAAAAgQgAAAD8AAIA/AAAEQgAAAD8AAIA/AAAEQgAAAL8AAIA/AAAgQgAAAL8AAIA/AAAEQgAAAL8AAMA/AAAEQgAAAL8AAIA/AAAEQgAAAD8AAIA/AAAEQgAAAD8AAMA/AAAEQgAAAL8AAMA/AAAgQgAAAL8AAMA/AAAgQgAAAL8AAIA/AAAEQgAAAL8AAIA/AAAEQgAAAD8AAMA/AAAEQgAAAD8AAIA/AAAgQgAAAD8AAIA/AAAgQgAAAD8AAMA/AAAgQgAAAD8AAMA/AAAgQgAAAD8AAIA/AAAgQgAAAL8AAIA/AAAgQgAAAL8AAMA/AAAgQgAAAL8AAMA/AAAEQgAAAL8AAMA/AAAEQgAAAD8AAMA/AAAgQgAAAD8AAMA/AAAEQgAAAD8AAKDAAAACQgAAAD8AAKDAAAACQgAAAL8AAKDAAAAEQgAAAL8AAKDAAAACQgAAAL8AAABAAAACQgAAAL8A/p/AAAACQgAAAD8A/p/AAAACQgAAAD8AAABAAAACQgAAAL8AAABAAAAEQgAAAL8AAABAAAAEQgAAAL8A/p/AAAACQgAAAL8A/p/AAAACQgAAAD8AAABAAAACQgAAAD8A/p/AAAAEQgAAAD8A/p/AAAAEQgAAAD8AAABAAAAEQgAAAD8AAABAAAAEQgAAAD8A/p/AAAAEQgAAAL8A/p/AAAAEQgAAAL8AAABAAAAEQgAAAL8AAABAAAACQgAAAL8AAABAAAACQgAAAD8AAABAAAAEQgAAAD8AAABAAAAiQgAAAD8AAKDAAAAgQgAAAD8AAKDAAAAgQgAAAL8AAKDAAAAiQgAAAL8AAKDAAAAgQgAAAL8AAABAAAAgQgAAAL8A/p/AAAAgQgAAAD8A/p/AAAAgQgAAAD8AAABAAAAgQgAAAL8AAABAAAAiQgAAAL8AAABAAAAiQgAAAL8A/p/AAAAgQgAAAL8A/p/AAAAgQgAAAD8AAABAAAAgQgAAAD8A/p/AAAAiQgAAAD8A/p/AAAAiQgAAAD8AAABAAAAiQgAAAD8AAABAAAAiQgAAAD8A/p/AAAAiQgAAAL8A/p/AAAAiQgAAAL8AAABAAAAiQgAAAL8AAABAAAAgQgAAAL8AAABAAAAgQgAAAD8AAABAAAAiQgAAAD8AAABAAAA8QgAAQEAAAEDBAAAMQgAAQEAAAEDBAAAMQgAAoEAAAEDBAAA8QgAAoEAAAEDBAAAEQgAAQEAAAEDBAADQQQAAQEAAAEDBAADQQQAAoEAAAEDBAAAEQgAAoEAAAEDBAAAYQgAAQEAAAKzBAAD4QQAAQEAAAKzBAAD4QQAAoEAAAKzBAAAYQgAAoEAAAKzB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD///+//38AAP///7//fwAA////v/9/AAD///+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD///+//38AAP///7//fwAA////v/9/AAD///+//3///wAA/7//f///AAD/v/9///8AAP+//3///wAA/7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+//3//f////7//f/9/////v/9//3////+/") }, { "aabb": AABB(49.75, 1, 8.5, 1.75, 2, 10), -"attribute_data": PackedByteArray("AABNwgAAwL8AAE3CAAAAvwAATsIAAAC/AABOwgAAwL8AAAhBAADAvwAAWEEAAMC/AABYQQAAAL8AAAhBAAAAvwAACMEAAM7BAAAIwQAAzcEAAFjBAADNwQAAWMEAAM7BAAAIQQAAzsEAAFhBAADOwQAAWEEAAM3BAAAIQQAAzcEAAAjBAADAvwAACMEAAAC/AABYwQAAAL8AAFjBAADAvwAATUIAAMC/AABOQgAAwL8AAE5CAAAAvwAATUIAAAC/AABNwgAAwL8AAE3CAAAAvwAATsIAAAC/AABOwgAAwL8AAHhBAADAvwAAlEEAAMC/AACUQQAAAL8AAHhBAAAAvwAAeMEAAM7BAAB4wQAAzcEAAJTBAADNwQAAlMEAAM7BAAB4QQAAzsEAAJRBAADOwQAAlEEAAM3BAAB4QQAAzcEAAHjBAADAvwAAeMEAAAC/AACUwQAAAL8AAJTBAADAvwAATUIAAMC/AABOQgAAwL8AAE5CAAAAvwAATUIAAAC/AABJwgAAYL8AAEnCAABAvwAASsIAAEC/AABKwgAAYL8AAAhBAABgvwAAIEEAAGC/AAAgQQAAQL8AAAhBAABAvwAACMEAAM7BAAAIwQAAzcEAACDBAADNwQAAIMEAAM7BAAAIQQAAzsEAACBBAADOwQAAIEEAAM3BAAAIQQAAzcEAAAjBAABgvwAACMEAAEC/AAAgwQAAQL8AACDBAABgvwAASUIAAGC/AABKQgAAYL8AAEpCAABAvwAASUIAAEC/AABHwgAAQL8AAEfCAAAAvwAASMIAAAC/AABIwgAAQL8AABxBAABAvwAAIEEAAEC/AAAgQQAAAL8AABxBAAAAvwAAHMEAAMjBAAAcwQAAx8EAACDBAADHwQAAIMEAAMjBAAAcQQAAyMEAACBBAADIwQAAIEEAAMfBAAAcQQAAx8EAABzBAABAvwAAHMEAAAC/AAAgwQAAAL8AACDBAABAvwAAR0IAAEC/AABIQgAAQL8AAEhCAAAAvwAAR0IAAAC/"), +"attribute_data": PackedByteArray("AABOwgAAwL8AAE3CAADAvwAATcIAAAC/AABOwgAAAL8AAFhBAAAAvwAACEEAAAC/AAAIQQAAwL8AAFhBAADAvwAAWMEAAM3BAABYwQAAzsEAAAjBAADOwQAACMEAAM3BAABYQQAAzcEAAAhBAADNwQAACEEAAM7BAABYQQAAzsEAAFjBAADAvwAACMEAAMC/AAAIwQAAAL8AAFjBAAAAvwAATkIAAAC/AABNQgAAAL8AAE1CAADAvwAATkIAAMC/AABOwgAAwL8AAE3CAADAvwAATcIAAAC/AABOwgAAAL8AAJRBAAAAvwAAeEEAAAC/AAB4QQAAwL8AAJRBAADAvwAAlMEAAM3BAACUwQAAzsEAAHjBAADOwQAAeMEAAM3BAACUQQAAzcEAAHhBAADNwQAAeEEAAM7BAACUQQAAzsEAAJTBAADAvwAAeMEAAMC/AAB4wQAAAL8AAJTBAAAAvwAATkIAAAC/AABNQgAAAL8AAE1CAADAvwAATkIAAMC/AABKwgAAYL8AAEnCAABgvwAAScIAAEC/AABKwgAAQL8AACBBAABAvwAACEEAAEC/AAAIQQAAYL8AACBBAABgvwAAIMEAAM3BAAAgwQAAzsEAAAjBAADOwQAACMEAAM3BAAAgQQAAzcEAAAhBAADNwQAACEEAAM7BAAAgQQAAzsEAACDBAABgvwAACMEAAGC/AAAIwQAAQL8AACDBAABAvwAASkIAAEC/AABJQgAAQL8AAElCAABgvwAASkIAAGC/AABIwgAAQL8AAEfCAABAvwAAR8IAAAC/AABIwgAAAL8AACBBAAAAvwAAHEEAAAC/AAAcQQAAQL8AACBBAABAvwAAIMEAAMfBAAAgwQAAyMEAABzBAADIwQAAHMEAAMfBAAAgQQAAx8EAABxBAADHwQAAHEEAAMjBAAAgQQAAyMEAACDBAABAvwAAHMEAAEC/AAAcwQAAAL8AACDBAAAAvwAASEIAAAC/AABHQgAAAL8AAEdCAABAvwAASEIAAEC/"), "format": 34359742487, "index_count": 144, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsAPAA9AD4APAA+AD8AQABBAEIAQABCAEMARABFAEYARABGAEcASABJAEoASABKAEsATABNAE4ATABOAE8AUABRAFIAUABSAFMAVABVAFYAVABWAFcAWABZAFoAWABaAFsAXABdAF4AXABeAF8A"), @@ -205,10 +205,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 96, -"vertex_data": PackedByteArray("AABNQgAAQEAAAAhBAABNQgAAgD8AAAhBAABOQgAAgD8AAAhBAABOQgAAQEAAAAhBAABNQgAAQEAAAAhBAABNQgAAQEAAAFhBAABNQgAAgD8AAFhBAABNQgAAgD8AAAhBAABOQgAAgD8AAAhBAABNQgAAgD8AAAhBAABNQgAAgD8AAFhBAABOQgAAgD8AAFhBAABOQgAAQEAAAAhBAABOQgAAQEAAAFhBAABNQgAAQEAAAFhBAABNQgAAQEAAAAhBAABOQgAAQEAAAAhBAABOQgAAgD8AAAhBAABOQgAAgD8AAFhBAABOQgAAQEAAAFhBAABNQgAAQEAAAFhBAABOQgAAQEAAAFhBAABOQgAAgD8AAFhBAABNQgAAgD8AAFhBAABNQgAAQEAAAHhBAABNQgAAgD8AAHhBAABOQgAAgD8AAHhBAABOQgAAQEAAAHhBAABNQgAAQEAAAHhBAABNQgAAQEAAAJRBAABNQgAAgD8AAJRBAABNQgAAgD8AAHhBAABOQgAAgD8AAHhBAABNQgAAgD8AAHhBAABNQgAAgD8AAJRBAABOQgAAgD8AAJRBAABOQgAAQEAAAHhBAABOQgAAQEAAAJRBAABNQgAAQEAAAJRBAABNQgAAQEAAAHhBAABOQgAAQEAAAHhBAABOQgAAgD8AAHhBAABOQgAAgD8AAJRBAABOQgAAQEAAAJRBAABNQgAAQEAAAJRBAABOQgAAQEAAAJRBAABOQgAAgD8AAJRBAABNQgAAgD8AAJRBAABHQgAA4D8AAAhBAABHQgAAwD8AAAhBAABIQgAAwD8AAAhBAABIQgAA4D8AAAhBAABHQgAA4D8AAAhBAABHQgAA4D8AACBBAABHQgAAwD8AACBBAABHQgAAwD8AAAhBAABIQgAAwD8AAAhBAABHQgAAwD8AAAhBAABHQgAAwD8AACBBAABIQgAAwD8AACBBAABIQgAA4D8AAAhBAABIQgAA4D8AACBBAABHQgAA4D8AACBBAABHQgAA4D8AAAhBAABIQgAA4D8AAAhBAABIQgAAwD8AAAhBAABIQgAAwD8AACBBAABIQgAA4D8AACBBAABHQgAA4D8AACBBAABIQgAA4D8AACBBAABIQgAAwD8AACBBAABHQgAAwD8AACBBAABHQgAAwD8AABxBAABHQgAAgD8AABxBAABIQgAAgD8AABxBAABIQgAAwD8AABxBAABHQgAAwD8AABxBAABHQgAAwD8AACBBAABHQgAAgD8AACBBAABHQgAAgD8AABxBAABIQgAAgD8AABxBAABHQgAAgD8AABxBAABHQgAAgD8AACBBAABIQgAAgD8AACBBAABIQgAAwD8AABxBAABIQgAAwD8AACBBAABHQgAAwD8AACBBAABHQgAAwD8AABxBAABIQgAAwD8AABxBAABIQgAAgD8AABxBAABIQgAAgD8AACBBAABIQgAAwD8AACBBAABHQgAAwD8AACBBAABIQgAAwD8AACBBAABIQgAAgD8AACBBAABHQgAAgD8AACBB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AABOQgAAQEAAAAhBAABNQgAAQEAAAAhBAABNQgAAgD8AAAhBAABOQgAAgD8AAAhBAABNQgAAgD8AAFhBAABNQgAAgD8AAAhBAABNQgAAQEAAAAhBAABNQgAAQEAAAFhBAABNQgAAgD8AAFhBAABOQgAAgD8AAFhBAABOQgAAgD8AAAhBAABNQgAAgD8AAAhBAABNQgAAQEAAAFhBAABNQgAAQEAAAAhBAABOQgAAQEAAAAhBAABOQgAAQEAAAFhBAABOQgAAQEAAAFhBAABOQgAAQEAAAAhBAABOQgAAgD8AAAhBAABOQgAAgD8AAFhBAABOQgAAgD8AAFhBAABNQgAAgD8AAFhBAABNQgAAQEAAAFhBAABOQgAAQEAAAFhBAABOQgAAQEAAAHhBAABNQgAAQEAAAHhBAABNQgAAgD8AAHhBAABOQgAAgD8AAHhBAABNQgAAgD8AAJRBAABNQgAAgD8AAHhBAABNQgAAQEAAAHhBAABNQgAAQEAAAJRBAABNQgAAgD8AAJRBAABOQgAAgD8AAJRBAABOQgAAgD8AAHhBAABNQgAAgD8AAHhBAABNQgAAQEAAAJRBAABNQgAAQEAAAHhBAABOQgAAQEAAAHhBAABOQgAAQEAAAJRBAABOQgAAQEAAAJRBAABOQgAAQEAAAHhBAABOQgAAgD8AAHhBAABOQgAAgD8AAJRBAABOQgAAgD8AAJRBAABNQgAAgD8AAJRBAABNQgAAQEAAAJRBAABOQgAAQEAAAJRBAABIQgAA4D8AAAhBAABHQgAA4D8AAAhBAABHQgAAwD8AAAhBAABIQgAAwD8AAAhBAABHQgAAwD8AACBBAABHQgAAwD8AAAhBAABHQgAA4D8AAAhBAABHQgAA4D8AACBBAABHQgAAwD8AACBBAABIQgAAwD8AACBBAABIQgAAwD8AAAhBAABHQgAAwD8AAAhBAABHQgAA4D8AACBBAABHQgAA4D8AAAhBAABIQgAA4D8AAAhBAABIQgAA4D8AACBBAABIQgAA4D8AACBBAABIQgAA4D8AAAhBAABIQgAAwD8AAAhBAABIQgAAwD8AACBBAABIQgAAwD8AACBBAABHQgAAwD8AACBBAABHQgAA4D8AACBBAABIQgAA4D8AACBBAABIQgAAwD8AABxBAABHQgAAwD8AABxBAABHQgAAgD8AABxBAABIQgAAgD8AABxBAABHQgAAgD8AACBBAABHQgAAgD8AABxBAABHQgAAwD8AABxBAABHQgAAwD8AACBBAABHQgAAgD8AACBBAABIQgAAgD8AACBBAABIQgAAgD8AABxBAABHQgAAgD8AABxBAABHQgAAwD8AACBBAABHQgAAwD8AABxBAABIQgAAwD8AABxBAABIQgAAwD8AACBBAABIQgAAwD8AACBBAABIQgAAwD8AABxBAABIQgAAgD8AABxBAABIQgAAgD8AACBBAABIQgAAgD8AACBBAABHQgAAgD8AACBBAABHQgAAwD8AACBBAABIQgAAwD8AACBB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }, { "aabb": AABB(54, 0.5, -12, 9, 0.5, 4), -"attribute_data": PackedByteArray("AABYwgAAgL8AAFjCAAAAvwAAfMIAAAC/AAB8wgAAgL8AAEDBAACAvwAAAMEAAIC/AAAAwQAAAL8AAEDBAAAAvwAAQEEAAHzCAABAQQAAWMIAAABBAABYwgAAAEEAAHzCAABAwQAAfMIAAADBAAB8wgAAAMEAAFjCAABAwQAAWMIAAEBBAACAvwAAQEEAAAC/AAAAQQAAAL8AAABBAACAvwAAWEIAAIC/AAB8QgAAgL8AAHxCAAAAvwAAWEIAAAC/"), +"attribute_data": PackedByteArray("AAB8wgAAgL8AAFjCAACAvwAAWMIAAAC/AAB8wgAAAL8AAADBAAAAvwAAQMEAAAC/AABAwQAAgL8AAADBAACAvwAAAEEAAFjCAAAAQQAAfMIAAEBBAAB8wgAAQEEAAFjCAAAAwQAAWMIAAEDBAABYwgAAQMEAAHzCAAAAwQAAfMIAAABBAACAvwAAQEEAAIC/AABAQQAAAL8AAABBAAAAvwAAfEIAAAC/AABYQgAAAL8AAFhCAACAvwAAfEIAAIC/"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -217,10 +217,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AABYQgAAgD8AAEDBAABYQgAAAD8AAEDBAAB8QgAAAD8AAEDBAAB8QgAAgD8AAEDBAABYQgAAgD8AAEDBAABYQgAAgD8AAADBAABYQgAAAD8AAADBAABYQgAAAD8AAEDBAAB8QgAAAD8AAEDBAABYQgAAAD8AAEDBAABYQgAAAD8AAADBAAB8QgAAAD8AAADBAAB8QgAAgD8AAEDBAAB8QgAAgD8AAADBAABYQgAAgD8AAADBAABYQgAAgD8AAEDBAAB8QgAAgD8AAEDBAAB8QgAAAD8AAEDBAAB8QgAAAD8AAADBAAB8QgAAgD8AAADBAABYQgAAgD8AAADBAAB8QgAAgD8AAADBAAB8QgAAAD8AAADBAABYQgAAAD8AAADB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AAB8QgAAgD8AAEDBAABYQgAAgD8AAEDBAABYQgAAAD8AAEDBAAB8QgAAAD8AAEDBAABYQgAAAD8AAADBAABYQgAAAD8AAEDBAABYQgAAgD8AAEDBAABYQgAAgD8AAADBAABYQgAAAD8AAADBAAB8QgAAAD8AAADBAAB8QgAAAD8AAEDBAABYQgAAAD8AAEDBAABYQgAAgD8AAADBAABYQgAAgD8AAEDBAAB8QgAAgD8AAEDBAAB8QgAAgD8AAADBAAB8QgAAgD8AAADBAAB8QgAAgD8AAEDBAAB8QgAAAD8AAEDBAAB8QgAAAD8AAADBAAB8QgAAAD8AAADBAABYQgAAAD8AAADBAABYQgAAgD8AAADBAAB8QgAAgD8AAADB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }, { "aabb": AABB(33, 0.5, -16.75, 3.25, 0.375, 6.75), -"attribute_data": PackedByteArray("AAAGwgAAsL8AAAbCAACAvwAADsIAAIC/AAAOwgAAsL8AAEjBAACwvwAAKMEAALC/AAAowQAAgL8AAEjBAACAvwAASEEAAA7CAABIQQAABsIAAChBAAAGwgAAKEEAAA7CAABIwQAADsIAACjBAAAOwgAAKMEAAAbCAABIwQAABsIAAEhBAACwvwAASEEAAIC/AAAoQQAAgL8AAChBAACwvwAABkIAALC/AAAOQgAAsL8AAA5CAACAvwAABkIAAIC/AAAKwgAAsL8AAArCAACAvwAAEsIAAIC/AAASwgAAsL8AAITBAACwvwAAaMEAALC/AABowQAAgL8AAITBAACAvwAAhEEAABLCAACEQQAACsIAAGhBAAAKwgAAaEEAABLCAACEwQAAEsIAAGjBAAASwgAAaMEAAArCAACEwQAACsIAAIRBAACwvwAAhEEAAIC/AABoQQAAgL8AAGhBAACwvwAACkIAALC/AAASQgAAsL8AABJCAACAvwAACkIAAIC/"), +"attribute_data": PackedByteArray("AAAOwgAAsL8AAAbCAACwvwAABsIAAIC/AAAOwgAAgL8AACjBAACAvwAASMEAAIC/AABIwQAAsL8AACjBAACwvwAAKEEAAAbCAAAoQQAADsIAAEhBAAAOwgAASEEAAAbCAAAowQAABsIAAEjBAAAGwgAASMEAAA7CAAAowQAADsIAAChBAACwvwAASEEAALC/AABIQQAAgL8AAChBAACAvwAADkIAAIC/AAAGQgAAgL8AAAZCAACwvwAADkIAALC/AAASwgAAsL8AAArCAACwvwAACsIAAIC/AAASwgAAgL8AAGjBAACAvwAAhMEAAIC/AACEwQAAsL8AAGjBAACwvwAAaEEAAArCAABoQQAAEsIAAIRBAAASwgAAhEEAAArCAABowQAACsIAAITBAAAKwgAAhMEAABLCAABowQAAEsIAAGhBAACwvwAAhEEAALC/AACEQQAAgL8AAGhBAACAvwAAEkIAAIC/AAAKQgAAgL8AAApCAACwvwAAEkIAALC/"), "format": 34359742487, "index_count": 72, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8A"), @@ -229,10 +229,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 48, -"vertex_data": PackedByteArray("AAAEQgAAYD8AAEDBAAAEQgAAAD8AAEDBAAAMQgAAAD8AAEDBAAAMQgAAYD8AAEDBAAAEQgAAYD8AAEDBAAAEQgAAYD8AACDBAAAEQgAAAD8AACDBAAAEQgAAAD8AAEDBAAAMQgAAAD8AAEDBAAAEQgAAAD8AAEDBAAAEQgAAAD8AACDBAAAMQgAAAD8AACDBAAAMQgAAYD8AAEDBAAAMQgAAYD8AACDBAAAEQgAAYD8AACDBAAAEQgAAYD8AAEDBAAAMQgAAYD8AAEDBAAAMQgAAAD8AAEDBAAAMQgAAAD8AACDBAAAMQgAAYD8AACDBAAAEQgAAYD8AACDBAAAMQgAAYD8AACDBAAAMQgAAAD8AACDBAAAEQgAAAD8AACDBAAAJQgAAYD8AAIbBAAAJQgAAAD8AAIbBAAARQgAAAD8AAIbBAAARQgAAYD8AAIbBAAAJQgAAYD8AAIbBAAAJQgAAYD8AAGzBAAAJQgAAAD8AAGzBAAAJQgAAAD8AAIbBAAARQgAAAD8AAIbBAAAJQgAAAD8AAIbBAAAJQgAAAD8AAGzBAAARQgAAAD8AAGzBAAARQgAAYD8AAIbBAAARQgAAYD8AAGzBAAAJQgAAYD8AAGzBAAAJQgAAYD8AAIbBAAARQgAAYD8AAIbBAAARQgAAAD8AAIbBAAARQgAAAD8AAGzBAAARQgAAYD8AAGzBAAAJQgAAYD8AAGzBAAARQgAAYD8AAGzBAAARQgAAAD8AAGzBAAAJQgAAAD8AAGzB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AAAMQgAAYD8AAEDBAAAEQgAAYD8AAEDBAAAEQgAAAD8AAEDBAAAMQgAAAD8AAEDBAAAEQgAAAD8AACDBAAAEQgAAAD8AAEDBAAAEQgAAYD8AAEDBAAAEQgAAYD8AACDBAAAEQgAAAD8AACDBAAAMQgAAAD8AACDBAAAMQgAAAD8AAEDBAAAEQgAAAD8AAEDBAAAEQgAAYD8AACDBAAAEQgAAYD8AAEDBAAAMQgAAYD8AAEDBAAAMQgAAYD8AACDBAAAMQgAAYD8AACDBAAAMQgAAYD8AAEDBAAAMQgAAAD8AAEDBAAAMQgAAAD8AACDBAAAMQgAAAD8AACDBAAAEQgAAAD8AACDBAAAEQgAAYD8AACDBAAAMQgAAYD8AACDBAAARQgAAYD8AAIbBAAAJQgAAYD8AAIbBAAAJQgAAAD8AAIbBAAARQgAAAD8AAIbBAAAJQgAAAD8AAGzBAAAJQgAAAD8AAIbBAAAJQgAAYD8AAIbBAAAJQgAAYD8AAGzBAAAJQgAAAD8AAGzBAAARQgAAAD8AAGzBAAARQgAAAD8AAIbBAAAJQgAAAD8AAIbBAAAJQgAAYD8AAGzBAAAJQgAAYD8AAIbBAAARQgAAYD8AAIbBAAARQgAAYD8AAGzBAAARQgAAYD8AAGzBAAARQgAAYD8AAIbBAAARQgAAAD8AAIbBAAARQgAAAD8AAGzBAAARQgAAAD8AAGzBAAAJQgAAAD8AAGzBAAAJQgAAYD8AAGzBAAARQgAAYD8AAGzB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }, { "aabb": AABB(32.75, 0.5, -17, 3.75, 0.5, 7.25), -"attribute_data": PackedByteArray("AAAFwgAAwL8AAAXCAACAvwAAD8IAAIC/AAAPwgAAwL8AAEzBAADAvwAASMEAAMC/AABIwQAAgL8AAEzBAACAvwAATEEAAA/CAABMQQAABcIAAEhBAAAFwgAASEEAAA/CAABMwQAAD8IAAEjBAAAPwgAASMEAAAXCAABMwQAABcIAAExBAADAvwAATEEAAIC/AABIQQAAgL8AAEhBAADAvwAADsIAAMC/AAAOwgAAgL8AAA/CAACAvwAAD8IAAMC/AABAQQAAD8IAAEBBAAAOwgAAIEEAAA7CAAAgQQAAD8IAAEDBAAAPwgAAIMEAAA/CAAAgwQAADsIAAEDBAAAOwgAAQEEAAMC/AABAQQAAgL8AACBBAACAvwAAIEEAAMC/AAAOQgAAwL8AAA9CAADAvwAAD0IAAIC/AAAOQgAAgL8AACDBAADAvwAAHMEAAMC/AAAcwQAAgL8AACDBAACAvwAAIEEAAA/CAAAgQQAABcIAABxBAAAFwgAAHEEAAA/CAAAgwQAAD8IAABzBAAAPwgAAHMEAAAXCAAAgwQAABcIAACBBAADAvwAAIEEAAIC/AAAcQQAAgL8AABxBAADAvwAABUIAAMC/AAAPQgAAwL8AAA9CAACAvwAABUIAAIC/AAADwgAAwL8AAAPCAACAvwAABMIAAIC/AAAEwgAAwL8AAEDBAADAvwAAIMEAAMC/AAAgwQAAgL8AAEDBAACAvwAAQEEAAATCAABAQQAAA8IAACBBAAADwgAAIEEAAATCAABAwQAABMIAACDBAAAEwgAAIMEAAAPCAABAwQAAA8IAAANCAADAvwAABEIAAMC/AAAEQgAAgL8AAANCAACAvwAACcIAAMC/AAAJwgAAgL8AABPCAACAvwAAE8IAAMC/AACGwQAAwL8AAITBAADAvwAAhMEAAIC/AACGwQAAgL8AAIZBAAATwgAAhkEAAAnCAACEQQAACcIAAIRBAAATwgAAhsEAABPCAACEwQAAE8IAAITBAAAJwgAAhsEAAAnCAACGQQAAwL8AAIZBAACAvwAAhEEAAIC/AACEQQAAwL8AABLCAADAvwAAEsIAAIC/AAATwgAAgL8AABPCAADAvwAAiEEAABPCAACIQQAAEsIAAHBBAAASwgAAcEEAABPCAACIwQAAE8IAAHDBAAATwgAAcMEAABLCAACIwQAAEsIAAIhBAADAvwAAiEEAAIC/AABwQQAAgL8AAHBBAADAvwAAEkIAAMC/AAATQgAAwL8AABNCAACAvwAAEkIAAIC/AABwwQAAwL8AAGzBAADAvwAAbMEAAIC/AABwwQAAgL8AAHBBAAATwgAAcEEAAAnCAABsQQAACcIAAGxBAAATwgAAcMEAABPCAABswQAAE8IAAGzBAAAJwgAAcMEAAAnCAABwQQAAwL8AAHBBAACAvwAAbEEAAIC/AABsQQAAwL8AAAlCAADAvwAAE0IAAMC/AAATQgAAgL8AAAlCAACAvwAAB8IAAMC/AAAHwgAAgL8AAAjCAACAvwAACMIAAMC/AACIwQAAwL8AAHDBAADAvwAAcMEAAIC/AACIwQAAgL8AAIhBAAAIwgAAiEEAAAfCAABwQQAAB8IAAHBBAAAIwgAAiMEAAAjCAABwwQAACMIAAHDBAAAHwgAAiMEAAAfCAAAHQgAAwL8AAAhCAADAvwAACEIAAIC/AAAHQgAAgL8="), +"attribute_data": PackedByteArray("AAAPwgAAwL8AAAXCAADAvwAABcIAAIC/AAAPwgAAgL8AAEjBAACAvwAATMEAAIC/AABMwQAAwL8AAEjBAADAvwAASEEAAAXCAABIQQAAD8IAAExBAAAPwgAATEEAAAXCAABIwQAABcIAAEzBAAAFwgAATMEAAA/CAABIwQAAD8IAAEhBAADAvwAATEEAAMC/AABMQQAAgL8AAEhBAACAvwAAD8IAAMC/AAAOwgAAwL8AAA7CAACAvwAAD8IAAIC/AAAgQQAADsIAACBBAAAPwgAAQEEAAA/CAABAQQAADsIAACDBAAAOwgAAQMEAAA7CAABAwQAAD8IAACDBAAAPwgAAIEEAAMC/AABAQQAAwL8AAEBBAACAvwAAIEEAAIC/AAAPQgAAgL8AAA5CAACAvwAADkIAAMC/AAAPQgAAwL8AABzBAACAvwABIMEAAIC/AAEgwQAAwL8AABzBAADAvwAAHEEAAAXCAAAcQQAAD8IAASBBAAAPwgABIEEAAAXCAAAcwQAABcIAASDBAAAFwgABIMEAAA/CAAAcwQAAD8IAABxBAADAvwABIEEAAMC/AAEgQQAAgL8AABxBAACAvwAAD0IAAIC/AAAFQgAAgL8AAAVCAADAvwAAD0IAAMC/AAAEwgAAwL8AAAPCAADAvwAAA8IAAIC/AAAEwgAAgL8AACDBAACAvwAAQMEAAIC/AABAwQAAwL8AACDBAADAvwAAIEEAAAPCAAAgQQAABMIAAEBBAAAEwgAAQEEAAAPCAAAgwQAAA8IAAEDBAAADwgAAQMEAAATCAAAgwQAABMIAAARCAACAvwAAA0IAAIC/AAADQgAAwL8AAARCAADAvwAAE8IAAMC/AAAJwgAAwL8AAAnCAACAvwAAE8IAAIC/AACEwQAAgL8AAIbBAACAvwAAhsEAAMC/AACEwQAAwL8AAIRBAAAJwgAAhEEAABPCAACGQQAAE8IAAIZBAAAJwgAAhMEAAAnCAACGwQAACcIAAIbBAAATwgAAhMEAABPCAACEQQAAwL8AAIZBAADAvwAAhkEAAIC/AACEQQAAgL8AABPCAADAvwAAEsIAAMC/AAASwgAAgL8AABPCAACAvwAAcEEAABLCAABwQQAAE8IAAIhBAAATwgAAiEEAABLCAABwwQAAEsIAAIjBAAASwgAAiMEAABPCAABwwQAAE8IAAHBBAADAvwAAiEEAAMC/AACIQQAAgL8AAHBBAACAvwAAE0IAAIC/AAASQgAAgL8AABJCAADAvwAAE0IAAMC/AABswQAAgL8AAHDBAACAvwAAcMEAAMC/AABswQAAwL8AAGxBAAAJwgAAbEEAABPCAABwQQAAE8IAAHBBAAAJwgAAbMEAAAnCAABwwQAACcIAAHDBAAATwgAAbMEAABPCAABsQQAAwL8AAHBBAADAvwAAcEEAAIC/AABsQQAAgL8AABNCAACAvwAACUIAAIC/AAAJQgAAwL8AABNCAADAvwAACMIAAMC/AAAHwgAAwL8AAAfCAACAvwAACMIAAIC/AABwwQAAgL8AAIjBAACAvwAAiMEAAMC/AABwwQAAwL8AAHBBAAAHwgAAcEEAAAjCAACIQQAACMIAAIhBAAAHwgAAcMEAAAfCAACIwQAAB8IAAIjBAAAIwgAAcMEAAAjCAAAIQgAAgL8AAAdCAACAvwAAB0IAAMC/AAAIQgAAwL8="), "format": 34359742487, "index_count": 240, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsAPAA9AD4APAA+AD8AQABBAEIAQABCAEMARABFAEYARABGAEcASABJAEoASABKAEsATABNAE4ATABOAE8AUABRAFIAUABSAFMAVABVAFYAVABWAFcAWABZAFoAWABaAFsAXABdAF4AXABeAF8AYABhAGIAYABiAGMAZABlAGYAZABmAGcAaABpAGoAaABqAGsAbABtAG4AbABuAG8AcABxAHIAcAByAHMAdAB1AHYAdAB2AHcAeAB5AHoAeAB6AHsAfAB9AH4AfAB+AH8AgACBAIIAgACCAIMAhACFAIYAhACGAIcAiACJAIoAiACKAIsAjACNAI4AjACOAI8AkACRAJIAkACSAJMAlACVAJYAlACWAJcAmACZAJoAmACaAJsAnACdAJ4AnACeAJ8A"), @@ -241,10 +241,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 160, -"vertex_data": PackedByteArray("AAADQgAAgD8AAETBAAADQgAAAD8AAETBAAANQgAAAD8AAETBAAANQgAAgD8AAETBAAADQgAAgD8AAETBAAADQgAAgD8AAEDBAAADQgAAAD8AAEDBAAADQgAAAD8AAETBAAANQgAAAD8AAETBAAADQgAAAD8AAETBAAADQgAAAD8AAEDBAAANQgAAAD8AAEDBAAANQgAAgD8AAETBAAANQgAAgD8AAEDBAAADQgAAgD8AAEDBAAADQgAAgD8AAETBAAANQgAAgD8AAETBAAANQgAAAD8AAETBAAANQgAAAD8AAEDBAAANQgAAgD8AAEDBAAAMQgAAgD8AAEDBAAAMQgAAAD8AAEDBAAANQgAAAD8AAEDBAAANQgAAgD8AAEDBAAANQgAAAD8AAEDBAAAMQgAAAD8AAEDBAAAMQgAAAD8AACDBAAANQgAAAD8AACDBAAANQgAAgD8AAEDBAAANQgAAgD8AACDBAAAMQgAAgD8AACDBAAAMQgAAgD8AAEDBAAANQgAAgD8AAEDBAAANQgAAAD8AAEDBAAANQgAAAD8AACDBAAANQgAAgD8AACDBAAAMQgAAgD8AACDBAAANQgAAgD8AACDBAAANQgAAAD8AACDBAAAMQgAAAD8AACDBAAADQgAAgD8AACDBAAADQgAAgD8AABzBAAADQgAAAD8AABzBAAADQgAAAD8AACDBAAANQgAAAD8AACDBAAADQgAAAD8AACDBAAADQgAAAD8AABzBAAANQgAAAD8AABzBAAANQgAAgD8AACDBAAANQgAAgD8AABzBAAADQgAAgD8AABzBAAADQgAAgD8AACDBAAANQgAAgD8AACDBAAANQgAAAD8AACDBAAANQgAAAD8AABzBAAANQgAAgD8AABzBAAADQgAAgD8AABzBAAANQgAAgD8AABzBAAANQgAAAD8AABzBAAADQgAAAD8AABzBAAADQgAAgD8AAEDBAAADQgAAAD8AAEDBAAAEQgAAAD8AAEDBAAAEQgAAgD8AAEDBAAADQgAAgD8AAEDBAAADQgAAgD8AACDBAAADQgAAAD8AACDBAAADQgAAAD8AAEDBAAAEQgAAAD8AAEDBAAADQgAAAD8AAEDBAAADQgAAAD8AACDBAAAEQgAAAD8AACDBAAAEQgAAgD8AAEDBAAAEQgAAgD8AACDBAAADQgAAgD8AACDBAAADQgAAgD8AAEDBAAADQgAAgD8AACDBAAAEQgAAgD8AACDBAAAEQgAAAD8AACDBAAADQgAAAD8AACDBAAAIQgAAgD8AAIjBAAAIQgAAAD8AAIjBAAASQgAAAD8AAIjBAAASQgAAgD8AAIjBAAAIQgAAgD8AAIjBAAAIQgAAgD8AAIbBAAAIQgAAAD8AAIbBAAAIQgAAAD8AAIjBAAASQgAAAD8AAIjBAAAIQgAAAD8AAIjBAAAIQgAAAD8AAIbBAAASQgAAAD8AAIbBAAASQgAAgD8AAIjBAAASQgAAgD8AAIbBAAAIQgAAgD8AAIbBAAAIQgAAgD8AAIjBAAASQgAAgD8AAIjBAAASQgAAAD8AAIjBAAASQgAAAD8AAIbBAAASQgAAgD8AAIbBAAARQgAAgD8AAIbBAAARQgAAAD8AAIbBAAASQgAAAD8AAIbBAAASQgAAgD8AAIbBAAASQgAAAD8AAIbBAAARQgAAAD8AAIbBAAARQgAAAD8AAGzBAAASQgAAAD8AAGzBAAASQgAAgD8AAIbBAAASQgAAgD8AAGzBAAARQgAAgD8AAGzBAAARQgAAgD8AAIbBAAASQgAAgD8AAIbBAAASQgAAAD8AAIbBAAASQgAAAD8AAGzBAAASQgAAgD8AAGzBAAARQgAAgD8AAGzBAAASQgAAgD8AAGzBAAASQgAAAD8AAGzBAAARQgAAAD8AAGzBAAAIQgAAgD8AAGzBAAAIQgAAgD8AAGjBAAAIQgAAAD8AAGjBAAAIQgAAAD8AAGzBAAASQgAAAD8AAGzBAAAIQgAAAD8AAGzBAAAIQgAAAD8AAGjBAAASQgAAAD8AAGjBAAASQgAAgD8AAGzBAAASQgAAgD8AAGjBAAAIQgAAgD8AAGjBAAAIQgAAgD8AAGzBAAASQgAAgD8AAGzBAAASQgAAAD8AAGzBAAASQgAAAD8AAGjBAAASQgAAgD8AAGjBAAAIQgAAgD8AAGjBAAASQgAAgD8AAGjBAAASQgAAAD8AAGjBAAAIQgAAAD8AAGjBAAAIQgAAgD8AAIbBAAAIQgAAAD8AAIbBAAAJQgAAAD8AAIbBAAAJQgAAgD8AAIbBAAAIQgAAgD8AAIbBAAAIQgAAgD8AAGzBAAAIQgAAAD8AAGzBAAAIQgAAAD8AAIbBAAAJQgAAAD8AAIbBAAAIQgAAAD8AAIbBAAAIQgAAAD8AAGzBAAAJQgAAAD8AAGzBAAAJQgAAgD8AAIbBAAAJQgAAgD8AAGzBAAAIQgAAgD8AAGzBAAAIQgAAgD8AAIbBAAAIQgAAgD8AAGzBAAAJQgAAgD8AAGzBAAAJQgAAAD8AAGzBAAAIQgAAAD8AAGzB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////////8AAP+//////wAA/7//////AAD/v/////8AAP+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////78=") +"vertex_data": PackedByteArray("AAANQgAAgD8AAETBAAADQgAAgD8AAETBAAADQgAAAD8AAETBAAANQgAAAD8AAETBAAADQgAAAD8AAEDBAAADQgAAAD8AAETBAAADQgAAgD8AAETBAAADQgAAgD8AAEDBAAADQgAAAD8AAEDBAAANQgAAAD8AAEDBAAANQgAAAD8AAETBAAADQgAAAD8AAETBAAADQgAAgD8AAEDBAAADQgAAgD8AAETBAAANQgAAgD8AAETBAAANQgAAgD8AAEDBAAANQgAAgD8AAEDBAAANQgAAgD8AAETBAAANQgAAAD8AAETBAAANQgAAAD8AAEDBAAANQgAAgD8AAEDBAAAMQgAAgD8AAEDBAAAMQgAAAD8AAEDBAAANQgAAAD8AAEDBAAAMQgAAAD8AACDBAAANQgAAAD8AACDBAAANQgAAAD8AAEDBAAAMQgAAAD8AAEDBAAAMQgAAgD8AACDBAAAMQgAAgD8AAEDBAAANQgAAgD8AAEDBAAANQgAAgD8AACDBAAANQgAAgD8AACDBAAANQgAAgD8AAEDBAAANQgAAAD8AAEDBAAANQgAAAD8AACDBAAANQgAAAD8AACDBAAAMQgAAAD8AACDBAAAMQgAAgD8AACDBAAANQgAAgD8AACDBAAADQgAAAD8AABzBAAADQgAAAD8AASDBAAADQgAAgD8AASDBAAADQgAAgD8AABzBAAADQgAAAD8AABzBAAANQgAAAD8AABzBAAANQgAAAD8AASDBAAADQgAAAD8AASDBAAADQgAAgD8AABzBAAADQgAAgD8AASDBAAANQgAAgD8AASDBAAANQgAAgD8AABzBAAANQgAAgD8AABzBAAANQgAAgD8AASDBAAANQgAAAD8AASDBAAANQgAAAD8AABzBAAANQgAAAD8AABzBAAADQgAAAD8AABzBAAADQgAAgD8AABzBAAANQgAAgD8AABzBAAAEQgAAgD8AAEDBAAADQgAAgD8AAEDBAAADQgAAAD8AAEDBAAAEQgAAAD8AAEDBAAADQgAAAD8AACDBAAADQgAAAD8AAEDBAAADQgAAgD8AAEDBAAADQgAAgD8AACDBAAADQgAAAD8AACDBAAAEQgAAAD8AACDBAAAEQgAAAD8AAEDBAAADQgAAAD8AAEDBAAADQgAAgD8AACDBAAADQgAAgD8AAEDBAAAEQgAAgD8AAEDBAAAEQgAAgD8AACDBAAAEQgAAAD8AACDBAAADQgAAAD8AACDBAAADQgAAgD8AACDBAAAEQgAAgD8AACDBAAASQgAAgD8AAIjBAAAIQgAAgD8AAIjBAAAIQgAAAD8AAIjBAAASQgAAAD8AAIjBAAAIQgAAAD8AAIbBAAAIQgAAAD8AAIjBAAAIQgAAgD8AAIjBAAAIQgAAgD8AAIbBAAAIQgAAAD8AAIbBAAASQgAAAD8AAIbBAAASQgAAAD8AAIjBAAAIQgAAAD8AAIjBAAAIQgAAgD8AAIbBAAAIQgAAgD8AAIjBAAASQgAAgD8AAIjBAAASQgAAgD8AAIbBAAASQgAAgD8AAIbBAAASQgAAgD8AAIjBAAASQgAAAD8AAIjBAAASQgAAAD8AAIbBAAASQgAAgD8AAIbBAAARQgAAgD8AAIbBAAARQgAAAD8AAIbBAAASQgAAAD8AAIbBAAARQgAAAD8AAGzBAAASQgAAAD8AAGzBAAASQgAAAD8AAIbBAAARQgAAAD8AAIbBAAARQgAAgD8AAGzBAAARQgAAgD8AAIbBAAASQgAAgD8AAIbBAAASQgAAgD8AAGzBAAASQgAAgD8AAGzBAAASQgAAgD8AAIbBAAASQgAAAD8AAIbBAAASQgAAAD8AAGzBAAASQgAAAD8AAGzBAAARQgAAAD8AAGzBAAARQgAAgD8AAGzBAAASQgAAgD8AAGzBAAAIQgAAAD8AAGjBAAAIQgAAAD8AAGzBAAAIQgAAgD8AAGzBAAAIQgAAgD8AAGjBAAAIQgAAAD8AAGjBAAASQgAAAD8AAGjBAAASQgAAAD8AAGzBAAAIQgAAAD8AAGzBAAAIQgAAgD8AAGjBAAAIQgAAgD8AAGzBAAASQgAAgD8AAGzBAAASQgAAgD8AAGjBAAASQgAAgD8AAGjBAAASQgAAgD8AAGzBAAASQgAAAD8AAGzBAAASQgAAAD8AAGjBAAASQgAAAD8AAGjBAAAIQgAAAD8AAGjBAAAIQgAAgD8AAGjBAAASQgAAgD8AAGjBAAAJQgAAgD8AAIbBAAAIQgAAgD8AAIbBAAAIQgAAAD8AAIbBAAAJQgAAAD8AAIbBAAAIQgAAAD8AAGzBAAAIQgAAAD8AAIbBAAAIQgAAgD8AAIbBAAAIQgAAgD8AAGzBAAAIQgAAAD8AAGzBAAAJQgAAAD8AAGzBAAAJQgAAAD8AAIbBAAAIQgAAAD8AAIbBAAAIQgAAgD8AAGzBAAAIQgAAgD8AAIbBAAAJQgAAgD8AAIbBAAAJQgAAgD8AAGzBAAAJQgAAAD8AAGzBAAAIQgAAAD8AAGzBAAAIQgAAgD8AAGzBAAAJQgAAgD8AAGzB/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////////8AAP+//////wAA/7//////AAD/v/////8AAP+//38AAP//////fwAA//////9/AAD//////38AAP//////f////3//v/9/////f/+//3////9//7//f////3//v////3//////////f/////////9//////////3///////3//f////7//f/9/////v/9//3////+//3//f////78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7//f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////////AAD/v/////8AAP+//////wAA/7//////AAD/v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9//78AAP9//3//vwAA/3//f/+/AAD/f/9//7//fwAA//////9/AAD//////38AAP//////fwAA//////9/////f/+//3////9//7//f////3//v/9/////f/+//3//f////7//f/9/////v/9//3////+//3//f////78=") }, { "aabb": AABB(32.75, 0.5, -16.75, 3.75, 0.5, 6.75), -"attribute_data": PackedByteArray("AAAFQgAAwL8AAA9CAADAvwAAD0IAAIC/AAAFQgAAgL8AAEDBAADAvwAAIMEAAMC/AAAgwQAAgL8AAEDBAACAvwAABcIAAMC/AAAFwgAAgL8AAA/CAACAvwAAD8IAAMC/AABAQQAAwL8AAEBBAACAvwAAIEEAAIC/AAAgQQAAwL8AAAlCAADAvwAAE0IAAMC/AAATQgAAgL8AAAlCAACAvwAAiMEAAMC/AABwwQAAwL8AAHDBAACAvwAAiMEAAIC/AAAJwgAAwL8AAAnCAACAvwAAE8IAAIC/AAATwgAAwL8AAIhBAADAvwAAiEEAAIC/AABwQQAAgL8AAHBBAADAvw=="), +"attribute_data": PackedByteArray("AAAPQgAAgL8AAAVCAACAvwAABUIAAMC/AAAPQgAAwL8AACDBAACAvwAAQMEAAIC/AABAwQAAwL8AACDBAADAvwAAD8IAAMC/AAAFwgAAwL8AAAXCAACAvwAAD8IAAIC/AAAgQQAAwL8AAEBBAADAvwAAQEEAAIC/AAAgQQAAgL8AABNCAACAvwAACUIAAIC/AAAJQgAAwL8AABNCAADAvwAAcMEAAIC/AACIwQAAgL8AAIjBAADAvwAAcMEAAMC/AAATwgAAwL8AAAnCAADAvwAACcIAAIC/AAATwgAAgL8AAHBBAADAvwAAiEEAAMC/AACIQQAAgL8AAHBBAACAvw=="), "format": 34359742487, "index_count": 48, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8A"), @@ -253,479 +253,479 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 32, -"vertex_data": PackedByteArray("AAADQgAAgD8AAEDBAAANQgAAgD8AAEDBAAANQgAAAD8AAEDBAAADQgAAAD8AAEDBAAAMQgAAgD8AAEDBAAAMQgAAgD8AACDBAAAMQgAAAD8AACDBAAAMQgAAAD8AAEDBAAADQgAAgD8AACDBAAADQgAAAD8AACDBAAANQgAAAD8AACDBAAANQgAAgD8AACDBAAAEQgAAgD8AAEDBAAAEQgAAAD8AAEDBAAAEQgAAAD8AACDBAAAEQgAAgD8AACDBAAAIQgAAgD8AAIbBAAASQgAAgD8AAIbBAAASQgAAAD8AAIbBAAAIQgAAAD8AAIbBAAARQgAAgD8AAIbBAAARQgAAgD8AAGzBAAARQgAAAD8AAGzBAAARQgAAAD8AAIbBAAAIQgAAgD8AAGzBAAAIQgAAAD8AAGzBAAASQgAAAD8AAGzBAAASQgAAgD8AAGzBAAAJQgAAgD8AAIbBAAAJQgAAAD8AAIbBAAAJQgAAAD8AAGzBAAAJQgAAgD8AAGzB/3//f////7//f/9/////v/9//3////+//3//f////78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//////wAA/7//////AAD/v/////8AAP+//////wAA/7////9//////////3//////////f/////////9//////w==") +"vertex_data": PackedByteArray("AAANQgAAAD8AAEDBAAADQgAAAD8AAEDBAAADQgAAgD8AAEDBAAANQgAAgD8AAEDBAAAMQgAAAD8AACDBAAAMQgAAAD8AAEDBAAAMQgAAgD8AAEDBAAAMQgAAgD8AACDBAAANQgAAgD8AACDBAAADQgAAgD8AACDBAAADQgAAAD8AACDBAAANQgAAAD8AACDBAAAEQgAAgD8AACDBAAAEQgAAgD8AAEDBAAAEQgAAAD8AAEDBAAAEQgAAAD8AACDBAAASQgAAAD8AAIbBAAAIQgAAAD8AAIbBAAAIQgAAgD8AAIbBAAASQgAAgD8AAIbBAAARQgAAAD8AAGzBAAARQgAAAD8AAIbBAAARQgAAgD8AAIbBAAARQgAAgD8AAGzBAAASQgAAgD8AAGzBAAAIQgAAgD8AAGzBAAAIQgAAAD8AAGzBAAASQgAAAD8AAGzBAAAJQgAAgD8AAGzBAAAJQgAAgD8AAIbBAAAJQgAAAD8AAIbBAAAJQgAAAD8AAGzB/3//f////7//f/9/////v/9//3////+//3//f////78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/////f/////////9//////////3//////////f///////f/9/////v/9//3////+//3//f////7//f/9/////vwAA/3//f/+/AAD/f/9//78AAP9//3//vwAA/3//f/+//////wAA/7//////AAD/v/////8AAP+//////wAA/7////9//////////3//////////f/////////9//////w==") }] [sub_resource type="ArrayOccluder3D" id="ArrayOccluder3D_wihk8"] -vertices = PackedVector3Array(-5, 1, -4, -5, 0.5, -4, 10, 0.5, -4, 10, 1, -4, -5, 1, -4, -5, 1, 10, -5, 0.5, 10, -5, 0.5, -4, 10, 0.5, -4, -5, 0.5, -4, -5, 0.5, 10, 10, 0.5, 10, 10, 1, -4, 10, 0.5, -4, 10, 0.5, 10, 10, 1, 10, -5, 1, 10, 10, 1, 10, 10, 0.5, 10, -5, 0.5, 10, -11, 3, -2, -11, 1, -2, -5.5, 1, -2, -5.5, 3, -2, -11, 3, -2, -11, 3, -1.5, -11, 1, -1.5, -11, 1, -2, -5.5, 1, -2, -11, 1, -2, -11, 1, -1.5, -5.5, 1, -1.5, -5.5, 3, -2, -5.5, 3, -1.5, -11, 3, -1.5, -11, 3, -2, -5.5, 3, -2, -5.5, 1, -2, -5.5, 1, -1.5, -5.5, 3, -1.5, -11, 3, -1.5, -11, 1, -1.5, -10.5, 1, -1.5, -10.5, 3, -1.5, -11, 3, -1.5, -11, 3, 5, -11, 1, 5, -11, 1, -1.5, -10.5, 1, -1.5, -11, 1, -1.5, -11, 1, 5, -10.5, 1, 5, -10.5, 3, -1.5, -10.5, 3, 5, -11, 3, 5, -11, 3, -1.5, -10.5, 3, 4.5, -10.5, 1, 4.5, -5.5, 1, 4.5, -5.5, 3, 4.5, -10.5, 3, 4.5, -10.5, 3, 5, -10.5, 1, 5, -10.5, 1, 4.5, -5.5, 1, 4.5, -10.5, 1, 4.5, -10.5, 1, 5, -5.5, 1, 5, -5.5, 3, 4.5, -5.5, 3, 5, -10.5, 3, 5, -10.5, 3, 4.5, -5.5, 3, 4.5, -5.5, 1, 4.5, -5.5, 1, 5, -5.5, 3, 5, -5.5, 3, 3, -5.5, 1, 3, -5, 1, 3, -5, 3, 3, -5.5, 3, 3, -5.5, 3, 10, -5.5, 1, 10, -5.5, 1, 3, -5, 1, 3, -5.5, 1, 3, -5.5, 1, 10, -5, 1, 10, -5, 3, 3, -5, 3, 10, -5.5, 3, 10, -5.5, 3, 3, -5.5, 3, 10, -5, 3, 10, -5, 1, 10, -5.5, 1, 10, -5.5, 3, -4.5, -5.5, 1, -4.5, -5, 1, -4.5, -5, 3, -4.5, -5.5, 3, -4.5, -5.5, 3, 0.5, -5.5, 1, 0.5, -5.5, 1, -4.5, -5, 1, -4.5, -5.5, 1, -4.5, -5.5, 1, 0.5, -5, 1, 0.5, -5, 3, -4.5, -5, 3, 0.5, -5.5, 3, 0.5, -5.5, 3, -4.5, -5.5, 3, 0.5, -5, 3, 0.5, -5, 1, 0.5, -5.5, 1, 0.5, -5.5, 3, 2.5, -5.5, 1, 2.5, -5, 1, 2.5, -5, 3, 2.5, -5.5, 3, 2.5, -5.5, 3, 3, -5.5, 1, 3, -5.5, 1, 2.5, -5, 1, 2.5, -5.5, 1, 2.5, -5.5, 1, 3, -5, 1, 3, -5, 3, 2.5, -5, 3, 3, -5.5, 3, 3, -5.5, 3, 2.5, -5.5, 3, 3, -5, 3, 3, -5, 1, 3, -5.5, 1, 3, -5, 3, -4.5, -5, 1, -4.5, 10, 1, -4.5, 10, 3, -4.5, -5, 3, -4.5, -5, 3, -4, -5, 1, -4, -5, 1, -4.5, 10, 1, -4.5, -5, 1, -4.5, -5, 1, -4, 10, 1, -4, 10, 3, -4.5, 10, 3, -4, -5, 3, -4, -5, 3, -4.5, 10, 3, -4.5, 10, 1, -4.5, 10, 1, -4, 10, 3, -4, -5.5, 3, 10, -5.5, 1, 10, 2, 1, 10, 2, 3, 10, -5.5, 3, 10, -5.5, 3, 10.5, -5.5, 1, 10.5, -5.5, 1, 10, 2, 1, 10, -5.5, 1, 10, -5.5, 1, 10.5, 2, 1, 10.5, 2, 3, 10, 2, 3, 10.5, -5.5, 3, 10.5, -5.5, 3, 10, 2, 3, 10, 2, 1, 10, 2, 1, 10.5, 2, 3, 10.5, 10, 3, -0.5, 10, 1, -0.5, 10.5, 1, -0.5, 10.5, 3, -0.5, 10, 3, -0.5, 10, 3, 2, 10, 1, 2, 10, 1, -0.5, 10.5, 1, -0.5, 10, 1, -0.5, 10, 1, 2, 10.5, 1, 2, 10.5, 3, -0.5, 10.5, 3, 2, 10, 3, 2, 10, 3, -0.5, 10, 3, -4.5, 10, 1, -4.5, 10.5, 1, -4.5, 10.5, 3, -4.5, 10, 3, -4.5, 10, 3, -2.5, 10, 1, -2.5, 10, 1, -4.5, 10.5, 1, -4.5, 10, 1, -4.5, 10, 1, -2.5, 10.5, 1, -2.5, 10.5, 3, -4.5, 10.5, 3, -2.5, 10, 3, -2.5, 10, 3, -4.5, 10, 3, -2.5, 10.5, 3, -2.5, 10.5, 1, -2.5, 10, 1, -2.5, 10.5, 1, -4, 10.5, 0.5, -4, 25.5, 0.5, -4, 25.5, 1, -4, 10.5, 1, -4, 10.5, 1, 1.5, 10.5, 0.5, 1.5, 10.5, 0.5, -4, 25.5, 0.5, -4, 10.5, 0.5, -4, 10.5, 0.5, 1.5, 25.5, 0.5, 1.5, 25.5, 1, -4, 25.5, 0.5, -4, 25.5, 0.5, 1.5, 25.5, 1, 1.5, 10.5, 2, 1.5, 10.5, 1, 1.5, 25.5, 1, 1.5, 25.5, 2, 1.5, 10.5, 2, 1.5, 10.5, 2, 2, 10.5, 1, 2, 10.5, 1, 1.5, 25.5, 1, 1.5, 10.5, 1, 1.5, 10.5, 1, 2, 25.5, 1, 2, 25.5, 2, 1.5, 25.5, 1, 1.5, 25.5, 1, 2, 25.5, 2, 2, 10.5, 3, -4.5, 10.5, 1, -4.5, 13.5, 1, -4.5, 13.5, 3, -4.5, 10.5, 3, -4.5, 10.5, 3, -4, 10.5, 1, -4, 10.5, 1, -4.5, 13.5, 1, -4.5, 10.5, 1, -4.5, 10.5, 1, -4, 13.5, 1, -4, 13.5, 3, -4.5, 13.5, 1, -4.5, 13.5, 1, -4, 13.5, 3, -4, 15.5, 3, -4.5, 15.5, 1, -4.5, 20, 1, -4.5, 20, 3, -4.5, 15.5, 3, -4.5, 15.5, 3, -4, 15.5, 1, -4, 15.5, 1, -4.5, 20, 1, -4.5, 15.5, 1, -4.5, 15.5, 1, -4, 20, 1, -4, 20, 3, -4.5, 20, 1, -4.5, 20, 1, -4, 20, 3, -4, 22, 3, -4.5, 22, 1, -4.5, 25.5, 1, -4.5, 25.5, 3, -4.5, 22, 3, -4.5, 22, 3, -4, 22, 1, -4, 22, 1, -4.5, 25.5, 1, -4.5, 22, 1, -4.5, 22, 1, -4, 25.5, 1, -4, 25.5, 3, -4.5, 25.5, 1, -4.5, 25.5, 1, -4, 25.5, 3, -4, 20, 1, -5, 20, 0.5, -5, 22, 0.5, -5, 22, 1, -5, 20, 1, -5, 20, 1, -4, 20, 0.5, -4, 20, 0.5, -5, 22, 0.5, -5, 20, 0.5, -5, 20, 0.5, -4, 22, 0.5, -4, 22, 1, -5, 22, 1, -4, 20, 1, -4, 20, 1, -5, 22, 1, -5, 22, 0.5, -5, 22, 0.5, -4, 22, 1, -4, 20, 1, -4, 22, 1, -4, 22, 0.5, -4, 20, 0.5, -4, 20, 3, -5.5, 20, 1, -5.5, 22, 1, -5.5, 22, 3, -5.5, 20, 3, -5.5, 20, 3, -5, 20, 1, -5, 20, 1, -5.5, 22, 1, -5.5, 20, 1, -5.5, 20, 1, -5, 22, 1, -5, 22, 3, -5.5, 22, 3, -5, 20, 3, -5, 20, 3, -5.5, 22, 3, -5.5, 22, 1, -5.5, 22, 1, -5, 22, 3, -5, 20, 3, -5, 22, 3, -5, 22, 1, -5, 20, 1, -5, 25.5, 3, -12, 25.5, 1, -12, 26, 1, -12, 26, 3, -12, 25.5, 3, -12, 25.5, 3, -2.5, 25.5, 1, -2.5, 25.5, 1, -12, 26, 1, -12, 25.5, 1, -12, 25.5, 1, -2.5, 26, 1, -2.5, 26, 3, -12, 26, 3, -2.5, 25.5, 3, -2.5, 25.5, 3, -12, 26, 3, -12, 26, 1, -12, 26, 1, -2.5, 26, 3, -2.5, 25.5, 3, -2.5, 26, 3, -2.5, 26, 1, -2.5, 25.5, 1, -2.5, 25.5, 3, -0.5, 25.5, 1, -0.5, 26, 1, -0.5, 26, 3, -0.5, 25.5, 3, -0.5, 25.5, 3, 8.5, 25.5, 1, 8.5, 25.5, 1, -0.5, 26, 1, -0.5, 25.5, 1, -0.5, 25.5, 1, 8.5, 26, 1, 8.5, 26, 3, -0.5, 26, 3, 8.5, 25.5, 3, 8.5, 25.5, 3, -0.5, 26, 3, -0.5, 26, 1, -0.5, 26, 1, 8.5, 26, 3, 8.5, 25.5, 3, 8.5, 26, 3, 8.5, 26, 1, 8.5, 25.5, 1, 8.5, 13.5, 1, -5.5, 13.5, 0.5, -5.5, 15.5, 0.5, -5.5, 15.5, 1, -5.5, 13.5, 1, -5.5, 13.5, 1, -4.5, 13.5, 0.5, -4.5, 13.5, 0.5, -5.5, 15.5, 0.5, -5.5, 13.5, 0.5, -5.5, 13.5, 0.5, -4.5, 15.5, 0.5, -4.5, 15.5, 1, -5.5, 15.5, 1, -4.5, 13.5, 1, -4.5, 13.5, 1, -5.5, 15.5, 1, -5.5, 15.5, 0.5, -5.5, 15.5, 0.5, -4.5, 15.5, 1, -4.5, 13.5, 1, -4.5, 15.5, 1, -4.5, 15.5, 0.5, -4.5, 13.5, 0.5, -4.5, 13.5, 3, -5.5, 13.5, 1, -5.5, 15.5, 1, -5.5, 15.5, 3, -5.5, 13.5, 3, -5.5, 13.5, 3, -5, 13.5, 1, -5, 13.5, 1, -5.5, 15.5, 1, -5.5, 13.5, 1, -5.5, 13.5, 1, -5, 15.5, 1, -5, 15.5, 3, -5.5, 15.5, 3, -5, 13.5, 3, -5, 13.5, 3, -5.5, 15.5, 3, -5.5, 15.5, 1, -5.5, 15.5, 1, -5, 15.5, 3, -5, 13.5, 3, -5, 15.5, 3, -5, 15.5, 1, -5, 13.5, 1, -5, 2, 1, 10, 2, 0.5, 10, 10, 0.5, 10, 10, 1, 10, 2, 1, 10, 2, 1, 12.5, 2, 0.5, 12.5, 2, 0.5, 10, 10, 0.5, 10, 2, 0.5, 10, 2, 0.5, 12.5, 10, 0.5, 12.5, 10, 1, 10, 10, 0.5, 10, 10, 0.5, 12.5, 10, 1, 12.5, 2, 1, 12.5, 10, 1, 12.5, 10, 0.5, 12.5, 2, 0.5, 12.5, 2, 3, 12.5, 2, 0.5, 12.5, 10, 0.5, 12.5, 10, 3, 12.5, 2, 3, 12.5, 2, 3, 13, 2, 0.5, 13, 2, 0.5, 12.5, 10, 0.5, 12.5, 2, 0.5, 12.5, 2, 0.5, 13, 10, 0.5, 13, 10, 3, 12.5, 10, 3, 13, 2, 3, 13, 2, 3, 12.5, 1.5, 3, 10.5, 1.5, 1, 10.5, 2, 1, 10.5, 2, 3, 10.5, 1.5, 3, 10.5, 1.5, 3, 13, 1.5, 1, 13, 1.5, 1, 10.5, 2, 1, 10.5, 1.5, 1, 10.5, 1.5, 1, 13, 2, 1, 13, 2, 3, 10.5, 2, 3, 13, 1.5, 3, 13, 1.5, 3, 10.5, 33, 1, 1, 33, 0.5, 1, 40, 0.5, 1, 40, 1, 1, 33, 1, 1, 33, 1, 8, 33, 0.5, 8, 33, 0.5, 1, 40, 0.5, 1, 33, 0.5, 1, 33, 0.5, 8, 40, 0.5, 8, 40, 1, 1, 40, 0.5, 1, 40, 0.5, 8, 40, 1, 8, 33, 1, 8, 40, 1, 8, 40, 0.5, 8, 33, 0.5, 8, 40, 1, -12, 40, 0.5, -12, 47, 0.5, -12, 47, 1, -12, 40, 1, -12, 40, 1, 8, 40, 0.5, 8, 40, 0.5, -12, 47, 0.5, -12, 40, 0.5, -12, 40, 0.5, 8, 47, 0.5, 8, 47, 1, -12, 47, 0.5, -12, 47, 0.5, 8, 47, 1, 8, 40, 1, 8, 47, 1, 8, 47, 0.5, 8, 40, 0.5, 8, 33, 3, -12.5, 33, 1, -12.5, 35, 1, -12.5, 35, 3, -12.5, 33, 3, -12.5, 33, 3, -12, 33, 1, -12, 33, 1, -12.5, 35, 1, -12.5, 33, 1, -12.5, 33, 1, -12, 35, 1, -12, 35, 3, -12.5, 35, 1, -12.5, 35, 1, -12, 35, 3, -12, 44, 3, 8, 44, 1, 8, 47.5, 1, 8, 47.5, 3, 8, 44, 3, 8, 44, 3, 8.5, 44, 1, 8.5, 44, 1, 8, 47.5, 1, 8, 44, 1, 8, 44, 1, 8.5, 47.5, 1, 8.5, 47.5, 3, 8, 47.5, 3, 8.5, 44, 3, 8.5, 44, 3, 8, 47.5, 3, 8, 47.5, 1, 8, 47.5, 1, 8.5, 47.5, 3, 8.5, 47, 3, -12, 47, 1, -12, 47.5, 1, -12, 47.5, 3, -12, 47, 3, -12, 47, 3, 8, 47, 1, 8, 47, 1, -12, 47.5, 1, -12, 47, 1, -12, 47, 1, 8, 47.5, 1, 8, 47.5, 3, -12, 47.5, 3, 8, 47, 3, 8, 47, 3, -12, 33, -0.5, -5.5, 33, -1, -5.5, 40, -1, -5.5, 40, -0.5, -5.5, 33, -0.5, -5.5, 33, -0.5, 2, 33, -1, 2, 33, -1, -5.5, 40, -1, -5.5, 33, -1, -5.5, 33, -1, 2, 40, -1, 2, 40, -0.5, -5.5, 40, -1, -5.5, 40, -1, 2, 40, -0.5, 2, 33, -0.5, 2, 40, -0.5, 2, 40, -1, 2, 33, -1, 2, 35, 5, -12.5, 35, 3, -12.5, 47, 3, -12.5, 47, 5, -12.5, 35, 5, -12.5, 35, 5, -12, 35, 3, -12, 35, 3, -12.5, 47, 3, -12.5, 35, 3, -12.5, 35, 3, -12, 47, 3, -12, 47, 5, -12.5, 47, 3, -12.5, 47, 3, -12, 47, 5, -12, 26, 5, -12.5, 26, 3, -12.5, 33, 3, -12.5, 33, 5, -12.5, 26, 5, -12.5, 26, 5, -12, 26, 3, -12, 26, 3, -12.5, 33, 3, -12.5, 26, 3, -12.5, 26, 3, -12, 33, 3, -12, 33, 5, -12.5, 33, 3, -12.5, 33, 3, -12, 33, 5, -12, 26, 3, 8, 26, 1, 8, 42, 1, 8, 42, 3, 8, 26, 3, 8, 26, 3, 8.5, 26, 1, 8.5, 26, 1, 8, 42, 1, 8, 26, 1, 8, 26, 1, 8.5, 42, 1, 8.5, 42, 3, 8, 42, 3, 8.5, 26, 3, 8.5, 26, 3, 8, 42, 3, 8, 42, 1, 8, 42, 1, 8.5, 42, 3, 8.5, 39.5, 1, 8.5, 39.5, 0.5, 8.5, 46, 0.5, 8.5, 46, 1, 8.5, 39.5, 1, 8.5, 39.5, 1, 14.5, 39.5, 0.5, 14.5, 39.5, 0.5, 8.5, 46, 0.5, 8.5, 39.5, 0.5, 8.5, 39.5, 0.5, 14.5, 46, 0.5, 14.5, 46, 1, 8.5, 46, 0.5, 8.5, 46, 0.5, 14.5, 46, 1, 14.5, 39.5, 1, 14.5, 46, 1, 14.5, 46, 0.5, 14.5, 39.5, 0.5, 14.5, 31, 3, -21.5, 31, 2.5, -21.5, 38, 2.5, -21.5, 38, 3, -21.5, 31, 3, -21.5, 31, 3, -12.5, 31, 2.5, -12.5, 31, 2.5, -21.5, 38, 2.5, -21.5, 31, 2.5, -21.5, 31, 2.5, -12.5, 38, 2.5, -12.5, 38, 3, -21.5, 38, 2.5, -21.5, 38, 2.5, -12.5, 38, 3, -12.5, 31, 3, -12.5, 38, 3, -12.5, 38, 2.5, -12.5, 31, 2.5, -12.5, 37, 1.5, -12, 37, 1.25, -12, 37.25, 1.25, -12, 37.25, 1.5, -12, 37, 1.5, -12, 37, 1.5, -10.75, 37, 1.25, -10.75, 37, 1.25, -12, 37.25, 1.25, -12, 37, 1.25, -12, 37, 1.25, -10.75, 37.25, 1.25, -10.75, 37.25, 1.5, -12, 37.25, 1.5, -10.75, 37, 1.5, -10.75, 37, 1.5, -12, 37.25, 1.5, -12, 37.25, 1.25, -12, 37.25, 1.25, -10.75, 37.25, 1.5, -10.75, 37, 1.5, -10.75, 37.25, 1.5, -10.75, 37.25, 1.25, -10.75, 37, 1.25, -10.75, 37, 1.25, -11, 37, 1, -11, 37.25, 1, -11, 37.25, 1.25, -11, 37, 1.25, -11, 37, 1.25, -10.75, 37, 1, -10.75, 37, 1, -11, 37.25, 1, -11, 37, 1, -11, 37, 1, -10.75, 37.25, 1, -10.75, 37.25, 1.25, -11, 37.25, 1.25, -10.75, 37, 1.25, -10.75, 37, 1.25, -11, 37.25, 1.25, -11, 37.25, 1, -11, 37.25, 1, -10.75, 37.25, 1.25, -10.75, 37, 1.25, -10.75, 37.25, 1.25, -10.75, 37.25, 1, -10.75, 37, 1, -10.75, 41, 1.5, -12, 41, 1.25, -12, 41.25, 1.25, -12, 41.25, 1.5, -12, 41, 1.5, -12, 41, 1.5, -10.75, 41, 1.25, -10.75, 41, 1.25, -12, 41.25, 1.25, -12, 41, 1.25, -12, 41, 1.25, -10.75, 41.25, 1.25, -10.75, 41.25, 1.5, -12, 41.25, 1.5, -10.75, 41, 1.5, -10.75, 41, 1.5, -12, 41.25, 1.5, -12, 41.25, 1.25, -12, 41.25, 1.25, -10.75, 41.25, 1.5, -10.75, 41, 1.5, -10.75, 41.25, 1.5, -10.75, 41.25, 1.25, -10.75, 41, 1.25, -10.75, 37, 1.5, -9.25, 37, 1.25, -9.25, 41.25, 1.25, -9.25, 41.25, 1.5, -9.25, 37, 1.5, -9.25, 37, 1.5, -9, 37, 1.25, -9, 37, 1.25, -9.25, 41.25, 1.25, -9.25, 37, 1.25, -9.25, 37, 1.25, -9, 41.25, 1.25, -9, 41.25, 1.5, -9.25, 41.25, 1.5, -9, 37, 1.5, -9, 37, 1.5, -9.25, 41.25, 1.5, -9.25, 41.25, 1.25, -9.25, 41.25, 1.25, -9, 41.25, 1.5, -9, 37, 1.5, -9, 41.25, 1.5, -9, 41.25, 1.25, -9, 37, 1.25, -9, 26, 1.5, -6, 26, 1.25, -6, 27.25, 1.25, -6, 27.25, 1.5, -6, 26, 1.5, -6, 26, 1.5, -5.75, 26, 1.25, -5.75, 26, 1.25, -6, 27.25, 1.25, -6, 26, 1.25, -6, 26, 1.25, -5.75, 27.25, 1.25, -5.75, 27.25, 1.5, -6, 27.25, 1.5, -5.75, 26, 1.5, -5.75, 26, 1.5, -6, 27.25, 1.5, -6, 27.25, 1.25, -6, 27.25, 1.25, -5.75, 27.25, 1.5, -5.75, 26, 1.5, -5.75, 27.25, 1.5, -5.75, 27.25, 1.25, -5.75, 26, 1.25, -5.75, 26, 1.5, -9.25, 26, 1.25, -9.25, 27.25, 1.25, -9.25, 27.25, 1.5, -9.25, 26, 1.5, -9.25, 26, 1.5, -9, 26, 1.25, -9, 26, 1.25, -9.25, 27.25, 1.25, -9.25, 26, 1.25, -9.25, 26, 1.25, -9, 27.25, 1.25, -9, 27.25, 1.5, -9.25, 27.25, 1.5, -9, 26, 1.5, -9, 26, 1.5, -9.25, 27.25, 1.5, -9.25, 27.25, 1.25, -9.25, 27.25, 1.25, -9, 27.25, 1.5, -9, 26, 1.5, -9, 27.25, 1.5, -9, 27.25, 1.25, -9, 26, 1.25, -9, 27, 1.5, -9, 27, 1.25, -9, 27.25, 1.25, -9, 27.25, 1.5, -9, 27, 1.5, -9, 27, 1.5, -6, 27, 1.25, -6, 27, 1.25, -9, 27.25, 1.25, -9, 27, 1.25, -9, 27, 1.25, -6, 27.25, 1.25, -6, 27.25, 1.5, -9, 27.25, 1.5, -6, 27, 1.5, -6, 27, 1.5, -9, 27.25, 1.5, -9, 27.25, 1.25, -9, 27.25, 1.25, -6, 27.25, 1.5, -6, 27, 1.5, -6, 27.25, 1.5, -6, 27.25, 1.25, -6, 27, 1.25, -6, 27, 1.5, 2.75, 27, 1.25, 2.75, 31, 1.25, 2.75, 31, 1.5, 2.75, 27, 1.5, 2.75, 27, 1.5, 3, 27, 1.25, 3, 27, 1.25, 2.75, 31, 1.25, 2.75, 27, 1.25, 2.75, 27, 1.25, 3, 31, 1.25, 3, 31, 1.5, 2.75, 31, 1.5, 3, 27, 1.5, 3, 27, 1.5, 2.75, 31, 1.5, 2.75, 31, 1.25, 2.75, 31, 1.25, 3, 31, 1.5, 3, 27, 1.5, 3, 31, 1.5, 3, 31, 1.25, 3, 27, 1.25, 3, 30.75, 1.5, 3, 30.75, 1.25, 3, 31, 1.25, 3, 31, 1.5, 3, 30.75, 1.5, 3, 30.75, 1.5, 7, 30.75, 1.25, 7, 30.75, 1.25, 3, 31, 1.25, 3, 30.75, 1.25, 3, 30.75, 1.25, 7, 31, 1.25, 7, 31, 1.5, 3, 31, 1.5, 7, 30.75, 1.5, 7, 30.75, 1.5, 3, 31, 1.5, 3, 31, 1.25, 3, 31, 1.25, 7, 31, 1.5, 7, 30.75, 1.5, 7, 31, 1.5, 7, 31, 1.25, 7, 30.75, 1.25, 7, 27, 1.5, 3, 27, 1.25, 3, 27.25, 1.25, 3, 27.25, 1.5, 3, 27, 1.5, 3, 27, 1.5, 7, 27, 1.25, 7, 27, 1.25, 3, 27.25, 1.25, 3, 27, 1.25, 3, 27, 1.25, 7, 27.25, 1.25, 7, 27.25, 1.5, 3, 27.25, 1.5, 7, 27, 1.5, 7, 27, 1.5, 3, 27.25, 1.5, 3, 27.25, 1.25, 3, 27.25, 1.25, 7, 27.25, 1.5, 7, 27, 1.5, 7, 27.25, 1.5, 7, 27.25, 1.25, 7, 27, 1.25, 7, 27, 1.5, 7, 27, 1.25, 7, 31, 1.25, 7, 31, 1.5, 7, 27, 1.5, 7, 27, 1.5, 7.25, 27, 1.25, 7.25, 27, 1.25, 7, 31, 1.25, 7, 27, 1.25, 7, 27, 1.25, 7.25, 31, 1.25, 7.25, 31, 1.5, 7, 31, 1.5, 7.25, 27, 1.5, 7.25, 27, 1.5, 7, 31, 1.5, 7, 31, 1.25, 7, 31, 1.25, 7.25, 31, 1.5, 7.25, 27, 1.5, 7.25, 31, 1.5, 7.25, 31, 1.25, 7.25, 27, 1.25, 7.25, 35, 3, -12.5, 35, 1, -12.5, 47, 1, -12.5, 47, 3, -12.5, 35, 3, -12.5, 35, 3, -12, 35, 1, -12, 35, 1, -12.5, 47, 1, -12.5, 35, 1, -12.5, 35, 1, -12, 47, 1, -12, 47, 3, -12.5, 47, 1, -12.5, 47, 1, -12, 47, 3, -12, 26, 3, -12.5, 26, 1, -12.5, 33, 1, -12.5, 33, 3, -12.5, 26, 3, -12.5, 26, 3, -12, 26, 1, -12, 26, 1, -12.5, 33, 1, -12.5, 26, 1, -12.5, 26, 1, -12, 33, 1, -12, 33, 3, -12.5, 33, 1, -12.5, 33, 1, -12, 33, 3, -12, 31, 5, -21.5, 31, 3, -21.5, 31.5, 3, -21.5, 31.5, 5, -21.5, 31, 5, -21.5, 31, 5, -12.5, 31, 3, -12.5, 31, 3, -21.5, 31.5, 3, -21.5, 31, 3, -21.5, 31, 3, -12.5, 31.5, 3, -12.5, 31.5, 5, -21.5, 31.5, 5, -12.5, 31, 5, -12.5, 31, 5, -21.5, 31.5, 5, -21.5, 31.5, 3, -21.5, 31.5, 3, -12.5, 31.5, 5, -12.5, 31, 5, -12.5, 31.5, 5, -12.5, 31.5, 3, -12.5, 31, 3, -12.5, 39.5, 3, 8.5, 39.5, 1, 8.5, 40, 1, 8.5, 40, 3, 8.5, 39.5, 3, 8.5, 39.5, 3, 15, 39.5, 1, 15, 39.5, 1, 8.5, 40, 1, 8.5, 39.5, 1, 8.5, 39.5, 1, 15, 40, 1, 15, 40, 3, 8.5, 40, 3, 15, 39.5, 3, 15, 39.5, 3, 8.5, 40, 3, 8.5, 40, 1, 8.5, 40, 1, 15, 40, 3, 15, 39.5, 3, 15, 40, 3, 15, 40, 1, 15, 39.5, 1, 15, 40, 3, 14.5, 40, 1, 14.5, 46, 1, 14.5, 46, 3, 14.5, 40, 3, 14.5, 40, 3, 15, 40, 1, 15, 40, 1, 14.5, 46, 1, 14.5, 40, 1, 14.5, 40, 1, 15, 46, 1, 15, 46, 3, 14.5, 46, 3, 15, 40, 3, 15, 40, 3, 14.5, 46, 3, 14.5, 46, 1, 14.5, 46, 1, 15, 46, 3, 15, 46, 3, 12.5, 46, 1, 12.5, 46.5, 1, 12.5, 46.5, 3, 12.5, 46, 3, 12.5, 46, 3, 19, 46, 1, 19, 46, 1, 12.5, 46.5, 1, 12.5, 46, 1, 12.5, 46, 1, 19, 46.5, 1, 19, 46.5, 3, 12.5, 46.5, 3, 19, 46, 3, 19, 46, 3, 12.5, 46, 3, 8.5, 46, 1, 8.5, 46.5, 1, 8.5, 46.5, 3, 8.5, 46, 3, 8.5, 46, 3, 10.5, 46, 1, 10.5, 46, 1, 8.5, 46.5, 1, 8.5, 46, 1, 8.5, 46, 1, 10.5, 46.5, 1, 10.5, 46.5, 3, 8.5, 46.5, 3, 10.5, 46, 3, 10.5, 46, 3, 8.5, 46, 3, 10.5, 46.5, 3, 10.5, 46.5, 1, 10.5, 46, 1, 10.5, 46.5, 1, 8.5, 46.5, 0.5, 8.5, 59.5, 0.5, 8.5, 59.5, 1, 8.5, 46.5, 1, 8.5, 46.5, 1, 18.5, 46.5, 0.5, 18.5, 46.5, 0.5, 8.5, 59.5, 0.5, 8.5, 46.5, 0.5, 8.5, 46.5, 0.5, 18.5, 59.5, 0.5, 18.5, 59.5, 1, 8.5, 59.5, 0.5, 8.5, 59.5, 0.5, 18.5, 59.5, 1, 18.5, 46.5, 1, 18.5, 59.5, 1, 18.5, 59.5, 0.5, 18.5, 46.5, 0.5, 18.5, 47.5, 3, 8, 47.5, 1, 8, 55.5, 1, 8, 55.5, 3, 8, 47.5, 3, 8, 47.5, 3, 8.5, 47.5, 1, 8.5, 47.5, 1, 8, 55.5, 1, 8, 47.5, 1, 8, 47.5, 1, 8.5, 55.5, 1, 8.5, 55.5, 3, 8, 55.5, 3, 8.5, 47.5, 3, 8.5, 47.5, 3, 8, 55.5, 3, 8, 55.5, 1, 8, 55.5, 1, 8.5, 55.5, 3, 8.5, 57.5, 3, 8, 57.5, 1, 8, 59.5, 1, 8, 59.5, 3, 8, 57.5, 3, 8, 57.5, 3, 8.5, 57.5, 1, 8.5, 57.5, 1, 8, 59.5, 1, 8, 57.5, 1, 8, 57.5, 1, 8.5, 59.5, 1, 8.5, 59.5, 3, 8, 59.5, 3, 8.5, 57.5, 3, 8.5, 57.5, 3, 8, 59.5, 3, 8, 59.5, 1, 8, 59.5, 1, 8.5, 59.5, 3, 8.5, 59.5, 2, 8, 59.5, 1, 8, 60, 1, 8, 60, 2, 8, 59.5, 2, 8, 59.5, 2, 18.5, 59.5, 1, 18.5, 59.5, 1, 8, 60, 1, 8, 59.5, 1, 8, 59.5, 1, 18.5, 60, 1, 18.5, 60, 2, 8, 60, 2, 18.5, 59.5, 2, 18.5, 59.5, 2, 8, 46.5, 2, 18.5, 46.5, 1, 18.5, 60, 1, 18.5, 60, 2, 18.5, 46.5, 2, 18.5, 46.5, 2, 19, 46.5, 1, 19, 46.5, 1, 18.5, 60, 1, 18.5, 46.5, 1, 18.5, 46.5, 1, 19, 60, 1, 19, 60, 2, 18.5, 60, 2, 19, 46.5, 2, 19, 46.5, 2, 18.5, 60, 2, 18.5, 60, 1, 18.5, 60, 1, 19, 60, 2, 19, 47, 1, -12, 47, 0.5, -12, 54, 0.5, -12, 54, 1, -12, 47, 1, -12, 47, 1, 2, 47, 0.5, 2, 47, 0.5, -12, 54, 0.5, -12, 47, 0.5, -12, 47, 0.5, 2, 54, 0.5, 2, 54, 1, -12, 54, 0.5, -12, 54, 0.5, 2, 54, 1, 2, 47, 1, 2, 54, 1, 2, 54, 0.5, 2, 47, 0.5, 2, 47, 1, 2, 47, 0.5, 2, 63, 0.5, 2, 63, 1, 2, 47, 1, 2, 47, 1, 8, 47, 0.5, 8, 47, 0.5, 2, 63, 0.5, 2, 47, 0.5, 2, 47, 0.5, 8, 63, 0.5, 8, 63, 1, 2, 63, 0.5, 2, 63, 0.5, 8, 63, 1, 8, 47, 1, 8, 63, 1, 8, 63, 0.5, 8, 47, 0.5, 8, 63, 3, -9, 63, -0.5, -9, 63.5, -0.5, -9, 63.5, 3, -9, 63, 3, -9, 63, 3, -6, 63, -0.5, -6, 63, -0.5, -9, 63.5, -0.5, -9, 63, -0.5, -9, 63, -0.5, -6, 63.5, -0.5, -6, 63.5, 3, -9, 63.5, 3, -6, 63, 3, -6, 63, 3, -9, 63, 3, -6, 63.5, 3, -6, 63.5, -0.5, -6, 63, -0.5, -6, 63, 2, 2, 63, -0.5, 2, 63.5, -0.5, 2, 63.5, 2, 2, 63, 2, 2, 63, 2, 8, 63, -0.5, 8, 63, -0.5, 2, 63.5, -0.5, 2, 63, -0.5, 2, 63, -0.5, 8, 63.5, -0.5, 8, 63.5, 2, 2, 63.5, 2, 8, 63, 2, 8, 63, 2, 2, 59.5, 2, 7.5, 59.5, 1, 7.5, 63, 1, 7.5, 63, 2, 7.5, 59.5, 2, 7.5, 59.5, 2, 8, 59.5, 1, 8, 59.5, 1, 7.5, 63, 1, 7.5, 59.5, 1, 7.5, 59.5, 1, 8, 63, 1, 8, 63, 2, 7.5, 63, 2, 8, 59.5, 2, 8, 59.5, 2, 7.5, 63, 2, 7.5, 63, 1, 7.5, 63, 1, 8, 63, 2, 8, 63.5, 1, -17, 63.5, 0.5, -17, 70.5, 0.5, -17, 70.5, 1, -17, 63.5, 1, -17, 63.5, 1, -6.5, 63.5, 0.5, -6.5, 63.5, 0.5, -17, 70.5, 0.5, -17, 63.5, 0.5, -17, 63.5, 0.5, -6.5, 70.5, 0.5, -6.5, 70.5, 1, -17, 70.5, 0.5, -17, 70.5, 0.5, -6.5, 70.5, 1, -6.5, 63.5, 1, -6.5, 70.5, 1, -6.5, 70.5, 0.5, -6.5, 63.5, 0.5, -6.5, 63, 2, -6, 63, -0.5, -6, 63.5, -0.5, -6, 63.5, 2, -6, 63, 2, -6, 63, 2, 2, 63, -0.5, 2, 63, -0.5, -6, 63.5, -0.5, -6, 63, -0.5, -6, 63, -0.5, 2, 63.5, -0.5, 2, 63.5, 2, -6, 63.5, 2, 2, 63, 2, 2, 63, 2, -6, 63, 2, 2, 63.5, 2, 2, 63.5, -0.5, 2, 63, -0.5, 2, 63, 3, -17.5, 63, -0.5, -17.5, 63.5, -0.5, -17.5, 63.5, 3, -17.5, 63, 3, -17.5, 63, 3, -11, 63, -0.5, -11, 63, -0.5, -17.5, 63.5, -0.5, -17.5, 63, -0.5, -17.5, 63, -0.5, -11, 63.5, -0.5, -11, 63.5, 3, -17.5, 63.5, 3, -11, 63, 3, -11, 63, 3, -17.5, 63, 3, -11, 63.5, 3, -11, 63.5, -0.5, -11, 63, -0.5, -11, 29.5, 1.5, -12, 29.5, 1.25, -12, 29.75, 1.25, -12, 29.75, 1.5, -12, 29.5, 1.5, -12, 29.5, 1.5, -10.75, 29.5, 1.25, -10.75, 29.5, 1.25, -12, 29.75, 1.25, -12, 29.5, 1.25, -12, 29.5, 1.25, -10.75, 29.75, 1.25, -10.75, 29.75, 1.5, -12, 29.75, 1.5, -10.75, 29.5, 1.5, -10.75, 29.5, 1.5, -12, 29.75, 1.5, -12, 29.75, 1.25, -12, 29.75, 1.25, -10.75, 29.75, 1.5, -10.75, 29.5, 1.5, -10.75, 29.75, 1.5, -10.75, 29.75, 1.25, -10.75, 29.5, 1.25, -10.75, 31.5, 1.5, -12, 31.5, 1.25, -12, 31.75, 1.25, -12, 31.75, 1.5, -12, 31.5, 1.5, -12, 31.5, 1.5, -10.75, 31.5, 1.25, -10.75, 31.5, 1.25, -12, 31.75, 1.25, -12, 31.5, 1.25, -12, 31.5, 1.25, -10.75, 31.75, 1.25, -10.75, 31.75, 1.5, -12, 31.75, 1.5, -10.75, 31.5, 1.5, -10.75, 31.5, 1.5, -12, 31.75, 1.5, -12, 31.75, 1.25, -12, 31.75, 1.25, -10.75, 31.75, 1.5, -10.75, 31.5, 1.5, -10.75, 31.75, 1.5, -10.75, 31.75, 1.25, -10.75, 31.5, 1.25, -10.75, 29.5, 1.25, -11, 29.5, 1, -11, 29.75, 1, -11, 29.75, 1.25, -11, 29.5, 1.25, -11, 29.5, 1.25, -10.75, 29.5, 1, -10.75, 29.5, 1, -11, 29.75, 1, -11, 29.5, 1, -11, 29.5, 1, -10.75, 29.75, 1, -10.75, 29.75, 1.25, -11, 29.75, 1.25, -10.75, 29.5, 1.25, -10.75, 29.5, 1.25, -11, 29.75, 1.25, -11, 29.75, 1, -11, 29.75, 1, -10.75, 29.75, 1.25, -10.75, 29.5, 1.25, -10.75, 29.75, 1.25, -10.75, 29.75, 1, -10.75, 29.5, 1, -10.75, 31.5, 1.25, -11, 31.5, 1, -11, 31.75, 1, -11, 31.75, 1.25, -11, 31.5, 1.25, -11, 31.5, 1.25, -10.75, 31.5, 1, -10.75, 31.5, 1, -11, 31.75, 1, -11, 31.5, 1, -11, 31.5, 1, -10.75, 31.75, 1, -10.75, 31.75, 1.25, -11, 31.75, 1.25, -10.75, 31.5, 1.25, -10.75, 31.5, 1.25, -11, 31.75, 1.25, -11, 31.75, 1, -11, 31.75, 1, -10.75, 31.75, 1.25, -10.75, 31.5, 1.25, -10.75, 31.75, 1.25, -10.75, 31.75, 1, -10.75, 31.5, 1, -10.75, 70.5, 2, -19, 70.5, -0.5, -19, 71, -0.5, -19, 71, 2, -19, 70.5, 2, -19, 70.5, 2, -6, 70.5, -0.5, -6, 70.5, -0.5, -19, 71, -0.5, -19, 70.5, -0.5, -19, 70.5, -0.5, -6, 71, -0.5, -6, 71, 2, -19, 71, 2, -6, 70.5, 2, -6, 70.5, 2, -19, 70.5, 2, -6, 71, 2, -6, 71, -0.5, -6, 70.5, -0.5, -6, 63.5, 2, -6.5, 63.5, 1, -6.5, 70.5, 1, -6.5, 70.5, 2, -6.5, 63.5, 2, -6.5, 63.5, 2, -6, 63.5, 1, -6, 63.5, 1, -6.5, 70.5, 1, -6.5, 63.5, 1, -6.5, 63.5, 1, -6, 70.5, 1, -6, 70.5, 2, -6.5, 70.5, 2, -6, 63.5, 2, -6, 63.5, 2, -6.5, 70.5, 2, -6.5, 70.5, 1, -6.5, 70.5, 1, -6, 70.5, 2, -6, 10, 2, 2, 10, 0.5, 2, 10.5, 0.5, 2, 10.5, 2, 2, 10, 2, 2, 10, 2, 13, 10, 0.5, 13, 10, 0.5, 2, 10.5, 0.5, 2, 10, 0.5, 2, 10, 0.5, 13, 10.5, 0.5, 13, 31, 5, -22, 31, 3, -22, 38, 3, -22, 38, 5, -22, 31, 5, -22, 31, 5, -21.5, 31, 3, -21.5, 31, 3, -22, 38, 3, -22, 31, 3, -22, 31, 3, -21.5, 38, 3, -21.5, 38, 5, -22, 38, 3, -22, 38, 3, -21.5, 38, 5, -21.5, 38, 5, -22, 38, 3, -22, 38.5, 3, -22, 38.5, 5, -22, 38, 5, -22, 38, 5, -12.5, 38, 3, -12.5, 38, 3, -22, 38.5, 3, -22, 38, 3, -22, 38, 3, -12.5, 38.5, 3, -12.5, 38.5, 5, -22, 38.5, 5, -12.5, 38, 5, -12.5, 38, 5, -22, 38.5, 5, -22, 38.5, 3, -22, 38.5, 3, -12.5, 38.5, 5, -12.5, 38, 5, -12.5, 38.5, 5, -12.5, 38.5, 3, -12.5, 38, 3, -12.5, 35.25, 1, -12, 35.25, 0.5, -12, 40, 0.5, -12, 40, 1, -12, 35.25, 1, -12, 35.25, 1, -4.5, 35.25, 0.5, -4.5, 35.25, 0.5, -12, 40, 0.5, -12, 35.25, 0.5, -12, 35.25, 0.5, -4.5, 40, 0.5, -4.5, 40, 1, -12, 40, 0.5, -12, 40, 0.5, -4.5, 40, 1, -4.5, 35.25, 1, -4.5, 40, 1, -4.5, 40, 0.5, -4.5, 35.25, 0.5, -4.5, 32.75, 1, -9.75, 32.75, 0.5, -9.75, 35.25, 0.5, -9.75, 35.25, 1, -9.75, 32.75, 1, -9.75, 32.75, 1, -4.5, 32.75, 0.5, -4.5, 32.75, 0.5, -9.75, 35.25, 0.5, -9.75, 32.75, 0.5, -9.75, 32.75, 0.5, -4.5, 35.25, 0.5, -4.5, 35.25, 1, -9.75, 35.25, 0.5, -9.75, 35.25, 0.5, -4.5, 35.25, 1, -4.5, 32.75, 1, -4.5, 35.25, 1, -4.5, 35.25, 0.5, -4.5, 32.75, 0.5, -4.5, 26, 1, -4.5, 26, 0.5, -4.5, 33, 0.5, -4.5, 33, 1, -4.5, 26, 1, -4.5, 26, 1, 8, 26, 0.5, 8, 26, 0.5, -4.5, 33, 0.5, -4.5, 26, 0.5, -4.5, 26, 0.5, 8, 33, 0.5, 8, 33, 1, -4.5, 33, 0.5, -4.5, 33, 0.5, 8, 33, 1, 8, 26, 1, 8, 33, 1, 8, 33, 0.5, 8, 26, 0.5, 8, 26, 1, -12.25, 26, 0.75, -12.25, 32.75, 0.75, -12.25, 32.75, 1, -12.25, 26, 1, -12.25, 26, 1, -4.5, 26, 0.75, -4.5, 26, 0.75, -12.25, 32.75, 0.75, -12.25, 26, 0.75, -12.25, 26, 0.75, -4.5, 32.75, 0.75, -4.5, 32.75, 1, -12.25, 32.75, 0.75, -12.25, 32.75, 0.75, -4.5, 32.75, 1, -4.5, 26, 1, -4.5, 32.75, 1, -4.5, 32.75, 0.75, -4.5, 26, 0.75, -4.5, 10, 1, -4, 10, 1, 10, -5, 1, 10, -5, 1, -4, 10, 1, 10, 10, 1, 12.5, 2, 1, 12.5, 2, 1, 10, -10.5, 1, -1.5, -10.5, 0.5, -1.5, -5.5, 0.5, -1.5, -5.5, 1, -1.5, -10.5, 1, -1.5, -10.5, 1, 4.5, -10.5, 0.5, 4.5, -10.5, 0.5, -1.5, -5.5, 0.5, -1.5, -10.5, 0.5, -1.5, -10.5, 0.5, 4.5, -5.5, 0.5, 4.5, -5.5, 1, -1.5, -5.5, 1, 4.5, -10.5, 1, 4.5, -10.5, 1, -1.5, -5.5, 1, -1.5, -5.5, 0.5, -1.5, -5.5, 0.5, 4.5, -5.5, 1, 4.5, -10.5, 1, 4.5, -5.5, 1, 4.5, -5.5, 0.5, 4.5, -10.5, 0.5, 4.5, -10.5, 1.5, 0.5, -10.5, 1.25, 0.5, -8.5, 1.25, 0.5, -8.5, 1.5, 0.5, -10.5, 1.5, 0.5, -10.5, 1.5, 0.75, -10.5, 1.25, 0.75, -10.5, 1.25, 0.5, -8.5, 1.25, 0.5, -10.5, 1.25, 0.5, -10.5, 1.25, 0.75, -8.5, 1.25, 0.75, -8.5, 1.5, 0.5, -8.5, 1.5, 0.75, -10.5, 1.5, 0.75, -10.5, 1.5, 0.5, -8.5, 1.5, 0.5, -8.5, 1.25, 0.5, -8.5, 1.25, 0.75, -8.5, 1.5, 0.75, -10.5, 1.5, 0.75, -8.5, 1.5, 0.75, -8.5, 1.25, 0.75, -10.5, 1.25, 0.75, -10.5, 1.5, 2.25, -10.5, 1.25, 2.25, -8.5, 1.25, 2.25, -8.5, 1.5, 2.25, -10.5, 1.5, 2.25, -10.5, 1.5, 2.5, -10.5, 1.25, 2.5, -10.5, 1.25, 2.25, -8.5, 1.25, 2.25, -10.5, 1.25, 2.25, -10.5, 1.25, 2.5, -8.5, 1.25, 2.5, -8.5, 1.5, 2.25, -8.5, 1.5, 2.5, -10.5, 1.5, 2.5, -10.5, 1.5, 2.25, -8.5, 1.5, 2.25, -8.5, 1.25, 2.25, -8.5, 1.25, 2.5, -8.5, 1.5, 2.5, -10.5, 1.5, 2.5, -8.5, 1.5, 2.5, -8.5, 1.25, 2.5, -10.5, 1.25, 2.5, -8.75, 1.25, 2.25, -8.75, 1, 2.25, -8.5, 1, 2.25, -8.5, 1.25, 2.25, -8.75, 1.25, 2.25, -8.75, 1.25, 2.5, -8.75, 1, 2.5, -8.75, 1, 2.25, -8.5, 1, 2.25, -8.75, 1, 2.25, -8.75, 1, 2.5, -8.5, 1, 2.5, -8.5, 1.25, 2.25, -8.5, 1.25, 2.5, -8.75, 1.25, 2.5, -8.75, 1.25, 2.25, -8.5, 1.25, 2.25, -8.5, 1, 2.25, -8.5, 1, 2.5, -8.5, 1.25, 2.5, -8.75, 1.25, 2.5, -8.5, 1.25, 2.5, -8.5, 1, 2.5, -8.75, 1, 2.5, -8.75, 1.25, 0.5, -8.75, 1, 0.5, -8.5, 1, 0.5, -8.5, 1.25, 0.5, -8.75, 1.25, 0.5, -8.75, 1.25, 0.75, -8.75, 1, 0.75, -8.75, 1, 0.5, -8.5, 1, 0.5, -8.75, 1, 0.5, -8.75, 1, 0.75, -8.5, 1, 0.75, -8.5, 1.25, 0.5, -8.5, 1.25, 0.75, -8.75, 1.25, 0.75, -8.75, 1.25, 0.5, -8.5, 1.25, 0.5, -8.5, 1, 0.5, -8.5, 1, 0.75, -8.5, 1.25, 0.75, -8.75, 1.25, 0.75, -8.5, 1.25, 0.75, -8.5, 1, 0.75, -8.75, 1, 0.75, 25.5, 1, -4, 25.5, 1, 1.5, 10.5, 1, 1.5, 10.5, 1, -4, 40, 1, 1, 40, 1, 8, 33, 1, 8, 33, 1, 1, 47, 1, -12, 47, 1, 8, 40, 1, 8, 40, 1, -12, 40, -0.5, -5.5, 40, -0.5, 2, 33, -0.5, 2, 33, -0.5, -5.5, 46, 1, 8.5, 46, 1, 14.5, 39.5, 1, 14.5, 39.5, 1, 8.5, 38, 3, -21.5, 38, 3, -12.5, 31, 3, -12.5, 31, 3, -21.5, 59.5, 1, 8.5, 59.5, 1, 18.5, 46.5, 1, 18.5, 46.5, 1, 8.5, 54, 1, -12, 54, 1, 2, 47, 1, 2, 47, 1, -12, 63, 1, 2, 63, 1, 8, 47, 1, 8, 47, 1, 2, 70.5, 1, -17, 70.5, 1, -6.5, 63.5, 1, -6.5, 63.5, 1, -17, 40, 1, -12, 40, 1, -4.5, 35.25, 1, -4.5, 35.25, 1, -12, 35.25, 1, -9.75, 35.25, 1, -4.5, 32.75, 1, -4.5, 32.75, 1, -9.75, 33, 1, -4.5, 33, 1, 8, 26, 1, 8, 26, 1, -4.5, 32.75, 1, -12.25, 32.75, 1, -4.5, 26, 1, -4.5, 26, 1, -12.25, -11, 3, -1.5, -5.5, 3, -1.5, -5.5, 1, -1.5, -11, 1, -1.5, -10.5, 3, -1.5, -10.5, 1, -1.5, -10.5, 1, 5, -10.5, 3, 5, -5, 3, 3, -5, 1, 3, -5, 1, 10, -5, 3, 10, -5, 3, -4.5, -5, 1, -4.5, -5, 1, 0.5, -5, 3, 0.5, -5, 3, 2.5, -5, 1, 2.5, -5, 1, 3, -5, 3, 3, -5, 3, -4, 10, 3, -4, 10, 1, -4, -5, 1, -4, 10.5, 3, -0.5, 10.5, 1, -0.5, 10.5, 1, 2, 10.5, 3, 2, 10.5, 3, -4.5, 10.5, 1, -4.5, 10.5, 1, -2.5, 10.5, 3, -2.5, 10.5, 3, -4, 13.5, 3, -4, 13.5, 1, -4, 10.5, 1, -4, 15.5, 3, -4, 20, 3, -4, 20, 1, -4, 15.5, 1, -4, 22, 3, -4, 25.5, 3, -4, 25.5, 1, -4, 22, 1, -4, 2, 3, 10.5, 2, 1, 10.5, 2, 1, 13, 2, 3, 13, 44, 3, 8.5, 47.5, 3, 8.5, 47.5, 1, 8.5, 44, 1, 8.5, 47.5, 3, -12, 47.5, 1, -12, 47.5, 1, 8, 47.5, 3, 8, 35, 3, -12, 47, 3, -12, 47, 1, -12, 35, 1, -12, 26, 3, -12, 33, 3, -12, 33, 1, -12, 26, 1, -12, 46.5, 3, 12.5, 46.5, 1, 12.5, 46.5, 1, 19, 46.5, 3, 19, 46.5, 3, 8.5, 46.5, 1, 8.5, 46.5, 1, 10.5, 46.5, 3, 10.5, 47.5, 3, 8.5, 55.5, 3, 8.5, 55.5, 1, 8.5, 47.5, 1, 8.5, 57.5, 3, 8.5, 59.5, 3, 8.5, 59.5, 1, 8.5, 57.5, 1, 8.5, 47.5, 3, 2.5, 47.5, 1, 2.5, 50.5, 1, 2.5, 50.5, 3, 2.5, 47.5, 3, 2.5, 47.5, 3, 3, 47.5, 1, 3, 47.5, 1, 2.5, 50.5, 1, 2.5, 47.5, 1, 2.5, 47.5, 1, 3, 50.5, 1, 3, 50.5, 3, 2.5, 50.5, 3, 3, 47.5, 3, 3, 47.5, 3, 2.5, 50.5, 3, 2.5, 50.5, 1, 2.5, 50.5, 1, 3, 50.5, 3, 3, 47.5, 3, 3, 50.5, 3, 3, 50.5, 1, 3, 47.5, 1, 3, 63.5, 3, -9, 63.5, -0.5, -9, 63.5, -0.5, -6, 63.5, 3, -6, 47, 3, -12.5, 47, 1, -12.5, 63, 1, -12.5, 63, 3, -12.5, 47, 3, -12.5, 47, 3, -12, 47, 1, -12, 47, 1, -12.5, 63, 1, -12.5, 47, 1, -12.5, 47, 1, -12, 63, 1, -12, 63, 3, -12.5, 63, 3, -12, 47, 3, -12, 47, 3, -12.5, 63, 3, -12.5, 63, 1, -12.5, 63, 1, -12, 63, 3, -12, 47, 3, -12, 63, 3, -12, 63, 1, -12, 47, 1, -12, 63.5, 3, -17.5, 63.5, -0.5, -17.5, 63.5, -0.5, -11, 63.5, 3, -11, 63.5, 3, -17.5, 63.5, 1, -17.5, 70.5, 1, -17.5, 70.5, 3, -17.5, 63.5, 3, -17.5, 63.5, 3, -17, 63.5, 1, -17, 63.5, 1, -17.5, 70.5, 1, -17.5, 63.5, 1, -17.5, 63.5, 1, -17, 70.5, 1, -17, 70.5, 3, -17.5, 70.5, 3, -17, 63.5, 3, -17, 63.5, 3, -17.5, 70.5, 3, -17.5, 70.5, 1, -17.5, 70.5, 1, -17, 70.5, 3, -17, 63.5, 3, -17, 70.5, 3, -17, 70.5, 1, -17, 63.5, 1, -17, 65.5, 1.5, -17, 65.5, 1, -17, 66, 1, -17, 66, 1.5, -17, 65.5, 1.5, -17, 65.5, 1.5, -14.5, 65.5, 1, -14.5, 65.5, 1, -17, 66, 1, -17, 65.5, 1, -17, 65.5, 1, -14.5, 66, 1, -14.5, 66, 1.5, -17, 66, 1.5, -14.5, 65.5, 1.5, -14.5, 65.5, 1.5, -17, 66, 1.5, -17, 66, 1, -17, 66, 1, -14.5, 66, 1.5, -14.5, 65.5, 1.5, -14.5, 66, 1.5, -14.5, 66, 1, -14.5, 65.5, 1, -14.5, 68, 1.5, -17, 68, 1, -17, 68.5, 1, -17, 68.5, 1.5, -17, 68, 1.5, -17, 68, 1.5, -14.5, 68, 1, -14.5, 68, 1, -17, 68.5, 1, -17, 68, 1, -17, 68, 1, -14.5, 68.5, 1, -14.5, 68.5, 1.5, -17, 68.5, 1.5, -14.5, 68, 1.5, -14.5, 68, 1.5, -17, 68.5, 1.5, -17, 68.5, 1, -17, 68.5, 1, -14.5, 68.5, 1.5, -14.5, 68, 1.5, -14.5, 68.5, 1.5, -14.5, 68.5, 1, -14.5, 68, 1, -14.5, 65.5, 3, -15, 65.5, 1.5, -15, 66, 1.5, -15, 66, 3, -15, 65.5, 3, -15, 65.5, 3, -14.5, 65.5, 1.5, -14.5, 65.5, 1.5, -15, 66, 1.5, -15, 65.5, 1.5, -15, 65.5, 1.5, -14.5, 66, 1.5, -14.5, 66, 3, -15, 66, 3, -14.5, 65.5, 3, -14.5, 65.5, 3, -15, 66, 3, -15, 66, 1.5, -15, 66, 1.5, -14.5, 66, 3, -14.5, 65.5, 3, -14.5, 66, 3, -14.5, 66, 1.5, -14.5, 65.5, 1.5, -14.5, 68, 3, -15, 68, 1.5, -15, 68.5, 1.5, -15, 68.5, 3, -15, 68, 3, -15, 68, 3, -14.5, 68, 1.5, -14.5, 68, 1.5, -15, 68.5, 1.5, -15, 68, 1.5, -15, 68, 1.5, -14.5, 68.5, 1.5, -14.5, 68.5, 3, -15, 68.5, 3, -14.5, 68, 3, -14.5, 68, 3, -15, 68.5, 3, -15, 68.5, 1.5, -15, 68.5, 1.5, -14.5, 68.5, 3, -14.5, 68, 3, -14.5, 68.5, 3, -14.5, 68.5, 1.5, -14.5, 68, 1.5, -14.5, -11, 3, 5, -10.5, 3, 5, -10.5, 1, 5, -11, 1, 5, -10.5, 3, 5, -5.5, 3, 5, -5.5, 1, 5, -10.5, 1, 5, -5.5, 3, 10.5, 2, 3, 10.5, 2, 1, 10.5, -5.5, 1, 10.5, 10, 3, 2, 10.5, 3, 2, 10.5, 1, 2, 10, 1, 2, 10.5, 1, 1.5, 25.5, 1, 1.5, 25.5, 0.5, 1.5, 10.5, 0.5, 1.5, 25.5, 2, 1.5, 25.5, 2, 2, 10.5, 2, 2, 10.5, 2, 1.5, 10.5, 2, 2, 25.5, 2, 2, 25.5, 1, 2, 10.5, 1, 2, 13.5, 3, -4.5, 13.5, 3, -4, 10.5, 3, -4, 10.5, 3, -4.5, 20, 3, -4.5, 20, 3, -4, 15.5, 3, -4, 15.5, 3, -4.5, 25.5, 3, -4.5, 25.5, 3, -4, 22, 3, -4, 22, 3, -4.5, 10.5, 3.25, -4.5, 10.5, 3.25, 2, 10, 3.25, 2, 10, 3.25, -4.5, 10.5, 3.25, -4.5, 10.5, 3, -4.5, 10.5, 3, 2, 10.5, 3.25, 2, 10, 3.25, 2, 10.5, 3.25, 2, 10.5, 3, 2, 10, 3, 2, -5, 3.25, -4.5, -5, 3.25, 10.5, -5.5, 3.25, 10.5, -5.5, 3.25, -4.5, -5.5, 3.25, 10.5, -5, 3.25, 10.5, -5, 3, 10.5, -5.5, 3, 10.5, -5, 3.25, 10, -5, 3.25, 10.5, -5, 3, 10.5, -5, 3, 10, 2, 3.25, 10, 2, 3.25, 10.5, -5, 3.25, 10.5, -5, 3.25, 10, -5, 3.25, 10.5, 2, 3.25, 10.5, 2, 3, 10.5, -5, 3, 10.5, -5, 3.25, -4.5, -5, 3.25, -4, -5, 3, -4, -5, 3, -4.5, 10, 3.25, -4.5, 10, 3.25, -4, -5, 3.25, -4, -5, 3.25, -4.5, 10.5, 3.25, -4.5, 10.5, 3.25, -4, 10.5, 3, -4, 10.5, 3, -4.5, 25.5, 3.25, -4.5, 25.5, 3.25, -4, 10.5, 3.25, -4, 10.5, 3.25, -4.5, -10.5, 3.25, -2, -10.5, 3.25, -1.5, -10.5, 3, -1.5, -10.5, 3, -2, -5.5, 3.25, -2, -5.5, 3.25, -1.5, -10.5, 3.25, -1.5, -10.5, 3.25, -2, -10.5, 3.25, -2, -10.5, 3.25, 5, -11, 3.25, 5, -11, 3.25, -2, -11, 3.25, 5, -10.5, 3.25, 5, -10.5, 3, 5, -11, 3, 5, -10.5, 3.25, 4.5, -10.5, 3.25, 5, -10.5, 3, 5, -10.5, 3, 4.5, -5.5, 3.25, 4.5, -5.5, 3.25, 5, -10.5, 3.25, 5, -10.5, 3.25, 4.5, -10.5, 3.25, 5, -5.5, 3.25, 5, -5.5, 3, 5, -10.5, 3, 5, 10, 3, 12.5, 10, 0.5, 12.5, 10, 0.5, 13, 10, 3, 13, 2, 3, 13, 10, 3, 13, 10, 0.5, 13, 2, 0.5, 13, 1.5, 3, 13, 2, 3, 13, 2, 1, 13, 1.5, 1, 13, 2, 3.25, 12.5, 2, 3.25, 13, 2, 3, 13, 2, 3, 12.5, 10, 3.25, 12.5, 10, 3.25, 13, 2, 3.25, 13, 2, 3.25, 12.5, 10, 3.25, 12.5, 10, 3, 12.5, 10, 3, 13, 10, 3.25, 13, 2, 3.25, 13, 10, 3.25, 13, 10, 3, 13, 2, 3, 13, 2, 3.25, 10.5, 2, 3.25, 13, 1.5, 3.25, 13, 1.5, 3.25, 10.5, 1.5, 3.25, 13, 2, 3.25, 13, 2, 3, 13, 1.5, 3, 13, 26, 3.25, -12.25, 26, 3.25, 8.5, 25.5, 3.25, 8.5, 25.5, 3.25, -12.25, 25.5, 3.25, 8.5, 26, 3.25, 8.5, 26, 3, 8.5, 25.5, 3, 8.5, 47, 3, 8, 47.5, 3, 8, 47.5, 1, 8, 47, 1, 8, 26, 5.25, -12.5, 26, 5.25, -12, 26, 5, -12, 26, 5, -12.5, 47, 5.25, -12.5, 47, 5.25, -12, 26, 5.25, -12, 26, 5.25, -12.5, 47, 5, -12.5, 47, 5, -12, 35, 5, -12, 35, 5, -12.5, 33, 5, -12.5, 33, 5, -12, 26, 5, -12, 26, 5, -12.5, 26, 3, 8.5, 42, 3, 8.5, 42, 1, 8.5, 26, 1, 8.5, 47, 3, -12.5, 47, 3, -12, 35, 3, -12, 35, 3, -12.5, 33, 3, -12.5, 33, 3, -12, 26, 3, -12, 26, 3, -12.5, 40, 3, 15, 46, 3, 15, 46, 1, 15, 40, 1, 15, 46, 3, 19, 46.5, 3, 19, 46.5, 1, 19, 46, 1, 19, 60, 2, 8, 60, 1, 8, 60, 1, 18.5, 60, 2, 18.5, 59.5, 2, 18.5, 60, 2, 18.5, 60, 1, 18.5, 59.5, 1, 18.5, 46.5, 2, 19, 60, 2, 19, 60, 1, 19, 46.5, 1, 19, 46.5, 3.25, 8.5, 46.5, 3.25, 19, 46, 3.25, 19, 46, 3.25, 8.5, 46, 3.25, 19, 46.5, 3.25, 19, 46.5, 3, 19, 46, 3, 19, 40, 3.25, 14.5, 40, 3.25, 15, 40, 3, 15, 40, 3, 14.5, 46, 3.25, 14.5, 46, 3.25, 15, 40, 3.25, 15, 40, 3.25, 14.5, 40, 3.25, 15, 46, 3.25, 15, 46, 3, 15, 40, 3, 15, 40, 3.25, 8.5, 40, 3.25, 15, 39.5, 3.25, 15, 39.5, 3.25, 8.5, 39.5, 3.25, 15, 40, 3.25, 15, 40, 3, 15, 39.5, 3, 15, 40, 3.25, 8, 40, 3.25, 8.5, 40, 3, 8.5, 40, 3, 8, 59.5, 3.25, 8, 59.5, 3.25, 8.5, 40, 3.25, 8.5, 40, 3.25, 8, 26, 3.25, 8, 26, 3.25, 8.5, 26, 3, 8.5, 26, 3, 8, 40, 3.25, 8, 40, 3.25, 8.5, 26, 3.25, 8.5, 26, 3.25, 8, 26, 3.25, 8.5, 40, 3.25, 8.5, 40, 3, 8.5, 26, 3, 8.5, 63.5, 2, 2, 63.5, -0.5, 2, 63.5, -0.5, 8, 63.5, 2, 8, 63, 2, 8, 63.5, 2, 8, 63.5, -0.5, 8, 63, -0.5, 8, 59.5, 2, 8, 63, 2, 8, 63, 1, 8, 59.5, 1, 8, 47.5, 3.25, -12, 47.5, 3.25, 8, 47, 3.25, 8, 47, 3.25, -12, 47, 3.25, 8, 47.5, 3.25, 8, 47.5, 3, 8, 47, 3, 8, 63.5, 2, -6, 63.5, -0.5, -6, 63.5, -0.5, 2, 63.5, 2, 2, 71, 2, -19, 71, -0.5, -19, 71, -0.5, -6, 71, 2, -6, 63.5, 2, -6, 70.5, 2, -6, 70.5, 1, -6, 63.5, 1, -6, 63.5, 3.25, -17.5, 63.5, 3.25, -6, 63, 3.25, -6, 63, 3.25, -17.5, 63, 3.25, -6, 63.5, 3.25, -6, 63.5, 3, -6, 63, 3, -6, 47, 3.25, -12.5, 47, 3.25, -12, 47, 3, -12, 47, 3, -12.5, 63, 3.25, -12.5, 63, 3.25, -12, 47, 3.25, -12, 47, 3.25, -12.5, 63.5, 3.25, -17.5, 63.5, 3.25, -17, 63.5, 3, -17, 63.5, 3, -17.5, 70.5, 3.25, -17.5, 70.5, 3.25, -17, 63.5, 3.25, -17, 63.5, 3.25, -17.5, 10.5, 2, 2, 10.5, 2, 13, 10, 2, 13, 10, 2, 2, 10.5, 2, 2, 10.5, 0.5, 2, 10.5, 0.5, 13, 10.5, 2, 13, 10, 2, 13, 10.5, 2, 13, 10.5, 0.5, 13, 10, 0.5, 13, 38, 5, -22, 38, 5, -21.5, 31, 5, -21.5, 31, 5, -22, -5.5, 1, 0.5, -5.5, 0.5, 0.5, -5, 0.5, 0.5, -5, 1, 0.5, -5.5, 1, 0.5, -5.5, 1, 2.5, -5.5, 0.5, 2.5, -5.5, 0.5, 0.5, -5, 0.5, 0.5, -5.5, 0.5, 0.5, -5.5, 0.5, 2.5, -5, 0.5, 2.5, -5, 1, 0.5, -5, 1, 2.5, -5.5, 1, 2.5, -5.5, 1, 0.5, -5, 1, 0.5, -5, 0.5, 0.5, -5, 0.5, 2.5, -5, 1, 2.5, -5.5, 1, 2.5, -5, 1, 2.5, -5, 0.5, 2.5, -5.5, 0.5, 2.5, 10, 1, -2.5, 10, 0.5, -2.5, 10.5, 0.5, -2.5, 10.5, 1, -2.5, 10, 1, -2.5, 10, 1, -0.5, 10, 0.5, -0.5, 10, 0.5, -2.5, 10.5, 0.5, -2.5, 10, 0.5, -2.5, 10, 0.5, -0.5, 10.5, 0.5, -0.5, 10.5, 1, -2.5, 10.5, 1, -0.5, 10, 1, -0.5, 10, 1, -2.5, 10.5, 1, -2.5, 10.5, 0.5, -2.5, 10.5, 0.5, -0.5, 10.5, 1, -0.5, 10, 1, -0.5, 10.5, 1, -0.5, 10.5, 0.5, -0.5, 10, 0.5, -0.5, 19.5, 3, -5.5, 19.5, 1, -5.5, 20, 1, -5.5, 20, 3, -5.5, 19.5, 3, -5.5, 19.5, 3, -4.5, 19.5, 1, -4.5, 19.5, 1, -5.5, 20, 1, -5.5, 19.5, 1, -5.5, 19.5, 1, -4.5, 20, 1, -4.5, 20, 3, -5.5, 20, 3, -4.5, 19.5, 3, -4.5, 19.5, 3, -5.5, 20, 3, -5.5, 20, 1, -5.5, 20, 1, -4.5, 20, 3, -4.5, 19.5, 3, -4.5, 20, 3, -4.5, 20, 1, -4.5, 19.5, 1, -4.5, 22, 3, -5.5, 22, 1, -5.5, 22.5, 1, -5.5, 22.5, 3, -5.5, 22, 3, -5.5, 22, 3, -4.5, 22, 1, -4.5, 22, 1, -5.5, 22.5, 1, -5.5, 22, 1, -5.5, 22, 1, -4.5, 22.5, 1, -4.5, 22.5, 3, -5.5, 22.5, 3, -4.5, 22, 3, -4.5, 22, 3, -5.5, 22.5, 3, -5.5, 22.5, 1, -5.5, 22.5, 1, -4.5, 22.5, 3, -4.5, 22, 3, -4.5, 22.5, 3, -4.5, 22.5, 1, -4.5, 22, 1, -4.5, 25.5, 1, -2.5, 25.5, 0.5, -2.5, 26, 0.5, -2.5, 26, 1, -2.5, 25.5, 1, -2.5, 25.5, 1, -0.5, 25.5, 0.5, -0.5, 25.5, 0.5, -2.5, 26, 0.5, -2.5, 25.5, 0.5, -2.5, 25.5, 0.5, -0.5, 26, 0.5, -0.5, 26, 1, -2.5, 26, 1, -0.5, 25.5, 1, -0.5, 25.5, 1, -2.5, 26, 1, -2.5, 26, 0.5, -2.5, 26, 0.5, -0.5, 26, 1, -0.5, 25.5, 1, -0.5, 26, 1, -0.5, 26, 0.5, -0.5, 25.5, 0.5, -0.5, 13, 3, -5.5, 13, 1, -5.5, 13.5, 1, -5.5, 13.5, 3, -5.5, 13, 3, -5.5, 13, 3, -4.5, 13, 1, -4.5, 13, 1, -5.5, 13.5, 1, -5.5, 13, 1, -5.5, 13, 1, -4.5, 13.5, 1, -4.5, 13.5, 3, -5.5, 13.5, 3, -4.5, 13, 3, -4.5, 13, 3, -5.5, 13.5, 3, -5.5, 13.5, 1, -5.5, 13.5, 1, -4.5, 13.5, 3, -4.5, 13, 3, -4.5, 13.5, 3, -4.5, 13.5, 1, -4.5, 13, 1, -4.5, 15.5, 3, -5.5, 15.5, 1, -5.5, 16, 1, -5.5, 16, 3, -5.5, 15.5, 3, -5.5, 15.5, 3, -4.5, 15.5, 1, -4.5, 15.5, 1, -5.5, 16, 1, -5.5, 15.5, 1, -5.5, 15.5, 1, -4.5, 16, 1, -4.5, 16, 3, -5.5, 16, 3, -4.5, 15.5, 3, -4.5, 15.5, 3, -5.5, 16, 3, -5.5, 16, 1, -5.5, 16, 1, -4.5, 16, 3, -4.5, 15.5, 3, -4.5, 16, 3, -4.5, 16, 1, -4.5, 15.5, 1, -4.5, -5, 3.25, -4.5, -5, 3, -4.5, -5, 3, 10.5, -5, 3.25, 10.5, -5, 3.25, -4, 10, 3.25, -4, 10, 3, -4, -5, 3, -4, 10.5, 3.25, -4, 25.5, 3.25, -4, 25.5, 3, -4, 10.5, 3, -4, -10.5, 3.25, -1.5, -5.5, 3.25, -1.5, -5.5, 3, -1.5, -10.5, 3, -1.5, -10.5, 3.25, -2, -10.5, 3, -2, -10.5, 3, 5, -10.5, 3.25, 5, 2, 3.25, 10.5, 2, 3, 10.5, 2, 3, 13, 2, 3.25, 13, 26, 3.25, -12.25, 26, 3, -12.25, 26, 3, 8.5, 26, 3.25, 8.5, 26, 5.25, -12, 47, 5.25, -12, 47, 5, -12, 26, 5, -12, 46.5, 3.25, 8.5, 46.5, 3, 8.5, 46.5, 3, 19, 46.5, 3.25, 19, 40, 3.25, 8.5, 40, 3, 8.5, 40, 3, 15, 40, 3.25, 15, 40, 3.25, 8.5, 59.5, 3.25, 8.5, 59.5, 3, 8.5, 40, 3, 8.5, 47.5, 3.25, -12, 47.5, 3, -12, 47.5, 3, 8, 47.5, 3.25, 8, 63.5, 3.25, -17.5, 63.5, 3, -17.5, 63.5, 3, -6, 63.5, 3.25, -6, 47, 3.25, -12, 63, 3.25, -12, 63, 3, -12, 47, 3, -12, 63.5, 3.25, -17, 70.5, 3.25, -17, 70.5, 3, -17, 63.5, 3, -17, 35, 3, -12.5, 35, 3, -12, 33, 3, -12, 33, 3, -12.5, 36, 1.5, 6, 36, 1.25, 6, 39.5, 1.25, 6, 39.5, 1.5, 6, 36, 1.5, 6, 36, 1.5, 6.25, 36, 1.25, 6.25, 36, 1.25, 6, 39.5, 1.25, 6, 36, 1.25, 6, 36, 1.25, 6.25, 39.5, 1.25, 6.25, 39.5, 1.5, 6, 39.5, 1.5, 6.25, 36, 1.5, 6.25, 36, 1.5, 6, 39.5, 1.5, 6, 39.5, 1.25, 6, 39.5, 1.25, 6.25, 39.5, 1.5, 6.25, 36, 1.5, 6.25, 39.5, 1.5, 6.25, 39.5, 1.25, 6.25, 36, 1.25, 6.25, 45, 1.5, 3.75, 45, 1.25, 3.75, 47, 1.25, 3.75, 47, 1.5, 3.75, 45, 1.5, 3.75, 45, 1.5, 4, 45, 1.25, 4, 45, 1.25, 3.75, 47, 1.25, 3.75, 45, 1.25, 3.75, 45, 1.25, 4, 47, 1.25, 4, 47, 1.5, 3.75, 47, 1.5, 4, 45, 1.5, 4, 45, 1.5, 3.75, 47, 1.5, 3.75, 47, 1.25, 3.75, 47, 1.25, 4, 47, 1.5, 4, 45, 1.5, 4, 47, 1.5, 4, 47, 1.25, 4, 45, 1.25, 4, 45, 1.5, 1, 45, 1.25, 1, 47, 1.25, 1, 47, 1.5, 1, 45, 1.5, 1, 45, 1.5, 1.25, 45, 1.25, 1.25, 45, 1.25, 1, 47, 1.25, 1, 45, 1.25, 1, 45, 1.25, 1.25, 47, 1.25, 1.25, 47, 1.5, 1, 47, 1.5, 1.25, 45, 1.5, 1.25, 45, 1.5, 1, 47, 1.5, 1, 47, 1.25, 1, 47, 1.25, 1.25, 47, 1.5, 1.25, 45, 1.5, 1.25, 47, 1.5, 1.25, 47, 1.25, 1.25, 45, 1.25, 1.25, 42, 1, 8, 42, 0.5, 8, 44, 0.5, 8, 44, 1, 8, 42, 1, 8, 42, 1, 8.5, 42, 0.5, 8.5, 42, 0.5, 8, 44, 0.5, 8, 42, 0.5, 8, 42, 0.5, 8.5, 44, 0.5, 8.5, 44, 1, 8, 44, 1, 8.5, 42, 1, 8.5, 42, 1, 8, 44, 1, 8, 44, 0.5, 8, 44, 0.5, 8.5, 44, 1, 8.5, 42, 1, 8.5, 44, 1, 8.5, 44, 0.5, 8.5, 42, 0.5, 8.5, 46, 1, 10.5, 46, 0.5, 10.5, 46.5, 0.5, 10.5, 46.5, 1, 10.5, 46, 1, 10.5, 46, 1, 12.5, 46, 0.5, 12.5, 46, 0.5, 10.5, 46.5, 0.5, 10.5, 46, 0.5, 10.5, 46, 0.5, 12.5, 46.5, 0.5, 12.5, 46.5, 1, 10.5, 46.5, 1, 12.5, 46, 1, 12.5, 46, 1, 10.5, 46.5, 1, 10.5, 46.5, 0.5, 10.5, 46.5, 0.5, 12.5, 46.5, 1, 12.5, 46, 1, 12.5, 46.5, 1, 12.5, 46.5, 0.5, 12.5, 46, 0.5, 12.5, 55.5, 1, 8, 55.5, 0.5, 8, 57.5, 0.5, 8, 57.5, 1, 8, 55.5, 1, 8, 55.5, 1, 8.5, 55.5, 0.5, 8.5, 55.5, 0.5, 8, 57.5, 0.5, 8, 55.5, 0.5, 8, 55.5, 0.5, 8.5, 57.5, 0.5, 8.5, 57.5, 1, 8, 57.5, 1, 8.5, 55.5, 1, 8.5, 55.5, 1, 8, 57.5, 1, 8, 57.5, 0.5, 8, 57.5, 0.5, 8.5, 57.5, 1, 8.5, 55.5, 1, 8.5, 57.5, 1, 8.5, 57.5, 0.5, 8.5, 55.5, 0.5, 8.5, 63, 1, -11, 63, 0.5, -11, 63.5, 0.5, -11, 63.5, 1, -11, 63, 1, -11, 63, 1, -9, 63, 0.5, -9, 63, 0.5, -11, 63.5, 0.5, -11, 63, 0.5, -11, 63, 0.5, -9, 63.5, 0.5, -9, 63.5, 1, -11, 63.5, 1, -9, 63, 1, -9, 63, 1, -11, 63.5, 1, -11, 63.5, 0.5, -11, 63.5, 0.5, -9, 63.5, 1, -9, 63, 1, -9, 63.5, 1, -9, 63.5, 0.5, -9, 63, 0.5, -9, 33, 3, -12, 35, 3, -12, 35, 1, -12, 33, 1, -12, 33, 0.5, -5, 33, -0.5, -5, 40, -0.5, -5, 40, 0.5, -5, 33, 0.5, -5, 33, 0.5, -4.5, 33, -0.5, -4.5, 33, -0.5, -5, 40, -0.5, -5, 33, -0.5, -5, 33, -0.5, -4.5, 40, -0.5, -4.5, 40, 0.5, -5, 40, 0.5, -4.5, 33, 0.5, -4.5, 33, 0.5, -5, 40, 0.5, -5, 40, -0.5, -5, 40, -0.5, -4.5, 40, 0.5, -4.5, 33, 0.5, -4.5, 40, 0.5, -4.5, 40, -0.5, -4.5, 33, -0.5, -4.5, 33, 0.5, 1, 33, -0.5, 1, 40, -0.5, 1, 40, 0.5, 1, 33, 0.5, 1, 33, 0.5, 1.5, 33, -0.5, 1.5, 33, -0.5, 1, 40, -0.5, 1, 33, -0.5, 1, 33, -0.5, 1.5, 40, -0.5, 1.5, 40, 0.5, 1, 40, 0.5, 1.5, 33, 0.5, 1.5, 33, 0.5, 1, 40, 0.5, 1, 40, -0.5, 1, 40, -0.5, 1.5, 40, 0.5, 1.5, 33, 0.5, 1.5, 40, 0.5, 1.5, 40, -0.5, 1.5, 33, -0.5, 1.5, 32.5, 0.5, -5, 32.5, -0.5, -5, 33, -0.5, -5, 33, 0.5, -5, 32.5, 0.5, -5, 32.5, 0.5, 2, 32.5, -0.5, 2, 32.5, -0.5, -5, 33, -0.5, -5, 32.5, -0.5, -5, 32.5, -0.5, 2, 33, -0.5, 2, 33, 0.5, -5, 33, 0.5, 2, 32.5, 0.5, 2, 32.5, 0.5, -5, 33, 0.5, -5, 33, -0.5, -5, 33, -0.5, 2, 33, 0.5, 2, 32.5, 0.5, 2, 33, 0.5, 2, 33, -0.5, 2, 32.5, -0.5, 2, 40, 0.5, -5, 40, -0.5, -5, 40.5, -0.5, -5, 40.5, 0.5, -5, 40, 0.5, -5, 40, 0.5, 2, 40, -0.5, 2, 40, -0.5, -5, 40.5, -0.5, -5, 40, -0.5, -5, 40, -0.5, 2, 40.5, -0.5, 2, 40.5, 0.5, -5, 40.5, 0.5, 2, 40, 0.5, 2, 40, 0.5, -5, 40.5, 0.5, -5, 40.5, -0.5, -5, 40.5, -0.5, 2, 40.5, 0.5, 2, 40, 0.5, 2, 40.5, 0.5, 2, 40.5, -0.5, 2, 40, -0.5, 2, 35, 5, -12, 47, 5, -12, 47, 3, -12, 35, 3, -12, 26, 5, -12, 33, 5, -12, 33, 3, -12, 26, 3, -12, 31, 5, -21.5, 38, 5, -21.5, 38, 3, -21.5, 31, 3, -21.5, 51.25, 3, 8.5, 51.25, 1, 8.5, 51.5, 1, 8.5, 51.5, 3, 8.5, 51.25, 3, 8.5, 51.25, 3, 13.5, 51.25, 1, 13.5, 51.25, 1, 8.5, 51.5, 1, 8.5, 51.25, 1, 8.5, 51.25, 1, 13.5, 51.5, 1, 13.5, 51.5, 3, 8.5, 51.5, 3, 13.5, 51.25, 3, 13.5, 51.25, 3, 8.5, 51.5, 3, 8.5, 51.5, 1, 8.5, 51.5, 1, 13.5, 51.5, 3, 13.5, 51.25, 3, 13.5, 51.5, 3, 13.5, 51.5, 1, 13.5, 51.25, 1, 13.5, 51.25, 3, 15.5, 51.25, 1, 15.5, 51.5, 1, 15.5, 51.5, 3, 15.5, 51.25, 3, 15.5, 51.25, 3, 18.5, 51.25, 1, 18.5, 51.25, 1, 15.5, 51.5, 1, 15.5, 51.25, 1, 15.5, 51.25, 1, 18.5, 51.5, 1, 18.5, 51.5, 3, 15.5, 51.5, 3, 18.5, 51.25, 3, 18.5, 51.25, 3, 15.5, 51.5, 3, 15.5, 51.5, 1, 15.5, 51.5, 1, 18.5, 51.5, 3, 18.5, 51.25, 3, 18.5, 51.5, 3, 18.5, 51.5, 1, 18.5, 51.25, 1, 18.5, 49.75, 1.75, 8.5, 49.75, 1.5, 8.5, 50, 1.5, 8.5, 50, 1.75, 8.5, 49.75, 1.75, 8.5, 49.75, 1.75, 10, 49.75, 1.5, 10, 49.75, 1.5, 8.5, 50, 1.5, 8.5, 49.75, 1.5, 8.5, 49.75, 1.5, 10, 50, 1.5, 10, 50, 1.75, 8.5, 50, 1.75, 10, 49.75, 1.75, 10, 49.75, 1.75, 8.5, 50, 1.75, 8.5, 50, 1.5, 8.5, 50, 1.5, 10, 50, 1.75, 10, 49.75, 1.75, 10, 50, 1.75, 10, 50, 1.5, 10, 49.75, 1.5, 10, 49.75, 1.5, 9.75, 49.75, 1, 9.75, 50, 1, 9.75, 50, 1.5, 9.75, 49.75, 1.5, 9.75, 49.75, 1.5, 10, 49.75, 1, 10, 49.75, 1, 9.75, 50, 1, 9.75, 49.75, 1, 9.75, 49.75, 1, 10, 50, 1, 10, 50, 1.5, 9.75, 50, 1.5, 10, 49.75, 1.5, 10, 49.75, 1.5, 9.75, 50, 1.5, 9.75, 50, 1, 9.75, 50, 1, 10, 50, 1.5, 10, 49.75, 1.5, 10, 50, 1.5, 10, 50, 1, 10, 49.75, 1, 10, 54, 1, -12, 54, 0.5, -12, 63, 0.5, -12, 63, 1, -12, 54, 1, -12, 54, 1, -8, 54, 0.5, -8, 54, 0.5, -12, 63, 0.5, -12, 54, 0.5, -12, 54, 0.5, -8, 63, 0.5, -8, 63, 1, -12, 63, 1, -8, 54, 1, -8, 54, 1, -12, 63, 1, -12, 63, 0.5, -12, 63, 0.5, -8, 63, 1, -8, 54, 1, -8, 63, 1, -8, 63, 0.5, -8, 54, 0.5, -8, 33, 0.875, -12, 33, 0.5, -12, 35, 0.5, -12, 35, 0.875, -12, 33, 0.875, -12, 33, 0.875, -10, 33, 0.5, -10, 33, 0.5, -12, 35, 0.5, -12, 33, 0.5, -12, 33, 0.5, -10, 35, 0.5, -10, 35, 0.875, -12, 35, 0.875, -10, 33, 0.875, -10, 33, 0.875, -12, 35, 0.875, -12, 35, 0.5, -12, 35, 0.5, -10, 35, 0.875, -10, 33, 0.875, -10, 35, 0.875, -10, 35, 0.5, -10, 33, 0.5, -10, 34.25, 0.875, -16.75, 34.25, 0.5, -16.75, 36.25, 0.5, -16.75, 36.25, 0.875, -16.75, 34.25, 0.875, -16.75, 34.25, 0.875, -14.75, 34.25, 0.5, -14.75, 34.25, 0.5, -16.75, 36.25, 0.5, -16.75, 34.25, 0.5, -16.75, 34.25, 0.5, -14.75, 36.25, 0.5, -14.75, 36.25, 0.875, -16.75, 36.25, 0.875, -14.75, 34.25, 0.875, -14.75, 34.25, 0.875, -16.75, 36.25, 0.875, -16.75, 36.25, 0.5, -16.75, 36.25, 0.5, -14.75, 36.25, 0.875, -14.75, 34.25, 0.875, -14.75, 36.25, 0.875, -14.75, 36.25, 0.5, -14.75, 34.25, 0.5, -14.75, 32.75, 1, -12.25, 32.75, 0.5, -12.25, 35.25, 0.5, -12.25, 35.25, 1, -12.25, 32.75, 1, -12.25, 32.75, 1, -12, 32.75, 0.5, -12, 32.75, 0.5, -12.25, 35.25, 0.5, -12.25, 32.75, 0.5, -12.25, 32.75, 0.5, -12, 35.25, 0.5, -12, 35.25, 1, -12.25, 35.25, 1, -12, 32.75, 1, -12, 32.75, 1, -12.25, 35.25, 1, -12.25, 35.25, 0.5, -12.25, 35.25, 0.5, -12, 35.25, 1, -12, 35, 1, -12, 35, 0.5, -12, 35.25, 0.5, -12, 35.25, 1, -12, 35.25, 0.5, -12, 35, 0.5, -12, 35, 0.5, -10, 35.25, 0.5, -10, 35.25, 1, -12, 35.25, 1, -10, 35, 1, -10, 35, 1, -12, 35.25, 1, -12, 35.25, 0.5, -12, 35.25, 0.5, -10, 35.25, 1, -10, 35, 1, -10, 35.25, 1, -10, 35.25, 0.5, -10, 35, 0.5, -10, 32.75, 1, -10, 32.75, 1, -9.75, 32.75, 0.5, -9.75, 32.75, 0.5, -10, 35.25, 0.5, -10, 32.75, 0.5, -10, 32.75, 0.5, -9.75, 35.25, 0.5, -9.75, 35.25, 1, -10, 35.25, 1, -9.75, 32.75, 1, -9.75, 32.75, 1, -10, 35.25, 1, -10, 35.25, 0.5, -10, 35.25, 0.5, -9.75, 35.25, 1, -9.75, 32.75, 1, -9.75, 35.25, 1, -9.75, 35.25, 0.5, -9.75, 32.75, 0.5, -9.75, 32.75, 1, -12, 32.75, 0.5, -12, 33, 0.5, -12, 33, 1, -12, 32.75, 1, -12, 32.75, 1, -10, 32.75, 0.5, -10, 32.75, 0.5, -12, 33, 0.5, -12, 32.75, 0.5, -12, 32.75, 0.5, -10, 33, 0.5, -10, 33, 1, -12, 33, 1, -10, 32.75, 1, -10, 32.75, 1, -12, 32.75, 1, -10, 33, 1, -10, 33, 0.5, -10, 32.75, 0.5, -10, 34, 1, -17, 34, 0.5, -17, 36.5, 0.5, -17, 36.5, 1, -17, 34, 1, -17, 34, 1, -16.75, 34, 0.5, -16.75, 34, 0.5, -17, 36.5, 0.5, -17, 34, 0.5, -17, 34, 0.5, -16.75, 36.5, 0.5, -16.75, 36.5, 1, -17, 36.5, 1, -16.75, 34, 1, -16.75, 34, 1, -17, 36.5, 1, -17, 36.5, 0.5, -17, 36.5, 0.5, -16.75, 36.5, 1, -16.75, 36.25, 1, -16.75, 36.25, 0.5, -16.75, 36.5, 0.5, -16.75, 36.5, 1, -16.75, 36.5, 0.5, -16.75, 36.25, 0.5, -16.75, 36.25, 0.5, -14.75, 36.5, 0.5, -14.75, 36.5, 1, -16.75, 36.5, 1, -14.75, 36.25, 1, -14.75, 36.25, 1, -16.75, 36.5, 1, -16.75, 36.5, 0.5, -16.75, 36.5, 0.5, -14.75, 36.5, 1, -14.75, 36.25, 1, -14.75, 36.5, 1, -14.75, 36.5, 0.5, -14.75, 36.25, 0.5, -14.75, 34, 1, -14.75, 34, 1, -14.5, 34, 0.5, -14.5, 34, 0.5, -14.75, 36.5, 0.5, -14.75, 34, 0.5, -14.75, 34, 0.5, -14.5, 36.5, 0.5, -14.5, 36.5, 1, -14.75, 36.5, 1, -14.5, 34, 1, -14.5, 34, 1, -14.75, 36.5, 1, -14.75, 36.5, 0.5, -14.75, 36.5, 0.5, -14.5, 36.5, 1, -14.5, 34, 1, -14.5, 36.5, 1, -14.5, 36.5, 0.5, -14.5, 34, 0.5, -14.5, 34, 1, -16.75, 34, 0.5, -16.75, 34.25, 0.5, -16.75, 34.25, 1, -16.75, 34, 1, -16.75, 34, 1, -14.75, 34, 0.5, -14.75, 34, 0.5, -16.75, 34.25, 0.5, -16.75, 34, 0.5, -16.75, 34, 0.5, -14.75, 34.25, 0.5, -14.75, 34.25, 1, -16.75, 34.25, 1, -14.75, 34, 1, -14.75, 34, 1, -16.75, 34, 1, -14.75, 34.25, 1, -14.75, 34.25, 0.5, -14.75, 34, 0.5, -14.75, 32.75, 1, -12, 35.25, 1, -12, 35.25, 0.5, -12, 32.75, 0.5, -12, 35, 1, -12, 35, 1, -10, 35, 0.5, -10, 35, 0.5, -12, 32.75, 1, -10, 32.75, 0.5, -10, 35.25, 0.5, -10, 35.25, 1, -10, 33, 1, -12, 33, 0.5, -12, 33, 0.5, -10, 33, 1, -10, 34, 1, -16.75, 36.5, 1, -16.75, 36.5, 0.5, -16.75, 34, 0.5, -16.75, 36.25, 1, -16.75, 36.25, 1, -14.75, 36.25, 0.5, -14.75, 36.25, 0.5, -16.75, 34, 1, -14.75, 34, 0.5, -14.75, 36.5, 0.5, -14.75, 36.5, 1, -14.75, 34.25, 1, -16.75, 34.25, 0.5, -16.75, 34.25, 0.5, -14.75, 34.25, 1, -14.75) +vertices = PackedVector3Array(10, 1, -4, -4.999756, 1, -4, -4.999756, 0.5, -4, 10, 0.5, -4, -5, 0.5, 10, -5, 0.5, -4.000244, -5, 1, -4.000244, -5, 1, 10, -4.999756, 0.5, 10, 10, 0.5, 10, 10, 0.5, -4.000244, -4.999756, 0.5, -4.000244, 10, 1, 10, 10, 1, -4.000244, 10, 0.5, -4.000244, 10, 0.5, 10, 10, 0.5, 10, -4.999756, 0.5, 10, -4.999756, 1, 10, 10, 1, 10, -5.5, 3, -2, -10.999756, 3, -2, -10.999756, 1, -2, -5.5, 1, -2, -11, 1, -1.5, -11, 1, -1.9997559, -11, 3, -1.9997559, -11, 3, -1.5, -10.999756, 1, -1.5, -5.5, 1, -1.5, -5.5, 1, -1.9997559, -10.999756, 1, -1.9997559, -10.999756, 3, -1.5, -10.999756, 3, -1.9997559, -5.5, 3, -1.9997559, -5.5, 3, -1.5, -5.5, 3, -1.5, -5.5, 3, -1.9997559, -5.5, 1, -1.9997559, -5.5, 1, -1.5, -10.5, 3, -1.5, -10.999756, 3, -1.5, -10.999756, 1, -1.5, -10.5, 1, -1.5, -11, 1, 5, -11, 1, -1.5002441, -11, 3, -1.5002441, -11, 3, 5, -10.999756, 1, 5, -10.5, 1, 5, -10.5, 1, -1.5002441, -10.999756, 1, -1.5002441, -10.999756, 3, 5, -10.999756, 3, -1.5002441, -10.5, 3, -1.5002441, -10.5, 3, 5, -5.5, 3, 4.5, -10.500244, 3, 4.5, -10.500244, 1, 4.5, -5.5, 1, 4.5, -10.5, 1, 5, -10.5, 1, 4.5, -10.5, 3, 4.5, -10.5, 3, 5, -10.500244, 1, 5, -5.5, 1, 5, -5.5, 1, 4.5, -10.500244, 1, 4.5, -10.500244, 3, 5, -10.500244, 3, 4.5, -5.5, 3, 4.5, -5.5, 3, 5, -5.5, 3, 5, -5.5, 3, 4.5, -5.5, 1, 4.5, -5.5, 1, 5, -5, 3, 3, -5.5, 3, 3, -5.5, 1, 3, -5, 1, 3, -5.5, 1, 10, -5.5, 1, 3, -5.5, 3, 3, -5.5, 3, 10, -5.5, 1, 10, -5, 1, 10, -5, 1, 3, -5.5, 1, 3, -5.5, 3, 10, -5.5, 3, 3, -5, 3, 3, -5, 3, 10, -5, 1, 10, -5.5, 1, 10, -5.5, 3, 10, -5, 3, 10, -5, 3, -4.5, -5.5, 3, -4.5, -5.5, 1, -4.5, -5, 1, -4.5, -5.5, 1, 0.5, -5.5, 1, -4.500244, -5.5, 3, -4.500244, -5.5, 3, 0.5, -5.5, 1, 0.5, -5, 1, 0.5, -5, 1, -4.500244, -5.5, 1, -4.500244, -5.5, 3, 0.5, -5.5, 3, -4.500244, -5, 3, -4.500244, -5, 3, 0.5, -5, 1, 0.5, -5.5, 1, 0.5, -5.5, 3, 0.5, -5, 3, 0.5, -5, 3, 2.5, -5.5, 3, 2.5, -5.5, 1, 2.5, -5, 1, 2.5, -5.5, 1, 3, -5.5, 1, 2.5, -5.5, 3, 2.5, -5.5, 3, 3, -5.5, 1, 3, -5, 1, 3, -5, 1, 2.5, -5.5, 1, 2.5, -5.5, 3, 3, -5.5, 3, 2.5, -5, 3, 2.5, -5, 3, 3, -5, 1, 3, -5.5, 1, 3, -5.5, 3, 3, -5, 3, 3, 10, 3, -4.5, -4.999756, 3, -4.5, -4.999756, 1, -4.5, 10, 1, -4.5, -5, 1, -4, -5, 1, -4.500244, -5, 3, -4.500244, -5, 3, -4, -4.999756, 1, -4, 10, 1, -4, 10, 1, -4.500244, -4.999756, 1, -4.500244, -4.999756, 3, -4, -4.999756, 3, -4.500244, 10, 3, -4.500244, 10, 3, -4, 10, 3, -4, 10, 3, -4.500244, 10, 1, -4.500244, 10, 1, -4, 2, 3, 10, -5.5, 3, 10, -5.5, 1, 10, 2, 1, 10, -5.5, 1, 10.5, -5.5, 1, 10, -5.5, 3, 10, -5.5, 3, 10.5, -5.5, 1, 10.5, 2, 1, 10.5, 2, 1, 10, -5.5, 1, 10, -5.5, 3, 10.5, -5.5, 3, 10, 2, 3, 10, 2, 3, 10.5, 2, 3, 10.5, 2, 3, 10, 2, 1, 10, 2, 1, 10.5, 10.5, 3, -0.5, 10, 3, -0.5, 10, 1, -0.5, 10.5, 1, -0.5, 10, 1, 2, 10, 1, -0.5, 10, 3, -0.5, 10, 3, 2, 10, 1, 2, 10.5, 1, 2, 10.5, 1, -0.5, 10, 1, -0.5, 10, 3, 2, 10, 3, -0.5, 10.5, 3, -0.5, 10.5, 3, 2, 10.5, 3, -4.5, 10, 3, -4.5, 10, 1, -4.5, 10.5, 1, -4.5, 10, 1, -2.5, 10, 1, -4.500244, 10, 3, -4.500244, 10, 3, -2.5, 10, 1, -2.5, 10.5, 1, -2.5, 10.5, 1, -4.500244, 10, 1, -4.500244, 10, 3, -2.5, 10, 3, -4.500244, 10.5, 3, -4.500244, 10.5, 3, -2.5, 10.5, 1, -2.5, 10, 1, -2.5, 10, 3, -2.5, 10.5, 3, -2.5, 25.5, 1, -4, 10.5, 1, -4, 10.5, 0.5, -4, 25.5, 0.5, -4, 10.5, 0.5, 1.5, 10.5, 0.5, -4.000244, 10.5, 1, -4.000244, 10.5, 1, 1.5, 10.5, 0.5, 1.5, 25.5, 0.5, 1.5, 25.5, 0.5, -4.000244, 10.5, 0.5, -4.000244, 25.5, 1, 1.5, 25.5, 1, -4.000244, 25.5, 0.5, -4.000244, 25.5, 0.5, 1.5, 25.5, 2, 1.5, 10.5, 2, 1.5, 10.5, 1, 1.5, 25.5, 1, 1.5, 10.5, 1, 2, 10.5, 1, 1.5, 10.5, 2, 1.5, 10.5, 2, 2, 10.5, 1, 2, 25.5, 1, 2, 25.5, 1, 1.5, 10.5, 1, 1.5, 25.5, 2, 2, 25.5, 2, 1.5, 25.5, 1, 1.5, 25.5, 1, 2, 13.5, 3, -4.5, 10.5, 3, -4.5, 10.5, 1, -4.5, 13.5, 1, -4.5, 10.5, 1, -4, 10.5, 1, -4.500244, 10.5, 3, -4.500244, 10.5, 3, -4, 10.5, 1, -4, 13.5, 1, -4, 13.5, 1, -4.500244, 10.5, 1, -4.500244, 13.5, 3, -4, 13.5, 3, -4.500244, 13.5, 1, -4.500244, 13.5, 1, -4, 20, 3, -4.5, 15.5, 3, -4.5, 15.5, 1, -4.5, 20, 1, -4.5, 15.5, 1, -4, 15.5, 1, -4.500244, 15.5, 3, -4.500244, 15.5, 3, -4, 15.5, 1, -4, 20, 1, -4, 20, 1, -4.500244, 15.5, 1, -4.500244, 20, 3, -4, 20, 3, -4.500244, 20, 1, -4.500244, 20, 1, -4, 25.5, 3, -4.5, 22, 3, -4.5, 22, 1, -4.5, 25.5, 1, -4.5, 22, 1, -4, 22, 1, -4.500244, 22, 3, -4.500244, 22, 3, -4, 22, 1, -4, 25.5, 1, -4, 25.5, 1, -4.500244, 22, 1, -4.500244, 25.5, 3, -4, 25.5, 3, -4.500244, 25.5, 1, -4.500244, 25.5, 1, -4, 22, 1, -5, 20, 1, -5, 20, 0.5, -5, 22, 0.5, -5, 20, 0.5, -4, 20, 0.5, -4.999756, 20, 1, -4.999756, 20, 1, -4, 20, 0.5, -4, 22, 0.5, -4, 22, 0.5, -4.999756, 20, 0.5, -4.999756, 20, 1, -4, 20, 1, -4.999756, 22, 1, -4.999756, 22, 1, -4, 22, 1, -4, 22, 1, -4.999756, 22, 0.5, -4.999756, 22, 0.5, -4, 22, 0.5, -4, 20, 0.5, -4, 20, 1, -4, 22, 1, -4, 22, 3, -5.5, 20, 3, -5.5, 20, 1, -5.5, 22, 1, -5.5, 20, 1, -5, 20, 1, -5.5, 20, 3, -5.5, 20, 3, -5, 20, 1, -5, 22, 1, -5, 22, 1, -5.5, 20, 1, -5.5, 20, 3, -5, 20, 3, -5.5, 22, 3, -5.5, 22, 3, -5, 22, 3, -5, 22, 3, -5.5, 22, 1, -5.5, 22, 1, -5, 22, 1, -5, 20, 1, -5, 20, 3, -5, 22, 3, -5, 26, 3, -12, 25.5, 3, -12, 25.5, 1, -12, 26, 1, -12, 25.5, 1, -2.5, 25.5, 1, -12, 25.5, 3, -12, 25.5, 3, -2.5, 25.5, 1, -2.5, 26, 1, -2.5, 26, 1, -12, 25.5, 1, -12, 25.5, 3, -2.5, 25.5, 3, -12, 26, 3, -12, 26, 3, -2.5, 26, 3, -2.5, 26, 3, -12, 26, 1, -12, 26, 1, -2.5, 26, 1, -2.5, 25.5, 1, -2.5, 25.5, 3, -2.5, 26, 3, -2.5, 26, 3, -0.5, 25.5, 3, -0.5, 25.5, 1, -0.5, 26, 1, -0.5, 25.5, 1, 8.5, 25.5, 1, -0.5, 25.5, 3, -0.5, 25.5, 3, 8.5, 25.5, 1, 8.5, 26, 1, 8.5, 26, 1, -0.5, 25.5, 1, -0.5, 25.5, 3, 8.5, 25.5, 3, -0.5, 26, 3, -0.5, 26, 3, 8.5, 26, 3, 8.5, 26, 3, -0.5, 26, 1, -0.5, 26, 1, 8.5, 26, 1, 8.5, 25.5, 1, 8.5, 25.5, 3, 8.5, 26, 3, 8.5, 15.5, 1, -5.5, 13.5, 1, -5.5, 13.5, 0.5, -5.5, 15.5, 0.5, -5.5, 13.5, 0.5, -4.5, 13.5, 0.5, -5.5, 13.5, 1, -5.5, 13.5, 1, -4.5, 13.5, 0.5, -4.5, 15.5, 0.5, -4.5, 15.5, 0.5, -5.5, 13.5, 0.5, -5.5, 13.5, 1, -4.5, 13.5, 1, -5.5, 15.5, 1, -5.5, 15.5, 1, -4.5, 15.5, 1, -4.5, 15.5, 1, -5.5, 15.5, 0.5, -5.5, 15.5, 0.5, -4.5, 15.5, 0.5, -4.5, 13.5, 0.5, -4.5, 13.5, 1, -4.5, 15.5, 1, -4.5, 15.5, 3, -5.5, 13.5, 3, -5.5, 13.5, 1, -5.5, 15.5, 1, -5.5, 13.5, 1, -5, 13.5, 1, -5.5, 13.5, 3, -5.5, 13.5, 3, -5, 13.5, 1, -5, 15.5, 1, -5, 15.5, 1, -5.5, 13.5, 1, -5.5, 13.5, 3, -5, 13.5, 3, -5.5, 15.5, 3, -5.5, 15.5, 3, -5, 15.5, 3, -5, 15.5, 3, -5.5, 15.5, 1, -5.5, 15.5, 1, -5, 15.5, 1, -5, 13.5, 1, -5, 13.5, 3, -5, 15.5, 3, -5, 10, 1, 10, 2, 1, 10, 2, 0.5, 10, 10, 0.5, 10, 2, 0.5, 12.5, 2, 0.5, 10, 2, 1, 10, 2, 1, 12.5, 2, 0.5, 12.5, 10, 0.5, 12.5, 10, 0.5, 10, 2, 0.5, 10, 10, 1, 12.5, 10, 1, 10, 10, 0.5, 10, 10, 0.5, 12.5, 10, 0.5, 12.5, 2, 0.5, 12.5, 2, 1, 12.5, 10, 1, 12.5, 10, 3, 12.5, 2, 3, 12.5, 2, 0.5, 12.5, 10, 0.5, 12.5, 2, 0.5, 13, 2, 0.5, 12.5, 2, 3, 12.5, 2, 3, 13, 2, 0.5, 13, 10, 0.5, 13, 10, 0.5, 12.5, 2, 0.5, 12.5, 2, 3, 13, 2, 3, 12.5, 10, 3, 12.5, 10, 3, 13, 2, 3, 10.5, 1.5, 3, 10.5, 1.5, 1, 10.5, 2, 1, 10.5, 1.5, 1, 13, 1.5, 1, 10.5, 1.5, 3, 10.5, 1.5, 3, 13, 1.5, 1, 13, 2, 1, 13, 2, 1, 10.5, 1.5, 1, 10.5, 1.5, 3, 13, 1.5, 3, 10.5, 2, 3, 10.5, 2, 3, 13, 40, 1, 1, 33, 1, 1, 33, 0.5, 1, 40, 0.5, 1, 33, 0.5, 8, 33, 0.5, 1, 33, 1, 1, 33, 1, 8, 33, 0.5, 8, 40, 0.5, 8, 40, 0.5, 1, 33, 0.5, 1, 40, 1, 8, 40, 1, 1, 40, 0.5, 1, 40, 0.5, 8, 40, 0.5, 8, 33, 0.5, 8, 33, 1, 8, 40, 1, 8, 47, 1, -12, 40, 1, -12, 40, 0.5, -12, 47, 0.5, -12, 40, 0.5, 8, 40, 0.5, -12, 40, 1, -12, 40, 1, 8, 40, 0.5, 8, 47, 0.5, 8, 47, 0.5, -12, 40, 0.5, -12, 47, 1, 8, 47, 1, -12, 47, 0.5, -12, 47, 0.5, 8, 47, 0.5, 8, 40, 0.5, 8, 40, 1, 8, 47, 1, 8, 35, 3, -12.5, 33, 3, -12.5, 33, 1, -12.5, 35, 1, -12.5, 33, 1, -12, 33, 1, -12.5, 33, 3, -12.5, 33, 3, -12, 33, 1, -12, 35, 1, -12, 35, 1, -12.5, 33, 1, -12.5, 35, 3, -12, 35, 3, -12.5, 35, 1, -12.5, 35, 1, -12, 47.5, 3, 8, 44, 3, 8, 44, 1, 8, 47.5, 1, 8, 44, 1, 8.5, 44, 1, 8, 44, 3, 8, 44, 3, 8.5, 44, 1, 8.5, 47.5, 1, 8.5, 47.5, 1, 8, 44, 1, 8, 44, 3, 8.5, 44, 3, 8, 47.5, 3, 8, 47.5, 3, 8.5, 47.5, 3, 8.5, 47.5, 3, 8, 47.5, 1, 8, 47.5, 1, 8.5, 47.5, 3, -12, 47, 3, -12, 47, 1, -12, 47.5, 1, -12, 47, 1, 8, 47, 1, -12, 47, 3, -12, 47, 3, 8, 47, 1, 8, 47.5, 1, 8, 47.5, 1, -12, 47, 1, -12, 47, 3, 8, 47, 3, -12, 47.5, 3, -12, 47.5, 3, 8, 40, -0.5, -5.5, 33, -0.5, -5.5, 33, -1.0002441, -5.5, 40, -1.0002441, -5.5, 33, -1.0002441, 2, 33, -1.0002441, -5.5, 33, -0.5, -5.5, 33, -0.5, 2, 33, -1, 2, 40, -1, 2, 40, -1, -5.5, 33, -1, -5.5, 40, -0.5, 2, 40, -0.5, -5.5, 40, -1.0002441, -5.5, 40, -1.0002441, 2, 40, -1.0002441, 2, 33, -1.0002441, 2, 33, -0.5, 2, 40, -0.5, 2, 47, 5, -12.5, 35, 5, -12.5, 35, 3, -12.5, 47, 3, -12.5, 35, 3, -12, 35, 3, -12.5, 35, 5, -12.5, 35, 5, -12, 35, 3, -12, 47, 3, -12, 47, 3, -12.5, 35, 3, -12.5, 47, 5, -12, 47, 5, -12.5, 47, 3, -12.5, 47, 3, -12, 33, 5, -12.5, 26, 5, -12.5, 26, 3, -12.5, 33, 3, -12.5, 26, 3, -12, 26, 3, -12.5, 26, 5, -12.5, 26, 5, -12, 26, 3, -12, 33, 3, -12, 33, 3, -12.5, 26, 3, -12.5, 33, 5, -12, 33, 5, -12.5, 33, 3, -12.5, 33, 3, -12, 42, 3, 8, 26, 3, 8, 26, 1, 8, 42, 1, 8, 26, 1, 8.5, 26, 1, 8, 26, 3, 8, 26, 3, 8.5, 26, 1, 8.5, 42, 1, 8.5, 42, 1, 8, 26, 1, 8, 26, 3, 8.5, 26, 3, 8, 42, 3, 8, 42, 3, 8.5, 42, 3, 8.5, 42, 3, 8, 42, 1, 8, 42, 1, 8.5, 46, 1, 8.5, 39.5, 1, 8.5, 39.5, 0.5, 8.5, 46, 0.5, 8.5, 39.5, 0.5, 14.5, 39.5, 0.5, 8.5, 39.5, 1, 8.5, 39.5, 1, 14.5, 39.5, 0.5, 14.5, 46, 0.5, 14.5, 46, 0.5, 8.5, 39.5, 0.5, 8.5, 46, 1, 14.5, 46, 1, 8.5, 46, 0.5, 8.5, 46, 0.5, 14.5, 46, 0.5, 14.5, 39.5, 0.5, 14.5, 39.5, 1, 14.5, 46, 1, 14.5, 38, 3, -21.5, 31, 3, -21.5, 31, 2.5, -21.5, 38, 2.5, -21.5, 31, 2.5, -12.5, 31, 2.5, -21.5, 31, 3, -21.5, 31, 3, -12.5, 31, 2.5, -12.5, 38, 2.5, -12.5, 38, 2.5, -21.5, 31, 2.5, -21.5, 38, 3, -12.5, 38, 3, -21.5, 38, 2.5, -21.5, 38, 2.5, -12.5, 38, 2.5, -12.5, 31, 2.5, -12.5, 31, 3, -12.5, 38, 3, -12.5, 37.25, 1.5, -12, 37, 1.5, -12, 37, 1.25, -12, 37.25, 1.25, -12, 37, 1.25, -10.75, 37, 1.25, -12, 37, 1.5, -12, 37, 1.5, -10.75, 37, 1.25, -10.75, 37.25, 1.25, -10.75, 37.25, 1.25, -12, 37, 1.25, -12, 37, 1.5, -10.75, 37, 1.5, -12, 37.25, 1.5, -12, 37.25, 1.5, -10.75, 37.25, 1.5, -10.75, 37.25, 1.5, -12, 37.25, 1.25, -12, 37.25, 1.25, -10.75, 37.25, 1.25, -10.75, 37, 1.25, -10.75, 37, 1.5, -10.75, 37.25, 1.5, -10.75, 37.25, 1.25, -11, 37, 1.25, -11, 37, 1, -11, 37.25, 1, -11, 37, 1, -10.75, 37, 1, -10.999756, 37, 1.25, -10.999756, 37, 1.25, -10.75, 37, 1, -10.75, 37.25, 1, -10.75, 37.25, 1, -10.999756, 37, 1, -10.999756, 37, 1.25, -10.75, 37, 1.25, -10.999756, 37.25, 1.25, -10.999756, 37.25, 1.25, -10.75, 37.25, 1.25, -10.75, 37.25, 1.25, -10.999756, 37.25, 1, -10.999756, 37.25, 1, -10.75, 37.25, 1, -10.75, 37, 1, -10.75, 37, 1.25, -10.75, 37.25, 1.25, -10.75, 41.25, 1.5, -12, 41, 1.5, -12, 41, 1.25, -12, 41.25, 1.25, -12, 41, 1.25, -10.75, 41, 1.25, -12, 41, 1.5, -12, 41, 1.5, -10.75, 41, 1.25, -10.75, 41.25, 1.25, -10.75, 41.25, 1.25, -12, 41, 1.25, -12, 41, 1.5, -10.75, 41, 1.5, -12, 41.25, 1.5, -12, 41.25, 1.5, -10.75, 41.25, 1.5, -10.75, 41.25, 1.5, -12, 41.25, 1.25, -12, 41.25, 1.25, -10.75, 41.25, 1.25, -10.75, 41, 1.25, -10.75, 41, 1.5, -10.75, 41.25, 1.5, -10.75, 41.25, 1.5, -9.25, 37, 1.5, -9.25, 37, 1.25, -9.25, 41.25, 1.25, -9.25, 37, 1.25, -9, 37, 1.25, -9.249756, 37, 1.5, -9.249756, 37, 1.5, -9, 37, 1.25, -9, 41.25, 1.25, -9, 41.25, 1.25, -9.249756, 37, 1.25, -9.249756, 37, 1.5, -9, 37, 1.5, -9.249756, 41.25, 1.5, -9.249756, 41.25, 1.5, -9, 41.25, 1.5, -9, 41.25, 1.5, -9.249756, 41.25, 1.25, -9.249756, 41.25, 1.25, -9, 41.25, 1.25, -9, 37, 1.25, -9, 37, 1.5, -9, 41.25, 1.5, -9, 27.25, 1.5, -6, 26, 1.5, -6, 26, 1.25, -6, 27.25, 1.25, -6, 26, 1.25, -5.75, 26, 1.25, -6, 26, 1.5, -6, 26, 1.5, -5.75, 26, 1.25, -5.75, 27.25, 1.25, -5.75, 27.25, 1.25, -6, 26, 1.25, -6, 26, 1.5, -5.75, 26, 1.5, -6, 27.25, 1.5, -6, 27.25, 1.5, -5.75, 27.25, 1.5, -5.75, 27.25, 1.5, -6, 27.25, 1.25, -6, 27.25, 1.25, -5.75, 27.25, 1.25, -5.75, 26, 1.25, -5.75, 26, 1.5, -5.75, 27.25, 1.5, -5.75, 27.25, 1.5, -9.25, 26, 1.5, -9.25, 26, 1.25, -9.25, 27.25, 1.25, -9.25, 26, 1.25, -9, 26, 1.25, -9.249756, 26, 1.5, -9.249756, 26, 1.5, -9, 26, 1.25, -9, 27.25, 1.25, -9, 27.25, 1.25, -9.249756, 26, 1.25, -9.249756, 26, 1.5, -9, 26, 1.5, -9.249756, 27.25, 1.5, -9.249756, 27.25, 1.5, -9, 27.25, 1.5, -9, 27.25, 1.5, -9.249756, 27.25, 1.25, -9.249756, 27.25, 1.25, -9, 27.25, 1.25, -9, 26, 1.25, -9, 26, 1.5, -9, 27.25, 1.5, -9, 27.25, 1.5, -9, 27, 1.5, -9, 27, 1.25, -9, 27.25, 1.25, -9, 27, 1.25, -6, 27, 1.25, -9, 27, 1.5, -9, 27, 1.5, -6, 27, 1.25, -6, 27.25, 1.25, -6, 27.25, 1.25, -9, 27, 1.25, -9, 27, 1.5, -6, 27, 1.5, -9, 27.25, 1.5, -9, 27.25, 1.5, -6, 27.25, 1.5, -6, 27.25, 1.5, -9, 27.25, 1.25, -9, 27.25, 1.25, -6, 27.25, 1.25, -6, 27, 1.25, -6, 27, 1.5, -6, 27.25, 1.5, -6, 31, 1.5, 2.75, 27, 1.5, 2.75, 27, 1.25, 2.75, 31, 1.25, 2.75, 27, 1.25, 3, 27, 1.25, 2.75, 27, 1.5, 2.75, 27, 1.5, 3, 27, 1.25, 3, 31, 1.25, 3, 31, 1.25, 2.75, 27, 1.25, 2.75, 27, 1.5, 3, 27, 1.5, 2.75, 31, 1.5, 2.75, 31, 1.5, 3, 31, 1.5, 3, 31, 1.5, 2.75, 31, 1.25, 2.75, 31, 1.25, 3, 31, 1.25, 3, 27, 1.25, 3, 27, 1.5, 3, 31, 1.5, 3, 31, 1.5, 3, 30.75, 1.5, 3, 30.75, 1.25, 3, 31, 1.25, 3, 30.75, 1.25, 7, 30.75, 1.25, 3, 30.75, 1.5, 3, 30.75, 1.5, 7, 30.75, 1.25, 7, 31, 1.25, 7, 31, 1.25, 3, 30.75, 1.25, 3, 30.75, 1.5, 7, 30.75, 1.5, 3, 31, 1.5, 3, 31, 1.5, 7, 31, 1.5, 7, 31, 1.5, 3, 31, 1.25, 3, 31, 1.25, 7, 31, 1.25, 7, 30.75, 1.25, 7, 30.75, 1.5, 7, 31, 1.5, 7, 27.25, 1.5, 3, 27, 1.5, 3, 27, 1.25, 3, 27.25, 1.25, 3, 27, 1.25, 7, 27, 1.25, 3, 27, 1.5, 3, 27, 1.5, 7, 27, 1.25, 7, 27.25, 1.25, 7, 27.25, 1.25, 3, 27, 1.25, 3, 27, 1.5, 7, 27, 1.5, 3, 27.25, 1.5, 3, 27.25, 1.5, 7, 27.25, 1.5, 7, 27.25, 1.5, 3, 27.25, 1.25, 3, 27.25, 1.25, 7, 27.25, 1.25, 7, 27, 1.25, 7, 27, 1.5, 7, 27.25, 1.5, 7, 31, 1.5, 7, 27, 1.5, 7, 27, 1.25, 7, 31, 1.25, 7, 27, 1.25, 7.25, 27, 1.25, 7, 27, 1.5, 7, 27, 1.5, 7.25, 27, 1.25, 7.25, 31, 1.25, 7.25, 31, 1.25, 7, 27, 1.25, 7, 27, 1.5, 7.25, 27, 1.5, 7, 31, 1.5, 7, 31, 1.5, 7.25, 31, 1.5, 7.25, 31, 1.5, 7, 31, 1.25, 7, 31, 1.25, 7.25, 31, 1.25, 7.25, 27, 1.25, 7.25, 27, 1.5, 7.25, 31, 1.5, 7.25, 47, 3, -12.5, 35, 3, -12.5, 35, 1, -12.5, 47, 1, -12.5, 35, 1, -12, 35, 1, -12.5, 35, 3, -12.5, 35, 3, -12, 35, 1, -12, 47, 1, -12, 47, 1, -12.5, 35, 1, -12.5, 47, 3, -12, 47, 3, -12.5, 47, 1, -12.5, 47, 1, -12, 33, 3, -12.5, 26, 3, -12.5, 26, 1, -12.5, 33, 1, -12.5, 26, 1, -12, 26, 1, -12.5, 26, 3, -12.5, 26, 3, -12, 26, 1, -12, 33, 1, -12, 33, 1, -12.5, 26, 1, -12.5, 33, 3, -12, 33, 3, -12.5, 33, 1, -12.5, 33, 1, -12, 31.5, 5, -21.5, 31, 5, -21.5, 31, 3, -21.5, 31.5, 3, -21.5, 31, 3, -12.5, 31, 3, -21.5, 31, 5, -21.5, 31, 5, -12.5, 31, 3, -12.5, 31.5, 3, -12.5, 31.5, 3, -21.5, 31, 3, -21.5, 31, 5, -12.5, 31, 5, -21.5, 31.5, 5, -21.5, 31.5, 5, -12.5, 31.5, 5, -12.5, 31.5, 5, -21.5, 31.5, 3, -21.5, 31.5, 3, -12.5, 31.5, 3, -12.5, 31, 3, -12.5, 31, 5, -12.5, 31.5, 5, -12.5, 40, 3, 8.5, 39.5, 3, 8.5, 39.5, 1, 8.5, 40, 1, 8.5, 39.5, 1, 15, 39.5, 1, 8.5, 39.5, 3, 8.5, 39.5, 3, 15, 39.5, 1, 15, 40, 1, 15, 40, 1, 8.5, 39.5, 1, 8.5, 39.5, 3, 15, 39.5, 3, 8.5, 40, 3, 8.5, 40, 3, 15, 40, 3, 15, 40, 3, 8.5, 40, 1, 8.5, 40, 1, 15, 40, 1, 15, 39.5, 1, 15, 39.5, 3, 15, 40, 3, 15, 46, 3, 14.5, 40, 3, 14.5, 40, 1, 14.5, 46, 1, 14.5, 40, 1, 15, 40, 1, 14.5, 40, 3, 14.5, 40, 3, 15, 40, 1, 15, 46, 1, 15, 46, 1, 14.5, 40, 1, 14.5, 40, 3, 15, 40, 3, 14.5, 46, 3, 14.5, 46, 3, 15, 46, 3, 15, 46, 3, 14.5, 46, 1, 14.5, 46, 1, 15, 46.5, 3, 12.5, 46, 3, 12.5, 46, 1, 12.5, 46.5, 1, 12.5, 46, 1, 19, 46, 1, 12.5, 46, 3, 12.5, 46, 3, 19, 46, 1, 19, 46.5, 1, 19, 46.5, 1, 12.5, 46, 1, 12.5, 46, 3, 19, 46, 3, 12.5, 46.5, 3, 12.5, 46.5, 3, 19, 46.5, 3, 8.5, 46, 3, 8.5, 46, 1, 8.5, 46.5, 1, 8.5, 46, 1, 10.5, 46, 1, 8.5, 46, 3, 8.5, 46, 3, 10.5, 46, 1, 10.5, 46.5, 1, 10.5, 46.5, 1, 8.5, 46, 1, 8.5, 46, 3, 10.5, 46, 3, 8.5, 46.5, 3, 8.5, 46.5, 3, 10.5, 46.5, 1, 10.5, 46, 1, 10.5, 46, 3, 10.5, 46.5, 3, 10.5, 59.5, 1, 8.5, 46.5, 1, 8.5, 46.5, 0.5, 8.5, 59.5, 0.5, 8.5, 46.5, 0.5, 18.5, 46.5, 0.5, 8.5, 46.5, 1, 8.5, 46.5, 1, 18.5, 46.5, 0.5, 18.5, 59.5, 0.5, 18.5, 59.5, 0.5, 8.5, 46.5, 0.5, 8.5, 59.5, 1, 18.5, 59.5, 1, 8.5, 59.5, 0.5, 8.5, 59.5, 0.5, 18.5, 59.5, 0.5, 18.5, 46.5, 0.5, 18.5, 46.5, 1, 18.5, 59.5, 1, 18.5, 55.5, 3, 8, 47.5, 3, 8, 47.5, 1, 8, 55.5, 1, 8, 47.5, 1, 8.5, 47.5, 1, 8, 47.5, 3, 8, 47.5, 3, 8.5, 47.5, 1, 8.5, 55.5, 1, 8.5, 55.5, 1, 8, 47.5, 1, 8, 47.5, 3, 8.5, 47.5, 3, 8, 55.5, 3, 8, 55.5, 3, 8.5, 55.5, 3, 8.5, 55.5, 3, 8, 55.5, 1, 8, 55.5, 1, 8.5, 59.5, 3, 8, 57.5, 3, 8, 57.5, 1, 8, 59.5, 1, 8, 57.5, 1, 8.5, 57.5, 1, 8, 57.5, 3, 8, 57.5, 3, 8.5, 57.5, 1, 8.5, 59.5, 1, 8.5, 59.5, 1, 8, 57.5, 1, 8, 57.5, 3, 8.5, 57.5, 3, 8, 59.5, 3, 8, 59.5, 3, 8.5, 59.5, 3, 8.5, 59.5, 3, 8, 59.5, 1, 8, 59.5, 1, 8.5, 60, 2, 8, 59.5, 2, 8, 59.5, 1, 8, 60, 1, 8, 59.5, 1, 18.5, 59.5, 1, 8, 59.5, 2, 8, 59.5, 2, 18.5, 59.5, 1, 18.5, 60, 1, 18.5, 60, 1, 8, 59.5, 1, 8, 59.5, 2, 18.5, 59.5, 2, 8, 60, 2, 8, 60, 2, 18.5, 60, 2, 18.5, 46.5, 2, 18.5, 46.5, 1, 18.5, 60, 1, 18.5, 46.5, 1, 19, 46.5, 1, 18.5, 46.5, 2, 18.5, 46.5, 2, 19, 46.5, 1, 19, 60, 1, 19, 60, 1, 18.5, 46.5, 1, 18.5, 46.5, 2, 19, 46.5, 2, 18.5, 60, 2, 18.5, 60, 2, 19, 60, 2, 19, 60, 2, 18.5, 60, 1, 18.5, 60, 1, 19, 54, 1, -12, 47, 1, -12, 47, 0.5, -12, 54, 0.5, -12, 47, 0.5, 2, 47, 0.5, -12, 47, 1, -12, 47, 1, 2, 47, 0.5, 2, 54, 0.5, 2, 54, 0.5, -12, 47, 0.5, -12, 54, 1, 2, 54, 1, -12, 54, 0.5, -12, 54, 0.5, 2, 54, 0.5, 2, 47, 0.5, 2, 47, 1, 2, 54, 1, 2, 63, 1, 2, 47, 1, 2, 47, 0.5, 2, 63, 0.5, 2, 47, 0.5, 8, 47, 0.5, 2, 47, 1, 2, 47, 1, 8, 47, 0.5, 8, 63, 0.5, 8, 63, 0.5, 2, 47, 0.5, 2, 63, 1, 8, 63, 1, 2, 63, 0.5, 2, 63, 0.5, 8, 63, 0.5, 8, 47, 0.5, 8, 47, 1, 8, 63, 1, 8, 63.5, 3, -9, 63, 3, -9, 63, -0.5, -9, 63.5, -0.5, -9, 63, -0.5, -6, 63, -0.5, -9, 63, 3, -9, 63, 3, -6, 63, -0.5, -6, 63.5, -0.5, -6, 63.5, -0.5, -9, 63, -0.5, -9, 63, 3, -6, 63, 3, -9, 63.5, 3, -9, 63.5, 3, -6, 63.5, -0.5, -6, 63, -0.5, -6, 63, 3, -6, 63.5, 3, -6, 63.5, 2, 2, 63, 2, 2, 63, -0.5, 2, 63.5, -0.5, 2, 63, -0.5, 8, 63, -0.5, 2, 63, 2, 2, 63, 2, 8, 63, -0.5, 8, 63.5, -0.5, 8, 63.5, -0.5, 2, 63, -0.5, 2, 63, 2, 8, 63, 2, 2, 63.5, 2, 2, 63.5, 2, 8, 63, 2, 7.5, 59.5, 2, 7.5, 59.5, 1, 7.5, 63, 1, 7.5, 59.5, 1, 8, 59.5, 1, 7.5, 59.5, 2, 7.5, 59.5, 2, 8, 59.5, 1, 8, 63, 1, 8, 63, 1, 7.5, 59.5, 1, 7.5, 59.5, 2, 8, 59.5, 2, 7.5, 63, 2, 7.5, 63, 2, 8, 63, 2, 8, 63, 2, 7.5, 63, 1, 7.5, 63, 1, 8, 70.5, 1, -17, 63.5, 1, -17, 63.5, 0.5, -17, 70.5, 0.5, -17, 63.5, 0.5, -6.5, 63.5, 0.5, -17, 63.5, 1, -17, 63.5, 1, -6.5, 63.5, 0.5, -6.5, 70.5, 0.5, -6.5, 70.5, 0.5, -17, 63.5, 0.5, -17, 70.5, 1, -6.5, 70.5, 1, -17, 70.5, 0.5, -17, 70.5, 0.5, -6.5, 70.5, 0.5, -6.5, 63.5, 0.5, -6.5, 63.5, 1, -6.5, 70.5, 1, -6.5, 63.5, 2, -6, 63, 2, -6, 63, -0.5, -6, 63.5, -0.5, -6, 63, -0.5, 2, 63, -0.5, -6, 63, 2, -6, 63, 2, 2, 63, -0.5, 2, 63.5, -0.5, 2, 63.5, -0.5, -6, 63, -0.5, -6, 63, 2, 2, 63, 2, -6, 63.5, 2, -6, 63.5, 2, 2, 63.5, -0.5, 2, 63, -0.5, 2, 63, 2, 2, 63.5, 2, 2, 63.5, 3, -17.5, 63, 3, -17.5, 63, -0.5, -17.5, 63.5, -0.5, -17.5, 63, -0.5, -11, 63, -0.5, -17.5, 63, 3, -17.5, 63, 3, -11, 63, -0.5, -11, 63.5, -0.5, -11, 63.5, -0.5, -17.5, 63, -0.5, -17.5, 63, 3, -11, 63, 3, -17.5, 63.5, 3, -17.5, 63.5, 3, -11, 63.5, -0.5, -11, 63, -0.5, -11, 63, 3, -11, 63.5, 3, -11, 29.75, 1.5, -12, 29.5, 1.5, -12, 29.5, 1.25, -12, 29.75, 1.25, -12, 29.5, 1.25, -10.75, 29.5, 1.25, -12, 29.5, 1.5, -12, 29.5, 1.5, -10.75, 29.5, 1.25, -10.75, 29.75, 1.25, -10.75, 29.75, 1.25, -12, 29.5, 1.25, -12, 29.5, 1.5, -10.75, 29.5, 1.5, -12, 29.75, 1.5, -12, 29.75, 1.5, -10.75, 29.75, 1.5, -10.75, 29.75, 1.5, -12, 29.75, 1.25, -12, 29.75, 1.25, -10.75, 29.75, 1.25, -10.75, 29.5, 1.25, -10.75, 29.5, 1.5, -10.75, 29.75, 1.5, -10.75, 31.75, 1.5, -12, 31.5, 1.5, -12, 31.5, 1.25, -12, 31.75, 1.25, -12, 31.5, 1.25, -10.75, 31.5, 1.25, -12, 31.5, 1.5, -12, 31.5, 1.5, -10.75, 31.5, 1.25, -10.75, 31.75, 1.25, -10.75, 31.75, 1.25, -12, 31.5, 1.25, -12, 31.5, 1.5, -10.75, 31.5, 1.5, -12, 31.75, 1.5, -12, 31.75, 1.5, -10.75, 31.75, 1.5, -10.75, 31.75, 1.5, -12, 31.75, 1.25, -12, 31.75, 1.25, -10.75, 31.75, 1.25, -10.75, 31.5, 1.25, -10.75, 31.5, 1.5, -10.75, 31.75, 1.5, -10.75, 29.75, 1.25, -11, 29.5, 1.25, -11, 29.5, 1, -11, 29.75, 1, -11, 29.5, 1, -10.75, 29.5, 1, -10.999756, 29.5, 1.25, -10.999756, 29.5, 1.25, -10.75, 29.5, 1, -10.75, 29.75, 1, -10.75, 29.75, 1, -10.999756, 29.5, 1, -10.999756, 29.5, 1.25, -10.75, 29.5, 1.25, -10.999756, 29.75, 1.25, -10.999756, 29.75, 1.25, -10.75, 29.75, 1.25, -10.75, 29.75, 1.25, -10.999756, 29.75, 1, -10.999756, 29.75, 1, -10.75, 29.75, 1, -10.75, 29.5, 1, -10.75, 29.5, 1.25, -10.75, 29.75, 1.25, -10.75, 31.75, 1.25, -11, 31.5, 1.25, -11, 31.5, 1, -11, 31.75, 1, -11, 31.5, 1, -10.75, 31.5, 1, -10.999756, 31.5, 1.25, -10.999756, 31.5, 1.25, -10.75, 31.5, 1, -10.75, 31.75, 1, -10.75, 31.75, 1, -10.999756, 31.5, 1, -10.999756, 31.5, 1.25, -10.75, 31.5, 1.25, -10.999756, 31.75, 1.25, -10.999756, 31.75, 1.25, -10.75, 31.75, 1.25, -10.75, 31.75, 1.25, -10.999756, 31.75, 1, -10.999756, 31.75, 1, -10.75, 31.75, 1, -10.75, 31.5, 1, -10.75, 31.5, 1.25, -10.75, 31.75, 1.25, -10.75, 71, 2, -19, 70.5, 2, -19, 70.5, -0.5, -19, 71, -0.5, -19, 70.5, -0.5, -6, 70.5, -0.5, -19, 70.5, 2, -19, 70.5, 2, -6, 70.5, -0.5, -6, 71, -0.5, -6, 71, -0.5, -19, 70.5, -0.5, -19, 70.5, 2, -6, 70.5, 2, -19, 71, 2, -19, 71, 2, -6, 71, -0.5, -6, 70.5, -0.5, -6, 70.5, 2, -6, 71, 2, -6, 70.5, 2, -6.5, 63.5, 2, -6.5, 63.5, 1, -6.5, 70.5, 1, -6.5, 63.5, 1, -6, 63.5, 1, -6.5, 63.5, 2, -6.5, 63.5, 2, -6, 63.5, 1, -6, 70.5, 1, -6, 70.5, 1, -6.5, 63.5, 1, -6.5, 63.5, 2, -6, 63.5, 2, -6.5, 70.5, 2, -6.5, 70.5, 2, -6, 70.5, 2, -6, 70.5, 2, -6.5, 70.5, 1, -6.5, 70.5, 1, -6, 10.5, 2, 2, 10, 2, 2, 10, 0.5, 2, 10.5, 0.5, 2, 10, 0.5, 13, 10, 0.5, 2, 10, 2, 2, 10, 2, 13, 10, 0.5, 13, 10.5, 0.5, 13, 10.5, 0.5, 2, 10, 0.5, 2, 38, 5, -22, 31, 5, -22, 31, 3, -22, 38, 3, -22, 31, 3, -21.5, 31, 3, -22, 31, 5, -22, 31, 5, -21.5, 31, 3, -21.5, 38, 3, -21.5, 38, 3, -22, 31, 3, -22, 38, 5, -21.5, 38, 5, -22, 38, 3, -22, 38, 3, -21.5, 38.5, 5, -22, 38, 5, -22, 38, 3, -22, 38.5, 3, -22, 38, 3, -12.5, 38, 3, -22, 38, 5, -22, 38, 5, -12.5, 38, 3, -12.5, 38.5, 3, -12.5, 38.5, 3, -22, 38, 3, -22, 38, 5, -12.5, 38, 5, -22, 38.5, 5, -22, 38.5, 5, -12.5, 38.5, 5, -12.5, 38.5, 5, -22, 38.5, 3, -22, 38.5, 3, -12.5, 38.5, 3, -12.5, 38, 3, -12.5, 38, 5, -12.5, 38.5, 5, -12.5, 40, 1, -12, 35.25, 1, -12, 35.25, 0.5, -12, 40, 0.5, -12, 35.25, 0.5, -4.5, 35.25, 0.5, -12, 35.25, 1, -12, 35.25, 1, -4.5, 35.25, 0.5, -4.5, 40, 0.5, -4.5, 40, 0.5, -12, 35.25, 0.5, -12, 40, 1, -4.5, 40, 1, -12, 40, 0.5, -12, 40, 0.5, -4.5, 40, 0.5, -4.5, 35.25, 0.5, -4.5, 35.25, 1, -4.5, 40, 1, -4.5, 35.25, 1, -9.75, 32.75, 1, -9.75, 32.75, 0.5, -9.75, 35.25, 0.5, -9.75, 32.75, 0.5, -4.5, 32.75, 0.5, -9.749756, 32.75, 1, -9.749756, 32.75, 1, -4.5, 32.75, 0.5, -4.5, 35.25, 0.5, -4.5, 35.25, 0.5, -9.749756, 32.75, 0.5, -9.749756, 35.25, 1, -4.5, 35.25, 1, -9.749756, 35.25, 0.5, -9.749756, 35.25, 0.5, -4.5, 35.25, 0.5, -4.5, 32.75, 0.5, -4.5, 32.75, 1, -4.5, 35.25, 1, -4.5, 33, 1, -4.5, 26, 1, -4.5, 26, 0.5, -4.5, 33, 0.5, -4.5, 26, 0.5, 8, 26, 0.5, -4.500244, 26, 1, -4.500244, 26, 1, 8, 26, 0.5, 8, 33, 0.5, 8, 33, 0.5, -4.500244, 26, 0.5, -4.500244, 33, 1, 8, 33, 1, -4.500244, 33, 0.5, -4.500244, 33, 0.5, 8, 33, 0.5, 8, 26, 0.5, 8, 26, 1, 8, 33, 1, 8, 32.75, 1, -12.25, 26, 1, -12.25, 26, 0.75, -12.25, 32.75, 0.75, -12.25, 26, 0.75, -4.5, 26, 0.75, -12.25, 26, 1, -12.25, 26, 1, -4.5, 26, 0.75, -4.5, 32.75, 0.75, -4.5, 32.75, 0.75, -12.25, 26, 0.75, -12.25, 32.75, 1, -4.5, 32.75, 1, -12.25, 32.75, 0.75, -12.25, 32.75, 0.75, -4.5, 32.75, 0.75, -4.5, 26, 0.75, -4.5, 26, 1, -4.5, 32.75, 1, -4.5, -4.999756, 1, 10, -4.999756, 1, -4.000244, 10, 1, -4.000244, 10, 1, 10, 2, 1, 12.5, 2, 1, 10, 10, 1, 10, 10, 1, 12.5, -5.5, 1, -1.5, -10.500244, 1, -1.5, -10.500244, 0.5, -1.5, -5.5, 0.5, -1.5, -10.5, 0.5, 4.5, -10.5, 0.5, -1.5002441, -10.5, 1, -1.5002441, -10.5, 1, 4.5, -10.500244, 0.5, 4.5, -5.5, 0.5, 4.5, -5.5, 0.5, -1.5002441, -10.500244, 0.5, -1.5002441, -10.500244, 1, 4.5, -10.500244, 1, -1.5002441, -5.5, 1, -1.5002441, -5.5, 1, 4.5, -5.5, 1, 4.5, -5.5, 1, -1.5002441, -5.5, 0.5, -1.5002441, -5.5, 0.5, 4.5, -5.5, 0.5, 4.5, -10.500244, 0.5, 4.5, -10.500244, 1, 4.5, -5.5, 1, 4.5, -8.5, 1.5, 0.5, -10.500244, 1.5, 0.5, -10.500244, 1.25, 0.5, -8.5, 1.25, 0.5, -10.5, 1.25, 0.75, -10.5, 1.25, 0.5, -10.5, 1.5, 0.5, -10.5, 1.5, 0.75, -10.500244, 1.25, 0.75, -8.5, 1.25, 0.75, -8.5, 1.25, 0.5, -10.500244, 1.25, 0.5, -10.500244, 1.5, 0.75, -10.500244, 1.5, 0.5, -8.5, 1.5, 0.5, -8.5, 1.5, 0.75, -8.5, 1.5, 0.75, -8.5, 1.5, 0.5, -8.5, 1.25, 0.5, -8.5, 1.25, 0.75, -8.5, 1.25, 0.75, -10.500244, 1.25, 0.75, -10.500244, 1.5, 0.75, -8.5, 1.5, 0.75, -8.5, 1.5, 2.25, -10.500244, 1.5, 2.25, -10.500244, 1.25, 2.25, -8.5, 1.25, 2.25, -10.5, 1.25, 2.5, -10.5, 1.25, 2.25, -10.5, 1.5, 2.25, -10.5, 1.5, 2.5, -10.500244, 1.25, 2.5, -8.5, 1.25, 2.5, -8.5, 1.25, 2.25, -10.500244, 1.25, 2.25, -10.500244, 1.5, 2.5, -10.500244, 1.5, 2.25, -8.5, 1.5, 2.25, -8.5, 1.5, 2.5, -8.5, 1.5, 2.5, -8.5, 1.5, 2.25, -8.5, 1.25, 2.25, -8.5, 1.25, 2.5, -8.5, 1.25, 2.5, -10.500244, 1.25, 2.5, -10.500244, 1.5, 2.5, -8.5, 1.5, 2.5, -8.5, 1.25, 2.25, -8.750244, 1.25, 2.25, -8.750244, 1, 2.25, -8.5, 1, 2.25, -8.75, 1, 2.5, -8.75, 1, 2.25, -8.75, 1.25, 2.25, -8.75, 1.25, 2.5, -8.750244, 1, 2.5, -8.5, 1, 2.5, -8.5, 1, 2.25, -8.750244, 1, 2.25, -8.750244, 1.25, 2.5, -8.750244, 1.25, 2.25, -8.5, 1.25, 2.25, -8.5, 1.25, 2.5, -8.5, 1.25, 2.5, -8.5, 1.25, 2.25, -8.5, 1, 2.25, -8.5, 1, 2.5, -8.5, 1, 2.5, -8.750244, 1, 2.5, -8.750244, 1.25, 2.5, -8.5, 1.25, 2.5, -8.5, 1.25, 0.5, -8.750244, 1.25, 0.5, -8.750244, 1, 0.5, -8.5, 1, 0.5, -8.75, 1, 0.75, -8.75, 1, 0.5, -8.75, 1.25, 0.5, -8.75, 1.25, 0.75, -8.750244, 1, 0.75, -8.5, 1, 0.75, -8.5, 1, 0.5, -8.750244, 1, 0.5, -8.750244, 1.25, 0.75, -8.750244, 1.25, 0.5, -8.5, 1.25, 0.5, -8.5, 1.25, 0.75, -8.5, 1.25, 0.75, -8.5, 1.25, 0.5, -8.5, 1, 0.5, -8.5, 1, 0.75, -8.5, 1, 0.75, -8.750244, 1, 0.75, -8.750244, 1.25, 0.75, -8.5, 1.25, 0.75, 10.5, 1, 1.5, 10.5, 1, -4.000244, 25.5, 1, -4.000244, 25.5, 1, 1.5, 33, 1, 8, 33, 1, 1, 40, 1, 1, 40, 1, 8, 40, 1, 8, 40, 1, -12, 47, 1, -12, 47, 1, 8, 33, -0.5, 2, 33, -0.5, -5.5, 40, -0.5, -5.5, 40, -0.5, 2, 39.5, 1, 14.5, 39.5, 1, 8.5, 46, 1, 8.5, 46, 1, 14.5, 31, 3, -12.5, 31, 3, -21.5, 38, 3, -21.5, 38, 3, -12.5, 46.5, 1, 18.5, 46.5, 1, 8.5, 59.5, 1, 8.5, 59.5, 1, 18.5, 47, 1, 2, 47, 1, -12, 54, 1, -12, 54, 1, 2, 47, 1, 8, 47, 1, 2, 63, 1, 2, 63, 1, 8, 63.5, 1, -6.5, 63.5, 1, -17, 70.5, 1, -17, 70.5, 1, -6.5, 35.25, 1, -4.5, 35.25, 1, -12, 40, 1, -12, 40, 1, -4.5, 32.75, 1, -4.5, 32.75, 1, -9.749756, 35.25, 1, -9.749756, 35.25, 1, -4.5, 26, 1, 8, 26, 1, -4.500244, 33, 1, -4.500244, 33, 1, 8, 26, 1, -4.5, 26, 1, -12.25, 32.75, 1, -12.25, 32.75, 1, -4.5, -5.5, 1, -1.5, -10.999756, 1, -1.5, -10.999756, 3, -1.5, -5.5, 3, -1.5, -10.5, 3, 5, -10.5, 3, -1.5002441, -10.5, 1, -1.5002441, -10.5, 1, 5, -5, 3, 10, -5, 3, 3, -5, 1, 3, -5, 1, 10, -5, 3, 0.5, -5, 3, -4.500244, -5, 1, -4.500244, -5, 1, 0.5, -5, 3, 3, -5, 3, 2.5, -5, 1, 2.5, -5, 1, 3, 10, 1, -4, -4.999756, 1, -4, -4.999756, 3, -4, 10, 3, -4, 10.5, 3, 2, 10.5, 3, -0.5, 10.5, 1, -0.5, 10.5, 1, 2, 10.5, 3, -2.5, 10.5, 3, -4.500244, 10.5, 1, -4.500244, 10.5, 1, -2.5, 13.5, 1, -4, 10.5, 1, -4, 10.5, 3, -4, 13.5, 3, -4, 20, 1, -4, 15.5, 1, -4, 15.5, 3, -4, 20, 3, -4, 25.5, 1, -4, 22, 1, -4, 22, 3, -4, 25.5, 3, -4, 2, 3, 13, 2, 3, 10.5, 2, 1, 10.5, 2, 1, 13, 47.5, 1, 8.5, 44, 1, 8.5, 44, 3, 8.5, 47.5, 3, 8.5, 47.5, 3, 8, 47.5, 3, -12, 47.5, 1, -12, 47.5, 1, 8, 47, 1, -12, 35, 1, -12, 35, 3, -12, 47, 3, -12, 33, 1, -12, 26, 1, -12, 26, 3, -12, 33, 3, -12, 46.5, 3, 19, 46.5, 3, 12.5, 46.5, 1, 12.5, 46.5, 1, 19, 46.5, 3, 10.5, 46.5, 3, 8.5, 46.5, 1, 8.5, 46.5, 1, 10.5, 55.5, 1, 8.5, 47.5, 1, 8.5, 47.5, 3, 8.5, 55.5, 3, 8.5, 59.5, 1, 8.5, 57.5, 1, 8.5, 57.5, 3, 8.5, 59.5, 3, 8.5, 50.5, 3, 2.5, 47.5, 3, 2.5, 47.5, 1, 2.5, 50.5, 1, 2.5, 47.5, 1, 3, 47.5, 1, 2.5, 47.5, 3, 2.5, 47.5, 3, 3, 47.5, 1, 3, 50.5, 1, 3, 50.5, 1, 2.5, 47.5, 1, 2.5, 47.5, 3, 3, 47.5, 3, 2.5, 50.5, 3, 2.5, 50.5, 3, 3, 50.5, 3, 3, 50.5, 3, 2.5, 50.5, 1, 2.5, 50.5, 1, 3, 50.5, 1, 3, 47.5, 1, 3, 47.5, 3, 3, 50.5, 3, 3, 63.5, 3, -6, 63.5, 3, -9, 63.5, -0.5, -9, 63.5, -0.5, -6, 63, 3, -12.5, 47, 3, -12.5, 47, 1, -12.5, 63, 1, -12.5, 47, 1, -12, 47, 1, -12.5, 47, 3, -12.5, 47, 3, -12, 47, 1, -12, 63, 1, -12, 63, 1, -12.5, 47, 1, -12.5, 47, 3, -12, 47, 3, -12.5, 63, 3, -12.5, 63, 3, -12, 63, 3, -12, 63, 3, -12.5, 63, 1, -12.5, 63, 1, -12, 63, 1, -12, 47, 1, -12, 47, 3, -12, 63, 3, -12, 63.5, 3, -11, 63.5, 3, -17.5, 63.5, -0.5, -17.5, 63.5, -0.5, -11, 70.5, 3, -17.5, 63.5, 3, -17.5, 63.5, 1, -17.5, 70.5, 1, -17.5, 63.5, 1, -17, 63.5, 1, -17.5, 63.5, 3, -17.5, 63.5, 3, -17, 63.5, 1, -17, 70.5, 1, -17, 70.5, 1, -17.5, 63.5, 1, -17.5, 63.5, 3, -17, 63.5, 3, -17.5, 70.5, 3, -17.5, 70.5, 3, -17, 70.5, 3, -17, 70.5, 3, -17.5, 70.5, 1, -17.5, 70.5, 1, -17, 70.5, 1, -17, 63.5, 1, -17, 63.5, 3, -17, 70.5, 3, -17, 66, 1.5, -17, 65.5, 1.5, -17, 65.5, 1, -17, 66, 1, -17, 65.5, 1, -14.5, 65.5, 1, -17, 65.5, 1.5, -17, 65.5, 1.5, -14.5, 65.5, 1, -14.5, 66, 1, -14.5, 66, 1, -17, 65.5, 1, -17, 65.5, 1.5, -14.5, 65.5, 1.5, -17, 66, 1.5, -17, 66, 1.5, -14.5, 66, 1.5, -14.5, 66, 1.5, -17, 66, 1, -17, 66, 1, -14.5, 66, 1, -14.5, 65.5, 1, -14.5, 65.5, 1.5, -14.5, 66, 1.5, -14.5, 68.5, 1.5, -17, 68, 1.5, -17, 68, 1, -17, 68.5, 1, -17, 68, 1, -14.5, 68, 1, -17, 68, 1.5, -17, 68, 1.5, -14.5, 68, 1, -14.5, 68.5, 1, -14.5, 68.5, 1, -17, 68, 1, -17, 68, 1.5, -14.5, 68, 1.5, -17, 68.5, 1.5, -17, 68.5, 1.5, -14.5, 68.5, 1.5, -14.5, 68.5, 1.5, -17, 68.5, 1, -17, 68.5, 1, -14.5, 68.5, 1, -14.5, 68, 1, -14.5, 68, 1.5, -14.5, 68.5, 1.5, -14.5, 66, 3, -15, 65.5, 3, -15, 65.5, 1.5, -15, 66, 1.5, -15, 65.5, 1.5, -14.5, 65.5, 1.5, -15, 65.5, 3, -15, 65.5, 3, -14.5, 65.5, 1.5, -14.5, 66, 1.5, -14.5, 66, 1.5, -15, 65.5, 1.5, -15, 65.5, 3, -14.5, 65.5, 3, -15, 66, 3, -15, 66, 3, -14.5, 66, 3, -14.5, 66, 3, -15, 66, 1.5, -15, 66, 1.5, -14.5, 66, 1.5, -14.5, 65.5, 1.5, -14.5, 65.5, 3, -14.5, 66, 3, -14.5, 68.5, 3, -15, 68, 3, -15, 68, 1.5, -15, 68.5, 1.5, -15, 68, 1.5, -14.5, 68, 1.5, -15, 68, 3, -15, 68, 3, -14.5, 68, 1.5, -14.5, 68.5, 1.5, -14.5, 68.5, 1.5, -15, 68, 1.5, -15, 68, 3, -14.5, 68, 3, -15, 68.5, 3, -15, 68.5, 3, -14.5, 68.5, 3, -14.5, 68.5, 3, -15, 68.5, 1.5, -15, 68.5, 1.5, -14.5, 68.5, 1.5, -14.5, 68, 1.5, -14.5, 68, 3, -14.5, 68.5, 3, -14.5, -10.5, 1, 5, -10.999756, 1, 5, -10.999756, 3, 5, -10.5, 3, 5, -5.5, 1, 5, -10.500244, 1, 5, -10.500244, 3, 5, -5.5, 3, 5, 2, 1, 10.5, -5.5, 1, 10.5, -5.5, 3, 10.5, 2, 3, 10.5, 10.5, 1, 2, 10, 1, 2, 10, 3, 2, 10.5, 3, 2, 25.5, 0.5, 1.5, 10.5, 0.5, 1.5, 10.5, 1, 1.5, 25.5, 1, 1.5, 10.5, 2, 2, 10.5, 2, 1.5, 25.5, 2, 1.5, 25.5, 2, 2, 25.5, 1, 2, 10.5, 1, 2, 10.5, 2, 2, 25.5, 2, 2, 10.5, 3, -4, 10.5, 3, -4.500244, 13.5, 3, -4.500244, 13.5, 3, -4, 15.5, 3, -4, 15.5, 3, -4.500244, 20, 3, -4.500244, 20, 3, -4, 22, 3, -4, 22, 3, -4.500244, 25.5, 3, -4.500244, 25.5, 3, -4, 10, 3.25, 2, 10, 3.25, -4.500244, 10.5, 3.25, -4.500244, 10.5, 3.25, 2, 10.5, 3.25, 2, 10.5, 3.25, -4.500244, 10.5, 3, -4.500244, 10.5, 3, 2, 10.5, 3, 2, 10, 3, 2, 10, 3.25, 2, 10.5, 3.25, 2, -5.5, 3.25, 10.5, -5.5, 3.25, -4.500244, -5, 3.25, -4.500244, -5, 3.25, 10.5, -5, 3, 10.5, -5.5, 3, 10.5, -5.5, 3.25, 10.5, -5, 3.25, 10.5, -5, 3, 10.5, -5, 3, 10, -5, 3.25, 10, -5, 3.25, 10.5, -4.999756, 3.25, 10.5, -4.999756, 3.25, 10, 2, 3.25, 10, 2, 3.25, 10.5, 2, 3, 10.5, -4.999756, 3, 10.5, -4.999756, 3.25, 10.5, 2, 3.25, 10.5, -5, 3, -4, -5, 3, -4.500244, -5, 3.25, -4.500244, -5, 3.25, -4, -4.999756, 3.25, -4, -4.999756, 3.25, -4.500244, 10, 3.25, -4.500244, 10, 3.25, -4, 10.5, 3, -4, 10.5, 3, -4.500244, 10.5, 3.25, -4.500244, 10.5, 3.25, -4, 10.5, 3.25, -4, 10.5, 3.25, -4.500244, 25.5, 3.25, -4.500244, 25.5, 3.25, -4, -10.5, 3, -1.5, -10.5, 3, -1.9997559, -10.5, 3.25, -1.9997559, -10.5, 3.25, -1.5, -10.500244, 3.25, -1.5, -10.500244, 3.25, -1.9997559, -5.5, 3.25, -1.9997559, -5.5, 3.25, -1.5, -10.999756, 3.25, 5, -10.999756, 3.25, -1.9997559, -10.5, 3.25, -1.9997559, -10.5, 3.25, 5, -10.5, 3, 5, -10.999756, 3, 5, -10.999756, 3.25, 5, -10.5, 3.25, 5, -10.5, 3, 5, -10.5, 3, 4.5, -10.5, 3.25, 4.5, -10.5, 3.25, 5, -10.500244, 3.25, 5, -10.500244, 3.25, 4.5, -5.5, 3.25, 4.5, -5.5, 3.25, 5, -5.5, 3, 5, -10.500244, 3, 5, -10.500244, 3.25, 5, -5.5, 3.25, 5, 10, 3, 13, 10, 3, 12.5, 10, 0.5, 12.5, 10, 0.5, 13, 10, 0.5, 13, 2, 0.5, 13, 2, 3, 13, 10, 3, 13, 2, 1, 13, 1.5, 1, 13, 1.5, 3, 13, 2, 3, 13, 2, 3, 13, 2, 3, 12.5, 2, 3.25, 12.5, 2, 3.25, 13, 2, 3.25, 13, 2, 3.25, 12.5, 10, 3.25, 12.5, 10, 3.25, 13, 10, 3.25, 13, 10, 3.25, 12.5, 10, 3, 12.5, 10, 3, 13, 10, 3, 13, 2, 3, 13, 2, 3.25, 13, 10, 3.25, 13, 1.5, 3.25, 13, 1.5, 3.25, 10.5, 2, 3.25, 10.5, 2, 3.25, 13, 2, 3, 13, 1.5, 3, 13, 1.5, 3.25, 13, 2, 3.25, 13, 25.5, 3.25, 8.5, 25.5, 3.25, -12.25, 26, 3.25, -12.25, 26, 3.25, 8.5, 26, 3, 8.5, 25.5, 3, 8.5, 25.5, 3.25, 8.5, 26, 3.25, 8.5, 47.5, 1, 8, 47, 1, 8, 47, 3, 8, 47.5, 3, 8, 26, 5, -12, 26, 5, -12.5, 26, 5.25, -12.5, 26, 5.25, -12, 26, 5.25, -12, 26, 5.25, -12.5, 47, 5.25, -12.5, 47, 5.25, -12, 35, 5, -12, 35, 5, -12.5, 47, 5, -12.5, 47, 5, -12, 26, 5, -12, 26, 5, -12.5, 33, 5, -12.5, 33, 5, -12, 42, 1, 8.5, 26, 1, 8.5, 26, 3, 8.5, 42, 3, 8.5, 35, 3, -12, 35, 3, -12.5, 47, 3, -12.5, 47, 3, -12, 26, 3, -12, 26, 3, -12.5, 33, 3, -12.5, 33, 3, -12, 46, 1, 15, 40, 1, 15, 40, 3, 15, 46, 3, 15, 46.5, 1, 19, 46, 1, 19, 46, 3, 19, 46.5, 3, 19, 60, 2, 18.5, 60, 2, 8, 60, 1, 8, 60, 1, 18.5, 60, 1, 18.5, 59.5, 1, 18.5, 59.5, 2, 18.5, 60, 2, 18.5, 60, 1, 19, 46.5, 1, 19, 46.5, 2, 19, 60, 2, 19, 46, 3.25, 19, 46, 3.25, 8.5, 46.5, 3.25, 8.5, 46.5, 3.25, 19, 46.5, 3, 19, 46, 3, 19, 46, 3.25, 19, 46.5, 3.25, 19, 40, 3, 15, 40, 3, 14.5, 40, 3.25, 14.5, 40, 3.25, 15, 40, 3.25, 15, 40, 3.25, 14.5, 46, 3.25, 14.5, 46, 3.25, 15, 46, 3, 15, 40, 3, 15, 40, 3.25, 15, 46, 3.25, 15, 39.5, 3.25, 15, 39.5, 3.25, 8.5, 40, 3.25, 8.5, 40, 3.25, 15, 40, 3, 15, 39.5, 3, 15, 39.5, 3.25, 15, 40, 3.25, 15, 40, 3, 8.5, 40, 3, 8, 40, 3.25, 8, 40, 3.25, 8.5, 40, 3.25, 8.5, 40, 3.25, 8, 59.5, 3.25, 8, 59.5, 3.25, 8.5, 26, 3, 8.5, 26, 3, 8, 26, 3.25, 8, 26, 3.25, 8.5, 26, 3.25, 8.5, 26, 3.25, 8, 40, 3.25, 8, 40, 3.25, 8.5, 40, 3, 8.5, 26, 3, 8.5, 26, 3.25, 8.5, 40, 3.25, 8.5, 63.5, 2, 8, 63.5, 2, 2, 63.5, -0.5, 2, 63.5, -0.5, 8, 63.5, -0.5, 8, 63, -0.5, 8, 63, 2, 8, 63.5, 2, 8, 63, 1, 8, 59.5, 1, 8, 59.5, 2, 8, 63, 2, 8, 47, 3.25, 8, 47, 3.25, -12, 47.5, 3.25, -12, 47.5, 3.25, 8, 47.5, 3, 8, 47, 3, 8, 47, 3.25, 8, 47.5, 3.25, 8, 63.5, 2, 2, 63.5, 2, -6, 63.5, -0.5, -6, 63.5, -0.5, 2, 71, 2, -6, 71, 2, -19, 71, -0.5, -19, 71, -0.5, -6, 70.5, 1, -6, 63.5, 1, -6, 63.5, 2, -6, 70.5, 2, -6, 63, 3.25, -6, 63, 3.25, -17.5, 63.5, 3.25, -17.5, 63.5, 3.25, -6, 63.5, 3, -6, 63, 3, -6, 63, 3.25, -6, 63.5, 3.25, -6, 47, 3, -12, 47, 3, -12.5, 47, 3.25, -12.5, 47, 3.25, -12, 47, 3.25, -12, 47, 3.25, -12.5, 63, 3.25, -12.5, 63, 3.25, -12, 63.5, 3, -17, 63.5, 3, -17.5, 63.5, 3.25, -17.5, 63.5, 3.25, -17, 63.5, 3.25, -17, 63.5, 3.25, -17.5, 70.5, 3.25, -17.5, 70.5, 3.25, -17, 10, 2, 13, 10, 2, 2, 10.5, 2, 2, 10.5, 2, 13, 10.5, 2, 13, 10.5, 2, 2, 10.5, 0.5, 2, 10.5, 0.5, 13, 10.5, 0.5, 13, 10, 0.5, 13, 10, 2, 13, 10.5, 2, 13, 31, 5, -21.5, 31, 5, -22, 38, 5, -22, 38, 5, -21.5, -5, 1, 0.5, -5.5, 1, 0.5, -5.5, 0.5, 0.5, -5, 0.5, 0.5, -5.5, 0.5, 2.5, -5.5, 0.5, 0.5, -5.5, 1, 0.5, -5.5, 1, 2.5, -5.5, 0.5, 2.5, -5, 0.5, 2.5, -5, 0.5, 0.5, -5.5, 0.5, 0.5, -5.5, 1, 2.5, -5.5, 1, 0.5, -5, 1, 0.5, -5, 1, 2.5, -5, 1, 2.5, -5, 1, 0.5, -5, 0.5, 0.5, -5, 0.5, 2.5, -5, 0.5, 2.5, -5.5, 0.5, 2.5, -5.5, 1, 2.5, -5, 1, 2.5, 10.5, 1, -2.5, 10, 1, -2.5, 10, 0.5, -2.5, 10.5, 0.5, -2.5, 10, 0.5, -0.5, 10, 0.5, -2.5, 10, 1, -2.5, 10, 1, -0.5, 10, 0.5, -0.5, 10.5, 0.5, -0.5, 10.5, 0.5, -2.5, 10, 0.5, -2.5, 10, 1, -0.5, 10, 1, -2.5, 10.5, 1, -2.5, 10.5, 1, -0.5, 10.5, 1, -0.5, 10.5, 1, -2.5, 10.5, 0.5, -2.5, 10.5, 0.5, -0.5, 10.5, 0.5, -0.5, 10, 0.5, -0.5, 10, 1, -0.5, 10.5, 1, -0.5, 20, 3, -5.5, 19.5, 3, -5.5, 19.5, 1, -5.5, 20, 1, -5.5, 19.5, 1, -4.5, 19.5, 1, -5.5, 19.5, 3, -5.5, 19.5, 3, -4.5, 19.5, 1, -4.5, 20, 1, -4.5, 20, 1, -5.5, 19.5, 1, -5.5, 19.5, 3, -4.5, 19.5, 3, -5.5, 20, 3, -5.5, 20, 3, -4.5, 20, 3, -4.5, 20, 3, -5.5, 20, 1, -5.5, 20, 1, -4.5, 20, 1, -4.5, 19.5, 1, -4.5, 19.5, 3, -4.5, 20, 3, -4.5, 22.5, 3, -5.5, 22, 3, -5.5, 22, 1, -5.5, 22.5, 1, -5.5, 22, 1, -4.5, 22, 1, -5.5, 22, 3, -5.5, 22, 3, -4.5, 22, 1, -4.5, 22.5, 1, -4.5, 22.5, 1, -5.5, 22, 1, -5.5, 22, 3, -4.5, 22, 3, -5.5, 22.5, 3, -5.5, 22.5, 3, -4.5, 22.5, 3, -4.5, 22.5, 3, -5.5, 22.5, 1, -5.5, 22.5, 1, -4.5, 22.5, 1, -4.5, 22, 1, -4.5, 22, 3, -4.5, 22.5, 3, -4.5, 26, 1, -2.5, 25.5, 1, -2.5, 25.5, 0.5, -2.5, 26, 0.5, -2.5, 25.5, 0.5, -0.5, 25.5, 0.5, -2.5, 25.5, 1, -2.5, 25.5, 1, -0.5, 25.5, 0.5, -0.5, 26, 0.5, -0.5, 26, 0.5, -2.5, 25.5, 0.5, -2.5, 25.5, 1, -0.5, 25.5, 1, -2.5, 26, 1, -2.5, 26, 1, -0.5, 26, 1, -0.5, 26, 1, -2.5, 26, 0.5, -2.5, 26, 0.5, -0.5, 26, 0.5, -0.5, 25.5, 0.5, -0.5, 25.5, 1, -0.5, 26, 1, -0.5, 13.5, 3, -5.5, 13, 3, -5.5, 13, 1, -5.5, 13.5, 1, -5.5, 13, 1, -4.5, 13, 1, -5.5, 13, 3, -5.5, 13, 3, -4.5, 13, 1, -4.5, 13.5, 1, -4.5, 13.5, 1, -5.5, 13, 1, -5.5, 13, 3, -4.5, 13, 3, -5.5, 13.5, 3, -5.5, 13.5, 3, -4.5, 13.5, 3, -4.5, 13.5, 3, -5.5, 13.5, 1, -5.5, 13.5, 1, -4.5, 13.5, 1, -4.5, 13, 1, -4.5, 13, 3, -4.5, 13.5, 3, -4.5, 16, 3, -5.5, 15.5, 3, -5.5, 15.5, 1, -5.5, 16, 1, -5.5, 15.5, 1, -4.5, 15.5, 1, -5.5, 15.5, 3, -5.5, 15.5, 3, -4.5, 15.5, 1, -4.5, 16, 1, -4.5, 16, 1, -5.5, 15.5, 1, -5.5, 15.5, 3, -4.5, 15.5, 3, -5.5, 16, 3, -5.5, 16, 3, -4.5, 16, 3, -4.5, 16, 3, -5.5, 16, 1, -5.5, 16, 1, -4.5, 16, 1, -4.5, 15.5, 1, -4.5, 15.5, 3, -4.5, 16, 3, -4.5, -5, 3.25, 10.5, -5, 3.25, -4.500244, -5, 3, -4.500244, -5, 3, 10.5, 10, 3, -4, -4.999756, 3, -4, -4.999756, 3.25, -4, 10, 3.25, -4, 25.5, 3, -4, 10.5, 3, -4, 10.5, 3.25, -4, 25.5, 3.25, -4, -5.5, 3, -1.5, -10.500244, 3, -1.5, -10.500244, 3.25, -1.5, -5.5, 3.25, -1.5, -10.5, 3.25, 5, -10.5, 3.25, -1.9997559, -10.5, 3, -1.9997559, -10.5, 3, 5, 2, 3.25, 13, 2, 3.25, 10.5, 2, 3, 10.5, 2, 3, 13, 26, 3.25, 8.5, 26, 3.25, -12.25, 26, 3, -12.25, 26, 3, 8.5, 47, 5, -12, 26, 5, -12, 26, 5.25, -12, 47, 5.25, -12, 46.5, 3.25, 19, 46.5, 3.25, 8.5, 46.5, 3, 8.5, 46.5, 3, 19, 40, 3.25, 15, 40, 3.25, 8.5, 40, 3, 8.5, 40, 3, 15, 59.5, 3, 8.5, 40, 3, 8.5, 40, 3.25, 8.5, 59.5, 3.25, 8.5, 47.5, 3.25, 8, 47.5, 3.25, -12, 47.5, 3, -12, 47.5, 3, 8, 63.5, 3.25, -6, 63.5, 3.25, -17.5, 63.5, 3, -17.5, 63.5, 3, -6, 63, 3, -12, 47, 3, -12, 47, 3.25, -12, 63, 3.25, -12, 70.5, 3, -17, 63.5, 3, -17, 63.5, 3.25, -17, 70.5, 3.25, -17, 33, 3, -12, 33, 3, -12.5, 35, 3, -12.5, 35, 3, -12, 39.5, 1.5, 6, 36, 1.5, 6, 36, 1.25, 6, 39.5, 1.25, 6, 36, 1.25, 6.25, 36, 1.25, 6, 36, 1.5, 6, 36, 1.5, 6.25, 36, 1.25, 6.25, 39.5, 1.25, 6.25, 39.5, 1.25, 6, 36, 1.25, 6, 36, 1.5, 6.25, 36, 1.5, 6, 39.5, 1.5, 6, 39.5, 1.5, 6.25, 39.5, 1.5, 6.25, 39.5, 1.5, 6, 39.5, 1.25, 6, 39.5, 1.25, 6.25, 39.5, 1.25, 6.25, 36, 1.25, 6.25, 36, 1.5, 6.25, 39.5, 1.5, 6.25, 47, 1.5, 3.75, 45, 1.5, 3.75, 45, 1.25, 3.75, 47, 1.25, 3.75, 45, 1.25, 4, 45, 1.25, 3.75, 45, 1.5, 3.75, 45, 1.5, 4, 45, 1.25, 4, 47, 1.25, 4, 47, 1.25, 3.75, 45, 1.25, 3.75, 45, 1.5, 4, 45, 1.5, 3.75, 47, 1.5, 3.75, 47, 1.5, 4, 47, 1.5, 4, 47, 1.5, 3.75, 47, 1.25, 3.75, 47, 1.25, 4, 47, 1.25, 4, 45, 1.25, 4, 45, 1.5, 4, 47, 1.5, 4, 47, 1.5, 1, 45, 1.5, 1, 45, 1.25, 1, 47, 1.25, 1, 45, 1.25, 1.25, 45, 1.25, 1, 45, 1.5, 1, 45, 1.5, 1.25, 45, 1.25, 1.25, 47, 1.25, 1.25, 47, 1.25, 1, 45, 1.25, 1, 45, 1.5, 1.25, 45, 1.5, 1, 47, 1.5, 1, 47, 1.5, 1.25, 47, 1.5, 1.25, 47, 1.5, 1, 47, 1.25, 1, 47, 1.25, 1.25, 47, 1.25, 1.25, 45, 1.25, 1.25, 45, 1.5, 1.25, 47, 1.5, 1.25, 44, 1, 8, 42, 1, 8, 42, 0.5, 8, 44, 0.5, 8, 42, 0.5, 8.5, 42, 0.5, 8, 42, 1, 8, 42, 1, 8.5, 42, 0.5, 8.5, 44, 0.5, 8.5, 44, 0.5, 8, 42, 0.5, 8, 42, 1, 8.5, 42, 1, 8, 44, 1, 8, 44, 1, 8.5, 44, 1, 8.5, 44, 1, 8, 44, 0.5, 8, 44, 0.5, 8.5, 44, 0.5, 8.5, 42, 0.5, 8.5, 42, 1, 8.5, 44, 1, 8.5, 46.5, 1, 10.5, 46, 1, 10.5, 46, 0.5, 10.5, 46.5, 0.5, 10.5, 46, 0.5, 12.5, 46, 0.5, 10.5, 46, 1, 10.5, 46, 1, 12.5, 46, 0.5, 12.5, 46.5, 0.5, 12.5, 46.5, 0.5, 10.5, 46, 0.5, 10.5, 46, 1, 12.5, 46, 1, 10.5, 46.5, 1, 10.5, 46.5, 1, 12.5, 46.5, 1, 12.5, 46.5, 1, 10.5, 46.5, 0.5, 10.5, 46.5, 0.5, 12.5, 46.5, 0.5, 12.5, 46, 0.5, 12.5, 46, 1, 12.5, 46.5, 1, 12.5, 57.5, 1, 8, 55.5, 1, 8, 55.5, 0.5, 8, 57.5, 0.5, 8, 55.5, 0.5, 8.5, 55.5, 0.5, 8, 55.5, 1, 8, 55.5, 1, 8.5, 55.5, 0.5, 8.5, 57.5, 0.5, 8.5, 57.5, 0.5, 8, 55.5, 0.5, 8, 55.5, 1, 8.5, 55.5, 1, 8, 57.5, 1, 8, 57.5, 1, 8.5, 57.5, 1, 8.5, 57.5, 1, 8, 57.5, 0.5, 8, 57.5, 0.5, 8.5, 57.5, 0.5, 8.5, 55.5, 0.5, 8.5, 55.5, 1, 8.5, 57.5, 1, 8.5, 63.5, 1, -11, 63, 1, -11, 63, 0.5, -11, 63.5, 0.5, -11, 63, 0.5, -9, 63, 0.5, -10.999756, 63, 1, -10.999756, 63, 1, -9, 63, 0.5, -9, 63.5, 0.5, -9, 63.5, 0.5, -10.999756, 63, 0.5, -10.999756, 63, 1, -9, 63, 1, -10.999756, 63.5, 1, -10.999756, 63.5, 1, -9, 63.5, 1, -9, 63.5, 1, -10.999756, 63.5, 0.5, -10.999756, 63.5, 0.5, -9, 63.5, 0.5, -9, 63, 0.5, -9, 63, 1, -9, 63.5, 1, -9, 35, 1, -12, 33, 1, -12, 33, 3, -12, 35, 3, -12, 40, 0.5, -5, 33, 0.5, -5, 33, -0.5, -5, 40, -0.5, -5, 33, -0.5, -4.5, 33, -0.5, -4.999756, 33, 0.5, -4.999756, 33, 0.5, -4.5, 33, -0.5, -4.5, 40, -0.5, -4.5, 40, -0.5, -4.999756, 33, -0.5, -4.999756, 33, 0.5, -4.5, 33, 0.5, -4.999756, 40, 0.5, -4.999756, 40, 0.5, -4.5, 40, 0.5, -4.5, 40, 0.5, -4.999756, 40, -0.5, -4.999756, 40, -0.5, -4.5, 40, -0.5, -4.5, 33, -0.5, -4.5, 33, 0.5, -4.5, 40, 0.5, -4.5, 40, 0.5, 1, 33, 0.5, 1, 33, -0.5, 1, 40, -0.5, 1, 33, -0.5, 1.5, 33, -0.5, 1, 33, 0.5, 1, 33, 0.5, 1.5, 33, -0.5, 1.5, 40, -0.5, 1.5, 40, -0.5, 1, 33, -0.5, 1, 33, 0.5, 1.5, 33, 0.5, 1, 40, 0.5, 1, 40, 0.5, 1.5, 40, 0.5, 1.5, 40, 0.5, 1, 40, -0.5, 1, 40, -0.5, 1.5, 40, -0.5, 1.5, 33, -0.5, 1.5, 33, 0.5, 1.5, 40, 0.5, 1.5, 33, 0.5, -5, 32.5, 0.5, -5, 32.5, -0.5, -5, 33, -0.5, -5, 32.5, -0.5, 2, 32.5, -0.5, -4.999756, 32.5, 0.5, -4.999756, 32.5, 0.5, 2, 32.5, -0.5, 2, 33, -0.5, 2, 33, -0.5, -4.999756, 32.5, -0.5, -4.999756, 32.5, 0.5, 2, 32.5, 0.5, -4.999756, 33, 0.5, -4.999756, 33, 0.5, 2, 33, 0.5, 2, 33, 0.5, -4.999756, 33, -0.5, -4.999756, 33, -0.5, 2, 33, -0.5, 2, 32.5, -0.5, 2, 32.5, 0.5, 2, 33, 0.5, 2, 40.5, 0.5, -5, 40, 0.5, -5, 40, -0.5, -5, 40.5, -0.5, -5, 40, -0.5, 2, 40, -0.5, -4.999756, 40, 0.5, -4.999756, 40, 0.5, 2, 40, -0.5, 2, 40.5, -0.5, 2, 40.5, -0.5, -4.999756, 40, -0.5, -4.999756, 40, 0.5, 2, 40, 0.5, -4.999756, 40.5, 0.5, -4.999756, 40.5, 0.5, 2, 40.5, 0.5, 2, 40.5, 0.5, -4.999756, 40.5, -0.5, -4.999756, 40.5, -0.5, 2, 40.5, -0.5, 2, 40, -0.5, 2, 40, 0.5, 2, 40.5, 0.5, 2, 47, 3, -12, 35, 3, -12, 35, 5, -12, 47, 5, -12, 33, 3, -12, 26, 3, -12, 26, 5, -12, 33, 5, -12, 38, 3, -21.5, 31, 3, -21.5, 31, 5, -21.5, 38, 5, -21.5, 51.5, 3, 8.5, 51.25, 3, 8.5, 51.25, 1, 8.5, 51.5, 1, 8.5, 51.25, 1, 13.5, 51.25, 1, 8.5, 51.25, 3, 8.5, 51.25, 3, 13.5, 51.25, 1, 13.5, 51.5, 1, 13.5, 51.5, 1, 8.5, 51.25, 1, 8.5, 51.25, 3, 13.5, 51.25, 3, 8.5, 51.5, 3, 8.5, 51.5, 3, 13.5, 51.5, 3, 13.5, 51.5, 3, 8.5, 51.5, 1, 8.5, 51.5, 1, 13.5, 51.5, 1, 13.5, 51.25, 1, 13.5, 51.25, 3, 13.5, 51.5, 3, 13.5, 51.5, 3, 15.5, 51.25, 3, 15.5, 51.25, 1, 15.5, 51.5, 1, 15.5, 51.25, 1, 18.5, 51.25, 1, 15.5, 51.25, 3, 15.5, 51.25, 3, 18.5, 51.25, 1, 18.5, 51.5, 1, 18.5, 51.5, 1, 15.5, 51.25, 1, 15.5, 51.25, 3, 18.5, 51.25, 3, 15.5, 51.5, 3, 15.5, 51.5, 3, 18.5, 51.5, 3, 18.5, 51.5, 3, 15.5, 51.5, 1, 15.5, 51.5, 1, 18.5, 51.5, 1, 18.5, 51.25, 1, 18.5, 51.25, 3, 18.5, 51.5, 3, 18.5, 50, 1.75, 8.5, 49.75, 1.75, 8.5, 49.75, 1.5, 8.5, 50, 1.5, 8.5, 49.75, 1.5, 10, 49.75, 1.5, 8.5, 49.75, 1.75, 8.5, 49.75, 1.75, 10, 49.75, 1.5, 10, 50, 1.5, 10, 50, 1.5, 8.5, 49.75, 1.5, 8.5, 49.75, 1.75, 10, 49.75, 1.75, 8.5, 50, 1.75, 8.5, 50, 1.75, 10, 50, 1.75, 10, 50, 1.75, 8.5, 50, 1.5, 8.5, 50, 1.5, 10, 50, 1.5, 10, 49.75, 1.5, 10, 49.75, 1.75, 10, 50, 1.75, 10, 50, 1.5, 9.75, 49.75, 1.5, 9.75, 49.75, 1, 9.75, 50, 1, 9.75, 49.75, 1, 10, 49.75, 1, 9.75, 49.75, 1.5, 9.75, 49.75, 1.5, 10, 49.75, 1, 10, 50, 1, 10, 50, 1, 9.75, 49.75, 1, 9.75, 49.75, 1.5, 10, 49.75, 1.5, 9.75, 50, 1.5, 9.75, 50, 1.5, 10, 50, 1.5, 10, 50, 1.5, 9.75, 50, 1, 9.75, 50, 1, 10, 50, 1, 10, 49.75, 1, 10, 49.75, 1.5, 10, 50, 1.5, 10, 63, 1, -12, 54, 1, -12, 54, 0.5, -12, 63, 0.5, -12, 54, 0.5, -8, 54, 0.5, -12, 54, 1, -12, 54, 1, -8, 54, 0.5, -8, 63, 0.5, -8, 63, 0.5, -12, 54, 0.5, -12, 54, 1, -8, 54, 1, -12, 63, 1, -12, 63, 1, -8, 63, 1, -8, 63, 1, -12, 63, 0.5, -12, 63, 0.5, -8, 63, 0.5, -8, 54, 0.5, -8, 54, 1, -8, 63, 1, -8, 35, 0.875, -12, 33, 0.875, -12, 33, 0.5, -12, 35, 0.5, -12, 33, 0.5, -10, 33, 0.5, -12, 33, 0.875, -12, 33, 0.875, -10, 33, 0.5, -10, 35, 0.5, -10, 35, 0.5, -12, 33, 0.5, -12, 33, 0.875, -10, 33, 0.875, -12, 35, 0.875, -12, 35, 0.875, -10, 35, 0.875, -10, 35, 0.875, -12, 35, 0.5, -12, 35, 0.5, -10, 35, 0.5, -10, 33, 0.5, -10, 33, 0.875, -10, 35, 0.875, -10, 36.25, 0.875, -16.75, 34.25, 0.875, -16.75, 34.25, 0.5, -16.75, 36.25, 0.5, -16.75, 34.25, 0.5, -14.75, 34.25, 0.5, -16.75, 34.25, 0.875, -16.75, 34.25, 0.875, -14.75, 34.25, 0.5, -14.75, 36.25, 0.5, -14.75, 36.25, 0.5, -16.75, 34.25, 0.5, -16.75, 34.25, 0.875, -14.75, 34.25, 0.875, -16.75, 36.25, 0.875, -16.75, 36.25, 0.875, -14.75, 36.25, 0.875, -14.75, 36.25, 0.875, -16.75, 36.25, 0.5, -16.75, 36.25, 0.5, -14.75, 36.25, 0.5, -14.75, 34.25, 0.5, -14.75, 34.25, 0.875, -14.75, 36.25, 0.875, -14.75, 35.25, 1, -12.25, 32.75, 1, -12.25, 32.75, 0.5, -12.25, 35.25, 0.5, -12.25, 32.75, 0.5, -12, 32.75, 0.5, -12.25, 32.75, 1, -12.25, 32.75, 1, -12, 32.75, 0.5, -12, 35.25, 0.5, -12, 35.25, 0.5, -12.25, 32.75, 0.5, -12.25, 32.75, 1, -12, 32.75, 1, -12.25, 35.25, 1, -12.25, 35.25, 1, -12, 35.25, 1, -12, 35.25, 1, -12.25, 35.25, 0.5, -12.25, 35.25, 0.5, -12, 35.25, 1, -12, 35, 1, -12, 35, 0.5, -12, 35.25, 0.5, -12, 35, 0.5, -10, 35.25, 0.5, -10, 35.25, 0.5, -12, 35, 0.5, -12, 35, 1, -10, 35, 1, -12, 35.25, 1, -12, 35.25, 1, -10, 35.25, 1, -10, 35.25, 1, -12, 35.25, 0.5, -12, 35.25, 0.5, -10, 35.25, 0.5, -10, 35, 0.5, -10, 35, 1, -10, 35.25, 1, -10, 32.75, 0.5, -9.75, 32.75, 0.5, -10.000244, 32.75, 1, -10.000244, 32.75, 1, -9.75, 32.75, 0.5, -9.75, 35.25, 0.5, -9.75, 35.25, 0.5, -10.000244, 32.75, 0.5, -10.000244, 32.75, 1, -9.75, 32.75, 1, -10.000244, 35.25, 1, -10.000244, 35.25, 1, -9.75, 35.25, 1, -9.75, 35.25, 1, -10.000244, 35.25, 0.5, -10.000244, 35.25, 0.5, -9.75, 35.25, 0.5, -9.75, 32.75, 0.5, -9.75, 32.75, 1, -9.75, 35.25, 1, -9.75, 33, 1, -12, 32.75, 1, -12, 32.75, 0.5, -12, 33, 0.5, -12, 32.75, 0.5, -10, 32.75, 0.5, -12, 32.75, 1, -12, 32.75, 1, -10, 32.75, 0.5, -10, 33, 0.5, -10, 33, 0.5, -12, 32.75, 0.5, -12, 32.75, 1, -10, 32.75, 1, -12, 33, 1, -12, 33, 1, -10, 33, 0.5, -10, 32.75, 0.5, -10, 32.75, 1, -10, 33, 1, -10, 36.5, 1, -17, 34, 1, -17, 34, 0.5, -17, 36.5, 0.5, -17, 34, 0.5, -16.75, 34, 0.5, -17, 34, 1, -17, 34, 1, -16.75, 34, 0.5, -16.75, 36.5, 0.5, -16.75, 36.5, 0.5, -17, 34, 0.5, -17, 34, 1, -16.75, 34, 1, -17, 36.5, 1, -17, 36.5, 1, -16.75, 36.5, 1, -16.75, 36.5, 1, -17, 36.5, 0.5, -17, 36.5, 0.5, -16.75, 36.5, 1, -16.75, 36.25, 1, -16.75, 36.25, 0.5, -16.75, 36.5, 0.5, -16.75, 36.25, 0.5, -14.75, 36.5, 0.5, -14.75, 36.5, 0.5, -16.75, 36.25, 0.5, -16.75, 36.25, 1, -14.75, 36.25, 1, -16.75, 36.5, 1, -16.75, 36.5, 1, -14.75, 36.5, 1, -14.75, 36.5, 1, -16.75, 36.5, 0.5, -16.75, 36.5, 0.5, -14.75, 36.5, 0.5, -14.75, 36.25, 0.5, -14.75, 36.25, 1, -14.75, 36.5, 1, -14.75, 34, 0.5, -14.5, 34, 0.5, -14.75, 34, 1, -14.75, 34, 1, -14.5, 34, 0.5, -14.5, 36.5, 0.5, -14.5, 36.5, 0.5, -14.75, 34, 0.5, -14.75, 34, 1, -14.5, 34, 1, -14.75, 36.5, 1, -14.75, 36.5, 1, -14.5, 36.5, 1, -14.5, 36.5, 1, -14.75, 36.5, 0.5, -14.75, 36.5, 0.5, -14.5, 36.5, 0.5, -14.5, 34, 0.5, -14.5, 34, 1, -14.5, 36.5, 1, -14.5, 34.25, 1, -16.75, 34, 1, -16.75, 34, 0.5, -16.75, 34.25, 0.5, -16.75, 34, 0.5, -14.75, 34, 0.5, -16.75, 34, 1, -16.75, 34, 1, -14.75, 34, 0.5, -14.75, 34.25, 0.5, -14.75, 34.25, 0.5, -16.75, 34, 0.5, -16.75, 34, 1, -14.75, 34, 1, -16.75, 34.25, 1, -16.75, 34.25, 1, -14.75, 34.25, 0.5, -14.75, 34, 0.5, -14.75, 34, 1, -14.75, 34.25, 1, -14.75, 35.25, 0.5, -12, 32.75, 0.5, -12, 32.75, 1, -12, 35.25, 1, -12, 35, 0.5, -10, 35, 0.5, -12, 35, 1, -12, 35, 1, -10, 35.25, 1, -10, 32.75, 1, -10, 32.75, 0.5, -10, 35.25, 0.5, -10, 33, 1, -10, 33, 1, -12, 33, 0.5, -12, 33, 0.5, -10, 36.5, 0.5, -16.75, 34, 0.5, -16.75, 34, 1, -16.75, 36.5, 1, -16.75, 36.25, 0.5, -14.75, 36.25, 0.5, -16.75, 36.25, 1, -16.75, 36.25, 1, -14.75, 36.5, 1, -14.75, 34, 1, -14.75, 34, 0.5, -14.75, 36.5, 0.5, -14.75, 34.25, 1, -14.75, 34.25, 1, -16.75, 34.25, 0.5, -16.75, 34.25, 0.5, -14.75) indices = PackedInt32Array(0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23, 24, 25, 26, 24, 26, 27, 28, 29, 30, 28, 30, 31, 32, 33, 34, 32, 34, 35, 36, 37, 38, 36, 38, 39, 40, 41, 42, 40, 42, 43, 44, 45, 46, 44, 46, 47, 48, 49, 50, 48, 50, 51, 52, 53, 54, 52, 54, 55, 56, 57, 58, 56, 58, 59, 60, 61, 62, 60, 62, 63, 64, 65, 66, 64, 66, 67, 68, 69, 70, 68, 70, 71, 72, 73, 74, 72, 74, 75, 76, 77, 78, 76, 78, 79, 80, 81, 82, 80, 82, 83, 84, 85, 86, 84, 86, 87, 88, 89, 90, 88, 90, 91, 92, 93, 94, 92, 94, 95, 96, 97, 98, 96, 98, 99, 100, 101, 102, 100, 102, 103, 104, 105, 106, 104, 106, 107, 108, 109, 110, 108, 110, 111, 112, 113, 114, 112, 114, 115, 116, 117, 118, 116, 118, 119, 120, 121, 122, 120, 122, 123, 124, 125, 126, 124, 126, 127, 128, 129, 130, 128, 130, 131, 132, 133, 134, 132, 134, 135, 136, 137, 138, 136, 138, 139, 140, 141, 142, 140, 142, 143, 144, 145, 146, 144, 146, 147, 148, 149, 150, 148, 150, 151, 152, 153, 154, 152, 154, 155, 156, 157, 158, 156, 158, 159, 160, 161, 162, 160, 162, 163, 164, 165, 166, 164, 166, 167, 168, 169, 170, 168, 170, 171, 172, 173, 174, 172, 174, 175, 176, 177, 178, 176, 178, 179, 180, 181, 182, 180, 182, 183, 184, 185, 186, 184, 186, 187, 188, 189, 190, 188, 190, 191, 192, 193, 194, 192, 194, 195, 196, 197, 198, 196, 198, 199, 200, 201, 202, 200, 202, 203, 204, 205, 206, 204, 206, 207, 208, 209, 210, 208, 210, 211, 212, 213, 214, 212, 214, 215, 216, 217, 218, 216, 218, 219, 220, 221, 222, 220, 222, 223, 224, 225, 226, 224, 226, 227, 228, 229, 230, 228, 230, 231, 232, 233, 234, 232, 234, 235, 236, 237, 238, 236, 238, 239, 240, 241, 242, 240, 242, 243, 244, 245, 246, 244, 246, 247, 248, 249, 250, 248, 250, 251, 252, 253, 254, 252, 254, 255, 256, 257, 258, 256, 258, 259, 260, 261, 262, 260, 262, 263, 264, 265, 266, 264, 266, 267, 268, 269, 270, 268, 270, 271, 272, 273, 274, 272, 274, 275, 276, 277, 278, 276, 278, 279, 280, 281, 282, 280, 282, 283, 284, 285, 286, 284, 286, 287, 288, 289, 290, 288, 290, 291, 292, 293, 294, 292, 294, 295, 296, 297, 298, 296, 298, 299, 300, 301, 302, 300, 302, 303, 304, 305, 306, 304, 306, 307, 308, 309, 310, 308, 310, 311, 312, 313, 314, 312, 314, 315, 316, 317, 318, 316, 318, 319, 320, 321, 322, 320, 322, 323, 324, 325, 326, 324, 326, 327, 328, 329, 330, 328, 330, 331, 332, 333, 334, 332, 334, 335, 336, 337, 338, 336, 338, 339, 340, 341, 342, 340, 342, 343, 344, 345, 346, 344, 346, 347, 348, 349, 350, 348, 350, 351, 352, 353, 354, 352, 354, 355, 356, 357, 358, 356, 358, 359, 360, 361, 362, 360, 362, 363, 364, 365, 366, 364, 366, 367, 368, 369, 370, 368, 370, 371, 372, 373, 374, 372, 374, 375, 376, 377, 378, 376, 378, 379, 380, 381, 382, 380, 382, 383, 384, 385, 386, 384, 386, 387, 388, 389, 390, 388, 390, 391, 392, 393, 394, 392, 394, 395, 396, 397, 398, 396, 398, 399, 400, 401, 402, 400, 402, 403, 404, 405, 406, 404, 406, 407, 408, 409, 410, 408, 410, 411, 412, 413, 414, 412, 414, 415, 416, 417, 418, 416, 418, 419, 420, 421, 422, 420, 422, 423, 424, 425, 426, 424, 426, 427, 428, 429, 430, 428, 430, 431, 432, 433, 434, 432, 434, 435, 436, 437, 438, 436, 438, 439, 440, 441, 442, 440, 442, 443, 444, 445, 446, 444, 446, 447, 448, 449, 450, 448, 450, 451, 452, 453, 454, 452, 454, 455, 456, 457, 458, 456, 458, 459, 460, 461, 462, 460, 462, 463, 464, 465, 466, 464, 466, 467, 468, 469, 470, 468, 470, 471, 472, 473, 474, 472, 474, 475, 476, 477, 478, 476, 478, 479, 480, 481, 482, 480, 482, 483, 484, 485, 486, 484, 486, 487, 488, 489, 490, 488, 490, 491, 492, 493, 494, 492, 494, 495, 496, 497, 498, 496, 498, 499, 500, 501, 502, 500, 502, 503, 504, 505, 506, 504, 506, 507, 508, 509, 510, 508, 510, 511, 512, 513, 514, 512, 514, 515, 516, 517, 518, 516, 518, 519, 520, 521, 522, 520, 522, 523, 524, 525, 526, 524, 526, 527, 528, 529, 530, 528, 530, 531, 532, 533, 534, 532, 534, 535, 536, 537, 538, 536, 538, 539, 540, 541, 542, 540, 542, 543, 544, 545, 546, 544, 546, 547, 548, 549, 550, 548, 550, 551, 552, 553, 554, 552, 554, 555, 556, 557, 558, 556, 558, 559, 560, 561, 562, 560, 562, 563, 564, 565, 566, 564, 566, 567, 568, 569, 570, 568, 570, 571, 572, 573, 574, 572, 574, 575, 576, 577, 578, 576, 578, 579, 580, 581, 582, 580, 582, 583, 584, 585, 586, 584, 586, 587, 588, 589, 590, 588, 590, 591, 592, 593, 594, 592, 594, 595, 596, 597, 598, 596, 598, 599, 600, 601, 602, 600, 602, 603, 604, 605, 606, 604, 606, 607, 608, 609, 610, 608, 610, 611, 612, 613, 614, 612, 614, 615, 616, 617, 618, 616, 618, 619, 620, 621, 622, 620, 622, 623, 624, 625, 626, 624, 626, 627, 628, 629, 630, 628, 630, 631, 632, 633, 634, 632, 634, 635, 636, 637, 638, 636, 638, 639, 640, 641, 642, 640, 642, 643, 644, 645, 646, 644, 646, 647, 648, 649, 650, 648, 650, 651, 652, 653, 654, 652, 654, 655, 656, 657, 658, 656, 658, 659, 660, 661, 662, 660, 662, 663, 664, 665, 666, 664, 666, 667, 668, 669, 670, 668, 670, 671, 672, 673, 674, 672, 674, 675, 676, 677, 678, 676, 678, 679, 680, 681, 682, 680, 682, 683, 684, 685, 686, 684, 686, 687, 688, 689, 690, 688, 690, 691, 692, 693, 694, 692, 694, 695, 696, 697, 698, 696, 698, 699, 700, 701, 702, 700, 702, 703, 704, 705, 706, 704, 706, 707, 708, 709, 710, 708, 710, 711, 712, 713, 714, 712, 714, 715, 716, 717, 718, 716, 718, 719, 720, 721, 722, 720, 722, 723, 724, 725, 726, 724, 726, 727, 728, 729, 730, 728, 730, 731, 732, 733, 734, 732, 734, 735, 736, 737, 738, 736, 738, 739, 740, 741, 742, 740, 742, 743, 744, 745, 746, 744, 746, 747, 748, 749, 750, 748, 750, 751, 752, 753, 754, 752, 754, 755, 756, 757, 758, 756, 758, 759, 760, 761, 762, 760, 762, 763, 764, 765, 766, 764, 766, 767, 768, 769, 770, 768, 770, 771, 772, 773, 774, 772, 774, 775, 776, 777, 778, 776, 778, 779, 780, 781, 782, 780, 782, 783, 784, 785, 786, 784, 786, 787, 788, 789, 790, 788, 790, 791, 792, 793, 794, 792, 794, 795, 796, 797, 798, 796, 798, 799, 800, 801, 802, 800, 802, 803, 804, 805, 806, 804, 806, 807, 808, 809, 810, 808, 810, 811, 812, 813, 814, 812, 814, 815, 816, 817, 818, 816, 818, 819, 820, 821, 822, 820, 822, 823, 824, 825, 826, 824, 826, 827, 828, 829, 830, 828, 830, 831, 832, 833, 834, 832, 834, 835, 836, 837, 838, 836, 838, 839, 840, 841, 842, 840, 842, 843, 844, 845, 846, 844, 846, 847, 848, 849, 850, 848, 850, 851, 852, 853, 854, 852, 854, 855, 856, 857, 858, 856, 858, 859, 860, 861, 862, 860, 862, 863, 864, 865, 866, 864, 866, 867, 868, 869, 870, 868, 870, 871, 872, 873, 874, 872, 874, 875, 876, 877, 878, 876, 878, 879, 880, 881, 882, 880, 882, 883, 884, 885, 886, 884, 886, 887, 888, 889, 890, 888, 890, 891, 892, 893, 894, 892, 894, 895, 896, 897, 898, 896, 898, 899, 900, 901, 902, 900, 902, 903, 904, 905, 906, 904, 906, 907, 908, 909, 910, 908, 910, 911, 912, 913, 914, 912, 914, 915, 916, 917, 918, 916, 918, 919, 920, 921, 922, 920, 922, 923, 924, 925, 926, 924, 926, 927, 928, 929, 930, 928, 930, 931, 932, 933, 934, 932, 934, 935, 936, 937, 938, 936, 938, 939, 940, 941, 942, 940, 942, 943, 944, 945, 946, 944, 946, 947, 948, 949, 950, 948, 950, 951, 952, 953, 954, 952, 954, 955, 956, 957, 958, 956, 958, 959, 960, 961, 962, 960, 962, 963, 964, 965, 966, 964, 966, 967, 968, 969, 970, 968, 970, 971, 972, 973, 974, 972, 974, 975, 976, 977, 978, 976, 978, 979, 980, 981, 982, 980, 982, 983, 984, 985, 986, 984, 986, 987, 988, 989, 990, 988, 990, 991, 992, 993, 994, 992, 994, 995, 996, 997, 998, 996, 998, 999, 1000, 1001, 1002, 1000, 1002, 1003, 1004, 1005, 1006, 1004, 1006, 1007, 1008, 1009, 1010, 1008, 1010, 1011, 1012, 1013, 1014, 1012, 1014, 1015, 1016, 1017, 1018, 1016, 1018, 1019, 1020, 1021, 1022, 1020, 1022, 1023, 1024, 1025, 1026, 1024, 1026, 1027, 1028, 1029, 1030, 1028, 1030, 1031, 1032, 1033, 1034, 1032, 1034, 1035, 1036, 1037, 1038, 1036, 1038, 1039, 1040, 1041, 1042, 1040, 1042, 1043, 1044, 1045, 1046, 1044, 1046, 1047, 1048, 1049, 1050, 1048, 1050, 1051, 1052, 1053, 1054, 1052, 1054, 1055, 1056, 1057, 1058, 1056, 1058, 1059, 1060, 1061, 1062, 1060, 1062, 1063, 1064, 1065, 1066, 1064, 1066, 1067, 1068, 1069, 1070, 1068, 1070, 1071, 1072, 1073, 1074, 1072, 1074, 1075, 1076, 1077, 1078, 1076, 1078, 1079, 1080, 1081, 1082, 1080, 1082, 1083, 1084, 1085, 1086, 1084, 1086, 1087, 1088, 1089, 1090, 1088, 1090, 1091, 1092, 1093, 1094, 1092, 1094, 1095, 1096, 1097, 1098, 1096, 1098, 1099, 1100, 1101, 1102, 1100, 1102, 1103, 1104, 1105, 1106, 1104, 1106, 1107, 1108, 1109, 1110, 1108, 1110, 1111, 1112, 1113, 1114, 1112, 1114, 1115, 1116, 1117, 1118, 1116, 1118, 1119, 1120, 1121, 1122, 1120, 1122, 1123, 1124, 1125, 1126, 1124, 1126, 1127, 1128, 1129, 1130, 1128, 1130, 1131, 1132, 1133, 1134, 1132, 1134, 1135, 1136, 1137, 1138, 1136, 1138, 1139, 1140, 1141, 1142, 1140, 1142, 1143, 1144, 1145, 1146, 1144, 1146, 1147, 1148, 1149, 1150, 1148, 1150, 1151, 1152, 1153, 1154, 1152, 1154, 1155, 1156, 1157, 1158, 1156, 1158, 1159, 1160, 1161, 1162, 1160, 1162, 1163, 1164, 1165, 1166, 1164, 1166, 1167, 1168, 1169, 1170, 1168, 1170, 1171, 1172, 1173, 1174, 1172, 1174, 1175, 1176, 1177, 1178, 1176, 1178, 1179, 1180, 1181, 1182, 1180, 1182, 1183, 1184, 1185, 1186, 1184, 1186, 1187, 1188, 1189, 1190, 1188, 1190, 1191, 1192, 1193, 1194, 1192, 1194, 1195, 1196, 1197, 1198, 1196, 1198, 1199, 1200, 1201, 1202, 1200, 1202, 1203, 1204, 1205, 1206, 1204, 1206, 1207, 1208, 1209, 1210, 1208, 1210, 1211, 1212, 1213, 1214, 1212, 1214, 1215, 1216, 1217, 1218, 1216, 1218, 1219, 1220, 1221, 1222, 1220, 1222, 1223, 1224, 1225, 1226, 1224, 1226, 1227, 1228, 1229, 1230, 1228, 1230, 1231, 1232, 1233, 1234, 1232, 1234, 1235, 1236, 1237, 1238, 1236, 1238, 1239, 1240, 1241, 1242, 1240, 1242, 1243, 1244, 1245, 1246, 1244, 1246, 1247, 1248, 1249, 1250, 1248, 1250, 1251, 1252, 1253, 1254, 1252, 1254, 1255, 1256, 1257, 1258, 1256, 1258, 1259, 1260, 1261, 1262, 1260, 1262, 1263, 1264, 1265, 1266, 1264, 1266, 1267, 1268, 1269, 1270, 1268, 1270, 1271, 1272, 1273, 1274, 1272, 1274, 1275, 1276, 1277, 1278, 1276, 1278, 1279, 1280, 1281, 1282, 1280, 1282, 1283, 1284, 1285, 1286, 1284, 1286, 1287, 1288, 1289, 1290, 1288, 1290, 1291, 1292, 1293, 1294, 1292, 1294, 1295, 1296, 1297, 1298, 1296, 1298, 1299, 1300, 1301, 1302, 1300, 1302, 1303, 1304, 1305, 1306, 1304, 1306, 1307, 1308, 1309, 1310, 1308, 1310, 1311, 1312, 1313, 1314, 1312, 1314, 1315, 1316, 1317, 1318, 1316, 1318, 1319, 1320, 1321, 1322, 1320, 1322, 1323, 1324, 1325, 1326, 1324, 1326, 1327, 1328, 1329, 1330, 1328, 1330, 1331, 1332, 1333, 1334, 1332, 1334, 1335, 1336, 1337, 1338, 1336, 1338, 1339, 1340, 1341, 1342, 1340, 1342, 1343, 1344, 1345, 1346, 1344, 1346, 1347, 1348, 1349, 1350, 1348, 1350, 1351, 1352, 1353, 1354, 1352, 1354, 1355, 1356, 1357, 1358, 1356, 1358, 1359, 1360, 1361, 1362, 1360, 1362, 1363, 1364, 1365, 1366, 1364, 1366, 1367, 1368, 1369, 1370, 1368, 1370, 1371, 1372, 1373, 1374, 1372, 1374, 1375, 1376, 1377, 1378, 1376, 1378, 1379, 1380, 1381, 1382, 1380, 1382, 1383, 1384, 1385, 1386, 1384, 1386, 1387, 1388, 1389, 1390, 1388, 1390, 1391, 1392, 1393, 1394, 1392, 1394, 1395, 1396, 1397, 1398, 1396, 1398, 1399, 1400, 1401, 1402, 1400, 1402, 1403, 1404, 1405, 1406, 1404, 1406, 1407, 1408, 1409, 1410, 1408, 1410, 1411, 1412, 1413, 1414, 1412, 1414, 1415, 1416, 1417, 1418, 1416, 1418, 1419, 1420, 1421, 1422, 1420, 1422, 1423, 1424, 1425, 1426, 1424, 1426, 1427, 1428, 1429, 1430, 1428, 1430, 1431, 1432, 1433, 1434, 1432, 1434, 1435, 1436, 1437, 1438, 1436, 1438, 1439, 1440, 1441, 1442, 1440, 1442, 1443, 1444, 1445, 1446, 1444, 1446, 1447, 1448, 1449, 1450, 1448, 1450, 1451, 1452, 1453, 1454, 1452, 1454, 1455, 1456, 1457, 1458, 1456, 1458, 1459, 1460, 1461, 1462, 1460, 1462, 1463, 1464, 1465, 1466, 1464, 1466, 1467, 1468, 1469, 1470, 1468, 1470, 1471, 1472, 1473, 1474, 1472, 1474, 1475, 1476, 1477, 1478, 1476, 1478, 1479, 1480, 1481, 1482, 1480, 1482, 1483, 1484, 1485, 1486, 1484, 1486, 1487, 1488, 1489, 1490, 1488, 1490, 1491, 1492, 1493, 1494, 1492, 1494, 1495, 1496, 1497, 1498, 1496, 1498, 1499, 1500, 1501, 1502, 1500, 1502, 1503, 1504, 1505, 1506, 1504, 1506, 1507, 1508, 1509, 1510, 1508, 1510, 1511, 1512, 1513, 1514, 1512, 1514, 1515, 1516, 1517, 1518, 1516, 1518, 1519, 1520, 1521, 1522, 1520, 1522, 1523, 1524, 1525, 1526, 1524, 1526, 1527, 1528, 1529, 1530, 1528, 1530, 1531, 1532, 1533, 1534, 1532, 1534, 1535, 1536, 1537, 1538, 1536, 1538, 1539, 1540, 1541, 1542, 1540, 1542, 1543, 1544, 1545, 1546, 1544, 1546, 1547, 1548, 1549, 1550, 1548, 1550, 1551, 1552, 1553, 1554, 1552, 1554, 1555, 1556, 1557, 1558, 1556, 1558, 1559, 1560, 1561, 1562, 1560, 1562, 1563, 1564, 1565, 1566, 1564, 1566, 1567, 1568, 1569, 1570, 1568, 1570, 1571, 1572, 1573, 1574, 1572, 1574, 1575, 1576, 1577, 1578, 1576, 1578, 1579, 1580, 1581, 1582, 1580, 1582, 1583, 1584, 1585, 1586, 1584, 1586, 1587, 1588, 1589, 1590, 1588, 1590, 1591, 1592, 1593, 1594, 1592, 1594, 1595, 1596, 1597, 1598, 1596, 1598, 1599, 1600, 1601, 1602, 1600, 1602, 1603, 1604, 1605, 1606, 1604, 1606, 1607, 1608, 1609, 1610, 1608, 1610, 1611, 1612, 1613, 1614, 1612, 1614, 1615, 1616, 1617, 1618, 1616, 1618, 1619, 1620, 1621, 1622, 1620, 1622, 1623, 1624, 1625, 1626, 1624, 1626, 1627, 1628, 1629, 1630, 1628, 1630, 1631, 1632, 1633, 1634, 1632, 1634, 1635, 1636, 1637, 1638, 1636, 1638, 1639, 1640, 1641, 1642, 1640, 1642, 1643, 1644, 1645, 1646, 1644, 1646, 1647, 1648, 1649, 1650, 1648, 1650, 1651, 1652, 1653, 1654, 1652, 1654, 1655, 1656, 1657, 1658, 1656, 1658, 1659, 1660, 1661, 1662, 1660, 1662, 1663, 1664, 1665, 1666, 1664, 1666, 1667, 1668, 1669, 1670, 1668, 1670, 1671, 1672, 1673, 1674, 1672, 1674, 1675, 1676, 1677, 1678, 1676, 1678, 1679, 1680, 1681, 1682, 1680, 1682, 1683, 1684, 1685, 1686, 1684, 1686, 1687, 1688, 1689, 1690, 1688, 1690, 1691, 1692, 1693, 1694, 1692, 1694, 1695, 1696, 1697, 1698, 1696, 1698, 1699, 1700, 1701, 1702, 1700, 1702, 1703, 1704, 1705, 1706, 1704, 1706, 1707, 1708, 1709, 1710, 1708, 1710, 1711, 1712, 1713, 1714, 1712, 1714, 1715, 1716, 1717, 1718, 1716, 1718, 1719, 1720, 1721, 1722, 1720, 1722, 1723, 1724, 1725, 1726, 1724, 1726, 1727, 1728, 1729, 1730, 1728, 1730, 1731, 1732, 1733, 1734, 1732, 1734, 1735, 1736, 1737, 1738, 1736, 1738, 1739, 1740, 1741, 1742, 1740, 1742, 1743, 1744, 1745, 1746, 1744, 1746, 1747, 1748, 1749, 1750, 1748, 1750, 1751, 1752, 1753, 1754, 1752, 1754, 1755, 1756, 1757, 1758, 1756, 1758, 1759, 1760, 1761, 1762, 1760, 1762, 1763, 1764, 1765, 1766, 1764, 1766, 1767, 1768, 1769, 1770, 1768, 1770, 1771, 1772, 1773, 1774, 1772, 1774, 1775, 1776, 1777, 1778, 1776, 1778, 1779, 1780, 1781, 1782, 1780, 1782, 1783, 1784, 1785, 1786, 1784, 1786, 1787, 1788, 1789, 1790, 1788, 1790, 1791, 1792, 1793, 1794, 1792, 1794, 1795, 1796, 1797, 1798, 1796, 1798, 1799, 1800, 1801, 1802, 1800, 1802, 1803, 1804, 1805, 1806, 1804, 1806, 1807, 1808, 1809, 1810, 1808, 1810, 1811, 1812, 1813, 1814, 1812, 1814, 1815, 1816, 1817, 1818, 1816, 1818, 1819, 1820, 1821, 1822, 1820, 1822, 1823, 1824, 1825, 1826, 1824, 1826, 1827, 1828, 1829, 1830, 1828, 1830, 1831, 1832, 1833, 1834, 1832, 1834, 1835, 1836, 1837, 1838, 1836, 1838, 1839, 1840, 1841, 1842, 1840, 1842, 1843, 1844, 1845, 1846, 1844, 1846, 1847, 1848, 1849, 1850, 1848, 1850, 1851, 1852, 1853, 1854, 1852, 1854, 1855, 1856, 1857, 1858, 1856, 1858, 1859, 1860, 1861, 1862, 1860, 1862, 1863, 1864, 1865, 1866, 1864, 1866, 1867, 1868, 1869, 1870, 1868, 1870, 1871, 1872, 1873, 1874, 1872, 1874, 1875, 1876, 1877, 1878, 1876, 1878, 1879, 1880, 1881, 1882, 1880, 1882, 1883, 1884, 1885, 1886, 1884, 1886, 1887, 1888, 1889, 1890, 1888, 1890, 1891, 1892, 1893, 1894, 1892, 1894, 1895, 1896, 1897, 1898, 1896, 1898, 1899, 1900, 1901, 1902, 1900, 1902, 1903, 1904, 1905, 1906, 1904, 1906, 1907, 1908, 1909, 1910, 1908, 1910, 1911, 1912, 1913, 1914, 1912, 1914, 1915, 1916, 1917, 1918, 1916, 1918, 1919, 1920, 1921, 1922, 1920, 1922, 1923, 1924, 1925, 1926, 1924, 1926, 1927, 1928, 1929, 1930, 1928, 1930, 1931, 1932, 1933, 1934, 1932, 1934, 1935, 1936, 1937, 1938, 1936, 1938, 1939, 1940, 1941, 1942, 1940, 1942, 1943, 1944, 1945, 1946, 1944, 1946, 1947, 1948, 1949, 1950, 1948, 1950, 1951, 1952, 1953, 1954, 1952, 1954, 1955, 1956, 1957, 1958, 1956, 1958, 1959, 1960, 1961, 1962, 1960, 1962, 1963, 1964, 1965, 1966, 1964, 1966, 1967, 1968, 1969, 1970, 1968, 1970, 1971, 1972, 1973, 1974, 1972, 1974, 1975, 1976, 1977, 1978, 1976, 1978, 1979, 1980, 1981, 1982, 1980, 1982, 1983, 1984, 1985, 1986, 1984, 1986, 1987, 1988, 1989, 1990, 1988, 1990, 1991, 1992, 1993, 1994, 1992, 1994, 1995, 1996, 1997, 1998, 1996, 1998, 1999, 2000, 2001, 2002, 2000, 2002, 2003, 2004, 2005, 2006, 2004, 2006, 2007, 2008, 2009, 2010, 2008, 2010, 2011, 2012, 2013, 2014, 2012, 2014, 2015, 2016, 2017, 2018, 2016, 2018, 2019, 2020, 2021, 2022, 2020, 2022, 2023, 2024, 2025, 2026, 2024, 2026, 2027, 2028, 2029, 2030, 2028, 2030, 2031, 2032, 2033, 2034, 2032, 2034, 2035, 2036, 2037, 2038, 2036, 2038, 2039, 2040, 2041, 2042, 2040, 2042, 2043, 2044, 2045, 2046, 2044, 2046, 2047, 2048, 2049, 2050, 2048, 2050, 2051, 2052, 2053, 2054, 2052, 2054, 2055, 2056, 2057, 2058, 2056, 2058, 2059, 2060, 2061, 2062, 2060, 2062, 2063, 2064, 2065, 2066, 2064, 2066, 2067, 2068, 2069, 2070, 2068, 2070, 2071, 2072, 2073, 2074, 2072, 2074, 2075, 2076, 2077, 2078, 2076, 2078, 2079, 2080, 2081, 2082, 2080, 2082, 2083, 2084, 2085, 2086, 2084, 2086, 2087, 2088, 2089, 2090, 2088, 2090, 2091, 2092, 2093, 2094, 2092, 2094, 2095, 2096, 2097, 2098, 2096, 2098, 2099, 2100, 2101, 2102, 2100, 2102, 2103, 2104, 2105, 2106, 2104, 2106, 2107, 2108, 2109, 2110, 2108, 2110, 2111, 2112, 2113, 2114, 2112, 2114, 2115, 2116, 2117, 2118, 2116, 2118, 2119, 2120, 2121, 2122, 2120, 2122, 2123, 2124, 2125, 2126, 2124, 2126, 2127, 2128, 2129, 2130, 2128, 2130, 2131, 2132, 2133, 2134, 2132, 2134, 2135, 2136, 2137, 2138, 2136, 2138, 2139, 2140, 2141, 2142, 2140, 2142, 2143, 2144, 2145, 2146, 2144, 2146, 2147, 2148, 2149, 2150, 2148, 2150, 2151, 2152, 2153, 2154, 2152, 2154, 2155, 2156, 2157, 2158, 2156, 2158, 2159, 2160, 2161, 2162, 2160, 2162, 2163, 2164, 2165, 2166, 2164, 2166, 2167, 2168, 2169, 2170, 2168, 2170, 2171, 2172, 2173, 2174, 2172, 2174, 2175, 2176, 2177, 2178, 2176, 2178, 2179, 2180, 2181, 2182, 2180, 2182, 2183, 2184, 2185, 2186, 2184, 2186, 2187, 2188, 2189, 2190, 2188, 2190, 2191, 2192, 2193, 2194, 2192, 2194, 2195, 2196, 2197, 2198, 2196, 2198, 2199, 2200, 2201, 2202, 2200, 2202, 2203, 2204, 2205, 2206, 2204, 2206, 2207, 2208, 2209, 2210, 2208, 2210, 2211, 2212, 2213, 2214, 2212, 2214, 2215, 2216, 2217, 2218, 2216, 2218, 2219, 2220, 2221, 2222, 2220, 2222, 2223, 2224, 2225, 2226, 2224, 2226, 2227, 2228, 2229, 2230, 2228, 2230, 2231, 2232, 2233, 2234, 2232, 2234, 2235, 2236, 2237, 2238, 2236, 2238, 2239, 2240, 2241, 2242, 2240, 2242, 2243, 2244, 2245, 2246, 2244, 2246, 2247, 2248, 2249, 2250, 2248, 2250, 2251, 2252, 2253, 2254, 2252, 2254, 2255, 2256, 2257, 2258, 2256, 2258, 2259, 2260, 2261, 2262, 2260, 2262, 2263, 2264, 2265, 2266, 2264, 2266, 2267, 2268, 2269, 2270, 2268, 2270, 2271, 2272, 2273, 2274, 2272, 2274, 2275, 2276, 2277, 2278, 2276, 2278, 2279, 2280, 2281, 2282, 2280, 2282, 2283, 2284, 2285, 2286, 2284, 2286, 2287, 2288, 2289, 2290, 2288, 2290, 2291, 2292, 2293, 2294, 2292, 2294, 2295, 2296, 2297, 2298, 2296, 2298, 2299, 2300, 2301, 2302, 2300, 2302, 2303, 2304, 2305, 2306, 2304, 2306, 2307, 2308, 2309, 2310, 2308, 2310, 2311, 2312, 2313, 2314, 2312, 2314, 2315, 2316, 2317, 2318, 2316, 2318, 2319, 2320, 2321, 2322, 2320, 2322, 2323, 2324, 2325, 2326, 2324, 2326, 2327, 2328, 2329, 2330, 2328, 2330, 2331, 2332, 2333, 2334, 2332, 2334, 2335, 2336, 2337, 2338, 2336, 2338, 2339, 2340, 2341, 2342, 2340, 2342, 2343, 2344, 2345, 2346, 2344, 2346, 2347, 2348, 2349, 2350, 2348, 2350, 2351, 2352, 2353, 2354, 2352, 2354, 2355, 2356, 2357, 2358, 2356, 2358, 2359, 2360, 2361, 2362, 2360, 2362, 2363, 2364, 2365, 2366, 2364, 2366, 2367, 2368, 2369, 2370, 2368, 2370, 2371, 2372, 2373, 2374, 2372, 2374, 2375, 2376, 2377, 2378, 2376, 2378, 2379, 2380, 2381, 2382, 2380, 2382, 2383, 2384, 2385, 2386, 2384, 2386, 2387, 2388, 2389, 2390, 2388, 2390, 2391, 2392, 2393, 2394, 2392, 2394, 2395, 2396, 2397, 2398, 2396, 2398, 2399, 2400, 2401, 2402, 2400, 2402, 2403, 2404, 2405, 2406, 2404, 2406, 2407, 2408, 2409, 2410, 2408, 2410, 2411, 2412, 2413, 2414, 2412, 2414, 2415, 2416, 2417, 2418, 2416, 2418, 2419, 2420, 2421, 2422, 2420, 2422, 2423, 2424, 2425, 2426, 2424, 2426, 2427, 2428, 2429, 2430, 2428, 2430, 2431, 2432, 2433, 2434, 2432, 2434, 2435, 2436, 2437, 2438, 2436, 2438, 2439, 2440, 2441, 2442, 2440, 2442, 2443, 2444, 2445, 2446, 2444, 2446, 2447, 2448, 2449, 2450, 2448, 2450, 2451, 2452, 2453, 2454, 2452, 2454, 2455, 2456, 2457, 2458, 2456, 2458, 2459, 2460, 2461, 2462, 2460, 2462, 2463, 2464, 2465, 2466, 2464, 2466, 2467, 2468, 2469, 2470, 2468, 2470, 2471, 2472, 2473, 2474, 2472, 2474, 2475, 2476, 2477, 2478, 2476, 2478, 2479, 2480, 2481, 2482, 2480, 2482, 2483, 2484, 2485, 2486, 2484, 2486, 2487, 2488, 2489, 2490, 2488, 2490, 2491, 2492, 2493, 2494, 2492, 2494, 2495, 2496, 2497, 2498, 2496, 2498, 2499, 2500, 2501, 2502, 2500, 2502, 2503, 2504, 2505, 2506, 2504, 2506, 2507, 2508, 2509, 2510, 2508, 2510, 2511, 2512, 2513, 2514, 2512, 2514, 2515, 2516, 2517, 2518, 2516, 2518, 2519, 2520, 2521, 2522, 2520, 2522, 2523, 2524, 2525, 2526, 2524, 2526, 2527, 2528, 2529, 2530, 2528, 2530, 2531, 2532, 2533, 2534, 2532, 2534, 2535, 2536, 2537, 2538, 2536, 2538, 2539, 2540, 2541, 2542, 2540, 2542, 2543, 2544, 2545, 2546, 2544, 2546, 2547, 2548, 2549, 2550, 2548, 2550, 2551, 2552, 2553, 2554, 2552, 2554, 2555, 2556, 2557, 2558, 2556, 2558, 2559, 2560, 2561, 2562, 2560, 2562, 2563, 2564, 2565, 2566, 2564, 2566, 2567, 2568, 2569, 2570, 2568, 2570, 2571, 2572, 2573, 2574, 2572, 2574, 2575, 2576, 2577, 2578, 2576, 2578, 2579, 2580, 2581, 2582, 2580, 2582, 2583, 2584, 2585, 2586, 2584, 2586, 2587, 2588, 2589, 2590, 2588, 2590, 2591, 2592, 2593, 2594, 2592, 2594, 2595, 2596, 2597, 2598, 2596, 2598, 2599, 2600, 2601, 2602, 2600, 2602, 2603, 2604, 2605, 2606, 2604, 2606, 2607, 2608, 2609, 2610, 2608, 2610, 2611, 2612, 2613, 2614, 2612, 2614, 2615, 2616, 2617, 2618, 2616, 2618, 2619, 2620, 2621, 2622, 2620, 2622, 2623, 2624, 2625, 2626, 2624, 2626, 2627, 2628, 2629, 2630, 2628, 2630, 2631, 2632, 2633, 2634, 2632, 2634, 2635, 2636, 2637, 2638, 2636, 2638, 2639, 2640, 2641, 2642, 2640, 2642, 2643, 2644, 2645, 2646, 2644, 2646, 2647, 2648, 2649, 2650, 2648, 2650, 2651, 2652, 2653, 2654, 2652, 2654, 2655, 2656, 2657, 2658, 2656, 2658, 2659, 2660, 2661, 2662, 2660, 2662, 2663, 2664, 2665, 2666, 2664, 2666, 2667, 2668, 2669, 2670, 2668, 2670, 2671, 2672, 2673, 2674, 2672, 2674, 2675, 2676, 2677, 2678, 2676, 2678, 2679, 2680, 2681, 2682, 2680, 2682, 2683, 2684, 2685, 2686, 2684, 2686, 2687, 2688, 2689, 2690, 2688, 2690, 2691, 2692, 2693, 2694, 2692, 2694, 2695, 2696, 2697, 2698, 2696, 2698, 2699, 2700, 2701, 2702, 2700, 2702, 2703, 2704, 2705, 2706, 2704, 2706, 2707, 2708, 2709, 2710, 2708, 2710, 2711, 2712, 2713, 2714, 2712, 2714, 2715, 2716, 2717, 2718, 2716, 2718, 2719, 2720, 2721, 2722, 2720, 2722, 2723, 2724, 2725, 2726, 2724, 2726, 2727, 2728, 2729, 2730, 2728, 2730, 2731, 2732, 2733, 2734, 2732, 2734, 2735, 2736, 2737, 2738, 2736, 2738, 2739, 2740, 2741, 2742, 2740, 2742, 2743, 2744, 2745, 2746, 2744, 2746, 2747, 2748, 2749, 2750, 2748, 2750, 2751, 2752, 2753, 2754, 2752, 2754, 2755, 2756, 2757, 2758, 2756, 2758, 2759, 2760, 2761, 2762, 2760, 2762, 2763, 2764, 2765, 2766, 2764, 2766, 2767, 2768, 2769, 2770, 2768, 2770, 2771, 2772, 2773, 2774, 2772, 2774, 2775, 2776, 2777, 2778, 2776, 2778, 2779, 2780, 2781, 2782, 2780, 2782, 2783, 2784, 2785, 2786, 2784, 2786, 2787, 2788, 2789, 2790, 2788, 2790, 2791, 2792, 2793, 2794, 2792, 2794, 2795, 2796, 2797, 2798, 2796, 2798, 2799, 2800, 2801, 2802, 2800, 2802, 2803, 2804, 2805, 2806, 2804, 2806, 2807, 2808, 2809, 2810, 2808, 2810, 2811, 2812, 2813, 2814, 2812, 2814, 2815, 2816, 2817, 2818, 2816, 2818, 2819, 2820, 2821, 2822, 2820, 2822, 2823, 2824, 2825, 2826, 2824, 2826, 2827, 2828, 2829, 2830, 2828, 2830, 2831, 2832, 2833, 2834, 2832, 2834, 2835, 2836, 2837, 2838, 2836, 2838, 2839, 2840, 2841, 2842, 2840, 2842, 2843, 2844, 2845, 2846, 2844, 2846, 2847, 2848, 2849, 2850, 2848, 2850, 2851, 2852, 2853, 2854, 2852, 2854, 2855, 2856, 2857, 2858, 2856, 2858, 2859, 2860, 2861, 2862, 2860, 2862, 2863, 2864, 2865, 2866, 2864, 2866, 2867, 2868, 2869, 2870, 2868, 2870, 2871, 2872, 2873, 2874, 2872, 2874, 2875, 2876, 2877, 2878, 2876, 2878, 2879, 2880, 2881, 2882, 2880, 2882, 2883, 2884, 2885, 2886, 2884, 2886, 2887, 2888, 2889, 2890, 2888, 2890, 2891, 2892, 2893, 2894, 2892, 2894, 2895, 2896, 2897, 2898, 2896, 2898, 2899, 2900, 2901, 2902, 2900, 2902, 2903, 2904, 2905, 2906, 2904, 2906, 2907, 2908, 2909, 2910, 2908, 2910, 2911, 2912, 2913, 2914, 2912, 2914, 2915, 2916, 2917, 2918, 2916, 2918, 2919, 2920, 2921, 2922, 2920, 2922, 2923, 2924, 2925, 2926, 2924, 2926, 2927, 2928, 2929, 2930, 2928, 2930, 2931, 2932, 2933, 2934, 2932, 2934, 2935, 2936, 2937, 2938, 2936, 2938, 2939, 2940, 2941, 2942, 2940, 2942, 2943, 2944, 2945, 2946, 2944, 2946, 2947, 2948, 2949, 2950, 2948, 2950, 2951, 2952, 2953, 2954, 2952, 2954, 2955, 2956, 2957, 2958, 2956, 2958, 2959, 2960, 2961, 2962, 2960, 2962, 2963, 2964, 2965, 2966, 2964, 2966, 2967, 2968, 2969, 2970, 2968, 2970, 2971, 2972, 2973, 2974, 2972, 2974, 2975, 2976, 2977, 2978, 2976, 2978, 2979, 2980, 2981, 2982, 2980, 2982, 2983, 2984, 2985, 2986, 2984, 2986, 2987, 2988, 2989, 2990, 2988, 2990, 2991, 2992, 2993, 2994, 2992, 2994, 2995, 2996, 2997, 2998, 2996, 2998, 2999, 3000, 3001, 3002, 3000, 3002, 3003, 3004, 3005, 3006, 3004, 3006, 3007, 3008, 3009, 3010, 3008, 3010, 3011, 3012, 3013, 3014, 3012, 3014, 3015, 3016, 3017, 3018, 3016, 3018, 3019, 3020, 3021, 3022, 3020, 3022, 3023, 3024, 3025, 3026, 3024, 3026, 3027, 3028, 3029, 3030, 3028, 3030, 3031, 3032, 3033, 3034, 3032, 3034, 3035, 3036, 3037, 3038, 3036, 3038, 3039, 3040, 3041, 3042, 3040, 3042, 3043, 3044, 3045, 3046, 3044, 3046, 3047, 3048, 3049, 3050, 3048, 3050, 3051, 3052, 3053, 3054, 3052, 3054, 3055, 3056, 3057, 3058, 3056, 3058, 3059, 3060, 3061, 3062, 3060, 3062, 3063, 3064, 3065, 3066, 3064, 3066, 3067, 3068, 3069, 3070, 3068, 3070, 3071, 3072, 3073, 3074, 3072, 3074, 3075, 3076, 3077, 3078, 3076, 3078, 3079, 3080, 3081, 3082, 3080, 3082, 3083, 3084, 3085, 3086, 3084, 3086, 3087, 3088, 3089, 3090, 3088, 3090, 3091, 3092, 3093, 3094, 3092, 3094, 3095, 3096, 3097, 3098, 3096, 3098, 3099, 3100, 3101, 3102, 3100, 3102, 3103, 3104, 3105, 3106, 3104, 3106, 3107, 3108, 3109, 3110, 3108, 3110, 3111, 3112, 3113, 3114, 3112, 3114, 3115, 3116, 3117, 3118, 3116, 3118, 3119, 3120, 3121, 3122, 3120, 3122, 3123, 3124, 3125, 3126, 3124, 3126, 3127, 3128, 3129, 3130, 3128, 3130, 3131, 3132, 3133, 3134, 3132, 3134, 3135, 3136, 3137, 3138, 3136, 3138, 3139, 3140, 3141, 3142, 3140, 3142, 3143, 3144, 3145, 3146, 3144, 3146, 3147, 3148, 3149, 3150, 3148, 3150, 3151, 3152, 3153, 3154, 3152, 3154, 3155, 3156, 3157, 3158, 3156, 3158, 3159, 3160, 3161, 3162, 3160, 3162, 3163, 3164, 3165, 3166, 3164, 3166, 3167, 3168, 3169, 3170, 3168, 3170, 3171, 3172, 3173, 3174, 3172, 3174, 3175, 3176, 3177, 3178, 3176, 3178, 3179, 3180, 3181, 3182, 3180, 3182, 3183, 3184, 3185, 3186, 3184, 3186, 3187, 3188, 3189, 3190, 3188, 3190, 3191, 3192, 3193, 3194, 3192, 3194, 3195, 3196, 3197, 3198, 3196, 3198, 3199, 3200, 3201, 3202, 3200, 3202, 3203, 3204, 3205, 3206, 3204, 3206, 3207, 3208, 3209, 3210, 3208, 3210, 3211, 3212, 3213, 3214, 3212, 3214, 3215, 3216, 3217, 3218, 3216, 3218, 3219, 3220, 3221, 3222, 3220, 3222, 3223, 3224, 3225, 3226, 3224, 3226, 3227, 3228, 3229, 3230, 3228, 3230, 3231, 3232, 3233, 3234, 3232, 3234, 3235, 3236, 3237, 3238, 3236, 3238, 3239, 3240, 3241, 3242, 3240, 3242, 3243, 3244, 3245, 3246, 3244, 3246, 3247, 3248, 3249, 3250, 3248, 3250, 3251, 3252, 3253, 3254, 3252, 3254, 3255) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_ibedu"] -points = PackedVector3Array(-5, 1, -4, -5, 0.5, -4, 10, 0.5, -4, 10, 1, -4, -5, 1, 10, -5, 0.5, 10, 10, 0.5, 10, 10, 1, 10) +points = PackedVector3Array(10, 1, 10, 10, 0.5, 10, -5, 1, 10, -5, 0.5, 10, 10, 1, -4, 10, 0.5, -4, -5, 1, -4, -5, 0.5, -4) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_xuu3b"] -points = PackedVector3Array(-10.5, 1, -1.5, -10.5, 0.5, -1.5, -5.5, 0.5, -1.5, -5.5, 1, -1.5, -10.5, 1, 4.5, -10.5, 0.5, 4.5, -5.5, 0.5, 4.5, -5.5, 1, 4.5) +points = PackedVector3Array(-5.5, 1, 4.5, -5.5, 0.5, 4.5, -10.5, 1, 4.5, -10.5, 0.5, 4.5, -5.5, 1, -1.5, -5.5, 0.5, -1.5, -10.5, 1, -1.5, -10.5, 0.5, -1.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_im4mt"] -points = PackedVector3Array(-11, 3, -2, -11, 1, -2, -5.5, 1, -2, -5.5, 3, -2, -11, 3, -1.5, -11, 1, -1.5, -5.5, 1, -1.5, -5.5, 3, -1.5) +points = PackedVector3Array(-5.5, 3, -1.5, -5.5, 1, -1.5, -11, 3, -1.5, -11, 1, -1.5, -5.5, 3, -2, -5.5, 1, -2, -11, 3, -2, -11, 1, -2) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_3s4y6"] -points = PackedVector3Array(-11, 3, -1.5, -11, 1, -1.5, -10.5, 1, -1.5, -10.5, 3, -1.5, -11, 3, 5, -11, 1, 5, -10.5, 1, 5, -10.5, 3, 5) +points = PackedVector3Array(-10.5, 3, 5, -10.5, 1, 5, -11, 3, 5, -11, 1, 5, -10.5, 3, -1.5, -10.5, 1, -1.5, -11, 3, -1.5, -11, 1, -1.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_2kp45"] -points = PackedVector3Array(-10.5, 3, 4.5, -10.5, 1, 4.5, -5.5, 1, 4.5, -5.5, 3, 4.5, -10.5, 3, 5, -10.5, 1, 5, -5.5, 1, 5, -5.5, 3, 5) +points = PackedVector3Array(-5.5, 3, 5, -5.5, 1, 5, -10.5, 3, 5, -10.5, 1, 5, -5.5, 3, 4.5, -5.5, 1, 4.5, -10.5, 3, 4.5, -10.5, 1, 4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_ycnvj"] -points = PackedVector3Array(-5.5, 3, 3, -5.5, 1, 3, -5, 1, 3, -5, 3, 3, -5.5, 3, 10, -5.5, 1, 10, -5, 1, 10, -5, 3, 10) +points = PackedVector3Array(-5, 3, 10, -5, 1, 10, -5.5, 3, 10, -5.5, 1, 10, -5, 3, 3, -5, 1, 3, -5.5, 3, 3, -5.5, 1, 3) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_pwkvr"] -points = PackedVector3Array(-5.5, 3, -4.5, -5.5, 1, -4.5, -5, 1, -4.5, -5, 3, -4.5, -5.5, 3, 0.5, -5.5, 1, 0.5, -5, 1, 0.5, -5, 3, 0.5) +points = PackedVector3Array(-5, 3, 0.5, -5, 1, 0.5, -5.5, 3, 0.5, -5.5, 1, 0.5, -5, 3, -4.5, -5, 1, -4.5, -5.5, 3, -4.5, -5.5, 1, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_7pn7r"] -points = PackedVector3Array(-5.5, 1, 0.5, -5.5, 0.5, 0.5, -5, 0.5, 0.5, -5, 1, 0.5, -5.5, 1, 2.5, -5.5, 0.5, 2.5, -5, 0.5, 2.5, -5, 1, 2.5) +points = PackedVector3Array(-5, 1, 2.5, -5, 0.5, 2.5, -5.5, 1, 2.5, -5.5, 0.5, 2.5, -5, 1, 0.5, -5, 0.5, 0.5, -5.5, 1, 0.5, -5.5, 0.5, 0.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_03lp1"] -points = PackedVector3Array(-10.5, 1.5, 0.5, -10.5, 1.25, 0.5, -8.5, 1.25, 0.5, -8.5, 1.5, 0.5, -10.5, 1.5, 0.75, -10.5, 1.25, 0.75, -8.5, 1.25, 0.75, -8.5, 1.5, 0.75) +points = PackedVector3Array(-8.5, 1.5, 0.75, -8.5, 1.25, 0.75, -10.5, 1.5, 0.75, -10.5, 1.25, 0.75, -8.5, 1.5, 0.5, -8.5, 1.25, 0.5, -10.5, 1.5, 0.5, -10.5, 1.25, 0.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_mgs0t"] -points = PackedVector3Array(-10.5, 1.5, 2.25, -10.5, 1.25, 2.25, -8.5, 1.25, 2.25, -8.5, 1.5, 2.25, -10.5, 1.5, 2.5, -10.5, 1.25, 2.5, -8.5, 1.25, 2.5, -8.5, 1.5, 2.5) +points = PackedVector3Array(-8.5, 1.5, 2.5, -8.5, 1.25, 2.5, -10.5, 1.5, 2.5, -10.5, 1.25, 2.5, -8.5, 1.5, 2.25, -8.5, 1.25, 2.25, -10.5, 1.5, 2.25, -10.5, 1.25, 2.25) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_b5qy0"] -points = PackedVector3Array(-8.75, 1.25, 2.25, -8.75, 1, 2.25, -8.5, 1, 2.25, -8.5, 1.25, 2.25, -8.75, 1.25, 2.5, -8.75, 1, 2.5, -8.5, 1, 2.5, -8.5, 1.25, 2.5) +points = PackedVector3Array(-8.5, 1.25, 2.5, -8.5, 1, 2.5, -8.75, 1.25, 2.5, -8.75, 1, 2.5, -8.5, 1.25, 2.25, -8.5, 1, 2.25, -8.75, 1.25, 2.25, -8.75, 1, 2.25) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_1eb46"] -points = PackedVector3Array(-8.75, 1.25, 0.5, -8.75, 1, 0.5, -8.5, 1, 0.5, -8.5, 1.25, 0.5, -8.75, 1.25, 0.75, -8.75, 1, 0.75, -8.5, 1, 0.75, -8.5, 1.25, 0.75) +points = PackedVector3Array(-8.5, 1.25, 0.75, -8.5, 1, 0.75, -8.75, 1.25, 0.75, -8.75, 1, 0.75, -8.5, 1.25, 0.5, -8.5, 1, 0.5, -8.75, 1.25, 0.5, -8.75, 1, 0.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jqkje"] -points = PackedVector3Array(-5.5, 3, 2.5, -5.5, 1, 2.5, -5, 1, 2.5, -5, 3, 2.5, -5.5, 3, 3, -5.5, 1, 3, -5, 1, 3, -5, 3, 3) +points = PackedVector3Array(-5, 3, 3, -5, 1, 3, -5.5, 3, 3, -5.5, 1, 3, -5, 3, 2.5, -5, 1, 2.5, -5.5, 3, 2.5, -5.5, 1, 2.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jpmmi"] -points = PackedVector3Array(-5, 3, -4.5, -5, 1, -4.5, 10, 1, -4.5, 10, 3, -4.5, -5, 3, -4, -5, 1, -4, 10, 1, -4, 10, 3, -4) +points = PackedVector3Array(10, 3, -4, 10, 1, -4, -5, 3, -4, -5, 1, -4, 10, 3, -4.5, 10, 1, -4.5, -5, 3, -4.5, -5, 1, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_1cvud"] -points = PackedVector3Array(-5.5, 3, 10, -5.5, 1, 10, 2, 1, 10, 2, 3, 10, -5.5, 3, 10.5, -5.5, 1, 10.5, 2, 1, 10.5, 2, 3, 10.5) +points = PackedVector3Array(2, 3, 10.5, 2, 1, 10.5, -5.5, 3, 10.5, -5.5, 1, 10.5, 2, 3, 10, 2, 1, 10, -5.5, 3, 10, -5.5, 1, 10) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_ib7d1"] -points = PackedVector3Array(10, 3, -0.5, 10, 1, -0.5, 10.5, 1, -0.5, 10.5, 3, -0.5, 10, 3, 2, 10, 1, 2, 10.5, 1, 2, 10.5, 3, 2) +points = PackedVector3Array(10.5, 3, 2, 10.5, 1, 2, 10, 3, 2, 10, 1, 2, 10.5, 3, -0.5, 10.5, 1, -0.5, 10, 3, -0.5, 10, 1, -0.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_3adtt"] -points = PackedVector3Array(10, 3, -4.5, 10, 1, -4.5, 10.5, 1, -4.5, 10.5, 3, -4.5, 10, 3, -2.5, 10, 1, -2.5, 10.5, 1, -2.5, 10.5, 3, -2.5) +points = PackedVector3Array(10.5, 3, -2.5, 10.5, 1, -2.5, 10, 3, -2.5, 10, 1, -2.5, 10.5, 3, -4.5, 10.5, 1, -4.5, 10, 3, -4.5, 10, 1, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_mfp6m"] -points = PackedVector3Array(10, 1, -2.5, 10, 0.5, -2.5, 10.5, 0.5, -2.5, 10.5, 1, -2.5, 10, 1, -0.5, 10, 0.5, -0.5, 10.5, 0.5, -0.5, 10.5, 1, -0.5) +points = PackedVector3Array(10.5, 1, -0.5, 10.5, 0.5, -0.5, 10, 1, -0.5, 10, 0.5, -0.5, 10.5, 1, -2.5, 10.5, 0.5, -2.5, 10, 1, -2.5, 10, 0.5, -2.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_5ntrp"] -points = PackedVector3Array(10.5, 1, -4, 10.5, 0.5, -4, 25.5, 0.5, -4, 25.5, 1, -4, 10.5, 1, 1.5, 10.5, 0.5, 1.5, 25.5, 0.5, 1.5, 25.5, 1, 1.5) +points = PackedVector3Array(25.5, 1, 1.5, 25.5, 0.5, 1.5, 10.5, 1, 1.5, 10.5, 0.5, 1.5, 25.5, 1, -4, 25.5, 0.5, -4, 10.5, 1, -4, 10.5, 0.5, -4) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_n768q"] -points = PackedVector3Array(10.5, 2, 1.5, 10.5, 1, 1.5, 25.5, 1, 1.5, 25.5, 2, 1.5, 10.5, 2, 2, 10.5, 1, 2, 25.5, 1, 2, 25.5, 2, 2) +points = PackedVector3Array(25.5, 2, 2, 25.5, 1, 2, 10.5, 2, 2, 10.5, 1, 2, 25.5, 2, 1.5, 25.5, 1, 1.5, 10.5, 2, 1.5, 10.5, 1, 1.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_fkt47"] -points = PackedVector3Array(10.5, 3, -4.5, 10.5, 1, -4.5, 13.5, 1, -4.5, 13.5, 3, -4.5, 10.5, 3, -4, 10.5, 1, -4, 13.5, 1, -4, 13.5, 3, -4) +points = PackedVector3Array(13.5, 3, -4, 13.5, 1, -4, 10.5, 3, -4, 10.5, 1, -4, 13.5, 3, -4.5, 13.5, 1, -4.5, 10.5, 3, -4.5, 10.5, 1, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_0magi"] -points = PackedVector3Array(15.5, 3, -4.5, 15.5, 1, -4.5, 20, 1, -4.5, 20, 3, -4.5, 15.5, 3, -4, 15.5, 1, -4, 20, 1, -4, 20, 3, -4) +points = PackedVector3Array(20, 3, -4, 20, 1, -4, 15.5, 3, -4, 15.5, 1, -4, 20, 3, -4.5, 20, 1, -4.5, 15.5, 3, -4.5, 15.5, 1, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_xs42s"] -points = PackedVector3Array(22, 3, -4.5, 22, 1, -4.5, 25.5, 1, -4.5, 25.5, 3, -4.5, 22, 3, -4, 22, 1, -4, 25.5, 1, -4, 25.5, 3, -4) +points = PackedVector3Array(25.5, 3, -4, 25.5, 1, -4, 22, 3, -4, 22, 1, -4, 25.5, 3, -4.5, 25.5, 1, -4.5, 22, 3, -4.5, 22, 1, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_cy54r"] -points = PackedVector3Array(20, 1, -5, 20, 0.5, -5, 22, 0.5, -5, 22, 1, -5, 20, 1, -4, 20, 0.5, -4, 22, 0.5, -4, 22, 1, -4) +points = PackedVector3Array(22, 1, -4, 22, 0.5, -4, 20, 1, -4, 20, 0.5, -4, 22, 1, -5, 22, 0.5, -5, 20, 1, -5, 20, 0.5, -5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_kx76w"] -points = PackedVector3Array(20, 3, -5.5, 20, 1, -5.5, 22, 1, -5.5, 22, 3, -5.5, 20, 3, -5, 20, 1, -5, 22, 1, -5, 22, 3, -5) +points = PackedVector3Array(22, 3, -5, 22, 1, -5, 20, 3, -5, 20, 1, -5, 22, 3, -5.5, 22, 1, -5.5, 20, 3, -5.5, 20, 1, -5.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_nu78d"] -points = PackedVector3Array(19.5, 3, -5.5, 19.5, 1, -5.5, 20, 1, -5.5, 20, 3, -5.5, 19.5, 3, -4.5, 19.5, 1, -4.5, 20, 1, -4.5, 20, 3, -4.5) +points = PackedVector3Array(20, 3, -4.5, 20, 1, -4.5, 19.5, 3, -4.5, 19.5, 1, -4.5, 20, 3, -5.5, 20, 1, -5.5, 19.5, 3, -5.5, 19.5, 1, -5.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_dhtb0"] -points = PackedVector3Array(22, 3, -5.5, 22, 1, -5.5, 22.5, 1, -5.5, 22.5, 3, -5.5, 22, 3, -4.5, 22, 1, -4.5, 22.5, 1, -4.5, 22.5, 3, -4.5) +points = PackedVector3Array(22.5, 3, -4.5, 22.5, 1, -4.5, 22, 3, -4.5, 22, 1, -4.5, 22.5, 3, -5.5, 22.5, 1, -5.5, 22, 3, -5.5, 22, 1, -5.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_xhyny"] -points = PackedVector3Array(25.5, 3, -12, 25.5, 1, -12, 26, 1, -12, 26, 3, -12, 25.5, 3, -2.5, 25.5, 1, -2.5, 26, 1, -2.5, 26, 3, -2.5) +points = PackedVector3Array(26, 3, -2.5, 26, 1, -2.5, 25.5, 3, -2.5, 25.5, 1, -2.5, 26, 3, -12, 26, 1, -12, 25.5, 3, -12, 25.5, 1, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jv565"] -points = PackedVector3Array(25.5, 3, -0.5, 25.5, 1, -0.5, 26, 1, -0.5, 26, 3, -0.5, 25.5, 3, 8.5, 25.5, 1, 8.5, 26, 1, 8.5, 26, 3, 8.5) +points = PackedVector3Array(26, 3, 8.5, 26, 1, 8.5, 25.5, 3, 8.5, 25.5, 1, 8.5, 26, 3, -0.5, 26, 1, -0.5, 25.5, 3, -0.5, 25.5, 1, -0.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_lyvq8"] -points = PackedVector3Array(25.5, 1, -2.5, 25.5, 0.5, -2.5, 26, 0.5, -2.5, 26, 1, -2.5, 25.5, 1, -0.5, 25.5, 0.5, -0.5, 26, 0.5, -0.5, 26, 1, -0.5) +points = PackedVector3Array(26, 1, -0.5, 26, 0.5, -0.5, 25.5, 1, -0.5, 25.5, 0.5, -0.5, 26, 1, -2.5, 26, 0.5, -2.5, 25.5, 1, -2.5, 25.5, 0.5, -2.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jt4yb"] -points = PackedVector3Array(13.5, 1, -5.5, 13.5, 0.5, -5.5, 15.5, 0.5, -5.5, 15.5, 1, -5.5, 13.5, 1, -4.5, 13.5, 0.5, -4.5, 15.5, 0.5, -4.5, 15.5, 1, -4.5) +points = PackedVector3Array(15.5, 1, -4.5, 15.5, 0.5, -4.5, 13.5, 1, -4.5, 13.5, 0.5, -4.5, 15.5, 1, -5.5, 15.5, 0.5, -5.5, 13.5, 1, -5.5, 13.5, 0.5, -5.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_sm11e"] -points = PackedVector3Array(13, 3, -5.5, 13, 1, -5.5, 13.5, 1, -5.5, 13.5, 3, -5.5, 13, 3, -4.5, 13, 1, -4.5, 13.5, 1, -4.5, 13.5, 3, -4.5) +points = PackedVector3Array(13.5, 3, -4.5, 13.5, 1, -4.5, 13, 3, -4.5, 13, 1, -4.5, 13.5, 3, -5.5, 13.5, 1, -5.5, 13, 3, -5.5, 13, 1, -5.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_3blfh"] -points = PackedVector3Array(15.5, 3, -5.5, 15.5, 1, -5.5, 16, 1, -5.5, 16, 3, -5.5, 15.5, 3, -4.5, 15.5, 1, -4.5, 16, 1, -4.5, 16, 3, -4.5) +points = PackedVector3Array(16, 3, -4.5, 16, 1, -4.5, 15.5, 3, -4.5, 15.5, 1, -4.5, 16, 3, -5.5, 16, 1, -5.5, 15.5, 3, -5.5, 15.5, 1, -5.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_kigw6"] -points = PackedVector3Array(13.5, 3, -5.5, 13.5, 1, -5.5, 15.5, 1, -5.5, 15.5, 3, -5.5, 13.5, 3, -5, 13.5, 1, -5, 15.5, 1, -5, 15.5, 3, -5) +points = PackedVector3Array(15.5, 3, -5, 15.5, 1, -5, 13.5, 3, -5, 13.5, 1, -5, 15.5, 3, -5.5, 15.5, 1, -5.5, 13.5, 3, -5.5, 13.5, 1, -5.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_glc3p"] -points = PackedVector3Array(10, 3.25, -4.5, 10, 3, -4.5, 10.5, 3, -4.5, 10.5, 3.25, -4.5, 10, 3.25, 2, 10, 3, 2, 10.5, 3, 2, 10.5, 3.25, 2) +points = PackedVector3Array(10.5, 3.25, 2, 10.5, 3, 2, 10, 3.25, 2, 10, 3, 2, 10.5, 3.25, -4.5, 10.5, 3, -4.5, 10, 3.25, -4.5, 10, 3, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_fbj0k"] -points = PackedVector3Array(-5.5, 3.25, -4.5, -5.5, 3, -4.5, -5, 3, -4.5, -5, 3.25, -4.5, -5.5, 3.25, 10.5, -5.5, 3, 10.5, -5, 3, 10.5, -5, 3.25, 10.5) +points = PackedVector3Array(-5, 3.25, 10.5, -5, 3, 10.5, -5.5, 3.25, 10.5, -5.5, 3, 10.5, -5, 3.25, -4.5, -5, 3, -4.5, -5.5, 3.25, -4.5, -5.5, 3, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_ra6a5"] -points = PackedVector3Array(-5, 3.25, 10, -5, 3, 10, 2, 3, 10, 2, 3.25, 10, -5, 3.25, 10.5, -5, 3, 10.5, 2, 3, 10.5, 2, 3.25, 10.5) +points = PackedVector3Array(2, 3.25, 10.5, 2, 3, 10.5, -5, 3.25, 10.5, -5, 3, 10.5, 2, 3.25, 10, 2, 3, 10, -5, 3.25, 10, -5, 3, 10) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_so6fk"] -points = PackedVector3Array(-5, 3.25, -4.5, -5, 3, -4.5, 10, 3, -4.5, 10, 3.25, -4.5, -5, 3.25, -4, -5, 3, -4, 10, 3, -4, 10, 3.25, -4) +points = PackedVector3Array(10, 3.25, -4, 10, 3, -4, -5, 3.25, -4, -5, 3, -4, 10, 3.25, -4.5, 10, 3, -4.5, -5, 3.25, -4.5, -5, 3, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_4fyex"] -points = PackedVector3Array(10.5, 3.25, -4.5, 10.5, 3, -4.5, 25.5, 3, -4.5, 25.5, 3.25, -4.5, 10.5, 3.25, -4, 10.5, 3, -4, 25.5, 3, -4, 25.5, 3.25, -4) +points = PackedVector3Array(25.5, 3.25, -4, 25.5, 3, -4, 10.5, 3.25, -4, 10.5, 3, -4, 25.5, 3.25, -4.5, 25.5, 3, -4.5, 10.5, 3.25, -4.5, 10.5, 3, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_xidfb"] -points = PackedVector3Array(-10.5, 3.25, -2, -10.5, 3, -2, -5.5, 3, -2, -5.5, 3.25, -2, -10.5, 3.25, -1.5, -10.5, 3, -1.5, -5.5, 3, -1.5, -5.5, 3.25, -1.5) +points = PackedVector3Array(-5.5, 3.25, -1.5, -5.5, 3, -1.5, -10.5, 3.25, -1.5, -10.5, 3, -1.5, -5.5, 3.25, -2, -5.5, 3, -2, -10.5, 3.25, -2, -10.5, 3, -2) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_yn620"] -points = PackedVector3Array(-11, 3.25, -2, -11, 3, -2, -10.5, 3, -2, -10.5, 3.25, -2, -11, 3.25, 5, -11, 3, 5, -10.5, 3, 5, -10.5, 3.25, 5) +points = PackedVector3Array(-10.5, 3.25, 5, -10.5, 3, 5, -11, 3.25, 5, -11, 3, 5, -10.5, 3.25, -2, -10.5, 3, -2, -11, 3.25, -2, -11, 3, -2) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_pu52u"] -points = PackedVector3Array(-10.5, 3.25, 4.5, -10.5, 3, 4.5, -5.5, 3, 4.5, -5.5, 3.25, 4.5, -10.5, 3.25, 5, -10.5, 3, 5, -5.5, 3, 5, -5.5, 3.25, 5) +points = PackedVector3Array(-5.5, 3.25, 5, -5.5, 3, 5, -10.5, 3.25, 5, -10.5, 3, 5, -5.5, 3.25, 4.5, -5.5, 3, 4.5, -10.5, 3.25, 4.5, -10.5, 3, 4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_hfs5n"] -points = PackedVector3Array(2, 1, 10, 2, 0.5, 10, 10, 0.5, 10, 10, 1, 10, 2, 1, 12.5, 2, 0.5, 12.5, 10, 0.5, 12.5, 10, 1, 12.5) +points = PackedVector3Array(10, 1, 12.5, 10, 0.5, 12.5, 2, 1, 12.5, 2, 0.5, 12.5, 10, 1, 10, 10, 0.5, 10, 2, 1, 10, 2, 0.5, 10) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_q51gn"] -points = PackedVector3Array(2, 3, 12.5, 2, 0.5, 12.5, 10, 0.5, 12.5, 10, 3, 12.5, 2, 3, 13, 2, 0.5, 13, 10, 0.5, 13, 10, 3, 13) +points = PackedVector3Array(10, 3, 13, 10, 0.5, 13, 2, 3, 13, 2, 0.5, 13, 10, 3, 12.5, 10, 0.5, 12.5, 2, 3, 12.5, 2, 0.5, 12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_wjtpl"] -points = PackedVector3Array(1.5, 3, 10.5, 1.5, 1, 10.5, 2, 1, 10.5, 2, 3, 10.5, 1.5, 3, 13, 1.5, 1, 13, 2, 1, 13, 2, 3, 13) +points = PackedVector3Array(2, 3, 13, 2, 1, 13, 1.5, 3, 13, 1.5, 1, 13, 2, 3, 10.5, 2, 1, 10.5, 1.5, 3, 10.5, 1.5, 1, 10.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_tuk77"] -points = PackedVector3Array(2, 3.25, 12.5, 2, 3, 12.5, 10, 3, 12.5, 10, 3.25, 12.5, 2, 3.25, 13, 2, 3, 13, 10, 3, 13, 10, 3.25, 13) +points = PackedVector3Array(10, 3.25, 13, 10, 3, 13, 2, 3.25, 13, 2, 3, 13, 10, 3.25, 12.5, 10, 3, 12.5, 2, 3.25, 12.5, 2, 3, 12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_xunom"] -points = PackedVector3Array(1.5, 3.25, 10.5, 1.5, 3, 10.5, 2, 3, 10.5, 2, 3.25, 10.5, 1.5, 3.25, 13, 1.5, 3, 13, 2, 3, 13, 2, 3.25, 13) +points = PackedVector3Array(2, 3.25, 13, 2, 3, 13, 1.5, 3.25, 13, 1.5, 3, 13, 2, 3.25, 10.5, 2, 3, 10.5, 1.5, 3.25, 10.5, 1.5, 3, 10.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_im2q5"] -points = PackedVector3Array(25.5, 3.25, -12.25, 25.5, 3, -12.25, 26, 3, -12.25, 26, 3.25, -12.25, 25.5, 3.25, 8.5, 25.5, 3, 8.5, 26, 3, 8.5, 26, 3.25, 8.5) +points = PackedVector3Array(26, 3.25, 8.5, 26, 3, 8.5, 25.5, 3.25, 8.5, 25.5, 3, 8.5, 26, 3.25, -12.25, 26, 3, -12.25, 25.5, 3.25, -12.25, 25.5, 3, -12.25) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_i5qap"] -points = PackedVector3Array(33, 1, 1, 33, 0.5, 1, 40, 0.5, 1, 40, 1, 1, 33, 1, 8, 33, 0.5, 8, 40, 0.5, 8, 40, 1, 8) +points = PackedVector3Array(40, 1, 8, 40, 0.5, 8, 33, 1, 8, 33, 0.5, 8, 40, 1, 1, 40, 0.5, 1, 33, 1, 1, 33, 0.5, 1) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_5wb2r"] -points = PackedVector3Array(40, 1, -12, 40, 0.5, -12, 47, 0.5, -12, 47, 1, -12, 40, 1, 8, 40, 0.5, 8, 47, 0.5, 8, 47, 1, 8) +points = PackedVector3Array(47, 1, 8, 47, 0.5, 8, 40, 1, 8, 40, 0.5, 8, 47, 1, -12, 47, 0.5, -12, 40, 1, -12, 40, 0.5, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jf1wx"] -points = PackedVector3Array(33, 3, -12.5, 33, 1, -12.5, 35, 1, -12.5, 35, 3, -12.5, 33, 3, -12, 33, 1, -12, 35, 1, -12, 35, 3, -12) +points = PackedVector3Array(35, 3, -12, 35, 1, -12, 33, 3, -12, 33, 1, -12, 35, 3, -12.5, 35, 1, -12.5, 33, 3, -12.5, 33, 1, -12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_y88kk"] -points = PackedVector3Array(44, 3, 8, 44, 1, 8, 47.5, 1, 8, 47.5, 3, 8, 44, 3, 8.5, 44, 1, 8.5, 47.5, 1, 8.5, 47.5, 3, 8.5) +points = PackedVector3Array(47.5, 3, 8.5, 47.5, 1, 8.5, 44, 3, 8.5, 44, 1, 8.5, 47.5, 3, 8, 47.5, 1, 8, 44, 3, 8, 44, 1, 8) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_wo75v"] -points = PackedVector3Array(47, 3, -12, 47, 1, -12, 47.5, 1, -12, 47.5, 3, -12, 47, 3, 8, 47, 1, 8, 47.5, 1, 8, 47.5, 3, 8) +points = PackedVector3Array(47.5, 3, 8, 47.5, 1, 8, 47, 3, 8, 47, 1, 8, 47.5, 3, -12, 47.5, 1, -12, 47, 3, -12, 47, 1, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_k6gv8"] -points = PackedVector3Array(26, 5.25, -12.5, 26, 5, -12.5, 47, 5, -12.5, 47, 5.25, -12.5, 26, 5.25, -12, 26, 5, -12, 47, 5, -12, 47, 5.25, -12) +points = PackedVector3Array(47, 5.25, -12, 47, 5, -12, 26, 5.25, -12, 26, 5, -12, 47, 5.25, -12.5, 47, 5, -12.5, 26, 5.25, -12.5, 26, 5, -12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_ifqpu"] -points = PackedVector3Array(33, 0.5, -5, 33, -0.5, -5, 40, -0.5, -5, 40, 0.5, -5, 33, 0.5, -4.5, 33, -0.5, -4.5, 40, -0.5, -4.5, 40, 0.5, -4.5) +points = PackedVector3Array(40, 0.5, -4.5, 40, -0.5, -4.5, 33, 0.5, -4.5, 33, -0.5, -4.5, 40, 0.5, -5, 40, -0.5, -5, 33, 0.5, -5, 33, -0.5, -5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_dvbie"] -points = PackedVector3Array(33, 0.5, 1, 33, -0.5, 1, 40, -0.5, 1, 40, 0.5, 1, 33, 0.5, 1.5, 33, -0.5, 1.5, 40, -0.5, 1.5, 40, 0.5, 1.5) +points = PackedVector3Array(40, 0.5, 1.5, 40, -0.5, 1.5, 33, 0.5, 1.5, 33, -0.5, 1.5, 40, 0.5, 1, 40, -0.5, 1, 33, 0.5, 1, 33, -0.5, 1) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_bjdn5"] -points = PackedVector3Array(32.5, 0.5, -5, 32.5, -0.5, -5, 33, -0.5, -5, 33, 0.5, -5, 32.5, 0.5, 2, 32.5, -0.5, 2, 33, -0.5, 2, 33, 0.5, 2) +points = PackedVector3Array(33, 0.5, 2, 33, -0.5, 2, 32.5, 0.5, 2, 32.5, -0.5, 2, 33, 0.5, -5, 33, -0.5, -5, 32.5, 0.5, -5, 32.5, -0.5, -5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_7165k"] -points = PackedVector3Array(40, 0.5, -5, 40, -0.5, -5, 40.5, -0.5, -5, 40.5, 0.5, -5, 40, 0.5, 2, 40, -0.5, 2, 40.5, -0.5, 2, 40.5, 0.5, 2) +points = PackedVector3Array(40.5, 0.5, 2, 40.5, -0.5, 2, 40, 0.5, 2, 40, -0.5, 2, 40.5, 0.5, -5, 40.5, -0.5, -5, 40, 0.5, -5, 40, -0.5, -5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_yxkrm"] -points = PackedVector3Array(33, -0.5, -5.5, 33, -1, -5.5, 40, -1, -5.5, 40, -0.5, -5.5, 33, -0.5, 2, 33, -1, 2, 40, -1, 2, 40, -0.5, 2) +points = PackedVector3Array(40, -0.5, 2, 40, -1, 2, 33, -0.5, 2, 33, -1, 2, 40, -0.5, -5.5, 40, -1, -5.5, 33, -0.5, -5.5, 33, -1, -5.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_v7o4h"] -points = PackedVector3Array(35, 5, -12.5, 35, 3, -12.5, 47, 3, -12.5, 47, 5, -12.5, 35, 5, -12, 35, 3, -12, 47, 3, -12, 47, 5, -12) +points = PackedVector3Array(47, 5, -12, 47, 3, -12, 35, 5, -12, 35, 3, -12, 47, 5, -12.5, 47, 3, -12.5, 35, 5, -12.5, 35, 3, -12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_cqp0u"] -points = PackedVector3Array(26, 5, -12.5, 26, 3, -12.5, 33, 3, -12.5, 33, 5, -12.5, 26, 5, -12, 26, 3, -12, 33, 3, -12, 33, 5, -12) +points = PackedVector3Array(33, 5, -12, 33, 3, -12, 26, 5, -12, 26, 3, -12, 33, 5, -12.5, 33, 3, -12.5, 26, 5, -12.5, 26, 3, -12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_mpjyj"] -points = PackedVector3Array(26, 3, 8, 26, 1, 8, 42, 1, 8, 42, 3, 8, 26, 3, 8.5, 26, 1, 8.5, 42, 1, 8.5, 42, 3, 8.5) +points = PackedVector3Array(42, 3, 8.5, 42, 1, 8.5, 26, 3, 8.5, 26, 1, 8.5, 42, 3, 8, 42, 1, 8, 26, 3, 8, 26, 1, 8) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_3xkfa"] -points = PackedVector3Array(39.5, 1, 8.5, 39.5, 0.5, 8.5, 46, 0.5, 8.5, 46, 1, 8.5, 39.5, 1, 14.5, 39.5, 0.5, 14.5, 46, 0.5, 14.5, 46, 1, 14.5) +points = PackedVector3Array(46, 1, 14.5, 46, 0.5, 14.5, 39.5, 1, 14.5, 39.5, 0.5, 14.5, 46, 1, 8.5, 46, 0.5, 8.5, 39.5, 1, 8.5, 39.5, 0.5, 8.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_ah7jh"] -points = PackedVector3Array(31, 3, -21.5, 31, 2.5, -21.5, 38, 2.5, -21.5, 38, 3, -21.5, 31, 3, -12.5, 31, 2.5, -12.5, 38, 2.5, -12.5, 38, 3, -12.5) +points = PackedVector3Array(38, 3, -12.5, 38, 2.5, -12.5, 31, 3, -12.5, 31, 2.5, -12.5, 38, 3, -21.5, 38, 2.5, -21.5, 31, 3, -21.5, 31, 2.5, -21.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_c35u8"] -points = PackedVector3Array(37, 1.5, -12, 37, 1.25, -12, 37.25, 1.25, -12, 37.25, 1.5, -12, 37, 1.5, -10.75, 37, 1.25, -10.75, 37.25, 1.25, -10.75, 37.25, 1.5, -10.75) +points = PackedVector3Array(37.25, 1.5, -10.75, 37.25, 1.25, -10.75, 37, 1.5, -10.75, 37, 1.25, -10.75, 37.25, 1.5, -12, 37.25, 1.25, -12, 37, 1.5, -12, 37, 1.25, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_usex1"] -points = PackedVector3Array(37, 1.25, -11, 37, 1, -11, 37.25, 1, -11, 37.25, 1.25, -11, 37, 1.25, -10.75, 37, 1, -10.75, 37.25, 1, -10.75, 37.25, 1.25, -10.75) +points = PackedVector3Array(37.25, 1.25, -10.75, 37.25, 1, -10.75, 37, 1.25, -10.75, 37, 1, -10.75, 37.25, 1.25, -11, 37.25, 1, -11, 37, 1.25, -11, 37, 1, -11) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_vudqg"] -points = PackedVector3Array(41, 1.5, -12, 41, 1.25, -12, 41.25, 1.25, -12, 41.25, 1.5, -12, 41, 1.5, -10.75, 41, 1.25, -10.75, 41.25, 1.25, -10.75, 41.25, 1.5, -10.75) +points = PackedVector3Array(41.25, 1.5, -10.75, 41.25, 1.25, -10.75, 41, 1.5, -10.75, 41, 1.25, -10.75, 41.25, 1.5, -12, 41.25, 1.25, -12, 41, 1.5, -12, 41, 1.25, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_ugkby"] -points = PackedVector3Array(37, 1.5, -9.25, 37, 1.25, -9.25, 41.25, 1.25, -9.25, 41.25, 1.5, -9.25, 37, 1.5, -9, 37, 1.25, -9, 41.25, 1.25, -9, 41.25, 1.5, -9) +points = PackedVector3Array(41.25, 1.5, -9, 41.25, 1.25, -9, 37, 1.5, -9, 37, 1.25, -9, 41.25, 1.5, -9.25, 41.25, 1.25, -9.25, 37, 1.5, -9.25, 37, 1.25, -9.25) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_csnpm"] -points = PackedVector3Array(26, 1.5, -6, 26, 1.25, -6, 27.25, 1.25, -6, 27.25, 1.5, -6, 26, 1.5, -5.75, 26, 1.25, -5.75, 27.25, 1.25, -5.75, 27.25, 1.5, -5.75) +points = PackedVector3Array(27.25, 1.5, -5.75, 27.25, 1.25, -5.75, 26, 1.5, -5.75, 26, 1.25, -5.75, 27.25, 1.5, -6, 27.25, 1.25, -6, 26, 1.5, -6, 26, 1.25, -6) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_3x0kn"] -points = PackedVector3Array(26, 1.5, -9.25, 26, 1.25, -9.25, 27.25, 1.25, -9.25, 27.25, 1.5, -9.25, 26, 1.5, -9, 26, 1.25, -9, 27.25, 1.25, -9, 27.25, 1.5, -9) +points = PackedVector3Array(27.25, 1.5, -9, 27.25, 1.25, -9, 26, 1.5, -9, 26, 1.25, -9, 27.25, 1.5, -9.25, 27.25, 1.25, -9.25, 26, 1.5, -9.25, 26, 1.25, -9.25) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_sqcpa"] -points = PackedVector3Array(27, 1.5, -9, 27, 1.25, -9, 27.25, 1.25, -9, 27.25, 1.5, -9, 27, 1.5, -6, 27, 1.25, -6, 27.25, 1.25, -6, 27.25, 1.5, -6) +points = PackedVector3Array(27.25, 1.5, -6, 27.25, 1.25, -6, 27, 1.5, -6, 27, 1.25, -6, 27.25, 1.5, -9, 27.25, 1.25, -9, 27, 1.5, -9, 27, 1.25, -9) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_7lpoc"] -points = PackedVector3Array(27, 1.5, 2.75, 27, 1.25, 2.75, 31, 1.25, 2.75, 31, 1.5, 2.75, 27, 1.5, 3, 27, 1.25, 3, 31, 1.25, 3, 31, 1.5, 3) +points = PackedVector3Array(31, 1.5, 3, 31, 1.25, 3, 27, 1.5, 3, 27, 1.25, 3, 31, 1.5, 2.75, 31, 1.25, 2.75, 27, 1.5, 2.75, 27, 1.25, 2.75) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_mbpt3"] -points = PackedVector3Array(30.75, 1.5, 3, 30.75, 1.25, 3, 31, 1.25, 3, 31, 1.5, 3, 30.75, 1.5, 7, 30.75, 1.25, 7, 31, 1.25, 7, 31, 1.5, 7) +points = PackedVector3Array(31, 1.5, 7, 31, 1.25, 7, 30.75, 1.5, 7, 30.75, 1.25, 7, 31, 1.5, 3, 31, 1.25, 3, 30.75, 1.5, 3, 30.75, 1.25, 3) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_qv5xo"] -points = PackedVector3Array(27, 1.5, 3, 27, 1.25, 3, 27.25, 1.25, 3, 27.25, 1.5, 3, 27, 1.5, 7, 27, 1.25, 7, 27.25, 1.25, 7, 27.25, 1.5, 7) +points = PackedVector3Array(27.25, 1.5, 7, 27.25, 1.25, 7, 27, 1.5, 7, 27, 1.25, 7, 27.25, 1.5, 3, 27.25, 1.25, 3, 27, 1.5, 3, 27, 1.25, 3) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_t5lk3"] -points = PackedVector3Array(27, 1.5, 7, 27, 1.25, 7, 31, 1.25, 7, 31, 1.5, 7, 27, 1.5, 7.25, 27, 1.25, 7.25, 31, 1.25, 7.25, 31, 1.5, 7.25) +points = PackedVector3Array(31, 1.5, 7.25, 31, 1.25, 7.25, 27, 1.5, 7.25, 27, 1.25, 7.25, 31, 1.5, 7, 31, 1.25, 7, 27, 1.5, 7, 27, 1.25, 7) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_c0xr3"] -points = PackedVector3Array(35, 3, -12.5, 35, 1, -12.5, 47, 1, -12.5, 47, 3, -12.5, 35, 3, -12, 35, 1, -12, 47, 1, -12, 47, 3, -12) +points = PackedVector3Array(47, 3, -12, 47, 1, -12, 35, 3, -12, 35, 1, -12, 47, 3, -12.5, 47, 1, -12.5, 35, 3, -12.5, 35, 1, -12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_bqtby"] -points = PackedVector3Array(26, 3, -12.5, 26, 1, -12.5, 33, 1, -12.5, 33, 3, -12.5, 26, 3, -12, 26, 1, -12, 33, 1, -12, 33, 3, -12) +points = PackedVector3Array(33, 3, -12, 33, 1, -12, 26, 3, -12, 26, 1, -12, 33, 3, -12.5, 33, 1, -12.5, 26, 3, -12.5, 26, 1, -12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jfldf"] -points = PackedVector3Array(31, 5, -21.5, 31, 3, -21.5, 31.5, 3, -21.5, 31.5, 5, -21.5, 31, 5, -12.5, 31, 3, -12.5, 31.5, 3, -12.5, 31.5, 5, -12.5) +points = PackedVector3Array(31.5, 5, -12.5, 31.5, 3, -12.5, 31, 5, -12.5, 31, 3, -12.5, 31.5, 5, -21.5, 31.5, 3, -21.5, 31, 5, -21.5, 31, 3, -21.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_2g8cp"] -points = PackedVector3Array(36, 1.5, 6, 36, 1.25, 6, 39.5, 1.25, 6, 39.5, 1.5, 6, 36, 1.5, 6.25, 36, 1.25, 6.25, 39.5, 1.25, 6.25, 39.5, 1.5, 6.25) +points = PackedVector3Array(39.5, 1.5, 6.25, 39.5, 1.25, 6.25, 36, 1.5, 6.25, 36, 1.25, 6.25, 39.5, 1.5, 6, 39.5, 1.25, 6, 36, 1.5, 6, 36, 1.25, 6) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_qvast"] -points = PackedVector3Array(45, 1.5, 3.75, 45, 1.25, 3.75, 47, 1.25, 3.75, 47, 1.5, 3.75, 45, 1.5, 4, 45, 1.25, 4, 47, 1.25, 4, 47, 1.5, 4) +points = PackedVector3Array(47, 1.5, 4, 47, 1.25, 4, 45, 1.5, 4, 45, 1.25, 4, 47, 1.5, 3.75, 47, 1.25, 3.75, 45, 1.5, 3.75, 45, 1.25, 3.75) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_dxexj"] -points = PackedVector3Array(45, 1.5, 1, 45, 1.25, 1, 47, 1.25, 1, 47, 1.5, 1, 45, 1.5, 1.25, 45, 1.25, 1.25, 47, 1.25, 1.25, 47, 1.5, 1.25) +points = PackedVector3Array(47, 1.5, 1.25, 47, 1.25, 1.25, 45, 1.5, 1.25, 45, 1.25, 1.25, 47, 1.5, 1, 47, 1.25, 1, 45, 1.5, 1, 45, 1.25, 1) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_r8y5r"] -points = PackedVector3Array(42, 1, 8, 42, 0.5, 8, 44, 0.5, 8, 44, 1, 8, 42, 1, 8.5, 42, 0.5, 8.5, 44, 0.5, 8.5, 44, 1, 8.5) +points = PackedVector3Array(44, 1, 8.5, 44, 0.5, 8.5, 42, 1, 8.5, 42, 0.5, 8.5, 44, 1, 8, 44, 0.5, 8, 42, 1, 8, 42, 0.5, 8) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_7mddg"] -points = PackedVector3Array(39.5, 3, 8.5, 39.5, 1, 8.5, 40, 1, 8.5, 40, 3, 8.5, 39.5, 3, 15, 39.5, 1, 15, 40, 1, 15, 40, 3, 15) +points = PackedVector3Array(40, 3, 15, 40, 1, 15, 39.5, 3, 15, 39.5, 1, 15, 40, 3, 8.5, 40, 1, 8.5, 39.5, 3, 8.5, 39.5, 1, 8.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_uu158"] -points = PackedVector3Array(40, 3, 14.5, 40, 1, 14.5, 46, 1, 14.5, 46, 3, 14.5, 40, 3, 15, 40, 1, 15, 46, 1, 15, 46, 3, 15) +points = PackedVector3Array(46, 3, 15, 46, 1, 15, 40, 3, 15, 40, 1, 15, 46, 3, 14.5, 46, 1, 14.5, 40, 3, 14.5, 40, 1, 14.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_2po5m"] -points = PackedVector3Array(46, 3, 12.5, 46, 1, 12.5, 46.5, 1, 12.5, 46.5, 3, 12.5, 46, 3, 19, 46, 1, 19, 46.5, 1, 19, 46.5, 3, 19) +points = PackedVector3Array(46.5, 3, 19, 46.5, 1, 19, 46, 3, 19, 46, 1, 19, 46.5, 3, 12.5, 46.5, 1, 12.5, 46, 3, 12.5, 46, 1, 12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_21vn3"] -points = PackedVector3Array(46, 3, 8.5, 46, 1, 8.5, 46.5, 1, 8.5, 46.5, 3, 8.5, 46, 3, 10.5, 46, 1, 10.5, 46.5, 1, 10.5, 46.5, 3, 10.5) +points = PackedVector3Array(46.5, 3, 10.5, 46.5, 1, 10.5, 46, 3, 10.5, 46, 1, 10.5, 46.5, 3, 8.5, 46.5, 1, 8.5, 46, 3, 8.5, 46, 1, 8.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_yjyeo"] -points = PackedVector3Array(46.5, 1, 8.5, 46.5, 0.5, 8.5, 59.5, 0.5, 8.5, 59.5, 1, 8.5, 46.5, 1, 18.5, 46.5, 0.5, 18.5, 59.5, 0.5, 18.5, 59.5, 1, 18.5) +points = PackedVector3Array(59.5, 1, 18.5, 59.5, 0.5, 18.5, 46.5, 1, 18.5, 46.5, 0.5, 18.5, 59.5, 1, 8.5, 59.5, 0.5, 8.5, 46.5, 1, 8.5, 46.5, 0.5, 8.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_h8bff"] -points = PackedVector3Array(46, 1, 10.5, 46, 0.5, 10.5, 46.5, 0.5, 10.5, 46.5, 1, 10.5, 46, 1, 12.5, 46, 0.5, 12.5, 46.5, 0.5, 12.5, 46.5, 1, 12.5) +points = PackedVector3Array(46.5, 1, 12.5, 46.5, 0.5, 12.5, 46, 1, 12.5, 46, 0.5, 12.5, 46.5, 1, 10.5, 46.5, 0.5, 10.5, 46, 1, 10.5, 46, 0.5, 10.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_kekgp"] -points = PackedVector3Array(47.5, 3, 8, 47.5, 1, 8, 55.5, 1, 8, 55.5, 3, 8, 47.5, 3, 8.5, 47.5, 1, 8.5, 55.5, 1, 8.5, 55.5, 3, 8.5) +points = PackedVector3Array(55.5, 3, 8.5, 55.5, 1, 8.5, 47.5, 3, 8.5, 47.5, 1, 8.5, 55.5, 3, 8, 55.5, 1, 8, 47.5, 3, 8, 47.5, 1, 8) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_qaren"] -points = PackedVector3Array(57.5, 3, 8, 57.5, 1, 8, 59.5, 1, 8, 59.5, 3, 8, 57.5, 3, 8.5, 57.5, 1, 8.5, 59.5, 1, 8.5, 59.5, 3, 8.5) +points = PackedVector3Array(59.5, 3, 8.5, 59.5, 1, 8.5, 57.5, 3, 8.5, 57.5, 1, 8.5, 59.5, 3, 8, 59.5, 1, 8, 57.5, 3, 8, 57.5, 1, 8) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_hhhrw"] -points = PackedVector3Array(59.5, 2, 8, 59.5, 1, 8, 60, 1, 8, 60, 2, 8, 59.5, 2, 18.5, 59.5, 1, 18.5, 60, 1, 18.5, 60, 2, 18.5) +points = PackedVector3Array(60, 2, 18.5, 60, 1, 18.5, 59.5, 2, 18.5, 59.5, 1, 18.5, 60, 2, 8, 60, 1, 8, 59.5, 2, 8, 59.5, 1, 8) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_soe4k"] -points = PackedVector3Array(46.5, 2, 18.5, 46.5, 1, 18.5, 60, 1, 18.5, 60, 2, 18.5, 46.5, 2, 19, 46.5, 1, 19, 60, 1, 19, 60, 2, 19) +points = PackedVector3Array(60, 2, 19, 60, 1, 19, 46.5, 2, 19, 46.5, 1, 19, 60, 2, 18.5, 60, 1, 18.5, 46.5, 2, 18.5, 46.5, 1, 18.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_awijs"] -points = PackedVector3Array(51.25, 3, 8.5, 51.25, 1, 8.5, 51.5, 1, 8.5, 51.5, 3, 8.5, 51.25, 3, 13.5, 51.25, 1, 13.5, 51.5, 1, 13.5, 51.5, 3, 13.5) +points = PackedVector3Array(51.5, 3, 13.5, 51.5, 1, 13.5, 51.25, 3, 13.5, 51.25, 1, 13.5, 51.5, 3, 8.5, 51.5, 1, 8.5, 51.25, 3, 8.5, 51.25, 1, 8.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_b48np"] -points = PackedVector3Array(55.5, 1, 8, 55.5, 0.5, 8, 57.5, 0.5, 8, 57.5, 1, 8, 55.5, 1, 8.5, 55.5, 0.5, 8.5, 57.5, 0.5, 8.5, 57.5, 1, 8.5) +points = PackedVector3Array(57.5, 1, 8.5, 57.5, 0.5, 8.5, 55.5, 1, 8.5, 55.5, 0.5, 8.5, 57.5, 1, 8, 57.5, 0.5, 8, 55.5, 1, 8, 55.5, 0.5, 8) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_ij6fo"] -points = PackedVector3Array(47, 1, -12, 47, 0.5, -12, 54, 0.5, -12, 54, 1, -12, 47, 1, 2, 47, 0.5, 2, 54, 0.5, 2, 54, 1, 2) +points = PackedVector3Array(54, 1, 2, 54, 0.5, 2, 47, 1, 2, 47, 0.5, 2, 54, 1, -12, 54, 0.5, -12, 47, 1, -12, 47, 0.5, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_nypoj"] -points = PackedVector3Array(47.5, 3, 2.5, 47.5, 1, 2.5, 50.5, 1, 2.5, 50.5, 3, 2.5, 47.5, 3, 3, 47.5, 1, 3, 50.5, 1, 3, 50.5, 3, 3) +points = PackedVector3Array(50.5, 3, 3, 50.5, 1, 3, 47.5, 3, 3, 47.5, 1, 3, 50.5, 3, 2.5, 50.5, 1, 2.5, 47.5, 3, 2.5, 47.5, 1, 2.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_0a6gu"] -points = PackedVector3Array(51.25, 3, 15.5, 51.25, 1, 15.5, 51.5, 1, 15.5, 51.5, 3, 15.5, 51.25, 3, 18.5, 51.25, 1, 18.5, 51.5, 1, 18.5, 51.5, 3, 18.5) +points = PackedVector3Array(51.5, 3, 18.5, 51.5, 1, 18.5, 51.25, 3, 18.5, 51.25, 1, 18.5, 51.5, 3, 15.5, 51.5, 1, 15.5, 51.25, 3, 15.5, 51.25, 1, 15.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_cro5e"] -points = PackedVector3Array(49.75, 1.75, 8.5, 49.75, 1.5, 8.5, 50, 1.5, 8.5, 50, 1.75, 8.5, 49.75, 1.75, 10, 49.75, 1.5, 10, 50, 1.5, 10, 50, 1.75, 10) +points = PackedVector3Array(50, 1.75, 10, 50, 1.5, 10, 49.75, 1.75, 10, 49.75, 1.5, 10, 50, 1.75, 8.5, 50, 1.5, 8.5, 49.75, 1.75, 8.5, 49.75, 1.5, 8.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jjahg"] -points = PackedVector3Array(49.75, 1.5, 9.75, 49.75, 1, 9.75, 50, 1, 9.75, 50, 1.5, 9.75, 49.75, 1.5, 10, 49.75, 1, 10, 50, 1, 10, 50, 1.5, 10) +points = PackedVector3Array(50, 1.5, 10, 50, 1, 10, 49.75, 1.5, 10, 49.75, 1, 10, 50, 1.5, 9.75, 50, 1, 9.75, 49.75, 1.5, 9.75, 49.75, 1, 9.75) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_mku47"] -points = PackedVector3Array(46, 3.25, 8.5, 46, 3, 8.5, 46.5, 3, 8.5, 46.5, 3.25, 8.5, 46, 3.25, 19, 46, 3, 19, 46.5, 3, 19, 46.5, 3.25, 19) +points = PackedVector3Array(46.5, 3.25, 19, 46.5, 3, 19, 46, 3.25, 19, 46, 3, 19, 46.5, 3.25, 8.5, 46.5, 3, 8.5, 46, 3.25, 8.5, 46, 3, 8.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_k0agi"] -points = PackedVector3Array(40, 3.25, 14.5, 40, 3, 14.5, 46, 3, 14.5, 46, 3.25, 14.5, 40, 3.25, 15, 40, 3, 15, 46, 3, 15, 46, 3.25, 15) +points = PackedVector3Array(46, 3.25, 15, 46, 3, 15, 40, 3.25, 15, 40, 3, 15, 46, 3.25, 14.5, 46, 3, 14.5, 40, 3.25, 14.5, 40, 3, 14.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_cyr4b"] -points = PackedVector3Array(39.5, 3.25, 8.5, 39.5, 3, 8.5, 40, 3, 8.5, 40, 3.25, 8.5, 39.5, 3.25, 15, 39.5, 3, 15, 40, 3, 15, 40, 3.25, 15) +points = PackedVector3Array(40, 3.25, 15, 40, 3, 15, 39.5, 3.25, 15, 39.5, 3, 15, 40, 3.25, 8.5, 40, 3, 8.5, 39.5, 3.25, 8.5, 39.5, 3, 8.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_gpc81"] -points = PackedVector3Array(40, 3.25, 8, 40, 3, 8, 59.5, 3, 8, 59.5, 3.25, 8, 40, 3.25, 8.5, 40, 3, 8.5, 59.5, 3, 8.5, 59.5, 3.25, 8.5) +points = PackedVector3Array(59.5, 3.25, 8.5, 59.5, 3, 8.5, 40, 3.25, 8.5, 40, 3, 8.5, 59.5, 3.25, 8, 59.5, 3, 8, 40, 3.25, 8, 40, 3, 8) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_68p5s"] -points = PackedVector3Array(26, 3.25, 8, 26, 3, 8, 40, 3, 8, 40, 3.25, 8, 26, 3.25, 8.5, 26, 3, 8.5, 40, 3, 8.5, 40, 3.25, 8.5) +points = PackedVector3Array(40, 3.25, 8.5, 40, 3, 8.5, 26, 3.25, 8.5, 26, 3, 8.5, 40, 3.25, 8, 40, 3, 8, 26, 3.25, 8, 26, 3, 8) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_5udj4"] -points = PackedVector3Array(47, 1, 2, 47, 0.5, 2, 63, 0.5, 2, 63, 1, 2, 47, 1, 8, 47, 0.5, 8, 63, 0.5, 8, 63, 1, 8) +points = PackedVector3Array(63, 1, 8, 63, 0.5, 8, 47, 1, 8, 47, 0.5, 8, 63, 1, 2, 63, 0.5, 2, 47, 1, 2, 47, 0.5, 2) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_kwo6v"] -points = PackedVector3Array(63, 3, -9, 63, -0.5, -9, 63.5, -0.5, -9, 63.5, 3, -9, 63, 3, -6, 63, -0.5, -6, 63.5, -0.5, -6, 63.5, 3, -6) +points = PackedVector3Array(63.5, 3, -6, 63.5, -0.5, -6, 63, 3, -6, 63, -0.5, -6, 63.5, 3, -9, 63.5, -0.5, -9, 63, 3, -9, 63, -0.5, -9) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_dprc4"] -points = PackedVector3Array(63, 2, 2, 63, -0.5, 2, 63.5, -0.5, 2, 63.5, 2, 2, 63, 2, 8, 63, -0.5, 8, 63.5, -0.5, 8, 63.5, 2, 8) +points = PackedVector3Array(63.5, 2, 8, 63.5, -0.5, 8, 63, 2, 8, 63, -0.5, 8, 63.5, 2, 2, 63.5, -0.5, 2, 63, 2, 2, 63, -0.5, 2) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_q02gj"] -points = PackedVector3Array(59.5, 2, 7.5, 59.5, 1, 7.5, 63, 1, 7.5, 63, 2, 7.5, 59.5, 2, 8, 59.5, 1, 8, 63, 1, 8, 63, 2, 8) +points = PackedVector3Array(63, 2, 8, 63, 1, 8, 59.5, 2, 8, 59.5, 1, 8, 63, 2, 7.5, 63, 1, 7.5, 59.5, 2, 7.5, 59.5, 1, 7.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_uso07"] -points = PackedVector3Array(47, 3.25, -12, 47, 3, -12, 47.5, 3, -12, 47.5, 3.25, -12, 47, 3.25, 8, 47, 3, 8, 47.5, 3, 8, 47.5, 3.25, 8) +points = PackedVector3Array(47.5, 3.25, 8, 47.5, 3, 8, 47, 3.25, 8, 47, 3, 8, 47.5, 3.25, -12, 47.5, 3, -12, 47, 3.25, -12, 47, 3, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_wurmk"] -points = PackedVector3Array(54, 1, -12, 54, 0.5, -12, 63, 0.5, -12, 63, 1, -12, 54, 1, -8, 54, 0.5, -8, 63, 0.5, -8, 63, 1, -8) +points = PackedVector3Array(63, 1, -8, 63, 0.5, -8, 54, 1, -8, 54, 0.5, -8, 63, 1, -12, 63, 0.5, -12, 54, 1, -12, 54, 0.5, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_wfy5e"] -points = PackedVector3Array(47, 3, -12.5, 47, 1, -12.5, 63, 1, -12.5, 63, 3, -12.5, 47, 3, -12, 47, 1, -12, 63, 1, -12, 63, 3, -12) +points = PackedVector3Array(63, 3, -12, 63, 1, -12, 47, 3, -12, 47, 1, -12, 63, 3, -12.5, 63, 1, -12.5, 47, 3, -12.5, 47, 1, -12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_sm5hp"] -points = PackedVector3Array(63.5, 1, -17, 63.5, 0.5, -17, 70.5, 0.5, -17, 70.5, 1, -17, 63.5, 1, -6.5, 63.5, 0.5, -6.5, 70.5, 0.5, -6.5, 70.5, 1, -6.5) +points = PackedVector3Array(70.5, 1, -6.5, 70.5, 0.5, -6.5, 63.5, 1, -6.5, 63.5, 0.5, -6.5, 70.5, 1, -17, 70.5, 0.5, -17, 63.5, 1, -17, 63.5, 0.5, -17) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_2kpeh"] -points = PackedVector3Array(63, 2, -6, 63, -0.5, -6, 63.5, -0.5, -6, 63.5, 2, -6, 63, 2, 2, 63, -0.5, 2, 63.5, -0.5, 2, 63.5, 2, 2) +points = PackedVector3Array(63.5, 2, 2, 63.5, -0.5, 2, 63, 2, 2, 63, -0.5, 2, 63.5, 2, -6, 63.5, -0.5, -6, 63, 2, -6, 63, -0.5, -6) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_34qns"] -points = PackedVector3Array(63, 3, -17.5, 63, -0.5, -17.5, 63.5, -0.5, -17.5, 63.5, 3, -17.5, 63, 3, -11, 63, -0.5, -11, 63.5, -0.5, -11, 63.5, 3, -11) +points = PackedVector3Array(63.5, 3, -11, 63.5, -0.5, -11, 63, 3, -11, 63, -0.5, -11, 63.5, 3, -17.5, 63.5, -0.5, -17.5, 63, 3, -17.5, 63, -0.5, -17.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_2fusu"] -points = PackedVector3Array(63, 1, -11, 63, 0.5, -11, 63.5, 0.5, -11, 63.5, 1, -11, 63, 1, -9, 63, 0.5, -9, 63.5, 0.5, -9, 63.5, 1, -9) +points = PackedVector3Array(63.5, 1, -9, 63.5, 0.5, -9, 63, 1, -9, 63, 0.5, -9, 63.5, 1, -11, 63.5, 0.5, -11, 63, 1, -11, 63, 0.5, -11) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_h1kss"] -points = PackedVector3Array(29.5, 1.5, -12, 29.5, 1.25, -12, 29.75, 1.25, -12, 29.75, 1.5, -12, 29.5, 1.5, -10.75, 29.5, 1.25, -10.75, 29.75, 1.25, -10.75, 29.75, 1.5, -10.75) +points = PackedVector3Array(29.75, 1.5, -10.75, 29.75, 1.25, -10.75, 29.5, 1.5, -10.75, 29.5, 1.25, -10.75, 29.75, 1.5, -12, 29.75, 1.25, -12, 29.5, 1.5, -12, 29.5, 1.25, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_egc4b"] -points = PackedVector3Array(31.5, 1.5, -12, 31.5, 1.25, -12, 31.75, 1.25, -12, 31.75, 1.5, -12, 31.5, 1.5, -10.75, 31.5, 1.25, -10.75, 31.75, 1.25, -10.75, 31.75, 1.5, -10.75) +points = PackedVector3Array(31.75, 1.5, -10.75, 31.75, 1.25, -10.75, 31.5, 1.5, -10.75, 31.5, 1.25, -10.75, 31.75, 1.5, -12, 31.75, 1.25, -12, 31.5, 1.5, -12, 31.5, 1.25, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_twvas"] -points = PackedVector3Array(29.5, 1.25, -11, 29.5, 1, -11, 29.75, 1, -11, 29.75, 1.25, -11, 29.5, 1.25, -10.75, 29.5, 1, -10.75, 29.75, 1, -10.75, 29.75, 1.25, -10.75) +points = PackedVector3Array(29.75, 1.25, -10.75, 29.75, 1, -10.75, 29.5, 1.25, -10.75, 29.5, 1, -10.75, 29.75, 1.25, -11, 29.75, 1, -11, 29.5, 1.25, -11, 29.5, 1, -11) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_8dx2c"] -points = PackedVector3Array(31.5, 1.25, -11, 31.5, 1, -11, 31.75, 1, -11, 31.75, 1.25, -11, 31.5, 1.25, -10.75, 31.5, 1, -10.75, 31.75, 1, -10.75, 31.75, 1.25, -10.75) +points = PackedVector3Array(31.75, 1.25, -10.75, 31.75, 1, -10.75, 31.5, 1.25, -10.75, 31.5, 1, -10.75, 31.75, 1.25, -11, 31.75, 1, -11, 31.5, 1.25, -11, 31.5, 1, -11) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_wnmjb"] -points = PackedVector3Array(63.5, 3, -17.5, 63.5, 1, -17.5, 70.5, 1, -17.5, 70.5, 3, -17.5, 63.5, 3, -17, 63.5, 1, -17, 70.5, 1, -17, 70.5, 3, -17) +points = PackedVector3Array(70.5, 3, -17, 70.5, 1, -17, 63.5, 3, -17, 63.5, 1, -17, 70.5, 3, -17.5, 70.5, 1, -17.5, 63.5, 3, -17.5, 63.5, 1, -17.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_yarwk"] -points = PackedVector3Array(70.5, 2, -19, 70.5, -0.5, -19, 71, -0.5, -19, 71, 2, -19, 70.5, 2, -6, 70.5, -0.5, -6, 71, -0.5, -6, 71, 2, -6) +points = PackedVector3Array(71, 2, -6, 71, -0.5, -6, 70.5, 2, -6, 70.5, -0.5, -6, 71, 2, -19, 71, -0.5, -19, 70.5, 2, -19, 70.5, -0.5, -19) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_cabvx"] -points = PackedVector3Array(63.5, 2, -6.5, 63.5, 1, -6.5, 70.5, 1, -6.5, 70.5, 2, -6.5, 63.5, 2, -6, 63.5, 1, -6, 70.5, 1, -6, 70.5, 2, -6) +points = PackedVector3Array(70.5, 2, -6, 70.5, 1, -6, 63.5, 2, -6, 63.5, 1, -6, 70.5, 2, -6.5, 70.5, 1, -6.5, 63.5, 2, -6.5, 63.5, 1, -6.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_hc1qc"] -points = PackedVector3Array(63, 3.25, -17.5, 63, 3, -17.5, 63.5, 3, -17.5, 63.5, 3.25, -17.5, 63, 3.25, -6, 63, 3, -6, 63.5, 3, -6, 63.5, 3.25, -6) +points = PackedVector3Array(63.5, 3.25, -6, 63.5, 3, -6, 63, 3.25, -6, 63, 3, -6, 63.5, 3.25, -17.5, 63.5, 3, -17.5, 63, 3.25, -17.5, 63, 3, -17.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_sx0wo"] -points = PackedVector3Array(65.5, 1.5, -17, 65.5, 1, -17, 66, 1, -17, 66, 1.5, -17, 65.5, 1.5, -14.5, 65.5, 1, -14.5, 66, 1, -14.5, 66, 1.5, -14.5) +points = PackedVector3Array(66, 1.5, -14.5, 66, 1, -14.5, 65.5, 1.5, -14.5, 65.5, 1, -14.5, 66, 1.5, -17, 66, 1, -17, 65.5, 1.5, -17, 65.5, 1, -17) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_4n0ye"] -points = PackedVector3Array(68, 1.5, -17, 68, 1, -17, 68.5, 1, -17, 68.5, 1.5, -17, 68, 1.5, -14.5, 68, 1, -14.5, 68.5, 1, -14.5, 68.5, 1.5, -14.5) +points = PackedVector3Array(68.5, 1.5, -14.5, 68.5, 1, -14.5, 68, 1.5, -14.5, 68, 1, -14.5, 68.5, 1.5, -17, 68.5, 1, -17, 68, 1.5, -17, 68, 1, -17) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_3a75l"] -points = PackedVector3Array(65.5, 3, -15, 65.5, 1.5, -15, 66, 1.5, -15, 66, 3, -15, 65.5, 3, -14.5, 65.5, 1.5, -14.5, 66, 1.5, -14.5, 66, 3, -14.5) +points = PackedVector3Array(66, 3, -14.5, 66, 1.5, -14.5, 65.5, 3, -14.5, 65.5, 1.5, -14.5, 66, 3, -15, 66, 1.5, -15, 65.5, 3, -15, 65.5, 1.5, -15) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_sxu1r"] -points = PackedVector3Array(68, 3, -15, 68, 1.5, -15, 68.5, 1.5, -15, 68.5, 3, -15, 68, 3, -14.5, 68, 1.5, -14.5, 68.5, 1.5, -14.5, 68.5, 3, -14.5) +points = PackedVector3Array(68.5, 3, -14.5, 68.5, 1.5, -14.5, 68, 3, -14.5, 68, 1.5, -14.5, 68.5, 3, -15, 68.5, 1.5, -15, 68, 3, -15, 68, 1.5, -15) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_3jabe"] -points = PackedVector3Array(47, 3.25, -12.5, 47, 3, -12.5, 63, 3, -12.5, 63, 3.25, -12.5, 47, 3.25, -12, 47, 3, -12, 63, 3, -12, 63, 3.25, -12) +points = PackedVector3Array(63, 3.25, -12, 63, 3, -12, 47, 3.25, -12, 47, 3, -12, 63, 3.25, -12.5, 63, 3, -12.5, 47, 3.25, -12.5, 47, 3, -12.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_hgdnc"] -points = PackedVector3Array(63.5, 3.25, -17.5, 63.5, 3, -17.5, 70.5, 3, -17.5, 70.5, 3.25, -17.5, 63.5, 3.25, -17, 63.5, 3, -17, 70.5, 3, -17, 70.5, 3.25, -17) +points = PackedVector3Array(70.5, 3.25, -17, 70.5, 3, -17, 63.5, 3.25, -17, 63.5, 3, -17, 70.5, 3.25, -17.5, 70.5, 3, -17.5, 63.5, 3.25, -17.5, 63.5, 3, -17.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_o5tqs"] -points = PackedVector3Array(10, 2, 2, 10, 0.5, 2, 10.5, 0.5, 2, 10.5, 2, 2, 10, 2, 13, 10, 0.5, 13, 10.5, 0.5, 13, 10.5, 2, 13) +points = PackedVector3Array(10.5, 2, 13, 10.5, 0.5, 13, 10, 2, 13, 10, 0.5, 13, 10.5, 2, 2, 10.5, 0.5, 2, 10, 2, 2, 10, 0.5, 2) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_0wdvv"] -points = PackedVector3Array(31, 5, -22, 31, 3, -22, 38, 3, -22, 38, 5, -22, 31, 5, -21.5, 31, 3, -21.5, 38, 3, -21.5, 38, 5, -21.5) +points = PackedVector3Array(38, 5, -21.5, 38, 3, -21.5, 31, 5, -21.5, 31, 3, -21.5, 38, 5, -22, 38, 3, -22, 31, 5, -22, 31, 3, -22) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_plq54"] -points = PackedVector3Array(38, 5, -22, 38, 3, -22, 38.5, 3, -22, 38.5, 5, -22, 38, 5, -12.5, 38, 3, -12.5, 38.5, 3, -12.5, 38.5, 5, -12.5) +points = PackedVector3Array(38.5, 5, -12.5, 38.5, 3, -12.5, 38, 5, -12.5, 38, 3, -12.5, 38.5, 5, -22, 38.5, 3, -22, 38, 5, -22, 38, 3, -22) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_bmjxn"] -points = PackedVector3Array(35.25, 1, -12, 35.25, 0.5, -12, 40, 0.5, -12, 40, 1, -12, 35.25, 1, -4.5, 35.25, 0.5, -4.5, 40, 0.5, -4.5, 40, 1, -4.5) +points = PackedVector3Array(40, 1, -4.5, 40, 0.5, -4.5, 35.25, 1, -4.5, 35.25, 0.5, -4.5, 40, 1, -12, 40, 0.5, -12, 35.25, 1, -12, 35.25, 0.5, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_m35sl"] -points = PackedVector3Array(32.75, 1, -9.75, 32.75, 0.5, -9.75, 35.25, 0.5, -9.75, 35.25, 1, -9.75, 32.75, 1, -4.5, 32.75, 0.5, -4.5, 35.25, 0.5, -4.5, 35.25, 1, -4.5) +points = PackedVector3Array(35.25, 1, -4.5, 35.25, 0.5, -4.5, 32.75, 1, -4.5, 32.75, 0.5, -4.5, 35.25, 1, -9.75, 35.25, 0.5, -9.75, 32.75, 1, -9.75, 32.75, 0.5, -9.75) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_5lonr"] -points = PackedVector3Array(26, 1, -4.5, 26, 0.5, -4.5, 33, 0.5, -4.5, 33, 1, -4.5, 26, 1, 8, 26, 0.5, 8, 33, 0.5, 8, 33, 1, 8) +points = PackedVector3Array(33, 1, 8, 33, 0.5, 8, 26, 1, 8, 26, 0.5, 8, 33, 1, -4.5, 33, 0.5, -4.5, 26, 1, -4.5, 26, 0.5, -4.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_3dn6b"] -points = PackedVector3Array(26, 1, -12.25, 26, 0.75, -12.25, 32.75, 0.75, -12.25, 32.75, 1, -12.25, 26, 1, -4.5, 26, 0.75, -4.5, 32.75, 0.75, -4.5, 32.75, 1, -4.5) +points = PackedVector3Array(32.75, 1, -4.5, 32.75, 0.75, -4.5, 26, 1, -4.5, 26, 0.75, -4.5, 32.75, 1, -12.25, 32.75, 0.75, -12.25, 26, 1, -12.25, 26, 0.75, -12.25) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_bm5pt"] -points = PackedVector3Array(33, 0.875, -12, 33, 0.5, -12, 35, 0.5, -12, 35, 0.875, -12, 33, 0.875, -10, 33, 0.5, -10, 35, 0.5, -10, 35, 0.875, -10) +points = PackedVector3Array(35, 0.875, -10, 35, 0.5, -10, 33, 0.875, -10, 33, 0.5, -10, 35, 0.875, -12, 35, 0.5, -12, 33, 0.875, -12, 33, 0.5, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_r75it"] -points = PackedVector3Array(33, 0.999999, -12, 33, 0.87500006, -12, 33.249996, 0.87500006, -11.750002, 33, 1.0000004, -10, 33, 0.875, -10, 33.25, 0.87499994, -10.125001) +points = PackedVector3Array(33.25, 0.87499994, -10.125, 33, 1.0000004, -10, 33, 0.875, -10, 33.249996, 0.87500006, -11.750003, 33, 0.999999, -12, 33, 0.87500006, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_3n1mc"] -points = PackedVector3Array(35, 0.87500006, -12, 35, 1.0000005, -12, 33, 1.0000005, -12, 33, 0.87500006, -12, 33.250004, 0.87500006, -11.749999, 34.75, 0.87500006, -11.749999) +points = PackedVector3Array(34.75, 0.87500006, -11.749999, 35, 1.0000005, -12, 35, 0.87500006, -12, 33.250004, 0.87500006, -11.749999, 33, 1.0000005, -12, 33, 0.87500006, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_ncvy1"] -points = PackedVector3Array(32.75, 1, -12.25, 32.75, 0.5, -12.25, 35.25, 0.5, -12.25, 35.25, 1, -12.25, 32.75, 1, -12, 32.75, 0.5, -12, 35.25, 0.5, -12, 35.25, 1, -12) +points = PackedVector3Array(35.25, 1, -12, 35.25, 0.5, -12, 32.75, 1, -12, 32.75, 0.5, -12, 35.25, 1, -12.25, 35.25, 0.5, -12.25, 32.75, 1, -12.25, 32.75, 0.5, -12.25) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_360rp"] -points = PackedVector3Array(35, 1, -12, 35, 0.5, -12, 35.25, 0.5, -12, 35.25, 1, -12, 35, 1, -10, 35, 0.5, -10, 35.25, 0.5, -10, 35.25, 1, -10) +points = PackedVector3Array(35.25, 1, -10, 35.25, 0.5, -10, 35, 1, -10, 35, 0.5, -10, 35.25, 1, -12, 35.25, 0.5, -12, 35, 1, -12, 35, 0.5, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_xhtb1"] -points = PackedVector3Array(35, 1.000002, -12.000001, 34.75, 0.87500006, -11.749997, 35, 0.87500006, -12, 35, 1.000002, -9.999999, 34.75, 0.87500006, -10.250001, 35, 0.87500006, -10) +points = PackedVector3Array(35, 0.87500006, -10, 35, 1.000002, -9.999999, 34.75, 0.87500006, -10.250004, 35, 0.87500006, -12, 35, 1.000002, -12.000001, 34.75, 0.87500006, -11.749999) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_2vx26"] -points = PackedVector3Array(32.999996, 0.99999934, -10, 33, 0.87500006, -10, 33.249996, 0.87500006, -10.249999, 35, 0.99999934, -10, 34.75, 0.87500006, -10.249999, 35, 0.87500006, -10) +points = PackedVector3Array(35, 0.87500006, -10, 33, 0.87500006, -10, 35, 0.99999934, -10, 32.999996, 0.99999934, -10, 34.750004, 0.87500006, -10.249999, 33.249996, 0.87500006, -10.249999) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_wjmee"] -points = PackedVector3Array(32.75, 1, -10, 32.75, 0.5, -10, 35.25, 0.5, -10, 35.25, 1, -10, 32.75, 1, -9.75, 32.75, 0.5, -9.75, 35.25, 0.5, -9.75, 35.25, 1, -9.75) +points = PackedVector3Array(35.25, 1, -9.75, 35.25, 0.5, -9.75, 32.75, 1, -9.75, 32.75, 0.5, -9.75, 35.25, 1, -10, 35.25, 0.5, -10, 32.75, 1, -10, 32.75, 0.5, -10) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_v5sp2"] -points = PackedVector3Array(32.75, 1, -12, 32.75, 0.5, -12, 33, 0.5, -12, 33, 1, -12, 32.75, 1, -10, 32.75, 0.5, -10, 33, 0.5, -10, 33, 1, -10) +points = PackedVector3Array(33, 1, -10, 33, 0.5, -10, 32.75, 1, -10, 32.75, 0.5, -10, 33, 1, -12, 33, 0.5, -12, 32.75, 1, -12, 32.75, 0.5, -12) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_f8yqq"] -points = PackedVector3Array(34.25, 0.875, -16.75, 34.25, 0.5, -16.75, 36.25, 0.5, -16.75, 36.25, 0.875, -16.75, 34.25, 0.875, -14.75, 34.25, 0.5, -14.75, 36.25, 0.5, -14.75, 36.25, 0.875, -14.75) +points = PackedVector3Array(36.25, 0.875, -14.75, 36.25, 0.5, -14.75, 34.25, 0.875, -14.75, 34.25, 0.5, -14.75, 36.25, 0.875, -16.75, 36.25, 0.5, -16.75, 34.25, 0.875, -16.75, 34.25, 0.5, -16.75) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_q7n60"] -points = PackedVector3Array(34.25, 0.999999, -16.750002, 34.25, 0.87500006, -16.750002, 34.499996, 0.87500006, -16.500004, 34.25, 1.0000015, -14.75, 34.25, 0.875, -14.75, 34.500004, 0.87499994, -14.875) +points = PackedVector3Array(34.500004, 0.87499994, -14.875002, 34.25, 1.0000015, -14.75, 34.25, 0.875, -14.75, 34.499996, 0.87500006, -16.500006, 34.25, 0.999999, -16.750002, 34.25, 0.87500006, -16.750002) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_e180r"] -points = PackedVector3Array(34.250004, 0.87500006, -16.75, 36.25, 0.87500006, -16.75, 36.25, 1.0000005, -16.75, 34.250004, 1.0000005, -16.75, 34.500004, 0.87500006, -16.499998, 36, 0.87500006, -16.499998) +points = PackedVector3Array(36, 0.87500006, -16.499998, 36.25, 1.0000005, -16.75, 36.25, 0.87500006, -16.75, 34.500004, 0.87500006, -16.499998, 34.250004, 1.0000005, -16.75, 34.250004, 0.87500006, -16.75) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_58tnu"] -points = PackedVector3Array(34, 1, -17, 34, 0.5, -17, 36.5, 0.5, -17, 36.5, 1, -17, 34, 1, -16.75, 34, 0.5, -16.75, 36.5, 0.5, -16.75, 36.5, 1, -16.75) +points = PackedVector3Array(36.5, 1, -16.75, 36.5, 0.5, -16.75, 34, 1, -16.75, 34, 0.5, -16.75, 36.5, 1, -17, 36.5, 0.5, -17, 34, 1, -17, 34, 0.5, -17) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_aly21"] -points = PackedVector3Array(36.25, 1, -16.75, 36.25, 0.5, -16.75, 36.5, 0.5, -16.75, 36.5, 1, -16.75, 36.25, 1, -14.75, 36.25, 0.5, -14.75, 36.5, 0.5, -14.75, 36.5, 1, -14.75) +points = PackedVector3Array(36.5, 1, -14.75, 36.5, 0.5, -14.75, 36.25, 1, -14.75, 36.25, 0.5, -14.75, 36.5, 1, -16.75, 36.5, 0.5, -16.75, 36.25, 1, -16.75, 36.25, 0.5, -16.75) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_uf2ve"] -points = PackedVector3Array(36.25, 1.000002, -16.750002, 36, 0.87500006, -16.499998, 36.25, 0.87500006, -16.75, 36.25, 1.000002, -14.750002, 36, 0.87500006, -15.000004, 36.25, 0.87500006, -14.750003) +points = PackedVector3Array(36.25, 0.87500006, -14.750003, 36.25, 1.000002, -14.750002, 36, 0.87500006, -15.000007, 36.25, 0.87500006, -16.75, 36.25, 1.000002, -16.750002, 36, 0.87500006, -16.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_o4l63"] -points = PackedVector3Array(34.25, 0.9999997, -14.75, 34.25, 0.87500006, -14.75, 34.499996, 0.87500006, -15, 36.25, 0.9999997, -14.75, 36, 0.87500006, -15, 36.250004, 0.87500006, -14.75) +points = PackedVector3Array(36.250004, 0.87500006, -14.75, 34.25, 0.87500006, -14.75, 36.25, 0.9999997, -14.75, 34.25, 0.9999997, -14.75, 36.000004, 0.87500006, -15, 34.499996, 0.87500006, -15) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_d6i12"] -points = PackedVector3Array(34, 1, -14.75, 34, 0.5, -14.75, 36.5, 0.5, -14.75, 36.5, 1, -14.75, 34, 1, -14.5, 34, 0.5, -14.5, 36.5, 0.5, -14.5, 36.5, 1, -14.5) +points = PackedVector3Array(36.5, 1, -14.5, 36.5, 0.5, -14.5, 34, 1, -14.5, 34, 0.5, -14.5, 36.5, 1, -14.75, 36.5, 0.5, -14.75, 34, 1, -14.75, 34, 0.5, -14.75) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_rxf6i"] -points = PackedVector3Array(34, 1, -16.75, 34, 0.5, -16.75, 34.25, 0.5, -16.75, 34.25, 1, -16.75, 34, 1, -14.75, 34, 0.5, -14.75, 34.25, 0.5, -14.75, 34.25, 1, -14.75) +points = PackedVector3Array(34.25, 1, -14.75, 34.25, 0.5, -14.75, 34, 1, -14.75, 34, 0.5, -14.75, 34.25, 1, -16.75, 34.25, 0.5, -16.75, 34, 1, -16.75, 34, 0.5, -16.75) [sub_resource type="ArrayMesh" id="ArrayMesh_20k6a"] _surfaces = [{ -"aabb": AABB(-1, -1, -0.25, 2, 2, 0.5), -"attribute_data": PackedByteArray("AABYwAAAQL8AAFjAAACAvgAAeMAAAIC+AAB4wAAAQL8AAIC/AABAvwAAYL8AAEC/AABgvwAAgL4AAIC/AACAvgAAgD8AAHjAAACAPwAAWMAAAGA/AABYwAAAYD8AAHjAAACAvwAAQL8AAIC/AACAvgAAYL8AAIC+AABgvwAAQL8="), +"aabb": AABB(-1, -1, -0.25012207, 2, 2, 0.50024414), +"attribute_data": PackedByteArray("AAB4wAAAQL8AAFjAAABAvwAAWMAAAIC+AAB4wAAAgL4AAGC/AACAvgACgL8AAIC+AAKAvwAAQL8AAGC/AABAvwAAYD8AAFjAAABgPwAAeMAAAoA/AAB4wAACgD8AAFjAAABgvwAAQL8AAoC/AABAvwACgL8AAIC+AABgvwAAgL4="), "format": 34359742487, "index_count": 24, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8A"), @@ -734,22 +734,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 16, -"vertex_data": PackedByteArray("AACAvwAAgD8AAIC+AACAvwAAgL8AAIC+AACAPwAAgL8AAIC+AACAPwAAgD8AAIC+AACAvwAAgD8AAIC+AACAvwAAgD8AAIA+AACAvwAAgL8AAIA+AACAvwAAgL8AAIC+AACAPwAAgL8AAIC+AACAvwAAgL8AAIC+AACAvwAAgL8AAIA+AACAPwAAgL8AAIA+AACAPwAAgD8AAIC+AACAPwAAgL8AAIC+AACAPwAAgL8AAIA+AACAPwAAgD8AAIA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/9//z////9//3//P////3//f/8/////f/9//z8=") +"vertex_data": PackedByteArray("AACAPwAAgD8A4H++AACAvwAAgD8A4H++AACAvwAAgL8A4H++AACAPwAAgL8A4H++AACAvwAAgL8AEIA+AACAvwAAgL8AEIC+AACAvwAAgD8AEIC+AACAvwAAgD8AEIA+AACAvwAAgL8AEIA+AACAPwAAgL8AEIA+AACAPwAAgL8AEIC+AACAvwAAgL8AEIC+AACAPwAAgD8AEIA+AACAPwAAgD8AEIC+AACAPwAAgL8AEIC+AACAPwAAgL8AEIA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD/////////f/9//z////9//3//P////3//f/8/////f/9//z8=") }, { -"aabb": AABB(-1, -1, 0.25, 2, 2, 1e-05), -"attribute_data": PackedByteArray("AABYQQAAwL8AAHhBAADAvwAAeEEAAAC/AABYQQAAAL8="), -"format": 34359742487, -"index_count": 6, -"index_data": PackedByteArray("AAABAAIAAAACAAMA"), -"material": ExtResource("15_csnpm"), -"name": "Walls/Wall0", -"primitive": 3, -"uv_scale": Vector4(0, 0, 0, 0), -"vertex_count": 4, -"vertex_data": PackedByteArray("AACAvwAAgD8AAIA+AACAPwAAgD8AAIA+AACAPwAAgL8AAIA+AACAvwAAgL8AAIA+/3//f////7//f/9/////v/9//3////+//3//f////78=") -}, { -"aabb": AABB(-1, 1, -0.25, 2, 1e-05, 0.5), -"attribute_data": PackedByteArray("AACAwgAAeMMAAGDCAAB4wwAAYMIAAFjDAACAwgAAWMM="), +"aabb": AABB(-1, 1, -0.25012207, 2, 1e-05, 0.50024414), +"attribute_data": PackedByteArray("AABgwgAAWMMAAoDCAABYwwACgMIAAHjDAABgwgAAeMM="), "format": 34359742487, "index_count": 6, "index_data": PackedByteArray("AAABAAIAAAACAAMA"), @@ -758,16 +746,28 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 4, -"vertex_data": PackedByteArray("AACAPwAAgD8AAIC+AACAPwAAgD8AAIA+AACAvwAAgD8AAIA+AACAvwAAgD8AAIC+/3////9//7//f////3//v/9/////f/+//3////9//78=") +"vertex_data": PackedByteArray("AACAvwAAgD8AEIA+AACAvwAAgD8AEIC+AACAPwAAgD8AEIC+AACAPwAAgD8AEIA+/3////9//7//f////3//v/9/////f/+//3////9//78=") +}, { +"aabb": AABB(-1, -1, 0.25012207, 2, 2, 1e-05), +"attribute_data": PackedByteArray("AAB4QQAAAL8AAFhBAAAAvwAAWEEAAMC/AAB4QQAAwL8="), +"format": 34359742487, +"index_count": 6, +"index_data": PackedByteArray("AAABAAIAAAACAAMA"), +"material": ExtResource("15_csnpm"), +"name": "Walls/Wall0", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 4, +"vertex_data": PackedByteArray("AACAPwAAgL8AEIA+AACAvwAAgL8AEIA+AACAvwAAgD8AEIA+AACAPwAAgD8AEIA+/3//f////7//f/9/////v/9//3////+//3//f////78=") }] [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_4q4ky"] -data = PackedVector3Array(-1, 1, -0.25, -1, -1, -0.25, 1, -1, -0.25, -1, 1, -0.25, 1, -1, -0.25, 1, 1, -0.25, -1, 1, -0.25, -1, 1, 0.25, -1, -1, 0.25, -1, 1, -0.25, -1, -1, 0.25, -1, -1, -0.25, 1, -1, -0.25, -1, -1, -0.25, -1, -1, 0.25, 1, -1, -0.25, -1, -1, 0.25, 1, -1, 0.25, 1, 1, -0.25, 1, 1, 0.25, -1, 1, 0.25, 1, 1, -0.25, -1, 1, 0.25, -1, 1, -0.25, 1, 1, -0.25, 1, -1, -0.25, 1, -1, 0.25, 1, 1, -0.25, 1, -1, 0.25, 1, 1, 0.25, -1, 1, 0.25, 1, 1, 0.25, 1, -1, 0.25, -1, 1, 0.25, 1, -1, 0.25, -1, -1, 0.25) +data = PackedVector3Array(1, 1, -0.24987793, -1, 1, -0.24987793, -1, -1, -0.24987793, 1, 1, -0.24987793, -1, -1, -0.24987793, 1, -1, -0.24987793, -1, -1, 0.25012207, -1, -1, -0.25012207, -1, 1, -0.25012207, -1, -1, 0.25012207, -1, 1, -0.25012207, -1, 1, 0.25012207, -1, -1, 0.25012207, 1, -1, 0.25012207, 1, -1, -0.25012207, -1, -1, 0.25012207, 1, -1, -0.25012207, -1, -1, -0.25012207, 1, 1, 0.25012207, 1, 1, -0.25012207, 1, -1, -0.25012207, 1, 1, 0.25012207, 1, -1, -0.25012207, 1, -1, 0.25012207, -1, 1, 0.25012207, -1, 1, -0.25012207, 1, 1, -0.25012207, -1, 1, 0.25012207, 1, 1, -0.25012207, 1, 1, 0.25012207, 1, -1, 0.25012207, -1, -1, 0.25012207, -1, 1, 0.25012207, 1, -1, 0.25012207, -1, 1, 0.25012207, 1, 1, 0.25012207) [sub_resource type="ArrayMesh" id="ArrayMesh_6rqua"] _surfaces = [{ -"aabb": AABB(-1, -1, -0.25, 2, 2, 0.5), -"attribute_data": PackedByteArray("AACcwAAAQL8AAJzAAACAvgAArMAAAIC+AACswAAAQL8AAIC/AABAvwAAYL8AAEC/AABgvwAAgL4AAIC/AACAvgAAgD8AAKzAAACAPwAAnMAAAGA/AACcwAAAYD8AAKzAAACAvwAArMAAAGC/AACswAAAYL8AAJzAAACAvwAAnMAAAIC/AABAvwAAgL8AAIC+AABgvwAAgL4AAGC/AABAvw=="), +"aabb": AABB(-1, -1, -0.25012207, 2, 2, 0.50024414), +"attribute_data": PackedByteArray("AACswAAAQL8AAJzAAABAvwAAnMAAAIC+AACswAAAgL4AAGC/AACAvgACgL8AAIC+AAKAvwAAQL8AAGC/AABAvwAAYD8AAJzAAABgPwAArMAAAoA/AACswAACgD8AAJzAAABgvwAAnMAAAoC/AACcwAACgL8AAKzAAABgvwAArMAAAGC/AABAvwACgL8AAEC/AAKAvwAAgL4AAGC/AACAvg=="), "format": 34359742487, "index_count": 30, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMA"), @@ -776,10 +776,10 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 20, -"vertex_data": PackedByteArray("AACAvwAAgD8AAIC+AACAvwAAgL8AAIC+AACAPwAAgL8AAIC+AACAPwAAgD8AAIC+AACAvwAAgD8AAIC+AACAvwAAgD8AAIA+AACAvwAAgL8AAIA+AACAvwAAgL8AAIC+AACAPwAAgL8AAIC+AACAvwAAgL8AAIC+AACAvwAAgL8AAIA+AACAPwAAgL8AAIA+AACAPwAAgD8AAIC+AACAPwAAgD8AAIA+AACAvwAAgD8AAIA+AACAvwAAgD8AAIC+AACAPwAAgD8AAIC+AACAPwAAgL8AAIC+AACAPwAAgL8AAIA+AACAPwAAgD8AAIA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//Pw==") +"vertex_data": PackedByteArray("AACAPwAAgD8A4H++AACAvwAAgD8A4H++AACAvwAAgL8A4H++AACAPwAAgL8A4H++AACAvwAAgL8AEIA+AACAvwAAgL8AEIC+AACAvwAAgD8AEIC+AACAvwAAgD8AEIA+AACAvwAAgL8AEIA+AACAPwAAgL8AEIA+AACAPwAAgL8AEIC+AACAvwAAgL8AEIC+AACAvwAAgD8AEIA+AACAvwAAgD8AEIC+AACAPwAAgD8AEIC+AACAPwAAgD8AEIA+AACAPwAAgD8AEIA+AACAPwAAgD8AEIC+AACAPwAAgL8AEIC+AACAPwAAgL8AEIA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//3//P////3//f/8/////f/9//z////9//3//Pw==") }, { -"aabb": AABB(-1, -1, 0.25, 2, 2, 1e-05), -"attribute_data": PackedByteArray("AACcQQAAwL8AAKxBAADAvwAArEEAAAC/AACcQQAAAL8="), +"aabb": AABB(-1, -1, 0.25012207, 2, 2, 1e-05), +"attribute_data": PackedByteArray("AACsQQAAAL8AAJxBAAAAvwAAnEEAAMC/AACsQQAAwL8="), "format": 34359742487, "index_count": 6, "index_data": PackedByteArray("AAABAAIAAAACAAMA"), @@ -788,25 +788,25 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 4, -"vertex_data": PackedByteArray("AACAvwAAgD8AAIA+AACAPwAAgD8AAIA+AACAPwAAgL8AAIA+AACAvwAAgL8AAIA+/3//f////7//f/9/////v/9//3////+//3//f////78=") +"vertex_data": PackedByteArray("AACAPwAAgL8AEIA+AACAvwAAgL8AEIA+AACAvwAAgD8AEIA+AACAPwAAgD8AEIA+/3//f////7//f/9/////v/9//3////+//3//f////78=") }] [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_l7wvl"] -data = PackedVector3Array(-1, 1, -0.25, -1, -1, -0.25, 1, -1, -0.25, -1, 1, -0.25, 1, -1, -0.25, 1, 1, -0.25, -1, 1, -0.25, -1, 1, 0.25, -1, -1, 0.25, -1, 1, -0.25, -1, -1, 0.25, -1, -1, -0.25, 1, -1, -0.25, -1, -1, -0.25, -1, -1, 0.25, 1, -1, -0.25, -1, -1, 0.25, 1, -1, 0.25, 1, 1, -0.25, 1, 1, 0.25, -1, 1, 0.25, 1, 1, -0.25, -1, 1, 0.25, -1, 1, -0.25, 1, 1, -0.25, 1, -1, -0.25, 1, -1, 0.25, 1, 1, -0.25, 1, -1, 0.25, 1, 1, 0.25, -1, 1, 0.25, 1, 1, 0.25, 1, -1, 0.25, -1, 1, 0.25, 1, -1, 0.25, -1, -1, 0.25) +data = PackedVector3Array(1, 1, -0.24987793, -1, 1, -0.24987793, -1, -1, -0.24987793, 1, 1, -0.24987793, -1, -1, -0.24987793, 1, -1, -0.24987793, -1, -1, 0.25012207, -1, -1, -0.25012207, -1, 1, -0.25012207, -1, -1, 0.25012207, -1, 1, -0.25012207, -1, 1, 0.25012207, -1, -1, 0.25012207, 1, -1, 0.25012207, 1, -1, -0.25012207, -1, -1, 0.25012207, 1, -1, -0.25012207, -1, -1, -0.25012207, -1, 1, 0.25012207, -1, 1, -0.25012207, 1, 1, -0.25012207, -1, 1, 0.25012207, 1, 1, -0.25012207, 1, 1, 0.25012207, 1, 1, 0.25012207, 1, 1, -0.25012207, 1, -1, -0.25012207, 1, 1, 0.25012207, 1, -1, -0.25012207, 1, -1, 0.25012207, 1, -1, 0.25012207, -1, -1, 0.25012207, -1, 1, 0.25012207, 1, -1, 0.25012207, -1, 1, 0.25012207, 1, 1, 0.25012207) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_dscgh"] -points = PackedVector3Array(-1.75, 0.25, -1.625, -1.75, -0.25, -1.625, 1.75, -0.25, -1.625, 1.75, 0.25, -1.625, -1.75, 0.25, 1.625, -1.75, -0.25, 1.625, 1.75, -0.25, 1.625, 1.75, 0.25, 1.625) +points = PackedVector3Array(1.7501221, 0.25, 1.625, 1.7501221, -0.25, 1.625, -1.7498779, 0.25, 1.625, -1.7498779, -0.25, 1.625, 1.7501221, 0.25, -1.625, 1.7501221, -0.25, -1.625, -1.7498779, 0.25, -1.625, -1.7498779, -0.25, -1.625) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_b3mi7"] -points = PackedVector3Array(-1.75, 0.25, -1.625, -1.75, -0.25, -1.625, 1.75, -0.25, -1.625, 1.75, 0.25, -1.625, -1.75, 0.25, 1.625, -1.75, -0.25, 1.625, 1.75, -0.25, 1.625, 1.75, 0.25, 1.625) +points = PackedVector3Array(1.75, 0.25, 1.625, 1.75, -0.25, 1.625, -1.75, 0.25, 1.625, -1.75, -0.25, 1.625, 1.75, 0.25, -1.625, 1.75, -0.25, -1.625, -1.75, 0.25, -1.625, -1.75, -0.25, -1.625) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_doq3a"] -points = PackedVector3Array(-0.875, 0.25, -1.625, -0.875, -0.25, -1.625, 0.875, -0.25, -1.625, 0.875, 0.25, -1.625, -0.875, 0.25, 1.625, -0.875, -0.25, 1.625, 0.875, -0.25, 1.625, 0.875, 0.25, 1.625) +points = PackedVector3Array(0.875, 0.25, 1.625, 0.875, -0.25, 1.625, -0.875, 0.25, 1.625, -0.875, -0.25, 1.625, 0.875, 0.25, -1.625, 0.875, -0.25, -1.625, -0.875, 0.25, -1.625, -0.875, -0.25, -1.625) [sub_resource type="ArrayMesh" id="ArrayMesh_6ir23"] _surfaces = [{ -"aabb": AABB(-3.5, -0.5, -2.75, 7, 1, 5.5), -"attribute_data": PackedByteArray("AAAEwgAAAL8AAATCAAAAPwAAIMIAAAA/AAAgwgAAAL8AAJDAAAAAvwAAgD8AAAC/AACAPwAAAD8AAJDAAAAAPwAAkEAAACDCAACQQAAABMIAAIC/AAAEwgAAgL8AACDCAACQwAAAIMIAAIA/AAAgwgAAgD8AAATCAACQwAAABMIAAJBAAAAAvwAAkEAAAAA/AACAvwAAAD8AAIC/AAAAvwAABEIAAAC/AAAgQgAAAL8AACBCAAAAPwAABEIAAAA/"), +"aabb": AABB(-3.5, -0.5, -2.750122, 7, 1, 5.500244), +"attribute_data": PackedByteArray("AAAgwgAAAL8AAATCAAAAvwAABMIAAAA/AAAgwgAAAD8AAIA/AAAAPwACkMAAAAA/AAKQwAAAAL8AAIA/AAAAvwAAgL8AAATCAACAvwAAIMIAApBAAAAgwgACkEAAAATCAACAPwAABMIAApDAAAAEwgACkMAAACDCAACAPwAAIMIAAIC/AAAAvwACkEAAAAC/AAKQQAAAAD8AAIC/AAAAPwAAIEIAAAA/AAAEQgAAAD8AAARCAAAAvwAAIEIAAAC/"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -815,26 +815,26 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AABgwAAAAD8AADDAAABgwAAAAL8AADDAAABgQAAAAL8AADDAAABgQAAAAD8AADDAAABgwAAAAD8AADDAAABgwAAAAD8AADBAAABgwAAAAL8AADBAAABgwAAAAL8AADDAAABgQAAAAL8AADDAAABgwAAAAL8AADDAAABgwAAAAL8AADBAAABgQAAAAL8AADBAAABgQAAAAD8AADDAAABgQAAAAD8AADBAAABgwAAAAD8AADBAAABgwAAAAD8AADDAAABgQAAAAD8AADDAAABgQAAAAL8AADDAAABgQAAAAL8AADBAAABgQAAAAD8AADBAAABgwAAAAD8AADBAAABgQAAAAD8AADBAAABgQAAAAL8AADBAAABgwAAAAL8AADBA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AABgQAAAAD8A/i/AAABgwAAAAD8A/i/AAABgwAAAAL8A/i/AAABgQAAAAL8A/i/AAABgwAAAAL8AAjBAAABgwAAAAL8AAjDAAABgwAAAAD8AAjDAAABgwAAAAD8AAjBAAABgwAAAAL8AAjBAAABgQAAAAL8AAjBAAABgQAAAAL8AAjDAAABgwAAAAL8AAjDAAABgwAAAAD8AAjBAAABgwAAAAD8AAjDAAABgQAAAAD8AAjDAAABgQAAAAD8AAjBAAABgQAAAAD8AAjBAAABgQAAAAD8AAjDAAABgQAAAAL8AAjDAAABgQAAAAL8AAjBAAABgQAAAAL8AAjBAAABgwAAAAL8AAjBAAABgwAAAAD8AAjBAAABgQAAAAD8AAjBA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ArrayOccluder3D" id="ArrayOccluder3D_skgyx"] -vertices = PackedVector3Array(-3.5, 0.5, -2.75, -3.5, -0.5, -2.75, 3.5, -0.5, -2.75, 3.5, 0.5, -2.75, -3.5, 0.5, -2.75, -3.5, 0.5, 2.75, -3.5, -0.5, 2.75, -3.5, -0.5, -2.75, 3.5, -0.5, -2.75, -3.5, -0.5, -2.75, -3.5, -0.5, 2.75, 3.5, -0.5, 2.75, 3.5, 0.5, -2.75, 3.5, 0.5, 2.75, -3.5, 0.5, 2.75, -3.5, 0.5, -2.75, 3.5, 0.5, -2.75, 3.5, -0.5, -2.75, 3.5, -0.5, 2.75, 3.5, 0.5, 2.75, -3.5, 0.5, 2.75, 3.5, 0.5, 2.75, 3.5, -0.5, 2.75, -3.5, -0.5, 2.75) +vertices = PackedVector3Array(3.5, 0.5, -2.749878, -3.5, 0.5, -2.749878, -3.5, -0.5, -2.749878, 3.5, -0.5, -2.749878, -3.5, -0.5, 2.750122, -3.5, -0.5, -2.750122, -3.5, 0.5, -2.750122, -3.5, 0.5, 2.750122, -3.5, -0.5, 2.750122, 3.5, -0.5, 2.750122, 3.5, -0.5, -2.750122, -3.5, -0.5, -2.750122, -3.5, 0.5, 2.750122, -3.5, 0.5, -2.750122, 3.5, 0.5, -2.750122, 3.5, 0.5, 2.750122, 3.5, 0.5, 2.750122, 3.5, 0.5, -2.750122, 3.5, -0.5, -2.750122, 3.5, -0.5, 2.750122, 3.5, -0.5, 2.750122, -3.5, -0.5, 2.750122, -3.5, 0.5, 2.750122, 3.5, 0.5, 2.750122) indices = PackedInt32Array(0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_5c1jq"] -points = PackedVector3Array(-3.5, 0.5, -2.75, -3.5, -0.5, -2.75, 3.5, -0.5, -2.75, 3.5, 0.5, -2.75, -3.5, 0.5, 2.75, -3.5, -0.5, 2.75, 3.5, -0.5, 2.75, 3.5, 0.5, 2.75) +points = PackedVector3Array(3.5, 0.5, 2.750122, 3.5, -0.5, 2.750122, -3.5, 0.5, 2.750122, -3.5, -0.5, 2.750122, 3.5, 0.5, -2.749878, 3.5, -0.5, -2.749878, -3.5, 0.5, -2.749878, -3.5, -0.5, -2.749878) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_orsf5"] -points = PackedVector3Array(-1.25, 0.5, -1.5, -1.25, -0.5, -1.5, 1.25, -0.5, -1.5, 1.25, 0.5, -1.5, -1.25, 0.5, 1.5, -1.25, -0.5, 1.5, 1.25, -0.5, 1.5, 1.25, 0.5, 1.5) +points = PackedVector3Array(1.25, 0.5, 1.5, 1.25, -0.5, 1.5, -1.25, 0.5, 1.5, -1.25, -0.5, 1.5, 1.25, 0.5, -1.5, 1.25, -0.5, -1.5, -1.25, 0.5, -1.5, -1.25, -0.5, -1.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_5e7ic"] -points = PackedVector3Array(-1.625, 0.25, -0.875, -1.625, -0.25, -0.875, 1.625, -0.25, -0.875, 1.625, 0.25, -0.875, -1.625, 0.25, 0.875, -1.625, -0.25, 0.875, 1.625, -0.25, 0.875, 1.625, 0.25, 0.875) +points = PackedVector3Array(1.625, 0.25, 0.875, 1.625, -0.25, 0.875, -1.625, 0.25, 0.875, -1.625, -0.25, 0.875, 1.625, 0.25, -0.875, 1.625, -0.25, -0.875, -1.625, 0.25, -0.875, -1.625, -0.25, -0.875) [sub_resource type="ArrayMesh" id="ArrayMesh_teo54"] _surfaces = [{ "aabb": AABB(-0.25, -1, -2.5, 0.5, 2, 5), -"attribute_data": PackedByteArray("AABIwgAAwL8AAEjCAAAAvwAASsIAAAC/AABKwgAAwL8AAGBAAADAvwAACEEAAMC/AAAIQQAAAL8AAGBAAAAAvwAAYMAAAM7BAABgwAAAzMEAAAjBAADMwQAACMEAAM7BAABgQAAAzsEAAAhBAADOwQAACEEAAMzBAABgQAAAzMEAAGDAAADAvwAAYMAAAAC/AAAIwQAAAL8AAAjBAADAvwAASEIAAMC/AABKQgAAwL8AAEpCAAAAvwAASEIAAAC/"), +"attribute_data": PackedByteArray("AABKwgAAwL8AAEjCAADAvwAASMIAAAC/AABKwgAAAL8AAAhBAAAAvwAAYEAAAAC/AABgQAAAwL8AAAhBAADAvwAACMEAAMzBAAAIwQAAzsEAAGDAAADOwQAAYMAAAMzBAAAIQQAAzMEAAGBAAADMwQAAYEAAAM7BAAAIQQAAzsEAAAjBAADAvwAAYMAAAMC/AABgwAAAAL8AAAjBAAAAvwAASkIAAAC/AABIQgAAAL8AAEhCAADAvwAASkIAAMC/"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -843,16 +843,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AACAvgAAgD8AACDAAACAvgAAgL8AACDAAACAPgAAgL8AACDAAACAPgAAgD8AACDAAACAvgAAgD8AACDAAACAvgAAgD8AACBAAACAvgAAgL8AACBAAACAvgAAgL8AACDAAACAPgAAgL8AACDAAACAvgAAgL8AACDAAACAvgAAgL8AACBAAACAPgAAgL8AACBAAACAPgAAgD8AACDAAACAPgAAgD8AACBAAACAvgAAgD8AACBAAACAvgAAgD8AACDAAACAPgAAgD8AACDAAACAPgAAgL8AACDAAACAPgAAgL8AACBAAACAPgAAgD8AACBAAACAvgAAgD8AACBAAACAPgAAgD8AACBAAACAPgAAgL8AACBAAACAvgAAgL8AACBA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACAPgAAgD8AACDAAACAvgAAgD8AACDAAACAvgAAgL8AACDAAACAPgAAgL8AACDAAACAvgAAgL8AACBAAACAvgAAgL8AACDAAACAvgAAgD8AACDAAACAvgAAgD8AACBAAACAvgAAgL8AACBAAACAPgAAgL8AACBAAACAPgAAgL8AACDAAACAvgAAgL8AACDAAACAvgAAgD8AACBAAACAvgAAgD8AACDAAACAPgAAgD8AACDAAACAPgAAgD8AACBAAACAPgAAgD8AACBAAACAPgAAgD8AACDAAACAPgAAgL8AACDAAACAPgAAgL8AACBAAACAPgAAgL8AACBAAACAvgAAgL8AACBAAACAvgAAgD8AACBAAACAPgAAgD8AACBA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_cjqvq"] -data = PackedVector3Array(-0.25, 1, -2.5, -0.25, -1, -2.5, 0.25, -1, -2.5, -0.25, 1, -2.5, 0.25, -1, -2.5, 0.25, 1, -2.5, -0.25, 1, -2.5, -0.25, 1, 2.5, -0.25, -1, 2.5, -0.25, 1, -2.5, -0.25, -1, 2.5, -0.25, -1, -2.5, 0.25, -1, -2.5, -0.25, -1, -2.5, -0.25, -1, 2.5, 0.25, -1, -2.5, -0.25, -1, 2.5, 0.25, -1, 2.5, 0.25, 1, -2.5, 0.25, 1, 2.5, -0.25, 1, 2.5, 0.25, 1, -2.5, -0.25, 1, 2.5, -0.25, 1, -2.5, 0.25, 1, -2.5, 0.25, -1, -2.5, 0.25, -1, 2.5, 0.25, 1, -2.5, 0.25, -1, 2.5, 0.25, 1, 2.5, -0.25, 1, 2.5, 0.25, 1, 2.5, 0.25, -1, 2.5, -0.25, 1, 2.5, 0.25, -1, 2.5, -0.25, -1, 2.5) +data = PackedVector3Array(0.25, 1, -2.5, -0.25, 1, -2.5, -0.25, -1, -2.5, 0.25, 1, -2.5, -0.25, -1, -2.5, 0.25, -1, -2.5, -0.25, -1, 2.5, -0.25, -1, -2.5, -0.25, 1, -2.5, -0.25, -1, 2.5, -0.25, 1, -2.5, -0.25, 1, 2.5, -0.25, -1, 2.5, 0.25, -1, 2.5, 0.25, -1, -2.5, -0.25, -1, 2.5, 0.25, -1, -2.5, -0.25, -1, -2.5, -0.25, 1, 2.5, -0.25, 1, -2.5, 0.25, 1, -2.5, -0.25, 1, 2.5, 0.25, 1, -2.5, 0.25, 1, 2.5, 0.25, 1, 2.5, 0.25, 1, -2.5, 0.25, -1, -2.5, 0.25, 1, 2.5, 0.25, -1, -2.5, 0.25, -1, 2.5, 0.25, -1, 2.5, -0.25, -1, 2.5, -0.25, 1, 2.5, 0.25, -1, 2.5, -0.25, 1, 2.5, 0.25, 1, 2.5) [sub_resource type="ArrayMesh" id="ArrayMesh_0gskd"] _surfaces = [{ "aabb": AABB(-1, -0.5, -0.125, 2, 1, 0.25), -"attribute_data": PackedByteArray("AABmwgAAAMAAAGbCAACAvwAAbsIAAIC/AABuwgAAAMAAAHhBAAAAwAAAfEEAAADAAAB8QQAAgL8AAHhBAACAvwAAeMEAAG7CAAB4wQAAZsIAAHzBAABmwgAAfMEAAG7CAAB4QQAAbsIAAHxBAABuwgAAfEEAAGbCAAB4QQAAZsIAAHjBAAAAwAAAeMEAAIC/AAB8wQAAgL8AAHzBAAAAwAAAZkIAAADAAABuQgAAAMAAAG5CAACAvwAAZkIAAIC/"), +"attribute_data": PackedByteArray("AABuwgAAAMAAAGbCAAAAwAAAZsIAAIC/AABuwgAAgL8AAHxBAACAvwAAeEEAAIC/AAB4QQAAAMAAAHxBAAAAwAAAfMEAAGbCAAB8wQAAbsIAAHjBAABuwgAAeMEAAGbCAAB8QQAAZsIAAHhBAABmwgAAeEEAAG7CAAB8QQAAbsIAAHzBAAAAwAAAeMEAAADAAAB4wQAAgL8AAHzBAACAvwAAbkIAAIC/AABmQgAAgL8AAGZCAAAAwAAAbkIAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -861,16 +861,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AACAvwAAAD8AAAC+AACAvwAAAL8AAAC+AACAPwAAAL8AAAC+AACAPwAAAD8AAAC+AACAvwAAAD8AAAC+AACAvwAAAD8AAAA+AACAvwAAAL8AAAA+AACAvwAAAL8AAAC+AACAPwAAAL8AAAC+AACAvwAAAL8AAAC+AACAvwAAAL8AAAA+AACAPwAAAL8AAAA+AACAPwAAAD8AAAC+AACAPwAAAD8AAAA+AACAvwAAAD8AAAA+AACAvwAAAD8AAAC+AACAPwAAAD8AAAC+AACAPwAAAL8AAAC+AACAPwAAAL8AAAA+AACAPwAAAD8AAAA+AACAvwAAAD8AAAA+AACAPwAAAD8AAAA+AACAPwAAAL8AAAA+AACAvwAAAL8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACAPwAAAD8AAAC+AACAvwAAAD8AAAC+AACAvwAAAL8AAAC+AACAPwAAAL8AAAC+AACAvwAAAL8AAAA+AACAvwAAAL8AAAC+AACAvwAAAD8AAAC+AACAvwAAAD8AAAA+AACAvwAAAL8AAAA+AACAPwAAAL8AAAA+AACAPwAAAL8AAAC+AACAvwAAAL8AAAC+AACAvwAAAD8AAAA+AACAvwAAAD8AAAC+AACAPwAAAD8AAAC+AACAPwAAAD8AAAA+AACAPwAAAD8AAAA+AACAPwAAAD8AAAC+AACAPwAAAL8AAAC+AACAPwAAAL8AAAA+AACAPwAAAL8AAAA+AACAvwAAAL8AAAA+AACAvwAAAD8AAAA+AACAPwAAAD8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_t270j"] -points = PackedVector3Array(-1, 0.5, -0.125, -1, -0.5, -0.125, 1, -0.5, -0.125, 1, 0.5, -0.125, -1, 0.5, 0.125, -1, -0.5, 0.125, 1, -0.5, 0.125, 1, 0.5, 0.125) +points = PackedVector3Array(1, 0.5, 0.125, 1, -0.5, 0.125, -1, 0.5, 0.125, -1, -0.5, 0.125, 1, 0.5, -0.125, 1, -0.5, -0.125, -1, 0.5, -0.125, -1, -0.5, -0.125) [sub_resource type="ArrayMesh" id="ArrayMesh_li3o5"] _surfaces = [{ "aabb": AABB(-0.125, -0.5, -1.125, 0.25, 1, 2.25), -"attribute_data": PackedByteArray("AABjwgAAAMAAAGPCAACAvwAAZMIAAIC/AABkwgAAAMAAAIJBAAAAwAAAlEEAAADAAACUQQAAgL8AAIJBAACAvwAAZMIAAIJBAABjwgAAgkEAAGPCAACUQQAAZMIAAJRBAABkQgAAgkEAAGRCAACUQQAAY0IAAJRBAABjQgAAgkEAAILBAAAAwAAAgsEAAIC/AACUwQAAgL8AAJTBAAAAwAAAY0IAAADAAABkQgAAAMAAAGRCAACAvwAAY0IAAIC/"), +"attribute_data": PackedByteArray("AABkwgAAAMAAAGPCAAAAwAAAY8IAAIC/AABkwgAAgL8AAJRBAACAvwAAgkEAAIC/AACCQQAAAMAAAJRBAAAAwAAAY8IAAJRBAABkwgAAlEEAAGTCAACCQQAAY8IAAIJBAABjQgAAlEEAAGNCAACCQQAAZEIAAIJBAABkQgAAlEEAAJTBAAAAwAAAgsEAAADAAACCwQAAgL8AAJTBAACAvwAAZEIAAIC/AABjQgAAgL8AAGNCAAAAwAAAZEIAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -879,16 +879,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AAAAvgAAAD8AAJC/AAAAvgAAAL8AAJC/AAAAPgAAAL8AAJC/AAAAPgAAAD8AAJC/AAAAvgAAAD8AAJC/AAAAvgAAAD8AAJA/AAAAvgAAAL8AAJA/AAAAvgAAAL8AAJC/AAAAPgAAAL8AAJC/AAAAvgAAAL8AAJC/AAAAvgAAAL8AAJA/AAAAPgAAAL8AAJA/AAAAPgAAAD8AAJC/AAAAPgAAAD8AAJA/AAAAvgAAAD8AAJA/AAAAvgAAAD8AAJC/AAAAPgAAAD8AAJC/AAAAPgAAAL8AAJC/AAAAPgAAAL8AAJA/AAAAPgAAAD8AAJA/AAAAvgAAAD8AAJA/AAAAPgAAAD8AAJA/AAAAPgAAAL8AAJA/AAAAvgAAAL8AAJA//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAAAAP+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//3///////7//f///////v/9///////+//3///////7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AAAAPgAAAD8AAJC/AAAAvgAAAD8AAJC/AAAAvgAAAL8AAJC/AAAAPgAAAL8AAJC/AAAAvgAAAL8AAJA/AAAAvgAAAL8AAJC/AAAAvgAAAD8AAJC/AAAAvgAAAD8AAJA/AAAAvgAAAL8AAJA/AAAAPgAAAL8AAJA/AAAAPgAAAL8AAJC/AAAAvgAAAL8AAJC/AAAAvgAAAD8AAJA/AAAAvgAAAD8AAJC/AAAAPgAAAD8AAJC/AAAAPgAAAD8AAJA/AAAAPgAAAD8AAJA/AAAAPgAAAD8AAJC/AAAAPgAAAL8AAJC/AAAAPgAAAL8AAJA/AAAAPgAAAL8AAJA/AAAAvgAAAL8AAJA/AAAAvgAAAD8AAJA/AAAAPgAAAD8AAJA//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAAAAP+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//3///////7//f///////v/9///////+//3///////7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_lolpd"] -points = PackedVector3Array(-0.125, 0.5, -1.125, -0.125, -0.5, -1.125, 0.125, -0.5, -1.125, 0.125, 0.5, -1.125, -0.125, 0.5, 1.125, -0.125, -0.5, 1.125, 0.125, -0.5, 1.125, 0.125, 0.5, 1.125) +points = PackedVector3Array(0.125, 0.5, 1.125, 0.125, -0.5, 1.125, -0.125, 0.5, 1.125, -0.125, -0.5, 1.125, 0.125, 0.5, -1.125, 0.125, -0.5, -1.125, -0.125, 0.5, -1.125, -0.125, -0.5, -1.125) [sub_resource type="ArrayMesh" id="ArrayMesh_sao1p"] _surfaces = [{ "aabb": AABB(-0.125, -0.5, -1.375, 0.25, 1, 2.75), -"attribute_data": PackedByteArray("AABfwgAAAMAAAF/CAACAvwAAYMIAAIC/AABgwgAAAMAAADBBAAAAwAAAXEEAAADAAABcQQAAgL8AADBBAACAvwAAYMIAADBBAABfwgAAMEEAAF/CAABcQQAAYMIAAFxBAABgQgAAMEEAAGBCAABcQQAAX0IAAFxBAABfQgAAMEEAADDBAAAAwAAAMMEAAIC/AABcwQAAgL8AAFzBAAAAwAAAX0IAAADAAABgQgAAAMAAAGBCAACAvwAAX0IAAIC/"), +"attribute_data": PackedByteArray("AABgwgAAAMAAAF/CAAAAwAAAX8IAAIC/AABgwgAAgL8AAFxBAACAvwAAMEEAAIC/AAAwQQAAAMAAAFxBAAAAwAAAX8IAAFxBAABgwgAAXEEAAGDCAAAwQQAAX8IAADBBAABfQgAAXEEAAF9CAAAwQQAAYEIAADBBAABgQgAAXEEAAFzBAAAAwAAAMMEAAADAAAAwwQAAgL8AAFzBAACAvwAAYEIAAIC/AABfQgAAgL8AAF9CAAAAwAAAYEIAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -897,16 +897,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AAAAvgAAAD8AALC/AAAAvgAAAL8AALC/AAAAPgAAAL8AALC/AAAAPgAAAD8AALC/AAAAvgAAAD8AALC/AAAAvgAAAD8AALA/AAAAvgAAAL8AALA/AAAAvgAAAL8AALC/AAAAPgAAAL8AALC/AAAAvgAAAL8AALC/AAAAvgAAAL8AALA/AAAAPgAAAL8AALA/AAAAPgAAAD8AALC/AAAAPgAAAD8AALA/AAAAvgAAAD8AALA/AAAAvgAAAD8AALC/AAAAPgAAAD8AALC/AAAAPgAAAL8AALC/AAAAPgAAAL8AALA/AAAAPgAAAD8AALA/AAAAvgAAAD8AALA/AAAAPgAAAD8AALA/AAAAPgAAAL8AALA/AAAAvgAAAL8AALA//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAAAAP+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//3///////7//f///////v/9///////+//3///////7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AAAAPgAAAD8AALC/AAAAvgAAAD8AALC/AAAAvgAAAL8AALC/AAAAPgAAAL8AALC/AAAAvgAAAL8AALA/AAAAvgAAAL8AALC/AAAAvgAAAD8AALC/AAAAvgAAAD8AALA/AAAAvgAAAL8AALA/AAAAPgAAAL8AALA/AAAAPgAAAL8AALC/AAAAvgAAAL8AALC/AAAAvgAAAD8AALA/AAAAvgAAAD8AALC/AAAAPgAAAD8AALC/AAAAPgAAAD8AALA/AAAAPgAAAD8AALA/AAAAPgAAAD8AALC/AAAAPgAAAL8AALC/AAAAPgAAAL8AALA/AAAAPgAAAL8AALA/AAAAvgAAAL8AALA/AAAAvgAAAD8AALA/AAAAPgAAAD8AALA//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAAAAP+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//3///////7//f///////v/9///////+//3///////7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_n6c2k"] -points = PackedVector3Array(-0.125, 0.5, -1.375, -0.125, -0.5, -1.375, 0.125, -0.5, -1.375, 0.125, 0.5, -1.375, -0.125, 0.5, 1.375, -0.125, -0.5, 1.375, 0.125, -0.5, 1.375, 0.125, 0.5, 1.375) +points = PackedVector3Array(0.125, 0.5, 1.375, 0.125, -0.5, 1.375, -0.125, 0.5, 1.375, -0.125, -0.5, 1.375, 0.125, 0.5, -1.375, 0.125, -0.5, -1.375, -0.125, 0.5, -1.375, -0.125, -0.5, -1.375) [sub_resource type="ArrayMesh" id="ArrayMesh_40qyj"] _surfaces = [{ "aabb": AABB(-1.25, -0.5, -0.125, 2.5, 1, 0.25), -"attribute_data": PackedByteArray("AABcwgAAAMAAAFzCAACAvwAAZsIAAIC/AABmwgAAAMAAADhBAAAAwAAAPEEAAADAAAA8QQAAgL8AADhBAACAvwAAOMEAAGbCAAA4wQAAXMIAADzBAABcwgAAPMEAAGbCAAA4QQAAZsIAADxBAABmwgAAPEEAAFzCAAA4QQAAXMIAADjBAAAAwAAAOMEAAIC/AAA8wQAAgL8AADzBAAAAwAAAXEIAAADAAABmQgAAAMAAAGZCAACAvwAAXEIAAIC/"), +"attribute_data": PackedByteArray("AABmwgAAAMAAAFzCAAAAwAAAXMIAAIC/AABmwgAAgL8AADxBAACAvwAAOEEAAIC/AAA4QQAAAMAAADxBAAAAwAAAPMEAAFzCAAA8wQAAZsIAADjBAABmwgAAOMEAAFzCAAA8QQAAXMIAADhBAABcwgAAOEEAAGbCAAA8QQAAZsIAADzBAAAAwAAAOMEAAADAAAA4wQAAgL8AADzBAACAvwAAZkIAAIC/AABcQgAAgL8AAFxCAAAAwAAAZkIAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -915,16 +915,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AACgvwAAAD8AAAC+AACgvwAAAL8AAAC+AACgPwAAAL8AAAC+AACgPwAAAD8AAAC+AACgvwAAAD8AAAC+AACgvwAAAD8AAAA+AACgvwAAAL8AAAA+AACgvwAAAL8AAAC+AACgPwAAAL8AAAC+AACgvwAAAL8AAAC+AACgvwAAAL8AAAA+AACgPwAAAL8AAAA+AACgPwAAAD8AAAC+AACgPwAAAD8AAAA+AACgvwAAAD8AAAA+AACgvwAAAD8AAAC+AACgPwAAAD8AAAC+AACgPwAAAL8AAAC+AACgPwAAAL8AAAA+AACgPwAAAD8AAAA+AACgvwAAAD8AAAA+AACgPwAAAD8AAAA+AACgPwAAAL8AAAA+AACgvwAAAL8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACgPwAAAD8AAAC+AACgvwAAAD8AAAC+AACgvwAAAL8AAAC+AACgPwAAAL8AAAC+AACgvwAAAL8AAAA+AACgvwAAAL8AAAC+AACgvwAAAD8AAAC+AACgvwAAAD8AAAA+AACgvwAAAL8AAAA+AACgPwAAAL8AAAA+AACgPwAAAL8AAAC+AACgvwAAAL8AAAC+AACgvwAAAD8AAAA+AACgvwAAAD8AAAC+AACgPwAAAD8AAAC+AACgPwAAAD8AAAA+AACgPwAAAD8AAAA+AACgPwAAAD8AAAC+AACgPwAAAL8AAAC+AACgPwAAAL8AAAA+AACgPwAAAL8AAAA+AACgvwAAAL8AAAA+AACgvwAAAD8AAAA+AACgPwAAAD8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_a0rlr"] -points = PackedVector3Array(-1.25, 0.5, -0.125, -1.25, -0.5, -0.125, 1.25, -0.5, -0.125, 1.25, 0.5, -0.125, -1.25, 0.5, 0.125, -1.25, -0.5, 0.125, 1.25, -0.5, 0.125, 1.25, 0.5, 0.125) +points = PackedVector3Array(1.25, 0.5, 0.125, 1.25, -0.5, 0.125, -1.25, 0.5, 0.125, -1.25, -0.5, 0.125, 1.25, 0.5, -0.125, 1.25, -0.5, -0.125, -1.25, 0.5, -0.125, -1.25, -0.5, -0.125) [sub_resource type="ArrayMesh" id="ArrayMesh_5nfnt"] _surfaces = [{ "aabb": AABB(-0.125, -0.5, -1.5, 0.25, 1, 3), -"attribute_data": PackedByteArray("AABXwgAAAMAAAFfCAACAvwAAWMIAAIC/AABYwgAAAMAAAABBAAAAwAAAMEEAAADAAAAwQQAAgL8AAABBAACAvwAAWMIAAABBAABXwgAAAEEAAFfCAAAwQQAAWMIAADBBAABYQgAAAEEAAFhCAAAwQQAAV0IAADBBAABXQgAAAEEAAADBAAAAwAAAAMEAAIC/AAAwwQAAgL8AADDBAAAAwAAAV0IAAADAAABYQgAAAMAAAFhCAACAvwAAV0IAAIC/"), +"attribute_data": PackedByteArray("AABYwgAAAMAAAFfCAAAAwAAAV8IAAIC/AABYwgAAgL8AADBBAACAvwAAAEEAAIC/AAAAQQAAAMAAADBBAAAAwAAAV8IAADBBAABYwgAAMEEAAFjCAAAAQQAAV8IAAABBAABXQgAAMEEAAFdCAAAAQQAAWEIAAABBAABYQgAAMEEAADDBAAAAwAAAAMEAAADAAAAAwQAAgL8AADDBAACAvwAAWEIAAIC/AABXQgAAgL8AAFdCAAAAwAAAWEIAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -933,16 +933,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AAAAvgAAAD8AAMC/AAAAvgAAAL8AAMC/AAAAPgAAAL8AAMC/AAAAPgAAAD8AAMC/AAAAvgAAAD8AAMC/AAAAvgAAAD8AAMA/AAAAvgAAAL8AAMA/AAAAvgAAAL8AAMC/AAAAPgAAAL8AAMC/AAAAvgAAAL8AAMC/AAAAvgAAAL8AAMA/AAAAPgAAAL8AAMA/AAAAPgAAAD8AAMC/AAAAPgAAAD8AAMA/AAAAvgAAAD8AAMA/AAAAvgAAAD8AAMC/AAAAPgAAAD8AAMC/AAAAPgAAAL8AAMC/AAAAPgAAAL8AAMA/AAAAPgAAAD8AAMA/AAAAvgAAAD8AAMA/AAAAPgAAAD8AAMA/AAAAPgAAAL8AAMA/AAAAvgAAAL8AAMA//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAAAAP+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//3///////7//f///////v/9///////+//3///////7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AAAAPgAAAD8AAMC/AAAAvgAAAD8AAMC/AAAAvgAAAL8AAMC/AAAAPgAAAL8AAMC/AAAAvgAAAL8AAMA/AAAAvgAAAL8AAMC/AAAAvgAAAD8AAMC/AAAAvgAAAD8AAMA/AAAAvgAAAL8AAMA/AAAAPgAAAL8AAMA/AAAAPgAAAL8AAMC/AAAAvgAAAL8AAMC/AAAAvgAAAD8AAMA/AAAAvgAAAD8AAMC/AAAAPgAAAD8AAMC/AAAAPgAAAD8AAMA/AAAAPgAAAD8AAMA/AAAAPgAAAD8AAMC/AAAAPgAAAL8AAMC/AAAAPgAAAL8AAMA/AAAAPgAAAL8AAMA/AAAAvgAAAL8AAMA/AAAAvgAAAD8AAMA/AAAAPgAAAD8AAMA//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAAAAP+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//3///////7//f///////v/9///////+//3///////7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_eh5k2"] -points = PackedVector3Array(-0.125, 0.5, -1.5, -0.125, -0.5, -1.5, 0.125, -0.5, -1.5, 0.125, 0.5, -1.5, -0.125, 0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.5, 1.5, 0.125, 0.5, 1.5) +points = PackedVector3Array(0.125, 0.5, 1.5, 0.125, -0.5, 1.5, -0.125, 0.5, 1.5, -0.125, -0.5, 1.5, 0.125, 0.5, -1.5, 0.125, -0.5, -1.5, -0.125, 0.5, -1.5, -0.125, -0.5, -1.5) [sub_resource type="ArrayMesh" id="ArrayMesh_1mvjs"] _surfaces = [{ "aabb": AABB(-2.375, -0.5, -0.125, 4.75, 1, 0.25), -"attribute_data": PackedByteArray("AABPwgAAAMAAAE/CAACAvwAAYsIAAIC/AABiwgAAAMAAAEhBAAAAwAAATEEAAADAAABMQQAAgL8AAEhBAACAvwAASMEAAGLCAABIwQAAT8IAAEzBAABPwgAATMEAAGLCAABIQQAAYsIAAExBAABiwgAATEEAAE/CAABIQQAAT8IAAEjBAAAAwAAASMEAAIC/AABMwQAAgL8AAEzBAAAAwAAAT0IAAADAAABiQgAAAMAAAGJCAACAvwAAT0IAAIC/"), +"attribute_data": PackedByteArray("AABiwgAAAMAAAE/CAAAAwAAAT8IAAIC/AABiwgAAgL8AAExBAACAvwAASEEAAIC/AABIQQAAAMAAAExBAAAAwAAATMEAAE/CAABMwQAAYsIAAEjBAABiwgAASMEAAE/CAABMQQAAT8IAAEhBAABPwgAASEEAAGLCAABMQQAAYsIAAEzBAAAAwAAASMEAAADAAABIwQAAgL8AAEzBAACAvwAAYkIAAIC/AABPQgAAgL8AAE9CAAAAwAAAYkIAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -951,16 +951,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AAAYwAAAAD8AAAC+AAAYwAAAAL8AAAC+AAAYQAAAAL8AAAC+AAAYQAAAAD8AAAC+AAAYwAAAAD8AAAC+AAAYwAAAAD8AAAA+AAAYwAAAAL8AAAA+AAAYwAAAAL8AAAC+AAAYQAAAAL8AAAC+AAAYwAAAAL8AAAC+AAAYwAAAAL8AAAA+AAAYQAAAAL8AAAA+AAAYQAAAAD8AAAC+AAAYQAAAAD8AAAA+AAAYwAAAAD8AAAA+AAAYwAAAAD8AAAC+AAAYQAAAAD8AAAC+AAAYQAAAAL8AAAC+AAAYQAAAAL8AAAA+AAAYQAAAAD8AAAA+AAAYwAAAAD8AAAA+AAAYQAAAAD8AAAA+AAAYQAAAAL8AAAA+AAAYwAAAAL8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AAAYQAAAAD8AAAC+AAAYwAAAAD8AAAC+AAAYwAAAAL8AAAC+AAAYQAAAAL8AAAC+AAAYwAAAAL8AAAA+AAAYwAAAAL8AAAC+AAAYwAAAAD8AAAC+AAAYwAAAAD8AAAA+AAAYwAAAAL8AAAA+AAAYQAAAAL8AAAA+AAAYQAAAAL8AAAC+AAAYwAAAAL8AAAC+AAAYwAAAAD8AAAA+AAAYwAAAAD8AAAC+AAAYQAAAAD8AAAC+AAAYQAAAAD8AAAA+AAAYQAAAAD8AAAA+AAAYQAAAAD8AAAC+AAAYQAAAAL8AAAC+AAAYQAAAAL8AAAA+AAAYQAAAAL8AAAA+AAAYwAAAAL8AAAA+AAAYwAAAAD8AAAA+AAAYQAAAAD8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_msrjn"] -points = PackedVector3Array(-2.375, 0.5, -0.125, -2.375, -0.5, -0.125, 2.375, -0.5, -0.125, 2.375, 0.5, -0.125, -2.375, 0.5, 0.125, -2.375, -0.5, 0.125, 2.375, -0.5, 0.125, 2.375, 0.5, 0.125) +points = PackedVector3Array(2.375, 0.5, 0.125, 2.375, -0.5, 0.125, -2.375, 0.5, 0.125, -2.375, -0.5, 0.125, 2.375, 0.5, -0.125, 2.375, -0.5, -0.125, -2.375, 0.5, -0.125, -2.375, -0.5, -0.125) [sub_resource type="ArrayMesh" id="ArrayMesh_08ygf"] _surfaces = [{ "aabb": AABB(-1.75, -0.5, -0.125, 3.5, 1, 0.25), -"attribute_data": PackedByteArray("AABOwgAAAMAAAE7CAACAvwAAXMIAAIC/AABcwgAAAMAAAHxBAAAAwAAAgEEAAADAAACAQQAAgL8AAHxBAACAvwAAfMEAAFzCAAB8wQAATsIAAIDBAABOwgAAgMEAAFzCAAB8QQAAXMIAAIBBAABcwgAAgEEAAE7CAAB8QQAATsIAAHzBAAAAwAAAfMEAAIC/AACAwQAAgL8AAIDBAAAAwAAATkIAAADAAABcQgAAAMAAAFxCAACAvwAATkIAAIC/"), +"attribute_data": PackedByteArray("AABcwgAAAMAAAE7CAAAAwAAATsIAAIC/AABcwgAAgL8AAIBBAACAvwAAfEEAAIC/AAB8QQAAAMAAAIBBAAAAwAAAgMEAAE7CAACAwQAAXMIAAHzBAABcwgAAfMEAAE7CAACAQQAATsIAAHxBAABOwgAAfEEAAFzCAACAQQAAXMIAAIDBAAAAwAAAfMEAAADAAAB8wQAAgL8AAIDBAACAvwAAXEIAAIC/AABOQgAAgL8AAE5CAAAAwAAAXEIAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -969,16 +969,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AADgvwAAAD8AAAC+AADgvwAAAL8AAAC+AADgPwAAAL8AAAC+AADgPwAAAD8AAAC+AADgvwAAAD8AAAC+AADgvwAAAD8AAAA+AADgvwAAAL8AAAA+AADgvwAAAL8AAAC+AADgPwAAAL8AAAC+AADgvwAAAL8AAAC+AADgvwAAAL8AAAA+AADgPwAAAL8AAAA+AADgPwAAAD8AAAC+AADgPwAAAD8AAAA+AADgvwAAAD8AAAA+AADgvwAAAD8AAAC+AADgPwAAAD8AAAC+AADgPwAAAL8AAAC+AADgPwAAAL8AAAA+AADgPwAAAD8AAAA+AADgvwAAAD8AAAA+AADgPwAAAD8AAAA+AADgPwAAAL8AAAA+AADgvwAAAL8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AADgPwAAAD8AAAC+AADgvwAAAD8AAAC+AADgvwAAAL8AAAC+AADgPwAAAL8AAAC+AADgvwAAAL8AAAA+AADgvwAAAL8AAAC+AADgvwAAAD8AAAC+AADgvwAAAD8AAAA+AADgvwAAAL8AAAA+AADgPwAAAL8AAAA+AADgPwAAAL8AAAC+AADgvwAAAL8AAAC+AADgvwAAAD8AAAA+AADgvwAAAD8AAAC+AADgPwAAAD8AAAC+AADgPwAAAD8AAAA+AADgPwAAAD8AAAA+AADgPwAAAD8AAAC+AADgPwAAAL8AAAC+AADgPwAAAL8AAAA+AADgPwAAAL8AAAA+AADgvwAAAL8AAAA+AADgvwAAAD8AAAA+AADgPwAAAD8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_2jgub"] -points = PackedVector3Array(-1.75, 0.5, -0.125, -1.75, -0.5, -0.125, 1.75, -0.5, -0.125, 1.75, 0.5, -0.125, -1.75, 0.5, 0.125, -1.75, -0.5, 0.125, 1.75, -0.5, 0.125, 1.75, 0.5, 0.125) +points = PackedVector3Array(1.75, 0.5, 0.125, 1.75, -0.5, 0.125, -1.75, 0.5, 0.125, -1.75, -0.5, 0.125, 1.75, 0.5, -0.125, 1.75, -0.5, -0.125, -1.75, 0.5, -0.125, -1.75, -0.5, -0.125) [sub_resource type="ArrayMesh" id="ArrayMesh_maikd"] _surfaces = [{ "aabb": AABB(-4.5, -0.5, -7.25, 9, 1, 14.5), -"attribute_data": PackedByteArray("AABYwgAAAL8AAFjCAAAAPwAAfMIAAAA/AAB8wgAAAL8AADjBAAAAvwAAQEAAAAC/AABAQAAAAD8AADjBAAAAPwAAOEEAAHzCAAA4QQAAWMIAAEDAAABYwgAAQMAAAHzCAAA4wQAAfMIAAEBAAAB8wgAAQEAAAFjCAAA4wQAAWMIAADhBAAAAvwAAOEEAAAA/AABAwAAAAD8AAEDAAAAAvwAAWEIAAAC/AAB8QgAAAL8AAHxCAAAAPwAAWEIAAAA/"), +"attribute_data": PackedByteArray("AAB8wgAAAL8AAFjCAAAAvwAAWMIAAAA/AAB8wgAAAD8AAEBAAAAAPwAAOMEAAAA/AAA4wQAAAL8AAEBAAAAAvwAAQMAAAFjCAABAwAAAfMIAADhBAAB8wgAAOEEAAFjCAABAQAAAWMIAADjBAABYwgAAOMEAAHzCAABAQAAAfMIAAEDAAAAAvwAAOEEAAAC/AAA4QQAAAD8AAEDAAAAAPwAAfEIAAAA/AABYQgAAAD8AAFhCAAAAvwAAfEIAAAC/"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -987,20 +987,20 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AACQwAAAAD8AAOjAAACQwAAAAL8AAOjAAACQQAAAAL8AAOjAAACQQAAAAD8AAOjAAACQwAAAAD8AAOjAAACQwAAAAD8AAOhAAACQwAAAAL8AAOhAAACQwAAAAL8AAOjAAACQQAAAAL8AAOjAAACQwAAAAL8AAOjAAACQwAAAAL8AAOhAAACQQAAAAL8AAOhAAACQQAAAAD8AAOjAAACQQAAAAD8AAOhAAACQwAAAAD8AAOhAAACQwAAAAD8AAOjAAACQQAAAAD8AAOjAAACQQAAAAL8AAOjAAACQQAAAAL8AAOhAAACQQAAAAD8AAOhAAACQwAAAAD8AAOhAAACQQAAAAD8AAOhAAACQQAAAAL8AAOhAAACQwAAAAL8AAOhA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACQQAAAAD8AAOjAAACQwAAAAD8AAOjAAACQwAAAAL8AAOjAAACQQAAAAL8AAOjAAACQwAAAAL8AAOhAAACQwAAAAL8AAOjAAACQwAAAAD8AAOjAAACQwAAAAD8AAOhAAACQwAAAAL8AAOhAAACQQAAAAL8AAOhAAACQQAAAAL8AAOjAAACQwAAAAL8AAOjAAACQwAAAAD8AAOhAAACQwAAAAD8AAOjAAACQQAAAAD8AAOjAAACQQAAAAD8AAOhAAACQQAAAAD8AAOhAAACQQAAAAD8AAOjAAACQQAAAAL8AAOjAAACQQAAAAL8AAOhAAACQQAAAAL8AAOhAAACQwAAAAL8AAOhAAACQwAAAAD8AAOhAAACQQAAAAD8AAOhA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ArrayOccluder3D" id="ArrayOccluder3D_lngi4"] -vertices = PackedVector3Array(-4.5, 0.5, -7.25, -4.5, -0.5, -7.25, 4.5, -0.5, -7.25, 4.5, 0.5, -7.25, -4.5, 0.5, -7.25, -4.5, 0.5, 7.25, -4.5, -0.5, 7.25, -4.5, -0.5, -7.25, 4.5, -0.5, -7.25, -4.5, -0.5, -7.25, -4.5, -0.5, 7.25, 4.5, -0.5, 7.25, 4.5, 0.5, -7.25, 4.5, 0.5, 7.25, -4.5, 0.5, 7.25, -4.5, 0.5, -7.25, 4.5, 0.5, -7.25, 4.5, -0.5, -7.25, 4.5, -0.5, 7.25, 4.5, 0.5, 7.25, -4.5, 0.5, 7.25, 4.5, 0.5, 7.25, 4.5, -0.5, 7.25, -4.5, -0.5, 7.25) +vertices = PackedVector3Array(4.5, 0.5, -7.25, -4.5, 0.5, -7.25, -4.5, -0.5, -7.25, 4.5, -0.5, -7.25, -4.5, -0.5, 7.25, -4.5, -0.5, -7.25, -4.5, 0.5, -7.25, -4.5, 0.5, 7.25, -4.5, -0.5, 7.25, 4.5, -0.5, 7.25, 4.5, -0.5, -7.25, -4.5, -0.5, -7.25, -4.5, 0.5, 7.25, -4.5, 0.5, -7.25, 4.5, 0.5, -7.25, 4.5, 0.5, 7.25, 4.5, 0.5, 7.25, 4.5, 0.5, -7.25, 4.5, -0.5, -7.25, 4.5, -0.5, 7.25, 4.5, -0.5, 7.25, -4.5, -0.5, 7.25, -4.5, 0.5, 7.25, 4.5, 0.5, 7.25) indices = PackedInt32Array(0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_4tost"] -points = PackedVector3Array(-4.5, 0.5, -7.25, -4.5, -0.5, -7.25, 4.5, -0.5, -7.25, 4.5, 0.5, -7.25, -4.5, 0.5, 7.25, -4.5, -0.5, 7.25, 4.5, -0.5, 7.25, 4.5, 0.5, 7.25) +points = PackedVector3Array(4.5, 0.5, 7.25, 4.5, -0.5, 7.25, -4.5, 0.5, 7.25, -4.5, -0.5, 7.25, 4.5, 0.5, -7.25, 4.5, -0.5, -7.25, -4.5, 0.5, -7.25, -4.5, -0.5, -7.25) [sub_resource type="ArrayMesh" id="ArrayMesh_h6vdi"] _surfaces = [{ "aabb": AABB(-1.375, -0.5, -0.125, 2.75, 1, 0.25), -"attribute_data": PackedByteArray("AAB0wgAAAMAAAHTCAACAvwAAf8IAAIC/AAB/wgAAAMAAACBAAAAAwAAAMEAAAADAAAAwQAAAgL8AACBAAACAvwAAIMAAAH/CAAAgwAAAdMIAADDAAAB0wgAAMMAAAH/CAAAgQAAAf8IAADBAAAB/wgAAMEAAAHTCAAAgQAAAdMIAACDAAAAAwAAAIMAAAIC/AAAwwAAAgL8AADDAAAAAwAAAdEIAAADAAAB/QgAAAMAAAH9CAACAvwAAdEIAAIC/"), +"attribute_data": PackedByteArray("AAB/wgAAAMAAAHTCAAAAwAAAdMIAAIC/AAB/wgAAgL8AADBAAACAvwAAIEAAAIC/AAAgQAAAAMAAADBAAAAAwAAAMMAAAHTCAAAwwAAAf8IAACDAAAB/wgAAIMAAAHTCAAAwQAAAdMIAACBAAAB0wgAAIEAAAH/CAAAwQAAAf8IAADDAAAAAwAAAIMAAAADAAAAgwAAAgL8AADDAAACAvwAAf0IAAIC/AAB0QgAAgL8AAHRCAAAAwAAAf0IAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -1009,16 +1009,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AACwvwAAAD8AAAC+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwPwAAAD8AAAC+AACwvwAAAD8AAAC+AACwvwAAAD8AAAA+AACwvwAAAL8AAAA+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwvwAAAL8AAAC+AACwvwAAAL8AAAA+AACwPwAAAL8AAAA+AACwPwAAAD8AAAC+AACwPwAAAD8AAAA+AACwvwAAAD8AAAA+AACwvwAAAD8AAAC+AACwPwAAAD8AAAC+AACwPwAAAL8AAAC+AACwPwAAAL8AAAA+AACwPwAAAD8AAAA+AACwvwAAAD8AAAA+AACwPwAAAD8AAAA+AACwPwAAAL8AAAA+AACwvwAAAL8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACwPwAAAD8AAAC+AACwvwAAAD8AAAC+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwvwAAAL8AAAA+AACwvwAAAL8AAAC+AACwvwAAAD8AAAC+AACwvwAAAD8AAAA+AACwvwAAAL8AAAA+AACwPwAAAL8AAAA+AACwPwAAAL8AAAC+AACwvwAAAL8AAAC+AACwvwAAAD8AAAA+AACwvwAAAD8AAAC+AACwPwAAAD8AAAC+AACwPwAAAD8AAAA+AACwPwAAAD8AAAA+AACwPwAAAD8AAAC+AACwPwAAAL8AAAC+AACwPwAAAL8AAAA+AACwPwAAAL8AAAA+AACwvwAAAL8AAAA+AACwvwAAAD8AAAA+AACwPwAAAD8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_j0l14"] -points = PackedVector3Array(-1.375, 0.5, -0.125, -1.375, -0.5, -0.125, 1.375, -0.5, -0.125, 1.375, 0.5, -0.125, -1.375, 0.5, 0.125, -1.375, -0.5, 0.125, 1.375, -0.5, 0.125, 1.375, 0.5, 0.125) +points = PackedVector3Array(1.375, 0.5, 0.125, 1.375, -0.5, 0.125, -1.375, 0.5, 0.125, -1.375, -0.5, 0.125, 1.375, 0.5, -0.125, 1.375, -0.5, -0.125, -1.375, 0.5, -0.125, -1.375, -0.5, -0.125) [sub_resource type="ArrayMesh" id="ArrayMesh_ir74b"] _surfaces = [{ "aabb": AABB(-1.375, -0.5, -0.125, 2.75, 1, 0.25), -"attribute_data": PackedByteArray("AABYwgAAAMAAAFjCAACAvwAAY8IAAIC/AABjwgAAAMAAACBAAAAAwAAAMEAAAADAAAAwQAAAgL8AACBAAACAvwAAIMAAAGPCAAAgwAAAWMIAADDAAABYwgAAMMAAAGPCAAAgQAAAY8IAADBAAABjwgAAMEAAAFjCAAAgQAAAWMIAACDAAAAAwAAAIMAAAIC/AAAwwAAAgL8AADDAAAAAwAAAWEIAAADAAABjQgAAAMAAAGNCAACAvwAAWEIAAIC/"), +"attribute_data": PackedByteArray("AABjwgAAAMAAAFjCAAAAwAAAWMIAAIC/AABjwgAAgL8AADBAAACAvwAAIEAAAIC/AAAgQAAAAMAAADBAAAAAwAAAMMAAAFjCAAAwwAAAY8IAACDAAABjwgAAIMAAAFjCAAAwQAAAWMIAACBAAABYwgAAIEAAAGPCAAAwQAAAY8IAADDAAAAAwAAAIMAAAADAAAAgwAAAgL8AADDAAACAvwAAY0IAAIC/AABYQgAAgL8AAFhCAAAAwAAAY0IAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -1027,16 +1027,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AACwvwAAAD8AAAC+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwPwAAAD8AAAC+AACwvwAAAD8AAAC+AACwvwAAAD8AAAA+AACwvwAAAL8AAAA+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwvwAAAL8AAAC+AACwvwAAAL8AAAA+AACwPwAAAL8AAAA+AACwPwAAAD8AAAC+AACwPwAAAD8AAAA+AACwvwAAAD8AAAA+AACwvwAAAD8AAAC+AACwPwAAAD8AAAC+AACwPwAAAL8AAAC+AACwPwAAAL8AAAA+AACwPwAAAD8AAAA+AACwvwAAAD8AAAA+AACwPwAAAD8AAAA+AACwPwAAAL8AAAA+AACwvwAAAL8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACwPwAAAD8AAAC+AACwvwAAAD8AAAC+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwvwAAAL8AAAA+AACwvwAAAL8AAAC+AACwvwAAAD8AAAC+AACwvwAAAD8AAAA+AACwvwAAAL8AAAA+AACwPwAAAL8AAAA+AACwPwAAAL8AAAC+AACwvwAAAL8AAAC+AACwvwAAAD8AAAA+AACwvwAAAD8AAAC+AACwPwAAAD8AAAC+AACwPwAAAD8AAAA+AACwPwAAAD8AAAA+AACwPwAAAD8AAAC+AACwPwAAAL8AAAC+AACwPwAAAL8AAAA+AACwPwAAAL8AAAA+AACwvwAAAL8AAAA+AACwvwAAAD8AAAA+AACwPwAAAD8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_atbr8"] -points = PackedVector3Array(-1.375, 0.5, -0.125, -1.375, -0.5, -0.125, 1.375, -0.5, -0.125, 1.375, 0.5, -0.125, -1.375, 0.5, 0.125, -1.375, -0.5, 0.125, 1.375, -0.5, 0.125, 1.375, 0.5, 0.125) +points = PackedVector3Array(1.375, 0.5, 0.125, 1.375, -0.5, 0.125, -1.375, 0.5, 0.125, -1.375, -0.5, 0.125, 1.375, 0.5, -0.125, 1.375, -0.5, -0.125, -1.375, 0.5, -0.125, -1.375, -0.5, -0.125) [sub_resource type="ArrayMesh" id="ArrayMesh_ymxwy"] _surfaces = [{ "aabb": AABB(-0.125, -0.5, -5.125, 0.25, 1, 10.25), -"attribute_data": PackedByteArray("AABXwgAAAMAAAFfCAACAvwAAWMIAAIC/AABYwgAAAMAAAATBAAAAwAAAAEAAAADAAAAAQAAAgL8AAATBAACAvwAAWMIAAATBAABXwgAABMEAAFfCAAAAQAAAWMIAAABAAABYQgAABMEAAFhCAAAAQAAAV0IAAABAAABXQgAABMEAAARBAAAAwAAABEEAAIC/AAAAwAAAgL8AAADAAAAAwAAAV0IAAADAAABYQgAAAMAAAFhCAACAvwAAV0IAAIC/"), +"attribute_data": PackedByteArray("AABYwgAAAMAAAFfCAAAAwAAAV8IAAIC/AABYwgAAgL8AAABAAACAvwD/A8EAAIC/AP8DwQAAAMAAAABAAAAAwAAAV8IAAABAAABYwgAAAEAAAFjCAP8DwQAAV8IA/wPBAABXQgAAAEAAAFdCAP8DwQAAWEIA/wPBAABYQgAAAEAAAADAAAAAwAD/A0EAAADAAP8DQQAAgL8AAADAAACAvwAAWEIAAIC/AABXQgAAgL8AAFdCAAAAwAAAWEIAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -1045,16 +1045,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AAAAvgAAAD8AAKTAAAAAvgAAAL8AAKTAAAAAPgAAAL8AAKTAAAAAPgAAAD8AAKTAAAAAvgAAAD8AAKTAAAAAvgAAAD8AAKRAAAAAvgAAAL8AAKRAAAAAvgAAAL8AAKTAAAAAPgAAAL8AAKTAAAAAvgAAAL8AAKTAAAAAvgAAAL8AAKRAAAAAPgAAAL8AAKRAAAAAPgAAAD8AAKTAAAAAPgAAAD8AAKRAAAAAvgAAAD8AAKRAAAAAvgAAAD8AAKTAAAAAPgAAAD8AAKTAAAAAPgAAAL8AAKTAAAAAPgAAAL8AAKRAAAAAPgAAAD8AAKRAAAAAvgAAAD8AAKRAAAAAPgAAAD8AAKRAAAAAPgAAAL8AAKRAAAAAvgAAAL8AAKRA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAAAAP+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//3///////7//f///////v/9///////+//3///////7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AAAAPgAAAD8AAKTAAAAAvgAAAD8AAKTAAAAAvgAAAL8AAKTAAAAAPgAAAL8AAKTAAAAAvgAAAL8AAKRAAAAAvgAAAL8A/qPAAAAAvgAAAD8A/qPAAAAAvgAAAD8AAKRAAAAAvgAAAL8AAKRAAAAAPgAAAL8AAKRAAAAAPgAAAL8A/qPAAAAAvgAAAL8A/qPAAAAAvgAAAD8AAKRAAAAAvgAAAD8A/qPAAAAAPgAAAD8A/qPAAAAAPgAAAD8AAKRAAAAAPgAAAD8AAKRAAAAAPgAAAD8A/qPAAAAAPgAAAL8A/qPAAAAAPgAAAL8AAKRAAAAAPgAAAL8AAKRAAAAAvgAAAL8AAKRAAAAAvgAAAD8AAKRAAAAAPgAAAD8AAKRA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAAAAP+//38AAAAA/7//fwAAAAD/v/9/AAAAAP+//3///////7//f///////v/9///////+//3///////7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_hlnns"] -points = PackedVector3Array(-0.125, 0.5, -5.125, -0.125, -0.5, -5.125, 0.125, -0.5, -5.125, 0.125, 0.5, -5.125, -0.125, 0.5, 5.125, -0.125, -0.5, 5.125, 0.125, -0.5, 5.125, 0.125, 0.5, 5.125) +points = PackedVector3Array(0.125, 0.5, 5.125, 0.125, -0.5, 5.125, -0.125, 0.5, 5.125, -0.125, -0.5, 5.125, 0.125, 0.5, -5.125, 0.125, -0.5, -5.125, -0.125, 0.5, -5.125, -0.125, -0.5, -5.125) [sub_resource type="ArrayMesh" id="ArrayMesh_6t31s"] _surfaces = [{ "aabb": AABB(-1.375, -0.5, -0.125, 2.75, 1, 0.25), -"attribute_data": PackedByteArray("AABYwgAAAMAAAFjCAACAvwAAY8IAAIC/AABjwgAAAMAAAAjBAAAAwAAABMEAAADAAAAEwQAAgL8AAAjBAACAvwAACEEAAGPCAAAIQQAAWMIAAARBAABYwgAABEEAAGPCAAAIwQAAY8IAAATBAABjwgAABMEAAFjCAAAIwQAAWMIAAAhBAAAAwAAACEEAAIC/AAAEQQAAgL8AAARBAAAAwAAAWEIAAADAAABjQgAAAMAAAGNCAACAvwAAWEIAAIC/"), +"attribute_data": PackedByteArray("AABjwgAAAMAAAFjCAAAAwAAAWMIAAIC/AABjwgAAgL8AAATBAACAvwAACMEAAIC/AAAIwQAAAMAAAATBAAAAwAAABEEAAFjCAAAEQQAAY8IAAAhBAABjwgAACEEAAFjCAAAEwQAAWMIAAAjBAABYwgAACMEAAGPCAAAEwQAAY8IAAARBAAAAwAAACEEAAADAAAAIQQAAgL8AAARBAACAvwAAY0IAAIC/AABYQgAAgL8AAFhCAAAAwAAAY0IAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -1063,16 +1063,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AACwvwAAAD8AAAC+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwPwAAAD8AAAC+AACwvwAAAD8AAAC+AACwvwAAAD8AAAA+AACwvwAAAL8AAAA+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwvwAAAL8AAAC+AACwvwAAAL8AAAA+AACwPwAAAL8AAAA+AACwPwAAAD8AAAC+AACwPwAAAD8AAAA+AACwvwAAAD8AAAA+AACwvwAAAD8AAAC+AACwPwAAAD8AAAC+AACwPwAAAL8AAAC+AACwPwAAAL8AAAA+AACwPwAAAD8AAAA+AACwvwAAAD8AAAA+AACwPwAAAD8AAAA+AACwPwAAAL8AAAA+AACwvwAAAL8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACwPwAAAD8AAAC+AACwvwAAAD8AAAC+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwvwAAAL8AAAA+AACwvwAAAL8AAAC+AACwvwAAAD8AAAC+AACwvwAAAD8AAAA+AACwvwAAAL8AAAA+AACwPwAAAL8AAAA+AACwPwAAAL8AAAC+AACwvwAAAL8AAAC+AACwvwAAAD8AAAA+AACwvwAAAD8AAAC+AACwPwAAAD8AAAC+AACwPwAAAD8AAAA+AACwPwAAAD8AAAA+AACwPwAAAD8AAAC+AACwPwAAAL8AAAC+AACwPwAAAL8AAAA+AACwPwAAAL8AAAA+AACwvwAAAL8AAAA+AACwvwAAAD8AAAA+AACwPwAAAD8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_jitrn"] -points = PackedVector3Array(-1.375, 0.5, -0.125, -1.375, -0.5, -0.125, 1.375, -0.5, -0.125, 1.375, 0.5, -0.125, -1.375, 0.5, 0.125, -1.375, -0.5, 0.125, 1.375, -0.5, 0.125, 1.375, 0.5, 0.125) +points = PackedVector3Array(1.375, 0.5, 0.125, 1.375, -0.5, 0.125, -1.375, 0.5, 0.125, -1.375, -0.5, 0.125, 1.375, 0.5, -0.125, 1.375, -0.5, -0.125, -1.375, 0.5, -0.125, -1.375, -0.5, -0.125) [sub_resource type="ArrayMesh" id="ArrayMesh_y5mlj"] _surfaces = [{ "aabb": AABB(-1.375, -0.5, -0.125, 2.75, 1, 0.25), -"attribute_data": PackedByteArray("AAB0wgAAAMAAAHTCAACAvwAAf8IAAIC/AAB/wgAAAMAAAPDAAAAAwAAA6MAAAADAAADowAAAgL8AAPDAAACAvwAA8EAAAH/CAADwQAAAdMIAAOhAAAB0wgAA6EAAAH/CAADwwAAAf8IAAOjAAAB/wgAA6MAAAHTCAADwwAAAdMIAAPBAAAAAwAAA8EAAAIC/AADoQAAAgL8AAOhAAAAAwAAAdEIAAADAAAB/QgAAAMAAAH9CAACAvwAAdEIAAIC/"), +"attribute_data": PackedByteArray("AAB/wgAAAMAAAHTCAAAAwAAAdMIAAIC/AAB/wgAAgL8AAOjAAACAvwAA8MAAAIC/AADwwAAAAMAAAOjAAAAAwAAA6EAAAHTCAADoQAAAf8IAAPBAAAB/wgAA8EAAAHTCAADowAAAdMIAAPDAAAB0wgAA8MAAAH/CAADowAAAf8IAAOhAAAAAwAAA8EAAAADAAADwQAAAgL8AAOhAAACAvwAAf0IAAIC/AAB0QgAAgL8AAHRCAAAAwAAAf0IAAADA"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -1081,16 +1081,16 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AACwvwAAAD8AAAC+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwPwAAAD8AAAC+AACwvwAAAD8AAAC+AACwvwAAAD8AAAA+AACwvwAAAL8AAAA+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwvwAAAL8AAAC+AACwvwAAAL8AAAA+AACwPwAAAL8AAAA+AACwPwAAAD8AAAC+AACwPwAAAD8AAAA+AACwvwAAAD8AAAA+AACwvwAAAD8AAAC+AACwPwAAAD8AAAC+AACwPwAAAL8AAAC+AACwPwAAAL8AAAA+AACwPwAAAD8AAAA+AACwvwAAAD8AAAA+AACwPwAAAD8AAAA+AACwPwAAAL8AAAA+AACwvwAAAL8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACwPwAAAD8AAAC+AACwvwAAAD8AAAC+AACwvwAAAL8AAAC+AACwPwAAAL8AAAC+AACwvwAAAL8AAAA+AACwvwAAAL8AAAC+AACwvwAAAD8AAAC+AACwvwAAAD8AAAA+AACwvwAAAL8AAAA+AACwPwAAAL8AAAA+AACwPwAAAL8AAAC+AACwvwAAAL8AAAC+AACwvwAAAD8AAAA+AACwvwAAAD8AAAC+AACwPwAAAD8AAAC+AACwPwAAAD8AAAA+AACwPwAAAD8AAAA+AACwPwAAAD8AAAC+AACwPwAAAL8AAAC+AACwPwAAAL8AAAA+AACwPwAAAL8AAAA+AACwvwAAAL8AAAA+AACwvwAAAD8AAAA+AACwPwAAAD8AAAA+/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_0gevx"] -points = PackedVector3Array(-1.375, 0.5, -0.125, -1.375, -0.5, -0.125, 1.375, -0.5, -0.125, 1.375, 0.5, -0.125, -1.375, 0.5, 0.125, -1.375, -0.5, 0.125, 1.375, -0.5, 0.125, 1.375, 0.5, 0.125) +points = PackedVector3Array(1.375, 0.5, 0.125, 1.375, -0.5, 0.125, -1.375, 0.5, 0.125, -1.375, -0.5, 0.125, 1.375, 0.5, -0.125, 1.375, -0.5, -0.125, -1.375, 0.5, -0.125, -1.375, -0.5, -0.125) [sub_resource type="ArrayMesh" id="ArrayMesh_a4va7"] _surfaces = [{ "aabb": AABB(-1.25, -0.125, -2.5, 2.5, 0.25, 5), -"attribute_data": PackedByteArray("AAA+xAAAUMIAAD7EAABAwgAASMQAAEDCAABIxAAAUMIAAEBCAABQwgAAAEMAAFDCAAAAQwAAQMIAAEBCAABAwgAAQMIAAEjEAABAwgAAPsQAAADDAAA+xAAAAMMAAEjEAABAQgAASMQAAABDAABIxAAAAEMAAD7EAABAQgAAPsQAAEDCAABQwgAAQMIAAEDCAAAAwwAAQMIAAADDAABQwgAAPkQAAFDCAABIRAAAUMIAAEhEAABAwgAAPkQAAEDC"), +"attribute_data": PackedByteArray("AABIxAAAUMIAAD7EAABQwgAAPsQAAEDCAABIxAAAQMIAAABDAABAwgAAQEIAAEDCAABAQgAAUMIAAABDAABQwgAAAMMAAD7EAAAAwwAASMQAAEDCAABIxAAAQMIAAD7EAAAAQwAAPsQAAEBCAAA+xAAAQEIAAEjEAAAAQwAASMQAAADDAABQwgAAQMIAAFDCAABAwgAAQMIAAADDAABAwgAASEQAAEDCAAA+RAAAQMIAAD5EAABQwgAASEQAAFDC"), "format": 34359742487, "index_count": 36, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcA"), @@ -1099,11 +1099,11 @@ _surfaces = [{ "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 24, -"vertex_data": PackedByteArray("AACgvwAAAD4AACDAAACgvwAAAL4AACDAAACgPwAAAL4AACDAAACgPwAAAD4AACDAAACgvwAAAD4AACDAAACgvwAAAD4AACBAAACgvwAAAL4AACBAAACgvwAAAL4AACDAAACgPwAAAL4AACDAAACgvwAAAL4AACDAAACgvwAAAL4AACBAAACgPwAAAL4AACBAAACgPwAAAD4AACDAAACgPwAAAD4AACBAAACgvwAAAD4AACBAAACgvwAAAD4AACDAAACgPwAAAD4AACDAAACgPwAAAL4AACDAAACgPwAAAL4AACBAAACgPwAAAD4AACBAAACgvwAAAD4AACBAAACgPwAAAD4AACBAAACgPwAAAL4AACBAAACgvwAAAL4AACBA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACgPwAAAD4AACDAAACgvwAAAD4AACDAAACgvwAAAL4AACDAAACgPwAAAL4AACDAAACgvwAAAL4AACBAAACgvwAAAL4AACDAAACgvwAAAD4AACDAAACgvwAAAD4AACBAAACgvwAAAL4AACBAAACgPwAAAL4AACBAAACgPwAAAL4AACDAAACgvwAAAL4AACDAAACgvwAAAD4AACBAAACgvwAAAD4AACDAAACgPwAAAD4AACDAAACgPwAAAD4AACBAAACgPwAAAD4AACBAAACgPwAAAD4AACDAAACgPwAAAL4AACDAAACgPwAAAL4AACBAAACgPwAAAL4AACBAAACgvwAAAL4AACBAAACgvwAAAD4AACBAAACgPwAAAD4AACBA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] [sub_resource type="ArrayOccluder3D" id="ArrayOccluder3D_iwo0c"] -vertices = PackedVector3Array(-1.25, 0.125, -2.5, -1.25, -0.125, -2.5, 1.25, -0.125, -2.5, 1.25, 0.125, -2.5, -1.25, 0.125, -2.5, -1.25, 0.125, 2.5, -1.25, -0.125, 2.5, -1.25, -0.125, -2.5, 1.25, -0.125, -2.5, -1.25, -0.125, -2.5, -1.25, -0.125, 2.5, 1.25, -0.125, 2.5, 1.25, 0.125, -2.5, 1.25, 0.125, 2.5, -1.25, 0.125, 2.5, -1.25, 0.125, -2.5, 1.25, 0.125, -2.5, 1.25, -0.125, -2.5, 1.25, -0.125, 2.5, 1.25, 0.125, 2.5, -1.25, 0.125, 2.5, 1.25, 0.125, 2.5, 1.25, -0.125, 2.5, -1.25, -0.125, 2.5) +vertices = PackedVector3Array(1.25, 0.125, -2.5, -1.25, 0.125, -2.5, -1.25, -0.125, -2.5, 1.25, -0.125, -2.5, -1.25, -0.125, 2.5, -1.25, -0.125, -2.5, -1.25, 0.125, -2.5, -1.25, 0.125, 2.5, -1.25, -0.125, 2.5, 1.25, -0.125, 2.5, 1.25, -0.125, -2.5, -1.25, -0.125, -2.5, -1.25, 0.125, 2.5, -1.25, 0.125, -2.5, 1.25, 0.125, -2.5, 1.25, 0.125, 2.5, 1.25, 0.125, 2.5, 1.25, 0.125, -2.5, 1.25, -0.125, -2.5, 1.25, -0.125, 2.5, 1.25, -0.125, 2.5, -1.25, -0.125, 2.5, -1.25, 0.125, 2.5, 1.25, 0.125, 2.5) indices = PackedInt32Array(0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23) [sub_resource type="NavigationMesh" id="NavigationMesh_khac5"] @@ -1119,7 +1119,6 @@ metadata/test_scene = "res://IsoTest/IsoMapTest2.tscn" script = ExtResource("1_ifqpu") local_map_file = "uid://b7byalhkghaan" map_settings = ExtResource("2_dvbie") -metadata/_custom_type_script = "uid://kno58homctew" [node name="entity_0_worldspawn" type="StaticBody3D" parent="FuncGodotMap" groups=["Solid"]] collision_mask = 0 @@ -1605,6 +1604,7 @@ transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -7.2 [node name="entity_4_actor_controlpad" parent="FuncGodotMap" instance=ExtResource("84_r75it")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -10, 2, -1.5) TargetGroup = "door_intro" +ActivationType = 6 [node name="entity_5_actor_door_1" parent="FuncGodotMap" instance=ExtResource("82_3dn6b")] transform = Transform3D(1.1924881e-08, 0, -1, 0, 1, 0, 1, 0, 1.1924881e-08, -5.25, 2, 1.5) @@ -1662,64 +1662,77 @@ transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -0.5 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 1.5, 3.5) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_22_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 1.5, 4) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_23_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.5, 1.5, 5.5) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_24_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.5, 1.5, 6.5) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_25_actor_box_yellow" parent="FuncGodotMap" instance=ExtResource("66_wnmjb")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 4.5, 1.25, 5) Health = 10.0 +ActivationType = 6 [node name="entity_26_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 5.5, 1.25, 5) Health = 10.0 +ActivationType = 6 [node name="entity_27_actor_box_green" parent="FuncGodotMap" instance=ExtResource("64_twvas")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 4.5, 1.25, 6) Health = 10.0 +ActivationType = 6 [node name="entity_28_actor_box_green" parent="FuncGodotMap" instance=ExtResource("64_twvas")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 5.5, 1.25, 6) Health = 10.0 +ActivationType = 6 [node name="entity_29_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("93_q7n60")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 1.25, 7) Health = 10.0 +ActivationType = 6 [node name="entity_30_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("93_q7n60")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 1.25, 7) Health = 10.0 +ActivationType = 6 [node name="entity_31_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("93_q7n60")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 1.25, 6) Health = 10.0 +ActivationType = 6 [node name="entity_32_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("93_q7n60")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 1.25, 5) Health = 10.0 +ActivationType = 6 [node name="entity_33_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("93_q7n60")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 1.25, 7) Health = 10.0 +ActivationType = 6 [node name="entity_34_actor_door_1" parent="FuncGodotMap" instance=ExtResource("82_3dn6b")] transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 10.25, 2, -1.5) GroupName = "door_2" [node name="entity_35_func_move" type="AnimatableBody3D" parent="FuncGodotMap"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.5, 2, -4.25) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.5, 2, -4.250122) collision_mask = 0 sync_to_physics = false script = ExtResource("97_uf2ve") @@ -1745,10 +1758,12 @@ TargetGroup = "wall_trap_1" [node name="entity_37_actor_box_green" parent="FuncGodotMap" instance=ExtResource("64_twvas")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 16, 1.25, -3.5) Health = 10.0 +ActivationType = 6 [node name="entity_38_actor_box_green" parent="FuncGodotMap" instance=ExtResource("64_twvas")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 16, 1.75, -3.5) Health = 10.0 +ActivationType = 6 [node name="entity_39_actor_alarmbox" parent="FuncGodotMap" instance=ExtResource("94_e180r")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 8, 2.25, -3.75) @@ -1776,7 +1791,7 @@ transform = Transform3D(1.1924881e-08, 0, -1, 0, 1, 0, 1, 0, 1.1924881e-08, -4.5 transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 13, 1.5, -3.5) [node name="entity_47_func_move" type="AnimatableBody3D" parent="FuncGodotMap"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21, 2, -4.25) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21, 2, -4.250122) collision_mask = 0 sync_to_physics = false script = ExtResource("97_uf2ve") @@ -1797,6 +1812,7 @@ Script = ExtResource("105_dscgh") ActivationGroup = "wall_trap_1" EmitOnStart = false Health = 5.0 +ActivationType = 6 [node name="entity_49_actor_emitter_wall" parent="FuncGodotMap" instance=ExtResource("104_l7wvl")] transform = Transform3D(1, 0, 1.7484555e-07, 0, 1, 0, -1.7484555e-07, 0, 1, 21.125, 1.25, -4.875) @@ -1804,9 +1820,10 @@ Script = ExtResource("105_dscgh") ActivationGroup = "wall_trap_1" EmitOnStart = false Health = 5.0 +ActivationType = 6 [node name="entity_50_trigger_area" type="Area3D" parent="FuncGodotMap"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.25, 1.25, 1.625) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.250122, 1.25, 1.625) collision_layer = 4 collision_mask = 2 monitorable = false @@ -1850,36 +1867,41 @@ transform = Transform3D(1.1924881e-08, 0, -1, 0, 1, 0, 1, 0, 1.1924881e-08, 8, 2 [node name="entity_55_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 18.5, 1.25, -3.75) Health = 10.0 +ActivationType = 6 [node name="entity_56_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 18.5, 1.75, -3.75) Health = 10.0 +ActivationType = 6 [node name="entity_57_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 18.5, 1.25, -3.25) Health = 10.0 +ActivationType = 6 [node name="entity_58_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 17.5, 1.25, -3.75) Health = 10.0 +ActivationType = 6 [node name="entity_59_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 23.5, 1.25, -3.5) Health = 10.0 +ActivationType = 6 [node name="entity_60_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 23.5, 1.75, -3.5) Health = 10.0 +ActivationType = 6 [node name="entity_61_acid_area" type="Area3D" parent="FuncGodotMap" groups=["Acid"]] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 36.5, 0, -1.75) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 36.5, 0, -1.7501221) collision_layer = 256 collision_mask = 2 script = ExtResource("41_s7kdw") [node name="entity_61_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_61_acid_area"] cast_shadow = 0 -gi_mode = 0 mesh = SubResource("ArrayMesh_6ir23") [node name="entity_61_occluder_instance" type="OccluderInstance3D" parent="FuncGodotMap/entity_61_acid_area"] @@ -1948,43 +1970,52 @@ transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 40, [node name="entity_81_actor_box_green" parent="FuncGodotMap" instance=ExtResource("64_twvas")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 38, 1.25, -8.5) Health = 10.0 +ActivationType = 6 [node name="entity_82_actor_capacitor_mini" parent="FuncGodotMap" instance=ExtResource("46_pjwli")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 26.5, 1.5, -7.5) Health = 10.0 +ActivationType = 6 [node name="entity_83_actor_capacitor_mini" parent="FuncGodotMap" instance=ExtResource("46_pjwli")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 26.5, 1.5, -6.5) Health = 10.0 +ActivationType = 6 [node name="entity_84_actor_capacitor_mini" parent="FuncGodotMap" instance=ExtResource("46_pjwli")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 26.5, 1.5, -8.5) Health = 10.0 +ActivationType = 6 [node name="entity_85_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.5, 1.5, 4.25) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_86_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.5, 1.5, 5) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_87_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.5, 1.5, 5.75) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_88_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.5, 1.5, 6.5) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_89_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.5, 1.5, 3.5) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_90_actor_tube_corner" parent="FuncGodotMap" instance=ExtResource("95_58tnu")] transform = Transform3D(-1.1924881e-08, 1.0425061e-15, -1, -8.742278e-08, -1, 0, -1, 8.742278e-08, 1.1924881e-08, 33.5, 1.5, -0.5) @@ -2010,51 +2041,63 @@ transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 46.5 [node name="entity_96_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 42.5, 1.25, -2.5) Health = 10.0 +ActivationType = 6 [node name="entity_97_actor_box_green" parent="FuncGodotMap" instance=ExtResource("64_twvas")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 42.25, 1.25, -1.5) Health = 10.0 +ActivationType = 6 [node name="entity_98_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("93_q7n60")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 43.75, 1.25, -5) Health = 10.0 +ActivationType = 6 [node name="entity_99_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 45.5, 1.25, 2) Health = 10.0 +ActivationType = 6 [node name="entity_100_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 45.5, 1.25, 3) Health = 10.0 +ActivationType = 6 [node name="entity_101_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 43, 1.5, -1.5) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_102_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 46.5, 1.5, 0.5) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_103_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 36.75, 1.5, 6.75) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_104_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 38, 1.5, 6.75) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_105_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 39, 1.5, 6.75) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_106_actor_securitycamera" parent="FuncGodotMap" instance=ExtResource("81_5lonr")] transform = Transform3D(1.1924881e-08, 0, -1, 0, 1, 0, 1, 0, 1.1924881e-08, 40, 2.25, 10.25) +ActivationType = 6 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_107_actor_table" parent="FuncGodotMap" instance=ExtResource("69_hc1qc")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 42.25, 1.25, 13) @@ -2062,6 +2105,7 @@ transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 42.2 [node name="entity_108_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 40.5, 1.25, 11) Health = 10.0 +ActivationType = 6 [node name="entity_109_actor_chest_1" parent="FuncGodotMap" instance=ExtResource("86_ncvy1")] transform = Transform3D(1.1924881e-08, 0, -1, 0, 1, 0, 1, 0, 1.1924881e-08, 40.5, 1.5, 12) @@ -2111,6 +2155,7 @@ ActivationGroup = "danmaku_room_1" EmitOnStart = false Indestructible = true Health = 5.0 +ActivationType = 6 [node name="entity_120_actor_controlpad" parent="FuncGodotMap" instance=ExtResource("84_r75it")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 52.5, 2, 8.75) @@ -2255,6 +2300,7 @@ transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 59, [node name="entity_142_actor_controlpad" parent="FuncGodotMap" instance=ExtResource("84_r75it")] transform = Transform3D(1.1924881e-08, 0, -1, 0, 1, 0, 1, 0, 1.1924881e-08, 47.5, 1.75, -2.5) TargetGroup = "secret_001" +ActivationType = 6 [node name="entity_143_actor_forcefield_1" parent="FuncGodotMap" instance=ExtResource("51_oiepa")] transform = Transform3D(1.1924881e-08, 0, -1, 0, 1, 0, 1, 0, 1.1924881e-08, 51.25, 2, 14.5) @@ -2285,7 +2331,6 @@ script = ExtResource("41_s7kdw") [node name="entity_146_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_146_acid_area"] cast_shadow = 0 -gi_mode = 0 mesh = SubResource("ArrayMesh_maikd") [node name="entity_146_occluder_instance" type="OccluderInstance3D" parent="FuncGodotMap/entity_146_acid_area"] @@ -2328,29 +2373,35 @@ shape = SubResource("ConvexPolygonShape3D_hlnns") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 48, 1.5, -1) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_151_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 56, 1.5, 3.5) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_152_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 60, 1.5, 4.5) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_153_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("62_h1kss")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 48, 1.5, 2) Health = 5.0 DamageResistances = Array[ExtResource("63_egc4b")]([]) +ActivationType = 6 [node name="entity_154_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 62.5, 1.25, 3) Health = 10.0 +ActivationType = 6 [node name="entity_155_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 62.5, 1.25, 4) Health = 10.0 +ActivationType = 6 [node name="entity_156_actor_tube_junction" parent="FuncGodotMap" instance=ExtResource("96_aly21")] transform = Transform3D(4.371139e-08, 1, -8.742278e-08, 1, -4.371139e-08, 0, -3.821371e-15, -8.742278e-08, -1, 50, 1.5, -5.5) @@ -2405,46 +2456,57 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 49, 1.5, -4.5) [node name="entity_168_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("93_q7n60")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 49.5, 1.25, -2.5) Health = 10.0 +ActivationType = 6 [node name="entity_169_actor_box_green" parent="FuncGodotMap" instance=ExtResource("64_twvas")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 49.5, 1.75, -2.5) Health = 10.0 +ActivationType = 6 [node name="entity_170_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 48.5, 1.25, -2.5) Health = 10.0 +ActivationType = 6 [node name="entity_171_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 48, 1.25, 1.25) Health = 10.0 +ActivationType = 6 [node name="entity_172_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 49, 1.25, -1.75) Health = 10.0 +ActivationType = 6 [node name="entity_173_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 48.5, 1.25, -7.75) Health = 10.0 +ActivationType = 6 [node name="entity_174_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 49.5, 1.25, -7.75) Health = 10.0 +ActivationType = 6 [node name="entity_175_actor_box_red" parent="FuncGodotMap" instance=ExtResource("65_8dx2c")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 50.5, 1.75, -3) Health = 10.0 +ActivationType = 6 [node name="entity_176_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 48, 1.25, -1.75) Health = 10.0 +ActivationType = 6 [node name="entity_177_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 48.5, 1.75, -1.75) Health = 10.0 +ActivationType = 6 [node name="entity_178_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("40_01cja")] transform = Transform3D(1.1924881e-08, 0, -1, 0, 1, 0, 1, 0, 1.1924881e-08, 48, 1.75, -2.5) Health = 10.0 +ActivationType = 6 [node name="entity_179_actor_teleporter" parent="FuncGodotMap" instance=ExtResource("92_f8yqq")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 30.5, 1.0625, -11.5) @@ -2461,7 +2523,7 @@ transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 67, [node name="entity_182_actor_keypad" parent="FuncGodotMap" node_paths=PackedStringArray("Targets") instance=ExtResource("56_pmuwb")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 68.25, 2, -14.5) Targets = Array[ExtResource("63_egc4b")]([]) -RequirementKeys = Array[StringName]([&"0"]) +RequirementKeys = Array[StringName]([&"BLUE_KEY"]) [node name="entity_183_actor_table" parent="FuncGodotMap" instance=ExtResource("69_hc1qc")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 67.75, 1.25, -10) @@ -2498,37 +2560,20 @@ transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 34.5 MapId = &"" IsEnabled = true -[node name="layer_0_Shrouds" type="Node3D" parent="FuncGodotMap"] -metadata/_tb_type = "_tb_layer" - -[node name="entity_195_func_shroud" type="StaticBody3D" parent="FuncGodotMap/layer_0_Shrouds"] +[node name="entity_194_func_shroud" type="StaticBody3D" parent="FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 48.75, 2.875, 5.5) visible = false script = ExtResource("57_pmuwb") TargetName = "secret_001" OneTime = true -metadata/func_godot_mesh_data = {} -[node name="entity_195_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/layer_0_Shrouds/entity_195_func_shroud"] +[node name="entity_194_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_194_func_shroud"] cast_shadow = 0 -gi_mode = 0 mesh = SubResource("ArrayMesh_a4va7") -[node name="entity_195_occluder_instance" type="OccluderInstance3D" parent="FuncGodotMap/layer_0_Shrouds/entity_195_func_shroud"] +[node name="entity_194_occluder_instance" type="OccluderInstance3D" parent="FuncGodotMap/entity_194_func_shroud"] occluder = SubResource("ArrayOccluder3D_iwo0c") -[node name="layer_1_Contraptions" type="Node3D" parent="FuncGodotMap"] -metadata/_tb_type = "_tb_layer" - -[node name="group_14_Elevator_pit" type="Node3D" parent="FuncGodotMap/layer_1_Contraptions"] -metadata/_tb_type = "_tb_group" - -[node name="group_16_Elevator_Base" type="Node3D" parent="FuncGodotMap/layer_1_Contraptions/group_14_Elevator_pit"] -metadata/_tb_type = "_tb_group" - -[node name="group_17_Elevator_Base" type="Node3D" parent="FuncGodotMap/layer_1_Contraptions/group_14_Elevator_pit"] -metadata/_tb_type = "_tb_group" - [node name="Props" type="Node3D" parent="."] [node name="BlueKeycard" type="Marker3D" parent="Props"] diff --git a/IsoTest/Factory4.tscn b/IsoTest/Factory4.tscn index fb527f30..a9264e4c 100644 --- a/IsoTest/Factory4.tscn +++ b/IsoTest/Factory4.tscn @@ -7,7 +7,7 @@ [ext_resource type="Script" uid="uid://ba0tf7ihw4hpp" path="res://Scripts/Misc/CameraController3D.cs" id="5_unwtk"] [ext_resource type="PackedScene" uid="uid://b3tyacxxw88lx" path="res://Scenes/Utils/StreamPlayerWithName.tscn" id="7_mtei5"] [ext_resource type="Resource" uid="uid://b12ldmtfhlvf0" path="res://Resources/Music/Apparitions_Stalk_The_Factory.tres" id="8_bv7qr"] -[ext_resource type="Script" uid="uid://kno58homctew" path="res://addons/func_godot/src/map/func_godot_map.gd" id="8_f1ieg"] +[ext_resource type="Script" uid="uid://cwu5cf7a0awcd" path="res://addons/func_godot/src/map/func_godot_map.gd" id="8_f1ieg"] [ext_resource type="Resource" uid="uid://cx41lsryg5wpm" path="res://3D/TrenchBroom/map_settings.tres" id="9_unwtk"] [ext_resource type="Script" uid="uid://oq2ep51w11u5" path="res://3D/TrenchBroom/EntityScripts/Solid/worldspawn.gd" id="10_eflie"] [ext_resource type="Texture2D" uid="uid://cyg2snr1w5xw5" path="res://addons/func_godot/textures/default_texture.png" id="11_mtei5"] @@ -22,44 +22,44 @@ reflected_light_source = 1 [sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_w45nv"] -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_b3peu"] +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mtei5"] albedo_texture = ExtResource("11_mtei5") metallic_specular = 0.0 texture_filter = 2 -[sub_resource type="ArrayMesh" id="ArrayMesh_04e2y"] +[sub_resource type="ArrayMesh" id="ArrayMesh_bv7qr"] _surfaces = [{ -"aabb": AABB(-4, 0.5, -4, 8, 2.5, 8), -"attribute_data": PackedByteArray("AACAPwAAgL4AAIA/AAAAvgAAgL8AAAC+AACAvwAAgL4AAIC/AACAvgAAgD8AAIC+AACAPwAAAL4AAIC/AAAAvgAAgD8AAIC/AACAPwAAgD8AAIC/AACAPwAAgL8AAIC/AACAvwAAgL8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvgAAgD8AAAC+AACAvwAAAL4AAIC/AACAvgAAgL8AAIC+AACAPwAAgL4AAIA/AAAAvgAAgL8AAAC+AACAPwAAQL8AAIA/AACAvgAAgL8AAIC+AACAvwAAQL8AAIC/AABAvwAAYL8AAEC/AABgvwAAgL4AAIC/AACAvgAAgD8AAIC/AACAPwAAgD8AAGA/AACAPwAAYD8AAIC/AACAvwAAgL8AAGC/AACAvwAAYL8AAIA/AACAvwAAgD8AAIA/AABAvwAAgD8AAIC+AABgPwAAgL4AAGA/AABAvwAAgL8AAEC/AACAPwAAQL8AAIA/AACAvgAAgL8AAIC+AACAPwAAIL8AAIA/AAAAvgAAYD8AAAC+AABgPwAAIL8AAGC/AAAgvwAAgD8AACC/AACAPwAAAL4AAGC/AAAAvgAAYD8AAGA/AABgPwAAgD8AAIC/AACAPwAAgL8AAGA/AABgvwAAYD8AAIA/AABgPwAAgD8AAIA/AABgvwAAgD8AAGA/AAAgvwAAYD8AAAC+AACAvwAAAL4AAIC/AAAgvwAAgL8AACC/AABgvwAAIL8AAGC/AAAAvgAAgL8AAAC+AAAAvwAAIL8AAAC/AAAAvgAAIL8AAAC+AAAgvwAAIL8AAGC/AAAgvwAAgD8AACC/AACAPwAAAL4AAGC/AAAAvgAAYD8AACC/AABgPwAAAL8AAIC/AAAAvwAAgL8AACC/AABgvwAAIL8AAIA/AAAgvwAAgD8AAAC/AABgvwAAAL8AAGA/AAAgvwAAYD8AAAC+AACAvwAAAL4AAIC/AAAgvwAAAD8AACC/AAAgPwAAIL8AACA/AAAAvgAAAD8AAAC+AABAPwAAQL8AAEA/AACAvgAAgL8AAIC+AACAvwAAQL8AAAA/AABAvwAAID8AAEC/AAAgPwAAgL4AAAA/AACAvgAAAL8AAIC/AAAAvwAAQD8AACC/AABAPwAAIL8AAIC/AAAAPwAAgL8AACA/AACAvwAAID8AAEA/AAAAPwAAQD8AAAC/AABAvwAAAL8AAIC+AAAgvwAAgL4AACC/AABAvwAAQL8AAEC/AACAPwAAQL8AAIA/AACAvgAAQL8AAIC+"), +"aabb": AABB(-4.000244, 0.5, -4.000244, 8.000244, 2.5, 8.000244), +"attribute_data": PackedByteArray("AACAvwAAgL4AAoA/AACAvgACgD8AAAC+AACAvwAAAL4AAIA/AAAAvgACgL8AAAC+AAKAvwAAgL4AAIA/AACAvgAAgL8AAoA/AACAvwAAgL8AAoA/AACAvwACgD8AAoA/AACAPwACgD8AAoC/AAKAPwACgL8AAIC/AACAPwAAgL8AAIC/AACAvgACgD8AAIC+AAKAPwAAAL4AAIC/AAAAvgAAgD8AAAC+AAKAvwAAAL4AAoC/AACAvgAAgD8AAIC+AACAvwAAQL8AAoA/AABAvwACgD8AAIC+AACAvwAAgL4AAGC/AACAvgACgL8AAIC+AAKAvwAAQL8AAGC/AABAvwAAYD8AAoA/AABgPwAAgL8AAoA/AACAvwACgD8AAoA/AABgvwACgD8AAoC/AAKAPwACgL8AAIC/AABgvwAAgL8AAGA/AABAvwACgD8AAEC/AAKAPwAAgL4AAGA/AACAvgAAgD8AAIC+AAKAvwAAgL4AAoC/AABAvwAAgD8AAEC/AABgPwAAIL8AAoA/AAAgvwACgD8AAAC+AABgPwAAAL4AAIA/AAAAvgAAYL8AAAC+AABgvwAAIL8AAIA/AAAgvwAAgL8AAoA/AACAvwAAYD8AAGA/AABgPwAAYD8AAoA/AACAPwACgD8AAGC/AAKAPwAAYL8AAGA/AACAPwAAYD8AAIC/AAAgvwAAYD8AACC/AABgPwAAAL4AAIC/AAAAvgAAYL8AAAC+AAKAvwAAAL4AAoC/AAAgvwAAYL8AACC/AAAgvwAAIL8AAAC/AAAgvwAAAL8AAAC+AAAgvwAAAL4AAIA/AAAAvgAAYL8AAAC+AABgvwAAIL8AAIA/AAAgvwAAgL8AAAC/AACAvwAAIL8AAGA/AAAgvwAAYD8AAAC/AACAPwAAAL8AAGC/AAAAvwAAYL8AACC/AACAPwAAIL8AAIC/AAAgvwAAYD8AACC/AABgPwAAAL4AAIC/AAAAvgAAID8AAAC+AAAAPwAAAL4AAAA/AAAgvwAAID8AACC/AACAvwAAQL8AAEA/AABAvwAAQD8AAIC+AACAvwAAgL4AACA/AACAvgAAAD8AAIC+AAAAPwAAQL8AACA/AABAvwAAIL8AAEA/AAAgvwAAgL8AAAC/AACAvwAAAL8AAEA/AAAgPwAAQD8AAAA/AABAPwAAAD8AAIC/AAAgPwAAgL8AACC/AABAvwAAAL8AAEC/AAAAvwAAgL4AACC/AACAvgAAgD8AAIC+AABAvwAAgL4AAEC/AABAvwAAgD8AAEC/"), "format": 34359742487, "index_count": 180, "index_data": PackedByteArray("AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAGAAZABoAGAAaABsAHAAdAB4AHAAeAB8AIAAhACIAIAAiACMAJAAlACYAJAAmACcAKAApACoAKAAqACsALAAtAC4ALAAuAC8AMAAxADIAMAAyADMANAA1ADYANAA2ADcAOAA5ADoAOAA6ADsAPAA9AD4APAA+AD8AQABBAEIAQABCAEMARABFAEYARABGAEcASABJAEoASABKAEsATABNAE4ATABOAE8AUABRAFIAUABSAFMAVABVAFYAVABWAFcAWABZAFoAWABaAFsAXABdAF4AXABeAF8AYABhAGIAYABiAGMAZABlAGYAZABmAGcAaABpAGoAaABqAGsAbABtAG4AbABuAG8AcABxAHIAcAByAHMAdAB1AHYAdAB2AHcA"), -"material": SubResource("StandardMaterial3D_b3peu"), +"material": SubResource("StandardMaterial3D_mtei5"), "name": "__TB_empty", "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 120, -"vertex_data": PackedByteArray("AACAwAAAgD8AAIDAAACAwAAAAD8AAIDAAACAQAAAAD8AAIDAAACAQAAAgD8AAIDAAACAwAAAgD8AAIDAAACAwAAAgD8AAIBAAACAwAAAAD8AAIBAAACAwAAAAD8AAIDAAACAQAAAAD8AAIDAAACAwAAAAD8AAIDAAACAwAAAAD8AAIBAAACAQAAAAD8AAIBAAACAQAAAgD8AAIDAAACAQAAAgD8AAIBAAACAwAAAgD8AAIBAAACAwAAAgD8AAIDAAACAQAAAgD8AAIDAAACAQAAAAD8AAIDAAACAQAAAAD8AAIBAAACAQAAAgD8AAIBAAACAwAAAgD8AAIBAAACAQAAAgD8AAIBAAACAQAAAAD8AAIBAAACAwAAAAD8AAIBAAACAwAAAQEAAAIDAAACAwAAAgD8AAIDAAACAQAAAgD8AAIDAAACAQAAAQEAAAIDAAACAwAAAQEAAAIDAAACAwAAAQEAAAGDAAACAwAAAgD8AAGDAAACAwAAAgD8AAIDAAACAQAAAgD8AAIDAAACAwAAAgD8AAIDAAACAwAAAgD8AAGDAAACAQAAAgD8AAGDAAACAQAAAQEAAAIDAAACAQAAAQEAAAGDAAACAwAAAQEAAAGDAAACAwAAAQEAAAIDAAACAQAAAQEAAAIDAAACAQAAAgD8AAIDAAACAQAAAgD8AAGDAAACAQAAAQEAAAGDAAACAwAAAQEAAAGDAAACAQAAAQEAAAGDAAACAQAAAgD8AAGDAAACAwAAAgD8AAGDAAACAwAAAQEAAAGDAAACAwAAAgD8AAGDAAABgwAAAgD8AAGDAAABgwAAAQEAAAGDAAACAwAAAQEAAAGDAAACAwAAAQEAAAIBAAACAwAAAgD8AAIBAAACAwAAAgD8AAGDAAABgwAAAgD8AAGDAAACAwAAAgD8AAGDAAACAwAAAgD8AAIBAAABgwAAAgD8AAIBAAABgwAAAQEAAAGDAAABgwAAAQEAAAIBAAACAwAAAQEAAAIBAAACAwAAAQEAAAGDAAABgwAAAQEAAAGDAAABgwAAAgD8AAGDAAABgwAAAgD8AAIBAAABgwAAAQEAAAIBAAACAwAAAQEAAAIBAAABgwAAAQEAAAIBAAABgwAAAgD8AAIBAAACAwAAAgD8AAIBAAABgQAAAQEAAAGDAAABgQAAAgD8AAGDAAACAQAAAgD8AAGDAAACAQAAAQEAAAGDAAABgQAAAQEAAAGDAAABgQAAAQEAAAIBAAABgQAAAgD8AAIBAAABgQAAAgD8AAGDAAACAQAAAgD8AAGDAAABgQAAAgD8AAGDAAABgQAAAgD8AAIBAAACAQAAAgD8AAIBAAACAQAAAQEAAAGDAAACAQAAAQEAAAIBAAABgQAAAQEAAAIBAAABgQAAAQEAAAGDAAACAQAAAQEAAAGDAAACAQAAAgD8AAGDAAACAQAAAgD8AAIBAAACAQAAAQEAAAIBAAABgQAAAQEAAAIBAAACAQAAAQEAAAIBAAACAQAAAgD8AAIBAAABgQAAAgD8AAIBAAABgwAAAQEAAAGBAAABgwAAAgD8AAGBAAABgQAAAgD8AAGBAAABgQAAAQEAAAGBAAABgwAAAQEAAAGBAAABgwAAAQEAAAIBAAABgwAAAgD8AAIBAAABgwAAAgD8AAGBAAABgQAAAgD8AAGBAAABgwAAAgD8AAGBAAABgwAAAgD8AAIBAAABgQAAAgD8AAIBAAABgQAAAQEAAAGBAAABgQAAAQEAAAIBAAABgwAAAQEAAAIBAAABgwAAAQEAAAGBAAABgQAAAQEAAAGBAAABgQAAAgD8AAGBAAABgQAAAgD8AAIBAAABgQAAAQEAAAIBAAABgwAAAQEAAAIBAAABgQAAAQEAAAIBAAABgQAAAgD8AAIBAAABgwAAAgD8AAIBA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") +"vertex_data": PackedByteArray("AACAQAAAgD8AAIDAAAKAwAAAgD8AAIDAAAKAwAAAAD8AAIDAAACAQAAAAD8AAIDAAACAwAAAAD8AAIBAAACAwAAAAD8AAoDAAACAwAAAgD8AAoDAAACAwAAAgD8AAIBAAAKAwAAAAD8AAIBAAACAQAAAAD8AAIBAAACAQAAAAD8AAoDAAAKAwAAAAD8AAoDAAAKAwAAAgD8AAIBAAAKAwAAAgD8AAoDAAACAQAAAgD8AAoDAAACAQAAAgD8AAIBAAACAQAAAgD8AAIBAAACAQAAAgD8AAoDAAACAQAAAAD8AAoDAAACAQAAAAD8AAIBAAACAQAAAAD8AAIBAAAKAwAAAAD8AAIBAAAKAwAAAgD8AAIBAAACAQAAAgD8AAIBAAACAQAAAQEAAAIDAAAKAwAAAQEAAAIDAAAKAwAAAgD8AAIDAAACAQAAAgD8AAIDAAACAwAAAgD8AAGDAAACAwAAAgD8AAoDAAACAwAAAQEAAAoDAAACAwAAAQEAAAGDAAAKAwAAAgD8AAGDAAACAQAAAgD8AAGDAAACAQAAAgD8AAoDAAAKAwAAAgD8AAoDAAAKAwAAAQEAAAGDAAAKAwAAAQEAAAoDAAACAQAAAQEAAAoDAAACAQAAAQEAAAGDAAACAQAAAQEAAAGDAAACAQAAAQEAAAoDAAACAQAAAgD8AAoDAAACAQAAAgD8AAGDAAACAQAAAgD8AAGDAAAKAwAAAgD8AAGDAAAKAwAAAQEAAAGDAAACAQAAAQEAAAGDAAABgwAAAQEAAAGDAAAKAwAAAQEAAAGDAAAKAwAAAgD8AAGDAAABgwAAAgD8AAGDAAACAwAAAgD8AAIBAAACAwAAAgD8AAGDAAACAwAAAQEAAAGDAAACAwAAAQEAAAIBAAAKAwAAAgD8AAIBAAABgwAAAgD8AAIBAAABgwAAAgD8AAGDAAAKAwAAAgD8AAGDAAAKAwAAAQEAAAIBAAAKAwAAAQEAAAGDAAABgwAAAQEAAAGDAAABgwAAAQEAAAIBAAABgwAAAQEAAAIBAAABgwAAAQEAAAGDAAABgwAAAgD8AAGDAAABgwAAAgD8AAIBAAABgwAAAgD8AAIBAAAKAwAAAgD8AAIBAAAKAwAAAQEAAAIBAAABgwAAAQEAAAIBAAACAQAAAQEAAAGDAAABgQAAAQEAAAGDAAABgQAAAgD8AAGDAAACAQAAAgD8AAGDAAABgQAAAgD8AAIBAAABgQAAAgD8AAGDAAABgQAAAQEAAAGDAAABgQAAAQEAAAIBAAABgQAAAgD8AAIBAAACAQAAAgD8AAIBAAACAQAAAgD8AAGDAAABgQAAAgD8AAGDAAABgQAAAQEAAAIBAAABgQAAAQEAAAGDAAACAQAAAQEAAAGDAAACAQAAAQEAAAIBAAACAQAAAQEAAAIBAAACAQAAAQEAAAGDAAACAQAAAgD8AAGDAAACAQAAAgD8AAIBAAACAQAAAgD8AAIBAAABgQAAAgD8AAIBAAABgQAAAQEAAAIBAAACAQAAAQEAAAIBAAABgQAAAQEAAAGBAAABgwAAAQEAAAGBAAABgwAAAgD8AAGBAAABgQAAAgD8AAGBAAABgwAAAgD8AAIBAAABgwAAAgD8AAGBAAABgwAAAQEAAAGBAAABgwAAAQEAAAIBAAABgwAAAgD8AAIBAAABgQAAAgD8AAIBAAABgQAAAgD8AAGBAAABgwAAAgD8AAGBAAABgwAAAQEAAAIBAAABgwAAAQEAAAGBAAABgQAAAQEAAAGBAAABgQAAAQEAAAIBAAABgQAAAQEAAAIBAAABgQAAAQEAAAGBAAABgQAAAgD8AAGBAAABgQAAAgD8AAIBAAABgQAAAgD8AAIBAAABgwAAAgD8AAIBAAABgwAAAQEAAAIBAAABgQAAAQEAAAIBA/////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+//////wAA/7//////AAD/v/////8AAP+//////wAA/78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//v/9/AAD//////38AAP//////fwAA//////9/AAD//////3////9//7//f////3//v/9/////f/+//3////9//7////9//////////3//////////f/////////9///////9//3////+//3//f////7//f/9/////v/9//3////+/") }] -[sub_resource type="ArrayOccluder3D" id="ArrayOccluder3D_73hyv"] -vertices = PackedVector3Array(-4, 1, -4, -4, 0.5, -4, 4, 0.5, -4, 4, 1, -4, -4, 1, -4, -4, 1, 4, -4, 0.5, 4, -4, 0.5, -4, 4, 0.5, -4, -4, 0.5, -4, -4, 0.5, 4, 4, 0.5, 4, 4, 1, -4, 4, 1, 4, -4, 1, 4, -4, 1, -4, 4, 1, -4, 4, 0.5, -4, 4, 0.5, 4, 4, 1, 4, -4, 1, 4, 4, 1, 4, 4, 0.5, 4, -4, 0.5, 4, -4, 3, -4, -4, 1, -4, 4, 1, -4, 4, 3, -4, -4, 3, -4, -4, 3, -3.5, -4, 1, -3.5, -4, 1, -4, 4, 1, -4, -4, 1, -4, -4, 1, -3.5, 4, 1, -3.5, 4, 3, -4, 4, 3, -3.5, -4, 3, -3.5, -4, 3, -4, 4, 3, -4, 4, 1, -4, 4, 1, -3.5, 4, 3, -3.5, -4, 3, -3.5, 4, 3, -3.5, 4, 1, -3.5, -4, 1, -3.5, -4, 3, -3.5, -4, 1, -3.5, -3.5, 1, -3.5, -3.5, 3, -3.5, -4, 3, -3.5, -4, 3, 4, -4, 1, 4, -4, 1, -3.5, -3.5, 1, -3.5, -4, 1, -3.5, -4, 1, 4, -3.5, 1, 4, -3.5, 3, -3.5, -3.5, 3, 4, -4, 3, 4, -4, 3, -3.5, -3.5, 3, -3.5, -3.5, 1, -3.5, -3.5, 1, 4, -3.5, 3, 4, -4, 3, 4, -3.5, 3, 4, -3.5, 1, 4, -4, 1, 4, 3.5, 3, -3.5, 3.5, 1, -3.5, 4, 1, -3.5, 4, 3, -3.5, 3.5, 3, -3.5, 3.5, 3, 4, 3.5, 1, 4, 3.5, 1, -3.5, 4, 1, -3.5, 3.5, 1, -3.5, 3.5, 1, 4, 4, 1, 4, 4, 3, -3.5, 4, 3, 4, 3.5, 3, 4, 3.5, 3, -3.5, 4, 3, -3.5, 4, 1, -3.5, 4, 1, 4, 4, 3, 4, 3.5, 3, 4, 4, 3, 4, 4, 1, 4, 3.5, 1, 4, -3.5, 3, 3.5, -3.5, 1, 3.5, 3.5, 1, 3.5, 3.5, 3, 3.5, -3.5, 3, 3.5, -3.5, 3, 4, -3.5, 1, 4, -3.5, 1, 3.5, 3.5, 1, 3.5, -3.5, 1, 3.5, -3.5, 1, 4, 3.5, 1, 4, 3.5, 3, 3.5, 3.5, 3, 4, -3.5, 3, 4, -3.5, 3, 3.5, 3.5, 3, 3.5, 3.5, 1, 3.5, 3.5, 1, 4, 3.5, 3, 4, -3.5, 3, 4, 3.5, 3, 4, 3.5, 1, 4, -3.5, 1, 4) +[sub_resource type="ArrayOccluder3D" id="ArrayOccluder3D_14ntx"] +vertices = PackedVector3Array(4, 1, -4, -4.000244, 1, -4, -4.000244, 0.5, -4, 4, 0.5, -4, -4, 0.5, 4, -4, 0.5, -4.000244, -4, 1, -4.000244, -4, 1, 4, -4.000244, 0.5, 4, 4, 0.5, 4, 4, 0.5, -4.000244, -4.000244, 0.5, -4.000244, -4.000244, 1, 4, -4.000244, 1, -4.000244, 4, 1, -4.000244, 4, 1, 4, 4, 1, 4, 4, 1, -4.000244, 4, 0.5, -4.000244, 4, 0.5, 4, 4, 0.5, 4, -4.000244, 0.5, 4, -4.000244, 1, 4, 4, 1, 4, 4, 3, -4, -4.000244, 3, -4, -4.000244, 1, -4, 4, 1, -4, -4, 1, -3.5, -4, 1, -4.000244, -4, 3, -4.000244, -4, 3, -3.5, -4.000244, 1, -3.5, 4, 1, -3.5, 4, 1, -4.000244, -4.000244, 1, -4.000244, -4.000244, 3, -3.5, -4.000244, 3, -4.000244, 4, 3, -4.000244, 4, 3, -3.5, 4, 3, -3.5, 4, 3, -4.000244, 4, 1, -4.000244, 4, 1, -3.5, 4, 1, -3.5, -4.000244, 1, -3.5, -4.000244, 3, -3.5, 4, 3, -3.5, -3.5, 3, -3.5, -4.000244, 3, -3.5, -4.000244, 1, -3.5, -3.5, 1, -3.5, -4, 1, 4, -4, 1, -3.5, -4, 3, -3.5, -4, 3, 4, -4.000244, 1, 4, -3.5, 1, 4, -3.5, 1, -3.5, -4.000244, 1, -3.5, -4.000244, 3, 4, -4.000244, 3, -3.5, -3.5, 3, -3.5, -3.5, 3, 4, -3.5, 3, 4, -3.5, 3, -3.5, -3.5, 1, -3.5, -3.5, 1, 4, -3.5, 1, 4, -4.000244, 1, 4, -4.000244, 3, 4, -3.5, 3, 4, 4, 3, -3.5, 3.5, 3, -3.5, 3.5, 1, -3.5, 4, 1, -3.5, 3.5, 1, 4, 3.5, 1, -3.5, 3.5, 3, -3.5, 3.5, 3, 4, 3.5, 1, 4, 4, 1, 4, 4, 1, -3.5, 3.5, 1, -3.5, 3.5, 3, 4, 3.5, 3, -3.5, 4, 3, -3.5, 4, 3, 4, 4, 3, 4, 4, 3, -3.5, 4, 1, -3.5, 4, 1, 4, 4, 1, 4, 3.5, 1, 4, 3.5, 3, 4, 4, 3, 4, 3.5, 3, 3.5, -3.5, 3, 3.5, -3.5, 1, 3.5, 3.5, 1, 3.5, -3.5, 1, 4, -3.5, 1, 3.5, -3.5, 3, 3.5, -3.5, 3, 4, -3.5, 1, 4, 3.5, 1, 4, 3.5, 1, 3.5, -3.5, 1, 3.5, -3.5, 3, 4, -3.5, 3, 3.5, 3.5, 3, 3.5, 3.5, 3, 4, 3.5, 3, 4, 3.5, 3, 3.5, 3.5, 1, 3.5, 3.5, 1, 4, 3.5, 1, 4, -3.5, 1, 4, -3.5, 3, 4, 3.5, 3, 4) indices = PackedInt32Array(0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23, 24, 25, 26, 24, 26, 27, 28, 29, 30, 28, 30, 31, 32, 33, 34, 32, 34, 35, 36, 37, 38, 36, 38, 39, 40, 41, 42, 40, 42, 43, 44, 45, 46, 44, 46, 47, 48, 49, 50, 48, 50, 51, 52, 53, 54, 52, 54, 55, 56, 57, 58, 56, 58, 59, 60, 61, 62, 60, 62, 63, 64, 65, 66, 64, 66, 67, 68, 69, 70, 68, 70, 71, 72, 73, 74, 72, 74, 75, 76, 77, 78, 76, 78, 79, 80, 81, 82, 80, 82, 83, 84, 85, 86, 84, 86, 87, 88, 89, 90, 88, 90, 91, 92, 93, 94, 92, 94, 95, 96, 97, 98, 96, 98, 99, 100, 101, 102, 100, 102, 103, 104, 105, 106, 104, 106, 107, 108, 109, 110, 108, 110, 111, 112, 113, 114, 112, 114, 115, 116, 117, 118, 116, 118, 119) +[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_b3peu"] +points = PackedVector3Array(4, 1, 4, 4, 0.5, 4, -4, 1, 4, -4, 0.5, 4, 4, 1, -4, 4, 0.5, -4, -4, 1, -4, -4, 0.5, -4) + +[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_04e2y"] +points = PackedVector3Array(4, 3, -3.5, 4, 1, -3.5, -4, 3, -3.5, -4, 1, -3.5, 4, 3, -4, 4, 1, -4, -4, 3, -4, -4, 1, -4) + +[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_73hyv"] +points = PackedVector3Array(-3.5, 3, 4, -3.5, 1, 4, -4, 3, 4, -4, 1, 4, -3.5, 3, -3.5, -3.5, 1, -3.5, -4, 3, -3.5, -4, 1, -3.5) + [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_nxk1u"] -points = PackedVector3Array(-4, 1, -4, -4, 0.5, -4, 4, 0.5, -4, 4, 1, -4, -4, 1, 4, -4, 0.5, 4, 4, 0.5, 4, 4, 1, 4) +points = PackedVector3Array(4, 3, 4, 4, 1, 4, 3.5, 3, 4, 3.5, 1, 4, 4, 3, -3.5, 4, 1, -3.5, 3.5, 3, -3.5, 3.5, 1, -3.5) [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_nqwqe"] -points = PackedVector3Array(-4, 3, -4, -4, 1, -4, 4, 1, -4, 4, 3, -4, -4, 3, -3.5, -4, 1, -3.5, 4, 1, -3.5, 4, 3, -3.5) - -[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_trskx"] -points = PackedVector3Array(-4, 3, -3.5, -4, 1, -3.5, -3.5, 1, -3.5, -3.5, 3, -3.5, -4, 3, 4, -4, 1, 4, -3.5, 1, 4, -3.5, 3, 4) - -[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_hhok7"] -points = PackedVector3Array(3.5, 3, -3.5, 3.5, 1, -3.5, 4, 1, -3.5, 4, 3, -3.5, 3.5, 3, 4, 3.5, 1, 4, 4, 1, 4, 4, 3, 4) - -[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_5xf4s"] -points = PackedVector3Array(-3.5, 3, 3.5, -3.5, 1, 3.5, 3.5, 1, 3.5, 3.5, 3, 3.5, -3.5, 3, 4, -3.5, 1, 4, 3.5, 1, 4, 3.5, 3, 4) +points = PackedVector3Array(3.5, 3, 4, 3.5, 1, 4, -3.5, 3, 4, -3.5, 1, 4, 3.5, 3, 3.5, 3.5, 1, 3.5, -3.5, 3, 3.5, -3.5, 1, 3.5) [node name="Factory4" type="Node3D"] @@ -120,32 +120,31 @@ camera_attributes = SubResource("CameraAttributesPractical_w45nv") script = ExtResource("8_f1ieg") local_map_file = "uid://dbv5p8qyjy6u4" map_settings = ExtResource("9_unwtk") -metadata/_custom_type_script = "uid://kno58homctew" [node name="entity_0_worldspawn" type="StaticBody3D" parent="FuncGodotMap" groups=["Solid"]] collision_mask = 0 script = ExtResource("10_eflie") [node name="entity_0_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_0_worldspawn"] -mesh = SubResource("ArrayMesh_04e2y") +mesh = SubResource("ArrayMesh_bv7qr") [node name="entity_0_occluder_instance" type="OccluderInstance3D" parent="FuncGodotMap/entity_0_worldspawn"] -occluder = SubResource("ArrayOccluder3D_73hyv") +occluder = SubResource("ArrayOccluder3D_14ntx") [node name="entity_0_brush_0_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] -shape = SubResource("ConvexPolygonShape3D_nxk1u") +shape = SubResource("ConvexPolygonShape3D_b3peu") [node name="entity_0_brush_1_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] -shape = SubResource("ConvexPolygonShape3D_nqwqe") +shape = SubResource("ConvexPolygonShape3D_04e2y") [node name="entity_0_brush_2_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] -shape = SubResource("ConvexPolygonShape3D_trskx") +shape = SubResource("ConvexPolygonShape3D_73hyv") [node name="entity_0_brush_3_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] -shape = SubResource("ConvexPolygonShape3D_hhok7") +shape = SubResource("ConvexPolygonShape3D_nxk1u") [node name="entity_0_brush_4_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] -shape = SubResource("ConvexPolygonShape3D_5xf4s") +shape = SubResource("ConvexPolygonShape3D_nqwqe") [node name="entity_1_actor_teleporter" parent="FuncGodotMap" instance=ExtResource("12_mtei5")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.5, 1.0625, -2.5) diff --git a/addons/func_godot/fgd/func_detail.tres b/addons/func_godot/fgd/func_detail.tres index c043e28e..0cd47040 100644 --- a/addons/func_godot/fgd/func_detail.tres +++ b/addons/func_godot/fgd/func_detail.tres @@ -1,13 +1,15 @@ -[gd_resource type="Resource" script_class="FuncGodotFGDSolidClass" load_steps=3 format=3 uid="uid://cxy7jnh6d7msn"] +[gd_resource type="Resource" script_class="FuncGodotFGDSolidClass" load_steps=4 format=3 uid="uid://cxy7jnh6d7msn"] -[ext_resource type="Script" uid="uid://msq50x6rk4po" path="res://addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd" id="1_0fsmp"] +[ext_resource type="Script" uid="uid://5cow84q03m6a" path="res://addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd" id="1_0fsmp"] [ext_resource type="Resource" uid="uid://nayxb8n7see2" path="res://addons/func_godot/fgd/phong_base.tres" id="1_c3bns"] +[ext_resource type="Resource" uid="uid://doo4ly322b4jc" path="res://addons/func_godot/fgd/vertex_merge_distance_base.tres" id="2_c03gr"] [resource] script = ExtResource("1_0fsmp") spawn_type = 2 -origin_type = 4 +origin_type = 3 build_visuals = true +global_illumination_mode = 1 use_in_baked_light = true shadow_casting_setting = 1 build_occlusion = false @@ -21,11 +23,12 @@ add_textures_metadata = false add_vertex_metadata = false add_face_position_metadata = false add_face_normal_metadata = false +add_collision_shape_to_face_indices_metadata = false add_collision_shape_face_range_metadata = false classname = "func_detail" description = "Static collidable geometry. Builds a StaticBody3D with a MeshInstance3D and a single concave CollisionShape3D. Does not occlude other VisualInstance3D nodes." func_godot_internal = false -base_classes = Array[Resource]([ExtResource("1_c3bns")]) +base_classes = Array[Resource]([ExtResource("1_c3bns"), ExtResource("2_c03gr")]) class_properties = {} class_property_descriptions = {} auto_apply_to_matching_node_properties = false diff --git a/addons/func_godot/fgd/func_detail_illusionary.tres b/addons/func_godot/fgd/func_detail_illusionary.tres index 6cc23c61..b99bc029 100644 --- a/addons/func_godot/fgd/func_detail_illusionary.tres +++ b/addons/func_godot/fgd/func_detail_illusionary.tres @@ -1,13 +1,15 @@ -[gd_resource type="Resource" script_class="FuncGodotFGDSolidClass" load_steps=3 format=3 uid="uid://ch3e0dix85uhb"] +[gd_resource type="Resource" script_class="FuncGodotFGDSolidClass" load_steps=4 format=3 uid="uid://ch3e0dix85uhb"] [ext_resource type="Resource" uid="uid://nayxb8n7see2" path="res://addons/func_godot/fgd/phong_base.tres" id="1_ar63x"] -[ext_resource type="Script" uid="uid://msq50x6rk4po" path="res://addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd" id="2_lhb87"] +[ext_resource type="Resource" uid="uid://doo4ly322b4jc" path="res://addons/func_godot/fgd/vertex_merge_distance_base.tres" id="2_j7vgq"] +[ext_resource type="Script" uid="uid://5cow84q03m6a" path="res://addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd" id="2_lhb87"] [resource] script = ExtResource("2_lhb87") spawn_type = 2 -origin_type = 4 +origin_type = 3 build_visuals = true +global_illumination_mode = 1 use_in_baked_light = true shadow_casting_setting = 1 build_occlusion = false @@ -21,11 +23,12 @@ add_textures_metadata = false add_vertex_metadata = false add_face_position_metadata = false add_face_normal_metadata = false +add_collision_shape_to_face_indices_metadata = false add_collision_shape_face_range_metadata = false classname = "func_detail_illusionary" description = "Static geometry with no collision. Builds a Node3D with a MeshInstance3D. Does not occlude other VisualInstance3D nodes." func_godot_internal = false -base_classes = Array[Resource]([ExtResource("1_ar63x")]) +base_classes = Array[Resource]([ExtResource("1_ar63x"), ExtResource("2_j7vgq")]) class_properties = {} class_property_descriptions = {} auto_apply_to_matching_node_properties = false diff --git a/addons/func_godot/fgd/func_geo.tres b/addons/func_godot/fgd/func_geo.tres index eb8c30de..b9e60aad 100644 --- a/addons/func_godot/fgd/func_geo.tres +++ b/addons/func_godot/fgd/func_geo.tres @@ -1,13 +1,15 @@ -[gd_resource type="Resource" script_class="FuncGodotFGDSolidClass" load_steps=3 format=3 uid="uid://b70vf4t5dc70t"] +[gd_resource type="Resource" script_class="FuncGodotFGDSolidClass" load_steps=4 format=3 uid="uid://b70vf4t5dc70t"] [ext_resource type="Resource" uid="uid://nayxb8n7see2" path="res://addons/func_godot/fgd/phong_base.tres" id="1_5mwee"] -[ext_resource type="Script" uid="uid://msq50x6rk4po" path="res://addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd" id="2_8o081"] +[ext_resource type="Script" uid="uid://5cow84q03m6a" path="res://addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd" id="2_8o081"] +[ext_resource type="Resource" uid="uid://doo4ly322b4jc" path="res://addons/func_godot/fgd/vertex_merge_distance_base.tres" id="2_bp8pb"] [resource] script = ExtResource("2_8o081") spawn_type = 2 -origin_type = 4 +origin_type = 3 build_visuals = true +global_illumination_mode = 1 use_in_baked_light = true shadow_casting_setting = 1 build_occlusion = true @@ -21,11 +23,12 @@ add_textures_metadata = false add_vertex_metadata = false add_face_position_metadata = false add_face_normal_metadata = false +add_collision_shape_to_face_indices_metadata = false add_collision_shape_face_range_metadata = false classname = "func_geo" description = "Static collidable geometry. Builds a StaticBody3D with a MeshInstance3D, a single concave CollisionShape3D, and an OccluderInstance3D." func_godot_internal = false -base_classes = Array[Resource]([ExtResource("1_5mwee")]) +base_classes = Array[Resource]([ExtResource("1_5mwee"), ExtResource("2_bp8pb")]) class_properties = {} class_property_descriptions = {} auto_apply_to_matching_node_properties = false diff --git a/addons/func_godot/fgd/func_godot_fgd.tres b/addons/func_godot/fgd/func_godot_fgd.tres index ac75b684..c8fba83d 100644 --- a/addons/func_godot/fgd/func_godot_fgd.tres +++ b/addons/func_godot/fgd/func_godot_fgd.tres @@ -1,7 +1,8 @@ -[gd_resource type="Resource" script_class="FuncGodotFGDFile" load_steps=8 format=3 uid="uid://crgpdahjaj"] +[gd_resource type="Resource" script_class="FuncGodotFGDFile" load_steps=9 format=3 uid="uid://crgpdahjaj"] -[ext_resource type="Script" uid="uid://cknmd0lgmorx2" path="res://addons/func_godot/src/fgd/func_godot_fgd_file.gd" id="1_axt3h"] +[ext_resource type="Script" uid="uid://drlmgulwbjwqu" path="res://addons/func_godot/src/fgd/func_godot_fgd_file.gd" id="1_axt3h"] [ext_resource type="Resource" uid="uid://nayxb8n7see2" path="res://addons/func_godot/fgd/phong_base.tres" id="1_ehab8"] +[ext_resource type="Resource" uid="uid://doo4ly322b4jc" path="res://addons/func_godot/fgd/vertex_merge_distance_base.tres" id="2_7jebp"] [ext_resource type="Resource" uid="uid://bdji3873bg32h" path="res://addons/func_godot/fgd/worldspawn.tres" id="2_ri2rx"] [ext_resource type="Resource" uid="uid://b70vf4t5dc70t" path="res://addons/func_godot/fgd/func_geo.tres" id="3_7jigp"] [ext_resource type="Resource" uid="uid://cxy7jnh6d7msn" path="res://addons/func_godot/fgd/func_detail.tres" id="3_fqfww"] @@ -10,8 +11,7 @@ [resource] script = ExtResource("1_axt3h") -export_file = false target_map_editor = 1 fgd_name = "FuncGodot" base_fgd_files = Array[Resource]([]) -entity_definitions = Array[Resource]([ExtResource("1_ehab8"), ExtResource("2_ri2rx"), ExtResource("3_7jigp"), ExtResource("3_fqfww"), ExtResource("5_b2q3p"), ExtResource("4_c4ucw")]) +entity_definitions = Array[Resource]([ExtResource("1_ehab8"), ExtResource("2_7jebp"), ExtResource("2_ri2rx"), ExtResource("3_7jigp"), ExtResource("3_fqfww"), ExtResource("5_b2q3p"), ExtResource("4_c4ucw")]) diff --git a/addons/func_godot/fgd/func_illusionary.tres b/addons/func_godot/fgd/func_illusionary.tres index 557f2a58..ece499af 100644 --- a/addons/func_godot/fgd/func_illusionary.tres +++ b/addons/func_godot/fgd/func_illusionary.tres @@ -1,13 +1,15 @@ -[gd_resource type="Resource" script_class="FuncGodotFGDSolidClass" load_steps=3 format=3 uid="uid://dg5x44cc7flew"] +[gd_resource type="Resource" script_class="FuncGodotFGDSolidClass" load_steps=4 format=3 uid="uid://dg5x44cc7flew"] [ext_resource type="Resource" uid="uid://nayxb8n7see2" path="res://addons/func_godot/fgd/phong_base.tres" id="1_kv0mq"] -[ext_resource type="Script" uid="uid://msq50x6rk4po" path="res://addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd" id="2_uffhi"] +[ext_resource type="Resource" uid="uid://doo4ly322b4jc" path="res://addons/func_godot/fgd/vertex_merge_distance_base.tres" id="2_hovr4"] +[ext_resource type="Script" uid="uid://5cow84q03m6a" path="res://addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd" id="2_uffhi"] [resource] script = ExtResource("2_uffhi") spawn_type = 2 -origin_type = 4 +origin_type = 3 build_visuals = true +global_illumination_mode = 1 use_in_baked_light = true shadow_casting_setting = 1 build_occlusion = true @@ -21,11 +23,12 @@ add_textures_metadata = false add_vertex_metadata = false add_face_position_metadata = false add_face_normal_metadata = false +add_collision_shape_to_face_indices_metadata = false add_collision_shape_face_range_metadata = false classname = "func_illusionary" description = "Static geometry with no collision. Builds a Node3D with a MeshInstance3D and an Occluder3D to aid in render culling of other VisualInstance3D nodes." func_godot_internal = false -base_classes = Array[Resource]([ExtResource("1_kv0mq")]) +base_classes = Array[Resource]([ExtResource("1_kv0mq"), ExtResource("2_hovr4")]) class_properties = {} class_property_descriptions = {} auto_apply_to_matching_node_properties = false diff --git a/addons/func_godot/fgd/phong_base.tres b/addons/func_godot/fgd/phong_base.tres index 440636b9..4b8e456e 100644 --- a/addons/func_godot/fgd/phong_base.tres +++ b/addons/func_godot/fgd/phong_base.tres @@ -1,6 +1,6 @@ [gd_resource type="Resource" script_class="FuncGodotFGDBaseClass" load_steps=2 format=3 uid="uid://nayxb8n7see2"] -[ext_resource type="Script" path="res://addons/func_godot/src/fgd/func_godot_fgd_base_class.gd" id="1_04y3n"] +[ext_resource type="Script" uid="uid://ck575aqs1sbrb" path="res://addons/func_godot/src/fgd/func_godot_fgd_base_class.gd" id="1_04y3n"] [resource] script = ExtResource("1_04y3n") @@ -19,6 +19,7 @@ class_property_descriptions = { "_phong": ["Phong shading", 0], "_phong_angle": "Phong smoothing angle" } +auto_apply_to_matching_node_properties = false meta_properties = { "color": Color(0.8, 0.8, 0.8, 1), "size": AABB(-8, -8, -8, 8, 8, 8) diff --git a/addons/func_godot/fgd/vertex_merge_distance_base.tres b/addons/func_godot/fgd/vertex_merge_distance_base.tres new file mode 100644 index 00000000..68dcc64c --- /dev/null +++ b/addons/func_godot/fgd/vertex_merge_distance_base.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="FuncGodotFGDBaseClass" load_steps=2 format=3 uid="uid://doo4ly322b4jc"] + +[ext_resource type="Script" uid="uid://ck575aqs1sbrb" path="res://addons/func_godot/src/fgd/func_godot_fgd_base_class.gd" id="1_h3atm"] + +[resource] +script = ExtResource("1_h3atm") +classname = "VertexMergeDistance" +description = "Adjustable value to snap vertices to on map build. This can reduce instances of seams between polygons." +func_godot_internal = false +base_classes = Array[Resource]([]) +class_properties = { +"_vertex_merge_distance": 0.008 +} +class_property_descriptions = { +"_vertex_merge_distance": "Adjustable value to snap vertices to on map build. This can reduce instances of seams between polygons." +} +auto_apply_to_matching_node_properties = false +meta_properties = { +"color": Color(0.8, 0.8, 0.8, 1), +"size": AABB(-8, -8, -8, 8, 8, 8) +} +node_class = "" +name_property = "" +metadata/_custom_type_script = "uid://ck575aqs1sbrb" diff --git a/addons/func_godot/fgd/worldspawn.tres b/addons/func_godot/fgd/worldspawn.tres index 60969901..408e7fbf 100644 --- a/addons/func_godot/fgd/worldspawn.tres +++ b/addons/func_godot/fgd/worldspawn.tres @@ -1,15 +1,17 @@ -[gd_resource type="Resource" script_class="FuncGodotFGDSolidClass" load_steps=2 format=3 uid="uid://bdji3873bg32h"] +[gd_resource type="Resource" script_class="FuncGodotFGDSolidClass" load_steps=3 format=3 uid="uid://bdji3873bg32h"] -[ext_resource type="Script" uid="uid://msq50x6rk4po" path="res://addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd" id="1_62t8m"] +[ext_resource type="Script" uid="uid://5cow84q03m6a" path="res://addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd" id="1_62t8m"] +[ext_resource type="Resource" uid="uid://doo4ly322b4jc" path="res://addons/func_godot/fgd/vertex_merge_distance_base.tres" id="1_h1046"] [resource] script = ExtResource("1_62t8m") spawn_type = 0 -origin_type = 4 +origin_type = 1 build_visuals = true +global_illumination_mode = 1 use_in_baked_light = true shadow_casting_setting = 1 -build_occlusion = true +build_occlusion = false render_layers = 1 collision_shape_type = 1 collision_layer = 1 @@ -20,11 +22,12 @@ add_textures_metadata = false add_vertex_metadata = false add_face_position_metadata = false add_face_normal_metadata = false +add_collision_shape_to_face_indices_metadata = false add_collision_shape_face_range_metadata = false classname = "worldspawn" description = "Default static world geometry. Builds a StaticBody3D with a single MeshInstance3D and a single convex CollisionShape3D shape. Also builds Occluder3D to aid in render culling of other VisualInstance3D nodes." func_godot_internal = false -base_classes = Array[Resource]([]) +base_classes = Array[Resource]([ExtResource("1_h1046")]) class_properties = {} class_property_descriptions = {} auto_apply_to_matching_node_properties = false diff --git a/addons/func_godot/func_godot_local_config.tres b/addons/func_godot/func_godot_local_config.tres index 19ad7606..482e00e7 100644 --- a/addons/func_godot/func_godot_local_config.tres +++ b/addons/func_godot/func_godot_local_config.tres @@ -1,8 +1,6 @@ [gd_resource type="Resource" script_class="FuncGodotLocalConfig" load_steps=2 format=3 uid="uid://bqjt7nyekxgog"] -[ext_resource type="Script" uid="uid://csppcqp1pieqe" path="res://addons/func_godot/src/util/func_godot_local_config.gd" id="1_g8kqj"] +[ext_resource type="Script" uid="uid://xsjnhahhyein" path="res://addons/func_godot/src/util/func_godot_local_config.gd" id="1_g8kqj"] [resource] script = ExtResource("1_g8kqj") -export_func_godot_settings = false -reload_func_godot_settings = false diff --git a/addons/func_godot/game_config/netradiant_custom/func_godot_netradiant_custom_gamepack_config.tres b/addons/func_godot/game_config/netradiant_custom/func_godot_netradiant_custom_gamepack_config.tres index 8264b44c..85c0e6f8 100644 --- a/addons/func_godot/game_config/netradiant_custom/func_godot_netradiant_custom_gamepack_config.tres +++ b/addons/func_godot/game_config/netradiant_custom/func_godot_netradiant_custom_gamepack_config.tres @@ -1,14 +1,13 @@ [gd_resource type="Resource" script_class="NetRadiantCustomGamePackConfig" load_steps=6 format=3 uid="uid://cv1k2e85fo2ax"] [ext_resource type="Resource" uid="uid://crgpdahjaj" path="res://addons/func_godot/fgd/func_godot_fgd.tres" id="1_gct4v"] -[ext_resource type="Script" path="res://addons/func_godot/src/netradiant_custom/netradiant_custom_gamepack_config.gd" id="2_en8ro"] +[ext_resource type="Script" uid="uid://dfhj3me2g5j0l" path="res://addons/func_godot/src/netradiant_custom/netradiant_custom_gamepack_config.gd" id="2_en8ro"] [ext_resource type="Resource" uid="uid://f5erfnvbg6b7" path="res://addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_clip.tres" id="2_w7psh"] [ext_resource type="Resource" uid="uid://cfhg30jclb4lw" path="res://addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_skip.tres" id="3_6gpk8"] [ext_resource type="Resource" uid="uid://bpnj14oaufdpt" path="res://addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_origin.tres" id="4_8rl60"] [resource] script = ExtResource("2_en8ro") -export_file = false gamepack_name = "func_godot" game_name = "FuncGodot" base_game_path = "" @@ -20,5 +19,6 @@ sound_types = PackedStringArray("wav", "ogg") default_scale = "1.0" clip_texture = "textures/special/clip" skip_texture = "textures/special/skip" +map_type = 1 default_build_menu_variables = {} default_build_menu_commands = {} diff --git a/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_clip.tres b/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_clip.tres index b26ee2b0..d9697744 100644 --- a/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_clip.tres +++ b/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_clip.tres @@ -1,6 +1,6 @@ [gd_resource type="Resource" script_class="NetRadiantCustomShader" load_steps=2 format=3 uid="uid://f5erfnvbg6b7"] -[ext_resource type="Script" path="res://addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd" id="1_cuylw"] +[ext_resource type="Script" uid="uid://dn86acprv4e86" path="res://addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd" id="1_cuylw"] [resource] script = ExtResource("1_cuylw") diff --git a/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_origin.tres b/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_origin.tres index 6ed9da5d..72bd1715 100644 --- a/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_origin.tres +++ b/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_origin.tres @@ -1,6 +1,6 @@ [gd_resource type="Resource" script_class="NetRadiantCustomShader" load_steps=2 format=3 uid="uid://bpnj14oaufdpt"] -[ext_resource type="Script" path="res://addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd" id="1_ah2cp"] +[ext_resource type="Script" uid="uid://dn86acprv4e86" path="res://addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd" id="1_ah2cp"] [resource] script = ExtResource("1_ah2cp") diff --git a/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_skip.tres b/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_skip.tres index a2d90bc6..f3681405 100644 --- a/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_skip.tres +++ b/addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_skip.tres @@ -1,6 +1,6 @@ [gd_resource type="Resource" script_class="NetRadiantCustomShader" load_steps=2 format=3 uid="uid://cfhg30jclb4lw"] -[ext_resource type="Script" path="res://addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd" id="1_4ja6h"] +[ext_resource type="Script" uid="uid://dn86acprv4e86" path="res://addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd" id="1_4ja6h"] [resource] script = ExtResource("1_4ja6h") diff --git a/addons/func_godot/game_config/trenchbroom/func_godot_tb_game_config.tres b/addons/func_godot/game_config/trenchbroom/func_godot_tb_game_config.tres index e761f7ec..a08fb686 100644 --- a/addons/func_godot/game_config/trenchbroom/func_godot_tb_game_config.tres +++ b/addons/func_godot/game_config/trenchbroom/func_godot_tb_game_config.tres @@ -3,13 +3,12 @@ [ext_resource type="Resource" uid="uid://crgpdahjaj" path="res://addons/func_godot/fgd/func_godot_fgd.tres" id="1_8u1vq"] [ext_resource type="Resource" uid="uid://b4xhdj0e16lop" path="res://addons/func_godot/game_config/trenchbroom/tb_face_tag_clip.tres" id="1_rsp20"] [ext_resource type="Resource" uid="uid://ca7377sfgj074" path="res://addons/func_godot/game_config/trenchbroom/tb_face_tag_skip.tres" id="2_166i2"] -[ext_resource type="Script" path="res://addons/func_godot/src/trenchbroom/trenchbroom_game_config.gd" id="2_ns6ah"] +[ext_resource type="Script" uid="uid://cx44c4vnq8bt5" path="res://addons/func_godot/src/trenchbroom/trenchbroom_game_config.gd" id="2_ns6ah"] [ext_resource type="Resource" uid="uid://bkjxc54mmdhbo" path="res://addons/func_godot/game_config/trenchbroom/tb_face_tag_origin.tres" id="3_stisi"] [ext_resource type="Texture2D" uid="uid://decwujsyhj0qy" path="res://addons/func_godot/icon32.png" id="6_tex5j"] [resource] script = ExtResource("2_ns6ah") -export_file = false game_name = "FuncGodot" icon = ExtResource("6_tex5j") map_formats = Array[Dictionary]([{ diff --git a/addons/func_godot/game_config/trenchbroom/tb_brush_tag_func.tres b/addons/func_godot/game_config/trenchbroom/tb_brush_tag_func.tres index 64fb887f..e6f73c7f 100644 --- a/addons/func_godot/game_config/trenchbroom/tb_brush_tag_func.tres +++ b/addons/func_godot/game_config/trenchbroom/tb_brush_tag_func.tres @@ -1,6 +1,6 @@ [gd_resource type="Resource" script_class="TrenchBroomTag" load_steps=2 format=3 uid="uid://37iduqf7tpxq"] -[ext_resource type="Script" path="res://addons/func_godot/src/trenchbroom/trenchbroom_tag.gd" id="1_rn13a"] +[ext_resource type="Script" uid="uid://b66qdknwqpfup" path="res://addons/func_godot/src/trenchbroom/trenchbroom_tag.gd" id="1_rn13a"] [resource] script = ExtResource("1_rn13a") diff --git a/addons/func_godot/game_config/trenchbroom/tb_brush_tag_trigger.tres b/addons/func_godot/game_config/trenchbroom/tb_brush_tag_trigger.tres index 4d82efc1..c915f1c1 100644 --- a/addons/func_godot/game_config/trenchbroom/tb_brush_tag_trigger.tres +++ b/addons/func_godot/game_config/trenchbroom/tb_brush_tag_trigger.tres @@ -1,6 +1,6 @@ [gd_resource type="Resource" script_class="TrenchBroomTag" load_steps=2 format=3 uid="uid://co2sb1ng7cw4i"] -[ext_resource type="Script" path="res://addons/func_godot/src/trenchbroom/trenchbroom_tag.gd" id="1_msqpk"] +[ext_resource type="Script" uid="uid://b66qdknwqpfup" path="res://addons/func_godot/src/trenchbroom/trenchbroom_tag.gd" id="1_msqpk"] [resource] script = ExtResource("1_msqpk") diff --git a/addons/func_godot/game_config/trenchbroom/tb_face_tag_clip.tres b/addons/func_godot/game_config/trenchbroom/tb_face_tag_clip.tres index 38c93290..bec8a2c1 100644 --- a/addons/func_godot/game_config/trenchbroom/tb_face_tag_clip.tres +++ b/addons/func_godot/game_config/trenchbroom/tb_face_tag_clip.tres @@ -1,8 +1,11 @@ [gd_resource type="Resource" script_class="TrenchBroomTag" load_steps=2 format=3 uid="uid://b4xhdj0e16lop"] -[ext_resource type="Script" uid="uid://cvwfhwn3pgig1" path="res://addons/func_godot/src/trenchbroom/trenchbroom_tag.gd" id="1_7td58"] +[ext_resource type="Script" uid="uid://b66qdknwqpfup" path="res://addons/func_godot/src/trenchbroom/trenchbroom_tag.gd" id="1_7td58"] [resource] script = ExtResource("1_7td58") tag_name = "Clip" +tag_attributes = Array[String](["transparent"]) +tag_match_type = 0 tag_pattern = "clip" +texture_name = "" diff --git a/addons/func_godot/game_config/trenchbroom/tb_face_tag_origin.tres b/addons/func_godot/game_config/trenchbroom/tb_face_tag_origin.tres index 0833f131..82478f3e 100644 --- a/addons/func_godot/game_config/trenchbroom/tb_face_tag_origin.tres +++ b/addons/func_godot/game_config/trenchbroom/tb_face_tag_origin.tres @@ -1,8 +1,11 @@ [gd_resource type="Resource" script_class="TrenchBroomTag" load_steps=2 format=3 uid="uid://bkjxc54mmdhbo"] -[ext_resource type="Script" uid="uid://cvwfhwn3pgig1" path="res://addons/func_godot/src/trenchbroom/trenchbroom_tag.gd" id="1_enkfc"] +[ext_resource type="Script" uid="uid://b66qdknwqpfup" path="res://addons/func_godot/src/trenchbroom/trenchbroom_tag.gd" id="1_enkfc"] [resource] script = ExtResource("1_enkfc") tag_name = "Origin" +tag_attributes = Array[String](["transparent"]) +tag_match_type = 0 tag_pattern = "origin" +texture_name = "" diff --git a/addons/func_godot/game_config/trenchbroom/tb_face_tag_skip.tres b/addons/func_godot/game_config/trenchbroom/tb_face_tag_skip.tres index 553176c7..342646cb 100644 --- a/addons/func_godot/game_config/trenchbroom/tb_face_tag_skip.tres +++ b/addons/func_godot/game_config/trenchbroom/tb_face_tag_skip.tres @@ -1,8 +1,11 @@ [gd_resource type="Resource" script_class="TrenchBroomTag" load_steps=2 format=3 uid="uid://ca7377sfgj074"] -[ext_resource type="Script" uid="uid://cvwfhwn3pgig1" path="res://addons/func_godot/src/trenchbroom/trenchbroom_tag.gd" id="1_2teqe"] +[ext_resource type="Script" uid="uid://b66qdknwqpfup" path="res://addons/func_godot/src/trenchbroom/trenchbroom_tag.gd" id="1_2teqe"] [resource] script = ExtResource("1_2teqe") tag_name = "Skip" +tag_attributes = Array[String](["transparent"]) +tag_match_type = 0 tag_pattern = "skip" +texture_name = "" diff --git a/addons/func_godot/icon.svg.import b/addons/func_godot/icon.svg.import index e3d1d876..61f16c6b 100644 --- a/addons/func_godot/icon.svg.import +++ b/addons/func_godot/icon.svg.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/icon.svg-99f2c56e0c1ce867c819715c68d9c120.cte compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/addons/func_godot/icons/icon_godambler.svg.import b/addons/func_godot/icons/icon_godambler.svg.import index f45a950b..86a30c3b 100644 --- a/addons/func_godot/icons/icon_godambler.svg.import +++ b/addons/func_godot/icons/icon_godambler.svg.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/icon_godambler.svg-a6dbba375ab2a45be046a1875b compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/addons/func_godot/icons/icon_godambler3d.svg.import b/addons/func_godot/icons/icon_godambler3d.svg.import index 2c412153..0508918e 100644 --- a/addons/func_godot/icons/icon_godambler3d.svg.import +++ b/addons/func_godot/icons/icon_godambler3d.svg.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/icon_godambler3d.svg-f7df9bfe58320474198644aa compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/addons/func_godot/icons/icon_godot_ranger.svg.import b/addons/func_godot/icons/icon_godot_ranger.svg.import index 4bf14235..3be49c64 100644 --- a/addons/func_godot/icons/icon_godot_ranger.svg.import +++ b/addons/func_godot/icons/icon_godot_ranger.svg.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/icon_godot_ranger.svg-8572582518f54de6403b767 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/addons/func_godot/icons/icon_godot_ranger3d.svg.import b/addons/func_godot/icons/icon_godot_ranger3d.svg.import index e2eb929c..d56cb297 100644 --- a/addons/func_godot/icons/icon_godot_ranger3d.svg.import +++ b/addons/func_godot/icons/icon_godot_ranger3d.svg.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/icon_godot_ranger3d.svg-a9a2c9bcf2e8b1e07a0a9 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/addons/func_godot/icons/icon_quake_file.svg.import b/addons/func_godot/icons/icon_quake_file.svg.import index b117155e..668f5bb9 100644 --- a/addons/func_godot/icons/icon_quake_file.svg.import +++ b/addons/func_godot/icons/icon_quake_file.svg.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/icon_quake_file.svg-1718b9a2b5e0b124f6d72bb4c compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/addons/func_godot/icons/icon_slipgate.svg b/addons/func_godot/icons/icon_slipgate.svg new file mode 100644 index 00000000..f78ac7b3 --- /dev/null +++ b/addons/func_godot/icons/icon_slipgate.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/addons/func_godot/icons/icon_slipgate.svg.import b/addons/func_godot/icons/icon_slipgate.svg.import new file mode 100644 index 00000000..49b2c5b7 --- /dev/null +++ b/addons/func_godot/icons/icon_slipgate.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bw74kacajcaxb" +path="res://.godot/imported/icon_slipgate.svg-f42668b28b92f93c031f56d95dfcf5a6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/func_godot/icons/icon_slipgate.svg" +dest_files=["res://.godot/imported/icon_slipgate.svg-f42668b28b92f93c031f56d95dfcf5a6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/func_godot/icons/icon_slipgate3d.svg.import b/addons/func_godot/icons/icon_slipgate3d.svg.import index a962587c..6fc598d6 100644 --- a/addons/func_godot/icons/icon_slipgate3d.svg.import +++ b/addons/func_godot/icons/icon_slipgate3d.svg.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/icon_slipgate3d.svg-f125bef6ff5aa79b5fe3f232a compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/addons/func_godot/plugin.cfg b/addons/func_godot/plugin.cfg index 329d1883..d0bb2514 100644 --- a/addons/func_godot/plugin.cfg +++ b/addons/func_godot/plugin.cfg @@ -1,7 +1,7 @@ [plugin] name="FuncGodot" -description="Quake .map file support for Godot." -author="Shifty, Hannah Crawford, Emberlynn Bland, Tim Maccabe" -version="2025.1" +description="Quake .map and Half-Life .vmf file support for Godot." +author="Josh Palmer, Hannah Crawford, Emberlynn Bland, Tim Maccabe, Vera Lux" +version="2025.9" script="src/func_godot_plugin.gd" diff --git a/addons/func_godot/src/core/data.gd b/addons/func_godot/src/core/data.gd new file mode 100644 index 00000000..ad1f1756 --- /dev/null +++ b/addons/func_godot/src/core/data.gd @@ -0,0 +1,190 @@ +@icon("res://addons/func_godot/icons/icon_godot_ranger.svg") +class_name FuncGodotData +## Container that holds various data structs to be used in the [FuncGodotMap] build process. +## +## FuncGodot utilizes multiple custom data structs to hold information parsed from the map file +## and read and modified by the other core build classes. +## All data structs extend from [RefCounted], therefore all data is passed by reference. +## [br][br] +## [FuncGodotData.FaceData][br] +## [FuncGodotData.BrushData][br] +## [FuncGodotData.PatchData][br] +## [FuncGodotData.GroupData][br] +## [FuncGodotData.EntityData][br] + +## Data struct representing both a single map plane and a mesh face. Generated during parsing by plane definitions in the map file, +## it is further modified and utilized during the geo generation stage to create the final entity meshes. +class FaceData extends RefCounted: + ## Vertex array for the face. Only populated in combination with other faces, as a result of planar intersections. + var vertices: PackedVector3Array = [] + ## Index array for the face. Used in ArrayMesh creation. + var indices: PackedInt32Array = [] + ## Vertex normal array for the face. + ## By default, set to the planar normal, which results in flat shading. May be modified to adjust shading. + var normals: PackedVector3Array = [] + ## Tangent data for the face. + var tangents: PackedFloat32Array = [] + ## Local path to the texture without the extension, relative to the FuncGodotMap node's settings' base texture directory. + var texture: String + ## UV transform data generated during the parsing stage. Used for both Standard and Valve 220 UV formats, + ## though rotation is not applied to the transform when using Valve 220. + var uv: Transform2D + ## Raw vector data provided by the Valve 220 format during parsing. It is used to calculate rotations. + ## The presence of this data determines how face UVs and tangents are calculated. + var uv_axes: PackedVector3Array = [] + ## Raw plane data parsed from the map file using the id Tech coordinate system. + var plane: Plane + + ## Returns the average position of all vertices in the face. Only valid when the face has at least one vertex. + func get_centroid() -> Vector3: + return FuncGodotUtil.op_vec3_avg(vertices) + + ## Returns an arbitrary coplanar direction to use for winding the face. + ## Only valid when the face has at least two vertices. + func get_basis() -> Vector3: + if vertices.size() < 2: + push_error("Cannot get winding basis without at least 2 vertices!") + return Vector3.ZERO + return (vertices[1] - vertices[0]).normalized() + + ## Prepares the face for OpenGL triangle winding order. + ## Sorts the vertex array in-place by angle from the centroid. + func wind() -> void: + var centroid: Vector3 = get_centroid() + var u_axis: Vector3 = get_basis() + var v_axis: Vector3 = u_axis.cross(plane.normal).normalized() + var cmp_winding_angle: Callable = ( + func(a: Vector3, b: Vector3) -> bool: + var dir_a: Vector3 = a - centroid + var dir_b: Vector3 = b - centroid + var angle_a: float = atan2(dir_a.dot(v_axis), dir_a.dot(u_axis)) + var angle_b: float = atan2(dir_b.dot(v_axis), dir_b.dot(u_axis)) + return angle_a < angle_b + ) + + var _vertices: Array[Vector3] + _vertices.assign(vertices) + _vertices.sort_custom(cmp_winding_angle) + vertices = _vertices + + ## Repopulate the [member indices] array to create a triangle fan. + ## The face must be properly wound for the resulting indices to be valid. + func index_vertices() -> void: + var tri_count: int = vertices.size() - 2 + indices.resize(tri_count * 3) + var index: int = 0 + for i in tri_count: + indices[index] = 0 + indices[index + 1] = i + 1 + indices[index + 2] = i + 2 + index += 3 + +## Data struct representing a single map format brush. It is largely meant as a container for [FuncGodotData.FaceData] data. +class BrushData extends RefCounted: + ## Raw plane data parsed from the map file using the id Tech coordinate system. + var planes: Array[Plane] + ## Collection of [FuncGodotData.FaceData]. + var faces: Array[FaceData] + ## [code]true[/code] if this brush is completely covered in the [i]Origin[/i] texture defined in [FuncGodotMapSettings]. + ## Determined during [FuncGodotParser] and utilized during [FuncGodotGeometryGenerator]. + var origin: bool = false + +## Data struct representing a patch def entity. +class PatchData extends RefCounted: + ## Local path to the texture without the extension, relative to the FuncGodotMap node's settings' base texture directory. + var texture: String + var size: PackedInt32Array + var points: PackedVector3Array + var uvs: PackedVector2Array + +## Data struct representing a TrenchBroom Group, TrenchBroom Layer, or Valve VisGroup. +## Generated during the parsing stage and utilized during both parsing and entity assembly stages. +class GroupData extends RefCounted: + enum GroupType { GROUP, LAYER, } + ## Defines whether the group is a Group or a Layer. Currently only determines the name of the group. + var type: GroupType = GroupType.GROUP + ## Group ID retrieved from the map file. Utilized during the parsing and entity assembly stages to determine + ## which entities belong to which groups as well as which groups are children of other groups. + var id: int + ## Generated during the parsing stage using the format of type_id_name, eg: group_2_Arkham. + var name: String + ## ID of the parent group data, used to determine which group data is this group's parent. + var parent_id: int = -1 + ## Pointer to another group data that this group is a child of. + var parent: GroupData = null + ## Pointer to generated Node3D representing this group in the SceneTree. + var node: Node3D = null + ## If true, erases all entities assigned to this group and then the group itself at the end of the parsing stage, preventing those entities from being generated into nodes. + ## Can be set in TrenchBroom on layers using the "omit layer" option. + var omit: bool = false + +## Data struct representing a map format entity. +class EntityData extends RefCounted: + ## All of the entity's key value pairs from the map file, retrieved during parsing. + ## The func_godot_properties dictionary generated at the end of entity assembly is derived from this. + var properties: Dictionary = {} + ## The entity's brush data collected during the parsing stage. If the entity's FGD resource cannot be found, + ## the presence of a single brush determines this entity to be a Solid Entity. + var brushes: Array[BrushData] = [] + ## The entity's patch def data collected during the parsing stage. If the entity's FGD resource cannot be found, + ## the presence of a single patch def determines this entity to be a Solid Entity. + var patches: Array[PatchData] = [] + ## Pointer to the group data this entity belongs to. + var group: GroupData = null + ## The entity's FGD resource, determined by matching the classname properties of each. + ## This can only be a [FuncGodotFGDSolidClass], [FuncGodotFGDPointClass], or [FuncGodotFGDModelPointClass]. + var definition: FuncGodotFGDEntityClass = null + ## Mesh resource generated during the geometry generation stage and applied during the entity assembly stage. + var mesh: ArrayMesh = null + ## MeshInstance3D node generated during the entity assembly stage. + var mesh_instance: MeshInstance3D = null + ## Optional mesh metadata compiled during the geometry generation stage, used to determine face information from collision. + var mesh_metadata: Dictionary = {} + ## A collection of collision shape resources generated during the geometry generation stage and applied during the entity assembly stage. + var shapes: Array[Shape3D] = [] + ## A collection of [CollisionShape3D] nodes generated during the entity assembly stage. Each node corresponds to a shape in the [member shapes] array. + var collision_shapes: Array[CollisionShape3D] = [] + ## [OccluderInstance3D] node generated during the entity assembly stage using the [member mesh] resource. + var occluder_instance: OccluderInstance3D = null + ## True global position of the entity's generated node that the mesh's vertices are offset by during the geometry generation stage. + var origin: Vector3 = Vector3.ZERO + + ## Checks the entity's FGD resource definition, returning whether the Solid Class has a [MeshInstance3D] built for it. + func is_visual() -> bool: + return (definition + and definition is FuncGodotFGDSolidClass + and definition.build_visuals) + + ## Checks the entity's FGD resource definition, returning whether the Solid Class CollisionShapeType is set to Convex. + func is_collision_convex() -> bool: + return (definition + and definition is FuncGodotFGDSolidClass + and definition.collision_shape_type == FuncGodotFGDSolidClass.CollisionShapeType.CONVEX + ) + + ## Checks the entity's FGD resource definition, returning whether the Solid Class CollisionShapeType is set to Concave. + func is_collision_concave() -> bool: + return (definition + and definition is FuncGodotFGDSolidClass + and definition.collision_shape_type == FuncGodotFGDSolidClass.CollisionShapeType.CONCAVE + ) + + ## Determines if the entity's mesh should be processed for normal smoothing. + ## The smoothing property can be retrieved from [member FuncGodotMapSettings.entity_smoothing_property]. + func is_smooth_shaded(smoothing_property: String = "_phong") -> bool: + return properties.get(smoothing_property, "0").to_int() + + ## Retrieves the entity's smoothing angle to determine if the face should be smoothed. + ## The smoothing angle property can be retrieved from [member FuncGodotMapSettings.entity_smoothing_angle_property]. + func get_smoothing_angle(smoothing_angle_property: String = "_phong_angle") -> float: + return properties.get(smoothing_angle_property, "89.0").to_float() + +class VertexGroupData: + ## Faces this vertex appears in. + var faces: Array[FaceData] + ## Index within the associated face for this vertex. + var face_indices: PackedInt32Array + +class ParseData: + var entities: Array[EntityData] = [] + var groups: Array[GroupData] = [] diff --git a/addons/func_godot/src/core/data.gd.uid b/addons/func_godot/src/core/data.gd.uid new file mode 100644 index 00000000..e10bedaa --- /dev/null +++ b/addons/func_godot/src/core/data.gd.uid @@ -0,0 +1 @@ +uid://cqye8dehq4c7q diff --git a/addons/func_godot/src/core/entity_assembler.gd b/addons/func_godot/src/core/entity_assembler.gd new file mode 100644 index 00000000..a1b7eebe --- /dev/null +++ b/addons/func_godot/src/core/entity_assembler.gd @@ -0,0 +1,451 @@ +@icon("res://addons/func_godot/icons/icon_godot_ranger.svg") +class_name FuncGodotEntityAssembler extends RefCounted +## Entity assembly class that is instantiated by a [FuncGodotMap] node. + +const _SIGNATURE: String = "[ENT]" + +# Namespacing +const _GroupData := FuncGodotData.GroupData +const _EntityData := FuncGodotData.EntityData + +# Class members +## [FuncGodotMapSettings] provided by the [FuncGodotMap] during the build process. +var map_settings: FuncGodotMapSettings = null +## [enum FuncGodotMap.BuildFlags] that may affect the build process provided by the [FuncGodotMap]. +var build_flags: int = 0 + +# Signals +## Emitted when a step in the entity assembly process is completed. +## It is connected to [method FuncGodotUtil.print_profile_info] method if [member FuncGodotMap.build_flags] SHOW_PROFILE_INFO flag is set. +signal declare_step(step: String) + +func _init(settings: FuncGodotMapSettings) -> void: + map_settings = settings + +## Attempts to retrieve a [Script] via class name, to allow for [GDScript] class instantiation. +static func get_script_by_class_name(name_of_class: String) -> Script: + if ResourceLoader.exists(name_of_class, "Script"): + return load(name_of_class) as Script + for global_class in ProjectSettings.get_global_class_list(): + var found_name_of_class : String = global_class["class"] + var found_path : String = global_class["path"] + if found_name_of_class == name_of_class: + return load(found_path) as Script + return null + +## Generates a [Node3D] for a group's [SceneTree] representation and links the new [Node3D] to that group. +func generate_group_node(group_data: _GroupData) -> Node3D: + var group_node := Node3D.new() + group_node.name = group_data.name + group_data.node = group_node + return group_node + +## Generates and assembles a new [Node] based upon processed [FuncGodotData.EntityData]. Depending upon provided data, +## additional [MeshInstance3D], [CollisionShape3D], and [OccluderInstance3D] nodes may also be generated. +func generate_solid_entity_node(node: Node, node_name: String, data: _EntityData, definition: FuncGodotFGDSolidClass) -> Node: + if definition.spawn_type == FuncGodotFGDSolidClass.SpawnType.MERGE_WORLDSPAWN: + return null + + if definition.node_class != "": + if ClassDB.class_exists(definition.node_class): + node = ClassDB.instantiate(definition.node_class) + else: + var script: Script = get_script_by_class_name(definition.node_class) + if script is GDScript: + node = (script as GDScript).new() + else: + node = Node3D.new() + + node.name = node_name + node_name = node_name.trim_suffix(definition.classname).trim_suffix("_") + var properties: Dictionary = data.properties + + # Mesh Instance generation + if data.mesh: + var mesh_instance := MeshInstance3D.new() + mesh_instance.name = node_name + "_mesh_instance" + mesh_instance.mesh = data.mesh + mesh_instance.gi_mode = GeometryInstance3D.GI_MODE_DISABLED + if definition.global_illumination_mode: + mesh_instance.gi_mode = definition.global_illumination_mode + mesh_instance.cast_shadow = definition.shadow_casting_setting + mesh_instance.layers = definition.render_layers + node.add_child(mesh_instance) + data.mesh_instance = mesh_instance + + # Occluder generation + if definition.build_occlusion and data.mesh: + var verts: PackedVector3Array = [] + var indices: PackedInt32Array = [] + var index: int = 0 + for surf_idx in range(data.mesh.get_surface_count()): + var vert_count: int = verts.size() + var surf_array: Array = data.mesh.surface_get_arrays(surf_idx) + verts.append_array(surf_array[Mesh.ARRAY_VERTEX]) + indices.resize(indices.size() + surf_array[Mesh.ARRAY_INDEX].size()) + for new_index in surf_array[Mesh.ARRAY_INDEX]: + indices[index] = (new_index + vert_count) + index += 1 + + var occluder := ArrayOccluder3D.new() + occluder.set_arrays(verts, indices) + var occluder_instance := OccluderInstance3D.new() + occluder_instance.name = node_name + "_occluder_instance" + occluder_instance.occluder = occluder + node.add_child(occluder_instance) + data.occluder_instance = occluder_instance + + if not (build_flags & FuncGodotMap.BuildFlags.DISABLE_SMOOTHING) and data.is_smooth_shaded(map_settings.entity_smoothing_property): + mesh_instance.mesh = FuncGodotUtil.smooth_mesh_by_angle(data.mesh, data.get_smoothing_angle(map_settings.entity_smoothing_angle_property)) + + # Collision generation + if data.shapes.size() and node is CollisionObject3D: + node.collision_layer = definition.collision_layer + node.collision_mask = definition.collision_mask + node.collision_priority = definition.collision_priority + + var shape_to_face_array : Array[PackedInt32Array] = [] + if data.mesh_metadata.has('shape_to_face_array'): + shape_to_face_array = data.mesh_metadata['shape_to_face_array'] + data.mesh_metadata.erase('shape_to_face_array') + + # Generate CollisionShape3D nodes and apply shapes + var face_index_metadata : Dictionary[String, PackedInt32Array] = {} + for i in data.shapes.size(): + var shape := data.shapes[i] + var collision_shape := CollisionShape3D.new() + if definition.collision_shape_type == FuncGodotFGDSolidClass.CollisionShapeType.CONCAVE: + collision_shape.name = node_name + "_collision_shape" + else: + collision_shape.name = node_name + "_brush_%s_collision_shape" % i + collision_shape.shape = shape + collision_shape.shape.margin = definition.collision_shape_margin + collision_shape.owner = node.owner + node.add_child(collision_shape) + data.collision_shapes.append(collision_shape) + if shape_to_face_array.size() > i: + face_index_metadata[collision_shape.name] = shape_to_face_array[i] + + if definition.add_collision_shape_to_face_indices_metadata: + data.mesh_metadata['collision_shape_to_face_indices_map'] = face_index_metadata + + if "position" in node: + if node.position is Vector3: + node.position = FuncGodotUtil.id_to_opengl(data.origin) * map_settings.scale_factor + + if not data.mesh_metadata.is_empty(): + node.set_meta("func_godot_mesh_data", data.mesh_metadata) + + return node + +## Generates and assembles a new [Node] or [PackedScene] based upon processed [FuncGodotData.EntityData]. +func generate_point_entity_node(node: Node, node_name: String, properties: Dictionary, definition: FuncGodotFGDPointClass) -> Node: + var classname: String = properties["classname"] + + if definition.scene_file: + var flag: PackedScene.GenEditState = PackedScene.GEN_EDIT_STATE_DISABLED + if Engine.is_editor_hint(): + flag = PackedScene.GEN_EDIT_STATE_INSTANCE + node = definition.scene_file.instantiate(flag) + elif definition.node_class != "": + if ClassDB.class_exists(definition.node_class): + node = ClassDB.instantiate(definition.node_class) + else: + var script: Script = get_script_by_class_name(definition.node_class) + if script is GDScript: + node = (script as GDScript).new() + else: + node = Node3D.new() + + node.name = node_name + + if "rotation_degrees" in node and definition.apply_rotation_on_map_build: + var angles := Vector3.ZERO + if "angles" in properties or "mangle" in properties: + var key := "angles" if "angles" in properties else "mangle" + var angles_raw = properties[key] + if not angles_raw is Vector3: + angles_raw = angles_raw.split_floats(' ') + if angles_raw.size() > 2: + angles = Vector3(-angles_raw[0], angles_raw[1], -angles_raw[2]) + if key == "mangle": + if definition.classname.begins_with("light"): + angles = Vector3(angles_raw[1], angles_raw[0], -angles_raw[2]) + elif definition.classname == "info_intermission": + angles = Vector3(angles_raw[0], angles_raw[1], -angles_raw[2]) + else: + push_error("Invalid vector format for \"" + key + "\" in entity \"" + classname + "\"") + elif "angle" in properties: + var angle = properties["angle"] + if not angle is float: + angle = float(angle) + angles.y += angle + angles.y += 180 + node.rotation_degrees = angles + + if "scale" in node and definition.apply_scale_on_map_build: + if "scale" in properties: + var scale_prop: Variant = properties["scale"] + if typeof(scale_prop) == TYPE_STRING: + var scale_arr: PackedStringArray = (scale_prop as String).split(" ") + match scale_arr.size(): + 1: scale_prop = scale_arr[0].to_float() + 3: scale_prop = Vector3(scale_arr[1].to_float(), scale_arr[2].to_float(), scale_arr[0].to_float()) + 2: scale_prop = Vector2(scale_arr[0].to_float(), scale_arr[0].to_float()) + if typeof(scale_prop) == TYPE_FLOAT or typeof(scale_prop) == TYPE_INT: + node.scale *= scale_prop as float + elif node.scale is Vector3: + if typeof(scale_prop) == TYPE_VECTOR3 or typeof(scale_prop) == TYPE_VECTOR3I: + node.scale *= scale_prop as Vector3 + elif node.scale is Vector2: + if typeof(scale_prop) == TYPE_VECTOR2 or typeof(scale_prop) == TYPE_VECTOR2I: + node.scale *= scale_prop as Vector2 + + if "origin" in properties: + var origin_vec: Vector3 = Vector3.ZERO + var origin_comps: PackedFloat64Array = properties['origin'].split_floats(' ') + if origin_comps.size() > 2: + origin_vec = Vector3(origin_comps[1], origin_comps[2], origin_comps[0]) + else: + push_error("Invalid vector format for \"origin\" in " + node_name) + if "position" in node: + if node.position is Vector3: + node.position = origin_vec * map_settings.scale_factor + elif node.position is Vector2: + node.position = Vector2(origin_vec.z, -origin_vec.y) + + return node + +## Converts the [String] values of the entity data's [code]properties[/code] [Dictionary] to various [Variant] formats +## based upon the [FuncGodotFGDEntity]'s class properties, then attempts to send those properties to a [code]func_godot_properties[/code] [Dictionary] +## and an [code]_func_godot_apply_properties(properties: Dictionary)[/code] method on the node. A deferred call to [code]_func_godot_build_complete()[/code] is also made. +func apply_entity_properties(node: Node, data: _EntityData) -> void: + var properties: Dictionary = data.properties + + if data.definition: + var def := data.definition + for property in properties: + var prop_string = properties[property] + if property in def.class_properties: + var prop_default: Variant = def.class_properties[property] + + match typeof(prop_default): + TYPE_INT: + properties[property] = prop_string.to_int() + TYPE_FLOAT: + properties[property] = prop_string.to_float() + TYPE_BOOL: + properties[property] = bool(prop_string.to_int()) + TYPE_VECTOR3: + var prop_comps: PackedFloat64Array = prop_string.split_floats(" ") + if prop_comps.size() > 2: + properties[property] = Vector3(prop_comps[0], prop_comps[1], prop_comps[2]) + else: + push_error("Invalid Vector3 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) + properties[property] = prop_default + TYPE_VECTOR3I: + var prop_vec: Vector3i = prop_default + var prop_comps: PackedStringArray = prop_string.split(" ") + if prop_comps.size() > 2: + for i in 3: + prop_vec[i] = prop_comps[i].to_int() + else: + push_error("Invalid Vector3i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) + properties[property] = prop_vec + TYPE_COLOR: + var prop_color: Color = prop_default + var prop_comps: PackedStringArray = prop_string.split(" ") + if prop_comps.size() > 2: + prop_color.r8 = prop_comps[0].to_int() + prop_color.g8 = prop_comps[1].to_int() + prop_color.b8 = prop_comps[2].to_int() + prop_color.a = 1.0 + else: + push_error("Invalid Color format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) + properties[property] = prop_color + TYPE_DICTIONARY: + var prop_desc = def.class_property_descriptions[property] + if prop_desc is Array and prop_desc.size() > 1 and prop_desc[1] is int: + properties[property] = prop_string.to_int() + TYPE_ARRAY: + properties[property] = prop_string.to_int() + TYPE_VECTOR2: + var prop_comps: PackedFloat64Array = prop_string.split_floats(" ") + if prop_comps.size() > 1: + properties[property] = Vector2(prop_comps[0], prop_comps[1]) + else: + push_error("Invalid Vector2 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) + properties[property] = prop_default + TYPE_VECTOR2I: + var prop_vec: Vector2i = prop_default + var prop_comps: PackedStringArray = prop_string.split(" ") + if prop_comps.size() > 1: + for i in 2: + prop_vec[i] = prop_comps[i].to_int() + else: + push_error("Invalid Vector2i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) + properties[property] = prop_vec + TYPE_VECTOR4: + var prop_comps: PackedFloat64Array = prop_string.split_floats(" ") + if prop_comps.size() > 3: + properties[property] = Vector4(prop_comps[0], prop_comps[1], prop_comps[2], prop_comps[3]) + else: + push_error("Invalid Vector4 format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) + properties[property] = prop_default + TYPE_VECTOR4I: + var prop_vec: Vector4i = prop_default + var prop_comps: PackedStringArray = prop_string.split(" ") + if prop_comps.size() > 3: + for i in 4: + prop_vec[i] = prop_comps[i].to_int() + else: + push_error("Invalid Vector4i format for \'" + property + "\' in entity \'" + def.classname + "\': " + prop_string) + properties[property] = prop_vec + TYPE_STRING_NAME: + properties[property] = StringName(prop_string) + TYPE_NODE_PATH: + properties[property] = prop_string + TYPE_OBJECT: + properties[property] = prop_string + + # Assign properties not defined with defaults from the entity definition + for property in def.class_properties: + if not property in properties: + var prop_default: Variant = def.class_properties[property] + # Flags + if prop_default is Array: + var prop_flags_sum := 0 + for prop_flag in prop_default: + if prop_flag is Array and prop_flag.size() > 2: + if prop_flag[2] and prop_flag[1] is int: + prop_flags_sum += prop_flag[1] + properties[property] = prop_flags_sum + # Choices + elif prop_default is Dictionary: + var prop_desc = def.class_property_descriptions.get(property, "") + if prop_desc is Array and prop_desc.size() > 1 and (prop_desc[1] is int or prop_desc[1] is String): + properties[property] = prop_desc[1] + elif prop_default.size(): + properties[property] = prop_default[prop_default.keys().front()] + else: + properties[property] = 0 + # Materials, Shaders, and Sounds + elif prop_default is Resource: + properties[property] = prop_default.resource_path + # Target Destination and Target Source + elif prop_default is NodePath or prop_default is Object or prop_default == null: + properties[property] = "" + # Everything else + else: + properties[property] = prop_default + + if def.auto_apply_to_matching_node_properties: + for property in properties: + if property in node: + if typeof(node.get(property)) == typeof(properties[property]): + node.set(property, properties[property]) + else: + push_error("Entity %s property \'%s\' type mismatch with matching generated node property." % [node.name, property]) + + if "func_godot_properties" in node: + node.func_godot_properties = properties + + if node.has_method("_func_godot_apply_properties"): + node.call("_func_godot_apply_properties", properties) + + if node.has_method("_func_godot_build_complete"): + node.call_deferred("_func_godot_build_complete") + +## Generate a [Node] from [FuncGodotData.EntityData]. The returned node value can be [code]null[/code], +## in the case of [FuncGodotFGDSolidClass] entities with no [FuncGodotData.BrushData] entries. +func generate_entity_node(entity_data: _EntityData, entity_index: int) -> Node: + var node: Node = null + var node_name: String = "entity_%s" % entity_index + var properties: Dictionary = entity_data.properties + var entity_def: FuncGodotFGDEntityClass = entity_data.definition + + if "classname" in entity_data.properties: + var classname: String = properties["classname"] + + node_name += "_" + properties["classname"] + var default_point_def := FuncGodotFGDPointClass.new() + var default_solid_def := FuncGodotFGDSolidClass.new() + default_solid_def.collision_shape_type = FuncGodotFGDSolidClass.CollisionShapeType.NONE + + if entity_def: + var name_prop: String + if entity_def.name_property in properties: + name_prop = str(properties[entity_def.name_property]) + elif map_settings.entity_name_property in properties: + name_prop = str(properties[map_settings.entity_name_property]) + if not name_prop.is_empty(): + node_name = "entity_" + name_prop + + if entity_def is FuncGodotFGDSolidClass: + node = generate_solid_entity_node(node, node_name, entity_data, entity_def) + elif entity_def is FuncGodotFGDPointClass: + node = generate_point_entity_node(node, node_name, properties, entity_def) + else: + push_error("Invalid entity definition for \"" + node_name + "\". Entity definition must be Solid Class or Point Class.") + node = generate_point_entity_node(node, node_name, properties, default_point_def) + + if node and entity_def.script_class: + node.set_script(entity_def.script_class) + else: + push_error("No entity definition found for \"" + node_name + "\"") + if entity_data.brushes.size(): + node = generate_solid_entity_node(node, node_name, entity_data, default_solid_def) + else: + node = generate_point_entity_node(node, node_name, properties, default_point_def) + + return node + +## Main entity assembly process called by [FuncGodotMap]. Generates and sorts group nodes in the [SceneTree] first, +## then generates and assembles [Node]s based upon the provided [FuncGodotData.EntityData] and adds them to the [SceneTree]. +func build(map_node: FuncGodotMap, entities: Array[_EntityData], groups: Array[_GroupData]) -> void: + var scene_root := map_node.get_tree().edited_scene_root if map_node.get_tree() else map_node + build_flags = map_node.build_flags + + if map_settings.use_groups_hierarchy: + declare_step.emit("Generating %s groups" % groups.size()) + # Generate group nodes + for group in groups: + group.node = generate_group_node(group) + # Sort hierarchy and add them to the map + for group in groups: + if group.parent_id < 0: + map_node.add_child(group.node) + group.node.owner = scene_root + else: + for parent in groups: + if group.parent_id == parent.id: + parent.node.add_child(group.node) + group.node.owner = scene_root + declare_step.emit("Groups generation and sorting complete") + + declare_step.emit("Assembling %s entities" % entities.size()) + var entity_node: Node = null + for entity_index in entities.size(): + var entity_data : _EntityData = entities[entity_index] + entity_node = generate_entity_node(entity_data, entity_index) + if entity_node: + if not map_settings.use_groups_hierarchy or not entity_data.group: + map_node.add_child(entity_node) + if entity_index == 0: + map_node.move_child(entity_node, 0) + elif map_settings.use_groups_hierarchy: + for group in groups: + if entity_data.group.id == group.id: + group.node.add_child(entity_node) + + entity_node.owner = scene_root + if entity_data.mesh_instance: + entity_data.mesh_instance.owner = scene_root + for shape in entity_data.collision_shapes: + if shape: + shape.owner = scene_root + if entity_data.occluder_instance: + entity_data.occluder_instance.owner = scene_root + + apply_entity_properties(entity_node, entity_data) + declare_step.emit("Entity assembly and property application complete") diff --git a/addons/func_godot/src/core/entity_assembler.gd.uid b/addons/func_godot/src/core/entity_assembler.gd.uid new file mode 100644 index 00000000..7bec2d07 --- /dev/null +++ b/addons/func_godot/src/core/entity_assembler.gd.uid @@ -0,0 +1 @@ +uid://dh73tfvwp7kr6 diff --git a/addons/func_godot/src/core/geometry_generator.gd b/addons/func_godot/src/core/geometry_generator.gd new file mode 100644 index 00000000..4280ce10 --- /dev/null +++ b/addons/func_godot/src/core/geometry_generator.gd @@ -0,0 +1,567 @@ +@icon("res://addons/func_godot/icons/icon_slipgate.svg") +class_name FuncGodotGeometryGenerator extends RefCounted +## Geometry generation class that is instantiated by a [FuncGodotMap] node. + +const _SIGNATURE: String = "[GEO]" + +# Namespacing +const _VERTEX_EPSILON := FuncGodotUtil._VERTEX_EPSILON +const _VERTEX_EPSILON2 := _VERTEX_EPSILON * _VERTEX_EPSILON + +const _HYPERPLANE_SIZE := 65355.0 + +const _OriginType := FuncGodotFGDSolidClass.OriginType + +const _GroupData := FuncGodotData.GroupData +const _EntityData := FuncGodotData.EntityData +const _BrushData := FuncGodotData.BrushData +const _PatchData := FuncGodotData.PatchData +const _FaceData := FuncGodotData.FaceData +const _VertexGroupData := FuncGodotData.VertexGroupData + +# Class members +var map_settings: FuncGodotMapSettings = null +var entity_data: Array[_EntityData] +var texture_materials: Dictionary[String, Material] +var texture_sizes: Dictionary[String, Vector2] + +# Signals + +## Emitted when beginning a new step of the generation process. +signal declare_step(step: String) + +func _init(settings: FuncGodotMapSettings = null) -> void: + map_settings = settings + +#region TOOLS +func is_skip(face: _FaceData) -> bool: + return FuncGodotUtil.is_skip(face.texture, map_settings) + +func is_clip(face: _FaceData) -> bool: + return FuncGodotUtil.is_clip(face.texture, map_settings) + +func is_origin(face: _FaceData) -> bool: + return FuncGodotUtil.is_origin(face.texture, map_settings) + +#endregion + +#region PATCHES +func sample_bezier_curve(controls: Array[Vector3], t: float) -> Vector3: + var points: Array[Vector3] = controls.duplicate() + for i in controls.size(): + for j in controls.size() - 1 - i: + points[j] = points[j].lerp(points[j + 1], t) + return points[0] + +func sample_bezier_surface(controls: Array[Vector3], width: int, height: int, u: float, v: float) -> Vector3: + var curve: Array[Vector3] = [] + for x in range(width): + var col: Array[Vector3] = [] + for y in range(height): + var idx := y * width + x + col.append(controls[idx]) + curve.append(sample_bezier_curve(col, v)) + return sample_bezier_curve(curve, u) + +# Generate patch triangle indices +func get_triangle_indices(width: int, height: int) -> Array[int]: + var indices: Array[int] = [] + if width < 2 or height < 2: + return indices + + for row in range(height - 1): + for col in range(width - 1): + ## First triangle of the square; top left, top right, bottom left + indices.append(col + row * width) + indices.append((col + 1) + row * width) + indices.append(col + (row + 1) * width) + + ## Second triangle of the square; top right, bottom right, bottom left + indices.append((col + 1) + row * width) + indices.append((col + 1) + (row + 1) * width) + indices.append(col + (row + 1) * width) + return indices + +func create_patch_mesh(data: Array[_PatchData], mesh: Mesh): + return + +#endregion + +#region BRUSHES +func generate_base_winding(plane: Plane) -> PackedVector3Array: + var up := Vector3.UP + if abs(plane.normal.dot(up)) > 0.9: + up = Vector3.RIGHT + + var right: Vector3 = plane.normal.cross(up).normalized() + var forward: Vector3 = right.cross(plane.normal).normalized() + var centroid: Vector3 = plane.get_center() + + # construct oversized square on the plane to clip against + var winding := PackedVector3Array() + winding.append(centroid + (right * _HYPERPLANE_SIZE) + (forward * _HYPERPLANE_SIZE)) + winding.append(centroid + (right * -_HYPERPLANE_SIZE) + (forward * _HYPERPLANE_SIZE)) + winding.append(centroid + (right * -_HYPERPLANE_SIZE) + (forward * -_HYPERPLANE_SIZE)) + winding.append(centroid + (right * _HYPERPLANE_SIZE) + (forward * -_HYPERPLANE_SIZE)) + return winding + +func generate_face_vertices(brush: _BrushData, face_index: int, vertex_merge_distance: float = 0.0) -> PackedVector3Array: + var plane: Plane = brush.faces[face_index].plane + + # Generate initial square polygon to clip other planes against + var winding: PackedVector3Array = generate_base_winding(plane) + + for other_face_index in brush.faces.size(): + if other_face_index == face_index: + continue + + # NOTE: This may need to be recentered to the origin, then moved back to the correct face position + # This problem may arise from floating point inaccuracy, given a large enough initial brush + winding = Geometry3D.clip_polygon(winding, brush.faces[other_face_index].plane) + if winding.is_empty(): + break + + # Reduce seams between vertices + for i in winding.size(): + winding.set(i, winding.get(i).snappedf(vertex_merge_distance)) + + return winding + +func generate_brush_vertices(entity_index: int, brush_index: int) -> void: + var entity: _EntityData = entity_data[entity_index] + var brush: _BrushData = entity.brushes[brush_index] + var vertex_merge_distance: float = entity.properties.get(map_settings.vertex_merge_distance_property, 0.0) as float + + for face_index in brush.faces.size(): + var face: _FaceData = brush.faces[face_index] + face.vertices = generate_face_vertices(brush, face_index, vertex_merge_distance) + + face.normals.resize(face.vertices.size()) + face.normals.fill(face.plane.normal) + + var tangent: PackedFloat32Array = FuncGodotUtil.get_face_tangent(face) + + # convert into OpenGL coordinates + for i in face.vertices.size(): + face.tangents.append(tangent[1]) # Y + face.tangents.append(tangent[2]) # Z + face.tangents.append(tangent[0]) # X + face.tangents.append(tangent[3]) # W + return + +func generate_entity_vertices(entity_index: int) -> void: + var entity: _EntityData = entity_data[entity_index] + for brush_index in entity.brushes.size(): + generate_brush_vertices(entity_index, brush_index) + +func determine_entity_origins(entity_index: int) -> void: + var entity: _EntityData = entity_data[entity_index] + var origin_type := _OriginType.BRUSH + + if entity.definition is not FuncGodotFGDSolidClass: + if entity.brushes.is_empty(): + return + else: + origin_type = entity.definition.origin_type + + if entity_index == 0: + entity.origin = Vector3.ZERO + return + + var entity_mins: Vector3 = Vector3.INF + var entity_maxs: Vector3 = Vector3.INF + var origin_mins: Vector3 = Vector3.INF + var origin_maxs: Vector3 = -Vector3.INF + + for brush in entity.brushes: + for face in brush.faces: + for vertex in face.vertices: + if entity_mins != Vector3.INF: + entity_mins = entity_mins.min(vertex) + else: + entity_mins = vertex + if entity_maxs != Vector3.INF: + entity_maxs = entity_maxs.max(vertex) + else: + entity_maxs = vertex + + if brush.origin: + if origin_mins != Vector3.INF: + origin_mins = origin_mins.min(vertex) + else: + origin_mins = vertex + if origin_maxs != Vector3.INF: + origin_maxs = origin_maxs.max(vertex) + else: + origin_maxs = vertex + + # Default origin type is BOUNDS_CENTER + if entity_maxs != Vector3.INF and entity_mins != Vector3.INF: + entity.origin = entity_maxs - ((entity_maxs - entity_mins) * 0.5) + + if origin_type != _OriginType.BOUNDS_CENTER and entity.brushes.size() > 0: + match origin_type: + _OriginType.ABSOLUTE, _OriginType.RELATIVE: + if "origin" in entity.properties: + var origin_comps: PackedFloat64Array = entity.properties["origin"].split_floats(" ") + if origin_comps.size() > 2: + if entity.origin_type == _OriginType.ABSOLUTE: + entity.origin = Vector3(origin_comps[0], origin_comps[1], origin_comps[2]) + else: # _OriginType.RELATIVE + entity.origin += Vector3(origin_comps[0], origin_comps[1], origin_comps[2]) + + _OriginType.BRUSH: + if origin_mins != Vector3.INF: + entity.origin = origin_maxs - ((origin_maxs - origin_mins) * 0.5) + + _OriginType.BOUNDS_MINS: + entity.origin = entity_mins + + _OriginType.BOUNDS_MAXS: + entity.origin = entity_maxs + + _OriginType.AVERAGED: + entity.origin = Vector3.ZERO + var vertices: PackedVector3Array + for brush in entity.brushes: + for face in brush.faces: + vertices.append_array(face.vertices) + entity.origin = FuncGodotUtil.op_vec3_avg(vertices) + +func wind_entity_faces(entity_index: int) -> void: + var entity: _EntityData = entity_data[entity_index] + for brush in entity.brushes: + for face in brush.faces: + # Faces should already be wound from the new generation process, but this should be tested further first. + face.wind() + face.index_vertices() + +func smooth_entity_vertices(entity_index: int) -> void: + var entity: _EntityData = entity_data[entity_index] + if not entity.is_smooth_shaded(map_settings.entity_smoothing_property): + return + + var smoothing_angle: float = deg_to_rad(entity.get_smoothing_angle(map_settings.entity_smoothing_angle_property)) + var vertex_map: Dictionary[Vector3, _VertexGroupData] = {} + + # Group vertices by position and build map. NOTE: Vector3 keys can suffer from floating point precision. + # However, the vertex position should have already been snapped to _VERTEX_EPSILON. + for brush in entity.brushes: + for face in brush.faces: + for i in face.vertices.size(): + var pos := face.vertices[i].snappedf(_VERTEX_EPSILON) + + if not vertex_map.has(pos): + vertex_map[pos] = _VertexGroupData.new() + + var data := vertex_map[pos] + data.faces.append(face) + data.face_indices.append(i) + + var smoothed_normals: PackedVector3Array + + for vertex_group in vertex_map.values(): + if vertex_group.faces.size() <= 1: + continue + + # Collect final normals in a temporary arrays + # These cannot be applied until all original normals have been checked. + smoothed_normals = [] + + for i in vertex_group.faces.size(): + var this_face: _FaceData = vertex_group.faces[i] + var this_index: int = vertex_group.face_indices[i] + var this_normal: Vector3 = this_face.normals[this_index] + var average_normal: Vector3 = this_normal + + for j in vertex_group.faces.size(): + # Skip this face + if i == j: + continue + + var other_face: _FaceData = vertex_group.faces[j] + var other_index: int = vertex_group.face_indices[j] + var other_normal: Vector3 = other_face.normals[other_index] + + if this_normal.angle_to(other_normal) <= smoothing_angle: + average_normal += other_normal + + # Store the averaged normal + smoothed_normals.append(average_normal.normalized()) + + # Apply smoothed normals back to face data + for i in vertex_group.faces.size(): + var face: _FaceData = vertex_group.faces[i] + var index: int = vertex_group.face_indices[i] + face.normals[index] = smoothed_normals[i] + return + +#endregion + +func generate_entity_surfaces(entity_index: int) -> void: + var entity: _EntityData = entity_data[entity_index] + + # Don't build for non-solid classes or solids without any brushes. + if not entity or entity.brushes.is_empty(): + return + + var def: FuncGodotFGDSolidClass + if entity.definition is not FuncGodotFGDSolidClass: + def = FuncGodotFGDSolidClass.new() + else: + def = entity.definition + + var op_entity_ogl_xf: Callable = func(v: Vector3) -> Vector3: + return (FuncGodotUtil.id_to_opengl(v - entity.origin) * map_settings.scale_factor) + + # Surface groupings + var surfaces: Dictionary[String, Array] = {} + + # Metadata + var current_metadata_index: int = 0 + var texture_names_metadata: Array[StringName] = [] + var textures_metadata: PackedInt32Array = [] + var vertices_metadata: PackedVector3Array = [] + var normals_metadata: PackedVector3Array = [] + var positions_metadata: PackedVector3Array = [] + var shape_to_face_metadata: Array[PackedInt32Array] = [] + var face_index_metadata_map: Dictionary[_FaceData, PackedInt32Array] = {} + + # Arrange faces by surface texture + for brush in entity.brushes: + for face in brush.faces: + if is_skip(face) or is_origin(face): + continue + + if not surfaces.has(face.texture): + surfaces[face.texture] = [] + surfaces[face.texture].append(face) + + # Cache order for consistency when rebuilding + var textures: Array[String] = surfaces.keys() + + # Output mesh data + var mesh := ArrayMesh.new() + var mesh_arrays: Array[Array] = [] + var build_concave: bool = entity.is_collision_concave() + var concave_vertices: PackedVector3Array + + # Iteration variables + var arrays: Array + var faces: Array + + # MULTISURFACE SCOPE BEGIN + for texture_name in textures: + # SURFACE SCOPE BEGIN + faces = surfaces[texture_name] + + # Get texture index for metadata + var tex_index: int = texture_names_metadata.size() + if def.add_textures_metadata: + texture_names_metadata.append(texture_name) + + # Prepare new array + arrays = Array() + arrays.resize(ArrayMesh.ARRAY_MAX) + arrays[Mesh.ARRAY_VERTEX] = PackedVector3Array() + arrays[Mesh.ARRAY_NORMAL] = PackedVector3Array() + arrays[Mesh.ARRAY_TANGENT] = PackedFloat32Array() + arrays[Mesh.ARRAY_TEX_UV] = PackedVector2Array() + arrays[Mesh.ARRAY_INDEX] = PackedInt32Array() + + # Begin fresh index offset for this subarray + var index_offset: int = 0 + + for face in faces: + # FACE SCOPE BEGIN + + # Reject invalid faces + if face.vertices.size() < 3 or is_skip(face) or is_origin(face): + continue + + # Create trimesh points regardless of texture + if build_concave: + var tris: PackedVector3Array + tris.resize(face.indices.size()) + + # Add triangles from face indices directly + # TODO: This can possibly be merged with the below loop in a clever way + for i in face.indices.size(): + tris[i] = op_entity_ogl_xf.call(face.vertices[face.indices[i]]) + + concave_vertices.append_array(tris) + + # Do not generate visuals for clip textures + if is_clip(face): + continue + + # Handle metadata for this face + # Add metadata per triangle rather than per face to keep consistent metadata + var num_tris = face.indices.size() / 3 + if def.add_textures_metadata: + var tex_array: Array[int] = [] + tex_array.resize(num_tris) + tex_array.fill(tex_index) + textures_metadata.append_array(tex_array) + if def.add_face_normal_metadata: + var normal_array: Array[Vector3] = [] + normal_array.resize(num_tris) + normal_array.fill(FuncGodotUtil.id_to_opengl(face.plane.normal)) + normals_metadata.append_array(normal_array) + if def.add_face_position_metadata: + for i in num_tris: + var triangle_indices: Array[int] = [] + var triangle_vertices: Array[Vector3] = [] + triangle_indices.assign(face.indices.slice(i * 3, i * 3 + 3)) + triangle_vertices.assign(triangle_indices.map(func(idx : int) -> Vector3: return face.vertices[idx])) + var position := FuncGodotUtil.op_vec3_avg(triangle_vertices) + positions_metadata.append(op_entity_ogl_xf.call(position)) + if def.add_vertex_metadata: + for i in face.indices: + vertices_metadata.append(op_entity_ogl_xf.call(face.vertices[i])) + if def.add_collision_shape_to_face_indices_metadata: + face_index_metadata_map[face] = PackedInt32Array(range(current_metadata_index, current_metadata_index + num_tris)) + current_metadata_index += num_tris + + # Append face data to surface array + for i in face.vertices.size(): + # TODO: Mesh metadata may be generated here. + var v: Vector3 = face.vertices[i] + arrays[ArrayMesh.ARRAY_VERTEX].append(op_entity_ogl_xf.call(v)) + arrays[ArrayMesh.ARRAY_NORMAL].append(FuncGodotUtil.id_to_opengl(face.normals[i])) + var tx_sz: Vector2 = texture_sizes.get(face.texture, Vector2.ONE * map_settings.inverse_scale_factor) + arrays[ArrayMesh.ARRAY_TEX_UV].append(FuncGodotUtil.get_face_vertex_uv(v, face, tx_sz)) + + for j in 4: + arrays[ArrayMesh.ARRAY_TANGENT].append(face.tangents[(i * 4) + j]) + + # Create offset indices for the visual mesh + var op_shift_index: Callable = (func(a: int) -> int: return a + index_offset) + arrays[ArrayMesh.ARRAY_INDEX].append_array(Array(face.indices).map(op_shift_index)) + + index_offset += face.vertices.size() + + # FACE SCOPE END + + if FuncGodotUtil.filter_face(texture_name, map_settings): + continue + + mesh_arrays.append(arrays) + + # SURFACE SCOPE END + + # MULTISURFACE SCOPE END + textures.erase(map_settings.clip_texture) + + if def.build_visuals: + # Build mesh + for array_index in mesh_arrays.size(): + mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, mesh_arrays[array_index]) + mesh.surface_set_name(array_index, textures[array_index]) + mesh.surface_set_material(array_index, texture_materials[textures[array_index]]) + + # Apply mesh metadata + if def.add_textures_metadata: + entity.mesh_metadata["texture_names"] = texture_names_metadata + entity.mesh_metadata["textures"] = textures_metadata + if def.add_vertex_metadata: + entity.mesh_metadata["vertices"] = vertices_metadata + if def.add_face_normal_metadata: + entity.mesh_metadata["normals"] = normals_metadata + if def.add_face_position_metadata: + entity.mesh_metadata["positions"] = positions_metadata + + entity.mesh = mesh + + # Clear up unusued memory + arrays = [] + surfaces = {} + + if entity.is_collision_convex(): + var sh: ConvexPolygonShape3D + for b in entity.brushes: + if b.planes.is_empty() or b.origin: + continue + + var points := Array(Geometry3D.compute_convex_mesh_points(b.planes)).map(op_entity_ogl_xf) + if points.is_empty(): + continue + + sh = ConvexPolygonShape3D.new() + sh.points = points + entity.shapes.append(sh) + + if def.add_collision_shape_to_face_indices_metadata: + # convex collision has one shape per brush, so collect the + # indices for this brush's faces + var face_indices_array : PackedInt32Array = [] + for face in b.faces: + if face_index_metadata_map.has(face): + face_indices_array.append_array(face_index_metadata_map[face]) + shape_to_face_metadata.append(face_indices_array) + + elif build_concave and concave_vertices.size(): + var sh := ConcavePolygonShape3D.new() + sh.set_faces(concave_vertices) + entity.shapes.append(sh) + + if def.add_collision_shape_to_face_indices_metadata: + # for concave collision the shape will always represent every face + # in the entity, so just add every face here + var face_indices_array : PackedInt32Array = [] + for fm in face_index_metadata_map.values(): + face_indices_array.append_array(fm) + shape_to_face_metadata.append(face_indices_array) + + if def.add_collision_shape_to_face_indices_metadata: + # this metadata will be mapped to the actual shape node names during entity assembly + entity.mesh_metadata["shape_to_face_array"] = shape_to_face_metadata + +func unwrap_uv2s(entity_index: int, texel_size: float) -> void: + var entity: _EntityData = entity_data[entity_index] + if entity.mesh: + if (entity.definition as FuncGodotFGDSolidClass).global_illumination_mode: + entity.mesh.lightmap_unwrap(Transform3D.IDENTITY, texel_size) + +# Main build process +func build(build_flags: int, entities: Array[_EntityData]) -> Error: + var entity_count: int = entities.size() + declare_step.emit("Preparing %s %s" % [entity_count, "entity" if entity_count == 1 else "entities"]) + entity_data = entities + + declare_step.emit("Gathering materials") + var texture_map: Array[Dictionary] = FuncGodotUtil.build_texture_map(entity_data, map_settings) + texture_materials = texture_map[0] + texture_sizes = texture_map[1] + + var task_id: int + declare_step.emit("Generating brush vertices") + task_id = WorkerThreadPool.add_group_task(generate_entity_vertices, entity_count, -1, false, "Generate Brush Vertices") + WorkerThreadPool.wait_for_group_task_completion(task_id) + + declare_step.emit("Determining solid entity origins") + task_id = WorkerThreadPool.add_group_task(determine_entity_origins, entity_count, -1, false, "Determine Entity Origins") + WorkerThreadPool.wait_for_group_task_completion(task_id) + + declare_step.emit("Winding faces") + task_id = WorkerThreadPool.add_group_task(wind_entity_faces, entity_count, -1, false, "Wind Brush Faces") + WorkerThreadPool.wait_for_group_task_completion(task_id) + + # TODO: Reimplement after solving issues + #if not (build_flags & FuncGodotMap.BuildFlags.DISABLE_SMOOTHING): + # declare_step.emit("Smoothing entity faces") + # task_id = WorkerThreadPool.add_group_task(smooth_entity_vertices, entity_count, -1, false, "Smooth Entities") + # WorkerThreadPool.wait_for_group_task_completion(task_id) + + declare_step.emit("Generating surfaces") + task_id = WorkerThreadPool.add_group_task(generate_entity_surfaces, entity_count, -1, false, "Generate Surfaces") + WorkerThreadPool.wait_for_group_task_completion(task_id) + + if build_flags & FuncGodotMap.BuildFlags.UNWRAP_UV2: + declare_step.emit("Unwrapping UV2s") + var texel_size: float = map_settings.uv_unwrap_texel_size * map_settings.scale_factor + for entity_index in entity_count: + unwrap_uv2s(entity_index, texel_size) + + declare_step.emit("Geometry generation complete") + return OK diff --git a/addons/func_godot/src/core/geometry_generator.gd.uid b/addons/func_godot/src/core/geometry_generator.gd.uid new file mode 100644 index 00000000..02d12c4b --- /dev/null +++ b/addons/func_godot/src/core/geometry_generator.gd.uid @@ -0,0 +1 @@ +uid://b1yg28xbyno7v diff --git a/addons/func_godot/src/core/parser.gd b/addons/func_godot/src/core/parser.gd new file mode 100644 index 00000000..16e63826 --- /dev/null +++ b/addons/func_godot/src/core/parser.gd @@ -0,0 +1,439 @@ +@icon("res://addons/func_godot/icons/icon_godambler.svg") +class_name FuncGodotParser extends RefCounted +## MAP and VMF parser class that is instantiated by a [FuncGodotMap] node during the build process. +## +## @tutorial(Quake Wiki Map Format Article): https://quakewiki.org/wiki/Quake_Map_Format +## @tutorial(Valve Developer Wiki VMF Article): https://developer.valvesoftware.com/wiki/VMF_(Valve_Map_Format) + +const _SIGNATURE: String = "[PRS]" + +const _GroupData := FuncGodotData.GroupData +const _EntityData := FuncGodotData.EntityData +const _BrushData := FuncGodotData.BrushData +const _PatchData := FuncGodotData.PatchData +const _FaceData := FuncGodotData.FaceData +const _ParseData := FuncGodotData.ParseData + +## Emitted when a step in the parsing process is completed. +## It is connected to [method FuncGodotUtil.print_profile_info] method if [member FuncGodotMap.build_flags] SHOW_PROFILE_INFO flag is set. +signal declare_step(step: String) + +## Parses the map file, generating entity and group data and sub-data, then returns the generated data as an array of arrays. +## The first array is Array[FuncGodotData.EntityData], while the second array is Array[FuncGodotData.GroupData]. +func parse_map_data(map_file: String, map_settings: FuncGodotMapSettings) -> _ParseData: + var map_data: PackedStringArray = [] + var parse_data := _ParseData.new() + declare_step.emit("Loading map file %s" % map_file) + + # Retrieve real path if needed + if map_file.begins_with("uid://"): + var uid := ResourceUID.text_to_id(map_file) + if not ResourceUID.has_id(uid): + printerr("Error: failed to retrieve path for UID (%s)" % map_file) + return parse_data + map_file = ResourceUID.get_id_path(uid) + + # Open the map file + var file: FileAccess = FileAccess.open(map_file, FileAccess.READ) + if not file: + file = FileAccess.open(map_file + ".import", FileAccess.READ) + if file: + map_file += ".import" + else: + printerr("Error: Failed to open map file (" + map_file + ")") + return parse_data + + # Packed map file resources need to be accessed differently in exported projects. + if map_file.ends_with(".import"): + while not file.eof_reached(): + var line: String = file.get_line() + if line.begins_with("path"): + file.close() + line = line.replace("path=", "") + line = line.replace('"', '') + var data: String = (load(line) as QuakeMapFile).map_data + if data.is_empty(): + printerr("Error: Failed to open map file (" + line + ")") + return parse_data + map_data = data.split("\n") + break + else: + while not file.eof_reached(): + map_data.append(file.get_line()) + + # Determine map type and parse data + if map_file.to_lower().contains(".map"): + declare_step.emit("Parsing as Quake MAP") + parse_data = _parse_quake_map(map_data, map_settings, parse_data) + elif map_file.to_lower().contains(".vmf"): + declare_step.emit("Parsing as Source VMF") + parse_data = _parse_vmf(map_data, map_settings, parse_data) + + # Determine group hierarchy + declare_step.emit("Determining groups hierarchy") + var groups_data: Array[_GroupData] = parse_data.groups + for g in groups_data: + if g.parent_id != -1: + for p in groups_data: + if p.id == g.parent_id: + g.parent = p + break + + var entities_data: Array[_EntityData] = parse_data.entities + var entity_defs: Dictionary[String, FuncGodotFGDEntityClass] = map_settings.entity_fgd.get_entity_definitions() + + declare_step.emit("Checking entity omission and definition status") + + for i in range(entities_data.size() - 1, -1, -1): + var entity: _EntityData = entities_data[i] + + # Delete entities from omitted groups + if entity.group != null and entity.group.omit == true: + entities_data.remove_at(i) + continue + + # Provide entity definition to entity data. This gets used in both + # geo generation and entity assembly. + if "classname" in entity.properties: + var classname: String = entity.properties["classname"] + if classname in entity_defs: + entity.definition = entity_defs[classname] + + # Delete omitted groups + declare_step.emit("Removing omitted layers and groups") + for i in range(groups_data.size() - 1, -1, -1): + if groups_data[i].omit == true: + groups_data.remove_at(i) + + declare_step.emit("Map parsing complete") + return parse_data + +## Parser subroutine called by [method parse_map_data], specializing in the Quake MAP format. +func _parse_quake_map(map_data: PackedStringArray, map_settings: FuncGodotMapSettings, parse_data: _ParseData) -> _ParseData: + var entities_data: Array[_EntityData] = parse_data.entities + var groups_data: Array[_GroupData] = parse_data.groups + var ent: _EntityData = null + var brush: _BrushData = null + var patch: _PatchData = null + var scope: int = 0 # Scope level, to keep track of where we are in PatchDef parsing + + for line in map_data: + line = line.replace("\t", "") + + #region START DATA + # Start entity, brush, or patchdef + if line.begins_with("{"): + if not ent: + ent = _EntityData.new() + else: + if not patch: + brush = _BrushData.new() + else: + scope += 1 + continue + #endregion + + #region COMMIT DATA + # Commit entity or brush + if line.begins_with("}"): + if brush: + ent.brushes.append(brush) + brush = null + elif patch: + if scope: + scope -= 1 + else: + ent.patches.append(patch) + patch = null + else: + # TrenchBroom layers and groups + if ent.properties["classname"] == "func_group" and ent.properties.has("_tb_type"): + # Merge TB Group / Layer structural brushes with worldspawn + if entities_data.size(): + entities_data[0].brushes.append_array(ent.brushes) + + # Create group data + var group: _GroupData = _GroupData.new() + var props: Dictionary = ent.properties + group.id = props["_tb_id"] as int + if props["_tb_type"] == "_tb_layer": + group.type = _GroupData.GroupType.GROUP + group.name = "layer_" + else: + group.name = "group_" + group.name = group.name + str(group.id) + if props["_tb_name"] != "Unnamed": + group.name = group.name + "_" + (props["_tb_name"] as String).replace(" ", "_") + if props.has("_tb_layer"): + group.parent_id = props["_tb_layer"] as int + if props.has("_tb_group"): + group.parent_id = props["_tb_group"] as int + if props.has("_tb_layer_omit_from_export"): + group.omit = true + + # Commit group + groups_data.append(group) + + # Commit entity + else: + entities_data.append(ent) + ent = null + continue + #endregion + + #region PROPERTY DATA + # Retrieve key value pairs + if line.begins_with("\""): + var tokens: PackedStringArray = line.split("\" \"") + if tokens.size() < 2: + tokens = line.split("\"\"") + var key: String = tokens[0].trim_prefix("\"") + var value: String = tokens[1].trim_suffix("\"") + ent.properties[key] = value + #endregion + + #region BRUSH DATA + if brush and line.begins_with("("): + line = line.replace("(","") + var tokens: PackedStringArray = line.split(" ) ") + + # Retrieve plane data + var points: PackedVector3Array + points.resize(3) + for i in 3: + tokens[i] = tokens[i].trim_prefix("(") + var pts: PackedFloat64Array = tokens[i].split_floats(" ", false) + var point := Vector3(pts[0], pts[1], pts[2]) + points[i] = point + + var plane := Plane(points[0], points[1], points[2]) + brush.planes.append(plane) + + var face: _FaceData = _FaceData.new() + face.plane = plane + + # Retrieve texture data + var tex: String = String() + if tokens[3].begins_with("\""): # textures with spaces get surrounded by double quotes + var last_quote := tokens[3].rfind("\"") + tex = tokens[3].substr(1, last_quote - 1) + tokens = tokens[3].substr(last_quote + 2).split(" ] ") + else: + tex = tokens[3].get_slice(" ", 0) + tokens = tokens[3].trim_prefix(tex + " ").split(" ] ") + face.texture = tex + + # Check for origin brushes. Brushes must be completely textured with origin to be valid. + if brush.faces.is_empty(): + if tex == map_settings.origin_texture: + brush.origin = true + elif brush.origin == true: + if tex != map_settings.origin_texture: + brush.origin = false + + # Retrieve UV data + var uv: Transform2D = Transform2D.IDENTITY + + # Valve 220: texname [ ux uy ux offsetX ] [vx vy vz offsetY] rotation scaleX scaleY + if tokens.size() > 1: + var coords: PackedFloat64Array + for i in 2: + coords = tokens[i].trim_prefix("[ ").split_floats(" ", false) + face.uv_axes.append(Vector3(coords[0], coords[1], coords[2])) # Save axis vectors separately + face.uv.origin[i] = coords[3] # UV offset stored as transform origin + + coords = tokens[2].split_floats(" ", false) + # UV scale factor stored in basis + face.uv.x = Vector2(coords[1], 0.0) + face.uv.y = Vector2(0.0, coords[2]) + + # Quake Standard: texname offsetX offsetY rotation scaleX scaleY + else: + var coords: PackedFloat64Array = tokens[0].split_floats(" ", false) + face.uv.origin = Vector2(coords[0], coords[1]) + + var r: float = deg_to_rad(coords[2]) + face.uv.x = Vector2(cos(r), -sin(r)) * coords[3] + face.uv.y = Vector2(sin(r), cos(r)) * coords[4] + + brush.faces.append(face) + continue + #endregion + + #region PATCH DATA + if patch: + if line.begins_with("("): + line = line.replace("( ","") + # Retrieve patch control points + if patch.size: + var tokens: PackedStringArray = line.replace("(", "").split(" )", false) + for i in tokens.size(): + var subtokens: PackedFloat64Array = tokens[i].split_floats(" ", false) + patch.points.append(Vector3(subtokens[0], subtokens[1], subtokens[2])) + patch.uvs.append(Vector2(subtokens[3], subtokens[4])) + # Retrieve patch size + else: + var tokens: PackedStringArray = line.replace(")","").split(" ", false) + patch.size.resize(tokens.size()) + for i in tokens.size(): + patch.size[i] = tokens[i].to_int() + # Retrieve patch texture + elif not line.begins_with(")"): + patch.texture = line.replace("\"","") + + if line.begins_with("patchDef"): + brush = null + patch = _PatchData.new() + continue + #endregion + + #region ASSIGN GROUPS + for e in entities_data: + var group_id: int = -1 + if e.properties.has("_tb_layer"): + group_id = e.properties["_tb_layer"] as int + elif e.properties.has("_tb_group"): + group_id = e.properties["_tb_group"] as int + if group_id != -1: + for g in groups_data: + if g.id == group_id: + e.group = g + break + #endregion + + return parse_data + +## Parser subroutine called by [method parse_map_data], specializing in the Valve Map Format used by Hammer based editors. +func _parse_vmf(map_data: PackedStringArray, map_settings: FuncGodotMapSettings, parse_data: _ParseData) -> _ParseData: + var entities_data: Array[_EntityData] = parse_data.entities + var groups_data: Array[_GroupData] = parse_data.groups + var ent: _EntityData = null + var brush: _BrushData = null + var group: _GroupData = null + var group_parent_hierarchy: Array[_GroupData] = [] + var scope: int = 0 + + for line in map_data: + line = line.replace("\t", "") + + #region START DATA + if line.begins_with("entity") or line.begins_with("world"): + ent = _EntityData.new() + continue + if line.begins_with("solid"): + brush = _BrushData.new() + continue + if brush and line.begins_with("{"): + scope += 1 + continue + if line == "visgroup": + if group != null: + groups_data.append(group) + group_parent_hierarchy.append(group) + group = _GroupData.new() + if group_parent_hierarchy.size(): + group.parent = group_parent_hierarchy.back() + group.parent_id = group.parent.id + continue + #endregion + + #region COMMIT DATA + if line.begins_with("}"): + if scope > 0: + scope -= 1 + if not scope: + if brush: + if brush.faces.size(): + ent.brushes.append(brush) + brush = null + elif ent: + entities_data.append(ent) + ent = null + elif group: + groups_data.append(group) + group = null + elif group_parent_hierarchy.size(): + group_parent_hierarchy.pop_back() + continue + #endregion + + # Retrieve key value pairs + if (ent or group) and line.begins_with("\""): + var tokens: PackedStringArray = line.split("\" \"") + var key: String = tokens[0].trim_prefix("\"") + var value: String = tokens[1].trim_suffix("\"") + + #region BRUSH DATA + if brush: + if scope > 1: + match key: + "plane": + tokens = value.replace("(", "").split(")", false) + var points: PackedVector3Array + points.resize(3) + for i in 3: + tokens[i] = tokens[i].trim_prefix("(") + var pts: PackedFloat64Array = tokens[i].split_floats(" ", false) + var point: Vector3 = Vector3(pts[0], pts[1], pts[2]) + points[i] = point + brush.planes.append(Plane(points[0], points[1], points[2])) + brush.faces.append(_FaceData.new()) + brush.faces[-1].plane = brush.planes[-1] + continue + "material": + if brush.faces.size(): + brush.faces[-1].texture = value + # Origin brush needs to be completely set to origin, otherwise it's invalid + if brush.faces.size() < 2: + if value == map_settings.origin_texture: + brush.origin = true + elif brush.origin == true: + if value != map_settings.origin_texture: + brush.origin = false + continue + "uaxis", "vaxis": + if brush.faces.size(): + value = value.replace("[", "") + var vals: PackedFloat64Array = value.replace("]", "").split_floats(" ", false) + var face: _FaceData = brush.faces[-1] + face.uv_axes.append(Vector3(vals[0], vals[1], vals[2])) + if key.begins_with("u"): + face.uv.origin.x = vals[3] # Offset + face.uv.x *= vals[4] # Scale + else: + face.uv.origin.y = vals[3] # Offset + face.uv.y *= vals[4] # Scale + continue + "rotation": + # Rotation isn't used in Valve 220 mapping and VMFs are 220 exclusive + continue + "visgroupid": + # Don't put worldspawn into a group + if entities_data.size(): + # Only nodes can be organized into groups in the SceneTree, so only use the first brush's group + if not ent.properties.has(key): + ent.properties[key] = value + #endregion + elif ent: + ent.properties[key] = value + continue + elif group: + if key == "name": + group.name = "group_%s_" + value + elif key == "visgroupid": + group.id = value.to_int() + group.name = group.name % value + group.name = group.name.replace(" ", "_") + continue + + #region ASSIGN GROUPS + for e in entities_data: + if e.properties.has("visgroupid"): + var group_id: int = e.properties["visgroupid"] as int + for g in groups_data: + if g.id == group_id: + e.group = g + break + #endregion + + return parse_data diff --git a/addons/func_godot/src/core/parser.gd.uid b/addons/func_godot/src/core/parser.gd.uid new file mode 100644 index 00000000..d13e6d7a --- /dev/null +++ b/addons/func_godot/src/core/parser.gd.uid @@ -0,0 +1 @@ +uid://dflet6p5hbqts diff --git a/addons/func_godot/src/fgd/func_godot_fgd_base_class.gd b/addons/func_godot/src/fgd/func_godot_fgd_base_class.gd index c62b1658..e64111a3 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_base_class.gd +++ b/addons/func_godot/src/fgd/func_godot_fgd_base_class.gd @@ -1,7 +1,14 @@ @tool -## Special inheritance class for [FuncGodotFGDSolidClass] and [FuncGodotFGDPointClass] entity definitions. Useful for adding shared or common properties and descriptions. -class_name FuncGodotFGDBaseClass -extends FuncGodotFGDEntityClass +@icon("res://addons/func_godot/icons/icon_godot_ranger.svg") +class_name FuncGodotFGDBaseClass extends FuncGodotFGDEntityClass +## Special inheritance class for [FuncGodotFGDSolidClass] and [FuncGodotFGDPointClass] entity definitions. +## +## Inheritance class for [FuncGodotFGDSolidClass] and [FuncGodotFGDPointClass] entities, +## used to shared or common properties and descriptions across different definitions. +## +## @tutorial(Quake Wiki Entity Article): https://quakewiki.org/wiki/Entity +## @tutorial(Level Design Book: Entity Types and Settings): https://book.leveldesignbook.com/appendix/resources/formats/fgd#entity-types-and-settings-basic +## @tutorial(Valve Developer Wiki FGD Article): https://developer.valvesoftware.com/wiki/FGD#Class_Types_and_Properties func _init() -> void: prefix = "@BaseClass" diff --git a/addons/func_godot/src/fgd/func_godot_fgd_base_class.gd.uid b/addons/func_godot/src/fgd/func_godot_fgd_base_class.gd.uid index 35726878..7010a944 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_base_class.gd.uid +++ b/addons/func_godot/src/fgd/func_godot_fgd_base_class.gd.uid @@ -1 +1 @@ -uid://6o4wbl0iau0v +uid://ck575aqs1sbrb diff --git a/addons/func_godot/src/fgd/func_godot_fgd_entity_class.gd b/addons/func_godot/src/fgd/func_godot_fgd_entity_class.gd index f5b9beb9..bcc0ab2f 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_entity_class.gd +++ b/addons/func_godot/src/fgd/func_godot_fgd_entity_class.gd @@ -1,13 +1,20 @@ @icon("res://addons/func_godot/icons/icon_godot_ranger.svg") -## Base entity definition class. Not to be used directly, use [FuncGodotFGDBaseClass], [FuncGodotFGDSolidClass], or [FuncGodotFGDPointClass] instead. -class_name FuncGodotFGDEntityClass -extends Resource +class_name FuncGodotFGDEntityClass extends Resource +## Entity definition template. WARNING! Not to be used directly! Use [FuncGodotFGDBaseClass], [FuncGodotFGDSolidClass], or [FuncGodotFGDPointClass] instead. +## +## Entity definition template. It holds all of the common entity class properties shared between [FuncGodotFGDBaseClass], [FuncGodotFGDSolidClass], or [FuncGodotFGDPointClass]. +## Not to be used directly, use one of the aforementioned FGD class types instead. +## +## @tutorial(Quake Wiki Entity Article): https://quakewiki.org/wiki/Entity +## @tutorial(Level Design Book: Entity Types and Settings): https://book.leveldesignbook.com/appendix/resources/formats/fgd#entity-types-and-settings-basic +## @tutorial(Valve Developer Wiki FGD Article): https://developer.valvesoftware.com/wiki/FGD#Class_Types_and_Properties +## @tutorial(Valve Developer Wiki Entity Descriptions): https://developer.valvesoftware.com/wiki/FGD#Entity_Description var prefix: String = "" @export_group("Entity Definition") -## Entity classname. This is a required field in all entity types as it is parsed by both the map editor and by FuncGodot on map build. +## Entity classname. [b][i]This is a required field in all entity types[/i][/b] as it is parsed by both the map editor and by FuncGodot on map build. @export var classname : String = "" ## Entity description that appears in the map editor. Not required. @@ -16,19 +23,21 @@ var prefix: String = "" ## Entity does not get written to the exported FGD. Entity is only used for [FuncGodotMap] build process. @export var func_godot_internal : bool = false -## FuncGodotFGDBaseClass resources to inherit [member class_properties] and [member class_descriptions] from. +## [FuncGodotFGDBaseClass] resources to inherit [member class_properties] and [member class_descriptions] from. @export var base_classes: Array[Resource] = [] -## Key value pair properties that will appear in the map editor. After building the FuncGodotMap in Godot, these properties will be added to a Dictionary that gets applied to the generated Node, as long as that Node is a tool script with an exported `func_godot_properties` Dictionary. +## Key value pair properties that will appear in the map editor. After building the [FuncGodotMap] in Godot, these properties will be added to a [Dictionary] +## that gets applied to the generated node, as long as that node is a tool script with an exported `func_godot_properties` Dictionary. @export var class_properties : Dictionary = {} -## Descriptions for previously defined key value pair properties. +## Map editor descriptions for previously defined key value pair properties. Optional but recommended. @export var class_property_descriptions : Dictionary = {} -## Automatically applies entity class properties to matching properties in the generated node. When using this feature, class properties need to be the correct type or you may run into errors on map build. +## Automatically applies entity class properties to matching properties in the generated node. +## When using this feature, class properties need to be the correct type or you may run into errors on map build. @export var auto_apply_to_matching_node_properties : bool = false -## Appearance properties for the map editor. See the [**Valve FGD**](https://developer.valvesoftware.com/wiki/FGD#Entity_Description) and [**TrenchBroom**](https://trenchbroom.github.io/manual/latest/#display-models-for-entities) documentation for more information. +## Appearance properties for the map editor. See the Valve Developer Wiki and TrenchBroom documentation for more information. @export var meta_properties : Dictionary = { "size": AABB(Vector3(-8, -8, -8), Vector3(8, 8, 8)), "color": Color(0.8, 0.8, 0.8) @@ -36,14 +45,16 @@ var prefix: String = "" @export_group("Node Generation") -## Node to generate on map build. This can be a built-in Godot class or a GDExtension class. For Point Class entities that use Scene File instantiation leave this blank. +## Node to generate on map build. This can be a built-in Godot class, a GDScript class, or a GDExtension class. +## For Point Class entities that use Scene File instantiation leave this blank. @export var node_class := "" -## Class property to use in naming the generated node. Overrides `name_property` in [FuncGodotMapSettings]. +## Optional class property to use in naming the generated node. Overrides [member FuncGodotMapSettings.name_property]. ## Naming occurs before adding to the [SceneTree] and applying properties. ## Nodes will be named `"entity_" + name_property`. An entity's name should be unique, otherwise you may run into unexpected behavior. @export var name_property := "" +## Parses the definition and outputs it into the FGD format. func build_def_text(target_editor: FuncGodotFGDFile.FuncGodotTargetMapEditors = FuncGodotFGDFile.FuncGodotTargetMapEditors.TRENCHBROOM) -> String: # Class prefix var res : String = prefix @@ -92,6 +103,8 @@ func build_def_text(target_editor: FuncGodotFGDFile.FuncGodotTargetMapEditors = ] elif value is String: res += value + elif value is Dictionary and target_editor == FuncGodotFGDFile.FuncGodotTargetMapEditors.TRENCHBROOM: + res += JSON.stringify(value) res += ")" @@ -120,7 +133,8 @@ func build_def_text(target_editor: FuncGodotFGDFile.FuncGodotTargetMapEditors = if value is Dictionary and class_property_descriptions[prop] is Array: var prop_arr: Array = class_property_descriptions[prop] if prop_arr.size() > 1 and (prop_arr[1] is int or prop_arr[1] is String): - prop_description = "\"" + prop_arr[0] + "\" : " + str(prop_arr[1]) + var value_str : String = str(prop_arr[1]) if prop_arr[1] is int else "\"" + prop_arr[1] + "\"" + prop_description = "\"" + prop_arr[0] + "\" : " + value_str else: prop_description = "\"\" : 0" printerr(str(prop) + " has incorrect description format. Should be [String description, int / String default value].") @@ -204,7 +218,9 @@ func build_def_text(target_editor: FuncGodotFGDFile.FuncGodotTargetMapEditors = res += " : " res += prop_description - if value is bool or value is Dictionary or value is Array: + if value is bool: + res += " : 1 = " if value else " : 0 = " + elif value is Dictionary or value is Array: res += " = " else: res += " : " diff --git a/addons/func_godot/src/fgd/func_godot_fgd_entity_class.gd.uid b/addons/func_godot/src/fgd/func_godot_fgd_entity_class.gd.uid index 88f5c99f..52edf468 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_entity_class.gd.uid +++ b/addons/func_godot/src/fgd/func_godot_fgd_entity_class.gd.uid @@ -1 +1 @@ -uid://blhmvtghs553u +uid://cgkrrgcimlr8y diff --git a/addons/func_godot/src/fgd/func_godot_fgd_file.gd b/addons/func_godot/src/fgd/func_godot_fgd_file.gd index feda27e5..f1e23178 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_file.gd +++ b/addons/func_godot/src/fgd/func_godot_fgd_file.gd @@ -1,8 +1,12 @@ @tool @icon("res://addons/func_godot/icons/icon_godot_ranger.svg") -## [Resource] file used to express a set of [FuncGodotFGDEntity] definitions. Can be exported as an FGD file for use with a Quake map editor. Used in conjunction with a [FuncGodotMapSetting] resource to generate nodes in a [FuncGodotMap] node. -class_name FuncGodotFGDFile -extends Resource +class_name FuncGodotFGDFile extends Resource +## [Resource] file used to express a set of [FuncGodotFGDEntity] definitions. +## +## Can be exported as an FGD file for use with a Quake or Hammer-based map editor. Used in conjunction with [FuncGodotMapSetting] to generate nodes in a [FuncGodotMap] node. +## +## @tutorial(Level Design Book FGD Chapter): https://book.leveldesignbook.com/appendix/resources/formats/fgd +## @tutorial(Valve Developer Wiki FGD Article): https://developer.valvesoftware.com/wiki/FGD ## Supported map editors enum, used in conjunction with [member target_map_editor]. enum FuncGodotTargetMapEditors { @@ -13,12 +17,10 @@ enum FuncGodotTargetMapEditors { } ## Builds and exports the FGD file. -@export var export_file: bool: - get: - return export_file # TODO Converter40 Non existent get function - set(new_export_file): - if new_export_file != export_file: - do_export_file(target_map_editor) +@export_tool_button("Export FGD") var export_file := export_button + +func export_button() -> void: + do_export_file(target_map_editor) func do_export_file(target_editor: FuncGodotTargetMapEditors = FuncGodotTargetMapEditors.TRENCHBROOM, fgd_output_folder: String = "") -> void: if not Engine.is_editor_hint(): @@ -32,11 +34,20 @@ func do_export_file(target_editor: FuncGodotTargetMapEditors = FuncGodotTargetMa if fgd_name == "": print("Skipping export: Empty FGD name") + + if not DirAccess.dir_exists_absolute(fgd_output_folder): + if DirAccess.make_dir_recursive_absolute(fgd_output_folder) != OK: + print("Skipping export: Failed to create directory") + return - var fgd_file = fgd_output_folder + "/" + fgd_name + ".fgd" - - print("Exporting FGD to ", fgd_file) + var fgd_file = fgd_output_folder.path_join(fgd_name + ".fgd") + var file_obj := FileAccess.open(fgd_file, FileAccess.WRITE) + if not file_obj: + print("Failed to open file for writing: ", fgd_file) + return + + print("Exporting FGD to ", fgd_file) file_obj.store_string(build_class_text(target_editor)) file_obj.close() @@ -100,8 +111,8 @@ func get_fgd_classes() -> Array: res.append(cur_ent_def) return res -func get_entity_definitions() -> Dictionary: - var res : Dictionary = {} +func get_entity_definitions() -> Dictionary[String, FuncGodotFGDEntityClass]: + var res: Dictionary[String, FuncGodotFGDEntityClass] = {} for base_fgd in base_fgd_files: var fgd_res = base_fgd.get_entity_definitions() diff --git a/addons/func_godot/src/fgd/func_godot_fgd_file.gd.uid b/addons/func_godot/src/fgd/func_godot_fgd_file.gd.uid index 9fbbdb26..c963488c 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_file.gd.uid +++ b/addons/func_godot/src/fgd/func_godot_fgd_file.gd.uid @@ -1 +1 @@ -uid://cknmd0lgmorx2 +uid://drlmgulwbjwqu diff --git a/addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd b/addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd index 3f431259..c27065d4 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd +++ b/addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd @@ -1,43 +1,49 @@ @tool -## A special type of [FuncGodotFGDPointClass] entity that can automatically generate a special simplified GLB model file for the map editor display. +@icon("res://addons/func_godot/icons/icon_godambler3d.svg") +class_name FuncGodotFGDModelPointClass extends FuncGodotFGDPointClass +## A special type of [FuncGodotFGDPointClass] entity that automatically generates a special simplified GLB model file for the map editor display. ## Only supported in map editors that support GLTF or GLB. -class_name FuncGodotFGDModelPointClass -extends FuncGodotFGDPointClass +## +## @tutorial(Quake Wiki Entity Article): https://quakewiki.org/wiki/Entity +## @tutorial(Level Design Book: Entity Types and Settings): https://book.leveldesignbook.com/appendix/resources/formats/fgd#entity-types-and-settings-basic +## @tutorial(Valve Developer Wiki FGD Article): https://developer.valvesoftware.com/wiki/FGD#Class_Types_and_Properties +## @tutorial(dumptruck_ds' Quake Mapping Entities Tutorial): https://www.youtube.com/watch?v=gtL9f6_N2WM +## @tutorial(Level Design Book: Display Models for Entities): https://book.leveldesignbook.com/appendix/resources/formats/fgd#display-models-for-entities +## @tutorial(Valve Developer Wiki FGD Article: Entity Description Section): https://developer.valvesoftware.com/wiki/FGD#Entity_Description +## @tutorial(TrenchBroom Manual: Display Models for Entities): https://trenchbroom.github.io/manual/latest/#display-models-for-entities enum TargetMapEditor { - GENERIC, - TRENCHBROOM + GENERIC, ## Entity definition uses the [b]@studio[/b] key word. [member scale_expression] is ignored. Supported by all map editors. + TRENCHBROOM ## Entity definition uses the [b]@model[/b] key word. [member scale_expression] is applied if set. } -## Determines how model interprets [member scale_expression]. @export var target_map_editor: TargetMapEditor = TargetMapEditor.GENERIC -## Display model export folder relative to the model folder set by [FuncGodotLocalConfig]. +## Display model export folder relative to [member ProjectSettings.func_godot/model_point_class_save_path]. @export var models_sub_folder : String = "" -## Scale expression applied to model. See the [TrenchBroom Documentation](https://trenchbroom.github.io/manual/latest/#display-models-for-entities) for more information. +## Scale expression applied to model. Only used by TrenchBroom. If left empty, uses [member ProjectSettings.func_godot/default_inverse_scale_factor]. [br][br]Read the TrenchBroom Manual for more information on the "scale expression" feature. @export var scale_expression : String = "" -## Model Point Class can override the 'size' meta property by auto-generating a value from the meshes' [AABB]. Proper generation requires 'scale_expression' set to a float or [Vector3]. **WARNING:** Generated size property unlikely to align cleanly to grid! +## Model Point Class can override the 'size' meta property by auto-generating a value from the meshes' [AABB]. Proper generation requires [member scale_expression] set to a float or vector. [br][br][color=orange]WARNING:[/color] Generated size property unlikely to align cleanly to grid! @export var generate_size_property : bool = false -## Degrees to rotate model prior to export. Different editors may handdle GLTF transformations differently. If your model isn't oriented correctly, try modifying this property. +## Degrees to rotate model prior to export. Different editors may handle GLTF transformations differently. If your model isn't oriented correctly, try modifying this property. @export var rotation_offset: Vector3 = Vector3(0.0, 0.0, 0.0) ## Creates a .gdignore file in the model export folder to prevent Godot importing the display models. Only needs to be generated once. -@export var generate_gd_ignore_file : bool = false : - get: - return generate_gd_ignore_file - set(ignore): - if (ignore != generate_gd_ignore_file): - if Engine.is_editor_hint(): - var path: String = _get_game_path().path_join(_get_model_folder()) - var error: Error = DirAccess.make_dir_recursive_absolute(path) - if error != Error.OK: - printerr("Failed creating dir for GDIgnore file", error) - return - path = path.path_join('.gdignore') - if FileAccess.file_exists(path): - return - var file: FileAccess = FileAccess.open(path, FileAccess.WRITE) - file.store_string('') - file.close() +@export_tool_button("Generate GD Ignore File", "FileAccess") var generate_gd_ignore_file : Callable = _generate_gd_ignore_file +func _generate_gd_ignore_file() -> void: + if Engine.is_editor_hint(): + var path: String = _get_game_path().path_join(_get_model_folder()) + var error: Error = DirAccess.make_dir_recursive_absolute(path) + if error != Error.OK: + printerr("Failed creating dir for GDIgnore file", error) + return + path = path.path_join('.gdignore') + if FileAccess.file_exists(path): + return + var file: FileAccess = FileAccess.open(path, FileAccess.WRITE) + file.store_string('') + file.close() + +## Builds and saves the display model into the specified destination, then parses the definition and outputs it into the FGD format. func build_def_text(target_editor: FuncGodotFGDFile.FuncGodotTargetMapEditors = FuncGodotFGDFile.FuncGodotTargetMapEditors.TRENCHBROOM) -> String: _generate_model() return super() @@ -47,13 +53,15 @@ func _generate_model() -> void: return var gltf_state := GLTFState.new() - var path = _get_export_dir() - var node = _get_node() - if node == null: return + var path: String = _get_export_dir() + var node: Node3D = _get_node() + if not node: + return if not _create_gltf_file(gltf_state, path, node): printerr("could not create gltf file") return node.queue_free() + if target_map_editor == TargetMapEditor.TRENCHBROOM: const model_key: String = "model" if scale_expression.is_empty(): @@ -67,7 +75,7 @@ func _generate_model() -> void: meta_properties["studio"] = '"%s"' % _get_local_path() if generate_size_property: - meta_properties["size"] = _generate_size_from_aabb(gltf_state.meshes) + meta_properties["size"] = _generate_size_from_aabb(gltf_state.meshes, gltf_state.get_nodes()) func _get_node() -> Node3D: var node := scene_file.instantiate() @@ -86,7 +94,7 @@ func _get_local_path() -> String: return _get_model_folder().path_join('%s.glb' % classname) func _get_model_folder() -> String: - var model_dir: String = FuncGodotLocalConfig.get_setting(FuncGodotLocalConfig.PROPERTY.GAME_PATH_MODELS_FOLDER) as String + var model_dir: String = ProjectSettings.get_setting("func_godot/model_point_class_save_path", "") as String if not models_sub_folder.is_empty(): model_dir = model_dir.path_join(models_sub_folder) return model_dir @@ -107,7 +115,7 @@ func _create_gltf_file(gltf_state: GLTFState, path: String, node: Node3D) -> boo if target_map_editor != TargetMapEditor.TRENCHBROOM: var scale_factor: Vector3 = Vector3.ONE if scale_expression.is_empty(): - scale_factor *= FuncGodotLocalConfig.get_setting(FuncGodotLocalConfig.PROPERTY.DEFAULT_INVERSE_SCALE) as float + scale_factor *= ProjectSettings.get_setting("func_godot/default_inverse_scale_factor", 32.0) as float else: if scale_expression.begins_with('\''): var scale_arr := scale_expression.split_floats(' ', false) @@ -134,31 +142,43 @@ func _save_to_file_system(gltf_document: GLTFDocument, gltf_state: GLTFState, pa return error = gltf_document.write_to_filesystem(gltf_state, path) - if error != OK: + if error != Error.OK: printerr("Failed writing to file system", error) return print('Exported model to ', path) -func _generate_size_from_aabb(meshes: Array[GLTFMesh]) -> AABB: +func _generate_size_from_aabb(meshes: Array[GLTFMesh], nodes: Array[GLTFNode]) -> AABB: var aabb := AABB() for mesh in meshes: aabb = aabb.merge(mesh.mesh.get_mesh().get_aabb()) - + var pos_ofs := Vector3.ZERO + if not nodes.is_empty(): + var ct: int = 0 + for node in nodes: + if node.parent == 0: + pos_ofs += node.position + ct += 1 + pos_ofs /= maxi(ct, 1) + aabb.position += pos_ofs + # Reorient the AABB so it matches TrenchBroom's coordinate system var size_prop := AABB() size_prop.position = Vector3(aabb.position.z, aabb.position.x, aabb.position.y) size_prop.size = Vector3(aabb.size.z, aabb.size.x, aabb.size.y) - + # Scale the size bounds to our scale factor # Scale factor will need to be set if we decide to auto-generate our bounds var scale_factor: Vector3 = Vector3.ONE if target_map_editor == TargetMapEditor.TRENCHBROOM: - if scale_expression.begins_with('\''): - var scale_arr := scale_expression.split_floats(' ', false) - if scale_arr.size() == 3: - scale_factor *= Vector3(scale_arr[0], scale_arr[1], scale_arr[2]) - elif scale_expression.to_float() > 0: - scale_factor *= scale_expression.to_float() + if scale_expression.is_empty(): + scale_factor *= ProjectSettings.get_setting("func_godot/default_inverse_scale_factor", 32.0) as float + else: + if scale_expression.begins_with('\''): + var scale_arr := scale_expression.split_floats(' ', false) + if scale_arr.size() == 3: + scale_factor *= Vector3(scale_arr[0], scale_arr[1], scale_arr[2]) + elif scale_expression.to_float() > 0: + scale_factor *= scale_expression.to_float() size_prop.position *= scale_factor size_prop.size *= scale_factor diff --git a/addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd.uid b/addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd.uid index 4ff8c72d..fc85996e 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd.uid +++ b/addons/func_godot/src/fgd/func_godot_fgd_model_point_class.gd.uid @@ -1 +1 @@ -uid://dkmyelig23ub5 +uid://ldfqjtq0br35 diff --git a/addons/func_godot/src/fgd/func_godot_fgd_point_class.gd b/addons/func_godot/src/fgd/func_godot_fgd_point_class.gd index 3d44fa09..58b4dce1 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_point_class.gd +++ b/addons/func_godot/src/fgd/func_godot_fgd_point_class.gd @@ -1,23 +1,35 @@ @tool -## FGD PointClass entity definition, used to define point entities. -## PointClass entities can use either the `node_class` or the `scene_file` property to tell [FuncGodotMap] what to generate on map build. -class_name FuncGodotFGDPointClass -extends FuncGodotFGDEntityClass +@icon("res://addons/func_godot/icons/icon_godambler3d.svg") +class_name FuncGodotFGDPointClass extends FuncGodotFGDEntityClass +## FGD PointClass entity definition. +## +## A resource used to define an FGD PointClass entity. PointClass entities can use either the [member FuncGodotFGDEntityClass.node_class] +## or the [member scene_file] property to tell [FuncGodotMap] what to generate on map build. +## +## @tutorial(Quake Wiki Entity Article): https://quakewiki.org/wiki/Entity +## @tutorial(Level Design Book: Entity Types and Settings): https://book.leveldesignbook.com/appendix/resources/formats/fgd#entity-types-and-settings-basic +## @tutorial(Valve Developer Wiki FGD Article): https://developer.valvesoftware.com/wiki/FGD#Class_Types_and_Properties +## @tutorial(dumptruck_ds' Quake Mapping Entities Tutorial): https://www.youtube.com/watch?v=gtL9f6_N2WM +## @tutorial(Level Design Book: Display Models for Entities): https://book.leveldesignbook.com/appendix/resources/formats/fgd#display-models-for-entities +## @tutorial(Valve Developer Wiki FGD Article: Entity Description Section): https://developer.valvesoftware.com/wiki/FGD#Entity_Description +## @tutorial(TrenchBroom Manual: Display Models for Entities): https://trenchbroom.github.io/manual/latest/#display-models-for-entities func _init() -> void: prefix = "@PointClass" @export_group ("Scene") -## An optional scene file to instantiate on map build. Overrides `node_class` and `script_class`. +## An optional [PackedScene] file to instantiate on map build. Overrides [member FuncGodotFGDEntityClass.node_class] and [member script_class]. @export var scene_file: PackedScene -## An optional script file to attach to the node generated on map build. Ignored if `scene_file` is specified. @export_group ("Scripting") +## An optional [Script] resource to attach to the node generated on map build. Ignored if [member scene_file] is specified. @export var script_class: Script @export_group("Build") -## Toggles whether entity will use `angles`, `mangle`, or `angle` to determine rotations on [FuncGodotMap] build, prioritizing the key value pairs in that order. Set to `false` if you would like to define how the generated node is rotated yourself. +## Toggles whether entity will use `angles`, `mangle`, or `angle` to determine rotations on [FuncGodotMap] build, prioritizing the key value pairs in that order. +## Set to [code]false[/code] if you would like to define how the generated node is rotated yourself. @export var apply_rotation_on_map_build : bool = true -## Toggles whether entity will use `scale` to determine the generated node or scene's scale. This is performed on the top level node. The property can be a [float], [Vector3], or [Vector2]. +## Toggles whether entity will use `scale` to determine the generated node or scene's scale. This is performed on the top level node. +## The property can be a [float], [Vector3], or [Vector2]. Set to [code]false[/code] if you would like to define how the generated node is scaled yourself. @export var apply_scale_on_map_build: bool = true diff --git a/addons/func_godot/src/fgd/func_godot_fgd_point_class.gd.uid b/addons/func_godot/src/fgd/func_godot_fgd_point_class.gd.uid index ac85f2ed..e0e62c2f 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_point_class.gd.uid +++ b/addons/func_godot/src/fgd/func_godot_fgd_point_class.gd.uid @@ -1 +1 @@ -uid://c83r7t467hm4m +uid://cxsqwtsqd8w33 diff --git a/addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd b/addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd index 1836a3a0..00f2665a 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd +++ b/addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd @@ -1,21 +1,29 @@ @tool -## FGD SolidClass entity definition, used to define brush entities. -## A [MeshInstance3D] will be generated by FuncGodotMap according to this definition's Visual Build settings. If FuncGodotFGDSolidClass [member node_class] inherits [CollisionObject3D] then one or more [CollisionShape3D] nodes will be generated according to Collision Build settings. -class_name FuncGodotFGDSolidClass -extends FuncGodotFGDEntityClass +@icon("res://addons/func_godot/icons/icon_slipgate3d.svg") +class_name FuncGodotFGDSolidClass extends FuncGodotFGDEntityClass +## FGD SolidClass entity definition that generates a mesh from [FuncGodotData.BrushData]. +## +## A [MeshInstance3D] will be generated by [FuncGodotMap] according to this definition's Visual Build settings. +## If [member FuncGodotFGDEntityClass.node_class] inherits [CollisionObject3D] +## then one or more [CollisionShape3D] nodes will be generated according to Collision Build settings. +## +## @tutorial(Quake Wiki Entity Article): https://quakewiki.org/wiki/Entity +## @tutorial(Level Design Book: Entity Types and Settings): https://book.leveldesignbook.com/appendix/resources/formats/fgd#entity-types-and-settings-basic +## @tutorial(Valve Developer Wiki FGD Article): https://developer.valvesoftware.com/wiki/FGD#Class_Types_and_Properties +## @tutorial(dumptruck_ds' Quake Mapping Entities Tutorial): https://www.youtube.com/watch?v=gtL9f6_N2WM enum SpawnType { - WORLDSPAWN = 0, ## Is worldspawn - MERGE_WORLDSPAWN = 1, ## Should be combined with worldspawn - ENTITY = 2, ## Is its own separate entity + WORLDSPAWN = 0, ## Builds the geometry of this entity relative to the FuncGodotMap position. + MERGE_WORLDSPAWN = 1, ## This entity's geometry is merged with the [b]worldspawn[/b] entity and this entity is removed. Behavior mimics [b]func_group[/b] in modern Quake compilers. + ENTITY = 2, ## This entity is built as its own object. It finds the origin of the entity based on [member origin_type]. } enum OriginType { AVERAGED = 0, ## Use averaged brush vertices for center position. This is the old Qodot behavior. - ABSOLUTE = 1, ## Use `origin` class property in global coordinates as the center position. - RELATIVE = 2, ## Calculate center position using `origin` class property as an offset to the entity's bounding box center. - BRUSH = 3, ## Calculate center position based on the bounding box center of all brushes using the 'origin' texture specified in the [FuncGodotMapSettings]. - BOUNDS_CENTER = 4, ## Use the center of the entity's bounding box for center position. This is the default option and recommended for most entities. + ABSOLUTE = 1, ## Use [code]origin[/code] class property in global coordinates as the center position. + RELATIVE = 2, ## Calculate center position using [code]origin[/code] class property as an offset to the entity's bounding box center. + BRUSH = 3, ## Calculate center position based on the bounding box center of all brushes using the 'origin' texture specified in the [FuncGodotMapSettings]. If no Origin Brush is found, fall back to BOUNDS_CENTER. This is the default option and recommended for most entities. + BOUNDS_CENTER = 4, ## Use the center of the entity's bounding box for center position. BOUNDS_MINS = 5, ## Use the lowest bounding box coordinates for center position. This is standard Quake and Half-Life brush entity behavior. BOUNDS_MAXS = 6, ## Use the highest bounding box coordinates for center position. } @@ -29,12 +37,14 @@ enum CollisionShapeType { ## Controls whether this Solid Class is the worldspawn, is combined with the worldspawn, or is spawned as its own free-standing entity. @export var spawn_type: SpawnType = SpawnType.ENTITY ## Controls how this Solid Class determines its center position. Only valid if [member spawn_type] is set to ENTITY. -@export var origin_type: OriginType = OriginType.BOUNDS_CENTER +@export var origin_type: OriginType = OriginType.BRUSH @export_group("Visual Build") ## Controls whether a [MeshInstance3D] is built for this Solid Class. @export var build_visuals : bool = true -## Sets generated [MeshInstance3D] to be available for UV2 unwrapping after [FuncGodotMap] build. Utilized in baked lightmapping. +## Global illumination mode for the generated [MeshInstance3D]. Setting to [b]GI_MODE_STATIC[/b] will unwrap the mesh's UV2 during build. +@export var global_illumination_mode : GeometryInstance3D.GIMode = GeometryInstance3D.GI_MODE_STATIC +## @deprecated: Use [member global_illumination_mode] instead. [br]Sets generated [MeshInstance3D] to be available for UV2 unwrapping after [FuncGodotMap] build. Utilized in baked lightmapping. @export var use_in_baked_light : bool = true ## Shadow casting setting allows for further lightmapping customization. @export var shadow_casting_setting : GeometryInstance3D.ShadowCastingSetting = GeometryInstance3D.SHADOW_CASTING_SETTING_ON @@ -67,21 +77,29 @@ enum CollisionShapeType { @export var add_vertex_metadata: bool = false ## Add a [PackedVector3Array] called [i]"positions"[/i] to the generated node's metadata on build.[br][br] ## This is a list of positions for each face, local to the generated node, calculated by averaging the vertices to find the face's center. -@export var add_face_position_metadata = false +@export var add_face_position_metadata: bool = false ## Add a [PackedVector3Array] called [i]"normals"[/i] to the generated node's metadata on build.[br][br] ## Contains a list of each face's normal. -@export var add_face_normal_metadata = false -## Add a [Dictionary] called [i]"collision_shape_to_face_range_map"[/i] in the generated node's metadata on build.[br][br] +@export var add_face_normal_metadata: bool = false +## Add a [Dictionary] called [i]"collision_shape_to_face_indices_map"[/i] in the generated node's metadata on build.[br][br] +## Contains keys of strings, which are the names of child [CollisionShape3D] nodes, and values of +## [PackedInt32Array], containing indices of that child's faces.[br][br] +## For example, an element of [br][br][code]{ "entity_1_brush_0_collision_shape" : [0, 1, 3] }[/code][br][br] +## shows that this solid class has been generated with one child collision shape named +## [i]entity_1_brush_0_collision_shape[/i] which handles 3 faces of the mesh with collision, at indices 0, 1, and 3. +@export var add_collision_shape_to_face_indices_metadata : bool = false +## [s]Add a [Dictionary] called [i]"collision_shape_to_face_range_map"[/i] in the generated node's metadata on build.[br][br] ## Contains keys of strings, which are the names of child [CollisionShape3D] nodes, and values of ## [Vector2i], where [i]X[/i] represents the starting index of that child's faces and [i]Y[/i] represents the ## ending index.[br][br] ## For example, an element of [br][br][code]{ "entity_1_brush_0_collision_shape" : Vector2i(0, 15) }[/code][br][br] ## shows that this solid class has been generated with one child collision shape named -## [i]entity_1_brush_0_collision_shape[/i] which handles the first 15 faces of the parts of the mesh with collision. -@export var add_collision_shape_face_range_metadata = false +## [i]entity_1_brush_0_collision_shape[/i] which handles the first 15 faces of the parts of the mesh with collision.[/s] +## @deprecated: No longer supported or planned as of 2025.7, but retained in case a contributor provides an appropriate solution in the future. +@export var add_collision_shape_face_range_metadata: bool = false @export_group("Scripting") -## An optional script file to attach to the node generated on map build. +## An optional [Script] file to attach to the node generated on map build. @export var script_class: Script func _init(): diff --git a/addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd.uid b/addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd.uid index 9d3d7ec0..508ffeb4 100644 --- a/addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd.uid +++ b/addons/func_godot/src/fgd/func_godot_fgd_solid_class.gd.uid @@ -1 +1 @@ -uid://msq50x6rk4po +uid://5cow84q03m6a diff --git a/addons/func_godot/src/func_godot_plugin.gd b/addons/func_godot/src/func_godot_plugin.gd index 75454b20..11c18b71 100644 --- a/addons/func_godot/src/func_godot_plugin.gd +++ b/addons/func_godot/src/func_godot_plugin.gd @@ -1,13 +1,12 @@ @tool -class_name FuncGodotPlugin -extends EditorPlugin +@icon("res://addons/func_godot/icons/icon_godot_ranger.svg") +class_name FuncGodotPlugin extends EditorPlugin var map_import_plugin : QuakeMapImportPlugin = null var palette_import_plugin : QuakePaletteImportPlugin = null var wad_import_plugin: QuakeWadImportPlugin = null -var func_godot_map_control: Control = null -var func_godot_map_progress_bar: Control = null +#var func_godot_map_progress_bar: Control = null var edited_object_ref: WeakRef = weakref(null) func _get_plugin_name() -> String: @@ -15,16 +14,13 @@ func _get_plugin_name() -> String: func _handles(object: Object) -> bool: return object is FuncGodotMap - + func _edit(object: Object) -> void: edited_object_ref = weakref(object) -func _make_visible(visible: bool) -> void: - if func_godot_map_control: - func_godot_map_control.set_visible(visible) - - if func_godot_map_progress_bar: - func_godot_map_progress_bar.set_visible(visible) +#func _make_visible(visible: bool) -> void: + #if func_godot_map_progress_bar: + #func_godot_map_progress_bar.set_visible(visible) func _enter_tree() -> void: # Import plugins @@ -36,17 +32,13 @@ func _enter_tree() -> void: add_import_plugin(palette_import_plugin) add_import_plugin(wad_import_plugin) - # FuncGodotMap button - func_godot_map_control = create_func_godot_map_control() - func_godot_map_control.set_visible(false) - add_control_to_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_MENU, func_godot_map_control) - - func_godot_map_progress_bar = create_func_godot_map_progress_bar() - func_godot_map_progress_bar.set_visible(false) - add_control_to_container(EditorPlugin.CONTAINER_INSPECTOR_BOTTOM, func_godot_map_progress_bar) + #func_godot_map_progress_bar = create_func_godot_map_progress_bar() + #func_godot_map_progress_bar.set_visible(false) + #add_control_to_container(EditorPlugin.CONTAINER_INSPECTOR_BOTTOM, func_godot_map_progress_bar) add_custom_type("FuncGodotMap", "Node3D", preload("res://addons/func_godot/src/map/func_godot_map.gd"), null) + # Default Map Settings if not ProjectSettings.has_setting("func_godot/default_map_settings"): ProjectSettings.set_setting("func_godot/default_map_settings", "res://addons/func_godot/func_godot_default_map_settings.tres") var property_info = { @@ -58,6 +50,28 @@ func _enter_tree() -> void: ProjectSettings.add_property_info(property_info) ProjectSettings.set_as_basic("func_godot/default_map_settings", true) ProjectSettings.set_initial_value("func_godot/default_map_settings", "res://addons/func_godot/func_godot_default_map_settings.tres") + + # Default Inverse Scale Factor + if not ProjectSettings.has_setting("func_godot/default_inverse_scale_factor"): + ProjectSettings.set_setting("func_godot/default_inverse_scale_factor", 32.0) + var property_info = { + "name": "func_godot/default_inverse_scale_factor", + "type": TYPE_FLOAT + } + ProjectSettings.add_property_info(property_info) + ProjectSettings.set_as_basic("func_godot/default_inverse_scale_factor", true) + ProjectSettings.set_initial_value("func_godot/default_inverse_scale_factor", 32.0) + + # Model Point Class Default Path + if not ProjectSettings.has_setting("func_godot/model_point_class_save_path"): + ProjectSettings.set_setting("func_godot/model_point_class_save_path", "") + var property_info = { + "name": "func_godot/model_point_class_save_path", + "type": TYPE_STRING + } + ProjectSettings.add_property_info(property_info) + ProjectSettings.set_as_basic("func_godot/model_point_class_save_path", true) + ProjectSettings.set_initial_value("func_godot/model_point_class_save_path", "") func _exit_tree() -> void: remove_custom_type("FuncGodotMap") @@ -69,120 +83,49 @@ func _exit_tree() -> void: map_import_plugin = null palette_import_plugin = null wad_import_plugin = null - - if func_godot_map_control: - remove_control_from_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_MENU, func_godot_map_control) - func_godot_map_control.queue_free() - func_godot_map_control = null - - if func_godot_map_progress_bar: - remove_control_from_container(EditorPlugin.CONTAINER_INSPECTOR_BOTTOM, func_godot_map_progress_bar) - func_godot_map_progress_bar.queue_free() - func_godot_map_progress_bar = null - -## Create the toolbar controls for [FuncGodotMap] instances in the editor -func create_func_godot_map_control() -> Control: - var separator = VSeparator.new() - var icon = TextureRect.new() - icon.texture = preload("res://addons/func_godot/icons/icon_slipgate3d.svg") - icon.size_flags_vertical = Control.SIZE_SHRINK_CENTER - - var build_button = Button.new() - build_button.text = "Build" - build_button.connect("pressed",Callable(self,"func_godot_map_build")) - - var unwrap_uv2_button = Button.new() - unwrap_uv2_button.text = "Unwrap UV2" - unwrap_uv2_button.connect("pressed",Callable(self,"func_godot_map_unwrap_uv2")) - - var control = HBoxContainer.new() - control.add_child(separator) - control.add_child(icon) - control.add_child(build_button) - control.add_child(unwrap_uv2_button) - - return control + #if func_godot_map_progress_bar: + #remove_control_from_container(EditorPlugin.CONTAINER_INSPECTOR_BOTTOM, func_godot_map_progress_bar) + #func_godot_map_progress_bar.queue_free() + #func_godot_map_progress_bar = null -## Create a progress bar for building a [FuncGodotMap] -func create_func_godot_map_progress_bar() -> Control: - var progress_label = Label.new() - progress_label.name = "ProgressLabel" - progress_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER - progress_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER +# Create a progress bar for building a [FuncGodotMap] +#func create_func_godot_map_progress_bar() -> Control: + #var progress_label = Label.new() + #progress_label.name = "ProgressLabel" + #progress_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + #progress_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER + # + #var progress_bar := ProgressBar.new() + #progress_bar.name = "ProgressBar" + #progress_bar.show_percentage = false + #progress_bar.min_value = 0.0 + #progress_bar.max_value = 1.0 + #progress_bar.custom_minimum_size.y = 30 + #progress_bar.set_anchors_and_offsets_preset(Control.PRESET_LEFT_WIDE) + #progress_bar.add_child(progress_label) + #progress_label.set_anchors_and_offsets_preset(Control.PRESET_LEFT_WIDE) + #progress_label.offset_top = -9 + #progress_label.offset_left = 3 + # + #return progress_bar - var progress_bar := ProgressBar.new() - progress_bar.name = "ProgressBar" - progress_bar.show_percentage = false - progress_bar.min_value = 0.0 - progress_bar.max_value = 1.0 - progress_bar.custom_minimum_size.y = 30 - progress_bar.set_anchors_and_offsets_preset(Control.PRESET_LEFT_WIDE) - progress_bar.add_child(progress_label) - progress_label.set_anchors_and_offsets_preset(Control.PRESET_LEFT_WIDE) - progress_label.offset_top = -9 - progress_label.offset_left = 3 - - return progress_bar - -## Create the "Build" button for [FuncGodotMap]s in the editor -func func_godot_map_build() -> void: - var edited_object : FuncGodotMap = edited_object_ref.get_ref() - if not edited_object: - return - - edited_object.should_add_children = true - edited_object.should_set_owners = true - - set_func_godot_map_control_disabled(true) - edited_object.build_progress.connect(func_godot_map_build_progress) - edited_object.build_complete.connect(func_godot_map_build_complete.bind(edited_object)) - edited_object.build_failed.connect(func_godot_map_build_complete.bind(edited_object)) - - edited_object.verify_and_build() - -## Create the "Unwrap UV2" button for [FuncGodotMap]s in the editor -func func_godot_map_unwrap_uv2() -> void: - var edited_object = edited_object_ref.get_ref() - if not edited_object: - return - - if not edited_object is FuncGodotMap: - return - - set_func_godot_map_control_disabled(true) - if not edited_object.is_connected("unwrap_uv2_complete", func_godot_map_build_complete): - edited_object.connect("unwrap_uv2_complete", func_godot_map_build_complete.bind(edited_object)) - - edited_object.unwrap_uv2() - -## Enable or disable the control for [FuncGodotMap]s in the editor -func set_func_godot_map_control_disabled(disabled: bool) -> void: - if not func_godot_map_control: - return - - for child in func_godot_map_control.get_children(): - if child is Button: - child.set_disabled(disabled) - -## Update the build progress bar (see: [method create_func_godot_map_progress_bar]) to display the current step and progress (0-1) -func func_godot_map_build_progress(step: String, progress: float) -> void: - var progress_label = func_godot_map_progress_bar.get_node("ProgressLabel") - func_godot_map_progress_bar.value = progress - progress_label.text = step.capitalize() +# Update the build progress bar (see: [method create_func_godot_map_progress_bar]) to display the current step and progress (0-1) +#func func_godot_map_build_progress(step: String, progress: float) -> void: + #var progress_label = func_godot_map_progress_bar.get_node("ProgressLabel") + #func_godot_map_progress_bar.value = progress + #progress_label.text = step.capitalize() ## Callback for when the build process for a [FuncGodotMap] is finished. func func_godot_map_build_complete(func_godot_map: FuncGodotMap) -> void: - var progress_label = func_godot_map_progress_bar.get_node("ProgressLabel") - progress_label.text = "Build Complete" - - set_func_godot_map_control_disabled(false) - - if func_godot_map.is_connected("build_progress",Callable(self,"func_godot_map_build_progress")): - func_godot_map.disconnect("build_progress",Callable(self,"func_godot_map_build_progress")) - + #var progress_label = func_godot_map_progress_bar.get_node("ProgressLabel") + #progress_label.text = "Build Complete" + + #if func_godot_map.is_connected("build_progress",Callable(self,"func_godot_map_build_progress")): + #func_godot_map.disconnect("build_progress",Callable(self,"func_godot_map_build_progress")) + if func_godot_map.is_connected("build_complete",Callable(self,"func_godot_map_build_complete")): func_godot_map.disconnect("build_complete",Callable(self,"func_godot_map_build_complete")) - + if func_godot_map.is_connected("build_failed",Callable(self,"func_godot_map_build_complete")): func_godot_map.disconnect("build_failed",Callable(self,"func_godot_map_build_complete")) diff --git a/addons/func_godot/src/func_godot_plugin.gd.uid b/addons/func_godot/src/func_godot_plugin.gd.uid index 836c95b6..c77b5bee 100644 --- a/addons/func_godot/src/func_godot_plugin.gd.uid +++ b/addons/func_godot/src/func_godot_plugin.gd.uid @@ -1 +1 @@ -uid://c3iyymbgfvfsy +uid://bqy3tr83l7di diff --git a/addons/func_godot/src/import/quake_map_file.gd b/addons/func_godot/src/import/quake_map_file.gd index 9873740d..e1f7d1a9 100644 --- a/addons/func_godot/src/import/quake_map_file.gd +++ b/addons/func_godot/src/import/quake_map_file.gd @@ -1,6 +1,14 @@ @icon("res://addons/func_godot/icons/icon_quake_file.svg") -class_name QuakeMapFile -extends Resource +class_name QuakeMapFile extends Resource +## Map file that can be built by [FuncGodotMap]. +## +## Map file that can be built by a [FuncGodotMap]. Supports the Quake and Valve map formats. +## +## @tutorial(Quake Wiki Map Format Article): https://quakewiki.org/wiki/Quake_Map_Format +## @tutorial(Valve Developer Wiki VMF Article): https://developer.valvesoftware.com/wiki/VMF_(Valve_Map_Format) +## Number of times this map file has been imported. @export var revision: int = 0 -@export_multiline var map_data: String = "" \ No newline at end of file + +## Raw map data. +@export_multiline var map_data: String = "" diff --git a/addons/func_godot/src/import/quake_map_file.gd.uid b/addons/func_godot/src/import/quake_map_file.gd.uid index 4fe6cf51..9403fd77 100644 --- a/addons/func_godot/src/import/quake_map_file.gd.uid +++ b/addons/func_godot/src/import/quake_map_file.gd.uid @@ -1 +1 @@ -uid://she01epxy7i3 +uid://cxvwf50mehesf diff --git a/addons/func_godot/src/import/quake_map_import_plugin.gd b/addons/func_godot/src/import/quake_map_import_plugin.gd index da6844be..c9f1101b 100644 --- a/addons/func_godot/src/import/quake_map_import_plugin.gd +++ b/addons/func_godot/src/import/quake_map_import_plugin.gd @@ -1,8 +1,5 @@ @tool -class_name QuakeMapImportPlugin -extends EditorImportPlugin - -# Quake super.map import plugin +class_name QuakeMapImportPlugin extends EditorImportPlugin func _get_importer_name() -> String: return 'func_godot.map' @@ -14,7 +11,7 @@ func _get_resource_type() -> String: return 'Resource' func _get_recognized_extensions() -> PackedStringArray: - return PackedStringArray(['map']) + return PackedStringArray(['map','vmf']) func _get_priority(): return 1.0 @@ -36,12 +33,11 @@ func _import(source_file, save_path, options, r_platform_variants, r_gen_files) var map_resource : QuakeMapFile = null - var existing_resource := load(save_path_str) as QuakeMapFile - if(existing_resource != null): - map_resource = existing_resource + if ResourceLoader.exists(save_path_str): + map_resource = load(save_path_str) as QuakeMapFile map_resource.revision += 1 else: map_resource = QuakeMapFile.new() map_resource.map_data = FileAccess.open(source_file, FileAccess.READ).get_as_text(true) - return ResourceSaver.save(map_resource, save_path_str) \ No newline at end of file + return ResourceSaver.save(map_resource, save_path_str) diff --git a/addons/func_godot/src/import/quake_map_import_plugin.gd.uid b/addons/func_godot/src/import/quake_map_import_plugin.gd.uid index 13cf57c1..ab9eb4a2 100644 --- a/addons/func_godot/src/import/quake_map_import_plugin.gd.uid +++ b/addons/func_godot/src/import/quake_map_import_plugin.gd.uid @@ -1 +1 @@ -uid://cfpjdmglygjlv +uid://dnsj08ot32vpc diff --git a/addons/func_godot/src/import/quake_palette_file.gd b/addons/func_godot/src/import/quake_palette_file.gd index c4f2c87a..3cbb8a2c 100644 --- a/addons/func_godot/src/import/quake_palette_file.gd +++ b/addons/func_godot/src/import/quake_palette_file.gd @@ -1,7 +1,13 @@ @icon("res://addons/func_godot/icons/icon_quake_file.svg") -class_name QuakePaletteFile -extends Resource +class_name QuakePaletteFile extends Resource +## Quake LMP palette format file used with [QuakeWadFile]. +## +## Quake LMP palette format file used in conjunction with a Quake WAD2 format [QuakeWadFile]. +## Not required for the Valve WAD3 format. +## +## @tutorial(Quake Wiki Palette Article): https://quakewiki.org/wiki/Quake_palette#palette.lmp +## Collection of [Color]s retrieved from the LMP palette file. @export var colors: PackedColorArray func _init(colors): diff --git a/addons/func_godot/src/import/quake_palette_file.gd.uid b/addons/func_godot/src/import/quake_palette_file.gd.uid index 986bb991..85ab1ac1 100644 --- a/addons/func_godot/src/import/quake_palette_file.gd.uid +++ b/addons/func_godot/src/import/quake_palette_file.gd.uid @@ -1 +1 @@ -uid://b8dfwqf5k3175 +uid://dqhjx7jjbif5d diff --git a/addons/func_godot/src/import/quake_palette_import_plugin.gd b/addons/func_godot/src/import/quake_palette_import_plugin.gd index 01f6762e..93abd08a 100644 --- a/addons/func_godot/src/import/quake_palette_import_plugin.gd +++ b/addons/func_godot/src/import/quake_palette_import_plugin.gd @@ -1,8 +1,5 @@ @tool -class_name QuakePaletteImportPlugin -extends EditorImportPlugin - -# Quake super.map import plugin +class_name QuakePaletteImportPlugin extends EditorImportPlugin func _get_importer_name() -> String: return 'func_godot.palette' @@ -58,4 +55,4 @@ func _import(source_file, save_path, options, r_platform_variants, r_gen_files) var palette_resource := QuakePaletteFile.new(colors) - return ResourceSaver.save(palette_resource, save_path_str) \ No newline at end of file + return ResourceSaver.save(palette_resource, save_path_str) diff --git a/addons/func_godot/src/import/quake_palette_import_plugin.gd.uid b/addons/func_godot/src/import/quake_palette_import_plugin.gd.uid index 91fd9270..f1d0bb28 100644 --- a/addons/func_godot/src/import/quake_palette_import_plugin.gd.uid +++ b/addons/func_godot/src/import/quake_palette_import_plugin.gd.uid @@ -1 +1 @@ -uid://chtjgd2rk34s3 +uid://c6k7hftart3u3 diff --git a/addons/func_godot/src/import/quake_wad_file.gd b/addons/func_godot/src/import/quake_wad_file.gd index 191c8d51..5a0d66ef 100644 --- a/addons/func_godot/src/import/quake_wad_file.gd +++ b/addons/func_godot/src/import/quake_wad_file.gd @@ -1,8 +1,14 @@ @icon("res://addons/func_godot/icons/icon_quake_file.svg") -class_name QuakeWadFile -extends Resource +class_name QuakeWadFile extends Resource +## Texture container in the WAD2 or WAD3 format. +## +## Texture container in the Quake WAD2 or Valve WAD3 format. +## +## @tutorial(Quake Wiki WAD Article): https://quakewiki.org/wiki/Texture_Wad +## @tutorial(Valve Developer Wiki WAD3 Article): https://developer.valvesoftware.com/wiki/WAD -@export var textures: Dictionary +## Collection of [ImageTexture] imported from the WAD file. +@export var textures: Dictionary[String, ImageTexture] func _init(textures: Dictionary = Dictionary()): self.textures = textures diff --git a/addons/func_godot/src/import/quake_wad_file.gd.uid b/addons/func_godot/src/import/quake_wad_file.gd.uid index 72c12019..1d58e097 100644 --- a/addons/func_godot/src/import/quake_wad_file.gd.uid +++ b/addons/func_godot/src/import/quake_wad_file.gd.uid @@ -1 +1 @@ -uid://b5qusdr1oqgud +uid://cij36hpqc46c diff --git a/addons/func_godot/src/import/quake_wad_import_plugin.gd b/addons/func_godot/src/import/quake_wad_import_plugin.gd index a204e649..cd14ee93 100644 --- a/addons/func_godot/src/import/quake_wad_import_plugin.gd +++ b/addons/func_godot/src/import/quake_wad_import_plugin.gd @@ -160,7 +160,7 @@ func _import(source_file, save_path, options, r_platform_variants, r_gen_files) texture_data_array.append([name_string, width, height, pixels, palette_colors]) # Create texture resources - var textures : Dictionary = {} + var textures : Dictionary[String, ImageTexture] = {} for texture_data in texture_data_array: var name : String = texture_data[0] @@ -202,7 +202,7 @@ func _import(source_file, save_path, options, r_platform_variants, r_gen_files) texture_image.generate_mipmaps() var texture := ImageTexture.create_from_image(texture_image) #,Texture2D.FLAG_MIPMAPS | Texture2D.FLAG_REPEAT | Texture2D.FLAG_ANISOTROPIC_FILTER - textures[name] = texture + textures[name.to_lower()] = texture # Save WAD resource var wad_resource := QuakeWadFile.new(textures) diff --git a/addons/func_godot/src/import/quake_wad_import_plugin.gd.uid b/addons/func_godot/src/import/quake_wad_import_plugin.gd.uid index 863684ad..fe3dc5e4 100644 --- a/addons/func_godot/src/import/quake_wad_import_plugin.gd.uid +++ b/addons/func_godot/src/import/quake_wad_import_plugin.gd.uid @@ -1 +1 @@ -uid://dibj4yksw28jb +uid://ridgf32rxg6s diff --git a/addons/func_godot/src/map/func_godot_map.gd b/addons/func_godot/src/map/func_godot_map.gd index 38a74003..908536d0 100644 --- a/addons/func_godot/src/map/func_godot_map.gd +++ b/addons/func_godot/src/map/func_godot_map.gd @@ -1,1160 +1,146 @@ @tool @icon("res://addons/func_godot/icons/icon_slipgate3d.svg") -## A scene generator node that parses a Quake map file using a [FuncGodotFGDFile]. Uses a [FuncGodotMapSettings] resource to define map build settings. -## To use this node, select an instance of the node in the Godot editor and select "Quick Build", "Full Build", or "Unwrap UV2" from the toolbar. Alternatively, call [method manual_build] from code. class_name FuncGodotMap extends Node3D +## Scene generator node that parses a [QuakeMapFile] according to its [FuncGodotMapSettings]. +## +## A scene generator node that parses a [QuakeMapFile]. It uses a [FuncGodotMapSettings] +## and the [FuncGodotFGDFile] contained within in order to determine what is built and how it is built.[br][br] +## If your map is not building correctly, double check your [member map_settings] to make sure you're using +## the correct [FuncGodotMapSettings]. -## How long to wait between child/owner batches -const YIELD_DURATION := 0.0 +const _SIGNATURE: String = "[MAP]" -## Emitted when the build process successfully completes -signal build_complete() -## Emitted when the build process finishes a step. [code]progress[/code] is from 0.0-1.0 -signal build_progress(step, progress) -## Emitted when the build process fails -signal build_failed() +## Bitflag settings that control various aspects of the build process. +enum BuildFlags { + UNWRAP_UV2 = 1 << 0, ## Unwrap UV2s during geometry generation for lightmap baking. + SHOW_PROFILE_INFO = 1 << 1, ## Print build step information during build process. + DISABLE_SMOOTHING = 1 << 2 ## Force disable processing of vertex normal smooth shading. +} -## Emitted when UV2 unwrapping is completed -signal unwrap_uv2_complete() +## Emitted when the build process fails. +signal build_failed + +## Emitted when the build process succesfully completes. +signal build_complete + +@export_tool_button("Build Map","CollisionShape3D") var _build_func: Callable = build +@export_tool_button("Clear Map","Skeleton3D") var _clear_func: Callable = clear_children @export_category("Map") +## Local path to MAP or VMF file to build a scene from. +@export_file("*.map","*.vmf") var local_map_file: String = "" -## Local path to Quake map file to build a scene from. -@export_file("*.map") var local_map_file: String = "" +## Global path to MAP or VMF file to build a scene from. Overrides [member FuncGodotMap.local_map_file]. +@export_global_file("*.map","*.vmf") var global_map_file: String = "" -## Global path to Quake map file to build a scene from. Overrides [member local_map_file]. -@export_global_file("*.map") var global_map_file: String = "" - -## Map path used by code. Do it this way to support both global and local paths. +# Map path used by code. Do it this way to support both global and local paths. var _map_file_internal: String = "" -## Map settings resource that defines map build scale, textures location, and more. +## Map settings resource that defines map build scale, textures location, entity definitions, and more. @export var map_settings: FuncGodotMapSettings = load(ProjectSettings.get_setting("func_godot/default_map_settings", "res://addons/func_godot/func_godot_default_map_settings.tres")) @export_category("Build") -## If true, print profiling data before and after each build step. -@export var print_profiling_data: bool = false -## If true, stop the whole editor until build is complete. -@export var block_until_complete: bool = false -## How many nodes to set the owner of, or add children of, at once. Higher values may lead to quicker build times, but a less responsive editor. -@export var set_owner_batch_size: int = 1000 +## [enum BuildFlags] that can affect certain aspects of the build process. +@export_flags("Unwrap UV2:1", "Show Profiling Info:2", "Disable Smooth Shading:4") var build_flags: int = 0 -# Build context variables -var func_godot: FuncGodot = null -var profile_timestamps: Dictionary = {} -var add_child_array: Array = [] -var set_owner_array: Array = [] -var should_add_children: bool = true -var should_set_owners: bool = true -var texture_list: Array = [] -var texture_loader = null -var texture_dict: Dictionary = {} -var texture_size_dict: Dictionary = {} -var material_dict: Dictionary = {} -var entity_definitions: Dictionary = {} -var entity_dicts: Array = [] -var entity_mesh_dict: Dictionary = {} -var entity_nodes: Array = [] -var entity_mesh_instances: Dictionary = {} -var entity_occluder_instances: Dictionary = {} -var entity_collision_shapes: Array = [] +## Map build failure handler. Displays error message and emits [signal build_failed] signal. +func fail_build(reason: String, notify: bool = false) -> void: + push_error(_SIGNATURE, " ", reason) + if notify: + build_failed.emit() -# Utility -## Verify that FuncGodot is functioning and that [member map_file] exists. If so, build the map. If not, signal [signal build_failed] -func verify_and_build() -> void: - if verify_parameters(): - build_map() - else: - emit_signal("build_failed") - -## Build the map. -func manual_build() -> void: - should_add_children = false - should_set_owners = false - verify_and_build() - -## Return true if parameters are valid; FuncGodot should be functioning and [member map_file] should exist. -func verify_parameters() -> bool: - # Prioritize global map file path for building at runtime - _map_file_internal = global_map_file if global_map_file != "" else local_map_file - - if _map_file_internal == "": - push_error("Error: Map file not set") - return false - - if not FileAccess.file_exists(_map_file_internal): - if FileAccess.file_exists(_map_file_internal + ".import"): - _map_file_internal = _map_file_internal + ".import" - else: - push_error("Error: No such file %s" % _map_file_internal) - return false - - if not map_settings: - push_error("Error: Map settings not set") - return false - - if not func_godot: - func_godot = load("res://addons/func_godot/src/core/func_godot.gd").new() - - if not func_godot: - push_error("Error: Failed to load func_godot.") - return false - - return true - -## Reset member variables that affect the current build -func reset_build_context() -> void: - add_child_array = [] - set_owner_array = [] - texture_list = [] - texture_loader = null - texture_dict = {} - texture_size_dict = {} - material_dict = {} - entity_definitions = {} - entity_dicts = [] - entity_mesh_dict = {} - entity_nodes = [] - entity_mesh_instances = {} - entity_occluder_instances = {} - entity_collision_shapes = [] - build_step_index = 0 - build_step_count = 0 - if func_godot: - func_godot = load("res://addons/func_godot/src/core/func_godot.gd").new() - func_godot.map_settings = map_settings - -## Record the start time of a build step for profiling -func start_profile(item_name: String) -> void: - if print_profiling_data: - print(item_name) - profile_timestamps[item_name] = Time.get_unix_time_from_system() - -## Finish profiling for a build step; print associated timing data -func stop_profile(item_name: String) -> void: - if print_profiling_data: - if item_name in profile_timestamps: - var delta: float = Time.get_unix_time_from_system() - profile_timestamps[item_name] - print("Completed in %s sec." % snapped(delta, 0.0001)) - profile_timestamps.erase(item_name) - -## Run a build step. [code]step_name[/code] is the method corresponding to the step. -func run_build_step(step_name: String) -> Variant: - start_profile(step_name) - var result : Variant = call(step_name) - stop_profile(step_name) - return result - -## Add [code]node[/code] as a child of parent, or as a child of [code]below[/code] if non-null. Also queue for ownership assignment. -func add_child_editor(parent: Node, node: Node, below: Node = null) -> void: - if not node or not parent: - return - - var prev_parent = node.get_parent() - if prev_parent: - prev_parent.remove_child(node) - - if below: - below.add_sibling(node) - else: - parent.add_child(node) - - set_owner_array.append(node) - -## Set the owner of [code]node[/code] to the current scene. -func set_owner_editor(node: Node) -> void: - var tree : SceneTree = get_tree() - - if not tree: - return - - var edited_scene_root : Node = tree.get_edited_scene_root() - - if not edited_scene_root: - return - - node.set_owner(edited_scene_root) - -var build_step_index : int = 0 -var build_step_count : int = 0 -var build_steps : Array = [] -var post_attach_steps : Array = [] - -## Register a build step. -## [code]build_step[/code] is a string that corresponds to a method on this class, [code]arguments[/code] a list of arguments to pass to this method, and [code]target[/code] is a property on this class to save the return value of the build step in. If [code]post_attach[/code] is true, the step will be run after the scene hierarchy is completed. -func register_build_step(build_step: String, target: String = "", post_attach: bool = false) -> void: - (post_attach_steps if post_attach else build_steps).append([build_step, target]) - build_step_count += 1 - -## Run all build steps. Emits [signal build_progress] after each step. -## If [code]post_attach[/code] is true, run post-attach steps instead and signal [signal build_complete] when finished. -func run_build_steps(post_attach : bool = false) -> void: - var target_array : Array = post_attach_steps if post_attach else build_steps - - while target_array.size() > 0: - var build_step : Array = target_array.pop_front() - emit_signal("build_progress", build_step[0], float(build_step_index + 1) / float(build_step_count)) - - var scene_tree : SceneTree = get_tree() - if scene_tree and not block_until_complete: - await get_tree().create_timer(YIELD_DURATION).timeout - - var result : Variant = run_build_step(build_step[0]) - var target : String = build_step[1] - if target != "": - set(target, result) - - build_step_index += 1 - - if scene_tree and not block_until_complete: - await get_tree().create_timer(YIELD_DURATION).timeout - - if post_attach: - _build_complete() - else: - start_profile('add_children') - add_children() - -## Register all steps for the build. See [method register_build_step] and [method run_build_steps] -func register_build_steps() -> void: - register_build_step('remove_children') - register_build_step('load_map') - register_build_step('fetch_texture_list', 'texture_list') - register_build_step('init_texture_loader', 'texture_loader') - register_build_step('load_textures', 'texture_dict') - register_build_step('build_texture_size_dict', 'texture_size_dict') - register_build_step('build_materials', 'material_dict') - register_build_step('fetch_entity_definitions', 'entity_definitions') - register_build_step('set_core_entity_definitions') - register_build_step('generate_geometry') - register_build_step('fetch_entity_dicts', 'entity_dicts') - register_build_step('build_entity_nodes', 'entity_nodes') - register_build_step('resolve_trenchbroom_group_hierarchy') - register_build_step('build_entity_mesh_dict', 'entity_mesh_dict') - register_build_step('build_entity_mesh_instances', 'entity_mesh_instances') - register_build_step('build_entity_occluder_instances', 'entity_occluder_instances') - register_build_step('build_entity_collision_shape_nodes', 'entity_collision_shapes') - -## Register all post-attach steps for the build. See [method register_build_step] and [method run_build_steps] -func register_post_attach_steps() -> void: - register_build_step('build_entity_collision_shapes', "", true) - register_build_step('apply_entity_meshes', "", true) - register_build_step('apply_entity_occluders', "", true) - register_build_step('apply_properties_and_finish', "", true) - -# Actions -## Build the map -func build_map() -> void: - reset_build_context() - if map_settings == null: - printerr("Skipping build process: No map settings resource!") - emit_signal("build_complete") - return - print('Building %s' % _map_file_internal) - #if print_profiling_data: - #print('\n') - start_profile('build_map') - register_build_steps() - register_post_attach_steps() - run_build_steps() - -## Recursively unwrap UV2s for [code]node[/code] and its children, in preparation for baked lighting. -func unwrap_uv2(node: Node = null) -> void: - var target_node: Node = null - - if node: - target_node = node - else: - target_node = self - print("Unwrapping mesh UV2s") - - if target_node is MeshInstance3D: - if target_node.gi_mode == GeometryInstance3D.GI_MODE_STATIC: - var mesh: Mesh = target_node.get_mesh() - if mesh is ArrayMesh: - mesh.lightmap_unwrap(Transform3D.IDENTITY, map_settings.uv_unwrap_texel_size * map_settings.scale_factor) - - for child in target_node.get_children(): - unwrap_uv2(child) - - if not node: - print("Unwrap complete") - emit_signal("unwrap_uv2_complete") - -# Build Steps -## Recursively remove and delete all children of this node -func remove_children() -> void: +## Frees all children of the map node.[br] +## [b][color=yellow]Warning:[/color][/b] This does not distinguish between nodes generated in the FuncGodot build process and other user created nodes. +func clear_children() -> void: for child in get_children(): remove_child(child) child.queue_free() -## Parse and load [member map_file] -func load_map() -> void: - func_godot.load_map(_map_file_internal, map_settings.use_trenchbroom_groups_hierarchy) - -## Get textures found in [member map_file] -func fetch_texture_list() -> Array: - return func_godot.get_texture_list() as Array - -## Initialize texture loader, allowing textures in [member base_texture_dir] and [member texture_wads] to be turned into materials -func init_texture_loader() -> FuncGodotTextureLoader: - return FuncGodotTextureLoader.new(map_settings) - -## Build a dictionary from Map File texture names to their corresponding Texture2D resources in Godot -func load_textures() -> Dictionary: - return texture_loader.load_textures(texture_list) as Dictionary - -## Build a dictionary from Map File texture names to Godot materials -func build_materials() -> Dictionary: - return texture_loader.create_materials(texture_list) - -## Collect entity definitions from [member entity_fgd], as a dictionary from Map File classnames to entity definitions -func fetch_entity_definitions() -> Dictionary: - return map_settings.entity_fgd.get_entity_definitions() - -## Hand the FuncGodot core the entity definitions -func set_core_entity_definitions() -> void: - var core_ent_defs: Dictionary = {} - for classname in entity_definitions: - core_ent_defs[classname] = {} - var entity_definition: FuncGodotFGDEntityClass = entity_definitions[classname] - if entity_definition is FuncGodotFGDSolidClass: - core_ent_defs[classname]['spawn_type'] = entity_definition.spawn_type - core_ent_defs[classname]['origin_type'] = entity_definition.origin_type - - const MFlags = FuncGodotMapData.FuncGodotEntityMetadataInclusionFlags - var flags := MFlags.NONE - if entity_definition.add_textures_metadata: flags |= MFlags.TEXTURES - if entity_definition.add_vertex_metadata: flags |= MFlags.VERTEX - if entity_definition.add_face_normal_metadata: flags |= MFlags.FACE_NORMAL - if entity_definition.add_face_position_metadata: flags |= MFlags.FACE_POSITION - if entity_definition.add_collision_shape_face_range_metadata: flags |= MFlags.COLLISION_SHAPE_TO_FACE_RANGE_MAP - core_ent_defs[classname]['metadata_inclusion_flags'] = flags - func_godot.set_entity_definitions(core_ent_defs) - -## Generate geometry from map file -func generate_geometry() -> void: - func_godot.generate_geometry(texture_size_dict); - -## Get a list of dictionaries representing each entity from the FuncGodot core -func fetch_entity_dicts() -> Array: - return func_godot.get_entity_dicts() - -## Build a dictionary from Map File textures to the sizes of their corresponding Godot textures -func build_texture_size_dict() -> Dictionary: - var texture_size_dict: Dictionary = {} +## Checks if a [QuakeMapFile] for the build process is provided and can be found. +func verify() -> Error: + # Prioritize global map file path for building at runtime + _map_file_internal = global_map_file if global_map_file != "" else local_map_file - for tex_key in texture_dict: - var texture: Texture2D = texture_dict[tex_key] as Texture2D - if texture: - texture_size_dict[tex_key] = texture.get_size() - else: - texture_size_dict[tex_key] = Vector2.ONE + if _map_file_internal.is_empty(): + fail_build("Cannot build empty map file.") + return ERR_INVALID_PARAMETER - return texture_size_dict + # Retrieve real path if needed + if _map_file_internal.begins_with("uid://"): + var uid := ResourceUID.text_to_id(_map_file_internal) + if not ResourceUID.has_id(uid): + fail_build("Error: failed to retrieve path for UID (%s)" % _map_file_internal) + return ERR_DOES_NOT_EXIST + _map_file_internal = ResourceUID.get_id_path(uid) -static func get_script_by_class_name(name_of_class : String) -> Script: - if ResourceLoader.exists(name_of_class, "Script"): - return load(name_of_class) as Script - - for global_class in ProjectSettings.get_global_class_list(): - var found_name_of_class : String = global_class["class"] - var found_path : String = global_class["path"] - if found_name_of_class == name_of_class: - return load(found_path) as Script - - return null - -## Build nodes from the entities in [member entity_dicts] -func build_entity_nodes() -> Array: - var entity_nodes : Array = [] - entity_nodes.resize(entity_dicts.size()) + if not FileAccess.file_exists(_map_file_internal): + if not FileAccess.file_exists(_map_file_internal + ".import"): + fail_build("Map file %s does not exist." % _map_file_internal) + return ERR_DOES_NOT_EXIST - # TrenchBroom: Prevent generation of omitted layers - var omitted_entities : Array[int] = [] - var omitted_groups: Array[String] = [] + return OK + +## Builds the [member global_map_file]. If not set, builds the [member local_map_file]. +## First cleans the map node of any children, then creates a [FuncGodotParser], [FuncGodotGeometryGenerator] +## and [FuncGodotEntityAssembler] to parse and generate the map. +func build() -> void: + var time_elapsed: float = Time.get_ticks_msec() - if map_settings.use_trenchbroom_groups_hierarchy: - # Omit layers - for entity_idx in range(0, entity_dicts.size()): - var entity_dict: Dictionary = entity_dicts[entity_idx] as Dictionary - var properties: Dictionary = entity_dict['properties'] as Dictionary - - if '_tb_type' in properties and properties['_tb_type'] == '_tb_layer': - if '_tb_layer_omit_from_export' in properties and properties['_tb_layer_omit_from_export'] == "1": - omitted_entities.append(entity_idx) - omitted_groups.append("layer_" + str(properties.get('_tb_id', "-1"))) - - # Omit groups and top-level entities - for entity_idx in range(0, entity_dicts.size()): - if omitted_entities.find(entity_idx) != -1: - continue - - var entity_dict: Dictionary = entity_dicts[entity_idx] as Dictionary - var properties: Dictionary = entity_dict['properties'] as Dictionary - - if '_tb_layer' in properties: - if omitted_groups.find("layer_" + str(properties['_tb_layer'])) != -1: - omitted_entities.append(entity_idx) - if '_tb_id' in properties and properties['_tb_type'] == '_tb_group': - omitted_groups.append("group_" + str(properties.get('_tb_id', "-1"))) + if build_flags & BuildFlags.SHOW_PROFILE_INFO: + FuncGodotUtil.print_profile_info("Building...", _SIGNATURE) - for entity_idx in range(0, entity_dicts.size()): - var entity_dict: Dictionary = entity_dicts[entity_idx] as Dictionary - var properties: Dictionary = entity_dict['properties'] as Dictionary - - if map_settings.use_trenchbroom_groups_hierarchy: - if omitted_entities.find(entity_idx) != -1: - entity_nodes[entity_idx] = null - continue - if '_tb_group' in properties and omitted_groups.find("group_" + str(properties['_tb_group'])) != -1: - entity_nodes[entity_idx] = null - continue - - var node: Node = null - var node_name: String = "entity_%s" % entity_idx - - var should_add_child: bool = should_add_children - - if 'classname' in properties: - var classname: String = properties['classname'] - node_name += "_" + classname - if classname in entity_definitions: - var entity_definition: FuncGodotFGDEntityClass = entity_definitions[classname] as FuncGodotFGDEntityClass - - var name_prop: String - if entity_definition.name_property in properties: - name_prop = str(properties[entity_definition.name_property]) - elif map_settings.entity_name_property in properties: - name_prop = str(properties[map_settings.entity_name_property]) - if not name_prop.is_empty(): - node_name = "entity_" + name_prop - - if entity_definition is FuncGodotFGDSolidClass: - if entity_definition.spawn_type == FuncGodotFGDSolidClass.SpawnType.MERGE_WORLDSPAWN: - entity_nodes[entity_idx] = null - continue - if entity_definition.node_class != "": - if ClassDB.class_exists(entity_definition.node_class): - node = ClassDB.instantiate(entity_definition.node_class) - else: - var script : Script = get_script_by_class_name(entity_definition.node_class) - if script is GDScript: - node = (script as GDScript).new() - elif entity_definition is FuncGodotFGDPointClass: - if entity_definition.scene_file: - var flag: PackedScene.GenEditState = PackedScene.GEN_EDIT_STATE_DISABLED - if Engine.is_editor_hint(): - flag = PackedScene.GEN_EDIT_STATE_INSTANCE - node = entity_definition.scene_file.instantiate(flag) - elif entity_definition.node_class != "": - if ClassDB.class_exists(entity_definition.node_class): - node = ClassDB.instantiate(entity_definition.node_class) - else: - var script : Script = get_script_by_class_name(entity_definition.node_class) - if script is GDScript: - node = (script as GDScript).new() - if 'rotation_degrees' in node and entity_definition.apply_rotation_on_map_build: - var angles := Vector3.ZERO - if 'angles' in properties or 'mangle' in properties: - var key := 'angles' if 'angles' in properties else 'mangle' - var angles_raw = properties[key] - if not angles_raw is Vector3: - angles_raw = angles_raw.split_floats(' ') - if angles_raw.size() > 2: - angles = Vector3(-angles_raw[0], angles_raw[1], -angles_raw[2]) - if key == 'mangle': - if entity_definition.classname.begins_with('light'): - angles = Vector3(angles_raw[1], angles_raw[0], -angles_raw[2]) - elif entity_definition.classname == 'info_intermission': - angles = Vector3(angles_raw[0], angles_raw[1], -angles_raw[2]) - else: - push_error("Invalid vector format for \'" + key + "\' in entity \'" + classname + "\'") - elif 'angle' in properties: - var angle = properties['angle'] - if not angle is float: - angle = float(angle) - angles.y += angle - angles.y += 180 - node.rotation_degrees = angles - - if 'scale' in node and entity_definition.apply_scale_on_map_build: - if 'scale' in properties: - var scale_prop: Variant = properties['scale'] - if typeof(scale_prop) == TYPE_STRING: - var scale_arr: PackedStringArray = (scale_prop as String).split(" ") - match scale_arr.size(): - 1: scale_prop = scale_arr[0].to_float() - 3: scale_prop = Vector3(scale_arr[1].to_float(), scale_arr[2].to_float(), scale_arr[0].to_float()) - 2: scale_prop = Vector2(scale_arr[0].to_float(), scale_arr[0].to_float()) - if typeof(scale_prop) == TYPE_FLOAT or typeof(scale_prop) == TYPE_INT: - node.scale *= scale_prop as float - elif node.scale is Vector3: - if typeof(scale_prop) == TYPE_VECTOR3 or typeof(scale_prop) == TYPE_VECTOR3I: - node.scale *= scale_prop as Vector3 - elif node.scale is Vector2: - if typeof(scale_prop) == TYPE_VECTOR2 or typeof(scale_prop) == TYPE_VECTOR2I: - node.scale *= scale_prop as Vector2 - else: - node = Node3D.new() - if entity_definition.script_class: - node.set_script(entity_definition.script_class) - if not node: - node = Node3D.new() - - node.name = node_name - - if 'origin' in properties and entity_dict.brush_count < 1: - var origin_vec: Vector3 = Vector3.ZERO - var origin_comps: PackedFloat64Array = properties['origin'].split_floats(' ') - if origin_comps.size() > 2: - origin_vec = Vector3(origin_comps[1], origin_comps[2], origin_comps[0]) - else: - push_error("Invalid vector format for \'origin\' in " + node.name) - if 'position' in node: - if node.position is Vector3: - node.position = origin_vec * map_settings.scale_factor - elif node.position is Vector2: - node.position = Vector2(origin_vec.z, -origin_vec.y) - else: - if entity_idx != 0 and 'position' in node: - if node.position is Vector3: - node.position = entity_dict['center'] * map_settings.scale_factor - - entity_nodes[entity_idx] = node - - if should_add_child: - queue_add_child(self, node) + clear_children() - return entity_nodes - -## Build [CollisionShape3D] nodes for brush entities -func build_entity_collision_shape_nodes() -> Array: - var entity_collision_shapes_arr: Array = [] - - for entity_idx in range(0, entity_nodes.size()): - var entity_collision_shapes: Array = [] - - var entity_dict: Dictionary = entity_dicts[entity_idx] - var properties: Dictionary = entity_dict['properties'] - - var node: Node = entity_nodes[entity_idx] as Node - var concave: bool = false - - if 'classname' in properties: - var classname: String = properties['classname'] - if classname in entity_definitions: - var entity_definition: FuncGodotFGDSolidClass = entity_definitions[classname] as FuncGodotFGDSolidClass - if entity_definition: - if entity_definition.collision_shape_type == FuncGodotFGDSolidClass.CollisionShapeType.NONE: - entity_collision_shapes_arr.append(null) - continue - elif entity_definition.collision_shape_type == FuncGodotFGDSolidClass.CollisionShapeType.CONCAVE: - concave = true - - if entity_definition.spawn_type == FuncGodotFGDSolidClass.SpawnType.MERGE_WORLDSPAWN: - # TODO: Find the worldspawn object instead of assuming index 0 - node = entity_nodes[0] as Node - - if node and node is CollisionObject3D: - (node as CollisionObject3D).collision_layer = entity_definition.collision_layer - (node as CollisionObject3D).collision_mask = entity_definition.collision_mask - (node as CollisionObject3D).collision_priority = entity_definition.collision_priority - - # don't create collision shapes that wont be attached to a CollisionObject3D as they are a waste - if not node or (not node is CollisionObject3D): - entity_collision_shapes_arr.append(null) - continue - - if concave: - var collision_shape: CollisionShape3D = CollisionShape3D.new() - collision_shape.name = "entity_%s_collision_shape" % entity_idx - entity_collision_shapes.append(collision_shape) - queue_add_child(node, collision_shape) - else: - for brush_idx in entity_dict['brush_indices']: - var collision_shape: CollisionShape3D = CollisionShape3D.new() - collision_shape.name = "entity_%s_brush_%s_collision_shape" % [entity_idx, brush_idx] - entity_collision_shapes.append(collision_shape) - queue_add_child(node, collision_shape) - entity_collision_shapes_arr.append(entity_collision_shapes) - - return entity_collision_shapes_arr - -## Build the concrete [Shape3D] resources for each brush -func build_entity_collision_shapes() -> void: - for entity_idx in range(0, entity_dicts.size()): - var entity_dict: Dictionary = entity_dicts[entity_idx] as Dictionary - var properties: Dictionary = entity_dict['properties'] - var entity_position: Vector3 = Vector3.ZERO - if entity_nodes[entity_idx] != null and entity_nodes[entity_idx].get("position"): - if entity_nodes[entity_idx].position is Vector3: - entity_position = entity_nodes[entity_idx].position - - if entity_collision_shapes.size() < entity_idx: - continue - if entity_collision_shapes[entity_idx] == null: - continue - - var entity_collision_shape: Array = entity_collision_shapes[entity_idx] - var concave: bool = false - var shape_margin: float = 0.04 - var entity_definition: FuncGodotFGDSolidClass - - if 'classname' in properties: - var classname: String = properties['classname'] - if classname in entity_definitions: - entity_definition = entity_definitions[classname] as FuncGodotFGDSolidClass - if entity_definition: - match(entity_definition.collision_shape_type): - FuncGodotFGDSolidClass.CollisionShapeType.NONE: - continue - FuncGodotFGDSolidClass.CollisionShapeType.CONVEX: - concave = false - FuncGodotFGDSolidClass.CollisionShapeType.CONCAVE: - concave = true - shape_margin = entity_definition.collision_shape_margin - - if entity_collision_shapes[entity_idx] == null: - continue - - if concave: - func_godot.gather_entity_concave_collision_surfaces(entity_idx) - else: - func_godot.gather_entity_convex_collision_surfaces(entity_idx) - var entity_surfaces: Array = func_godot.fetch_surfaces(func_godot.surface_gatherer) - var metadata: Dictionary = func_godot.surface_gatherer.out_metadata - var collision_shape_to_face_range_map: Dictionary = {} - var face_shape_indices: Array[Vector2i] = metadata["shape_index_ranges"] - - var entity_verts: PackedVector3Array = PackedVector3Array() - - for surface_idx in range(0, entity_surfaces.size()): - if entity_surfaces[surface_idx] == null: - continue - - var surface_verts: Array = entity_surfaces[surface_idx] - - if concave: - var vertices: PackedVector3Array = surface_verts[Mesh.ARRAY_VERTEX] as PackedVector3Array - var indices: PackedInt32Array = surface_verts[Mesh.ARRAY_INDEX] as PackedInt32Array - for vert_idx in indices: - entity_verts.append(vertices[vert_idx]) - else: - var shape_points = PackedVector3Array() - for vertex in surface_verts[Mesh.ARRAY_VERTEX]: - if not vertex in shape_points: - shape_points.append(vertex) - - var shape: ConvexPolygonShape3D = ConvexPolygonShape3D.new() - shape.set_points(shape_points) - shape.margin = shape_margin - - var collision_shape: CollisionShape3D = entity_collision_shape[surface_idx] - collision_shape.set_shape(shape) - - # For face shape range metadata, we need to add info about child node names - if entity_definition and entity_definition.add_collision_shape_face_range_metadata: - collision_shape_to_face_range_map[collision_shape.name] = face_shape_indices[surface_idx] - - if concave: - if entity_verts.size() == 0: - continue - - var shape: ConcavePolygonShape3D = ConcavePolygonShape3D.new() - shape.set_faces(entity_verts) - shape.margin = shape_margin - - var collision_shape: CollisionShape3D = entity_collision_shapes[entity_idx][0] - collision_shape.set_shape(shape) - - if entity_definition and entity_definition.add_collision_shape_face_range_metadata: - collision_shape_to_face_range_map[collision_shape.name] = Vector2i(0, entity_verts.size() / 3) - - if entity_definition: - if not entity_definition.add_face_normal_metadata: - metadata.erase("normals") - if not entity_definition.add_face_position_metadata: - metadata.erase("positions") - if not entity_definition.add_textures_metadata: - metadata.erase("textures") - metadata.erase("texture_names") - if not entity_definition.add_vertex_metadata: - metadata.erase("vertices") - - metadata.erase("shape_index_ranges") # cleanup intermediate / buffer - if entity_definition.add_collision_shape_face_range_metadata: - metadata["collision_shape_to_face_range_map"] = collision_shape_to_face_range_map - - if not metadata.is_empty(): - entity_nodes[entity_idx].set_meta("func_godot_mesh_data", metadata) - -## Build Dictionary from entity indices to [ArrayMesh] instances -func build_entity_mesh_dict() -> Dictionary: - var meshes: Dictionary = {} - - var texture_surf_map: Dictionary - var texture_to_metadata_map: Dictionary - for texture in texture_dict: - texture_surf_map[texture] = Array() - texture_to_metadata_map[texture] = {} - - var gather_task = func(i): - var texture: String = texture_dict.keys()[i] - var fetch_result = func_godot.gather_texture_surfaces(texture) - texture_surf_map[texture] = fetch_result["surfaces"] - texture_to_metadata_map[texture] = fetch_result["metadata"] - - var task_id: int = WorkerThreadPool.add_group_task(gather_task, texture_dict.keys().size(), 4, true) - WorkerThreadPool.wait_for_group_task_completion(task_id) - - for texture in texture_dict: - var texture_surfaces: Array = texture_surf_map[texture] as Array - - for entity_idx in range(0, texture_surfaces.size()): - var entity_dict: Dictionary = entity_dicts[entity_idx] as Dictionary - var properties: Dictionary = entity_dict['properties'] - - var entity_surface = texture_surfaces[entity_idx] - var entity_definition: FuncGodotFGDSolidClass - - if 'classname' in properties: - var classname: String = properties['classname'] - if classname in entity_definitions: - entity_definition = entity_definitions[classname] as FuncGodotFGDSolidClass - if entity_definition: - if entity_definition.spawn_type == FuncGodotFGDSolidClass.SpawnType.MERGE_WORLDSPAWN: - entity_surface = null - - if not entity_definition.build_visuals and not entity_definition.build_occlusion: - entity_surface = null - - if entity_surface == null: - continue - - if not entity_idx in meshes: - meshes[entity_idx] = ArrayMesh.new() - - var mesh: ArrayMesh = meshes[entity_idx] - mesh.add_surface_from_arrays(ArrayMesh.PRIMITIVE_TRIANGLES, entity_surface) - mesh.surface_set_name(mesh.get_surface_count() - 1, texture) - mesh.surface_set_material(mesh.get_surface_count() - 1, material_dict[texture]) - - # Build metadata only if the node is set to not build collision. Otherwise we are already building it in build_entity_collision_shapes. - if entity_definition and entity_definition.collision_shape_type == FuncGodotFGDSolidClass.CollisionShapeType.NONE: - if not mesh.has_meta("func_godot_mesh_data"): - mesh.set_meta("func_godot_mesh_data", Dictionary()) - var this_textures_metadata: Dictionary = texture_to_metadata_map[texture] - var entity_metadata: Dictionary = mesh.get_meta("func_godot_mesh_data") - var entity_index_ranges: Array[Vector2i] = this_textures_metadata["entity_index_ranges"] - var range: Vector2i = entity_index_ranges[entity_idx] - - if entity_definition.add_vertex_metadata: - var vertices: PackedVector3Array = entity_metadata.get("vertices", PackedVector3Array()) - vertices.append_array((this_textures_metadata["vertices"] as PackedVector3Array).slice(range.x * 3, range.y * 3)) - entity_metadata["vertices"] = vertices - - if entity_definition.add_face_normal_metadata: - var normals: PackedVector3Array = entity_metadata.get("normals", PackedVector3Array()) - normals.append_array((this_textures_metadata["normals"] as PackedVector3Array).slice(range.x, range.y)) - entity_metadata["normals"] = normals - - if entity_definition.add_face_position_metadata: - var positions: PackedVector3Array = entity_metadata.get("positions", PackedVector3Array()) - positions.append_array((this_textures_metadata["positions"] as PackedVector3Array).slice(range.x, range.y)) - entity_metadata["positions"] = positions - - if entity_definition.add_textures_metadata: - # different (if null: add empty) logic for texture_names due to not being able make a static typed - # Array[StringName] inline in the get() function - if not entity_metadata.has("texture_names"): - var new: Array[StringName] = [] - entity_metadata["texture_names"] = new - var texture_names: Array[StringName] = entity_metadata["texture_names"] - var textures: PackedInt32Array = entity_metadata.get("textures", PackedInt32Array()) - var texture_block: PackedInt32Array = [] - texture_block.resize(range.y - range.x) - texture_block.fill(texture_names.size()) - texture_names.append(StringName(texture)) - textures.append_array(texture_block) - entity_metadata["textures"] = textures - - return meshes - -## Build [MeshInstance3D]s from brush entities and add them to the add child queue -func build_entity_mesh_instances() -> Dictionary: - var entity_mesh_instances: Dictionary = {} - for entity_idx in entity_mesh_dict: - var use_in_baked_light: bool = false - var shadow_casting_setting: GeometryInstance3D.ShadowCastingSetting = GeometryInstance3D.SHADOW_CASTING_SETTING_DOUBLE_SIDED - var render_layers: int = 1 - - var entity_dict: Dictionary = entity_dicts[entity_idx] as Dictionary - var properties: Dictionary = entity_dict['properties'] - var classname: String = properties['classname'] - if classname in entity_definitions: - var entity_definition: FuncGodotFGDSolidClass = entity_definitions[classname] as FuncGodotFGDSolidClass - if entity_definition: - if not entity_definition.build_visuals: - continue - - if entity_definition.use_in_baked_light: - use_in_baked_light = true - elif '_shadow' in properties: - if properties['_shadow'] == "1": - use_in_baked_light = true - shadow_casting_setting = entity_definition.shadow_casting_setting - render_layers = entity_definition.render_layers - - if not entity_mesh_dict[entity_idx]: - continue - - var mesh_instance: MeshInstance3D = MeshInstance3D.new() - mesh_instance.name = 'entity_%s_mesh_instance' % entity_idx - mesh_instance.gi_mode = MeshInstance3D.GI_MODE_STATIC if use_in_baked_light else GeometryInstance3D.GI_MODE_DISABLED - mesh_instance.cast_shadow = shadow_casting_setting - mesh_instance.layers = render_layers - - queue_add_child(entity_nodes[entity_idx], mesh_instance) - - entity_mesh_instances[entity_idx] = mesh_instance - - return entity_mesh_instances - -func build_entity_occluder_instances() -> Dictionary: - var entity_occluder_instances: Dictionary = {} - for entity_idx in entity_mesh_dict: - var entity_dict: Dictionary = entity_dicts[entity_idx] as Dictionary - var properties: Dictionary = entity_dict['properties'] - var classname: String = properties['classname'] - if classname in entity_definitions: - var entity_definition: FuncGodotFGDSolidClass = entity_definitions[classname] as FuncGodotFGDSolidClass - if entity_definition: - if entity_definition.build_occlusion: - if not entity_mesh_dict[entity_idx]: - continue - - var occluder_instance: OccluderInstance3D = OccluderInstance3D.new() - occluder_instance.name = 'entity_%s_occluder_instance' % entity_idx - - queue_add_child(entity_nodes[entity_idx], occluder_instance) - entity_occluder_instances[entity_idx] = occluder_instance - - return entity_occluder_instances - -## Assign [ArrayMesh]es to their [MeshInstance3D] counterparts -func apply_entity_meshes() -> void: - for entity_idx in entity_mesh_instances: - var mesh: Mesh = entity_mesh_dict[entity_idx] as Mesh - var mesh_instance: MeshInstance3D = entity_mesh_instances[entity_idx] as MeshInstance3D - if not mesh or not mesh_instance: - if mesh.has_meta("func_godot_mesh_data"): - mesh.remove_meta("func_godot_mesh_data") - continue - - mesh_instance.set_mesh(mesh) - queue_add_child(entity_nodes[entity_idx], mesh_instance) - if mesh.has_meta("func_godot_mesh_data"): - entity_nodes[entity_idx].set_meta("func_godot_mesh_data", mesh.get_meta("func_godot_mesh_data")) - mesh.remove_meta("func_godot_mesh_data") - -func apply_entity_occluders() -> void: - for entity_idx in entity_mesh_dict: - var mesh: Mesh = entity_mesh_dict[entity_idx] as Mesh - var occluder_instance: OccluderInstance3D - - if entity_idx in entity_occluder_instances: - occluder_instance = entity_occluder_instances[entity_idx] - - if not mesh or not occluder_instance: - continue - - var verts: PackedVector3Array - var indices: PackedInt32Array - var index: int = 0 - for surf_idx in range(mesh.get_surface_count()): - var vert_count: int = verts.size() - var surf_array: Array = mesh.surface_get_arrays(surf_idx) - verts.append_array(surf_array[Mesh.ARRAY_VERTEX]) - indices.resize(indices.size() + surf_array[Mesh.ARRAY_INDEX].size()) - for new_index in surf_array[Mesh.ARRAY_INDEX]: - indices[index] = (new_index + vert_count) - index += 1 - - var occluder: ArrayOccluder3D = ArrayOccluder3D.new() - occluder.set_arrays(verts, indices) - - occluder_instance.occluder = occluder - -## Resolve entity group hierarchy, turning Trenchbroom groups into nodes and queueing their contents to be added to said nodes as children -func resolve_trenchbroom_group_hierarchy() -> void: - if not map_settings.use_trenchbroom_groups_hierarchy: + var verify_err: Error = verify() + if verify_err != OK: + fail_build("Verification failed: %s. Aborting map build" % error_string(verify_err), true) return - var parent_entities: Dictionary = {} - var child_entities: Dictionary = {} + if not map_settings: + push_warning("Map assembler does not have a map settings provided and will use default map settings.") + load(ProjectSettings.get_setting("func_godot/default_map_settings", "res://addons/func_godot/func_godot_default_map_settings.tres")) - # Gather all entities which are children in some group or parents in some group - for node_idx in range(0, entity_nodes.size()): - var node: Node = entity_nodes[node_idx] - var properties: Dictionary = entity_dicts[node_idx]['properties'] - - if not properties: - continue - - if not ('_tb_id' in properties or '_tb_group' in properties or '_tb_layer' in properties): - continue - - # identify children - if '_tb_group' in properties or '_tb_layer' in properties: - child_entities[node_idx] = node - - # identify parents - if '_tb_id' in properties: - node.set_meta("_tb_type", properties['_tb_type']) - if properties['_tb_type'] == "_tb_group": - node.name = "group_" + str(properties['_tb_id']) - elif properties['_tb_type'] == "_tb_layer": - node.name = "layer_" + str(properties['_tb_layer_sort_index']) - if properties['_tb_name'] != "Unnamed": - node.name = node.name + "_" + properties['_tb_name'] - parent_entities[node_idx] = node + # Parse and collect map data + var parser := FuncGodotParser.new() + if build_flags & BuildFlags.SHOW_PROFILE_INFO: + print("\nPARSER") + parser.declare_step.connect(FuncGodotUtil.print_profile_info.bind(parser._SIGNATURE)) + var parse_data: FuncGodotData.ParseData = parser.parse_map_data(_map_file_internal, map_settings) - var child_to_parent_map: Dictionary = {} + if parse_data.entities.is_empty(): + return # Already printed failure message in parser, just return here - #For each child,... - for node_idx in child_entities: - var node: Node = child_entities[node_idx] - var properties: Dictionary = entity_dicts[node_idx]['properties'] - var tb_group: Variant = null - if '_tb_group' in properties: - tb_group = properties['_tb_group'] - elif '_tb_layer' in properties: - tb_group = properties['_tb_layer'] - if tb_group == null: - continue - - var parent: Node = null - var parent_properties: Dictionary = {} - var parent_entity = null - var parent_idx = null - - # ...identify its direct parent out of the parent_entities array - for possible_parent in parent_entities: - parent_entity = parent_entities[possible_parent] - parent_properties = entity_dicts[possible_parent]['properties'] - if parent_properties['_tb_id'] == tb_group: - parent = parent_entity - parent_idx = possible_parent - break - # If there's a match, pass it on to the child-parent relationship map - if parent: - child_to_parent_map[node_idx] = parent_idx + var entities: Array[FuncGodotData.EntityData] = parse_data.entities + var groups: Array[FuncGodotData.GroupData] = parse_data.groups - for child_idx in child_to_parent_map: - var child = entity_nodes[child_idx] - var parent_idx = child_to_parent_map[child_idx] - var parent = entity_nodes[parent_idx] - queue_add_child(parent, child, null, true) - -## Add a child and its new parent to the add child queue. If [code]below[/code] is a node, add it as a child to that instead. If [code]relative[/code] is true, set the location of node relative to parent. -func queue_add_child(parent, node, below = null, relative = false) -> void: - add_child_array.append({"parent": parent, "node": node, "below": below, "relative": relative}) - -## Assign children to parents based on the contents of the add child queue (see [method queue_add_child]) -func add_children() -> void: - while true: - for i in range(0, set_owner_batch_size): - if add_child_array.size() > 0: - var data: Dictionary = add_child_array.pop_front() - if data: - add_child_editor(data['parent'], data['node'], data['below']) - if data['relative']: - if (data['node'] is Node3D and data['parent'] is Node3D) or (data['node'] is Node2D and data['parent'] is Node2D): - data['node'].position -= data['parent'].position - continue - add_children_complete() - return - - var scene_tree: SceneTree = get_tree() - if scene_tree and not block_until_complete: - await get_tree().create_timer(YIELD_DURATION).timeout - -## Set owners and start post-attach build steps -func add_children_complete() -> void: - stop_profile('add_children') + # Free up some memory now that we have the data + parser = null - if should_set_owners: - start_profile('set_owners') - set_owners() - else: - run_build_steps(true) + # Retrieve geometry + var generator := FuncGodotGeometryGenerator.new(map_settings) + if build_flags & BuildFlags.SHOW_PROFILE_INFO: + print("\nGEOMETRY GENERATOR") + generator.declare_step.connect(FuncGodotUtil.print_profile_info.bind(generator._SIGNATURE)) + + # Generate surface and shape data + var generate_error := generator.build(build_flags, entities) + if generate_error != OK: + fail_build("Geometry generation failed: %s" % error_string(generate_error)) + return -## Set owner of nodes generated by FuncGodot to scene root based on [member set_owner_array] -func set_owners() -> void: - while true: - for i in range(0, set_owner_batch_size): - var node: Node = set_owner_array.pop_front() - if node: - set_owner_editor(node) - else: - set_owners_complete() - return - - var scene_tree: SceneTree = get_tree() - if scene_tree and not block_until_complete: - await get_tree().create_timer(YIELD_DURATION).timeout + # Assemble entities and groups + var assembler := FuncGodotEntityAssembler.new(map_settings) + if build_flags & BuildFlags.SHOW_PROFILE_INFO: + print("\nENTITY ASSEMBLER") + assembler.declare_step.connect(FuncGodotUtil.print_profile_info.bind(assembler._SIGNATURE)) + assembler.build(self, entities, groups) + + time_elapsed = Time.get_ticks_msec() - time_elapsed -## Finish profiling for set_owners and start post-attach build steps -func set_owners_complete() -> void: - stop_profile('set_owners') - run_build_steps(true) + if build_flags & BuildFlags.SHOW_PROFILE_INFO: + print("\nCompleted in %s seconds" % (time_elapsed / 1000.0)) -## Apply Map File properties to [Node3D] instances, transferring Map File dictionaries to [Node3D.func_godot_properties] -## and then calling the appropriate callbacks. -func apply_properties_and_finish() -> void: - for entity_idx in range(0, entity_nodes.size()): - var entity_node: Node = entity_nodes[entity_idx] as Node - if not entity_node: - continue - - var entity_dict: Dictionary = entity_dicts[entity_idx] as Dictionary - var properties: Dictionary = entity_dict['properties'] as Dictionary - - if 'classname' in properties: - var classname: String = properties['classname'] - if classname in entity_definitions: - var entity_definition: FuncGodotFGDEntityClass = entity_definitions[classname] as FuncGodotFGDEntityClass - - for property in properties: - var prop_string = properties[property] - if property in entity_definition.class_properties: - var prop_default: Variant = entity_definition.class_properties[property] - - match typeof(prop_default): - TYPE_INT: - properties[property] = prop_string.to_int() - TYPE_FLOAT: - properties[property] = prop_string.to_float() - TYPE_BOOL: - properties[property] = bool(prop_string.to_int()) - TYPE_VECTOR3: - var prop_comps: PackedFloat64Array = prop_string.split_floats(" ") - if prop_comps.size() > 2: - properties[property] = Vector3(prop_comps[0], prop_comps[1], prop_comps[2]) - else: - push_error("Invalid Vector3 format for \'" + property + "\' in entity \'" + classname + "\': " + prop_string) - properties[property] = prop_default - TYPE_VECTOR3I: - var prop_vec: Vector3i = prop_default - var prop_comps: PackedStringArray = prop_string.split(" ") - if prop_comps.size() > 2: - for i in 3: - prop_vec[i] = prop_comps[i].to_int() - else: - push_error("Invalid Vector3i format for \'" + property + "\' in entity \'" + classname + "\': " + prop_string) - properties[property] = prop_vec - TYPE_COLOR: - var prop_color: Color = prop_default - var prop_comps: PackedStringArray = prop_string.split(" ") - if prop_comps.size() > 2: - prop_color.r8 = prop_comps[0].to_int() - prop_color.g8 = prop_comps[1].to_int() - prop_color.b8 = prop_comps[2].to_int() - prop_color.a = 1.0 - else: - push_error("Invalid Color format for \'" + property + "\' in entity \'" + classname + "\': " + prop_string) - properties[property] = prop_color - TYPE_DICTIONARY: - var prop_desc = entity_definition.class_property_descriptions[property] - if prop_desc is Array and prop_desc.size() > 1 and prop_desc[1] is int: - properties[property] = prop_string.to_int() - TYPE_ARRAY: - properties[property] = prop_string.to_int() - TYPE_VECTOR2: - var prop_comps: PackedFloat64Array = prop_string.split_floats(" ") - if prop_comps.size() > 1: - properties[property] = Vector2(prop_comps[0], prop_comps[1]) - else: - push_error("Invalid Vector2 format for \'" + property + "\' in entity \'" + classname + "\': " + prop_string) - properties[property] = prop_default - TYPE_VECTOR2I: - var prop_vec: Vector2i = prop_default - var prop_comps: PackedStringArray = prop_string.split(" ") - if prop_comps.size() > 1: - for i in 2: - prop_vec[i] = prop_comps[i].to_int() - else: - push_error("Invalid Vector2i format for \'" + property + "\' in entity \'" + classname + "\': " + prop_string) - properties[property] = prop_vec - TYPE_VECTOR4: - var prop_comps: PackedFloat64Array = prop_string.split_floats(" ") - if prop_comps.size() > 3: - properties[property] = Vector4(prop_comps[0], prop_comps[1], prop_comps[2], prop_comps[3]) - else: - push_error("Invalid Vector4 format for \'" + property + "\' in entity \'" + classname + "\': " + prop_string) - properties[property] = prop_default - TYPE_VECTOR4I: - var prop_vec: Vector4i = prop_default - var prop_comps: PackedStringArray = prop_string.split(" ") - if prop_comps.size() > 3: - for i in 4: - prop_vec[i] = prop_comps[i].to_int() - else: - push_error("Invalid Vector4i format for \'" + property + "\' in entity \'" + classname + "\': " + prop_string) - properties[property] = prop_vec - TYPE_NODE_PATH: - properties[property] = prop_string - TYPE_OBJECT: - properties[property] = prop_string - - # Assign properties not defined with defaults from the entity definition - for property in entity_definitions[classname].class_properties: - if not property in properties: - var prop_default: Variant = entity_definition.class_properties[property] - # Flags - if prop_default is Array: - var prop_flags_sum := 0 - for prop_flag in prop_default: - if prop_flag is Array and prop_flag.size() > 2: - if prop_flag[2] and prop_flag[1] is int: - prop_flags_sum += prop_flag[1] - properties[property] = prop_flags_sum - # Choices - elif prop_default is Dictionary: - var prop_desc = entity_definition.class_property_descriptions[property] - if prop_desc is Array and prop_desc.size() > 1 and (prop_desc[1] is int or prop_desc[1] is String): - properties[property] = prop_desc[1] - else: - properties[property] = 0 - elif prop_default is Resource: - properties[property] = prop_default.resource_path - elif prop_default is NodePath or prop_default is Object or prop_default == null: - properties[property] = "" - # Everything else - else: - properties[property] = prop_default - - if entity_definition.auto_apply_to_matching_node_properties: - for property in properties: - if property in entity_node: - if typeof(entity_node.get(property)) == typeof(properties[property]): - entity_node.set(property, properties[property]) - else: - push_error("Entity %s property \'%s\' type mismatch with matching generated node property." % [entity_node.name, property]) - - if 'func_godot_properties' in entity_node: - entity_node.func_godot_properties = properties - - if entity_node.has_method("_func_godot_apply_properties"): - entity_node.call("_func_godot_apply_properties", properties) - - if entity_node.has_method("_func_godot_build_complete"): - entity_node.call_deferred("_func_godot_build_complete") - -# Cleanup after build is finished (internal) -func _build_complete(): - reset_build_context() - stop_profile('build_map') - print('Build complete\n') - emit_signal("build_complete") + if build_flags & BuildFlags.SHOW_PROFILE_INFO: + print("") + FuncGodotUtil.print_profile_info("Build complete", _SIGNATURE) + build_complete.emit() diff --git a/addons/func_godot/src/map/func_godot_map.gd.uid b/addons/func_godot/src/map/func_godot_map.gd.uid index 16635b89..4d03c857 100644 --- a/addons/func_godot/src/map/func_godot_map.gd.uid +++ b/addons/func_godot/src/map/func_godot_map.gd.uid @@ -1 +1 @@ -uid://kno58homctew +uid://cwu5cf7a0awcd diff --git a/addons/func_godot/src/map/func_godot_map_settings.gd b/addons/func_godot/src/map/func_godot_map_settings.gd index fe974421..189a9d14 100644 --- a/addons/func_godot/src/map/func_godot_map_settings.gd +++ b/addons/func_godot/src/map/func_godot_map_settings.gd @@ -1,24 +1,49 @@ -@icon("res://addons/func_godot/icons/icon_godot_ranger.svg") @tool +@icon("res://addons/func_godot/icons/icon_godot_ranger.svg") +class_name FuncGodotMapSettings extends Resource ## Reusable map settings configuration for [FuncGodotMap] nodes. -class_name FuncGodotMapSettings -extends Resource -## Ratio between map editor units and Godot units. FuncGodot will divide brush coordinates by this number when building. This does not affect entity properties unless scripted to do so. +#region BUILD +@export_category("Build Settings") +## Set automatically when [member inverse_scale_factor] is changed. Used primarily during the build process. var scale_factor: float = 0.03125 + +## Ratio between map editor units and Godot units. FuncGodot will divide brush coordinates by this number and save the results to [member scale_factor]. +## This does not affect entity properties unless scripted to do so. @export var inverse_scale_factor: float = 32.0 : set(value): + if value == 0.0: + printerr("Error: Cannot set Inverse Scale Factor to Zero") + return inverse_scale_factor = value scale_factor = 1.0 / value ## [FuncGodotFGDFile] that translates map file classnames into Godot nodes and packed scenes. @export var entity_fgd: FuncGodotFGDFile = preload("res://addons/func_godot/fgd/func_godot_fgd.tres") -## Default class property to use in naming generated nodes. This setting is overridden by `name_property` in [FuncGodotFGDEntityClass]. +## Default class property to use in naming generated nodes. This setting is overridden by [member FuncGodotFGDEntityClass.name_property]. ## Naming occurs before adding to the [SceneTree] and applying properties. ## Nodes will be named `"entity_" + name_property`. An entity's name should be unique, otherwise you may run into unexpected behavior. @export var entity_name_property: String = "" +## Class property that determines whether the [FuncGodotFGDSolidClass] entity performs mesh smoothing operations. +@export var entity_smoothing_property: String = "_phong" + +## Class property that contains the angular threshold that determines when a [FuncGodotFGDSolidClass] entity's mesh vertices are smoothed. +@export var entity_smoothing_angle_property: String = "_phong_angle" + +## If true, will organize [SceneTree] using TrenchBroom Layers and Groups or Hammer Visgroups. Groups will be generated as [Node3D] nodes. +## All non-entity structural brushes will be moved out of their groups and merged into the `Worldspawn` entity. +## Any Layers toggled to be omitted from export in TrenchBroom and their child entities and groups will not be built. +@export var use_groups_hierarchy: bool = false + +## Class property that contains the snapping epsilon for generated vertices of [FuncGodotFGDSolidClass] entities. +## Utilizing this property can help reduce instances of seams between polygons. +@export var vertex_merge_distance_property: String = "_vertex_merge_distance" + +#endregion + +#region TEXTURES @export_category("Textures") ## Base directory for textures. When building materials, FuncGodot will search this directory for texture files with matching names to the textures assigned to map brush faces. @@ -27,20 +52,38 @@ var scale_factor: float = 0.03125 ## File extensions to search for texture data. @export var texture_file_extensions: Array[String] = ["png", "jpg", "jpeg", "bmp", "tga", "webp"] -## Optional path for the clip texture, relative to [member base_texture_dir]. Brush faces textured with the clip texture will have those faces removed from the generated [MeshInstance3D] but not the generated [CollisionShape3D]. -@export var clip_texture: String = "special/clip" +## Optional path for the clip texture, relative to [member base_texture_dir]. +## Brush faces textured with the clip texture will have those faces removed from the generated [Mesh] but not the generated [Shape3D]. +@export var clip_texture: String = "special/clip": + set(tex): + clip_texture = tex.to_lower() -## Optional path for the skip texture, relative to [member base_texture_dir]. Brush faces textured with the skip texture will have those faces removed from the generated [MeshInstance3D]. If the [FuncGodotFGDSolidClass] `collision_shape_type` is set to concave then it will also remove collision from those faces in the generated [CollisionShape3D]. -@export var skip_texture: String = "special/skip" +## Optional path for the skip texture, relative to [member base_texture_dir]. +## Brush faces textured with the skip texture will have those faces removed from the generated [Mesh]. +## If [member FuncGodotFGDSolidClass.collision_shape_type] is set to concave then it will also remove collision from those faces in the generated [Shape3D]. +@export var skip_texture: String = "special/skip": + set(tex): + skip_texture = tex.to_lower() -## Optional path for the origin texture, relative to [member base_texture_dir]. Brush faces textured with the origin texture will have those faces removed from the generated [MeshInstance3D]. The bounds of these faces will be used to calculate the origin point of the entity. -@export var origin_texture: String = "special/origin" +## Optional path for the origin texture, relative to [member base_texture_dir]. +## Brush faces textured with the origin texture will have those faces removed from the generated [Mesh] and [Shape3D]. +## The bounds of these faces will be used to calculate the origin point of the entity. +@export var origin_texture: String = "special/origin": + set(tex): + origin_texture = tex.to_lower() -## Optional [QuakeWADFile] resources to apply textures from. See the [Quake Wiki](https://quakewiki.org/wiki/Texture_Wad) for more information on Quake Texture WADs. -@export var texture_wads: Array[Resource] = [] +## Optional [QuakeWadFile] resources to apply textures from. See the [Quake Wiki](https://quakewiki.org/wiki/Texture_Wad) for more information on Quake Texture WADs. +@export var texture_wads: Array[QuakeWadFile] = [] +#endregion + +#region MATERIALS @export_category("Materials") +## Base directory for loading and saving materials. When building materials, FuncGodot will search this directory for material resources +## with matching names to the textures assigned to map brush faces. If not found, will fall back to [member base_texture_dir]. +@export_dir var base_material_dir: String = "" + ## File extension to search for [Material] definitions @export var material_file_extension: String = "tres" @@ -67,19 +110,16 @@ var scale_factor: float = 0.03125 ## Automatic PBR material generation ORM map pattern @export var orm_map_pattern: String = "%s_orm.%s" -## Save automatically generated materials to disk, allowing reuse across [FuncGodotMap] nodes. [i]NOTE: Materials do not use the Default Material settings after saving.[/i] +## Save automatically generated materials to disk, allowing reuse across [FuncGodotMap] nodes. +## [i]NOTE: Materials do not use the [member default_material] settings after saving.[/i] @export var save_generated_materials: bool = true +#endregion + @export_category("UV Unwrap") ## Texel size for UV2 unwrapping. -## Actual texel size is uv_unwrap_texel_size / inverse_scale_factor. A ratio of 1/16 is usually a good place to start with (if inverse_scale_factor is 32, start with a uv_unwrap_texel_size of 2). +## Actual texel size is uv_unwrap_texel_size / [member inverse_scale_factor]. A ratio of 1/16 is usually a good place to start with +## (if inverse_scale_factor is 32, start with a uv_unwrap_texel_size of 2). ## Larger values will produce less detailed lightmaps. To conserve memory and filesize, use the largest value that still looks good. @export var uv_unwrap_texel_size: float = 2.0 - -@export_category("TrenchBroom") - -## If true, will organize Scene Tree using Trenchbroom Layers and Groups. Layers and Groups will be generated as [Node3D] nodes. -## All structural brushes will be moved out of the Layers and Groups and merged into the Worldspawn entity. -## Any Layers toggled to be omitted from export in TrenchBroom will not be built. -@export var use_trenchbroom_groups_hierarchy: bool = false diff --git a/addons/func_godot/src/map/func_godot_map_settings.gd.uid b/addons/func_godot/src/map/func_godot_map_settings.gd.uid index 7c749657..fccc85de 100644 --- a/addons/func_godot/src/map/func_godot_map_settings.gd.uid +++ b/addons/func_godot/src/map/func_godot_map_settings.gd.uid @@ -1 +1 @@ -uid://bctwech0sq0kh +uid://38q6k0ctahjn diff --git a/addons/func_godot/src/netradiant_custom/netradiant_custom_gamepack_config.gd b/addons/func_godot/src/netradiant_custom/netradiant_custom_gamepack_config.gd index 18f6d9b3..ab33dc5a 100644 --- a/addons/func_godot/src/netradiant_custom/netradiant_custom_gamepack_config.gd +++ b/addons/func_godot/src/netradiant_custom/netradiant_custom_gamepack_config.gd @@ -1,25 +1,21 @@ @tool @icon("res://addons/func_godot/icons/icon_godot_ranger.svg") +class_name NetRadiantCustomGamePackConfig extends Resource ## Builds a gamepack for NetRadiant Custom. -class_name NetRadiantCustomGamePackConfig -extends Resource +## +## Resource that builds a gamepack configuration for NetRadiant Custom. enum NetRadiantCustomMapType { - QUAKE_1, - QUAKE_3 + QUAKE_1, ## Removes PatchDef entries from the map file. + QUAKE_3 ## Allows the saving of PatchDef entries in the map file. } -## Button to export / update this gamepack's configuration in the NetRadiant Custom Gamepacks Folder. -@export var export_file: bool: - get: - return export_file - set(new_export_file): - if new_export_file != export_file: - if Engine.is_editor_hint(): - do_export_file() +@export_tool_button("Export Gamepack") var _export_file: Callable = export_file ## Gamepack folder and file name. Must be lower case and must not contain special characters. -@export var gamepack_name : String = "func_godot" +@export var gamepack_name : String = "func_godot": + set(new_name): + gamepack_name = new_name.to_lower() ## Name of the game in NetRadiant Custom's gamepack list. @export var game_name : String = "FuncGodot" @@ -27,10 +23,11 @@ enum NetRadiantCustomMapType { ## Directory path containing your maps, textures, shaders, etc... relative to your project directory. @export var base_game_path : String = "" -## FGD resource to include with this gamepack. If using multiple FGD resources, this should be the master FGD that contains them in the `base_fgd_files` resource array. +## [FuncGodotFGDFile] to include with this gamepack. If using multiple FGD file resources, +## this should be the master FGD that contains them in [member FuncGodotFGDFile.base_fgd_files]. @export var fgd_file : FuncGodotFGDFile = preload("res://addons/func_godot/fgd/func_godot_fgd.tres") -## [NetRadiantCustomShader] resources for shader file generation. +## Collection of [NetRadiantCustomShader] resources for shader file generation. @export var netradiant_custom_shaders : Array[Resource] = [ preload("res://addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_clip.tres"), preload("res://addons/func_godot/game_config/netradiant_custom/netradiant_custom_shader_skip.tres"), @@ -49,33 +46,31 @@ enum NetRadiantCustomMapType { ## Default scale of textures in NetRadiant Custom. @export var default_scale : String = "1.0" -## Clip texture path that gets applied to weapclip and nodraw shaders. +## Clip texture path that gets applied to [i]weapclip[/i] and [i]nodraw[/i] shaders. @export var clip_texture: String = "textures/special/clip" -## Skip texture path that gets applied to caulk and nodrawnonsolid shaders. +## Skip texture path that gets applied to [i]caulk[/i] and [i]nodrawnonsolid[/i] shaders. @export var skip_texture: String = "textures/special/skip" -## Quake map type NetRadiant will filter the map for. -## By default, will specify Quake 1 limitations. This will remove patches. -## mapq3 will allow saving patches. -## @warning Toggling this option may be destructive! +## Quake map type NetRadiant will filter the map for, determining whether PatchDef entries are saved. +## [color=red][b]WARNING![/b][/color] Toggling this option may be destructive! @export var map_type: NetRadiantCustomMapType = NetRadiantCustomMapType.QUAKE_1 ## Variables to include in the exported gamepack's [code]default_build_menu.xml[/code].[br][br] -## Each [String] key defines a variable name, and its corresponding [String] value as the literal command-line string to execute in place of this variable identifier[br][br] +## Each [String] key defines a variable name, and its corresponding [String] value as the literal command-line string +## to execute in place of this variable identifier[br][br] ## Entries may be referred to by key in [member default_build_menu_commands] values. @export var default_build_menu_variables: Dictionary ## Commands to include in the exported gamepack's [code]default_build_menu.xml[/code].[br][br] -## Keys, specified as a [String], define the build option name as you want it to appear in Radiant.[br][br] -## Values represent commands taken within each option.[br][br]They may be either a [String] or an -## [Array] of [String] elements that will be used as the full command-line text issued by each command [i]within[/i] -## its associated build option key. [br][br]They may reference entries in [member default_build_menu_variables] -## by using brackets: [code][variable key name][/code] +## Keys, specified as a [String], define the build option name as you want it to appear in NetRadiant Custom.[br][br] +## Values represent commands taken within each option.[br][br]They may be either a [String] or an [Array] of [String] elements +## that will be used as the full command-line text issued by each command [i]within[/i] its associated build option key.[br][br] +## They may reference entries in [member default_build_menu_variables] by using brackets: [code][variable key name][/code] @export var default_build_menu_commands: Dictionary -## Generates completed text for a .shader file. -func build_shader_text() -> String: +# Generates completed text for a .shader file. +func _build_shader_text() -> String: var shader_text: String = "" for shader_res in netradiant_custom_shaders: shader_text += (shader_res as NetRadiantCustomShader).texture_path + "\n{\n" @@ -84,8 +79,8 @@ func build_shader_text() -> String: shader_text += "}\n" return shader_text -## Generates completed text for a .gamepack file. -func build_gamepack_text() -> String: +# Generates completed text for a .gamepack file. +func _build_gamepack_text() -> String: var texturetypes_str: String = "" for texture_type in texture_types: texturetypes_str += texture_type @@ -130,7 +125,7 @@ func build_gamepack_text() -> String: soundtypes="%s" maptypes="%s" shaders="quake3" - entityclass="halflife" + entityclass="quake3" entityclasstype="fgd" entities="quake" brushtypes="quake" @@ -166,8 +161,8 @@ func build_gamepack_text() -> String: skip_texture ] -## Exports or updates a folder in the /games directory, with an icon, .cfg, and all accompanying FGDs. -func do_export_file() -> void: +## Exports this game's configuration with an icon, .cfg, and all accompanying FGD files in the [FuncGodotLocalConfig] [b]NetRadiant Custom Gamepacks Folder[/b]. +func export_file() -> void: var game_path: String = FuncGodotLocalConfig.get_setting(FuncGodotLocalConfig.PROPERTY.MAP_EDITOR_GAME_PATH) as String if game_path.is_empty(): printerr("Skipping export: Map Editor Game Path not set in Project Configuration") @@ -213,7 +208,7 @@ func do_export_file() -> void: print("Exporting NetRadiant Custom Gamepack to ", target_file_path) file = FileAccess.open(target_file_path, FileAccess.WRITE) if file != null: - file.store_string(build_gamepack_text()) + file.store_string(_build_gamepack_text()) file.close() else: printerr("Error: Could not modify " + target_file_path) @@ -222,7 +217,7 @@ func do_export_file() -> void: # NOTE: To work properly, this should go in the game path. For now, I'm leaving the export to NRC as well, so it can easily # be repackaged for distribution. However, I believe in the end, it shouldn't exist there. # We'll need to make a decision for this. - Vera - var shader_text: String = build_shader_text() + var shader_text: String = _build_shader_text() # build to /scripts/ target_file_path = gamepacks_folder + "/" + gamepack_name + ".game/scripts/" + gamepack_name + ".shader" diff --git a/addons/func_godot/src/netradiant_custom/netradiant_custom_gamepack_config.gd.uid b/addons/func_godot/src/netradiant_custom/netradiant_custom_gamepack_config.gd.uid index 8c402b99..03a566f6 100644 --- a/addons/func_godot/src/netradiant_custom/netradiant_custom_gamepack_config.gd.uid +++ b/addons/func_godot/src/netradiant_custom/netradiant_custom_gamepack_config.gd.uid @@ -1 +1 @@ -uid://be0clu7ri4h10 +uid://dfhj3me2g5j0l diff --git a/addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd b/addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd index 8a0c3d89..20524da6 100644 --- a/addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd +++ b/addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd @@ -1,9 +1,11 @@ @icon("res://addons/func_godot/icons/icon_godot_ranger.svg") -## Resource that gets built into a shader file that applies a special effect to a specified texture in NetRadiant Custom. class_name NetRadiantCustomShader extends Resource +## Shader resource for NetRadiant Custom configurations. +## +## Resource that gets built into a shader file that applies a special effect to a specified texture in NetRadiant Custom. -## Path to texture without extension, eg: `textures/special/clip`. +## Path to texture without extension, eg: [i]"textures/special/clip"[/i]. @export var texture_path: String ## Array of shader properties to apply to faces using [member texture_path]. diff --git a/addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd.uid b/addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd.uid index 7772405d..eab3bf17 100644 --- a/addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd.uid +++ b/addons/func_godot/src/netradiant_custom/netradiant_custom_shader.gd.uid @@ -1 +1 @@ -uid://phswjcy6dexs +uid://dn86acprv4e86 diff --git a/addons/func_godot/src/trenchbroom/trenchbroom_game_config.gd b/addons/func_godot/src/trenchbroom/trenchbroom_game_config.gd index f90399ee..3d7f0157 100644 --- a/addons/func_godot/src/trenchbroom/trenchbroom_game_config.gd +++ b/addons/func_godot/src/trenchbroom/trenchbroom_game_config.gd @@ -1,10 +1,12 @@ @tool @icon("res://addons/func_godot/icons/icon_godot_ranger.svg") -## Defines a game in TrenchBroom to express a set of entity definitions and editor behaviors. -class_name TrenchBroomGameConfig -extends Resource +class_name TrenchBroomGameConfig extends Resource +## Game configuration definition for TrenchBroom. +## +## Defines a game for TrenchBroom to express a set of entity definitions and editor behaviors. +## +## @tutorial(TrenchBroom Manual Game Configuration Information): https://trenchbroom.github.io/manual/latest/#game_configuration -## Keeps track of each individual version enum GameConfigVersion { Latest, Version4, @@ -12,14 +14,7 @@ enum GameConfigVersion { Version9 } -## Button to export / update this game's configuration and FGD file in the TrenchBroom Games Path. -@export var export_file: bool: - get: - return export_file - set(new_export_file): - if new_export_file != export_file: - if Engine.is_editor_hint(): - do_export_file() +@export_tool_button("Export GameConfig") var _export_file: Callable = export_file ## Name of the game in TrenchBroom's game list. @export var game_name : String = "FuncGodot" @@ -27,7 +22,8 @@ enum GameConfigVersion { ## Icon for TrenchBroom's game list. @export var icon : Texture2D = preload("res://addons/func_godot/icon32.png") -## Available map formats when creating a new map in TrenchBroom. The order of elements in the array is the order TrenchBroom will list the available formats. The `initialmap` key value is optional. +## Available map formats when creating a new map in TrenchBroom. The order of elements in the array is the order TrenchBroom will list the available formats. +## The [i]"initialmap"[/i] key value is optional. @export var map_formats: Array[Dictionary] = [ { "format": "Valve", "initialmap": "initial_valve.map" }, { "format": "Standard", "initialmap": "initial_standard.map" }, @@ -48,19 +44,21 @@ enum GameConfigVersion { @export_category("Entities") -## FGD resource to include with this game. If using multiple FGD resources, this should be the master FGD that contains them in the `base_fgd_files` resource array. +## [FuncGodotFGDFile] resource to include with this game. If using multiple FGD File resources, +## this should be the master FGD File that contains them in [member FuncGodotFGDFile.base_fgd_files]. @export var fgd_file : FuncGodotFGDFile = preload("res://addons/func_godot/fgd/func_godot_fgd.tres") -## Scale expression that modifies the default display scale of entities in TrenchBroom. See the [**TrenchBroom Documentation**](https://trenchbroom.github.io/manual/latest/#game_configuration_files_entities) for more information. +## Scale expression that modifies the default display scale of entities in TrenchBroom. +## See [url="https://trenchbroom.github.io/manual/latest/#game_configuration_files_entities"]TrenchBroom Manual Entity Configuration Information[/url] for more information. @export var entity_scale: String = "32" -## Arrays containing the TrenchBroomTag resource type. +## Arrays containing the [TrenchbroomTag] resource type. @export_category("Tags") -## TrenchBroomTag resources that apply to brush entities. +## [TrenchbroomTag] resources that apply to brush entities. @export var brush_tags : Array[Resource] = [] -## TrenchBroomTag resources that apply to brush faces. +## [TrenchbroomTag] resources that apply to brush faces. @export var brushface_tags : Array[Resource] = [ preload("res://addons/func_godot/game_config/trenchbroom/tb_face_tag_clip.tres"), preload("res://addons/func_godot/game_config/trenchbroom/tb_face_tag_skip.tres"), @@ -77,8 +75,8 @@ enum GameConfigVersion { ## Game configuration format compatible with the version of TrenchBroom being used. @export var game_config_version: GameConfigVersion = GameConfigVersion.Latest -## Matches tag key enum to the String name used in .cfg -static func get_match_key(tag_match_type: int) -> String: +# Matches tag key enum to the [String] name used in .cfg +static func _get_match_key(tag_match_type: int) -> String: match tag_match_type: TrenchBroomTag.TagMatchType.TEXTURE: return "material" @@ -88,8 +86,8 @@ static func get_match_key(tag_match_type: int) -> String: push_error("Tag match type %s is not valid" % [tag_match_type]) return "ERROR" -## Generates completed text for a .cfg file. -func build_class_text() -> String: +# Generates completed text for a .cfg file. +func _build_class_text() -> String: var map_formats_str : String = "" for map_format in map_formats: map_formats_str += "{ \"format\": \"" + map_format.format + "\"" @@ -108,14 +106,14 @@ func build_class_text() -> String: var fgd_filename_str : String = "\"" + fgd_file.fgd_name + ".fgd\"" - var brush_tags_str = parse_tags(brush_tags) - var brushface_tags_str = parse_tags(brushface_tags) - var uv_scale_str = parse_default_uv_scale(default_uv_scale) + var brush_tags_str = _parse_tags(brush_tags) + var brushface_tags_str = _parse_tags(brushface_tags) + var uv_scale_str = _parse_default_uv_scale(default_uv_scale) var config_text : String = "" match game_config_version: GameConfigVersion.Latest, GameConfigVersion.Version8, GameConfigVersion.Version9: - config_text = get_game_config_v9v8_text() % [ + config_text = _get_game_config_v9v8_text() % [ game_name, map_formats_str, textures_root_folder, @@ -129,7 +127,7 @@ func build_class_text() -> String: ] GameConfigVersion.Version4: - config_text = get_game_config_v4_text() % [ + config_text = _get_game_config_v4_text() % [ game_name, map_formats_str, textures_root_folder, @@ -147,8 +145,8 @@ func build_class_text() -> String: return config_text -## Converts brush, FuncGodotFace, and attribute tags into a .cfg-usable String. -func parse_tags(tags: Array) -> String: +# Converts brush, face, and attribute tags into a .cfg-usable String. +func _parse_tags(tags: Array) -> String: var tags_str := "" for brush_tag in tags: if brush_tag.tag_match_type >= TrenchBroomTag.TagMatchType.size(): @@ -161,7 +159,7 @@ func parse_tags(tags: Array) -> String: if brush_tag_attrib != brush_tag.tag_attributes[-1]: attribs_str += ", " tags_str += "\t\t\t\t\"attribs\": [ %s ],\n" % attribs_str - tags_str += "\t\t\t\t\"match\": \"%s\",\n" % get_match_key(brush_tag.tag_match_type) + tags_str += "\t\t\t\t\"match\": \"%s\",\n" % _get_match_key(brush_tag.tag_match_type) tags_str += "\t\t\t\t\"pattern\": \"%s\"" % brush_tag.tag_pattern if brush_tag.texture_name != "": tags_str += ",\n" @@ -174,8 +172,8 @@ func parse_tags(tags: Array) -> String: tags_str = tags_str.replace("material", "texture") return tags_str -## Converts array of flags to .cfg String. -func parse_flags(flags: Array) -> String: +# Converts array of flags to .cfg String. +func _parse_flags(flags: Array) -> String: var flags_str := "" for attrib_flag in flags: flags_str += "{\n" @@ -186,23 +184,23 @@ func parse_flags(flags: Array) -> String: flags_str += "," return flags_str -## Converts default uv scale vector to .cfg String. -func parse_default_uv_scale(texture_scale : Vector2) -> String: +# Converts default uv scale vector to .cfg String. +func _parse_default_uv_scale(texture_scale : Vector2) -> String: var entry_str = "\"scale\": [{x}, {y}]" return entry_str.format({ "x": texture_scale.x, "y": texture_scale.y }) -## Exports or updates a folder in the /games directory, with an icon, .cfg, and all accompanying FGDs. -func do_export_file() -> void: +## Exports this game's configuration with an icon, .cfg, and all accompanying FGD files in the [FuncGodotLocalConfig] [b]Trenchbroom Game Config Folder[/b]. +func export_file() -> void: var config_folder: String = FuncGodotLocalConfig.get_setting(FuncGodotLocalConfig.PROPERTY.TRENCHBROOM_GAME_CONFIG_FOLDER) as String if config_folder.is_empty(): printerr("Skipping export: No TrenchBroom Game folder") return # Make sure FGD file is set - if !fgd_file: + if not fgd_file: printerr("Skipping export: No FGD file") return @@ -226,7 +224,7 @@ func do_export_file() -> void: var target_file_path: String = config_folder + "/GameConfig.cfg" print("Exporting TrenchBroom Game Config to ", target_file_path) var file = FileAccess.open(target_file_path, FileAccess.WRITE) - file.store_string(build_class_text()) + file.store_string(_build_class_text()) file.close() # FGD @@ -235,7 +233,7 @@ func do_export_file() -> void: print("TrenchBroom Game Config export complete\n") #region GameConfigDeclarations -func get_game_config_v4_text() -> String: +func _get_game_config_v4_text() -> String: return """\ { "version": 4, @@ -279,7 +277,7 @@ func get_game_config_v4_text() -> String: } """ -func get_game_config_v9v8_text() -> String: +func _get_game_config_v9v8_text() -> String: var config_text: String = """\ { "version": 9, diff --git a/addons/func_godot/src/trenchbroom/trenchbroom_game_config.gd.uid b/addons/func_godot/src/trenchbroom/trenchbroom_game_config.gd.uid index c91d8267..7ee27541 100644 --- a/addons/func_godot/src/trenchbroom/trenchbroom_game_config.gd.uid +++ b/addons/func_godot/src/trenchbroom/trenchbroom_game_config.gd.uid @@ -1 +1 @@ -uid://cfpnvyygr4pb5 +uid://cx44c4vnq8bt5 diff --git a/addons/func_godot/src/trenchbroom/trenchbroom_tag.gd b/addons/func_godot/src/trenchbroom/trenchbroom_tag.gd index 910df4fb..95882519 100644 --- a/addons/func_godot/src/trenchbroom/trenchbroom_tag.gd +++ b/addons/func_godot/src/trenchbroom/trenchbroom_tag.gd @@ -1,8 +1,12 @@ @icon("res://addons/func_godot/icons/icon_godot_ranger.svg") -## Pattern matching tags to enable a number of features in TrenchBroom, including display appearance and menu filtering options. This resource gets added to the [TrenchBroomGameConfig] resource. Does not affect appearance or functionality in Godot. -## See the TrenchBroom Documentation on [**Tags under the Game Configuration section**](https://trenchbroom.github.io/manual/latest/#game_configuration_files) and [**Special Bruch FuncGodotFace Types**](https://trenchbroom.github.io/manual/latest/#special_brush_face_types) for more information. -class_name TrenchBroomTag -extends Resource +class_name TrenchBroomTag extends Resource +## Pattern matching tag added to [TrenchbroomGameConfig] for appearance and menu filtering purposes. +## +## Pattern matching tags to enable a number of features in TrenchBroom, including display appearance and menu filtering options. +## This resource gets added to the [TrenchBroomGameConfig] resource. Does not affect appearance or functionality in Godot. +## +## @tutorial(TrenchBroom Manual Game Configuration): https://trenchbroom.github.io/manual/latest/#game_configuration_files +## @tutorial(TrenchBroom Manual Special Brush Face Types): https://trenchbroom.github.io/manual/latest/#special_brush_face_types enum TagMatchType { TEXTURE, ## Tag applies to any brush face with a texture matching the texture name. @@ -19,7 +23,7 @@ enum TagMatchType { @export var tag_match_type: TagMatchType ## A string that filters which flag, param, or classname to use. [code]*[/code] can be used as a wildcard to include multiple options. -## [b]Example:[/b] [code]trigger_*[/code] with [constant TagMatchType] [i]Classname[/i] will apply this tag to all brush entities with the [code]trigger_[/code] prefix. +## [b]Example:[/b] [code]trigger*[/code] with [constant TagMatchType] [i]Classname[/i] will apply this tag to all brush entities with the [code]trigger[/code] prefix. @export var tag_pattern: String ## A string that filters which textures recieve these attributes. Only used with a [constant TagMatchType] of [i]Texture[/i]. diff --git a/addons/func_godot/src/trenchbroom/trenchbroom_tag.gd.uid b/addons/func_godot/src/trenchbroom/trenchbroom_tag.gd.uid index 348e3e5b..99715573 100644 --- a/addons/func_godot/src/trenchbroom/trenchbroom_tag.gd.uid +++ b/addons/func_godot/src/trenchbroom/trenchbroom_tag.gd.uid @@ -1 +1 @@ -uid://cvwfhwn3pgig1 +uid://b66qdknwqpfup diff --git a/addons/func_godot/src/util/func_godot_local_config.gd b/addons/func_godot/src/util/func_godot_local_config.gd index 01fe9b96..f4af36d8 100644 --- a/addons/func_godot/src/util/func_godot_local_config.gd +++ b/addons/func_godot/src/util/func_godot_local_config.gd @@ -1,24 +1,32 @@ @tool @icon("res://addons/func_godot/icons/icon_godot_ranger.svg") +class_name FuncGodotLocalConfig extends Resource +## Local machine project wide settings. [color=red]WARNING![/color] Do not create your own! Use the resource in [i]addons/func_godot[/i]. +## ## Local machine project wide settings. Can define global defaults for some FuncGodot properties. -## DO NOT CREATE A NEW RESOURCE! This resource works by saving a configuration file to your game's *user://* folder and pulling the properties from that config file rather than this resource. -## Use the premade `addons/func_godot/func_godot_local_config.tres` instead. -class_name FuncGodotLocalConfig -extends Resource +## [color=red][b]DO NOT CREATE A NEW RESOURCE![/b][/color] This resource works by saving a configuration file to your game's [b][i]user://[/i][/b] folder +## and pulling the properties from that config file rather than this resource. Use the premade [b][i]addons/func_godot/func_godot_local_config.tres[/i][/b] instead. +## [br][br] +## [b]Fgd Output Folder :[/b] Global directory path that [FuncGodotFGDFile] saves to when exported. Overridden when exported from a game configuration resource like [TrenchBroomGameConfig].[br][br] +## [b]Trenchbroom Game Config Folder :[/b] Global directory path where your TrenchBroom game configuration should be saved to. Consult the [url="https://trenchbroom.github.io/manual/latest/#game_configuration_files"]TrenchBroom Manual's Game Configuration documentation[/url] for more information.[br][br] +## [b]Netradiant Custom Gamepacks Folder :[/b] Global directory path where your NetRadiant Custom gamepacks are saved. On Windows this is the [i]gamepacks[/i] folder in your NetRadiant Custom installation.[br][br] +## [b]Map Editor Game Path :[/b] Global directory path to your mapping folder where all of your mapping assets exist. This is usually either your project folder or a subfolder within it.[br][br] +## [b]Game Path Models Folder :[/b] Relative directory path from your Map Editor Game Path to a subfolder containing any display models you might use for your map editor. Currently only used by [FuncGodotFGDModelPointClass].[br][br] +## [b]Default Inverse Scale Factor :[/b] Scale factor that affects how [FuncGodotFGDModelPointClass] entities scale their map editor display models. Not used with TrenchBroom, use [member TrenchBroomGameConfig.entity_scale] expression instead.[br][br] enum PROPERTY { FGD_OUTPUT_FOLDER, TRENCHBROOM_GAME_CONFIG_FOLDER, NETRADIANT_CUSTOM_GAMEPACKS_FOLDER, MAP_EDITOR_GAME_PATH, - GAME_PATH_MODELS_FOLDER, - DEFAULT_INVERSE_SCALE + #GAME_PATH_MODELS_FOLDER, + #DEFAULT_INVERSE_SCALE } -@export_tool_button("Export func_godot settings", "Save") var export_func_godot_settings = _save_settings -@export_tool_button("Reload func_godot settings", "Reload") var reload_func_godot_settings = _load_settings +@export_tool_button("Export func_godot settings", "Save") var _save_settings = export_func_godot_settings +@export_tool_button("Reload func_godot settings", "Reload") var _load_settings = reload_func_godot_settings -const CONFIG_PROPERTIES: Array[Dictionary] = [ +const _CONFIG_PROPERTIES: Array[Dictionary] = [ { "name": "fgd_output_folder", "usage": PROPERTY_USAGE_EDITOR, @@ -47,44 +55,44 @@ const CONFIG_PROPERTIES: Array[Dictionary] = [ "hint": PROPERTY_HINT_GLOBAL_DIR, "func_godot_type": PROPERTY.MAP_EDITOR_GAME_PATH }, - { - "name": "game_path_models_folder", - "usage": PROPERTY_USAGE_EDITOR, - "type": TYPE_STRING, - "func_godot_type": PROPERTY.GAME_PATH_MODELS_FOLDER - }, - { - "name": "default_inverse_scale_factor", - "usage": PROPERTY_USAGE_EDITOR, - "type": TYPE_FLOAT, - "func_godot_type": PROPERTY.DEFAULT_INVERSE_SCALE - } + #{ + #"name": "game_path_models_folder", + #"usage": PROPERTY_USAGE_EDITOR, + #"type": TYPE_STRING, + #"func_godot_type": PROPERTY.GAME_PATH_MODELS_FOLDER + #}, + #{ + #"name": "default_inverse_scale_factor", + #"usage": PROPERTY_USAGE_EDITOR, + #"type": TYPE_FLOAT, + #"func_godot_type": PROPERTY.DEFAULT_INVERSE_SCALE + #} ] -var settings_dict: Dictionary -var loaded := false +var _settings_dict: Dictionary +var _loaded := false +## Retrieve a setting from the local configuration. static func get_setting(name: PROPERTY) -> Variant: - var settings = load("res://addons/func_godot/func_godot_local_config.tres") - if not settings.loaded: - settings._load_settings() - return settings.settings_dict.get(PROPERTY.keys()[name], '') as Variant + var settings: FuncGodotLocalConfig = load("res://addons/func_godot/func_godot_local_config.tres") + settings.reload_func_godot_settings() + return settings._settings_dict.get(PROPERTY.keys()[name], '') as Variant func _get_property_list() -> Array: - return CONFIG_PROPERTIES.duplicate() + return _CONFIG_PROPERTIES.duplicate() func _get(property: StringName) -> Variant: var config = _get_config_property(property) if config == null and not config is Dictionary: return null _try_loading() - return settings_dict.get(PROPERTY.keys()[config['func_godot_type']], _get_default_value(config['type'])) + return _settings_dict.get(PROPERTY.keys()[config['func_godot_type']], _get_default_value(config['type'])) func _set(property: StringName, value: Variant) -> bool: var config = _get_config_property(property) if config == null and not config is Dictionary: return false - settings_dict[PROPERTY.keys()[config['func_godot_type']]] = value + _settings_dict[PROPERTY.keys()[config['func_godot_type']]] = value return true func _get_default_value(type) -> Variant: @@ -101,37 +109,39 @@ func _get_default_value(type) -> Variant: return null func _get_config_property(name: StringName) -> Variant: - for config in CONFIG_PROPERTIES: + for config in _CONFIG_PROPERTIES: if config['name'] == name: return config return null -func _load_settings() -> void: - loaded = true +## Reload this system's configuration settings into the Local Config resource. +func reload_func_godot_settings() -> void: + _loaded = true var path = _get_path() if not FileAccess.file_exists(path): return var settings = FileAccess.get_file_as_string(path) - settings_dict = {} + _settings_dict = {} if not settings or settings.is_empty(): return settings = JSON.parse_string(settings) for key in settings.keys(): - settings_dict[key] = settings[key] + _settings_dict[key] = settings[key] notify_property_list_changed() func _try_loading() -> void: - if not loaded: - _load_settings() + if not _loaded: + reload_func_godot_settings() -func _save_settings(_s = null) -> void: - if settings_dict.size() == 0: +## Export the current resource settings to a configuration file in this game's [i]user://[/i] folder. +func export_func_godot_settings() -> void: + if _settings_dict.size() == 0: return var path = _get_path() var file = FileAccess.open(path, FileAccess.WRITE) - var json = JSON.stringify(settings_dict) + var json = JSON.stringify(_settings_dict) file.store_line(json) - loaded = false + _loaded = false print("Saved settings to ", path) func _get_path() -> String: diff --git a/addons/func_godot/src/util/func_godot_local_config.gd.uid b/addons/func_godot/src/util/func_godot_local_config.gd.uid index c09a2495..d8b979c7 100644 --- a/addons/func_godot/src/util/func_godot_local_config.gd.uid +++ b/addons/func_godot/src/util/func_godot_local_config.gd.uid @@ -1 +1 @@ -uid://csppcqp1pieqe +uid://xsjnhahhyein diff --git a/addons/func_godot/src/util/func_godot_util.gd b/addons/func_godot/src/util/func_godot_util.gd index 7f040a99..be6b5752 100644 --- a/addons/func_godot/src/util/func_godot_util.gd +++ b/addons/func_godot/src/util/func_godot_util.gd @@ -1,40 +1,408 @@ -## General-purpose utility functions namespaced to FuncGodot for compatibility class_name FuncGodotUtil +## Static class with a number of reuseable utility methods that can be called at Editor or Run Time. -## Print debug messages. True to print, false to ignore -const DEBUG : bool = true +const _VERTEX_EPSILON: float = 0.008 -## Const-predicated print function to avoid excess log spam. Print msg if [constant DEBUG] is `true`. -static func debug_print(msg) -> void: - if(DEBUG): - print(msg) +const _VEC3_UP_ID := Vector3(0.0, 0.0, 1.0) +const _VEC3_RIGHT_ID := Vector3(0.0, 1.0, 0.0) +const _VEC3_FORWARD_ID := Vector3(1.0, 0.0, 0.0) -## Return a string that corresponds to the current OS's newline control character(s) +## Connected by the [FuncGodotMap] node to the build process' sub-components if the +## [member FuncGodotMap.build_flags]'s SHOW_PROFILE_INFO flag is set. +static func print_profile_info(message: String, signature: String) -> void: + prints(signature, message) + +## Return a [String] that corresponds to the current [OS]'s newline control characters. static func newline() -> String: if OS.get_name() == "Windows": return "\r\n" else: return "\n" -## Create a dictionary suitable for creating a category with name when overriding [method Object._get_property_list] -static func category_dict(name: String) -> Dictionary: - return property_dict(name, TYPE_STRING, -1, "", PROPERTY_USAGE_CATEGORY) +#region MATH -## Creates a property with name and type from [enum @GlobalScope.Variant.Type]. -## Optionally, provide hint from [enum @GlobalScope.PropertyHint] and corresponding hint_string, and usage from [enum @GlobalScope.PropertyUsageFlags]. -static func property_dict(name: String, type: int, hint: int = -1, hint_string: String = "", usage: int = -1) -> Dictionary: - var dict := { - 'name': name, - 'type': type - } +static func op_vec3_sum(lhs: Vector3, rhs: Vector3) -> Vector3: + return lhs + rhs - if hint != -1: - dict['hint'] = hint +static func op_vec3_avg(array: Array[Vector3]) -> Vector3: + if array.is_empty(): + push_error("Cannot average empty Vector3 array!") + return Vector3() + return array.reduce(op_vec3_sum, Vector3()) / array.size() - if hint_string != "": - dict['hint_string'] = hint_string +## Conversion from id tech coordinate system to Godot, from a top-down perspective. +static func id_to_opengl(vec: Vector3) -> Vector3: + return Vector3(vec.y, vec.z, vec.x) - if usage != -1: - dict['usage'] = usage +## Check if a point is inside a convex hull defined by a series of planes by an epsilon constant. +static func is_point_in_convex_hull(planes: Array[Plane], vertex: Vector3) -> bool: + for plane in planes: + var distance: float = plane.normal.dot(vertex) - plane.d + if distance > _VERTEX_EPSILON: + return false + return true - return dict +#endregion + +#region PATCH DEF + +## Returns the control points that defines a cubic curve for a equivalent input quadratic curve. +static func elevate_quadratic(p0: Vector3, p1: Vector3, p2: Vector3) -> Array[Vector3]: + return [p0, p0 + (2.0/3.0) * (p1 - p0), p2 + (2.0/3.0) * (p1 - p2), p2 ] + +## Create a Curve3D and bake points. +static func create_curve(start: Vector3, control: Vector3, end: Vector3, bake_interval: float = 0.05) -> Curve3D: + var ret := Curve3D.new() + ret.bake_interval = bake_interval + update_ref_curve(ret, start, control, end, bake_interval) + return ret + +## Update a Curve3D given quadratic inputs. +static func update_ref_curve(curve: Curve3D, p0: Vector3, p1: Vector3, p2: Vector3, bake_interval: float = 0.05) -> void: + curve.clear_points() + curve.bake_interval = bake_interval + curve.add_point(p0, (p1 - p0) * (2.0 / 3.0)) + curve.add_point(p1, (p1 - p0) * (1.0 / 3.0), (p2 - p1) * (1.0 / 3.0)) + curve.add_point(p2, (p2 - p1 * (2.0 / 3.0))) + +#endregion + +#region TEXTURES + +## Fallback texture if the one defined in the [QuakeMapFile] cannot be found. +const default_texture_path: String = "res://addons/func_godot/textures/default_texture.png" + +const _pbr_textures: PackedInt32Array = [ + StandardMaterial3D.TEXTURE_ALBEDO, + StandardMaterial3D.TEXTURE_NORMAL, + StandardMaterial3D.TEXTURE_METALLIC, + StandardMaterial3D.TEXTURE_ROUGHNESS, + StandardMaterial3D.TEXTURE_EMISSION, + StandardMaterial3D.TEXTURE_AMBIENT_OCCLUSION, + StandardMaterial3D.TEXTURE_HEIGHTMAP, + ORMMaterial3D.TEXTURE_ORM + ] + +## Searches for a Texture2D within the base texture directory or the WAD files added to map settings. +## If not found, a default texture is returned. +static func load_texture(texture_name: String, wad_resources: Array[QuakeWadFile], map_settings: FuncGodotMapSettings) -> Texture2D: + for texture_file_extension in map_settings.texture_file_extensions: + var texture_path: String = map_settings.base_texture_dir.path_join(texture_name + "." + texture_file_extension) + if ResourceLoader.exists(texture_path): + return load(texture_path) + + var texture_name_lower: String = texture_name.to_lower() + for wad in wad_resources: + if texture_name_lower in wad.textures: + return wad.textures[texture_name_lower] + + return load(default_texture_path) + +## Filters faces textured with Skip during the geometry generation step of the build process. +static func is_skip(texture: String, map_settings: FuncGodotMapSettings) -> bool: + if map_settings: + return texture.to_lower() == map_settings.skip_texture + return false + +## Filters faces textured with Clip during the geometry generation step of the build process. +static func is_clip(texture: String, map_settings: FuncGodotMapSettings) -> bool: + if map_settings: + return texture.to_lower() == map_settings.clip_texture + return false + +## Filters faces textured with Origin during the parsing and geometry generation steps of the build process. +static func is_origin(texture: String, map_settings: FuncGodotMapSettings) -> bool: + if map_settings: + return texture.to_lower() == map_settings.origin_texture + return false + +## Filters faces textured with any of the tool textures during the geometry generation step of the build process. +static func filter_face(texture: String, map_settings: FuncGodotMapSettings) -> bool: + if map_settings: + texture = texture.to_lower() + if (texture == map_settings.skip_texture + or texture == map_settings.clip_texture + or texture == map_settings.origin_texture + ): + return true + return false + +## Adds PBR textures to an existing [BaseMaterial3D]. +static func build_base_material(map_settings: FuncGodotMapSettings, material: BaseMaterial3D, texture: String) -> void: + var path: String = map_settings.base_texture_dir.path_join(texture) + # Check if there is a subfolder with our PBR textures + if DirAccess.open(path.path_join(path)): + path = path.path_join(path) + + var pbr_suffixes: PackedStringArray = [ + map_settings.albedo_map_pattern, + map_settings.normal_map_pattern, + map_settings.metallic_map_pattern, + map_settings.roughness_map_pattern, + map_settings.emission_map_pattern, + map_settings.ao_map_pattern, + map_settings.height_map_pattern, + map_settings.orm_map_pattern, + ] + + for texture_file_extension in map_settings.texture_file_extensions: + for i in pbr_suffixes.size(): + if not pbr_suffixes[i].is_empty(): + var pbr: String = pbr_suffixes[i] % [path, texture_file_extension] + if ResourceLoader.exists(pbr): + material.set_texture(_pbr_textures[i], load(pbr)) + +## Builds both materials and sizes dictionaries for use in the geometry generation step of the build process. +## Both dictionaries use texture names as keys. The materials dictionary uses [Material] as values, +## while the sizes dictionary saves the albedo texture sizes to aid in UV mapping. +static func build_texture_map(entity_data: Array[FuncGodotData.EntityData], map_settings: FuncGodotMapSettings) -> Array[Dictionary]: + var texture_materials: Dictionary[String, Material] = {} + var texture_sizes: Dictionary[String, Vector2] = {} + + # Prepare WAD files + var wad_resources: Array[QuakeWadFile] = [] + for wad in map_settings.texture_wads: + if wad and not wad in wad_resources: + wad_resources.append(wad) + + for entity in entity_data: + if not entity.is_visual(): + continue + + for brush in entity.brushes: + for face in brush.faces: + var texture_name: String = face.texture + + if filter_face(texture_name, map_settings): + continue + if texture_materials.has(texture_name): + continue + + var material_path: String = map_settings.base_material_dir if not map_settings.base_material_dir.is_empty() else map_settings.base_texture_dir + material_path = material_path.path_join(texture_name) + "." + map_settings.material_file_extension + material_path = material_path.replace("*", "") + + if ResourceLoader.exists(material_path): + var material: Material = load(material_path) + texture_materials[texture_name] = material + if material is BaseMaterial3D: + var albedo = material.albedo_texture + if albedo is Texture2D: + texture_sizes[texture_name] = material.albedo_texture.get_size() + elif material is ShaderMaterial: + var albedo = material.get_shader_parameter(map_settings.default_material_albedo_uniform) + if albedo is Texture2D: + texture_sizes[texture_name] = albedo.get_size() + if not texture_sizes.has(texture_name): + var texture: Texture2D = load_texture(texture_name, wad_resources, map_settings) + if texture: + texture_sizes[texture_name] = texture.get_size() + if not texture_sizes.has(texture_name): + texture_sizes[texture_name] = Vector2.ONE * map_settings.inverse_scale_factor + + # Material generation + elif map_settings.default_material: + var material = map_settings.default_material.duplicate(true) + var texture: Texture2D = load_texture(texture_name, wad_resources, map_settings) + texture_sizes[texture_name] = texture.get_size() + + if material is BaseMaterial3D: + material.albedo_texture = texture + build_base_material(map_settings, material, texture_name) + elif material is ShaderMaterial: + material.set_shader_parameter(map_settings.default_material_albedo_uniform, texture) + + if (map_settings.save_generated_materials and material + and texture_name != map_settings.clip_texture + and texture_name != map_settings.skip_texture + and texture_name != map_settings.origin_texture + and texture.resource_path != default_texture_path): + ResourceSaver.save(material, material_path) + + texture_materials[texture_name] = material + else: # No default material exists + printerr("Error: No default material found in map settings") + + return [texture_materials, texture_sizes] + +#endregion + +#region UV MAPPING + +## Returns UV coordinate calculated from the Valve 220 UV format. +static func get_valve_uv(vertex: Vector3, u_axis: Vector3, v_axis: Vector3, uv_basis := Transform2D.IDENTITY, texture_size := Vector2.ONE) -> Vector2: + var uv := Vector2(u_axis.dot(vertex), v_axis.dot(vertex)) + uv += (uv_basis.origin * uv_basis.get_scale()) + uv.x /= uv_basis.x.x + uv.y /= uv_basis.y.y + uv.x /= texture_size.x + uv.y /= texture_size.y + return uv + +## Returns UV coordinate calculated from the original id Standard UV format. +static func get_quake_uv(vertex: Vector3, normal: Vector3, uv_basis := Transform2D.IDENTITY, texture_size := Vector2.ONE) -> Vector2: + var nx := absf(normal.dot(Vector3.RIGHT)) + var ny := absf(normal.dot(Vector3.UP)) + var nz := absf(normal.dot(Vector3.FORWARD)) + var uv: Vector2 + + if ny >= nx and ny >= nz: + uv = Vector2(vertex.x, -vertex.z) + elif nx >= ny and nx >= nz: + uv = Vector2(vertex.y, -vertex.z) + else: + uv = Vector2(vertex.x, vertex.y) + + var uv_out := uv.rotated(uv_basis.get_rotation()) + uv_out /= uv_basis.get_scale() + uv_out += uv_basis.origin + uv_out /= texture_size + return uv_out + +## Determines which UV format is being used and returns the UV coordinate. +static func get_face_vertex_uv(vertex: Vector3, face: FuncGodotData.FaceData, texture_size: Vector2) -> Vector2: + if face.uv_axes.size() >= 2: + return get_valve_uv(vertex, face.uv_axes[0], face.uv_axes[1], face.uv, texture_size) + else: + return get_quake_uv(vertex, face.plane.normal, face.uv, texture_size) + +## Returns the tangent calculated from the Valve 220 UV format. +static func get_valve_tangent(u: Vector3, v: Vector3, normal: Vector3) -> PackedFloat32Array: + var u_axis: Vector3 = u.normalized() + var v_axis: Vector3 = v.normalized() + var v_sign: float = -signf(normal.cross(u_axis).dot(v_axis)) + return [u_axis.x, u_axis.y, u_axis.z, v_sign] + + # NOTE: we may still need to orthonormalize tangents. Just in case, here's a rough outline. + #var tangent: Vector3 = u.normalized() + #tangent = (tangent - normal * normal.dot(tangent)).normalized() + # + ## in the case of parallel U or V axes to planar normal, reconstruct the tangent + #if tangent.length_squared() < 0.01: + # if absf(normal.y) < 0.9: + # tangent = Vector3.UP.cross(normal) + # else: + # tangent = Vector3.RIGHT.cross(normal) + # + #tangent = tangent.normalized() + #return [tangent.x, tangent.y, tangent.z, -signf(normal.cross(tangent).dot(v.normalized))] + +## Returns the tangent calculated from the original id Standard UV format. +static func get_quake_tangent(normal: Vector3, uv_y_scale: float, uv_rotation: float) -> PackedFloat32Array: + var dx := normal.dot(_VEC3_RIGHT_ID) + var dy := normal.dot(_VEC3_UP_ID) + var dz := normal.dot(_VEC3_FORWARD_ID) + var dxa := absf(dx) + var dya := absf(dy) + var dza := absf(dz) + var u_axis: Vector3 + var v_sign: float = 0.0 + + if dya >= dxa and dya >= dza: + u_axis = _VEC3_FORWARD_ID + v_sign = signf(dy) + elif dxa >= dya and dxa >= dza: + u_axis = _VEC3_FORWARD_ID + v_sign = -signf(dx) + elif dza >= dya and dza >= dxa: + u_axis = _VEC3_RIGHT_ID + v_sign = signf(dz) + + v_sign *= signf(uv_y_scale) + u_axis = u_axis.rotated(normal, deg_to_rad(-uv_rotation) * v_sign) + return [u_axis.x, u_axis.y, u_axis.z, v_sign] + +static func get_face_tangent(face: FuncGodotData.FaceData) -> PackedFloat32Array: + if face.uv_axes.size() >= 2: + return get_valve_tangent(face.uv_axes[0], face.uv_axes[1], face.plane.normal) + else: + return get_quake_tangent(face.plane.normal, face.uv.get_scale().y, face.uv.get_rotation()) + +#endregion + +#region MESH + +static func smooth_mesh_by_angle(mesh: ArrayMesh, angle_deg: float = 89.0) -> Mesh: + if not mesh: + push_error("Need a source mesh to smooth") + return + + var angle: float = deg_to_rad(clampf(angle_deg, 0.0, 360.0)) + + var mesh_vertices: Array[Vector3] = [] + var mesh_normals: Array[Vector3] = [] + var surface_data: Array[Dictionary] = [] + var mdt: MeshDataTool + var st := SurfaceTool.new() + + # Collect surface information + for surface_index in mesh.get_surface_count(): + mdt = MeshDataTool.new() + + if mdt.create_from_surface(mesh, surface_index) != OK: + continue + + var info: Dictionary = { + "mdt": mdt, + "ofs": mesh_vertices.size(), + "mat": mesh.surface_get_material(surface_index) + } + + surface_data.append(info) + + for i in mdt.get_vertex_count(): + mesh_vertices.append(mdt.get_vertex(i)) + mesh_normals.append(mdt.get_vertex_normal(i)) + + var groups: Dictionary = {} + + # Group vertices by position + for i in mesh_vertices.size(): + var pos := mesh_vertices[i] + + # this is likely already snapped from the map building process + var key := pos.snappedf(_VERTEX_EPSILON) + + if not groups.has(key): + groups[key] = [i] + else: + groups[key].append(i) + + # Collect normals. Likely optimizable. + for group in groups.values(): + for i in group: + var this := mesh_normals[i] + var normal_out := Vector3() + for j in group: + var other := mesh_normals[j] + if this.angle_to(other) <= angle: + normal_out += other + + mesh_normals[i] = normal_out.normalized() + + var smoothed_mesh := ArrayMesh.new() + + # Construct smoothed output mesh + for dict in surface_data: + mdt = dict["mdt"] + var offset: int = dict["ofs"] + for i in mdt.get_vertex_count(): + mdt.set_vertex_normal(i, mesh_normals[offset + i]) + + st = SurfaceTool.new() + st.begin(Mesh.PRIMITIVE_TRIANGLES) + st.set_material(dict["mat"]) + + for i in mdt.get_face_count(): + for j in 3: + var index := mdt.get_face_vertex(i, j) + st.set_normal(mdt.get_vertex_normal(index)) + st.set_uv(mdt.get_vertex_uv(index)) + st.set_tangent(mdt.get_vertex_tangent(index)) + st.add_vertex(mdt.get_vertex(index)) + + smoothed_mesh = st.commit(smoothed_mesh) + + return smoothed_mesh + +#endregion diff --git a/addons/func_godot/src/util/func_godot_util.gd.uid b/addons/func_godot/src/util/func_godot_util.gd.uid index 54a3bbe1..21f14f2c 100644 --- a/addons/func_godot/src/util/func_godot_util.gd.uid +++ b/addons/func_godot/src/util/func_godot_util.gd.uid @@ -1 +1 @@ -uid://bm0rqimmm2870 +uid://bursmx2g1betd diff --git a/project.godot b/project.godot index f1e830a4..8c018c58 100644 --- a/project.godot +++ b/project.godot @@ -169,6 +169,12 @@ movie_writer/movie_file="D:/Maddo/Recordings/Capture.avi" enabled=PackedStringArray("res://addons/cyclops_level_builder/plugin.cfg", "res://addons/dialogic/plugin.cfg", "res://addons/func_godot/plugin.cfg", "res://addons/godot_test_scene/plugin.cfg", "res://addons/resources_spreadsheet_view/plugin.cfg", "res://addons/scene_palette/plugin.cfg", "res://addons/smoothing/plugin.cfg", "res://addons/tattomoosa.vision_cone_3d/plugin.cfg") +[func_godot] + +default_map_settings="uid://cx41lsryg5wpm" +default_inverse_scale_factor=1.0 +model_point_class_save_path="3D/MapModels" + [global_group] Interactable=""