commit 6119faf53e14859f1be86b6950ac98dbff13cd21 Author: WangXiang Date: Mon Dec 22 18:57:51 2025 +0800 init diff --git a/Assets/.DS_Store b/Assets/.DS_Store new file mode 100644 index 0000000..95a8f3d Binary files /dev/null and b/Assets/.DS_Store differ diff --git a/Assets/0aeb04e31653a3c455ab80cebf3fe1ff.png b/Assets/0aeb04e31653a3c455ab80cebf3fe1ff.png new file mode 100644 index 0000000..e0df2e9 Binary files /dev/null and b/Assets/0aeb04e31653a3c455ab80cebf3fe1ff.png differ diff --git a/Assets/0aeb04e31653a3c455ab80cebf3fe1ff.png.import b/Assets/0aeb04e31653a3c455ab80cebf3fe1ff.png.import new file mode 100644 index 0000000..b3449be --- /dev/null +++ b/Assets/0aeb04e31653a3c455ab80cebf3fe1ff.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ldq7fy0ltnk7" +path="res://.godot/imported/0aeb04e31653a3c455ab80cebf3fe1ff.png-6dd793983fa4905bdbe43e584ba21566.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/0aeb04e31653a3c455ab80cebf3fe1ff.png" +dest_files=["res://.godot/imported/0aeb04e31653a3c455ab80cebf3fe1ff.png-6dd793983fa4905bdbe43e584ba21566.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 diff --git a/Assets/Chair.png b/Assets/Chair.png new file mode 100644 index 0000000..a792534 Binary files /dev/null and b/Assets/Chair.png differ diff --git a/Assets/Chair.png.import b/Assets/Chair.png.import new file mode 100644 index 0000000..7a1e32d --- /dev/null +++ b/Assets/Chair.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bc4tdlwnbsda" +path="res://.godot/imported/Chair.png-a3324e93fde875252a84b0ff664304f6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Chair.png" +dest_files=["res://.godot/imported/Chair.png-a3324e93fde875252a84b0ff664304f6.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 diff --git a/Assets/Community-removebg-preview.png b/Assets/Community-removebg-preview.png new file mode 100644 index 0000000..b6574f7 Binary files /dev/null and b/Assets/Community-removebg-preview.png differ diff --git a/Assets/Community-removebg-preview.png.import b/Assets/Community-removebg-preview.png.import new file mode 100644 index 0000000..e40452d --- /dev/null +++ b/Assets/Community-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cmm2m5d6p4ast" +path="res://.godot/imported/Community-removebg-preview.png-fab71b2f152999e81d0bc190409635f8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Community-removebg-preview.png" +dest_files=["res://.godot/imported/Community-removebg-preview.png-fab71b2f152999e81d0bc190409635f8.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 diff --git a/Assets/Community-removebg.png b/Assets/Community-removebg.png new file mode 100644 index 0000000..74ecc7d Binary files /dev/null and b/Assets/Community-removebg.png differ diff --git a/Assets/Community-removebg.png.import b/Assets/Community-removebg.png.import new file mode 100644 index 0000000..610688a --- /dev/null +++ b/Assets/Community-removebg.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://186ho65s4e58" +path="res://.godot/imported/Community-removebg.png-77034267786673232e4d7978e9bb1f32.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Community-removebg.png" +dest_files=["res://.godot/imported/Community-removebg.png-77034267786673232e4d7978e9bb1f32.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 diff --git a/Assets/Guardrail-removebg-preview.png b/Assets/Guardrail-removebg-preview.png new file mode 100644 index 0000000..9efe9e2 Binary files /dev/null and b/Assets/Guardrail-removebg-preview.png differ diff --git a/Assets/Guardrail-removebg-preview.png.import b/Assets/Guardrail-removebg-preview.png.import new file mode 100644 index 0000000..f5731d5 --- /dev/null +++ b/Assets/Guardrail-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bt6neu564owvb" +path="res://.godot/imported/Guardrail-removebg-preview.png-1f146f05c070b57eb2f591df6f4ac91b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Guardrail-removebg-preview.png" +dest_files=["res://.godot/imported/Guardrail-removebg-preview.png-1f146f05c070b57eb2f591df6f4ac91b.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 diff --git a/Assets/Guardrail2.png b/Assets/Guardrail2.png new file mode 100644 index 0000000..7294cef Binary files /dev/null and b/Assets/Guardrail2.png differ diff --git a/Assets/Guardrail2.png.import b/Assets/Guardrail2.png.import new file mode 100644 index 0000000..c0332c9 --- /dev/null +++ b/Assets/Guardrail2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dy8agg3qhvgi" +path="res://.godot/imported/Guardrail2.png-63d796246770cade4dbdf4ff6c86d9fd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Guardrail2.png" +dest_files=["res://.godot/imported/Guardrail2.png-63d796246770cade4dbdf4ff6c86d9fd.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 diff --git a/Assets/MayorWhale.png b/Assets/MayorWhale.png new file mode 100644 index 0000000..ef2b526 Binary files /dev/null and b/Assets/MayorWhale.png differ diff --git a/Assets/MayorWhale.png.import b/Assets/MayorWhale.png.import new file mode 100644 index 0000000..04141ba --- /dev/null +++ b/Assets/MayorWhale.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bk3hu8sfdnvam" +path="res://.godot/imported/MayorWhale.png-27f05eb822e81aeb6cd567ccb1cfabf4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/MayorWhale.png" +dest_files=["res://.godot/imported/MayorWhale.png-27f05eb822e81aeb6cd567ccb1cfabf4.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 diff --git a/Assets/NoticeBoard.png b/Assets/NoticeBoard.png new file mode 100644 index 0000000..52c97d0 Binary files /dev/null and b/Assets/NoticeBoard.png differ diff --git a/Assets/NoticeBoard.png.import b/Assets/NoticeBoard.png.import new file mode 100644 index 0000000..82f488c --- /dev/null +++ b/Assets/NoticeBoard.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b8tdi262yw4yt" +path="res://.godot/imported/NoticeBoard.png-d0d125e4014e99c540a4d01058e1faa7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/NoticeBoard.png" +dest_files=["res://.godot/imported/NoticeBoard.png-d0d125e4014e99c540a4d01058e1faa7.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 diff --git a/Assets/NoticeDialogMockup.png b/Assets/NoticeDialogMockup.png new file mode 100644 index 0000000..eb91bfc Binary files /dev/null and b/Assets/NoticeDialogMockup.png differ diff --git a/Assets/NoticeDialogMockup.png.import b/Assets/NoticeDialogMockup.png.import new file mode 100644 index 0000000..60687ee --- /dev/null +++ b/Assets/NoticeDialogMockup.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://uisbdox3puk5" +path="res://.godot/imported/NoticeDialogMockup.png-eb9ed16ca3d75d6fafa3d1d6a04a6972.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/NoticeDialogMockup.png" +dest_files=["res://.godot/imported/NoticeDialogMockup.png-eb9ed16ca3d75d6fafa3d1d6a04a6972.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 diff --git a/Assets/NoticeDialogMockup_v2.png b/Assets/NoticeDialogMockup_v2.png new file mode 100644 index 0000000..5358440 Binary files /dev/null and b/Assets/NoticeDialogMockup_v2.png differ diff --git a/Assets/NoticeDialogMockup_v2.png.import b/Assets/NoticeDialogMockup_v2.png.import new file mode 100644 index 0000000..e502d35 --- /dev/null +++ b/Assets/NoticeDialogMockup_v2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dmkm7wikl51fb" +path="res://.godot/imported/NoticeDialogMockup_v2.png-69c4f8d29ef37ed0eef0728c4301cf82.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/NoticeDialogMockup_v2.png" +dest_files=["res://.godot/imported/NoticeDialogMockup_v2.png-69c4f8d29ef37ed0eef0728c4301cf82.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 diff --git a/Assets/Street-removebg-preview.png b/Assets/Street-removebg-preview.png new file mode 100644 index 0000000..37df11f Binary files /dev/null and b/Assets/Street-removebg-preview.png differ diff --git a/Assets/Street-removebg-preview.png.import b/Assets/Street-removebg-preview.png.import new file mode 100644 index 0000000..737e49c --- /dev/null +++ b/Assets/Street-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://fhdompt8twxf" +path="res://.godot/imported/Street-removebg-preview.png-df1ec947511786e973f836053d829a3a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Street-removebg-preview.png" +dest_files=["res://.godot/imported/Street-removebg-preview.png-df1ec947511786e973f836053d829a3a.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 diff --git a/Assets/Tiles/gen_tiles.py b/Assets/Tiles/gen_tiles.py new file mode 100644 index 0000000..9d7f336 --- /dev/null +++ b/Assets/Tiles/gen_tiles.py @@ -0,0 +1,28 @@ +import zlib +import struct + +def make_png(width, height, data): + def chunk(tag, data): + return struct.pack('>I', len(data)) + tag + data + struct.pack('>I', zlib.crc32(tag + data)) + + # IHDR + ihdr = struct.pack('>IIBBBBB', width, height, 8, 6, 0, 0, 0) + + # IDAT + # RGBA format. width * height * 4 + # Scanlines need to be prepended with filter type 0 + raw_data = b'' + for y in range(height): + raw_data += b'\x00' # Filter type 0 + for x in range(width): + if x < 16: # Left side: Green (Grass) + raw_data += b'\x4b\x69\x2f\xff' # #4b692f + else: # Right side: Gray (Wall) + raw_data += b'\x8b\x9b\xb4\xff' # #8b9bb4 + + idat = zlib.compress(raw_data) + + return b'\x89PNG\r\n\x1a\n' + chunk(b'IHDR', ihdr) + chunk(b'IDAT', idat) + chunk(b'IEND', b'') + +with open('/Users/wangx/Documents/playground/whale_town/Assets/Tiles/placeholder_tiles.png', 'wb') as f: + f.write(make_png(32, 16, None)) diff --git a/Assets/TownTileset.jpg b/Assets/TownTileset.jpg new file mode 100644 index 0000000..9a9bb4b Binary files /dev/null and b/Assets/TownTileset.jpg differ diff --git a/Assets/TownTileset.jpg.import b/Assets/TownTileset.jpg.import new file mode 100644 index 0000000..5a0f4c8 --- /dev/null +++ b/Assets/TownTileset.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dmwvob1agd3tm" +path="res://.godot/imported/TownTileset.jpg-7b662a7e32aeb62a06c37392fb7e7e72.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/TownTileset.jpg" +dest_files=["res://.godot/imported/TownTileset.jpg-7b662a7e32aeb62a06c37392fb7e7e72.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 diff --git a/Assets/TownTileset_Resized.jpg b/Assets/TownTileset_Resized.jpg new file mode 100644 index 0000000..5fabace Binary files /dev/null and b/Assets/TownTileset_Resized.jpg differ diff --git a/Assets/TownTileset_Resized.jpg.import b/Assets/TownTileset_Resized.jpg.import new file mode 100644 index 0000000..3ba4405 --- /dev/null +++ b/Assets/TownTileset_Resized.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d3uqjvc5867ac" +path="res://.godot/imported/TownTileset_Resized.jpg-c9c60e10c01f2dcb9602a31dad0ba9e3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/TownTileset_Resized.jpg" +dest_files=["res://.godot/imported/TownTileset_Resized.jpg-c9c60e10c01f2dcb9602a31dad0ba9e3.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 diff --git a/Assets/Tree1-removebg-preview.png b/Assets/Tree1-removebg-preview.png new file mode 100644 index 0000000..fba030f Binary files /dev/null and b/Assets/Tree1-removebg-preview.png differ diff --git a/Assets/Tree1-removebg-preview.png.import b/Assets/Tree1-removebg-preview.png.import new file mode 100644 index 0000000..01e2dda --- /dev/null +++ b/Assets/Tree1-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dh0l3pkmig4df" +path="res://.godot/imported/Tree1-removebg-preview.png-3be04ccc03d5fb1c3133074265089e7b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Tree1-removebg-preview.png" +dest_files=["res://.godot/imported/Tree1-removebg-preview.png-3be04ccc03d5fb1c3133074265089e7b.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 diff --git a/Assets/Water-removebg-preview.png b/Assets/Water-removebg-preview.png new file mode 100644 index 0000000..0a68410 Binary files /dev/null and b/Assets/Water-removebg-preview.png differ diff --git a/Assets/Water-removebg-preview.png.import b/Assets/Water-removebg-preview.png.import new file mode 100644 index 0000000..7bdd578 --- /dev/null +++ b/Assets/Water-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cnopacf8vag4r" +path="res://.godot/imported/Water-removebg-preview.png-6dc50552e15e92a50b87a0a26a969481.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Water-removebg-preview.png" +dest_files=["res://.godot/imported/Water-removebg-preview.png-6dc50552e15e92a50b87a0a26a969481.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 diff --git a/Assets/WelcomeBoard.png b/Assets/WelcomeBoard.png new file mode 100644 index 0000000..2649d86 Binary files /dev/null and b/Assets/WelcomeBoard.png differ diff --git a/Assets/WelcomeBoard.png.import b/Assets/WelcomeBoard.png.import new file mode 100644 index 0000000..ad62104 --- /dev/null +++ b/Assets/WelcomeBoard.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://covb5kps1qf6w" +path="res://.godot/imported/WelcomeBoard.png-5d9fdcc17b992e612a4621dd9346c358.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/WelcomeBoard.png" +dest_files=["res://.godot/imported/WelcomeBoard.png-5d9fdcc17b992e612a4621dd9346c358.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 diff --git a/Assets/WhalePlayer.png b/Assets/WhalePlayer.png new file mode 100644 index 0000000..d477543 Binary files /dev/null and b/Assets/WhalePlayer.png differ diff --git a/Assets/WhalePlayer.png.import b/Assets/WhalePlayer.png.import new file mode 100644 index 0000000..f4f3b10 --- /dev/null +++ b/Assets/WhalePlayer.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cdi4mj5buwmyb" +path="res://.godot/imported/WhalePlayer.png-1eca483fb4a59e3d653cc9f53df88011.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/WhalePlayer.png" +dest_files=["res://.godot/imported/WhalePlayer.png-1eca483fb4a59e3d653cc9f53df88011.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 diff --git a/Assets/background2.png b/Assets/background2.png new file mode 100644 index 0000000..5d79a49 Binary files /dev/null and b/Assets/background2.png differ diff --git a/Assets/background2.png.import b/Assets/background2.png.import new file mode 100644 index 0000000..144495f --- /dev/null +++ b/Assets/background2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cbnpp740q2cyc" +path="res://.godot/imported/background2.png-0c64148e2ec8dbd8008de104fda799ee.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/background2.png" +dest_files=["res://.godot/imported/background2.png-0c64148e2ec8dbd8008de104fda799ee.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 diff --git a/Assets/chair-removebg-preview.png b/Assets/chair-removebg-preview.png new file mode 100644 index 0000000..f48cb61 Binary files /dev/null and b/Assets/chair-removebg-preview.png differ diff --git a/Assets/chair-removebg-preview.png.import b/Assets/chair-removebg-preview.png.import new file mode 100644 index 0000000..424d47c --- /dev/null +++ b/Assets/chair-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://kqophwll2h3m" +path="res://.godot/imported/chair-removebg-preview.png-d5d8e9a1955f17066bedfb5292d25ee5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/chair-removebg-preview.png" +dest_files=["res://.godot/imported/chair-removebg-preview.png-d5d8e9a1955f17066bedfb5292d25ee5.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 diff --git a/Assets/cherry_tree-removebg-preview.png b/Assets/cherry_tree-removebg-preview.png new file mode 100644 index 0000000..02aa49c Binary files /dev/null and b/Assets/cherry_tree-removebg-preview.png differ diff --git a/Assets/cherry_tree-removebg-preview.png.import b/Assets/cherry_tree-removebg-preview.png.import new file mode 100644 index 0000000..d1c7cbe --- /dev/null +++ b/Assets/cherry_tree-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bohsl6wkjpagl" +path="res://.godot/imported/cherry_tree-removebg-preview.png-9d82e7dea3d9546d37d3407e4991dc31.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/cherry_tree-removebg-preview.png" +dest_files=["res://.godot/imported/cherry_tree-removebg-preview.png-9d82e7dea3d9546d37d3407e4991dc31.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 diff --git a/Assets/cherry_tree2-removebg-preview.png b/Assets/cherry_tree2-removebg-preview.png new file mode 100644 index 0000000..911d1e8 Binary files /dev/null and b/Assets/cherry_tree2-removebg-preview.png differ diff --git a/Assets/cherry_tree2-removebg-preview.png.import b/Assets/cherry_tree2-removebg-preview.png.import new file mode 100644 index 0000000..a66fe13 --- /dev/null +++ b/Assets/cherry_tree2-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://4vxhfbqfc50p" +path="res://.godot/imported/cherry_tree2-removebg-preview.png-90cd549e611fa7b9157c05ed31985016.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/cherry_tree2-removebg-preview.png" +dest_files=["res://.godot/imported/cherry_tree2-removebg-preview.png-90cd549e611fa7b9157c05ed31985016.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 diff --git a/Assets/flower2-removebg-preview.png b/Assets/flower2-removebg-preview.png new file mode 100644 index 0000000..e0c081f Binary files /dev/null and b/Assets/flower2-removebg-preview.png differ diff --git a/Assets/flower2-removebg-preview.png.import b/Assets/flower2-removebg-preview.png.import new file mode 100644 index 0000000..bdbe09d --- /dev/null +++ b/Assets/flower2-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://iljslogyjklf" +path="res://.godot/imported/flower2-removebg-preview.png-6a72623fd1c8f578a7bdf6e9fad82e5c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/flower2-removebg-preview.png" +dest_files=["res://.godot/imported/flower2-removebg-preview.png-6a72623fd1c8f578a7bdf6e9fad82e5c.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 diff --git a/Assets/fountain-removebg-preview.png b/Assets/fountain-removebg-preview.png new file mode 100644 index 0000000..356f9d9 Binary files /dev/null and b/Assets/fountain-removebg-preview.png differ diff --git a/Assets/fountain-removebg-preview.png.import b/Assets/fountain-removebg-preview.png.import new file mode 100644 index 0000000..c8263a0 --- /dev/null +++ b/Assets/fountain-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cub3evefqhdft" +path="res://.godot/imported/fountain-removebg-preview.png-d1ca71c242a1c2786bc9b8914438e4a9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/fountain-removebg-preview.png" +dest_files=["res://.godot/imported/fountain-removebg-preview.png-d1ca71c242a1c2786bc9b8914438e4a9.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 diff --git a/Assets/grass-removebg-preview.png b/Assets/grass-removebg-preview.png new file mode 100644 index 0000000..478322a Binary files /dev/null and b/Assets/grass-removebg-preview.png differ diff --git a/Assets/grass-removebg-preview.png.import b/Assets/grass-removebg-preview.png.import new file mode 100644 index 0000000..3265443 --- /dev/null +++ b/Assets/grass-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dpdh2yq8g3uud" +path="res://.godot/imported/grass-removebg-preview.png-e69bed9fce0d5d64f1a4bf715b36f9a0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/grass-removebg-preview.png" +dest_files=["res://.godot/imported/grass-removebg-preview.png-e69bed9fce0d5d64f1a4bf715b36f9a0.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 diff --git a/Assets/ground-removebg-preview.png b/Assets/ground-removebg-preview.png new file mode 100644 index 0000000..763beb9 Binary files /dev/null and b/Assets/ground-removebg-preview.png differ diff --git a/Assets/ground-removebg-preview.png.import b/Assets/ground-removebg-preview.png.import new file mode 100644 index 0000000..18adef3 --- /dev/null +++ b/Assets/ground-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://i7hqg6n27mgl" +path="res://.godot/imported/ground-removebg-preview.png-804783b86cf349ba52ac62dea63ec84e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/ground-removebg-preview.png" +dest_files=["res://.godot/imported/ground-removebg-preview.png-804783b86cf349ba52ac62dea63ec84e.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 diff --git a/Assets/ground-removebg.png b/Assets/ground-removebg.png new file mode 100644 index 0000000..42f64cd Binary files /dev/null and b/Assets/ground-removebg.png differ diff --git a/Assets/ground-removebg.png.import b/Assets/ground-removebg.png.import new file mode 100644 index 0000000..0c7ad51 --- /dev/null +++ b/Assets/ground-removebg.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c068icmmaq37g" +path="res://.godot/imported/ground-removebg.png-859111c21437c76eca8f343fe2bdb358.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/ground-removebg.png" +dest_files=["res://.godot/imported/ground-removebg.png-859111c21437c76eca8f343fe2bdb358.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 diff --git a/Assets/ground2-removebg-preview.png b/Assets/ground2-removebg-preview.png new file mode 100644 index 0000000..af43bba Binary files /dev/null and b/Assets/ground2-removebg-preview.png differ diff --git a/Assets/ground2-removebg-preview.png.import b/Assets/ground2-removebg-preview.png.import new file mode 100644 index 0000000..1f37c95 --- /dev/null +++ b/Assets/ground2-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://suc4kwbul7m3" +path="res://.godot/imported/ground2-removebg-preview.png-f1b5d6310a3fe9fa77b537600406239e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/ground2-removebg-preview.png" +dest_files=["res://.godot/imported/ground2-removebg-preview.png-f1b5d6310a3fe9fa77b537600406239e.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 diff --git a/Assets/ground2.png b/Assets/ground2.png new file mode 100644 index 0000000..768c8c7 Binary files /dev/null and b/Assets/ground2.png differ diff --git a/Assets/ground2.png.import b/Assets/ground2.png.import new file mode 100644 index 0000000..27fd867 --- /dev/null +++ b/Assets/ground2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://f18cq3inc0iw" +path="res://.godot/imported/ground2.png-9291ccf9e55c40a673fa61070e2b0bfb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/ground2.png" +dest_files=["res://.godot/imported/ground2.png-9291ccf9e55c40a673fa61070e2b0bfb.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 diff --git a/Assets/haystack-2-removebg-preview.png b/Assets/haystack-2-removebg-preview.png new file mode 100644 index 0000000..10ef8e9 Binary files /dev/null and b/Assets/haystack-2-removebg-preview.png differ diff --git a/Assets/haystack-2-removebg-preview.png.import b/Assets/haystack-2-removebg-preview.png.import new file mode 100644 index 0000000..300003f --- /dev/null +++ b/Assets/haystack-2-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcqu3celd87gg" +path="res://.godot/imported/haystack-2-removebg-preview.png-68210123510255afa29301fe52506358.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/haystack-2-removebg-preview.png" +dest_files=["res://.godot/imported/haystack-2-removebg-preview.png-68210123510255afa29301fe52506358.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 diff --git a/Assets/haystack-removebg-preview.png b/Assets/haystack-removebg-preview.png new file mode 100644 index 0000000..ff8958a Binary files /dev/null and b/Assets/haystack-removebg-preview.png differ diff --git a/Assets/haystack-removebg-preview.png.import b/Assets/haystack-removebg-preview.png.import new file mode 100644 index 0000000..3b06f72 --- /dev/null +++ b/Assets/haystack-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mpiu4pi3pyc7" +path="res://.godot/imported/haystack-removebg-preview.png-16b148207ceb41be6272f99d13d1961e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/haystack-removebg-preview.png" +dest_files=["res://.godot/imported/haystack-removebg-preview.png-16b148207ceb41be6272f99d13d1961e.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 diff --git a/Assets/house-removebg-preview.png b/Assets/house-removebg-preview.png new file mode 100644 index 0000000..d8bc231 Binary files /dev/null and b/Assets/house-removebg-preview.png differ diff --git a/Assets/house-removebg-preview.png.import b/Assets/house-removebg-preview.png.import new file mode 100644 index 0000000..274065f --- /dev/null +++ b/Assets/house-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cxqrtowm4s6qo" +path="res://.godot/imported/house-removebg-preview.png-0f2361fb0fbeb290c1af4522bf3a4624.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/house-removebg-preview.png" +dest_files=["res://.godot/imported/house-removebg-preview.png-0f2361fb0fbeb290c1af4522bf3a4624.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 diff --git a/Assets/notice_board-removebg-preview.png b/Assets/notice_board-removebg-preview.png new file mode 100644 index 0000000..524f8ef Binary files /dev/null and b/Assets/notice_board-removebg-preview.png differ diff --git a/Assets/notice_board-removebg-preview.png.import b/Assets/notice_board-removebg-preview.png.import new file mode 100644 index 0000000..72bb7f3 --- /dev/null +++ b/Assets/notice_board-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://iebcac7qhipl" +path="res://.godot/imported/notice_board-removebg-preview.png-38b3c041256f5e522ad194d9e84458f2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/notice_board-removebg-preview.png" +dest_files=["res://.godot/imported/notice_board-removebg-preview.png-38b3c041256f5e522ad194d9e84458f2.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 diff --git a/Assets/pier-removebg-preview.png b/Assets/pier-removebg-preview.png new file mode 100644 index 0000000..52a4c35 Binary files /dev/null and b/Assets/pier-removebg-preview.png differ diff --git a/Assets/pier-removebg-preview.png.import b/Assets/pier-removebg-preview.png.import new file mode 100644 index 0000000..342279b --- /dev/null +++ b/Assets/pier-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cm0gs50gj3c78" +path="res://.godot/imported/pier-removebg-preview.png-ba2bc5ef3cd6794f6a808a46eeee9883.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/pier-removebg-preview.png" +dest_files=["res://.godot/imported/pier-removebg-preview.png-ba2bc5ef3cd6794f6a808a46eeee9883.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 diff --git a/Assets/pquan-removebg-preview.png b/Assets/pquan-removebg-preview.png new file mode 100644 index 0000000..35f7178 Binary files /dev/null and b/Assets/pquan-removebg-preview.png differ diff --git a/Assets/pquan-removebg-preview.png.import b/Assets/pquan-removebg-preview.png.import new file mode 100644 index 0000000..fc77772 --- /dev/null +++ b/Assets/pquan-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ntifvu263tbw" +path="res://.godot/imported/pquan-removebg-preview.png-345ec94b09d991bbbf014056a01bf27d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/pquan-removebg-preview.png" +dest_files=["res://.godot/imported/pquan-removebg-preview.png-345ec94b09d991bbbf014056a01bf27d.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 diff --git a/Assets/red_flower.png b/Assets/red_flower.png new file mode 100644 index 0000000..ec78c9c Binary files /dev/null and b/Assets/red_flower.png differ diff --git a/Assets/red_flower.png.import b/Assets/red_flower.png.import new file mode 100644 index 0000000..17d7449 --- /dev/null +++ b/Assets/red_flower.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d3fys4xjoaxii" +path="res://.godot/imported/red_flower.png-f517e2b5ee8ff89caf7496102fc16072.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/red_flower.png" +dest_files=["res://.godot/imported/red_flower.png-f517e2b5ee8ff89caf7496102fc16072.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 diff --git a/Assets/room_static_template.png b/Assets/room_static_template.png new file mode 100644 index 0000000..b9159bf Binary files /dev/null and b/Assets/room_static_template.png differ diff --git a/Assets/room_static_template.png.import b/Assets/room_static_template.png.import new file mode 100644 index 0000000..81fadb0 --- /dev/null +++ b/Assets/room_static_template.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8rtv7hrwggre" +path="res://.godot/imported/room_static_template.png-4a249e010790c9cc80f9699fce1a0408.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/room_static_template.png" +dest_files=["res://.godot/imported/room_static_template.png-4a249e010790c9cc80f9699fce1a0408.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 diff --git a/Assets/seaside.png b/Assets/seaside.png new file mode 100644 index 0000000..adbf66b Binary files /dev/null and b/Assets/seaside.png differ diff --git a/Assets/seaside.png.import b/Assets/seaside.png.import new file mode 100644 index 0000000..75dadf0 --- /dev/null +++ b/Assets/seaside.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cuffn58xg6ful" +path="res://.godot/imported/seaside.png-2c60a020174382ffed124ae01a237526.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/seaside.png" +dest_files=["res://.godot/imported/seaside.png-2c60a020174382ffed124ae01a237526.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 diff --git a/Assets/seaside1.png b/Assets/seaside1.png new file mode 100644 index 0000000..2364ef8 Binary files /dev/null and b/Assets/seaside1.png differ diff --git a/Assets/seaside1.png.import b/Assets/seaside1.png.import new file mode 100644 index 0000000..5133480 --- /dev/null +++ b/Assets/seaside1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dg3f16h33r8j8" +path="res://.godot/imported/seaside1.png-8db45338428e77e5dfabb76451ab2d47.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/seaside1.png" +dest_files=["res://.godot/imported/seaside1.png-8db45338428e77e5dfabb76451ab2d47.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 diff --git a/Assets/seaside3-removebg-preview.png b/Assets/seaside3-removebg-preview.png new file mode 100644 index 0000000..92fe239 Binary files /dev/null and b/Assets/seaside3-removebg-preview.png differ diff --git a/Assets/seaside3-removebg-preview.png.import b/Assets/seaside3-removebg-preview.png.import new file mode 100644 index 0000000..9042e96 --- /dev/null +++ b/Assets/seaside3-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bl5cxh65d1oyr" +path="res://.godot/imported/seaside3-removebg-preview.png-1cd7534e6fe09d8b34593b06fe4f2b9e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/seaside3-removebg-preview.png" +dest_files=["res://.godot/imported/seaside3-removebg-preview.png-1cd7534e6fe09d8b34593b06fe4f2b9e.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 diff --git a/Assets/seaside4-removebg-preview.png b/Assets/seaside4-removebg-preview.png new file mode 100644 index 0000000..4c844d8 Binary files /dev/null and b/Assets/seaside4-removebg-preview.png differ diff --git a/Assets/seaside4-removebg-preview.png.import b/Assets/seaside4-removebg-preview.png.import new file mode 100644 index 0000000..e9e3ac8 --- /dev/null +++ b/Assets/seaside4-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cwvbu4xsa7sq5" +path="res://.godot/imported/seaside4-removebg-preview.png-ddc935e19902b09b6ab545dd52d09d18.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/seaside4-removebg-preview.png" +dest_files=["res://.godot/imported/seaside4-removebg-preview.png-ddc935e19902b09b6ab545dd52d09d18.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 diff --git a/Assets/tileset1-removebg-preview.png b/Assets/tileset1-removebg-preview.png new file mode 100644 index 0000000..ec412ff Binary files /dev/null and b/Assets/tileset1-removebg-preview.png differ diff --git a/Assets/tileset1-removebg-preview.png.import b/Assets/tileset1-removebg-preview.png.import new file mode 100644 index 0000000..87631fb --- /dev/null +++ b/Assets/tileset1-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1svxy86artm8" +path="res://.godot/imported/tileset1-removebg-preview.png-08292406f160c2f7e5028f990edacab0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/tileset1-removebg-preview.png" +dest_files=["res://.godot/imported/tileset1-removebg-preview.png-08292406f160c2f7e5028f990edacab0.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 diff --git a/Assets/tree2-removebg-preview.png b/Assets/tree2-removebg-preview.png new file mode 100644 index 0000000..eef4c3b Binary files /dev/null and b/Assets/tree2-removebg-preview.png differ diff --git a/Assets/tree2-removebg-preview.png.import b/Assets/tree2-removebg-preview.png.import new file mode 100644 index 0000000..3bef429 --- /dev/null +++ b/Assets/tree2-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bg242sq4wogha" +path="res://.godot/imported/tree2-removebg-preview.png-1f5ec54e93f8ee11b418181a6254a341.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/tree2-removebg-preview.png" +dest_files=["res://.godot/imported/tree2-removebg-preview.png-1f5ec54e93f8ee11b418181a6254a341.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 diff --git a/Assets/tx-removebg-preview.png b/Assets/tx-removebg-preview.png new file mode 100644 index 0000000..568e922 Binary files /dev/null and b/Assets/tx-removebg-preview.png differ diff --git a/Assets/tx-removebg-preview.png.import b/Assets/tx-removebg-preview.png.import new file mode 100644 index 0000000..0ab5900 --- /dev/null +++ b/Assets/tx-removebg-preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cpxh1i4anleoc" +path="res://.godot/imported/tx-removebg-preview.png-df8d1196c9b00a8c8312a4b8ae02d141.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/tx-removebg-preview.png" +dest_files=["res://.godot/imported/tx-removebg-preview.png-df8d1196c9b00a8c8312a4b8ae02d141.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 diff --git a/README.md b/README.md new file mode 100644 index 0000000..d46a18c --- /dev/null +++ b/README.md @@ -0,0 +1,120 @@ +# 口袋广场 (PokePlaza) - 项目使用指南 + +这是一个基于 **Godot 4.5 + Node.js** 的复古像素风格多人在线聊天室(Pixel Art Cozy MMO)。 + +--- + +## 🏗️ 项目架构 + +``` +whale_town/ +├── server/ # Node.js 后端服务器 +│ ├── index.js # WebSocket 游戏服务器 (默认端口: 8910) +│ └── package.json # npm 依赖 +├── Scenes/ # Godot 场景文件 +├── Scripts/ # Godot 脚本 +└── project.godot # Godot 项目配置 +``` + +--- + +## 🚀 快速开始 + +### 0. 环境准备 (Prerequisites) + +在开始之前,请确保已安装以下软件: + +1. **Node.js**: v18 或更高版本 + * 检查命令: `node -v` + * [下载 Node.js](https://nodejs.org/) +2. **Godot Engine**: 4.5 或更高版本 + * [下载 Godot](https://godotengine.org/) + +### 1. 启动游戏服务器 (Server) + +服务器负责处理多玩家同步。 + +```bash +# 1. 进入服务器目录 +cd server + +# 2. 安装依赖 (仅首次运行需要) +npm install + +# 3. 启动服务器 +node index.js +``` + +**成功标志**: +终端输出: `PokePlaza Server listening on ws://localhost:8910` + +### 2. 启动游戏客户端 (Client) + +1. 启动 **Godot Engine**。 +2. 导入本项目 (`project.godot`)。 +3. 点击右上角的 **运行 (Run)** 按钮 (快捷键 `F5`)。 +4. **登录界面**: + * 输入你的名字 (例如: "Ash")。 + * 点击 **Start** 按钮。 + * *默认会自动连接到本地服务器 `ws://127.0.0.1:8910`*。 + +### 3. 多人联机测试 + +要在本地测试多人功能: + +1. 运行一个客户端实例,登录并在地图上移动。 +2. 在 Godot 编辑器中,再次点击运行,或使用 **Debug -> Run Multiple Instances** 启动第二个窗口。 +3. 用不同的名字登录。 +4. 现在你应该能看到两个角色在同一个世界中互动! + +--- + +## ⚙️ 配置说明 (Configuration) + +### 修改服务器端口 +如果你需要修改 WebSocket 服务器端口 (默认 `8910`): + +1. 打开 `server/index.js`。 +2. 找到第 3 行: `const PORT = 8910;`。 +3. 修改为你想要的端口号。 +4. 重启服务器生效。 + +### 修改客户端连接地址 +如果你将服务器部署在局域网或其他机器上: + +1. 打开 Godot 脚本 `Scripts/StartMenu.gd`。 +2. 找到代码中的 `SERVER_URL` 常量 (通常在顶部): + ```gdscript + const SERVER_URL = "ws://127.0.0.1:8910" + ``` +3. 将其修改为你的服务器 IP 地址,例如 `ws://192.168.1.5:8910`。 + +--- + +## 🎮 操作说明 + +| 动作 | 按键 | +|------|------| +| **移动** | `W`, `A`, `S`, `D` 或 方向键 | +| **聊天** | 点击左下角输入框 -> 输入消息 -> `Enter` 发送 | +| **互动** | 靠近物体/椅子 (如果有互动提示) | + +--- + +## ⚠️ 常见问题 (Troubleshooting) + +**Q: 客户端显示 "Connection failed"?** +* 检查服务器终端是否正在运行 (`node index.js`)。 +* 检查端口是否被防火墙拦截 (默认 `8910`)。 +* 确认 `StartMenu.gd` 中的地址是否正确。 + +**Q: 无法看到其他玩家?** +* 确保所有玩家都连接到了**同一个**服务器 IP。 +* 如果在局域网测试,请使用具体的局域网 IP (如 `192.168.x.x`) 而不是 `127.0.0.1`,并确保防火墙允许通信。 + +**Q: 报错 `Script Error`?** +* 请检查 Godot 控制台底部的 Debug 信息,确保脚本语法兼容 Godot 4.5+。 + +--- + +*Powered by Godot 4.5 + Node.js* diff --git a/Scenes/Chair.tscn b/Scenes/Chair.tscn new file mode 100644 index 0000000..93128a6 --- /dev/null +++ b/Scenes/Chair.tscn @@ -0,0 +1,33 @@ +[gd_scene load_steps=5 format=3 uid="uid://b2x8q6y301w4"] + +[ext_resource type="Script" path="res://Scripts/Chair.gd" id="1_script"] +[ext_resource type="Texture2D" uid="uid://upload_chair_img" path="res://Assets/Chair.png" id="2_sprite"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_phys"] +size = Vector2(30, 10) + +[sub_resource type="CircleShape2D" id="CircleShape2D_detect"] +radius = 40.0 + +[node name="Chair" type="StaticBody2D"] +collision_layer = 4 +collision_mask = 1 +script = ExtResource("1_script") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("2_sprite") +offset = Vector2(0, -10) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, -5) +shape = SubResource("RectangleShape2D_phys") + +[node name="InteractionArea" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="InteractionArea"] +shape = SubResource("CircleShape2D_detect") + +[node name="SitMarker" type="Marker2D" parent="."] +position = Vector2(0, -15) diff --git a/Scenes/NPCMayor.tscn b/Scenes/NPCMayor.tscn new file mode 100644 index 0000000..7964cb0 --- /dev/null +++ b/Scenes/NPCMayor.tscn @@ -0,0 +1,50 @@ +[gd_scene load_steps=6 format=3 uid="uid://b8q7x5y201w3"] + +[ext_resource type="Script" uid="uid://5tvkhbf0237e" path="res://Scripts/NPCMayor.gd" id="1_script"] +[ext_resource type="Texture2D" uid="uid://bk3hu8sfdnvam" path="res://Assets/MayorWhale.png" id="2_sprite"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_mayor"] +size = Vector2(50, 50) + +[sub_resource type="Animation" id="Animation_idle"] +resource_name = "idle" +length = 0.8 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 1] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_mayor"] +_data = { +&"idle": SubResource("Animation_idle") +} + +[node name="NPCMayor" type="CharacterBody2D"] +position = Vector2(1, 0) +collision_layer = 3 +collision_mask = 3 +script = ExtResource("1_script") + +[node name="Sprite2D" type="Sprite2D" parent="."] +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_sprite") +hframes = 3 +vframes = 4 +frame = 1 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_mayor") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_mayor") +} diff --git a/Scenes/NoticeBoard.tscn b/Scenes/NoticeBoard.tscn new file mode 100644 index 0000000..5f40c19 --- /dev/null +++ b/Scenes/NoticeBoard.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=4 format=3 uid="uid://rdmrm7j4iokr"] + +[ext_resource type="Script" path="res://Scripts/NoticeBoard.gd" id="1_script"] +[ext_resource type="Texture2D" path="res://Assets/NoticeBoard.png" id="2_sprite"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_nb"] +size = Vector2(48, 20) + +[node name="NoticeBoard" type="StaticBody2D"] +script = ExtResource("1_script") + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(0, -16) +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_sprite") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, -5) +shape = SubResource("RectangleShape2D_nb") diff --git a/Scenes/Player.tscn b/Scenes/Player.tscn new file mode 100644 index 0000000..5a37bdd --- /dev/null +++ b/Scenes/Player.tscn @@ -0,0 +1,48 @@ +[gd_scene load_steps=4 format=3 uid="uid://6gpuqttnllfc"] + +[ext_resource type="Script" uid="uid://c2oq8ax5dl7s2" path="res://Scripts/Player.gd" id="1_script"] +[ext_resource type="Texture2D" uid="uid://cdi4mj5buwmyb" path="res://Assets/WhalePlayer.png" id="2_whale"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_kyqiw"] + + + +[node name="Player" type="CharacterBody2D"] +z_index = 1 +collision_layer = 2 +script = ExtResource("1_script") + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(0, -1) +scale = Vector2(0.266, 0.278) +texture = ExtResource("2_whale") +offset = Vector2(7, 0) +hframes = 3 +vframes = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, 8) +shape = SubResource("RectangleShape2D_kyqiw") + +[node name="RayCast2D" type="RayCast2D" parent="."] +target_position = Vector2(0, 24) +collide_with_areas = true + +[node name="NameLabel" type="Label" parent="."] +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -60.0 +offset_top = -50.0 +offset_right = 60.0 +offset_bottom = -25.0 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 12 +text = "Player" +horizontal_alignment = 1 +vertical_alignment = 1 + diff --git a/Scenes/Room.tscn b/Scenes/Room.tscn new file mode 100644 index 0000000..eb36f60 --- /dev/null +++ b/Scenes/Room.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=4 format=4 uid="uid://bo3mfq580dnj7"] + +[ext_resource type="Script" uid="uid://dbq68ofn2ldxm" path="res://Scripts/Room.gd" id="1_script"] +[ext_resource type="TileSet" uid="uid://rfrf460mk86m" path="res://Scenes/TownTileset.tres" id="2_tileset"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_exit"] +size = Vector2(112, 132) + +[node name="Room" type="Node2D"] +script = ExtResource("1_script") + +[node name="TileMapLayer" type="TileMapLayer" parent="."] +position = Vector2(64, 80) +tile_map_data = PackedByteArray("AADx//b/BgAAAAEAAADx//f/BgAAAAIAAADx//j/BgAAAAMAAADx//n/BgAAAAQAAADx//r/BgAAAAUAAADx//v/BgAAAAYAAADx//z/BgAAAAcAAADx//3/BgAAAAgAAADx//7/BgAAAAkAAADx////BgAAAAoAAADx/wAABgAAAAsAAADx/wEABgAAAAwAAADx/wIABgAAAA0AAADx/wMABgAAAA4AAADx/wQABgAAAA8AAADy//b/BgABAAEAAADy//f/BgABAAIAAADy//j/BgABAAMAAADy//n/BgABAAQAAADy//r/BgABAAUAAADy//v/BgABAAYAAADy//z/BgABAAcAAADy//3/BgABAAgAAADy//7/BgABAAkAAADy////BgABAAoAAADy/wAABgABAAsAAADy/wEABgABAAwAAADy/wIABgABAA0AAADy/wMABgABAA4AAADy/wQABgABAA8AAADz//b/BgACAAEAAADz//f/BgACAAIAAADz//j/BgACAAMAAADz//n/BgACAAQAAADz//r/BgACAAUAAADz//v/BgACAAYAAADz//z/BgACAAcAAADz//3/BgACAAgAAADz//7/BgACAAkAAADz////BgACAAoAAADz/wAABgACAAsAAADz/wEABgACAAwAAADz/wIABgACAA0AAADz/wMABgACAA4AAADz/wQABgACAA8AAAD0//b/BgADAAEAAAD0//f/BgADAAIAAAD0//j/BgADAAMAAAD0//n/BgADAAQAAAD0//r/BgADAAUAAAD0//v/BgADAAYAAAD0//z/BgADAAcAAAD0//3/BgADAAgAAAD0//7/BgADAAkAAAD0////BgADAAoAAAD0/wAABgADAAsAAAD0/wEABgADAAwAAAD0/wIABgADAA0AAAD0/wMABgADAA4AAAD0/wQABgADAA8AAAD1//b/BgAEAAEAAAD1//f/BgAEAAIAAAD1//j/BgAEAAMAAAD1//n/BgAEAAQAAAD1//r/BgAEAAUAAAD1//v/BgAEAAYAAAD1//z/BgAEAAcAAAD1//3/BgAEAAgAAAD1//7/BgAEAAkAAAD1////BgAEAAoAAAD1/wAABgAEAAsAAAD1/wEABgAEAAwAAAD1/wIABgAEAA0AAAD1/wMABgAEAA4AAAD1/wQABgAEAA8AAAD2//b/BgAFAAEAAAD2//f/BgAFAAIAAAD2//j/BgAFAAMAAAD2//n/BgAFAAQAAAD2//r/BgAFAAUAAAD2//v/BgAFAAYAAAD2//z/BgAFAAcAAAD2//3/BgAFAAgAAAD2//7/BgAFAAkAAAD2////BgAFAAoAAAD2/wAABgAFAAsAAAD2/wEABgAFAAwAAAD2/wIABgAFAA0AAAD2/wMABgAFAA4AAAD2/wQABgAFAA8AAAD3//b/BgAGAAEAAAD3//f/BgAGAAIAAAD3//j/BgAGAAMAAAD3//n/BgAGAAQAAAD3//r/BgAGAAUAAAD3//v/BgAGAAYAAAD3//z/BgAGAAcAAAD3//3/BgAGAAgAAAD3//7/BgAGAAkAAAD3////BgAGAAoAAAD3/wAABgAGAAsAAAD3/wEABgAGAAwAAAD3/wIABgAGAA0AAAD3/wMABgAGAA4AAAD3/wQABgAGAA8AAAD4//b/BgAHAAEAAAD4//f/BgAHAAIAAAD4//j/BgAHAAMAAAD4//n/BgAHAAQAAAD4//r/BgAHAAUAAAD4//v/BgAHAAYAAAD4//z/BgAHAAcAAAD4//3/BgAHAAgAAAD4//7/BgAHAAkAAAD4////BgAHAAoAAAD4/wAABgAHAAsAAAD4/wEABgAHAAwAAAD4/wIABgAHAA0AAAD4/wMABgAHAA4AAAD4/wQABgAHAA8AAAD5//b/BgAIAAEAAAD5//f/BgAIAAIAAAD5//j/BgAIAAMAAAD5//n/BgAIAAQAAAD5//r/BgAIAAUAAAD5//v/BgAIAAYAAAD5//z/BgAIAAcAAAD5//3/BgAIAAgAAAD5//7/BgAIAAkAAAD5////BgAIAAoAAAD5/wAABgAIAAsAAAD5/wEABgAIAAwAAAD5/wIABgAIAA0AAAD5/wMABgAIAA4AAAD5/wQABgAIAA8AAAD6//b/BgAJAAEAAAD6//f/BgAJAAIAAAD6//j/BgAJAAMAAAD6//n/BgAJAAQAAAD6//r/BgAJAAUAAAD6//v/BgAJAAYAAAD6//z/BgAJAAcAAAD6//3/BgAJAAgAAAD6//7/BgAJAAkAAAD6////BgAJAAoAAAD6/wAABgAJAAsAAAD6/wEABgAJAAwAAAD6/wIABgAJAA0AAAD6/wMABgAJAA4AAAD6/wQABgAJAA8AAAD7//b/BgAKAAEAAAD7//f/BgAKAAIAAAD7//j/BgAKAAMAAAD7//n/BgAKAAQAAAD7//r/BgAKAAUAAAD7//v/BgAKAAYAAAD7//z/BgAKAAcAAAD7//3/BgAKAAgAAAD7//7/BgAKAAkAAAD7////BgAKAAoAAAD7/wAABgAKAAsAAAD7/wEABgAKAAwAAAD7/wIABgAKAA0AAAD7/wMABgAKAA4AAAD7/wQABgAKAA8AAAD8//b/BgALAAEAAAD8//f/BgALAAIAAAD8//j/BgALAAMAAAD8//n/BgALAAQAAAD8//r/BgALAAUAAAD8//v/BgALAAYAAAD8//z/BgALAAcAAAD8//3/BgALAAgAAAD8//7/BgALAAkAAAD8////BgALAAoAAAD8/wAABgALAAsAAAD8/wEABgALAAwAAAD8/wIABgALAA0AAAD8/wMABgALAA4AAAD8/wQABgALAA8AAAD9//b/BgAMAAEAAAD9//f/BgAMAAIAAAD9//j/BgAMAAMAAAD9//n/BgAMAAQAAAD9//r/BgAMAAUAAAD9//v/BgAMAAYAAAD9//z/BgAMAAcAAAD9//3/BgAMAAgAAAD9//7/BgAMAAkAAAD9////BgAMAAoAAAD9/wAABgAMAAsAAAD9/wEABgAMAAwAAAD9/wIABgAMAA0AAAD9/wMABgAMAA4AAAD9/wQABgAMAA8AAAD+//b/BgANAAEAAAD+//f/BgANAAIAAAD+//j/BgANAAMAAAD+//n/BgANAAQAAAD+//r/BgANAAUAAAD+//v/BgANAAYAAAD+//z/BgANAAcAAAD+//3/BgANAAgAAAD+//7/BgANAAkAAAD+////BgANAAoAAAD+/wAABgANAAsAAAD+/wEABgANAAwAAAD+/wIABgANAA0AAAD+/wMABgANAA4AAAD+/wQABgANAA8AAAD///b/BgAOAAEAAAD///f/BgAOAAIAAAD///j/BgAOAAMAAAD///n/BgAOAAQAAAD///r/BgAOAAUAAAD///v/BgAOAAYAAAD///z/BgAOAAcAAAD///3/BgAOAAgAAAD///7/BgAOAAkAAAD/////BgAOAAoAAAD//wAABgAOAAsAAAD//wEABgAOAAwAAAD//wIABgAOAA0AAAD//wMABgAOAA4AAAD//wQABgAOAA8AAAAAAPb/BgAPAAEAAAAAAPf/BgAPAAIAAAAAAPj/BgAPAAMAAAAAAPn/BgAPAAQAAAAAAPr/BgAPAAUAAAAAAPv/BgAPAAYAAAAAAPz/BgAPAAcAAAAAAP3/BgAPAAgAAAAAAP7/BgAPAAkAAAAAAP//BgAPAAoAAAAAAAAABgAPAAsAAAAAAAEABgAPAAwAAAAAAAIABgAPAA0AAAAAAAMABgAPAA4AAAAAAAQABgAPAA8AAAABAPb/BgAQAAEAAAABAPf/BgAQAAIAAAABAPj/BgAQAAMAAAABAPn/BgAQAAQAAAABAPr/BgAQAAUAAAABAPv/BgAQAAYAAAABAPz/BgAQAAcAAAABAP3/BgAQAAgAAAABAP7/BgAQAAkAAAABAP//BgAQAAoAAAABAAAABgAQAAsAAAABAAEABgAQAAwAAAABAAIABgAQAA0AAAABAAMABgAQAA4AAAABAAQABgAQAA8AAAACAPb/BgARAAEAAAACAPf/BgARAAIAAAACAPj/BgARAAMAAAACAPn/BgARAAQAAAACAPr/BgARAAUAAAACAPv/BgARAAYAAAACAPz/BgARAAcAAAACAP3/BgARAAgAAAACAP7/BgARAAkAAAACAP//BgARAAoAAAACAAAABgARAAsAAAACAAEABgARAAwAAAACAAIABgARAA0AAAACAAMABgARAA4AAAACAAQABgARAA8AAAADAPb/BgASAAEAAAADAPf/BgASAAIAAAADAPj/BgASAAMAAAADAPn/BgASAAQAAAADAPr/BgASAAUAAAADAPv/BgASAAYAAAADAPz/BgASAAcAAAADAP3/BgASAAgAAAADAP7/BgASAAkAAAADAP//BgASAAoAAAADAAAABgASAAsAAAADAAEABgASAAwAAAADAAIABgASAA0AAAADAAMABgASAA4AAAADAAQABgASAA8AAAAEAPb/BgATAAEAAAAEAPf/BgATAAIAAAAEAPj/BgATAAMAAAAEAPn/BgATAAQAAAAEAPr/BgATAAUAAAAEAPv/BgATAAYAAAAEAPz/BgATAAcAAAAEAP3/BgATAAgAAAAEAP7/BgATAAkAAAAEAP//BgATAAoAAAAEAAAABgATAAsAAAAEAAEABgATAAwAAAAEAAIABgATAA0AAAAEAAMABgATAA4AAAAEAAQABgATAA8AAAAFAPb/BgAUAAEAAAAFAPf/BgAUAAIAAAAFAPj/BgAUAAMAAAAFAPn/BgAUAAQAAAAFAPr/BgAUAAUAAAAFAPv/BgAUAAYAAAAFAPz/BgAUAAcAAAAFAP3/BgAUAAgAAAAFAP7/BgAUAAkAAAAFAP//BgAUAAoAAAAFAAAABgAUAAsAAAAFAAEABgAUAAwAAAAFAAIABgAUAA0AAAAFAAMABgAUAA4AAAAFAAQABgAUAA8AAAAGAPb/BgAVAAEAAAAGAPf/BgAVAAIAAAAGAPj/BgAVAAMAAAAGAPn/BgAVAAQAAAAGAPr/BgAVAAUAAAAGAPv/BgAVAAYAAAAGAPz/BgAVAAcAAAAGAP3/BgAVAAgAAAAGAP7/BgAVAAkAAAAGAP//BgAVAAoAAAAGAAAABgAVAAsAAAAGAAEABgAVAAwAAAAGAAIABgAVAA0AAAAGAAMABgAVAA4AAAAGAAQABgAVAA8AAAAHAPb/BgAWAAEAAAAHAPf/BgAWAAIAAAAHAPj/BgAWAAMAAAAHAPn/BgAWAAQAAAAHAPr/BgAWAAUAAAAHAPv/BgAWAAYAAAAHAPz/BgAWAAcAAAAHAP3/BgAWAAgAAAAHAP7/BgAWAAkAAAAHAP//BgAWAAoAAAAHAAAABgAWAAsAAAAHAAEABgAWAAwAAAAHAAIABgAWAA0AAAAHAAMABgAWAA4AAAAHAAQABgAWAA8AAAAIAPb/BgAXAAEAAAAIAPf/BgAXAAIAAAAIAPj/BgAXAAMAAAAIAPn/BgAXAAQAAAAIAPr/BgAXAAUAAAAIAPv/BgAXAAYAAAAIAPz/BgAXAAcAAAAIAP3/BgAXAAgAAAAIAP7/BgAXAAkAAAAIAP//BgAXAAoAAAAIAAAABgAXAAsAAAAIAAEABgAXAAwAAAAIAAIABgAXAA0AAAAIAAMABgAXAA4AAAAIAAQABgAXAA8AAAAJAPb/BgAYAAEAAAAJAPf/BgAYAAIAAAAJAPj/BgAYAAMAAAAJAPn/BgAYAAQAAAAJAPr/BgAYAAUAAAAJAPv/BgAYAAYAAAAJAPz/BgAYAAcAAAAJAP3/BgAYAAgAAAAJAP7/BgAYAAkAAAAJAP//BgAYAAoAAAAJAAAABgAYAAsAAAAJAAEABgAYAAwAAAAJAAIABgAYAA0AAAAJAAMABgAYAA4AAAAJAAQABgAYAA8AAAAKAPb/BgAZAAEAAAAKAPf/BgAZAAIAAAAKAPj/BgAZAAMAAAAKAPn/BgAZAAQAAAAKAPr/BgAZAAUAAAAKAPv/BgAZAAYAAAAKAPz/BgAZAAcAAAAKAP3/BgAZAAgAAAAKAP7/BgAZAAkAAAAKAP//BgAZAAoAAAAKAAAABgAZAAsAAAAKAAEABgAZAAwAAAAKAAIABgAZAA0AAAAKAAMABgAZAA4AAAAKAAQABgAZAA8AAAALAPb/BgAaAAEAAAALAPf/BgAaAAIAAAALAPj/BgAaAAMAAAALAPn/BgAaAAQAAAALAPr/BgAaAAUAAAALAPv/BgAaAAYAAAALAPz/BgAaAAcAAAALAP3/BgAaAAgAAAALAP7/BgAaAAkAAAALAP//BgAaAAoAAAALAAAABgAaAAsAAAALAAEABgAaAAwAAAALAAIABgAaAA0AAAALAAMABgAaAA4AAAALAAQABgAaAA8AAAAMAPb/BgAbAAEAAAAMAPf/BgAbAAIAAAAMAPj/BgAbAAMAAAAMAPn/BgAbAAQAAAAMAPr/BgAbAAUAAAAMAPv/BgAbAAYAAAAMAPz/BgAbAAcAAAAMAP3/BgAbAAgAAAAMAP7/BgAbAAkAAAAMAP//BgAbAAoAAAAMAAAABgAbAAsAAAAMAAEABgAbAAwAAAAMAAIABgAbAA0AAAAMAAMABgAbAA4AAAAMAAQABgAbAA8AAAANAPb/BgAcAAEAAAANAPf/BgAcAAIAAAANAPj/BgAcAAMAAAANAPn/BgAcAAQAAAANAPr/BgAcAAUAAAANAPv/BgAcAAYAAAANAPz/BgAcAAcAAAANAP3/BgAcAAgAAAANAP7/BgAcAAkAAAANAP//BgAcAAoAAAANAAAABgAcAAsAAAANAAEABgAcAAwAAAANAAIABgAcAA0AAAANAAMABgAcAA4AAAANAAQABgAcAA8AAAAOAPb/BgAdAAEAAAAOAPf/BgAdAAIAAAAOAPj/BgAdAAMAAAAOAPn/BgAdAAQAAAAOAPr/BgAdAAUAAAAOAPv/BgAdAAYAAAAOAPz/BgAdAAcAAAAOAP3/BgAdAAgAAAAOAP7/BgAdAAkAAAAOAP//BgAdAAoAAAAOAAAABgAdAAsAAAAOAAEABgAdAAwAAAAOAAIABgAdAA0AAAAOAAMABgAdAA4AAAAOAAQABgAdAA8AAAAPAPb/BgAeAAEAAAAPAPf/BgAeAAIAAAAPAPj/BgAeAAMAAAAPAPn/BgAeAAQAAAAPAPr/BgAeAAUAAAAPAPv/BgAeAAYAAAAPAPz/BgAeAAcAAAAPAP3/BgAeAAgAAAAPAP7/BgAeAAkAAAAPAP//BgAeAAoAAAAPAAAABgAeAAsAAAAPAAEABgAeAAwAAAAPAAIABgAeAA0AAAAPAAMABgAeAA4AAAAPAAQABgAeAA8AAAD+/wUABgANABAAAAD+/wYABgANABEAAAD//wUABgAOABAAAAD//wYABgAOABEAAAAAAAUABgAPABAAAAAAAAYABgAPABEAAAABAAUABgAQABAAAAABAAYABgAQABEAAAACAAUABgARABAAAAACAAYABgARABEAAAA=") +tile_set = ExtResource("2_tileset") + +[node name="PlayersContainer" type="Node2D" parent="."] +y_sort_enabled = true +position = Vector2(128, 40) + +[node name="ExitArea" type="Area2D" parent="."] +position = Vector2(0, 64) +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="ExitArea"] +position = Vector2(88, 170) +shape = SubResource("RectangleShape2D_exit") + +[connection signal="body_entered" from="ExitArea" to="." method="_on_exit_body_entered"] diff --git a/Scenes/RoomTileset.tres b/Scenes/RoomTileset.tres new file mode 100644 index 0000000..15fe074 --- /dev/null +++ b/Scenes/RoomTileset.tres @@ -0,0 +1,590 @@ +[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://eokkuj4lhid2"] + +[ext_resource type="Texture2D" uid="uid://suc4kwbul7m3" path="res://Assets/ground2-removebg-preview.png" id="2_3kd4h"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_26wvp"] +texture = ExtResource("2_3kd4h") +texture_region_size = Vector2i(32, 32) +4:0/0 = 0 +5:0/0 = 0 +5:1/0 = 0 +6:2/0 = 0 +7:2/0 = 0 +7:3/0 = 0 +6:3/0 = 0 +5:3/0 = 0 +4:4/0 = 0 +4:4/0/terrain_set = 0 +4:4/0/terrain = 0 +4:4/0/terrains_peering_bit/right_side = 0 +4:4/0/terrains_peering_bit/bottom_right_corner = 0 +4:4/0/terrains_peering_bit/bottom_side = 0 +4:4/0/terrains_peering_bit/bottom_left_corner = 0 +4:4/0/terrains_peering_bit/left_side = 0 +4:4/0/terrains_peering_bit/top_left_corner = 0 +4:4/0/terrains_peering_bit/top_side = 0 +4:4/0/terrains_peering_bit/top_right_corner = 0 +3:4/0 = 0 +2:4/0 = 0 +1:3/0 = 0 +0:3/0 = 0 +0:2/0 = 0 +0:1/0 = 0 +1:1/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +6:0/0 = 0 +7:0/0 = 0 +8:0/0 = 0 +8:1/0 = 0 +9:1/0 = 0 +9:2/0 = 0 +9:3/0 = 0 +8:3/0 = 0 +8:4/0 = 0 +8:4/0/terrain_set = 0 +8:4/0/terrain = 0 +8:4/0/terrains_peering_bit/right_side = 0 +8:4/0/terrains_peering_bit/bottom_right_corner = 0 +8:4/0/terrains_peering_bit/bottom_side = 0 +8:4/0/terrains_peering_bit/bottom_left_corner = 0 +8:4/0/terrains_peering_bit/left_side = 0 +8:4/0/terrains_peering_bit/top_left_corner = 0 +8:4/0/terrains_peering_bit/top_side = 0 +8:4/0/terrains_peering_bit/top_right_corner = 0 +7:4/0 = 0 +7:4/0/terrain_set = 0 +7:4/0/terrain = 0 +7:4/0/terrains_peering_bit/right_side = 0 +7:4/0/terrains_peering_bit/bottom_right_corner = 0 +7:4/0/terrains_peering_bit/bottom_side = 0 +7:4/0/terrains_peering_bit/bottom_left_corner = 0 +7:4/0/terrains_peering_bit/left_side = 0 +7:4/0/terrains_peering_bit/top_left_corner = 0 +7:4/0/terrains_peering_bit/top_side = 0 +7:4/0/terrains_peering_bit/top_right_corner = 0 +6:4/0 = 0 +6:4/0/terrain_set = 0 +6:4/0/terrain = 0 +6:4/0/terrains_peering_bit/right_side = 0 +6:4/0/terrains_peering_bit/bottom_right_corner = 0 +6:4/0/terrains_peering_bit/bottom_side = 0 +6:4/0/terrains_peering_bit/bottom_left_corner = 0 +6:4/0/terrains_peering_bit/left_side = 0 +6:4/0/terrains_peering_bit/top_left_corner = 0 +6:4/0/terrains_peering_bit/top_side = 0 +6:4/0/terrains_peering_bit/top_right_corner = 0 +5:4/0 = 0 +5:4/0/terrain_set = 0 +5:4/0/terrain = 0 +5:4/0/terrains_peering_bit/right_side = 0 +5:4/0/terrains_peering_bit/bottom_right_corner = 0 +5:4/0/terrains_peering_bit/bottom_side = 0 +5:4/0/terrains_peering_bit/bottom_left_corner = 0 +5:4/0/terrains_peering_bit/left_side = 0 +5:4/0/terrains_peering_bit/top_left_corner = 0 +5:4/0/terrains_peering_bit/top_side = 0 +5:4/0/terrains_peering_bit/top_right_corner = 0 +3:3/0 = 0 +2:2/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +5:2/0 = 0 +4:2/0 = 0 +3:2/0 = 0 +4:3/0 = 0 +2:3/0 = 0 +1:2/0 = 0 +1:4/0 = 0 +0:4/0 = 0 +9:4/0 = 0 +10:4/0 = 0 +11:4/0 = 0 +12:4/0 = 0 +13:4/0 = 0 +13:3/0 = 0 +13:2/0 = 0 +13:1/0 = 0 +12:1/0 = 0 +11:1/0 = 0 +10:1/0 = 0 +8:2/0 = 0 +6:1/0 = 0 +7:1/0 = 0 +14:1/0 = 0 +14:0/0 = 0 +13:0/0 = 0 +12:0/0 = 0 +11:0/0 = 0 +10:0/0 = 0 +9:0/0 = 0 +14:2/0 = 0 +14:3/0 = 0 +12:3/0 = 0 +11:3/0 = 0 +11:2/0 = 0 +10:2/0 = 0 +10:3/0 = 0 +12:2/0 = 0 +14:4/0 = 0 +13:5/0 = 0 +12:5/0 = 0 +11:5/0 = 0 +10:5/0 = 0 +9:5/0 = 0 +8:5/0 = 0 +8:5/0/terrain_set = 0 +8:5/0/terrain = 0 +8:5/0/terrains_peering_bit/right_side = 0 +8:5/0/terrains_peering_bit/bottom_right_corner = 0 +8:5/0/terrains_peering_bit/bottom_side = 0 +8:5/0/terrains_peering_bit/bottom_left_corner = 0 +8:5/0/terrains_peering_bit/left_side = 0 +8:5/0/terrains_peering_bit/top_left_corner = 0 +8:5/0/terrains_peering_bit/top_side = 0 +8:5/0/terrains_peering_bit/top_right_corner = 0 +7:5/0 = 0 +7:5/0/terrain_set = 0 +7:5/0/terrain = 0 +7:5/0/terrains_peering_bit/right_side = 0 +7:5/0/terrains_peering_bit/bottom_right_corner = 0 +7:5/0/terrains_peering_bit/bottom_side = 0 +7:5/0/terrains_peering_bit/bottom_left_corner = 0 +7:5/0/terrains_peering_bit/left_side = 0 +7:5/0/terrains_peering_bit/top_left_corner = 0 +7:5/0/terrains_peering_bit/top_side = 0 +7:5/0/terrains_peering_bit/top_right_corner = 0 +6:5/0 = 0 +6:5/0/terrain_set = 0 +6:5/0/terrain = 0 +6:5/0/terrains_peering_bit/right_side = 0 +6:5/0/terrains_peering_bit/bottom_right_corner = 0 +6:5/0/terrains_peering_bit/bottom_side = 0 +6:5/0/terrains_peering_bit/bottom_left_corner = 0 +6:5/0/terrains_peering_bit/left_side = 0 +6:5/0/terrains_peering_bit/top_left_corner = 0 +6:5/0/terrains_peering_bit/top_side = 0 +6:5/0/terrains_peering_bit/top_right_corner = 0 +5:5/0 = 0 +5:5/0/terrain_set = 0 +5:5/0/terrain = 0 +5:5/0/terrains_peering_bit/right_side = 0 +5:5/0/terrains_peering_bit/bottom_right_corner = 0 +5:5/0/terrains_peering_bit/bottom_side = 0 +5:5/0/terrains_peering_bit/bottom_left_corner = 0 +5:5/0/terrains_peering_bit/left_side = 0 +5:5/0/terrains_peering_bit/top_left_corner = 0 +5:5/0/terrains_peering_bit/top_side = 0 +5:5/0/terrains_peering_bit/top_right_corner = 0 +0:0/0 = 0 +1:5/0 = 0 +1:6/0 = 0 +1:7/0 = 0 +1:8/0 = 0 +1:9/0 = 0 +1:10/0 = 0 +0:8/0 = 0 +0:7/0 = 0 +0:6/0 = 0 +0:5/0 = 0 +2:5/0 = 0 +3:5/0 = 0 +4:5/0 = 0 +4:5/0/terrain_set = 0 +4:5/0/terrain = 0 +4:5/0/terrains_peering_bit/right_side = 0 +4:5/0/terrains_peering_bit/bottom_right_corner = 0 +4:5/0/terrains_peering_bit/bottom_side = 0 +4:5/0/terrains_peering_bit/bottom_left_corner = 0 +4:5/0/terrains_peering_bit/left_side = 0 +4:5/0/terrains_peering_bit/top_left_corner = 0 +4:5/0/terrains_peering_bit/top_side = 0 +4:5/0/terrains_peering_bit/top_right_corner = 0 +5:6/0 = 0 +5:6/0/terrain_set = 0 +5:6/0/terrain = 0 +5:6/0/terrains_peering_bit/right_side = 0 +5:6/0/terrains_peering_bit/bottom_right_corner = 0 +5:6/0/terrains_peering_bit/bottom_side = 0 +5:6/0/terrains_peering_bit/bottom_left_corner = 0 +5:6/0/terrains_peering_bit/left_side = 0 +5:6/0/terrains_peering_bit/top_left_corner = 0 +5:6/0/terrains_peering_bit/top_side = 0 +5:6/0/terrains_peering_bit/top_right_corner = 0 +4:6/0 = 0 +4:6/0/terrain_set = 0 +4:6/0/terrain = 0 +4:6/0/terrains_peering_bit/right_side = 0 +4:6/0/terrains_peering_bit/bottom_right_corner = 0 +4:6/0/terrains_peering_bit/bottom_side = 0 +4:6/0/terrains_peering_bit/bottom_left_corner = 0 +4:6/0/terrains_peering_bit/left_side = 0 +4:6/0/terrains_peering_bit/top_left_corner = 0 +4:6/0/terrains_peering_bit/top_side = 0 +4:6/0/terrains_peering_bit/top_right_corner = 0 +4:7/0 = 0 +3:7/0 = 0 +3:8/0 = 0 +3:8/0/terrain_set = 0 +3:8/0/terrain = 0 +3:8/0/terrains_peering_bit/right_side = 0 +3:8/0/terrains_peering_bit/bottom_right_corner = 0 +3:8/0/terrains_peering_bit/bottom_side = 0 +3:8/0/terrains_peering_bit/bottom_left_corner = 0 +3:8/0/terrains_peering_bit/left_side = 0 +3:8/0/terrains_peering_bit/top_left_corner = 0 +3:8/0/terrains_peering_bit/top_side = 0 +3:8/0/terrains_peering_bit/top_right_corner = 0 +2:8/0 = 0 +2:9/0 = 0 +2:7/0 = 0 +2:6/0 = 0 +3:6/0 = 0 +6:6/0 = 0 +6:6/0/terrain_set = 0 +6:6/0/terrain = 0 +6:6/0/terrains_peering_bit/right_side = 0 +6:6/0/terrains_peering_bit/bottom_right_corner = 0 +6:6/0/terrains_peering_bit/bottom_side = 0 +6:6/0/terrains_peering_bit/bottom_left_corner = 0 +6:6/0/terrains_peering_bit/left_side = 0 +6:6/0/terrains_peering_bit/top_left_corner = 0 +6:6/0/terrains_peering_bit/top_side = 0 +6:6/0/terrains_peering_bit/top_right_corner = 0 +7:6/0 = 0 +7:6/0/terrain_set = 0 +7:6/0/terrain = 0 +7:6/0/terrains_peering_bit/right_side = 0 +7:6/0/terrains_peering_bit/bottom_right_corner = 0 +7:6/0/terrains_peering_bit/bottom_side = 0 +7:6/0/terrains_peering_bit/bottom_left_corner = 0 +7:6/0/terrains_peering_bit/left_side = 0 +7:6/0/terrains_peering_bit/top_left_corner = 0 +7:6/0/terrains_peering_bit/top_side = 0 +7:6/0/terrains_peering_bit/top_right_corner = 0 +14:5/0 = 0 +13:6/0 = 0 +13:7/0 = 0 +12:7/0 = 0 +12:8/0 = 0 +12:9/0 = 0 +12:10/0 = 0 +11:9/0 = 0 +10:8/0 = 0 +9:7/0 = 0 +8:7/0 = 0 +7:7/0 = 0 +6:7/0 = 0 +5:8/0 = 0 +5:8/0/terrain_set = 0 +5:8/0/terrain = 0 +5:8/0/terrains_peering_bit/right_side = 0 +5:8/0/terrains_peering_bit/bottom_right_corner = 0 +5:8/0/terrains_peering_bit/bottom_side = 0 +5:8/0/terrains_peering_bit/bottom_left_corner = 0 +5:8/0/terrains_peering_bit/left_side = 0 +5:8/0/terrains_peering_bit/top_left_corner = 0 +5:8/0/terrains_peering_bit/top_side = 0 +5:8/0/terrains_peering_bit/top_right_corner = 0 +4:8/0 = 0 +4:8/0/terrain_set = 0 +4:8/0/terrain = 0 +4:8/0/terrains_peering_bit/right_side = 0 +4:8/0/terrains_peering_bit/bottom_right_corner = 0 +4:8/0/terrains_peering_bit/bottom_side = 0 +4:8/0/terrains_peering_bit/bottom_left_corner = 0 +4:8/0/terrains_peering_bit/left_side = 0 +4:8/0/terrains_peering_bit/top_left_corner = 0 +4:8/0/terrains_peering_bit/top_side = 0 +4:8/0/terrains_peering_bit/top_right_corner = 0 +6:8/0 = 0 +6:8/0/terrain_set = 0 +6:8/0/terrain = 0 +6:8/0/terrains_peering_bit/right_side = 0 +6:8/0/terrains_peering_bit/bottom_right_corner = 0 +6:8/0/terrains_peering_bit/bottom_side = 0 +6:8/0/terrains_peering_bit/bottom_left_corner = 0 +6:8/0/terrains_peering_bit/left_side = 0 +6:8/0/terrains_peering_bit/top_left_corner = 0 +6:8/0/terrains_peering_bit/top_side = 0 +6:8/0/terrains_peering_bit/top_right_corner = 0 +7:8/0 = 0 +7:8/0/terrain_set = 0 +7:8/0/terrain = 0 +7:8/0/terrains_peering_bit/right_side = 0 +7:8/0/terrains_peering_bit/bottom_right_corner = 0 +7:8/0/terrains_peering_bit/bottom_side = 0 +7:8/0/terrains_peering_bit/bottom_left_corner = 0 +7:8/0/terrains_peering_bit/left_side = 0 +7:8/0/terrains_peering_bit/top_left_corner = 0 +7:8/0/terrains_peering_bit/top_side = 0 +7:8/0/terrains_peering_bit/top_right_corner = 0 +8:8/0 = 0 +9:8/0 = 0 +11:8/0 = 0 +13:8/0 = 0 +14:8/0 = 0 +12:6/0 = 0 +11:6/0 = 0 +10:6/0 = 0 +9:6/0 = 0 +8:6/0 = 0 +8:6/0/terrain_set = 0 +8:6/0/terrain = 0 +8:6/0/terrains_peering_bit/right_side = 0 +8:6/0/terrains_peering_bit/bottom_right_corner = 0 +8:6/0/terrains_peering_bit/bottom_side = 0 +8:6/0/terrains_peering_bit/bottom_left_corner = 0 +8:6/0/terrains_peering_bit/left_side = 0 +8:6/0/terrains_peering_bit/top_left_corner = 0 +8:6/0/terrains_peering_bit/top_side = 0 +8:6/0/terrains_peering_bit/top_right_corner = 0 +5:7/0 = 0 +10:7/0 = 0 +11:7/0 = 0 +14:7/0 = 0 +14:6/0 = 0 +14:9/0 = 0 +14:10/0 = 0 +13:10/0 = 0 +13:9/0 = 0 +13:11/0 = 0 +12:11/0 = 0 +11:10/0 = 0 +10:10/0 = 0 +9:10/0 = 0 +8:10/0 = 0 +7:10/0 = 0 +7:10/0/terrain_set = 0 +7:10/0/terrain = 0 +7:10/0/terrains_peering_bit/right_side = 0 +7:10/0/terrains_peering_bit/bottom_right_corner = 0 +7:10/0/terrains_peering_bit/bottom_side = 0 +7:10/0/terrains_peering_bit/bottom_left_corner = 0 +7:10/0/terrains_peering_bit/left_side = 0 +7:10/0/terrains_peering_bit/top_left_corner = 0 +7:10/0/terrains_peering_bit/top_side = 0 +7:10/0/terrains_peering_bit/top_right_corner = 0 +6:10/0 = 0 +6:10/0/terrain_set = 0 +6:10/0/terrain = 0 +6:10/0/terrains_peering_bit/right_side = 0 +6:10/0/terrains_peering_bit/bottom_right_corner = 0 +6:10/0/terrains_peering_bit/bottom_side = 0 +6:10/0/terrains_peering_bit/bottom_left_corner = 0 +6:10/0/terrains_peering_bit/left_side = 0 +6:10/0/terrains_peering_bit/top_left_corner = 0 +6:10/0/terrains_peering_bit/top_side = 0 +6:10/0/terrains_peering_bit/top_right_corner = 0 +5:10/0 = 0 +5:10/0/terrain_set = 0 +5:10/0/terrain = 0 +5:10/0/terrains_peering_bit/right_side = 0 +5:10/0/terrains_peering_bit/bottom_right_corner = 0 +5:10/0/terrains_peering_bit/bottom_side = 0 +5:10/0/terrains_peering_bit/bottom_left_corner = 0 +5:10/0/terrains_peering_bit/left_side = 0 +5:10/0/terrains_peering_bit/top_left_corner = 0 +5:10/0/terrains_peering_bit/top_side = 0 +5:10/0/terrains_peering_bit/top_right_corner = 0 +4:10/0 = 0 +4:10/0/terrain_set = 0 +4:10/0/terrain = 0 +4:10/0/terrains_peering_bit/right_side = 0 +4:10/0/terrains_peering_bit/bottom_right_corner = 0 +4:10/0/terrains_peering_bit/bottom_side = 0 +4:10/0/terrains_peering_bit/bottom_left_corner = 0 +4:10/0/terrains_peering_bit/left_side = 0 +4:10/0/terrains_peering_bit/top_left_corner = 0 +4:10/0/terrains_peering_bit/top_side = 0 +4:10/0/terrains_peering_bit/top_right_corner = 0 +3:11/0 = 0 +3:11/0/terrain_set = 0 +3:11/0/terrain = 0 +3:11/0/terrains_peering_bit/right_side = 0 +3:11/0/terrains_peering_bit/bottom_right_corner = 0 +3:11/0/terrains_peering_bit/bottom_side = 0 +3:11/0/terrains_peering_bit/bottom_left_corner = 0 +3:11/0/terrains_peering_bit/left_side = 0 +3:11/0/terrains_peering_bit/top_left_corner = 0 +3:11/0/terrains_peering_bit/top_side = 0 +3:11/0/terrains_peering_bit/top_right_corner = 0 +2:11/0 = 0 +1:11/0 = 0 +3:9/0 = 0 +3:9/0/terrain_set = 0 +3:9/0/terrain = 0 +3:9/0/terrains_peering_bit/right_side = 0 +3:9/0/terrains_peering_bit/bottom_right_corner = 0 +3:9/0/terrains_peering_bit/bottom_side = 0 +3:9/0/terrains_peering_bit/bottom_left_corner = 0 +3:9/0/terrains_peering_bit/left_side = 0 +3:9/0/terrains_peering_bit/top_left_corner = 0 +3:9/0/terrains_peering_bit/top_side = 0 +3:9/0/terrains_peering_bit/top_right_corner = 0 +4:9/0 = 0 +4:9/0/terrain_set = 0 +4:9/0/terrain = 0 +4:9/0/terrains_peering_bit/right_side = 0 +4:9/0/terrains_peering_bit/bottom_right_corner = 0 +4:9/0/terrains_peering_bit/bottom_side = 0 +4:9/0/terrains_peering_bit/bottom_left_corner = 0 +4:9/0/terrains_peering_bit/left_side = 0 +4:9/0/terrains_peering_bit/top_left_corner = 0 +4:9/0/terrains_peering_bit/top_side = 0 +4:9/0/terrains_peering_bit/top_right_corner = 0 +5:9/0 = 0 +5:9/0/terrain_set = 0 +5:9/0/terrain = 0 +5:9/0/terrains_peering_bit/right_side = 0 +5:9/0/terrains_peering_bit/bottom_right_corner = 0 +5:9/0/terrains_peering_bit/bottom_side = 0 +5:9/0/terrains_peering_bit/bottom_left_corner = 0 +5:9/0/terrains_peering_bit/left_side = 0 +5:9/0/terrains_peering_bit/top_left_corner = 0 +5:9/0/terrains_peering_bit/top_side = 0 +5:9/0/terrains_peering_bit/top_right_corner = 0 +6:9/0 = 0 +6:9/0/terrain_set = 0 +6:9/0/terrain = 0 +6:9/0/terrains_peering_bit/right_side = 0 +6:9/0/terrains_peering_bit/bottom_right_corner = 0 +6:9/0/terrains_peering_bit/bottom_side = 0 +6:9/0/terrains_peering_bit/bottom_left_corner = 0 +6:9/0/terrains_peering_bit/left_side = 0 +6:9/0/terrains_peering_bit/top_left_corner = 0 +6:9/0/terrains_peering_bit/top_side = 0 +6:9/0/terrains_peering_bit/top_right_corner = 0 +7:9/0 = 0 +7:9/0/terrain_set = 0 +7:9/0/terrain = 0 +7:9/0/terrains_peering_bit/right_side = 0 +7:9/0/terrains_peering_bit/bottom_right_corner = 0 +7:9/0/terrains_peering_bit/bottom_side = 0 +7:9/0/terrains_peering_bit/bottom_left_corner = 0 +7:9/0/terrains_peering_bit/left_side = 0 +7:9/0/terrains_peering_bit/top_left_corner = 0 +7:9/0/terrains_peering_bit/top_side = 0 +7:9/0/terrains_peering_bit/top_right_corner = 0 +8:9/0 = 0 +3:10/0 = 0 +3:10/0/terrain_set = 0 +3:10/0/terrain = 0 +3:10/0/terrains_peering_bit/right_side = 0 +3:10/0/terrains_peering_bit/bottom_right_corner = 0 +3:10/0/terrains_peering_bit/bottom_side = 0 +3:10/0/terrains_peering_bit/bottom_left_corner = 0 +3:10/0/terrains_peering_bit/left_side = 0 +3:10/0/terrains_peering_bit/top_left_corner = 0 +3:10/0/terrains_peering_bit/top_side = 0 +3:10/0/terrains_peering_bit/top_right_corner = 0 +2:10/0 = 0 +0:10/0 = 0 +0:9/0 = 0 +0:11/0 = 0 +0:12/0 = 0 +0:13/0 = 0 +0:14/0 = 0 +1:14/0 = 0 +2:13/0 = 0 +3:13/0 = 0 +4:12/0 = 0 +5:12/0 = 0 +6:11/0 = 0 +6:11/0/terrain_set = 0 +6:11/0/terrain = 0 +6:11/0/terrains_peering_bit/right_side = 0 +6:11/0/terrains_peering_bit/bottom_right_corner = 0 +6:11/0/terrains_peering_bit/bottom_side = 0 +6:11/0/terrains_peering_bit/bottom_left_corner = 0 +6:11/0/terrains_peering_bit/left_side = 0 +6:11/0/terrains_peering_bit/top_left_corner = 0 +6:11/0/terrains_peering_bit/top_side = 0 +6:11/0/terrains_peering_bit/top_right_corner = 0 +10:9/0 = 0 +9:9/0 = 0 +7:11/0 = 0 +7:11/0/terrain_set = 0 +7:11/0/terrain = 0 +7:11/0/terrains_peering_bit/right_side = 0 +7:11/0/terrains_peering_bit/bottom_right_corner = 0 +7:11/0/terrains_peering_bit/bottom_side = 0 +7:11/0/terrains_peering_bit/bottom_left_corner = 0 +7:11/0/terrains_peering_bit/left_side = 0 +7:11/0/terrains_peering_bit/top_left_corner = 0 +7:11/0/terrains_peering_bit/top_side = 0 +7:11/0/terrains_peering_bit/top_right_corner = 0 +5:11/0 = 0 +5:11/0/terrain_set = 0 +5:11/0/terrain = 0 +5:11/0/terrains_peering_bit/right_side = 0 +5:11/0/terrains_peering_bit/bottom_right_corner = 0 +5:11/0/terrains_peering_bit/bottom_side = 0 +5:11/0/terrains_peering_bit/bottom_left_corner = 0 +5:11/0/terrains_peering_bit/left_side = 0 +5:11/0/terrains_peering_bit/top_left_corner = 0 +5:11/0/terrains_peering_bit/top_side = 0 +5:11/0/terrains_peering_bit/top_right_corner = 0 +3:12/0 = 0 +2:12/0 = 0 +1:12/0 = 0 +6:12/0 = 0 +7:13/0 = 0 +8:13/0 = 0 +9:13/0 = 0 +10:13/0 = 0 +11:12/0 = 0 +11:11/0 = 0 +10:11/0 = 0 +9:12/0 = 0 +8:12/0 = 0 +7:12/0 = 0 +9:11/0 = 0 +8:11/0 = 0 +4:11/0 = 0 +4:11/0/terrain_set = 0 +4:11/0/terrain = 0 +4:11/0/terrains_peering_bit/right_side = 0 +4:11/0/terrains_peering_bit/bottom_right_corner = 0 +4:11/0/terrains_peering_bit/bottom_side = 0 +4:11/0/terrains_peering_bit/bottom_left_corner = 0 +4:11/0/terrains_peering_bit/left_side = 0 +4:11/0/terrains_peering_bit/top_left_corner = 0 +4:11/0/terrains_peering_bit/top_side = 0 +4:11/0/terrains_peering_bit/top_right_corner = 0 +1:13/0 = 0 +3:14/0 = 0 +4:14/0 = 0 +5:14/0 = 0 +6:14/0 = 0 +7:14/0 = 0 +8:14/0 = 0 +9:14/0 = 0 +11:13/0 = 0 +12:13/0 = 0 +13:13/0 = 0 +13:12/0 = 0 +12:12/0 = 0 +10:12/0 = 0 +6:13/0 = 0 +5:13/0 = 0 +4:13/0 = 0 +14:12/0 = 0 +14:11/0 = 0 +11:14/0 = 0 +10:14/0 = 0 +2:14/0 = 0 +12:14/0 = 0 +13:14/0 = 0 +14:14/0 = 0 +14:13/0 = 0 + +[resource] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Terrain 0" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +sources/5 = SubResource("TileSetAtlasSource_26wvp") diff --git a/Scenes/StartMenu.tscn b/Scenes/StartMenu.tscn new file mode 100644 index 0000000..68a577a --- /dev/null +++ b/Scenes/StartMenu.tscn @@ -0,0 +1,150 @@ +[gd_scene load_steps=6 format=3 uid="uid://cpp0nq4q06xmh"] + +[ext_resource type="Script" uid="uid://c78blp14uphut" path="res://Scripts/StartMenu.gd" id="1_script"] +[ext_resource type="Texture2D" uid="uid://cbnpp740q2cyc" path="res://Assets/background2.png" id="2_dl0pg"] +[ext_resource type="Texture2D" uid="uid://cpxh1i4anleoc" path="res://Assets/tx-removebg-preview.png" id="3_h303d"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_card"] +bg_color = Color(1, 1, 1, 1) +border_width_left = 4 +border_width_top = 4 +border_width_right = 4 +border_width_bottom = 4 +border_color = Color(0.164706, 0.231373, 0.305882, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 +expand_margin_left = 20.0 +expand_margin_top = 20.0 +expand_margin_right = 20.0 +expand_margin_bottom = 20.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_btn"] +bg_color = Color(0.258824, 0.541176, 1, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[node name="StartMenu" type="CanvasLayer"] +script = ExtResource("1_script") + +[node name="Background" type="TextureRect" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = 32.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_dl0pg") +expand_mode = 1 +stretch_mode = 6 + +[node name="CenterContainer" type="CenterContainer" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 16.0 +offset_top = 8.0 +offset_right = 16.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Card" type="PanelContainer" parent="CenterContainer"] +custom_minimum_size = Vector2(320, 0) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_card") + +[node name="Content" type="VBoxContainer" parent="CenterContainer/Card"] +layout_mode = 2 +theme_override_constants/separation = 15 + +[node name="Header" type="VBoxContainer" parent="CenterContainer/Card/Content"] +layout_mode = 2 +theme_override_constants/separation = 5 + +[node name="MascotContainer" type="CenterContainer" parent="CenterContainer/Card/Content/Header"] +layout_mode = 2 + +[node name="Mascot" type="TextureRect" parent="CenterContainer/Card/Content/Header/MascotContainer"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 2 +texture = ExtResource("3_h303d") +expand_mode = 1 +stretch_mode = 5 + +[node name="Title" type="Label" parent="CenterContainer/Card/Content/Header"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.164706, 0.231373, 0.305882, 1) +theme_override_font_sizes/font_size = 32 +text = "Whaletown" +horizontal_alignment = 1 + +[node name="Subtitle" type="Label" parent="CenterContainer/Card/Content/Header"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.4, 0.4, 0.4, 1) +theme_override_font_sizes/font_size = 14 +text = "Start your journey!" +horizontal_alignment = 1 + +[node name="Form" type="VBoxContainer" parent="CenterContainer/Card/Content"] +layout_mode = 2 +theme_override_constants/separation = 10 + +[node name="NameInput" type="LineEdit" parent="CenterContainer/Card/Content/Form"] +layout_mode = 2 +placeholder_text = "Username / Phone / Email" + +[node name="PasswordInput" type="LineEdit" parent="CenterContainer/Card/Content/Form"] +layout_mode = 2 +placeholder_text = "Password" +secret = true + +[node name="Options" type="HBoxContainer" parent="CenterContainer/Card/Content/Form"] +layout_mode = 2 +theme_override_constants/separation = 20 +alignment = 1 + +[node name="RememberCheck" type="CheckBox" parent="CenterContainer/Card/Content/Form/Options"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.164706, 0.231373, 0.305882, 1) +text = "Remember" + +[node name="AutoLoginCheck" type="CheckBox" parent="CenterContainer/Card/Content/Form/Options"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.164706, 0.231373, 0.305882, 1) +text = "Auto Login" + +[node name="JoinButton" type="Button" parent="CenterContainer/Card/Content"] +custom_minimum_size = Vector2(0, 45) +layout_mode = 2 +theme_override_colors/font_color = Color(1, 1, 1, 1) +theme_override_colors/font_pressed_color = Color(0.9, 0.9, 0.9, 1) +theme_override_colors/font_hover_color = Color(1, 1, 1, 1) +theme_override_font_sizes/font_size = 18 +theme_override_styles/normal = SubResource("StyleBoxFlat_btn") +theme_override_styles/pressed = SubResource("StyleBoxFlat_btn") +theme_override_styles/hover = SubResource("StyleBoxFlat_btn") +text = "Enter Town" + +[node name="Footer" type="HBoxContainer" parent="CenterContainer/Card/Content"] +layout_mode = 2 +alignment = 1 + +[node name="ForgotLink" type="LinkButton" parent="CenterContainer/Card/Content/Footer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_colors/font_color = Color(0.164706, 0.231373, 0.305882, 1) +text = "Forgot Password?" + +[node name="RegisterLink" type="LinkButton" parent="CenterContainer/Card/Content/Footer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_colors/font_color = Color(0.164706, 0.231373, 0.305882, 1) +text = "Register" +text_direction = 2 + +[connection signal="pressed" from="CenterContainer/Card/Content/JoinButton" to="." method="_on_join_pressed"] diff --git a/Scenes/TownTileset.tres b/Scenes/TownTileset.tres new file mode 100644 index 0000000..43ce6b9 --- /dev/null +++ b/Scenes/TownTileset.tres @@ -0,0 +1,1128 @@ +[gd_resource type="TileSet" load_steps=6 format=3 uid="uid://rfrf460mk86m"] + +[ext_resource type="Texture2D" uid="uid://suc4kwbul7m3" path="res://Assets/ground2-removebg-preview.png" id="2_3kd4h"] +[ext_resource type="Texture2D" uid="uid://8rtv7hrwggre" path="res://Assets/room_static_template.png" id="2_gxr0g"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_26wvp"] +texture = ExtResource("2_3kd4h") +texture_region_size = Vector2i(32, 32) +4:0/0 = 0 +5:0/0 = 0 +5:1/0 = 0 +6:2/0 = 0 +7:2/0 = 0 +7:3/0 = 0 +6:3/0 = 0 +5:3/0 = 0 +4:4/0 = 0 +4:4/0/terrain_set = 0 +4:4/0/terrain = 0 +4:4/0/terrains_peering_bit/right_side = 0 +4:4/0/terrains_peering_bit/bottom_right_corner = 0 +4:4/0/terrains_peering_bit/bottom_side = 0 +4:4/0/terrains_peering_bit/bottom_left_corner = 0 +4:4/0/terrains_peering_bit/left_side = 0 +4:4/0/terrains_peering_bit/top_left_corner = 0 +4:4/0/terrains_peering_bit/top_side = 0 +4:4/0/terrains_peering_bit/top_right_corner = 0 +3:4/0 = 0 +2:4/0 = 0 +1:3/0 = 0 +0:3/0 = 0 +0:2/0 = 0 +0:1/0 = 0 +1:1/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +6:0/0 = 0 +7:0/0 = 0 +8:0/0 = 0 +8:1/0 = 0 +9:1/0 = 0 +9:2/0 = 0 +9:3/0 = 0 +8:3/0 = 0 +8:4/0 = 0 +8:4/0/terrain_set = 0 +8:4/0/terrain = 0 +8:4/0/terrains_peering_bit/right_side = 0 +8:4/0/terrains_peering_bit/bottom_right_corner = 0 +8:4/0/terrains_peering_bit/bottom_side = 0 +8:4/0/terrains_peering_bit/bottom_left_corner = 0 +8:4/0/terrains_peering_bit/left_side = 0 +8:4/0/terrains_peering_bit/top_left_corner = 0 +8:4/0/terrains_peering_bit/top_side = 0 +8:4/0/terrains_peering_bit/top_right_corner = 0 +7:4/0 = 0 +7:4/0/terrain_set = 0 +7:4/0/terrain = 0 +7:4/0/terrains_peering_bit/right_side = 0 +7:4/0/terrains_peering_bit/bottom_right_corner = 0 +7:4/0/terrains_peering_bit/bottom_side = 0 +7:4/0/terrains_peering_bit/bottom_left_corner = 0 +7:4/0/terrains_peering_bit/left_side = 0 +7:4/0/terrains_peering_bit/top_left_corner = 0 +7:4/0/terrains_peering_bit/top_side = 0 +7:4/0/terrains_peering_bit/top_right_corner = 0 +6:4/0 = 0 +6:4/0/terrain_set = 0 +6:4/0/terrain = 0 +6:4/0/terrains_peering_bit/right_side = 0 +6:4/0/terrains_peering_bit/bottom_right_corner = 0 +6:4/0/terrains_peering_bit/bottom_side = 0 +6:4/0/terrains_peering_bit/bottom_left_corner = 0 +6:4/0/terrains_peering_bit/left_side = 0 +6:4/0/terrains_peering_bit/top_left_corner = 0 +6:4/0/terrains_peering_bit/top_side = 0 +6:4/0/terrains_peering_bit/top_right_corner = 0 +5:4/0 = 0 +5:4/0/terrain_set = 0 +5:4/0/terrain = 0 +5:4/0/terrains_peering_bit/right_side = 0 +5:4/0/terrains_peering_bit/bottom_right_corner = 0 +5:4/0/terrains_peering_bit/bottom_side = 0 +5:4/0/terrains_peering_bit/bottom_left_corner = 0 +5:4/0/terrains_peering_bit/left_side = 0 +5:4/0/terrains_peering_bit/top_left_corner = 0 +5:4/0/terrains_peering_bit/top_side = 0 +5:4/0/terrains_peering_bit/top_right_corner = 0 +3:3/0 = 0 +2:2/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +5:2/0 = 0 +4:2/0 = 0 +3:2/0 = 0 +4:3/0 = 0 +2:3/0 = 0 +1:2/0 = 0 +1:4/0 = 0 +0:4/0 = 0 +9:4/0 = 0 +10:4/0 = 0 +11:4/0 = 0 +12:4/0 = 0 +13:4/0 = 0 +13:3/0 = 0 +13:2/0 = 0 +13:1/0 = 0 +12:1/0 = 0 +11:1/0 = 0 +10:1/0 = 0 +8:2/0 = 0 +6:1/0 = 0 +7:1/0 = 0 +14:1/0 = 0 +14:0/0 = 0 +13:0/0 = 0 +12:0/0 = 0 +11:0/0 = 0 +10:0/0 = 0 +9:0/0 = 0 +14:2/0 = 0 +14:3/0 = 0 +12:3/0 = 0 +11:3/0 = 0 +11:2/0 = 0 +10:2/0 = 0 +10:3/0 = 0 +12:2/0 = 0 +14:4/0 = 0 +13:5/0 = 0 +12:5/0 = 0 +11:5/0 = 0 +10:5/0 = 0 +9:5/0 = 0 +8:5/0 = 0 +8:5/0/terrain_set = 0 +8:5/0/terrain = 0 +8:5/0/terrains_peering_bit/right_side = 0 +8:5/0/terrains_peering_bit/bottom_right_corner = 0 +8:5/0/terrains_peering_bit/bottom_side = 0 +8:5/0/terrains_peering_bit/bottom_left_corner = 0 +8:5/0/terrains_peering_bit/left_side = 0 +8:5/0/terrains_peering_bit/top_left_corner = 0 +8:5/0/terrains_peering_bit/top_side = 0 +8:5/0/terrains_peering_bit/top_right_corner = 0 +7:5/0 = 0 +7:5/0/terrain_set = 0 +7:5/0/terrain = 0 +7:5/0/terrains_peering_bit/right_side = 0 +7:5/0/terrains_peering_bit/bottom_right_corner = 0 +7:5/0/terrains_peering_bit/bottom_side = 0 +7:5/0/terrains_peering_bit/bottom_left_corner = 0 +7:5/0/terrains_peering_bit/left_side = 0 +7:5/0/terrains_peering_bit/top_left_corner = 0 +7:5/0/terrains_peering_bit/top_side = 0 +7:5/0/terrains_peering_bit/top_right_corner = 0 +6:5/0 = 0 +6:5/0/terrain_set = 0 +6:5/0/terrain = 0 +6:5/0/terrains_peering_bit/right_side = 0 +6:5/0/terrains_peering_bit/bottom_right_corner = 0 +6:5/0/terrains_peering_bit/bottom_side = 0 +6:5/0/terrains_peering_bit/bottom_left_corner = 0 +6:5/0/terrains_peering_bit/left_side = 0 +6:5/0/terrains_peering_bit/top_left_corner = 0 +6:5/0/terrains_peering_bit/top_side = 0 +6:5/0/terrains_peering_bit/top_right_corner = 0 +5:5/0 = 0 +5:5/0/terrain_set = 0 +5:5/0/terrain = 0 +5:5/0/terrains_peering_bit/right_side = 0 +5:5/0/terrains_peering_bit/bottom_right_corner = 0 +5:5/0/terrains_peering_bit/bottom_side = 0 +5:5/0/terrains_peering_bit/bottom_left_corner = 0 +5:5/0/terrains_peering_bit/left_side = 0 +5:5/0/terrains_peering_bit/top_left_corner = 0 +5:5/0/terrains_peering_bit/top_side = 0 +5:5/0/terrains_peering_bit/top_right_corner = 0 +0:0/0 = 0 +1:5/0 = 0 +1:6/0 = 0 +1:7/0 = 0 +1:8/0 = 0 +1:9/0 = 0 +1:10/0 = 0 +0:8/0 = 0 +0:7/0 = 0 +0:6/0 = 0 +0:5/0 = 0 +2:5/0 = 0 +3:5/0 = 0 +4:5/0 = 0 +4:5/0/terrain_set = 0 +4:5/0/terrain = 0 +4:5/0/terrains_peering_bit/right_side = 0 +4:5/0/terrains_peering_bit/bottom_right_corner = 0 +4:5/0/terrains_peering_bit/bottom_side = 0 +4:5/0/terrains_peering_bit/bottom_left_corner = 0 +4:5/0/terrains_peering_bit/left_side = 0 +4:5/0/terrains_peering_bit/top_left_corner = 0 +4:5/0/terrains_peering_bit/top_side = 0 +4:5/0/terrains_peering_bit/top_right_corner = 0 +5:6/0 = 0 +5:6/0/terrain_set = 0 +5:6/0/terrain = 0 +5:6/0/terrains_peering_bit/right_side = 0 +5:6/0/terrains_peering_bit/bottom_right_corner = 0 +5:6/0/terrains_peering_bit/bottom_side = 0 +5:6/0/terrains_peering_bit/bottom_left_corner = 0 +5:6/0/terrains_peering_bit/left_side = 0 +5:6/0/terrains_peering_bit/top_left_corner = 0 +5:6/0/terrains_peering_bit/top_side = 0 +5:6/0/terrains_peering_bit/top_right_corner = 0 +4:6/0 = 0 +4:6/0/terrain_set = 0 +4:6/0/terrain = 0 +4:6/0/terrains_peering_bit/right_side = 0 +4:6/0/terrains_peering_bit/bottom_right_corner = 0 +4:6/0/terrains_peering_bit/bottom_side = 0 +4:6/0/terrains_peering_bit/bottom_left_corner = 0 +4:6/0/terrains_peering_bit/left_side = 0 +4:6/0/terrains_peering_bit/top_left_corner = 0 +4:6/0/terrains_peering_bit/top_side = 0 +4:6/0/terrains_peering_bit/top_right_corner = 0 +4:7/0 = 0 +3:7/0 = 0 +3:8/0 = 0 +3:8/0/terrain_set = 0 +3:8/0/terrain = 0 +3:8/0/terrains_peering_bit/right_side = 0 +3:8/0/terrains_peering_bit/bottom_right_corner = 0 +3:8/0/terrains_peering_bit/bottom_side = 0 +3:8/0/terrains_peering_bit/bottom_left_corner = 0 +3:8/0/terrains_peering_bit/left_side = 0 +3:8/0/terrains_peering_bit/top_left_corner = 0 +3:8/0/terrains_peering_bit/top_side = 0 +3:8/0/terrains_peering_bit/top_right_corner = 0 +2:8/0 = 0 +2:9/0 = 0 +2:7/0 = 0 +2:6/0 = 0 +3:6/0 = 0 +6:6/0 = 0 +6:6/0/terrain_set = 0 +6:6/0/terrain = 0 +6:6/0/terrains_peering_bit/right_side = 0 +6:6/0/terrains_peering_bit/bottom_right_corner = 0 +6:6/0/terrains_peering_bit/bottom_side = 0 +6:6/0/terrains_peering_bit/bottom_left_corner = 0 +6:6/0/terrains_peering_bit/left_side = 0 +6:6/0/terrains_peering_bit/top_left_corner = 0 +6:6/0/terrains_peering_bit/top_side = 0 +6:6/0/terrains_peering_bit/top_right_corner = 0 +7:6/0 = 0 +7:6/0/terrain_set = 0 +7:6/0/terrain = 0 +7:6/0/terrains_peering_bit/right_side = 0 +7:6/0/terrains_peering_bit/bottom_right_corner = 0 +7:6/0/terrains_peering_bit/bottom_side = 0 +7:6/0/terrains_peering_bit/bottom_left_corner = 0 +7:6/0/terrains_peering_bit/left_side = 0 +7:6/0/terrains_peering_bit/top_left_corner = 0 +7:6/0/terrains_peering_bit/top_side = 0 +7:6/0/terrains_peering_bit/top_right_corner = 0 +14:5/0 = 0 +13:6/0 = 0 +13:7/0 = 0 +12:7/0 = 0 +12:8/0 = 0 +12:9/0 = 0 +12:10/0 = 0 +11:9/0 = 0 +10:8/0 = 0 +9:7/0 = 0 +8:7/0 = 0 +7:7/0 = 0 +6:7/0 = 0 +5:8/0 = 0 +5:8/0/terrain_set = 0 +5:8/0/terrain = 0 +5:8/0/terrains_peering_bit/right_side = 0 +5:8/0/terrains_peering_bit/bottom_right_corner = 0 +5:8/0/terrains_peering_bit/bottom_side = 0 +5:8/0/terrains_peering_bit/bottom_left_corner = 0 +5:8/0/terrains_peering_bit/left_side = 0 +5:8/0/terrains_peering_bit/top_left_corner = 0 +5:8/0/terrains_peering_bit/top_side = 0 +5:8/0/terrains_peering_bit/top_right_corner = 0 +4:8/0 = 0 +4:8/0/terrain_set = 0 +4:8/0/terrain = 0 +4:8/0/terrains_peering_bit/right_side = 0 +4:8/0/terrains_peering_bit/bottom_right_corner = 0 +4:8/0/terrains_peering_bit/bottom_side = 0 +4:8/0/terrains_peering_bit/bottom_left_corner = 0 +4:8/0/terrains_peering_bit/left_side = 0 +4:8/0/terrains_peering_bit/top_left_corner = 0 +4:8/0/terrains_peering_bit/top_side = 0 +4:8/0/terrains_peering_bit/top_right_corner = 0 +6:8/0 = 0 +6:8/0/terrain_set = 0 +6:8/0/terrain = 0 +6:8/0/terrains_peering_bit/right_side = 0 +6:8/0/terrains_peering_bit/bottom_right_corner = 0 +6:8/0/terrains_peering_bit/bottom_side = 0 +6:8/0/terrains_peering_bit/bottom_left_corner = 0 +6:8/0/terrains_peering_bit/left_side = 0 +6:8/0/terrains_peering_bit/top_left_corner = 0 +6:8/0/terrains_peering_bit/top_side = 0 +6:8/0/terrains_peering_bit/top_right_corner = 0 +7:8/0 = 0 +7:8/0/terrain_set = 0 +7:8/0/terrain = 0 +7:8/0/terrains_peering_bit/right_side = 0 +7:8/0/terrains_peering_bit/bottom_right_corner = 0 +7:8/0/terrains_peering_bit/bottom_side = 0 +7:8/0/terrains_peering_bit/bottom_left_corner = 0 +7:8/0/terrains_peering_bit/left_side = 0 +7:8/0/terrains_peering_bit/top_left_corner = 0 +7:8/0/terrains_peering_bit/top_side = 0 +7:8/0/terrains_peering_bit/top_right_corner = 0 +8:8/0 = 0 +9:8/0 = 0 +11:8/0 = 0 +13:8/0 = 0 +14:8/0 = 0 +12:6/0 = 0 +11:6/0 = 0 +10:6/0 = 0 +9:6/0 = 0 +8:6/0 = 0 +8:6/0/terrain_set = 0 +8:6/0/terrain = 0 +8:6/0/terrains_peering_bit/right_side = 0 +8:6/0/terrains_peering_bit/bottom_right_corner = 0 +8:6/0/terrains_peering_bit/bottom_side = 0 +8:6/0/terrains_peering_bit/bottom_left_corner = 0 +8:6/0/terrains_peering_bit/left_side = 0 +8:6/0/terrains_peering_bit/top_left_corner = 0 +8:6/0/terrains_peering_bit/top_side = 0 +8:6/0/terrains_peering_bit/top_right_corner = 0 +5:7/0 = 0 +10:7/0 = 0 +11:7/0 = 0 +14:7/0 = 0 +14:6/0 = 0 +14:9/0 = 0 +14:10/0 = 0 +13:10/0 = 0 +13:9/0 = 0 +13:11/0 = 0 +12:11/0 = 0 +11:10/0 = 0 +10:10/0 = 0 +9:10/0 = 0 +8:10/0 = 0 +7:10/0 = 0 +7:10/0/terrain_set = 0 +7:10/0/terrain = 0 +7:10/0/terrains_peering_bit/right_side = 0 +7:10/0/terrains_peering_bit/bottom_right_corner = 0 +7:10/0/terrains_peering_bit/bottom_side = 0 +7:10/0/terrains_peering_bit/bottom_left_corner = 0 +7:10/0/terrains_peering_bit/left_side = 0 +7:10/0/terrains_peering_bit/top_left_corner = 0 +7:10/0/terrains_peering_bit/top_side = 0 +7:10/0/terrains_peering_bit/top_right_corner = 0 +6:10/0 = 0 +6:10/0/terrain_set = 0 +6:10/0/terrain = 0 +6:10/0/terrains_peering_bit/right_side = 0 +6:10/0/terrains_peering_bit/bottom_right_corner = 0 +6:10/0/terrains_peering_bit/bottom_side = 0 +6:10/0/terrains_peering_bit/bottom_left_corner = 0 +6:10/0/terrains_peering_bit/left_side = 0 +6:10/0/terrains_peering_bit/top_left_corner = 0 +6:10/0/terrains_peering_bit/top_side = 0 +6:10/0/terrains_peering_bit/top_right_corner = 0 +5:10/0 = 0 +5:10/0/terrain_set = 0 +5:10/0/terrain = 0 +5:10/0/terrains_peering_bit/right_side = 0 +5:10/0/terrains_peering_bit/bottom_right_corner = 0 +5:10/0/terrains_peering_bit/bottom_side = 0 +5:10/0/terrains_peering_bit/bottom_left_corner = 0 +5:10/0/terrains_peering_bit/left_side = 0 +5:10/0/terrains_peering_bit/top_left_corner = 0 +5:10/0/terrains_peering_bit/top_side = 0 +5:10/0/terrains_peering_bit/top_right_corner = 0 +4:10/0 = 0 +4:10/0/terrain_set = 0 +4:10/0/terrain = 0 +4:10/0/terrains_peering_bit/right_side = 0 +4:10/0/terrains_peering_bit/bottom_right_corner = 0 +4:10/0/terrains_peering_bit/bottom_side = 0 +4:10/0/terrains_peering_bit/bottom_left_corner = 0 +4:10/0/terrains_peering_bit/left_side = 0 +4:10/0/terrains_peering_bit/top_left_corner = 0 +4:10/0/terrains_peering_bit/top_side = 0 +4:10/0/terrains_peering_bit/top_right_corner = 0 +3:11/0 = 0 +3:11/0/terrain_set = 0 +3:11/0/terrain = 0 +3:11/0/terrains_peering_bit/right_side = 0 +3:11/0/terrains_peering_bit/bottom_right_corner = 0 +3:11/0/terrains_peering_bit/bottom_side = 0 +3:11/0/terrains_peering_bit/bottom_left_corner = 0 +3:11/0/terrains_peering_bit/left_side = 0 +3:11/0/terrains_peering_bit/top_left_corner = 0 +3:11/0/terrains_peering_bit/top_side = 0 +3:11/0/terrains_peering_bit/top_right_corner = 0 +2:11/0 = 0 +1:11/0 = 0 +3:9/0 = 0 +3:9/0/terrain_set = 0 +3:9/0/terrain = 0 +3:9/0/terrains_peering_bit/right_side = 0 +3:9/0/terrains_peering_bit/bottom_right_corner = 0 +3:9/0/terrains_peering_bit/bottom_side = 0 +3:9/0/terrains_peering_bit/bottom_left_corner = 0 +3:9/0/terrains_peering_bit/left_side = 0 +3:9/0/terrains_peering_bit/top_left_corner = 0 +3:9/0/terrains_peering_bit/top_side = 0 +3:9/0/terrains_peering_bit/top_right_corner = 0 +4:9/0 = 0 +4:9/0/terrain_set = 0 +4:9/0/terrain = 0 +4:9/0/terrains_peering_bit/right_side = 0 +4:9/0/terrains_peering_bit/bottom_right_corner = 0 +4:9/0/terrains_peering_bit/bottom_side = 0 +4:9/0/terrains_peering_bit/bottom_left_corner = 0 +4:9/0/terrains_peering_bit/left_side = 0 +4:9/0/terrains_peering_bit/top_left_corner = 0 +4:9/0/terrains_peering_bit/top_side = 0 +4:9/0/terrains_peering_bit/top_right_corner = 0 +5:9/0 = 0 +5:9/0/terrain_set = 0 +5:9/0/terrain = 0 +5:9/0/terrains_peering_bit/right_side = 0 +5:9/0/terrains_peering_bit/bottom_right_corner = 0 +5:9/0/terrains_peering_bit/bottom_side = 0 +5:9/0/terrains_peering_bit/bottom_left_corner = 0 +5:9/0/terrains_peering_bit/left_side = 0 +5:9/0/terrains_peering_bit/top_left_corner = 0 +5:9/0/terrains_peering_bit/top_side = 0 +5:9/0/terrains_peering_bit/top_right_corner = 0 +6:9/0 = 0 +6:9/0/terrain_set = 0 +6:9/0/terrain = 0 +6:9/0/terrains_peering_bit/right_side = 0 +6:9/0/terrains_peering_bit/bottom_right_corner = 0 +6:9/0/terrains_peering_bit/bottom_side = 0 +6:9/0/terrains_peering_bit/bottom_left_corner = 0 +6:9/0/terrains_peering_bit/left_side = 0 +6:9/0/terrains_peering_bit/top_left_corner = 0 +6:9/0/terrains_peering_bit/top_side = 0 +6:9/0/terrains_peering_bit/top_right_corner = 0 +7:9/0 = 0 +7:9/0/terrain_set = 0 +7:9/0/terrain = 0 +7:9/0/terrains_peering_bit/right_side = 0 +7:9/0/terrains_peering_bit/bottom_right_corner = 0 +7:9/0/terrains_peering_bit/bottom_side = 0 +7:9/0/terrains_peering_bit/bottom_left_corner = 0 +7:9/0/terrains_peering_bit/left_side = 0 +7:9/0/terrains_peering_bit/top_left_corner = 0 +7:9/0/terrains_peering_bit/top_side = 0 +7:9/0/terrains_peering_bit/top_right_corner = 0 +8:9/0 = 0 +3:10/0 = 0 +3:10/0/terrain_set = 0 +3:10/0/terrain = 0 +3:10/0/terrains_peering_bit/right_side = 0 +3:10/0/terrains_peering_bit/bottom_right_corner = 0 +3:10/0/terrains_peering_bit/bottom_side = 0 +3:10/0/terrains_peering_bit/bottom_left_corner = 0 +3:10/0/terrains_peering_bit/left_side = 0 +3:10/0/terrains_peering_bit/top_left_corner = 0 +3:10/0/terrains_peering_bit/top_side = 0 +3:10/0/terrains_peering_bit/top_right_corner = 0 +2:10/0 = 0 +0:10/0 = 0 +0:9/0 = 0 +0:11/0 = 0 +0:12/0 = 0 +0:13/0 = 0 +0:14/0 = 0 +1:14/0 = 0 +2:13/0 = 0 +3:13/0 = 0 +4:12/0 = 0 +5:12/0 = 0 +6:11/0 = 0 +6:11/0/terrain_set = 0 +6:11/0/terrain = 0 +6:11/0/terrains_peering_bit/right_side = 0 +6:11/0/terrains_peering_bit/bottom_right_corner = 0 +6:11/0/terrains_peering_bit/bottom_side = 0 +6:11/0/terrains_peering_bit/bottom_left_corner = 0 +6:11/0/terrains_peering_bit/left_side = 0 +6:11/0/terrains_peering_bit/top_left_corner = 0 +6:11/0/terrains_peering_bit/top_side = 0 +6:11/0/terrains_peering_bit/top_right_corner = 0 +10:9/0 = 0 +9:9/0 = 0 +7:11/0 = 0 +7:11/0/terrain_set = 0 +7:11/0/terrain = 0 +7:11/0/terrains_peering_bit/right_side = 0 +7:11/0/terrains_peering_bit/bottom_right_corner = 0 +7:11/0/terrains_peering_bit/bottom_side = 0 +7:11/0/terrains_peering_bit/bottom_left_corner = 0 +7:11/0/terrains_peering_bit/left_side = 0 +7:11/0/terrains_peering_bit/top_left_corner = 0 +7:11/0/terrains_peering_bit/top_side = 0 +7:11/0/terrains_peering_bit/top_right_corner = 0 +5:11/0 = 0 +5:11/0/terrain_set = 0 +5:11/0/terrain = 0 +5:11/0/terrains_peering_bit/right_side = 0 +5:11/0/terrains_peering_bit/bottom_right_corner = 0 +5:11/0/terrains_peering_bit/bottom_side = 0 +5:11/0/terrains_peering_bit/bottom_left_corner = 0 +5:11/0/terrains_peering_bit/left_side = 0 +5:11/0/terrains_peering_bit/top_left_corner = 0 +5:11/0/terrains_peering_bit/top_side = 0 +5:11/0/terrains_peering_bit/top_right_corner = 0 +3:12/0 = 0 +2:12/0 = 0 +1:12/0 = 0 +6:12/0 = 0 +7:13/0 = 0 +8:13/0 = 0 +9:13/0 = 0 +10:13/0 = 0 +11:12/0 = 0 +11:11/0 = 0 +10:11/0 = 0 +9:12/0 = 0 +8:12/0 = 0 +7:12/0 = 0 +9:11/0 = 0 +8:11/0 = 0 +4:11/0 = 0 +4:11/0/terrain_set = 0 +4:11/0/terrain = 0 +4:11/0/terrains_peering_bit/right_side = 0 +4:11/0/terrains_peering_bit/bottom_right_corner = 0 +4:11/0/terrains_peering_bit/bottom_side = 0 +4:11/0/terrains_peering_bit/bottom_left_corner = 0 +4:11/0/terrains_peering_bit/left_side = 0 +4:11/0/terrains_peering_bit/top_left_corner = 0 +4:11/0/terrains_peering_bit/top_side = 0 +4:11/0/terrains_peering_bit/top_right_corner = 0 +1:13/0 = 0 +3:14/0 = 0 +4:14/0 = 0 +5:14/0 = 0 +6:14/0 = 0 +7:14/0 = 0 +8:14/0 = 0 +9:14/0 = 0 +11:13/0 = 0 +12:13/0 = 0 +13:13/0 = 0 +13:12/0 = 0 +12:12/0 = 0 +10:12/0 = 0 +6:13/0 = 0 +5:13/0 = 0 +4:13/0 = 0 +14:12/0 = 0 +14:11/0 = 0 +11:14/0 = 0 +10:14/0 = 0 +2:14/0 = 0 +12:14/0 = 0 +13:14/0 = 0 +14:14/0 = 0 +14:13/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_3kd4h"] +texture = ExtResource("2_gxr0g") +texture_region_size = Vector2i(32, 32) +0:1/0 = 0 +0:2/0 = 0 +0:3/0 = 0 +0:4/0 = 0 +0:5/0 = 0 +0:6/0 = 0 +0:7/0 = 0 +0:8/0 = 0 +0:9/0 = 0 +0:10/0 = 0 +0:11/0 = 0 +0:12/0 = 0 +0:13/0 = 0 +0:14/0 = 0 +0:15/0 = 0 +0:16/0 = 0 +0:17/0 = 0 +1:1/0 = 0 +1:2/0 = 0 +1:3/0 = 0 +1:4/0 = 0 +1:5/0 = 0 +1:6/0 = 0 +1:7/0 = 0 +1:8/0 = 0 +1:9/0 = 0 +1:10/0 = 0 +1:11/0 = 0 +1:12/0 = 0 +1:13/0 = 0 +1:14/0 = 0 +1:15/0 = 0 +1:16/0 = 0 +1:17/0 = 0 +2:1/0 = 0 +2:2/0 = 0 +2:3/0 = 0 +2:4/0 = 0 +2:5/0 = 0 +2:6/0 = 0 +2:7/0 = 0 +2:8/0 = 0 +2:9/0 = 0 +2:10/0 = 0 +2:11/0 = 0 +2:12/0 = 0 +2:13/0 = 0 +2:14/0 = 0 +2:15/0 = 0 +2:16/0 = 0 +2:17/0 = 0 +3:1/0 = 0 +3:2/0 = 0 +3:3/0 = 0 +3:4/0 = 0 +3:5/0 = 0 +3:6/0 = 0 +3:7/0 = 0 +3:8/0 = 0 +3:9/0 = 0 +3:10/0 = 0 +3:11/0 = 0 +3:12/0 = 0 +3:13/0 = 0 +3:14/0 = 0 +3:15/0 = 0 +3:16/0 = 0 +3:17/0 = 0 +4:1/0 = 0 +4:2/0 = 0 +4:3/0 = 0 +4:4/0 = 0 +4:5/0 = 0 +4:6/0 = 0 +4:7/0 = 0 +4:8/0 = 0 +4:9/0 = 0 +4:10/0 = 0 +4:11/0 = 0 +4:12/0 = 0 +4:13/0 = 0 +4:14/0 = 0 +4:15/0 = 0 +4:16/0 = 0 +4:17/0 = 0 +5:1/0 = 0 +5:2/0 = 0 +5:3/0 = 0 +5:4/0 = 0 +5:5/0 = 0 +5:6/0 = 0 +5:7/0 = 0 +5:8/0 = 0 +5:9/0 = 0 +5:10/0 = 0 +5:11/0 = 0 +5:12/0 = 0 +5:13/0 = 0 +5:14/0 = 0 +5:15/0 = 0 +5:16/0 = 0 +5:17/0 = 0 +6:1/0 = 0 +6:2/0 = 0 +6:3/0 = 0 +6:4/0 = 0 +6:5/0 = 0 +6:6/0 = 0 +6:7/0 = 0 +6:8/0 = 0 +6:9/0 = 0 +6:10/0 = 0 +6:11/0 = 0 +6:12/0 = 0 +6:13/0 = 0 +6:14/0 = 0 +6:15/0 = 0 +6:16/0 = 0 +6:17/0 = 0 +7:1/0 = 0 +7:2/0 = 0 +7:3/0 = 0 +7:4/0 = 0 +7:5/0 = 0 +7:6/0 = 0 +7:7/0 = 0 +7:8/0 = 0 +7:9/0 = 0 +7:10/0 = 0 +7:11/0 = 0 +7:12/0 = 0 +7:13/0 = 0 +7:14/0 = 0 +7:15/0 = 0 +7:16/0 = 0 +7:17/0 = 0 +8:1/0 = 0 +8:2/0 = 0 +8:3/0 = 0 +8:4/0 = 0 +8:5/0 = 0 +8:6/0 = 0 +8:7/0 = 0 +8:8/0 = 0 +8:9/0 = 0 +8:10/0 = 0 +8:11/0 = 0 +8:12/0 = 0 +8:13/0 = 0 +8:14/0 = 0 +8:15/0 = 0 +8:16/0 = 0 +8:17/0 = 0 +9:1/0 = 0 +9:2/0 = 0 +9:3/0 = 0 +9:4/0 = 0 +9:5/0 = 0 +9:6/0 = 0 +9:7/0 = 0 +9:8/0 = 0 +9:9/0 = 0 +9:10/0 = 0 +9:11/0 = 0 +9:12/0 = 0 +9:13/0 = 0 +9:14/0 = 0 +9:15/0 = 0 +9:16/0 = 0 +9:17/0 = 0 +10:1/0 = 0 +10:2/0 = 0 +10:3/0 = 0 +10:4/0 = 0 +10:5/0 = 0 +10:6/0 = 0 +10:7/0 = 0 +10:8/0 = 0 +10:9/0 = 0 +10:10/0 = 0 +10:11/0 = 0 +10:12/0 = 0 +10:13/0 = 0 +10:14/0 = 0 +10:15/0 = 0 +10:16/0 = 0 +10:17/0 = 0 +11:1/0 = 0 +11:2/0 = 0 +11:3/0 = 0 +11:4/0 = 0 +11:5/0 = 0 +11:6/0 = 0 +11:7/0 = 0 +11:8/0 = 0 +11:9/0 = 0 +11:10/0 = 0 +11:11/0 = 0 +11:12/0 = 0 +11:13/0 = 0 +11:14/0 = 0 +11:15/0 = 0 +11:16/0 = 0 +11:17/0 = 0 +12:1/0 = 0 +12:2/0 = 0 +12:3/0 = 0 +12:4/0 = 0 +12:5/0 = 0 +12:6/0 = 0 +12:7/0 = 0 +12:8/0 = 0 +12:9/0 = 0 +12:10/0 = 0 +12:11/0 = 0 +12:12/0 = 0 +12:13/0 = 0 +12:14/0 = 0 +12:15/0 = 0 +12:16/0 = 0 +12:17/0 = 0 +13:1/0 = 0 +13:2/0 = 0 +13:3/0 = 0 +13:4/0 = 0 +13:5/0 = 0 +13:6/0 = 0 +13:7/0 = 0 +13:8/0 = 0 +13:9/0 = 0 +13:10/0 = 0 +13:11/0 = 0 +13:12/0 = 0 +13:13/0 = 0 +13:14/0 = 0 +13:15/0 = 0 +13:16/0 = 0 +13:17/0 = 0 +14:1/0 = 0 +14:2/0 = 0 +14:3/0 = 0 +14:4/0 = 0 +14:5/0 = 0 +14:6/0 = 0 +14:7/0 = 0 +14:8/0 = 0 +14:9/0 = 0 +14:10/0 = 0 +14:11/0 = 0 +14:12/0 = 0 +14:13/0 = 0 +14:14/0 = 0 +14:15/0 = 0 +14:16/0 = 0 +14:17/0 = 0 +15:1/0 = 0 +15:2/0 = 0 +15:3/0 = 0 +15:4/0 = 0 +15:5/0 = 0 +15:6/0 = 0 +15:7/0 = 0 +15:8/0 = 0 +15:9/0 = 0 +15:10/0 = 0 +15:11/0 = 0 +15:12/0 = 0 +15:13/0 = 0 +15:14/0 = 0 +15:15/0 = 0 +15:16/0 = 0 +15:17/0 = 0 +16:1/0 = 0 +16:2/0 = 0 +16:3/0 = 0 +16:4/0 = 0 +16:5/0 = 0 +16:6/0 = 0 +16:7/0 = 0 +16:8/0 = 0 +16:9/0 = 0 +16:10/0 = 0 +16:11/0 = 0 +16:12/0 = 0 +16:13/0 = 0 +16:14/0 = 0 +16:15/0 = 0 +16:16/0 = 0 +16:17/0 = 0 +17:1/0 = 0 +17:2/0 = 0 +17:3/0 = 0 +17:4/0 = 0 +17:5/0 = 0 +17:6/0 = 0 +17:7/0 = 0 +17:8/0 = 0 +17:9/0 = 0 +17:10/0 = 0 +17:11/0 = 0 +17:12/0 = 0 +17:13/0 = 0 +17:14/0 = 0 +17:15/0 = 0 +17:16/0 = 0 +17:17/0 = 0 +18:1/0 = 0 +18:2/0 = 0 +18:3/0 = 0 +18:4/0 = 0 +18:5/0 = 0 +18:6/0 = 0 +18:7/0 = 0 +18:8/0 = 0 +18:9/0 = 0 +18:10/0 = 0 +18:11/0 = 0 +18:12/0 = 0 +18:13/0 = 0 +18:14/0 = 0 +18:15/0 = 0 +18:16/0 = 0 +18:17/0 = 0 +19:1/0 = 0 +19:2/0 = 0 +19:3/0 = 0 +19:4/0 = 0 +19:5/0 = 0 +19:6/0 = 0 +19:7/0 = 0 +19:8/0 = 0 +19:9/0 = 0 +19:10/0 = 0 +19:11/0 = 0 +19:12/0 = 0 +19:13/0 = 0 +19:14/0 = 0 +19:15/0 = 0 +19:16/0 = 0 +19:17/0 = 0 +20:1/0 = 0 +20:2/0 = 0 +20:3/0 = 0 +20:4/0 = 0 +20:5/0 = 0 +20:6/0 = 0 +20:7/0 = 0 +20:8/0 = 0 +20:9/0 = 0 +20:10/0 = 0 +20:11/0 = 0 +20:12/0 = 0 +20:13/0 = 0 +20:14/0 = 0 +20:15/0 = 0 +20:16/0 = 0 +20:17/0 = 0 +21:1/0 = 0 +21:2/0 = 0 +21:3/0 = 0 +21:4/0 = 0 +21:5/0 = 0 +21:6/0 = 0 +21:7/0 = 0 +21:8/0 = 0 +21:9/0 = 0 +21:10/0 = 0 +21:11/0 = 0 +21:12/0 = 0 +21:13/0 = 0 +21:14/0 = 0 +21:15/0 = 0 +21:16/0 = 0 +21:17/0 = 0 +22:1/0 = 0 +22:2/0 = 0 +22:3/0 = 0 +22:4/0 = 0 +22:5/0 = 0 +22:6/0 = 0 +22:7/0 = 0 +22:8/0 = 0 +22:9/0 = 0 +22:10/0 = 0 +22:11/0 = 0 +22:12/0 = 0 +22:13/0 = 0 +22:14/0 = 0 +22:15/0 = 0 +22:16/0 = 0 +22:17/0 = 0 +23:1/0 = 0 +23:2/0 = 0 +23:3/0 = 0 +23:4/0 = 0 +23:5/0 = 0 +23:6/0 = 0 +23:7/0 = 0 +23:8/0 = 0 +23:9/0 = 0 +23:10/0 = 0 +23:11/0 = 0 +23:12/0 = 0 +23:13/0 = 0 +23:14/0 = 0 +23:15/0 = 0 +23:16/0 = 0 +23:17/0 = 0 +24:1/0 = 0 +24:2/0 = 0 +24:3/0 = 0 +24:4/0 = 0 +24:5/0 = 0 +24:6/0 = 0 +24:7/0 = 0 +24:8/0 = 0 +24:9/0 = 0 +24:10/0 = 0 +24:11/0 = 0 +24:12/0 = 0 +24:13/0 = 0 +24:14/0 = 0 +24:15/0 = 0 +24:16/0 = 0 +24:17/0 = 0 +25:1/0 = 0 +25:2/0 = 0 +25:3/0 = 0 +25:4/0 = 0 +25:5/0 = 0 +25:6/0 = 0 +25:7/0 = 0 +25:8/0 = 0 +25:9/0 = 0 +25:10/0 = 0 +25:11/0 = 0 +25:12/0 = 0 +25:13/0 = 0 +25:14/0 = 0 +25:15/0 = 0 +25:16/0 = 0 +25:17/0 = 0 +26:1/0 = 0 +26:2/0 = 0 +26:3/0 = 0 +26:4/0 = 0 +26:5/0 = 0 +26:6/0 = 0 +26:7/0 = 0 +26:8/0 = 0 +26:9/0 = 0 +26:10/0 = 0 +26:11/0 = 0 +26:12/0 = 0 +26:13/0 = 0 +26:14/0 = 0 +26:15/0 = 0 +26:16/0 = 0 +26:17/0 = 0 +27:1/0 = 0 +27:2/0 = 0 +27:3/0 = 0 +27:4/0 = 0 +27:5/0 = 0 +27:6/0 = 0 +27:7/0 = 0 +27:8/0 = 0 +27:9/0 = 0 +27:10/0 = 0 +27:11/0 = 0 +27:12/0 = 0 +27:13/0 = 0 +27:14/0 = 0 +27:15/0 = 0 +27:16/0 = 0 +27:17/0 = 0 +28:1/0 = 0 +28:2/0 = 0 +28:3/0 = 0 +28:4/0 = 0 +28:5/0 = 0 +28:6/0 = 0 +28:7/0 = 0 +28:8/0 = 0 +28:9/0 = 0 +28:10/0 = 0 +28:11/0 = 0 +28:12/0 = 0 +28:13/0 = 0 +28:14/0 = 0 +28:15/0 = 0 +28:16/0 = 0 +28:17/0 = 0 +29:1/0 = 0 +29:2/0 = 0 +29:3/0 = 0 +29:4/0 = 0 +29:5/0 = 0 +29:6/0 = 0 +29:7/0 = 0 +29:8/0 = 0 +29:9/0 = 0 +29:10/0 = 0 +29:11/0 = 0 +29:12/0 = 0 +29:13/0 = 0 +29:14/0 = 0 +29:15/0 = 0 +29:16/0 = 0 +29:17/0 = 0 +30:1/0 = 0 +30:2/0 = 0 +30:3/0 = 0 +30:4/0 = 0 +30:5/0 = 0 +30:6/0 = 0 +30:7/0 = 0 +30:8/0 = 0 +30:9/0 = 0 +30:10/0 = 0 +30:11/0 = 0 +30:12/0 = 0 +30:13/0 = 0 +30:14/0 = 0 +30:15/0 = 0 +30:16/0 = 0 +30:17/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_1cxnc"] +texture = ExtResource("2_gxr0g") +texture_region_size = Vector2i(32, 32) + +[resource] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Terrain 0" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +sources/5 = SubResource("TileSetAtlasSource_26wvp") +sources/6 = SubResource("TileSetAtlasSource_3kd4h") +sources/7 = SubResource("TileSetAtlasSource_1cxnc") diff --git a/Scenes/UI/ChatBubble.tscn b/Scenes/UI/ChatBubble.tscn new file mode 100644 index 0000000..73f214f --- /dev/null +++ b/Scenes/UI/ChatBubble.tscn @@ -0,0 +1,42 @@ +[gd_scene load_steps=3 format=3] + +[ext_resource type="Script" path="res://Scripts/UI/ChatBubble.gd" id="1_script"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_bubble_modern"] +bg_color = Color(1, 1, 1, 0.9) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 +shadow_color = Color(0, 0, 0, 0.2) +shadow_size = 2 + +[node name="ChatBubble" type="Control"] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_script") + +[node name="PanelContainer" type="PanelContainer" parent="."] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -75.0 +offset_top = -60.0 +offset_right = 75.0 +offset_bottom = -20.0 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_styles/panel = SubResource("StyleBoxFlat_bubble_modern") + +[node name="Label" type="Label" parent="PanelContainer"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.1, 0.1, 0.1, 1) +theme_override_font_sizes/font_size = 8 +text = "..." +horizontal_alignment = 1 +vertical_alignment = 1 +autowrap_mode = 3 +custom_minimum_size = Vector2(150, 0) diff --git a/Scenes/UI/ChatHUD.tscn b/Scenes/UI/ChatHUD.tscn new file mode 100644 index 0000000..8925c4c --- /dev/null +++ b/Scenes/UI/ChatHUD.tscn @@ -0,0 +1,48 @@ +[gd_scene load_steps=3 format=3 uid="uid://bdghsiesgwwho"] + +[ext_resource type="Script" uid="uid://dia2n8udb7xxq" path="res://Scripts/UI/ChatHUD.gd" id="1_script"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_modern"] +bg_color = Color(0.0784314, 0.0784314, 0.0784314, 0.6) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 +expand_margin_left = 2.0 +expand_margin_top = 2.0 +expand_margin_right = 2.0 +expand_margin_bottom = 2.0 + +[node name="ChatHUD" type="CanvasLayer"] +script = ExtResource("1_script") + +[node name="PanelContainer" type="PanelContainer" parent="."] +custom_minimum_size = Vector2(180, 70) +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_left = 10.0 +offset_top = -80.0 +offset_right = 190.0 +offset_bottom = -10.0 +grow_vertical = 0 +theme_override_styles/panel = SubResource("StyleBoxFlat_modern") + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"] +layout_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="PanelContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_font_sizes/normal_font_size = 10 +bbcode_enabled = true +text = "[color=#888]Welcome to WhaleTown![/color] +" +scroll_following = true + +[node name="LineEdit" type="LineEdit" parent="PanelContainer/VBoxContainer"] +layout_mode = 2 +theme_override_colors/font_color = Color(1, 1, 1, 1) +theme_override_font_sizes/font_size = 10 +placeholder_text = "Press Enter to chat..." +flat = true diff --git a/Scenes/UI/NoticeDialog.tscn b/Scenes/UI/NoticeDialog.tscn new file mode 100644 index 0000000..ff9ec1a --- /dev/null +++ b/Scenes/UI/NoticeDialog.tscn @@ -0,0 +1,132 @@ +[gd_scene load_steps=3 format=3 uid="uid://rdmro1jxs6ga"] + +[ext_resource type="Script" uid="uid://cy3n8ccmeolgd" path="res://Scripts/UI/NoticeDialog.gd" id="1_script"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rounded"] +bg_color = Color(0.95, 0.95, 0.95, 1) +corner_radius_top_left = 16 +corner_radius_top_right = 16 +corner_radius_bottom_right = 16 +corner_radius_bottom_left = 16 +shadow_color = Color(0, 0, 0, 0.2) +shadow_size = 8 + +[node name="NoticeDialog" type="CanvasLayer"] +process_mode = 3 +script = ExtResource("1_script") + +[node name="Dimmer" type="ColorRect" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 0.5) + +[node name="CenterContainer" type="CenterContainer" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="PanelContainer" type="PanelContainer" parent="CenterContainer"] +custom_minimum_size = Vector2(480, 420) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_rounded") + +[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer"] +layout_mode = 2 +theme_override_constants/separation = 12 + +[node name="HeaderSpacer" type="Control" parent="CenterContainer/PanelContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 4) +layout_mode = 2 + +[node name="Header" type="HBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer"] +layout_mode = 2 + +[node name="LeftSpacer" type="Control" parent="CenterContainer/PanelContainer/VBoxContainer/Header"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Title" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/Header"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1) +theme_override_font_sizes/font_size = 22 +text = "公告板" +horizontal_alignment = 1 + +[node name="RightContainer" type="HBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/Header"] +layout_mode = 2 +size_flags_horizontal = 3 +alignment = 2 + +[node name="CloseButton" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/Header/RightContainer"] +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +text = "X" +flat = true + +[node name="RightMargin" type="Control" parent="CenterContainer/PanelContainer/VBoxContainer/Header/RightContainer"] +custom_minimum_size = Vector2(8, 0) +layout_mode = 2 + +[node name="ContentContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/separation = 10 + +[node name="ImagePanel" type="PanelContainer" parent="CenterContainer/PanelContainer/VBoxContainer/ContentContainer"] +custom_minimum_size = Vector2(0, 200) +layout_mode = 2 + +[node name="ImageRect" type="TextureRect" parent="CenterContainer/PanelContainer/VBoxContainer/ContentContainer/ImagePanel"] +layout_mode = 2 +expand_mode = 1 +stretch_mode = 5 + +[node name="ImageLabel" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/ContentContainer/ImagePanel"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.6, 0.6, 0.6, 1) +text = "Image Placeholder" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="TextPanel" type="MarginContainer" parent="CenterContainer/PanelContainer/VBoxContainer/ContentContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/margin_left = 16 +theme_override_constants/margin_right = 16 + +[node name="ContentLabel" type="RichTextLabel" parent="CenterContainer/PanelContainer/VBoxContainer/ContentContainer/TextPanel"] +layout_mode = 2 +theme_override_colors/default_color = Color(0.3, 0.3, 0.3, 1) +theme_override_font_sizes/normal_font_size = 16 +bbcode_enabled = true +text = "Announcement Content..." + +[node name="Footer" type="HBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 48) +layout_mode = 2 +theme_override_constants/separation = 20 +alignment = 1 + +[node name="PrevButton" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/Footer"] +custom_minimum_size = Vector2(40, 40) +layout_mode = 2 +text = "<" + +[node name="DotsContainer" type="HBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/Footer"] +layout_mode = 2 +theme_override_constants/separation = 8 +alignment = 1 + +[node name="NextButton" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/Footer"] +custom_minimum_size = Vector2(40, 40) +layout_mode = 2 +text = ">" + +[node name="BottomSpacer" type="Control" parent="CenterContainer/PanelContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 4) +layout_mode = 2 diff --git a/Scenes/UI/WelcomeDialog.tscn b/Scenes/UI/WelcomeDialog.tscn new file mode 100644 index 0000000..f79469d --- /dev/null +++ b/Scenes/UI/WelcomeDialog.tscn @@ -0,0 +1,114 @@ +[gd_scene load_steps=5 format=3 uid="uid://d8mam0n1a3b5"] + +[ext_resource type="Script" uid="uid://djjy58mh6kl4o" path="res://Scripts/UI/WelcomeDialog.gd" id="1_script"] +[ext_resource type="Texture2D" uid="uid://cbnpp740q2cyc" path="res://Assets/background2.png" id="2_dy5hw"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_card"] +bg_color = Color(1, 1, 1, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 +shadow_color = Color(0, 0, 0, 0.2) +shadow_size = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_btn_rounded"] +bg_color = Color(0.95, 0.95, 0.95, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[node name="WelcomeDialog" type="CanvasLayer"] +script = ExtResource("1_script") + +[node name="ColorRect" type="ColorRect" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 0.4) + +[node name="CenterContainer" type="CenterContainer" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="PanelContainer" type="PanelContainer" parent="CenterContainer"] +custom_minimum_size = Vector2(400, 350) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_card") + +[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer"] +layout_mode = 2 +theme_override_constants/separation = 10 + +[node name="Header" type="HBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer"] +layout_mode = 2 +alignment = 1 + +[node name="Spacer" type="Control" parent="CenterContainer/PanelContainer/VBoxContainer/Header"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Title" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/Header"] +layout_mode = 2 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 18 +text = "欢迎来到 Datawhale Town!" + +[node name="Spacer2" type="Control" parent="CenterContainer/PanelContainer/VBoxContainer/Header"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="CloseButton" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/Header"] +custom_minimum_size = Vector2(30, 30) +layout_mode = 2 +text = "X" +flat = true + +[node name="HSeparator" type="HSeparator" parent="CenterContainer/PanelContainer/VBoxContainer"] +layout_mode = 2 + +[node name="LogoContainer" type="CenterContainer" parent="CenterContainer/PanelContainer/VBoxContainer"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="CenterContainer/PanelContainer/VBoxContainer/LogoContainer"] +custom_minimum_size = Vector2(300, 100) +layout_mode = 2 +texture = ExtResource("2_dy5hw") +expand_mode = 1 +stretch_mode = 5 + +[node name="BodyText" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer"] +layout_mode = 2 +theme_override_colors/font_color = Color(0.3, 0.3, 0.3, 1) +theme_override_font_sizes/font_size = 14 +text = "连接·共生·见证 +Datawhale Town —— 学习者的赛博家园与精神坐标。 +✨ 实时广场:看大家都在学什么。 +🏠 个人空间:展示你的学习笔记与作品。 +🤝 开源营地:更有氛围的组队学习体验。" +horizontal_alignment = 1 +autowrap_mode = 3 + +[node name="Spacer3" type="Control" parent="CenterContainer/PanelContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="ActionContainer" type="CenterContainer" parent="CenterContainer/PanelContainer/VBoxContainer"] +layout_mode = 2 + +[node name="StartButton" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/ActionContainer"] +custom_minimum_size = Vector2(150, 40) +layout_mode = 2 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_styles/normal = SubResource("StyleBoxFlat_btn_rounded") +text = "开始探索" diff --git a/Scenes/WelcomeBoard.tscn b/Scenes/WelcomeBoard.tscn new file mode 100644 index 0000000..a4e0369 --- /dev/null +++ b/Scenes/WelcomeBoard.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=4 format=3 uid="uid://c7k8yay002w4"] + +[ext_resource type="Script" path="res://Scripts/WelcomeBoard.gd" id="1_script"] +[ext_resource type="Texture2D" uid="uid://welcome_board_placeholder" path="res://Assets/WelcomeBoard.png" id="2_sprite"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_board"] +size = Vector2(40, 30) + +[node name="WelcomeBoard" type="StaticBody2D"] +collision_layer = 3 +script = ExtResource("1_script") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("2_sprite") +scale = Vector2(0.25, 0.25) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, 10) +shape = SubResource("RectangleShape2D_board") diff --git a/Scenes/World.tscn b/Scenes/World.tscn new file mode 100644 index 0000000..bbcf4a8 --- /dev/null +++ b/Scenes/World.tscn @@ -0,0 +1,7897 @@ +[gd_scene load_steps=74 format=4 uid="uid://og86xebllx0x"] + +[ext_resource type="Script" uid="uid://dpgj6ge7vk76f" path="res://Scripts/World.gd" id="1_script"] +[ext_resource type="TileSet" uid="uid://rfrf460mk86m" path="res://Scenes/TownTileset.tres" id="2_tileset"] +[ext_resource type="Texture2D" uid="uid://cnopacf8vag4r" path="res://Assets/Water-removebg-preview.png" id="3_5nsto"] +[ext_resource type="Texture2D" uid="uid://bt6neu564owvb" path="res://Assets/Guardrail-removebg-preview.png" id="3_gjpho"] +[ext_resource type="Texture2D" uid="uid://dpdh2yq8g3uud" path="res://Assets/grass-removebg-preview.png" id="3_kn06e"] +[ext_resource type="Texture2D" uid="uid://ntifvu263tbw" path="res://Assets/pquan-removebg-preview.png" id="3_p70al"] +[ext_resource type="Texture2D" uid="uid://dy8agg3qhvgi" path="res://Assets/Guardrail2.png" id="6_0ao37"] +[ext_resource type="Texture2D" uid="uid://186ho65s4e58" path="res://Assets/Community-removebg.png" id="6_45d1s"] +[ext_resource type="Texture2D" uid="uid://cxqrtowm4s6qo" path="res://Assets/house-removebg-preview.png" id="7_y7y61"] +[ext_resource type="Texture2D" uid="uid://fhdompt8twxf" path="res://Assets/Street-removebg-preview.png" id="9_7yo87"] +[ext_resource type="Texture2D" uid="uid://ldq7fy0ltnk7" path="res://Assets/0aeb04e31653a3c455ab80cebf3fe1ff.png" id="10_ti1bm"] +[ext_resource type="Texture2D" uid="uid://cub3evefqhdft" path="res://Assets/fountain-removebg-preview.png" id="11_7yo87"] +[ext_resource type="Texture2D" uid="uid://dh0l3pkmig4df" path="res://Assets/Tree1-removebg-preview.png" id="12_ti1bm"] +[ext_resource type="Texture2D" uid="uid://mpiu4pi3pyc7" path="res://Assets/haystack-removebg-preview.png" id="13_8l3nt"] +[ext_resource type="Texture2D" uid="uid://bcqu3celd87gg" path="res://Assets/haystack-2-removebg-preview.png" id="14_kwl8l"] +[ext_resource type="Texture2D" uid="uid://4vxhfbqfc50p" path="res://Assets/cherry_tree2-removebg-preview.png" id="15_waglr"] +[ext_resource type="Texture2D" uid="uid://1svxy86artm8" path="res://Assets/tileset1-removebg-preview.png" id="15_xiqgv"] +[ext_resource type="Texture2D" uid="uid://d3fys4xjoaxii" path="res://Assets/red_flower.png" id="16_waglr"] +[ext_resource type="Texture2D" uid="uid://bg242sq4wogha" path="res://Assets/tree2-removebg-preview.png" id="18_0bcf6"] +[ext_resource type="Texture2D" uid="uid://iljslogyjklf" path="res://Assets/flower2-removebg-preview.png" id="18_g01fq"] +[ext_resource type="Texture2D" uid="uid://cm0gs50gj3c78" path="res://Assets/pier-removebg-preview.png" id="18_rwt1y"] +[ext_resource type="Texture2D" uid="uid://bl5cxh65d1oyr" path="res://Assets/seaside3-removebg-preview.png" id="19_d3ars"] +[ext_resource type="Texture2D" uid="uid://cuffn58xg6ful" path="res://Assets/seaside.png" id="19_mvfa8"] +[ext_resource type="Texture2D" uid="uid://dg3f16h33r8j8" path="res://Assets/seaside1.png" id="22_l11rc"] +[ext_resource type="Texture2D" uid="uid://cwvbu4xsa7sq5" path="res://Assets/seaside4-removebg-preview.png" id="23_w86vl"] +[ext_resource type="PackedScene" uid="uid://c7k8yay002w4" path="res://Scenes/WelcomeBoard.tscn" id="24_board"] +[ext_resource type="PackedScene" uid="uid://b8q7x5y201w3" path="res://Scenes/NPCMayor.tscn" id="25_mayor"] +[ext_resource type="PackedScene" path="res://Scenes/NoticeBoard.tscn" id="26_noticeboard"] +[ext_resource type="PackedScene" path="res://Scenes/Chair.tscn" id="27_chair"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_op4cu"] +texture = ExtResource("3_kn06e") +28:3/0 = 0 +28:3/0/terrain_set = 0 +28:3/0/terrain = 0 +28:3/0/terrains_peering_bit/right_side = 0 +28:3/0/terrains_peering_bit/bottom_right_corner = 0 +28:3/0/terrains_peering_bit/bottom_side = 0 +28:3/0/terrains_peering_bit/bottom_left_corner = 0 +28:3/0/terrains_peering_bit/left_side = 0 +28:3/0/terrains_peering_bit/top_left_corner = 0 +28:3/0/terrains_peering_bit/top_side = 0 +28:3/0/terrains_peering_bit/top_right_corner = 0 +28:4/0 = 0 +28:4/0/terrain_set = 0 +28:4/0/terrain = 0 +28:4/0/terrains_peering_bit/right_side = 0 +28:4/0/terrains_peering_bit/bottom_right_corner = 0 +28:4/0/terrains_peering_bit/bottom_side = 0 +28:4/0/terrains_peering_bit/bottom_left_corner = 0 +28:4/0/terrains_peering_bit/left_side = 0 +28:4/0/terrains_peering_bit/top_left_corner = 0 +28:4/0/terrains_peering_bit/top_side = 0 +28:4/0/terrains_peering_bit/top_right_corner = 0 +28:5/0 = 0 +28:5/0/terrain_set = 0 +28:5/0/terrain = 0 +28:5/0/terrains_peering_bit/right_side = 0 +28:5/0/terrains_peering_bit/bottom_right_corner = 0 +28:5/0/terrains_peering_bit/bottom_side = 0 +28:5/0/terrains_peering_bit/bottom_left_corner = 0 +28:5/0/terrains_peering_bit/left_side = 0 +28:5/0/terrains_peering_bit/top_left_corner = 0 +28:5/0/terrains_peering_bit/top_side = 0 +28:5/0/terrains_peering_bit/top_right_corner = 0 +28:6/0 = 0 +28:6/0/terrain_set = 0 +28:6/0/terrain = 0 +28:6/0/terrains_peering_bit/right_side = 0 +28:6/0/terrains_peering_bit/bottom_right_corner = 0 +28:6/0/terrains_peering_bit/bottom_side = 0 +28:6/0/terrains_peering_bit/bottom_left_corner = 0 +28:6/0/terrains_peering_bit/left_side = 0 +28:6/0/terrains_peering_bit/top_left_corner = 0 +28:6/0/terrains_peering_bit/top_side = 0 +28:6/0/terrains_peering_bit/top_right_corner = 0 +28:7/0 = 0 +28:7/0/terrain_set = 0 +28:7/0/terrain = 0 +28:7/0/terrains_peering_bit/right_side = 0 +28:7/0/terrains_peering_bit/bottom_right_corner = 0 +28:7/0/terrains_peering_bit/bottom_side = 0 +28:7/0/terrains_peering_bit/bottom_left_corner = 0 +28:7/0/terrains_peering_bit/left_side = 0 +28:7/0/terrains_peering_bit/top_left_corner = 0 +28:7/0/terrains_peering_bit/top_side = 0 +28:7/0/terrains_peering_bit/top_right_corner = 0 +28:8/0 = 0 +28:8/0/terrain_set = 0 +28:8/0/terrain = 0 +28:8/0/terrains_peering_bit/right_side = 0 +28:8/0/terrains_peering_bit/bottom_right_corner = 0 +28:8/0/terrains_peering_bit/bottom_side = 0 +28:8/0/terrains_peering_bit/bottom_left_corner = 0 +28:8/0/terrains_peering_bit/left_side = 0 +28:8/0/terrains_peering_bit/top_left_corner = 0 +28:8/0/terrains_peering_bit/top_side = 0 +28:8/0/terrains_peering_bit/top_right_corner = 0 +28:9/0 = 0 +28:9/0/terrain_set = 0 +28:9/0/terrain = 0 +28:9/0/terrains_peering_bit/right_side = 0 +28:9/0/terrains_peering_bit/bottom_right_corner = 0 +28:9/0/terrains_peering_bit/bottom_side = 0 +28:9/0/terrains_peering_bit/bottom_left_corner = 0 +28:9/0/terrains_peering_bit/left_side = 0 +28:9/0/terrains_peering_bit/top_left_corner = 0 +28:9/0/terrains_peering_bit/top_side = 0 +28:9/0/terrains_peering_bit/top_right_corner = 0 +29:9/0 = 0 +29:9/0/terrain_set = 0 +29:9/0/terrain = 0 +29:9/0/terrains_peering_bit/right_side = 0 +29:9/0/terrains_peering_bit/bottom_right_corner = 0 +29:9/0/terrains_peering_bit/bottom_side = 0 +29:9/0/terrains_peering_bit/bottom_left_corner = 0 +29:9/0/terrains_peering_bit/left_side = 0 +29:9/0/terrains_peering_bit/top_left_corner = 0 +29:9/0/terrains_peering_bit/top_side = 0 +29:4/0 = 0 +29:4/0/terrain_set = 0 +29:4/0/terrain = 0 +29:4/0/terrains_peering_bit/right_side = 0 +29:4/0/terrains_peering_bit/bottom_right_corner = 0 +29:4/0/terrains_peering_bit/bottom_side = 0 +29:4/0/terrains_peering_bit/bottom_left_corner = 0 +29:4/0/terrains_peering_bit/left_side = 0 +29:4/0/terrains_peering_bit/top_left_corner = 0 +29:4/0/terrains_peering_bit/top_side = 0 +29:4/0/terrains_peering_bit/top_right_corner = 0 +29:3/0 = 0 +29:3/0/terrain_set = 0 +29:3/0/terrain = 0 +29:3/0/terrains_peering_bit/bottom_right_corner = 0 +29:3/0/terrains_peering_bit/bottom_side = 0 +29:3/0/terrains_peering_bit/bottom_left_corner = 0 +29:3/0/terrains_peering_bit/left_side = 0 +29:3/0/terrains_peering_bit/top_left_corner = 0 +29:3/0/terrains_peering_bit/top_side = 0 +29:5/0 = 0 +29:5/0/terrain_set = 0 +29:5/0/terrain = 0 +29:5/0/terrains_peering_bit/right_side = 0 +29:5/0/terrains_peering_bit/bottom_right_corner = 0 +29:5/0/terrains_peering_bit/bottom_side = 0 +29:5/0/terrains_peering_bit/bottom_left_corner = 0 +29:5/0/terrains_peering_bit/left_side = 0 +29:5/0/terrains_peering_bit/top_left_corner = 0 +29:5/0/terrains_peering_bit/top_side = 0 +29:5/0/terrains_peering_bit/top_right_corner = 0 +29:6/0 = 0 +29:6/0/terrain_set = 0 +29:6/0/terrain = 0 +29:6/0/terrains_peering_bit/right_side = 0 +29:6/0/terrains_peering_bit/bottom_right_corner = 0 +29:6/0/terrains_peering_bit/bottom_side = 0 +29:6/0/terrains_peering_bit/bottom_left_corner = 0 +29:6/0/terrains_peering_bit/left_side = 0 +29:6/0/terrains_peering_bit/top_left_corner = 0 +29:6/0/terrains_peering_bit/top_side = 0 +29:6/0/terrains_peering_bit/top_right_corner = 0 +29:7/0 = 0 +29:7/0/terrain_set = 0 +29:7/0/terrain = 0 +29:7/0/terrains_peering_bit/right_side = 0 +29:7/0/terrains_peering_bit/bottom_right_corner = 0 +29:7/0/terrains_peering_bit/bottom_side = 0 +29:7/0/terrains_peering_bit/bottom_left_corner = 0 +29:7/0/terrains_peering_bit/left_side = 0 +29:7/0/terrains_peering_bit/top_left_corner = 0 +29:7/0/terrains_peering_bit/top_side = 0 +29:7/0/terrains_peering_bit/top_right_corner = 0 +29:8/0 = 0 +29:8/0/terrain_set = 0 +29:8/0/terrain = 0 +29:8/0/terrains_peering_bit/right_side = 0 +29:8/0/terrains_peering_bit/bottom_side = 0 +29:8/0/terrains_peering_bit/bottom_left_corner = 0 +29:8/0/terrains_peering_bit/left_side = 0 +29:8/0/terrains_peering_bit/top_left_corner = 0 +29:8/0/terrains_peering_bit/top_side = 0 +29:8/0/terrains_peering_bit/top_right_corner = 0 +27:9/0 = 0 +27:9/0/terrain_set = 0 +27:9/0/terrain = 0 +27:9/0/terrains_peering_bit/right_side = 0 +27:9/0/terrains_peering_bit/bottom_right_corner = 0 +27:9/0/terrains_peering_bit/bottom_side = 0 +27:9/0/terrains_peering_bit/bottom_left_corner = 0 +27:9/0/terrains_peering_bit/left_side = 0 +27:9/0/terrains_peering_bit/top_left_corner = 0 +27:9/0/terrains_peering_bit/top_side = 0 +27:9/0/terrains_peering_bit/top_right_corner = 0 +26:9/0 = 0 +26:9/0/terrain_set = 0 +26:9/0/terrain = 0 +26:9/0/terrains_peering_bit/right_side = 0 +26:9/0/terrains_peering_bit/bottom_right_corner = 0 +26:9/0/terrains_peering_bit/bottom_side = 0 +26:9/0/terrains_peering_bit/bottom_left_corner = 0 +26:9/0/terrains_peering_bit/left_side = 0 +26:9/0/terrains_peering_bit/top_left_corner = 0 +26:9/0/terrains_peering_bit/top_side = 0 +26:9/0/terrains_peering_bit/top_right_corner = 0 +25:9/0 = 0 +25:9/0/terrain_set = 0 +25:9/0/terrain = 0 +25:9/0/terrains_peering_bit/right_side = 0 +25:9/0/terrains_peering_bit/bottom_right_corner = 0 +25:9/0/terrains_peering_bit/bottom_side = 0 +25:9/0/terrains_peering_bit/bottom_left_corner = 0 +25:9/0/terrains_peering_bit/left_side = 0 +25:9/0/terrains_peering_bit/top_left_corner = 0 +25:9/0/terrains_peering_bit/top_side = 0 +25:9/0/terrains_peering_bit/top_right_corner = 0 +24:9/0 = 0 +24:9/0/terrain_set = 0 +24:9/0/terrain = 0 +24:9/0/terrains_peering_bit/right_side = 0 +24:9/0/terrains_peering_bit/bottom_right_corner = 0 +24:9/0/terrains_peering_bit/bottom_side = 0 +24:9/0/terrains_peering_bit/bottom_left_corner = 0 +24:9/0/terrains_peering_bit/left_side = 0 +24:9/0/terrains_peering_bit/top_left_corner = 0 +24:9/0/terrains_peering_bit/top_side = 0 +24:9/0/terrains_peering_bit/top_right_corner = 0 +23:9/0 = 0 +23:9/0/terrain_set = 0 +23:9/0/terrain = 0 +23:9/0/terrains_peering_bit/right_side = 0 +23:9/0/terrains_peering_bit/bottom_right_corner = 0 +23:9/0/terrains_peering_bit/bottom_side = 0 +23:9/0/terrains_peering_bit/bottom_left_corner = 0 +23:9/0/terrains_peering_bit/left_side = 0 +23:9/0/terrains_peering_bit/top_left_corner = 0 +23:9/0/terrains_peering_bit/top_side = 0 +23:9/0/terrains_peering_bit/top_right_corner = 0 +22:9/0 = 0 +22:9/0/terrain_set = 0 +22:9/0/terrain = 0 +22:9/0/terrains_peering_bit/right_side = 0 +22:9/0/terrains_peering_bit/bottom_right_corner = 0 +22:9/0/terrains_peering_bit/bottom_side = 0 +22:9/0/terrains_peering_bit/left_side = 0 +22:9/0/terrains_peering_bit/top_left_corner = 0 +22:9/0/terrains_peering_bit/top_side = 0 +22:9/0/terrains_peering_bit/top_right_corner = 0 +22:8/0 = 0 +22:8/0/terrain_set = 0 +22:8/0/terrain = 0 +22:8/0/terrains_peering_bit/right_side = 0 +22:8/0/terrains_peering_bit/bottom_right_corner = 0 +22:8/0/terrains_peering_bit/bottom_side = 0 +22:8/0/terrains_peering_bit/bottom_left_corner = 0 +22:8/0/terrains_peering_bit/left_side = 0 +22:8/0/terrains_peering_bit/top_left_corner = 0 +22:8/0/terrains_peering_bit/top_side = 0 +22:8/0/terrains_peering_bit/top_right_corner = 0 +22:7/0 = 0 +22:7/0/terrain_set = 0 +22:7/0/terrain = 0 +22:7/0/terrains_peering_bit/right_side = 0 +22:7/0/terrains_peering_bit/bottom_right_corner = 0 +22:7/0/terrains_peering_bit/bottom_side = 0 +22:7/0/terrains_peering_bit/bottom_left_corner = 0 +22:7/0/terrains_peering_bit/left_side = 0 +22:7/0/terrains_peering_bit/top_left_corner = 0 +22:7/0/terrains_peering_bit/top_side = 0 +22:7/0/terrains_peering_bit/top_right_corner = 0 +22:6/0 = 0 +22:6/0/terrain_set = 0 +22:6/0/terrain = 0 +22:6/0/terrains_peering_bit/right_side = 0 +22:6/0/terrains_peering_bit/bottom_right_corner = 0 +22:6/0/terrains_peering_bit/bottom_side = 0 +22:6/0/terrains_peering_bit/bottom_left_corner = 0 +22:6/0/terrains_peering_bit/left_side = 0 +22:6/0/terrains_peering_bit/top_left_corner = 0 +22:6/0/terrains_peering_bit/top_side = 0 +22:6/0/terrains_peering_bit/top_right_corner = 0 +22:5/0 = 0 +22:5/0/terrain_set = 0 +22:5/0/terrain = 0 +22:5/0/terrains_peering_bit/right_side = 0 +22:5/0/terrains_peering_bit/bottom_right_corner = 0 +22:5/0/terrains_peering_bit/bottom_side = 0 +22:5/0/terrains_peering_bit/bottom_left_corner = 0 +22:5/0/terrains_peering_bit/left_side = 0 +22:5/0/terrains_peering_bit/top_left_corner = 0 +22:5/0/terrains_peering_bit/top_side = 0 +22:5/0/terrains_peering_bit/top_right_corner = 0 +22:4/0 = 0 +22:4/0/terrain_set = 0 +22:4/0/terrain = 0 +22:4/0/terrains_peering_bit/right_side = 0 +22:4/0/terrains_peering_bit/bottom_right_corner = 0 +22:4/0/terrains_peering_bit/bottom_side = 0 +22:4/0/terrains_peering_bit/bottom_left_corner = 0 +22:4/0/terrains_peering_bit/left_side = 0 +22:4/0/terrains_peering_bit/top_left_corner = 0 +22:4/0/terrains_peering_bit/top_side = 0 +22:4/0/terrains_peering_bit/top_right_corner = 0 +22:3/0 = 0 +22:3/0/terrain_set = 0 +22:3/0/terrain = 0 +22:3/0/terrains_peering_bit/right_side = 0 +22:3/0/terrains_peering_bit/bottom_right_corner = 0 +22:3/0/terrains_peering_bit/bottom_side = 0 +22:3/0/terrains_peering_bit/bottom_left_corner = 0 +22:3/0/terrains_peering_bit/left_side = 0 +22:3/0/terrains_peering_bit/top_left_corner = 0 +22:3/0/terrains_peering_bit/top_side = 0 +22:3/0/terrains_peering_bit/top_right_corner = 0 +22:2/0 = 0 +22:2/0/terrain_set = 0 +22:2/0/terrain = 0 +22:2/0/terrains_peering_bit/right_side = 0 +22:2/0/terrains_peering_bit/bottom_right_corner = 0 +22:2/0/terrains_peering_bit/bottom_side = 0 +22:2/0/terrains_peering_bit/bottom_left_corner = 0 +22:2/0/terrains_peering_bit/left_side = 0 +22:2/0/terrains_peering_bit/top_side = 0 +22:2/0/terrains_peering_bit/top_right_corner = 0 +23:2/0 = 0 +23:2/0/terrain_set = 0 +23:2/0/terrain = 0 +23:2/0/terrains_peering_bit/right_side = 0 +23:2/0/terrains_peering_bit/bottom_right_corner = 0 +23:2/0/terrains_peering_bit/bottom_side = 0 +23:2/0/terrains_peering_bit/bottom_left_corner = 0 +23:2/0/terrains_peering_bit/left_side = 0 +23:2/0/terrains_peering_bit/top_left_corner = 0 +23:2/0/terrains_peering_bit/top_side = 0 +23:2/0/terrains_peering_bit/top_right_corner = 0 +24:2/0 = 0 +24:2/0/terrain_set = 0 +24:2/0/terrain = 0 +24:2/0/terrains_peering_bit/right_side = 0 +24:2/0/terrains_peering_bit/bottom_right_corner = 0 +24:2/0/terrains_peering_bit/bottom_side = 0 +24:2/0/terrains_peering_bit/bottom_left_corner = 0 +24:2/0/terrains_peering_bit/left_side = 0 +24:2/0/terrains_peering_bit/top_left_corner = 0 +24:2/0/terrains_peering_bit/top_side = 0 +24:2/0/terrains_peering_bit/top_right_corner = 0 +25:2/0 = 0 +25:2/0/terrain_set = 0 +25:2/0/terrain = 0 +25:2/0/terrains_peering_bit/right_side = 0 +25:2/0/terrains_peering_bit/bottom_right_corner = 0 +25:2/0/terrains_peering_bit/bottom_side = 0 +25:2/0/terrains_peering_bit/bottom_left_corner = 0 +25:2/0/terrains_peering_bit/left_side = 0 +25:2/0/terrains_peering_bit/top_left_corner = 0 +25:2/0/terrains_peering_bit/top_side = 0 +25:2/0/terrains_peering_bit/top_right_corner = 0 +26:2/0 = 0 +26:2/0/terrain_set = 0 +26:2/0/terrain = 0 +26:2/0/terrains_peering_bit/right_side = 0 +26:2/0/terrains_peering_bit/bottom_right_corner = 0 +26:2/0/terrains_peering_bit/bottom_side = 0 +26:2/0/terrains_peering_bit/bottom_left_corner = 0 +26:2/0/terrains_peering_bit/left_side = 0 +26:2/0/terrains_peering_bit/top_left_corner = 0 +26:2/0/terrains_peering_bit/top_side = 0 +26:2/0/terrains_peering_bit/top_right_corner = 0 +27:2/0 = 0 +27:2/0/terrain_set = 0 +27:2/0/terrain = 0 +27:2/0/terrains_peering_bit/right_side = 0 +27:2/0/terrains_peering_bit/bottom_right_corner = 0 +27:2/0/terrains_peering_bit/bottom_side = 0 +27:2/0/terrains_peering_bit/bottom_left_corner = 0 +27:2/0/terrains_peering_bit/left_side = 0 +27:2/0/terrains_peering_bit/top_left_corner = 0 +27:2/0/terrains_peering_bit/top_side = 0 +27:2/0/terrains_peering_bit/top_right_corner = 0 +28:2/0 = 0 +28:2/0/terrain_set = 0 +28:2/0/terrain = 0 +28:2/0/terrains_peering_bit/right_side = 0 +28:2/0/terrains_peering_bit/bottom_right_corner = 0 +28:2/0/terrains_peering_bit/bottom_side = 0 +28:2/0/terrains_peering_bit/bottom_left_corner = 0 +28:2/0/terrains_peering_bit/left_side = 0 +28:2/0/terrains_peering_bit/top_left_corner = 0 +28:2/0/terrains_peering_bit/top_side = 0 +28:2/0/terrains_peering_bit/top_right_corner = 0 +29:2/0 = 0 +29:2/0/terrain_set = 0 +29:2/0/terrain = 0 +29:2/0/terrains_peering_bit/bottom_side = 0 +29:2/0/terrains_peering_bit/bottom_left_corner = 0 +29:2/0/terrains_peering_bit/left_side = 0 +29:2/0/terrains_peering_bit/top_left_corner = 0 +29:2/0/terrains_peering_bit/top_side = 0 +29:2/0/terrains_peering_bit/top_right_corner = 0 +27:8/0 = 0 +27:8/0/terrain_set = 0 +27:8/0/terrain = 0 +27:8/0/terrains_peering_bit/right_side = 0 +27:8/0/terrains_peering_bit/bottom_right_corner = 0 +27:8/0/terrains_peering_bit/bottom_side = 0 +27:8/0/terrains_peering_bit/bottom_left_corner = 0 +27:8/0/terrains_peering_bit/left_side = 0 +27:8/0/terrains_peering_bit/top_left_corner = 0 +27:8/0/terrains_peering_bit/top_side = 0 +27:8/0/terrains_peering_bit/top_right_corner = 0 +26:8/0 = 0 +26:8/0/terrain_set = 0 +26:8/0/terrain = 0 +26:8/0/terrains_peering_bit/right_side = 0 +26:8/0/terrains_peering_bit/bottom_right_corner = 0 +26:8/0/terrains_peering_bit/bottom_side = 0 +26:8/0/terrains_peering_bit/bottom_left_corner = 0 +26:8/0/terrains_peering_bit/left_side = 0 +26:8/0/terrains_peering_bit/top_left_corner = 0 +26:8/0/terrains_peering_bit/top_side = 0 +26:8/0/terrains_peering_bit/top_right_corner = 0 +23:8/0 = 0 +23:8/0/terrain_set = 0 +23:8/0/terrain = 0 +23:8/0/terrains_peering_bit/right_side = 0 +23:8/0/terrains_peering_bit/bottom_right_corner = 0 +23:8/0/terrains_peering_bit/bottom_side = 0 +23:8/0/terrains_peering_bit/bottom_left_corner = 0 +23:8/0/terrains_peering_bit/left_side = 0 +23:8/0/terrains_peering_bit/top_left_corner = 0 +23:8/0/terrains_peering_bit/top_side = 0 +23:8/0/terrains_peering_bit/top_right_corner = 0 +23:7/0 = 0 +23:7/0/terrain_set = 0 +23:7/0/terrain = 0 +23:7/0/terrains_peering_bit/right_side = 0 +23:7/0/terrains_peering_bit/bottom_right_corner = 0 +23:7/0/terrains_peering_bit/bottom_side = 0 +23:7/0/terrains_peering_bit/bottom_left_corner = 0 +23:7/0/terrains_peering_bit/left_side = 0 +23:7/0/terrains_peering_bit/top_left_corner = 0 +23:7/0/terrains_peering_bit/top_side = 0 +23:7/0/terrains_peering_bit/top_right_corner = 0 +23:6/0 = 0 +23:6/0/terrain_set = 0 +23:6/0/terrain = 0 +23:6/0/terrains_peering_bit/right_side = 0 +23:6/0/terrains_peering_bit/bottom_right_corner = 0 +23:6/0/terrains_peering_bit/bottom_side = 0 +23:6/0/terrains_peering_bit/bottom_left_corner = 0 +23:6/0/terrains_peering_bit/left_side = 0 +23:6/0/terrains_peering_bit/top_left_corner = 0 +23:6/0/terrains_peering_bit/top_side = 0 +23:6/0/terrains_peering_bit/top_right_corner = 0 +24:6/0 = 0 +24:6/0/terrain_set = 0 +24:6/0/terrain = 0 +24:6/0/terrains_peering_bit/right_side = 0 +24:6/0/terrains_peering_bit/bottom_right_corner = 0 +24:6/0/terrains_peering_bit/bottom_side = 0 +24:6/0/terrains_peering_bit/bottom_left_corner = 0 +24:6/0/terrains_peering_bit/left_side = 0 +24:6/0/terrains_peering_bit/top_left_corner = 0 +24:6/0/terrains_peering_bit/top_side = 0 +24:6/0/terrains_peering_bit/top_right_corner = 0 +24:5/0 = 0 +24:5/0/terrain_set = 0 +24:5/0/terrain = 0 +24:5/0/terrains_peering_bit/right_side = 0 +24:5/0/terrains_peering_bit/bottom_right_corner = 0 +24:5/0/terrains_peering_bit/bottom_side = 0 +24:5/0/terrains_peering_bit/bottom_left_corner = 0 +24:5/0/terrains_peering_bit/left_side = 0 +24:5/0/terrains_peering_bit/top_left_corner = 0 +24:5/0/terrains_peering_bit/top_side = 0 +24:5/0/terrains_peering_bit/top_right_corner = 0 +24:4/0 = 0 +24:4/0/terrain_set = 0 +24:4/0/terrain = 0 +24:4/0/terrains_peering_bit/right_side = 0 +24:4/0/terrains_peering_bit/bottom_right_corner = 0 +24:4/0/terrains_peering_bit/bottom_side = 0 +24:4/0/terrains_peering_bit/bottom_left_corner = 0 +24:4/0/terrains_peering_bit/left_side = 0 +24:4/0/terrains_peering_bit/top_left_corner = 0 +24:4/0/terrains_peering_bit/top_side = 0 +24:4/0/terrains_peering_bit/top_right_corner = 0 +25:4/0 = 0 +25:4/0/terrain_set = 0 +25:4/0/terrain = 0 +25:4/0/terrains_peering_bit/right_side = 0 +25:4/0/terrains_peering_bit/bottom_right_corner = 0 +25:4/0/terrains_peering_bit/bottom_side = 0 +25:4/0/terrains_peering_bit/bottom_left_corner = 0 +25:4/0/terrains_peering_bit/left_side = 0 +25:4/0/terrains_peering_bit/top_left_corner = 0 +25:4/0/terrains_peering_bit/top_side = 0 +25:4/0/terrains_peering_bit/top_right_corner = 0 +26:4/0 = 0 +26:4/0/terrain_set = 0 +26:4/0/terrain = 0 +26:4/0/terrains_peering_bit/right_side = 0 +26:4/0/terrains_peering_bit/bottom_right_corner = 0 +26:4/0/terrains_peering_bit/bottom_side = 0 +26:4/0/terrains_peering_bit/bottom_left_corner = 0 +26:4/0/terrains_peering_bit/left_side = 0 +26:4/0/terrains_peering_bit/top_left_corner = 0 +26:4/0/terrains_peering_bit/top_side = 0 +26:4/0/terrains_peering_bit/top_right_corner = 0 +27:4/0 = 0 +27:4/0/terrain_set = 0 +27:4/0/terrain = 0 +27:4/0/terrains_peering_bit/right_side = 0 +27:4/0/terrains_peering_bit/bottom_right_corner = 0 +27:4/0/terrains_peering_bit/bottom_side = 0 +27:4/0/terrains_peering_bit/bottom_left_corner = 0 +27:4/0/terrains_peering_bit/left_side = 0 +27:4/0/terrains_peering_bit/top_left_corner = 0 +27:4/0/terrains_peering_bit/top_side = 0 +27:4/0/terrains_peering_bit/top_right_corner = 0 +27:7/0 = 0 +27:7/0/terrain_set = 0 +27:7/0/terrain = 0 +27:7/0/terrains_peering_bit/right_side = 0 +27:7/0/terrains_peering_bit/bottom_right_corner = 0 +27:7/0/terrains_peering_bit/bottom_side = 0 +27:7/0/terrains_peering_bit/bottom_left_corner = 0 +27:7/0/terrains_peering_bit/left_side = 0 +27:7/0/terrains_peering_bit/top_left_corner = 0 +27:7/0/terrains_peering_bit/top_side = 0 +27:7/0/terrains_peering_bit/top_right_corner = 0 +26:7/0 = 0 +26:7/0/terrain_set = 0 +26:7/0/terrain = 0 +26:7/0/terrains_peering_bit/right_side = 0 +26:7/0/terrains_peering_bit/bottom_right_corner = 0 +26:7/0/terrains_peering_bit/bottom_side = 0 +26:7/0/terrains_peering_bit/bottom_left_corner = 0 +26:7/0/terrains_peering_bit/left_side = 0 +26:7/0/terrains_peering_bit/top_left_corner = 0 +26:7/0/terrains_peering_bit/top_side = 0 +26:7/0/terrains_peering_bit/top_right_corner = 0 +25:7/0 = 0 +25:7/0/terrain_set = 0 +25:7/0/terrain = 0 +25:7/0/terrains_peering_bit/right_side = 0 +25:7/0/terrains_peering_bit/bottom_right_corner = 0 +25:7/0/terrains_peering_bit/bottom_side = 0 +25:7/0/terrains_peering_bit/bottom_left_corner = 0 +25:7/0/terrains_peering_bit/left_side = 0 +25:7/0/terrains_peering_bit/top_left_corner = 0 +25:7/0/terrains_peering_bit/top_side = 0 +25:7/0/terrains_peering_bit/top_right_corner = 0 +25:6/0 = 0 +25:6/0/terrain_set = 0 +25:6/0/terrain = 0 +25:6/0/terrains_peering_bit/right_side = 0 +25:6/0/terrains_peering_bit/bottom_right_corner = 0 +25:6/0/terrains_peering_bit/bottom_side = 0 +25:6/0/terrains_peering_bit/bottom_left_corner = 0 +25:6/0/terrains_peering_bit/left_side = 0 +25:6/0/terrains_peering_bit/top_left_corner = 0 +25:6/0/terrains_peering_bit/top_side = 0 +25:6/0/terrains_peering_bit/top_right_corner = 0 +25:5/0 = 0 +25:5/0/terrain_set = 0 +25:5/0/terrain = 0 +25:5/0/terrains_peering_bit/right_side = 0 +25:5/0/terrains_peering_bit/bottom_right_corner = 0 +25:5/0/terrains_peering_bit/bottom_side = 0 +25:5/0/terrains_peering_bit/bottom_left_corner = 0 +25:5/0/terrains_peering_bit/left_side = 0 +25:5/0/terrains_peering_bit/top_left_corner = 0 +25:5/0/terrains_peering_bit/top_side = 0 +25:5/0/terrains_peering_bit/top_right_corner = 0 +26:3/0 = 0 +26:3/0/terrain_set = 0 +26:3/0/terrain = 0 +26:3/0/terrains_peering_bit/right_side = 0 +26:3/0/terrains_peering_bit/bottom_right_corner = 0 +26:3/0/terrains_peering_bit/bottom_side = 0 +26:3/0/terrains_peering_bit/bottom_left_corner = 0 +26:3/0/terrains_peering_bit/left_side = 0 +26:3/0/terrains_peering_bit/top_left_corner = 0 +26:3/0/terrains_peering_bit/top_side = 0 +26:3/0/terrains_peering_bit/top_right_corner = 0 +27:3/0 = 0 +27:3/0/terrain_set = 0 +27:3/0/terrain = 0 +27:3/0/terrains_peering_bit/right_side = 0 +27:3/0/terrains_peering_bit/bottom_right_corner = 0 +27:3/0/terrains_peering_bit/bottom_side = 0 +27:3/0/terrains_peering_bit/bottom_left_corner = 0 +27:3/0/terrains_peering_bit/left_side = 0 +27:3/0/terrains_peering_bit/top_left_corner = 0 +27:3/0/terrains_peering_bit/top_side = 0 +27:3/0/terrains_peering_bit/top_right_corner = 0 +27:5/0 = 0 +27:5/0/terrain_set = 0 +27:5/0/terrain = 0 +27:5/0/terrains_peering_bit/right_side = 0 +27:5/0/terrains_peering_bit/bottom_right_corner = 0 +27:5/0/terrains_peering_bit/bottom_side = 0 +27:5/0/terrains_peering_bit/bottom_left_corner = 0 +27:5/0/terrains_peering_bit/left_side = 0 +27:5/0/terrains_peering_bit/top_left_corner = 0 +27:5/0/terrains_peering_bit/top_side = 0 +27:5/0/terrains_peering_bit/top_right_corner = 0 +27:6/0 = 0 +27:6/0/terrain_set = 0 +27:6/0/terrain = 0 +27:6/0/terrains_peering_bit/right_side = 0 +27:6/0/terrains_peering_bit/bottom_right_corner = 0 +27:6/0/terrains_peering_bit/bottom_side = 0 +27:6/0/terrains_peering_bit/bottom_left_corner = 0 +27:6/0/terrains_peering_bit/left_side = 0 +27:6/0/terrains_peering_bit/top_left_corner = 0 +27:6/0/terrains_peering_bit/top_side = 0 +27:6/0/terrains_peering_bit/top_right_corner = 0 +26:6/0 = 0 +26:6/0/terrain_set = 0 +26:6/0/terrain = 0 +26:6/0/terrains_peering_bit/right_side = 0 +26:6/0/terrains_peering_bit/bottom_right_corner = 0 +26:6/0/terrains_peering_bit/bottom_side = 0 +26:6/0/terrains_peering_bit/bottom_left_corner = 0 +26:6/0/terrains_peering_bit/left_side = 0 +26:6/0/terrains_peering_bit/top_left_corner = 0 +26:6/0/terrains_peering_bit/top_side = 0 +26:6/0/terrains_peering_bit/top_right_corner = 0 +24:3/0 = 0 +24:3/0/terrain_set = 0 +24:3/0/terrain = 0 +24:3/0/terrains_peering_bit/right_side = 0 +24:3/0/terrains_peering_bit/bottom_right_corner = 0 +24:3/0/terrains_peering_bit/bottom_side = 0 +24:3/0/terrains_peering_bit/bottom_left_corner = 0 +24:3/0/terrains_peering_bit/left_side = 0 +24:3/0/terrains_peering_bit/top_left_corner = 0 +24:3/0/terrains_peering_bit/top_side = 0 +24:3/0/terrains_peering_bit/top_right_corner = 0 +23:3/0 = 0 +23:3/0/terrain_set = 0 +23:3/0/terrain = 0 +23:3/0/terrains_peering_bit/right_side = 0 +23:3/0/terrains_peering_bit/bottom_right_corner = 0 +23:3/0/terrains_peering_bit/bottom_side = 0 +23:3/0/terrains_peering_bit/bottom_left_corner = 0 +23:3/0/terrains_peering_bit/left_side = 0 +23:3/0/terrains_peering_bit/top_left_corner = 0 +23:3/0/terrains_peering_bit/top_side = 0 +23:3/0/terrains_peering_bit/top_right_corner = 0 +23:5/0 = 0 +23:5/0/terrain_set = 0 +23:5/0/terrain = 0 +23:5/0/terrains_peering_bit/right_side = 0 +23:5/0/terrains_peering_bit/bottom_right_corner = 0 +23:5/0/terrains_peering_bit/bottom_side = 0 +23:5/0/terrains_peering_bit/bottom_left_corner = 0 +23:5/0/terrains_peering_bit/left_side = 0 +23:5/0/terrains_peering_bit/top_left_corner = 0 +23:5/0/terrains_peering_bit/top_side = 0 +23:5/0/terrains_peering_bit/top_right_corner = 0 +23:4/0 = 0 +23:4/0/terrain_set = 0 +23:4/0/terrain = 0 +23:4/0/terrains_peering_bit/right_side = 0 +23:4/0/terrains_peering_bit/bottom_right_corner = 0 +23:4/0/terrains_peering_bit/bottom_side = 0 +23:4/0/terrains_peering_bit/bottom_left_corner = 0 +23:4/0/terrains_peering_bit/left_side = 0 +23:4/0/terrains_peering_bit/top_left_corner = 0 +23:4/0/terrains_peering_bit/top_side = 0 +23:4/0/terrains_peering_bit/top_right_corner = 0 +25:3/0 = 0 +25:3/0/terrain_set = 0 +25:3/0/terrain = 0 +25:3/0/terrains_peering_bit/right_side = 0 +25:3/0/terrains_peering_bit/bottom_right_corner = 0 +25:3/0/terrains_peering_bit/bottom_side = 0 +25:3/0/terrains_peering_bit/bottom_left_corner = 0 +25:3/0/terrains_peering_bit/left_side = 0 +25:3/0/terrains_peering_bit/top_left_corner = 0 +25:3/0/terrains_peering_bit/top_side = 0 +25:3/0/terrains_peering_bit/top_right_corner = 0 +26:5/0 = 0 +26:5/0/terrain_set = 0 +26:5/0/terrain = 0 +26:5/0/terrains_peering_bit/right_side = 0 +26:5/0/terrains_peering_bit/bottom_right_corner = 0 +26:5/0/terrains_peering_bit/bottom_side = 0 +26:5/0/terrains_peering_bit/bottom_left_corner = 0 +26:5/0/terrains_peering_bit/left_side = 0 +26:5/0/terrains_peering_bit/top_left_corner = 0 +26:5/0/terrains_peering_bit/top_side = 0 +26:5/0/terrains_peering_bit/top_right_corner = 0 +25:8/0 = 0 +25:8/0/terrain_set = 0 +25:8/0/terrain = 0 +25:8/0/terrains_peering_bit/right_side = 0 +25:8/0/terrains_peering_bit/bottom_right_corner = 0 +25:8/0/terrains_peering_bit/bottom_side = 0 +25:8/0/terrains_peering_bit/bottom_left_corner = 0 +25:8/0/terrains_peering_bit/left_side = 0 +25:8/0/terrains_peering_bit/top_left_corner = 0 +25:8/0/terrains_peering_bit/top_side = 0 +25:8/0/terrains_peering_bit/top_right_corner = 0 +24:8/0 = 0 +24:8/0/terrain_set = 0 +24:8/0/terrain = 0 +24:8/0/terrains_peering_bit/right_side = 0 +24:8/0/terrains_peering_bit/bottom_right_corner = 0 +24:8/0/terrains_peering_bit/bottom_side = 0 +24:8/0/terrains_peering_bit/bottom_left_corner = 0 +24:8/0/terrains_peering_bit/left_side = 0 +24:8/0/terrains_peering_bit/top_left_corner = 0 +24:8/0/terrains_peering_bit/top_side = 0 +24:8/0/terrains_peering_bit/top_right_corner = 0 +24:7/0 = 0 +24:7/0/terrain_set = 0 +24:7/0/terrain = 0 +24:7/0/terrains_peering_bit/right_side = 0 +24:7/0/terrains_peering_bit/bottom_right_corner = 0 +24:7/0/terrains_peering_bit/bottom_side = 0 +24:7/0/terrains_peering_bit/bottom_left_corner = 0 +24:7/0/terrains_peering_bit/left_side = 0 +24:7/0/terrains_peering_bit/top_left_corner = 0 +24:7/0/terrains_peering_bit/top_side = 0 +24:7/0/terrains_peering_bit/top_right_corner = 0 +22:10/0 = 0 +23:10/0 = 0 +24:10/0 = 0 +25:10/0 = 0 +26:10/0 = 0 +27:10/0 = 0 +28:10/0 = 0 +29:10/0 = 0 +19:13/0 = 0 +18:13/0 = 0 +20:13/0 = 0 +21:13/0 = 0 +18:16/0 = 0 +19:16/0 = 0 +19:17/0 = 0 +20:17/0 = 0 +21:17/0 = 0 +21:16/0 = 0 +20:16/0 = 0 +23:16/0 = 0 +24:16/0 = 0 +25:16/0 = 0 +28:16/0 = 0 +19:2/0 = 0 +24:12/0 = 0 +23:12/0 = 0 +18:2/0 = 0 +18:3/0 = 0 +17:2/0 = 0 +17:3/0 = 0 +17:14/0 = 0 +17:13/0 = 0 +18:14/0 = 0 + +[sub_resource type="TileSet" id="TileSet_8l3nt"] +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Terrain 0" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +sources/0 = SubResource("TileSetAtlasSource_op4cu") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_45d1s"] +texture = ExtResource("3_p70al") +1:4/size_in_atlas = Vector2i(30, 23) +1:4/0 = 0 +1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-129.79639, -88.211136, -84.430664, -80.65019, 5.040619, -167.60117, 91.99161, -114.674484, 93.25177, -65.528275, 120.97528, -83.1705, 136.0972, -80.65019, 118.454956, -30.24382, 146.17847, -15.121918, 132.31671, 40.325104, -1.2601624, 78.12985, -64.26811, 60.48764, -133.57687, 41.585236, -154.99957, -16.382065, -108.37369, -39.06494) + +[sub_resource type="TileSet" id="TileSet_y7y61"] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +sources/2 = SubResource("TileSetAtlasSource_45d1s") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_p70al"] +texture = ExtResource("3_gjpho") +10:6/0 = 0 +11:6/0 = 0 +11:7/0 = 0 +12:7/0 = 0 +12:8/0 = 0 +12:9/0 = 0 +12:10/0 = 0 +12:11/0 = 0 +11:11/0 = 0 +11:10/0 = 0 +11:9/0 = 0 +11:8/0 = 0 +10:8/0 = 0 +10:7/0 = 0 +12:6/0 = 0 +13:6/0 = 0 +10:9/0 = 0 +10:10/0 = 0 +10:11/0 = 0 +13:11/0 = 0 +13:10/0 = 0 +13:9/0 = 0 +13:8/0 = 0 +13:7/0 = 0 +14:7/0 = 0 +15:7/0 = 0 +14:6/0 = 0 +15:6/0 = 0 +16:6/0 = 0 +17:6/0 = 0 +18:6/0 = 0 +19:6/0 = 0 +20:6/0 = 0 +21:6/0 = 0 +21:7/0 = 0 +21:8/0 = 0 +21:9/0 = 0 +20:10/0 = 0 +19:11/0 = 0 +18:11/0 = 0 +17:11/0 = 0 +16:11/0 = 0 +15:11/0 = 0 +14:11/0 = 0 +20:11/0 = 0 +21:11/0 = 0 +21:10/0 = 0 +20:7/0 = 0 +19:7/0 = 0 +18:8/0 = 0 +17:8/0 = 0 +17:9/0 = 0 +16:9/0 = 0 +16:10/0 = 0 +15:10/0 = 0 +14:10/0 = 0 +14:9/0 = 0 +15:9/0 = 0 +16:8/0 = 0 +14:8/0 = 0 +15:8/0 = 0 +16:7/0 = 0 +17:7/0 = 0 +18:7/0 = 0 +19:8/0 = 0 +19:9/0 = 0 +18:9/0 = 0 +17:10/0 = 0 +18:10/0 = 0 +19:10/0 = 0 +20:8/0 = 0 +20:9/0 = 0 +25:10/0 = 0 +22:10/0 = 0 +23:10/0 = 0 +24:11/0 = 0 +25:11/0 = 0 +26:12/0 = 0 +27:12/0 = 0 +22:11/0 = 0 +23:11/0 = 0 +26:11/0 = 0 +27:11/0 = 0 +9:12/size_in_atlas = Vector2i(2, 2) +9:12/0 = 0 +11:5/0 = 0 +12:5/0 = 0 +13:5/0 = 0 +14:5/0 = 0 +15:5/0 = 0 +16:5/0 = 0 +17:5/0 = 0 +18:5/0 = 0 +19:5/0 = 0 +20:5/0 = 0 +21:5/0 = 0 +22:5/0 = 0 +22:6/0 = 0 +22:7/0 = 0 +22:8/0 = 0 +22:9/0 = 0 +23:5/0 = 0 +23:6/0 = 0 +23:7/0 = 0 +23:8/0 = 0 +23:9/0 = 0 +24:5/0 = 0 +24:6/0 = 0 +24:7/0 = 0 +24:8/0 = 0 +24:9/0 = 0 +24:10/0 = 0 +25:5/0 = 0 +25:6/0 = 0 +25:7/0 = 0 +25:8/0 = 0 +25:9/0 = 0 +26:5/0 = 0 +26:6/0 = 0 +26:7/0 = 0 +26:8/0 = 0 +26:9/0 = 0 +26:10/0 = 0 +27:5/0 = 0 +27:6/0 = 0 +27:7/0 = 0 +27:8/0 = 0 +27:9/0 = 0 +27:10/0 = 0 +28:5/0 = 0 +28:6/0 = 0 +28:7/0 = 0 +28:8/0 = 0 +28:9/0 = 0 +28:10/0 = 0 +28:11/0 = 0 +29:5/0 = 0 +29:6/0 = 0 +29:7/0 = 0 +29:8/0 = 0 +29:9/0 = 0 +29:10/0 = 0 +29:11/0 = 0 +30:5/0 = 0 +30:6/0 = 0 +30:7/0 = 0 +30:8/0 = 0 +30:9/0 = 0 +30:10/0 = 0 +30:11/0 = 0 +31:5/0 = 0 +31:6/0 = 0 +31:7/0 = 0 +31:8/0 = 0 +31:9/0 = 0 +31:10/0 = 0 +31:11/0 = 0 +32:5/0 = 0 +32:6/0 = 0 +32:7/0 = 0 +32:8/0 = 0 +32:9/0 = 0 +32:10/0 = 0 +32:11/0 = 0 +33:5/0 = 0 +33:6/0 = 0 +33:7/0 = 0 +33:8/0 = 0 +33:9/0 = 0 +33:10/0 = 0 +33:11/0 = 0 +34:5/0 = 0 +34:6/0 = 0 +34:7/0 = 0 +34:8/0 = 0 +34:9/0 = 0 +34:10/0 = 0 +34:11/0 = 0 +35:5/0 = 0 +35:6/0 = 0 +35:7/0 = 0 +35:8/0 = 0 +35:9/0 = 0 +35:10/0 = 0 +35:11/0 = 0 +36:5/0 = 0 +36:6/0 = 0 +36:7/0 = 0 +36:8/0 = 0 +36:9/0 = 0 +36:10/0 = 0 +36:11/0 = 0 +37:5/0 = 0 +37:6/0 = 0 +37:7/0 = 0 +37:8/0 = 0 +37:9/0 = 0 +37:10/0 = 0 +37:11/0 = 0 +38:5/0 = 0 +38:6/0 = 0 +38:7/0 = 0 +38:8/0 = 0 +38:9/0 = 0 +38:10/0 = 0 +38:11/0 = 0 +39:5/0 = 0 +39:6/0 = 0 +39:7/0 = 0 +39:8/0 = 0 +39:9/0 = 0 +39:10/0 = 0 +39:11/0 = 0 +40:5/0 = 0 +40:6/0 = 0 +40:7/0 = 0 +40:8/0 = 0 +40:9/0 = 0 +40:10/0 = 0 +40:11/0 = 0 +41:5/0 = 0 +41:6/0 = 0 +41:7/0 = 0 +41:8/0 = 0 +41:9/0 = 0 +41:10/0 = 0 +41:11/0 = 0 +42:5/0 = 0 +42:6/0 = 0 +42:7/0 = 0 +42:8/0 = 0 +42:9/0 = 0 +42:10/0 = 0 +42:11/0 = 0 +43:5/0 = 0 +43:6/0 = 0 +43:7/0 = 0 +43:8/0 = 0 +43:9/0 = 0 +43:10/0 = 0 +43:11/0 = 0 +44:5/0 = 0 +44:6/0 = 0 +44:7/0 = 0 +44:8/0 = 0 +44:9/0 = 0 +44:10/0 = 0 +44:11/0 = 0 +45:5/0 = 0 +45:6/0 = 0 +45:7/0 = 0 +45:8/0 = 0 +45:9/0 = 0 +45:10/0 = 0 +45:11/0 = 0 +46:5/0 = 0 +46:6/0 = 0 +46:7/0 = 0 +46:8/0 = 0 +46:9/0 = 0 +46:10/0 = 0 +46:11/0 = 0 +47:5/0 = 0 +47:6/0 = 0 +47:7/0 = 0 +47:8/0 = 0 +47:9/0 = 0 +47:10/0 = 0 +47:11/0 = 0 +48:5/0 = 0 +48:6/0 = 0 +48:7/0 = 0 +48:8/0 = 0 +48:9/0 = 0 +48:10/0 = 0 +48:11/0 = 0 +49:5/0 = 0 +49:6/0 = 0 +49:7/0 = 0 +49:8/0 = 0 +49:9/0 = 0 +49:10/0 = 0 +49:11/0 = 0 +50:5/0 = 0 +50:6/0 = 0 +50:7/0 = 0 +50:8/0 = 0 +50:9/0 = 0 +50:10/0 = 0 +50:11/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_33kev"] +texture = ExtResource("6_0ao37") +61:2/0 = 0 +61:3/0 = 0 +61:4/0 = 0 +61:5/0 = 0 +61:6/0 = 0 +61:7/0 = 0 +61:8/0 = 0 +60:8/0 = 0 +59:8/0 = 0 +59:7/0 = 0 +59:6/0 = 0 +59:5/0 = 0 +59:4/0 = 0 +59:3/0 = 0 +59:2/0 = 0 +60:2/0 = 0 +60:3/0 = 0 +60:4/0 = 0 +60:5/0 = 0 +60:6/0 = 0 +60:7/0 = 0 + +[sub_resource type="TileSet" id="TileSet_45d1s"] +sources/0 = SubResource("TileSetAtlasSource_p70al") +sources/1 = SubResource("TileSetAtlasSource_33kev") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_waglr"] +texture = ExtResource("13_8l3nt") +17:13/0 = 0 +18:13/0 = 0 +18:14/0 = 0 +18:15/0 = 0 +18:16/0 = 0 +18:17/0 = 0 +17:17/0 = 0 +17:16/0 = 0 +17:15/0 = 0 +17:14/0 = 0 +19:13/0 = 0 +19:14/0 = 0 +19:15/0 = 0 +19:16/0 = 0 +19:17/0 = 0 +19:18/0 = 0 +16:17/0 = 0 +16:16/0 = 0 +16:15/0 = 0 +16:14/0 = 0 +16:13/0 = 0 +18:18/0 = 0 +17:18/0 = 0 +16:18/0 = 0 +2:11/0 = 0 +3:11/0 = 0 +3:12/0 = 0 +3:13/0 = 0 +3:14/0 = 0 +3:15/0 = 0 +3:16/0 = 0 +3:17/0 = 0 +3:18/0 = 0 +2:18/0 = 0 +2:17/0 = 0 +2:16/0 = 0 +2:15/0 = 0 +2:14/0 = 0 +2:13/0 = 0 +2:12/0 = 0 +1:6/0 = 0 +2:6/0 = 0 +3:6/0 = 0 +3:5/0 = 0 +2:5/0 = 0 +1:5/0 = 0 +0:5/0 = 0 +2:7/0 = 0 +1:7/0 = 0 +1:8/0 = 0 +0:6/0 = 0 +0:7/0 = 0 +0:8/0 = 0 +2:8/0 = 0 +3:8/0 = 0 +4:8/0 = 0 +5:8/0 = 0 +4:6/0 = 0 +4:7/0 = 0 +5:7/0 = 0 +3:7/0 = 0 +5:6/0 = 0 +6:6/0 = 0 +7:6/0 = 0 +8:6/0 = 0 +9:6/0 = 0 +10:6/0 = 0 +11:6/0 = 0 +12:6/0 = 0 +13:6/0 = 0 +13:7/0 = 0 +14:7/0 = 0 +15:7/0 = 0 +16:7/0 = 0 +17:7/0 = 0 +18:7/0 = 0 +17:6/0 = 0 +16:6/0 = 0 +15:6/0 = 0 +14:6/0 = 0 +6:5/0 = 0 +7:5/0 = 0 +8:5/0 = 0 +9:5/0 = 0 +10:5/0 = 0 +11:5/0 = 0 +12:5/0 = 0 +13:5/0 = 0 +14:5/0 = 0 +12:7/0 = 0 +11:7/0 = 0 +10:7/0 = 0 +9:7/0 = 0 +8:7/0 = 0 +7:7/0 = 0 +6:7/0 = 0 +12:8/0 = 0 +11:8/0 = 0 +10:8/0 = 0 +9:8/0 = 0 +8:8/0 = 0 +7:8/0 = 0 +6:8/0 = 0 +1:9/0 = 0 +0:9/0 = 0 +2:9/0 = 0 +3:9/0 = 0 +4:9/0 = 0 +5:9/0 = 0 +6:9/0 = 0 +7:9/0 = 0 +8:9/0 = 0 +9:9/0 = 0 +10:9/0 = 0 +11:9/0 = 0 +12:9/0 = 0 +13:9/0 = 0 +14:9/0 = 0 +15:9/0 = 0 +16:9/0 = 0 +15:8/0 = 0 +14:8/0 = 0 +13:8/0 = 0 +16:8/0 = 0 +14:28/0 = 0 +15:28/0 = 0 +16:28/0 = 0 +16:27/0 = 0 +15:27/0 = 0 +14:27/0 = 0 +17:28/0 = 0 +17:29/0 = 0 +16:29/0 = 0 +15:29/0 = 0 +14:29/0 = 0 +14:30/0 = 0 +15:30/0 = 0 +15:31/0 = 0 +16:31/0 = 0 +17:31/0 = 0 +17:30/0 = 0 +18:30/0 = 0 +14:31/0 = 0 +18:31/0 = 0 +19:31/0 = 0 +19:30/0 = 0 +19:29/0 = 0 +19:28/0 = 0 +18:28/0 = 0 +18:29/0 = 0 +18:27/0 = 0 +17:27/0 = 0 +17:26/0 = 0 +19:27/0 = 0 +19:26/0 = 0 +18:26/0 = 0 +19:25/0 = 0 +18:25/0 = 0 +17:25/0 = 0 +0:34/0 = 0 +1:34/0 = 0 +2:34/0 = 0 +3:34/0 = 0 +3:35/0 = 0 +3:36/0 = 0 +3:37/0 = 0 +2:37/0 = 0 +2:38/0 = 0 +1:38/0 = 0 +1:37/0 = 0 +0:37/0 = 0 +0:36/0 = 0 +0:35/0 = 0 +1:35/0 = 0 +2:35/0 = 0 +2:36/0 = 0 +1:36/0 = 0 +0:38/0 = 0 +3:38/0 = 0 +5:14/0 = 0 +5:13/0 = 0 +5:12/0 = 0 +5:11/0 = 0 +4:12/0 = 0 +4:13/0 = 0 +4:11/0 = 0 +6:11/0 = 0 +7:11/0 = 0 +8:11/0 = 0 +8:12/0 = 0 +8:13/0 = 0 +7:13/0 = 0 +6:13/0 = 0 +6:12/0 = 0 +7:12/0 = 0 +7:14/0 = 0 +8:14/0 = 0 +6:14/0 = 0 +4:14/0 = 0 +3:28/0 = 0 +2:28/0 = 0 +1:28/0 = 0 +1:27/0 = 0 +1:26/0 = 0 +1:25/0 = 0 +2:25/0 = 0 +3:25/0 = 0 +3:26/0 = 0 +2:27/0 = 0 +2:29/0 = 0 +2:26/0 = 0 +3:27/0 = 0 +3:29/0 = 0 +1:24/0 = 0 +1:23/0 = 0 +0:23/0 = 0 +0:24/0 = 0 +0:25/0 = 0 +0:26/0 = 0 +0:27/0 = 0 +0:28/0 = 0 +2:24/0 = 0 +2:23/0 = 0 +3:23/0 = 0 +3:24/0 = 0 +2:22/0 = 0 +2:21/0 = 0 +2:20/0 = 0 +2:19/0 = 0 +3:22/0 = 0 +3:21/0 = 0 +3:20/0 = 0 +3:19/0 = 0 +1:22/0 = 0 +1:21/0 = 0 +1:20/0 = 0 +1:19/0 = 0 +0:21/0 = 0 +0:22/0 = 0 +0:20/0 = 0 +0:19/0 = 0 +1:18/0 = 0 +0:18/0 = 0 +1:17/0 = 0 +1:16/0 = 0 +1:15/0 = 0 +2:10/0 = 0 +1:10/0 = 0 +1:11/0 = 0 +1:12/0 = 0 +0:12/0 = 0 +0:11/0 = 0 +3:10/0 = 0 +1:13/0 = 0 +1:14/0 = 0 +0:14/0 = 0 +0:15/0 = 0 +0:16/0 = 0 +0:13/0 = 0 +0:17/0 = 0 +0:10/0 = 0 +4:23/0 = 0 +4:22/0 = 0 +4:21/0 = 0 +4:20/0 = 0 +5:20/0 = 0 +6:20/0 = 0 +7:20/0 = 0 +8:20/0 = 0 +9:20/0 = 0 +10:20/0 = 0 +11:20/0 = 0 +12:20/0 = 0 +13:20/0 = 0 +14:19/0 = 0 +15:19/0 = 0 +16:19/0 = 0 +16:20/0 = 0 +16:21/0 = 0 +15:21/0 = 0 +15:22/0 = 0 +14:22/0 = 0 +14:21/0 = 0 +15:20/0 = 0 +14:20/0 = 0 +13:22/0 = 0 +12:22/0 = 0 +12:21/0 = 0 +17:20/0 = 0 +17:21/0 = 0 +13:23/0 = 0 +12:23/0 = 0 +14:23/0 = 0 +11:22/0 = 0 +10:22/0 = 0 +9:22/0 = 0 +8:22/0 = 0 +7:22/0 = 0 +6:22/0 = 0 +15:23/0 = 0 +11:23/0 = 0 +10:23/0 = 0 +9:23/0 = 0 +8:23/0 = 0 +7:23/0 = 0 +6:23/0 = 0 +5:23/0 = 0 +5:22/0 = 0 +5:21/0 = 0 +6:21/0 = 0 +7:21/0 = 0 +11:21/0 = 0 +10:21/0 = 0 +9:21/0 = 0 +8:21/0 = 0 +13:21/0 = 0 +7:19/0 = 0 +8:19/0 = 0 +9:19/0 = 0 +10:19/0 = 0 +11:19/0 = 0 +12:19/0 = 0 +13:19/0 = 0 +17:19/0 = 0 +5:19/0 = 0 +6:19/0 = 0 +4:19/0 = 0 +5:28/0 = 0 +5:27/0 = 0 +5:26/0 = 0 +5:25/0 = 0 +4:25/0 = 0 +6:25/0 = 0 +6:26/0 = 0 +7:26/0 = 0 +8:26/0 = 0 +9:25/0 = 0 +10:25/0 = 0 +11:25/0 = 0 +12:25/0 = 0 +13:25/0 = 0 +14:25/0 = 0 +8:25/0 = 0 +7:25/0 = 0 +13:26/0 = 0 +13:27/0 = 0 +12:27/0 = 0 +4:26/0 = 0 +4:27/0 = 0 +4:28/0 = 0 +6:27/0 = 0 +7:27/0 = 0 +7:28/0 = 0 +6:28/0 = 0 +8:28/0 = 0 +9:28/0 = 0 +10:28/0 = 0 +11:28/0 = 0 +12:28/0 = 0 +13:28/0 = 0 +11:27/0 = 0 +10:27/0 = 0 +9:27/0 = 0 +8:27/0 = 0 +9:26/0 = 0 +10:26/0 = 0 +11:26/0 = 0 +12:26/0 = 0 +14:26/0 = 0 +15:26/0 = 0 +15:25/0 = 0 +15:24/0 = 0 +14:24/0 = 0 +13:24/0 = 0 +12:24/0 = 0 +11:24/0 = 0 +10:24/0 = 0 +9:24/0 = 0 +8:24/0 = 0 +5:24/0 = 0 +4:24/0 = 0 +6:24/0 = 0 +7:24/0 = 0 +4:15/0 = 0 +5:15/0 = 0 +6:15/0 = 0 +6:16/0 = 0 +7:16/0 = 0 +7:17/0 = 0 +7:15/0 = 0 +4:16/0 = 0 +5:16/0 = 0 +5:17/0 = 0 +4:18/0 = 0 +4:17/0 = 0 +7:18/0 = 0 +6:18/0 = 0 +5:18/0 = 0 +6:17/0 = 0 +8:17/0 = 0 +8:18/0 = 0 +9:18/0 = 0 +10:18/0 = 0 +8:16/0 = 0 +9:16/0 = 0 +10:16/0 = 0 +11:17/0 = 0 +11:18/0 = 0 +9:17/0 = 0 +10:17/0 = 0 +11:16/0 = 0 +1:39/0 = 0 +0:39/0 = 0 +0:40/0 = 0 +0:41/0 = 0 +1:41/0 = 0 +1:42/0 = 0 +2:42/0 = 0 +0:42/0 = 0 +3:42/0 = 0 +4:42/0 = 0 +5:42/0 = 0 +6:42/0 = 0 +6:41/0 = 0 +7:41/0 = 0 +7:40/0 = 0 +6:40/0 = 0 +5:40/0 = 0 +4:40/0 = 0 +3:40/0 = 0 +2:41/0 = 0 +1:40/0 = 0 +2:39/0 = 0 +3:39/0 = 0 +4:39/0 = 0 +5:39/0 = 0 +6:39/0 = 0 +7:39/0 = 0 +4:38/0 = 0 +4:37/0 = 0 +5:38/0 = 0 +5:37/0 = 0 +6:37/0 = 0 +7:37/0 = 0 +7:38/0 = 0 +6:38/0 = 0 +7:36/0 = 0 +6:35/0 = 0 +5:35/0 = 0 +4:35/0 = 0 +5:34/0 = 0 +6:34/0 = 0 +7:34/0 = 0 +7:35/0 = 0 +6:36/0 = 0 +5:36/0 = 0 +4:36/0 = 0 +2:40/0 = 0 +4:41/0 = 0 +5:41/0 = 0 +3:41/0 = 0 +10:0/0 = 0 +11:0/0 = 0 +12:0/0 = 0 +13:0/0 = 0 +14:0/0 = 0 +14:1/0 = 0 +14:2/0 = 0 +14:3/0 = 0 +14:4/0 = 0 +13:4/0 = 0 +12:4/0 = 0 +11:4/0 = 0 +10:4/0 = 0 +10:3/0 = 0 +10:2/0 = 0 +10:1/0 = 0 +11:1/0 = 0 +12:1/0 = 0 +13:1/0 = 0 +13:2/0 = 0 +12:3/0 = 0 +11:3/0 = 0 +11:2/0 = 0 +12:2/0 = 0 +13:3/0 = 0 +16:22/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_rwt1y"] +texture = ExtResource("14_kwl8l") +29:6/0 = 0 +30:6/0 = 0 +30:7/0 = 0 +29:7/0 = 0 +29:8/0 = 0 +29:9/0 = 0 +30:9/0 = 0 +30:8/0 = 0 +30:10/0 = 0 +30:11/0 = 0 +29:11/0 = 0 +29:10/0 = 0 +6:0/0 = 0 +7:0/0 = 0 +8:0/0 = 0 +8:1/0 = 0 +8:2/0 = 0 +7:2/0 = 0 +7:1/0 = 0 +6:1/0 = 0 +6:2/0 = 0 +9:0/0 = 0 +9:1/0 = 0 +9:2/0 = 0 + +[sub_resource type="TileSet" id="TileSet_mvfa8"] +sources/0 = SubResource("TileSetAtlasSource_waglr") +sources/1 = SubResource("TileSetAtlasSource_rwt1y") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_mvfa8"] +texture = ExtResource("13_8l3nt") +0:39/0 = 0 +0:40/0 = 0 +0:41/0 = 0 +1:41/0 = 0 +1:42/0 = 0 +2:42/0 = 0 +3:42/0 = 0 +4:42/0 = 0 +5:42/0 = 0 +6:42/0 = 0 +6:41/0 = 0 +5:41/0 = 0 +4:40/0 = 0 +3:40/0 = 0 +2:40/0 = 0 +1:40/0 = 0 +1:39/0 = 0 +2:39/0 = 0 +3:39/0 = 0 +5:40/0 = 0 +6:40/0 = 0 +4:39/0 = 0 +3:38/0 = 0 +4:38/0 = 0 +5:39/0 = 0 +6:39/0 = 0 +6:38/0 = 0 +6:37/0 = 0 +6:36/0 = 0 +5:38/0 = 0 +5:37/0 = 0 +5:36/0 = 0 +5:35/0 = 0 +4:35/0 = 0 +4:36/0 = 0 +4:37/0 = 0 +6:35/0 = 0 +7:35/0 = 0 +7:36/0 = 0 +7:37/0 = 0 +7:38/0 = 0 +7:39/0 = 0 +7:40/0 = 0 +7:41/0 = 0 +7:42/0 = 0 +7:43/0 = 0 +6:43/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_r0dna"] +texture = ExtResource("14_kwl8l") +15:15/0 = 0 +16:15/0 = 0 +17:15/0 = 0 +18:15/0 = 0 +19:15/0 = 0 +20:15/0 = 0 +21:15/0 = 0 +21:16/0 = 0 +22:16/0 = 0 +22:17/0 = 0 +21:17/0 = 0 +20:17/0 = 0 +19:17/0 = 0 +19:16/0 = 0 +18:16/0 = 0 +17:16/0 = 0 +16:16/0 = 0 +15:16/0 = 0 +20:16/0 = 0 +18:17/0 = 0 +17:17/0 = 0 +2:17/0 = 0 +3:17/0 = 0 +4:17/0 = 0 +4:18/0 = 0 +4:19/0 = 0 +3:19/0 = 0 +3:18/0 = 0 +2:18/0 = 0 +22:15/0 = 0 + +[sub_resource type="TileSet" id="TileSet_b5aes"] +sources/0 = SubResource("TileSetAtlasSource_mvfa8") +sources/1 = SubResource("TileSetAtlasSource_r0dna") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_y7y61"] +texture = ExtResource("6_45d1s") +20:38/0 = 0 +20:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:13/0 = 0 +8:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:14/0 = 0 +8:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:15/0 = 0 +8:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:16/0 = 0 +8:16/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:17/0 = 0 +8:17/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:18/0 = 0 +8:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:19/0 = 0 +8:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:20/0 = 0 +8:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:21/0 = 0 +8:21/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:22/0 = 0 +8:22/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:23/0 = 0 +8:23/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:24/0 = 0 +8:24/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:25/0 = 0 +8:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:26/0 = 0 +8:26/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:27/0 = 0 +8:27/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:28/0 = 0 +8:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:29/0 = 0 +8:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:30/0 = 0 +8:30/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:31/0 = 0 +8:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:32/0 = 0 +8:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:33/0 = 0 +8:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:34/0 = 0 +8:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:35/0 = 0 +8:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:36/0 = 0 +8:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:37/0 = 0 +8:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:38/0 = 0 +8:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:39/0 = 0 +8:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:40/0 = 0 +8:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:41/0 = 0 +8:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:42/0 = 0 +8:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:43/0 = 0 +8:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:44/0 = 0 +8:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:45/0 = 0 +8:45/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:46/0 = 0 +8:46/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:47/0 = 0 +8:47/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:48/0 = 0 +8:48/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:49/0 = 0 +8:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:50/0 = 0 +8:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:51/0 = 0 +8:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:52/0 = 0 +8:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:53/0 = 0 +8:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:54/0 = 0 +8:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:55/0 = 0 +8:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:56/0 = 0 +8:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +8:57/0 = 0 +8:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:13/0 = 0 +9:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:14/0 = 0 +9:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:15/0 = 0 +9:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:16/0 = 0 +9:16/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:17/0 = 0 +9:17/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:18/0 = 0 +9:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:19/0 = 0 +9:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:20/0 = 0 +9:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:21/0 = 0 +9:21/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:22/0 = 0 +9:22/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:23/0 = 0 +9:23/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:24/0 = 0 +9:24/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:25/0 = 0 +9:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:26/0 = 0 +9:26/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:27/0 = 0 +9:27/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:28/0 = 0 +9:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:29/0 = 0 +9:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:30/0 = 0 +9:30/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:31/0 = 0 +9:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:32/0 = 0 +9:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:33/0 = 0 +9:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:34/0 = 0 +9:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:35/0 = 0 +9:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:36/0 = 0 +9:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:37/0 = 0 +9:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:38/0 = 0 +9:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:39/0 = 0 +9:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:40/0 = 0 +9:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:41/0 = 0 +9:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:42/0 = 0 +9:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:43/0 = 0 +9:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:44/0 = 0 +9:45/0 = 0 +9:46/0 = 0 +9:47/0 = 0 +9:48/0 = 0 +9:49/0 = 0 +9:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:50/0 = 0 +9:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:51/0 = 0 +9:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:52/0 = 0 +9:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:53/0 = 0 +9:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:54/0 = 0 +9:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:55/0 = 0 +9:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:56/0 = 0 +9:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +9:57/0 = 0 +9:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +10:13/0 = 0 +10:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +10:14/0 = 0 +10:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +10:15/0 = 0 +10:16/0 = 0 +10:16/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +10:17/0 = 0 +10:17/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +10:18/0 = 0 +10:19/0 = 0 +10:20/0 = 0 +10:21/0 = 0 +10:22/0 = 0 +10:23/0 = 0 +10:24/0 = 0 +10:25/0 = 0 +10:26/0 = 0 +10:27/0 = 0 +10:28/0 = 0 +10:29/0 = 0 +10:30/0 = 0 +10:31/0 = 0 +10:32/0 = 0 +10:33/0 = 0 +10:34/0 = 0 +10:35/0 = 0 +10:36/0 = 0 +10:37/0 = 0 +10:38/0 = 0 +10:39/0 = 0 +10:40/0 = 0 +10:41/0 = 0 +10:42/0 = 0 +10:43/0 = 0 +10:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +10:44/0 = 0 +10:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +10:45/0 = 0 +10:46/0 = 0 +10:47/0 = 0 +10:48/0 = 0 +10:49/0 = 0 +10:50/0 = 0 +10:51/0 = 0 +10:52/0 = 0 +10:53/0 = 0 +10:54/0 = 0 +10:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +10:55/0 = 0 +10:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +10:56/0 = 0 +10:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +10:57/0 = 0 +10:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +11:13/0 = 0 +11:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +11:14/0 = 0 +11:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +11:15/0 = 0 +11:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +11:16/0 = 0 +11:17/0 = 0 +11:18/0 = 0 +11:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +11:19/0 = 0 +11:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +11:20/0 = 0 +11:21/0 = 0 +11:22/0 = 0 +11:23/0 = 0 +11:24/0 = 0 +11:25/0 = 0 +11:26/0 = 0 +11:27/0 = 0 +11:28/0 = 0 +11:29/0 = 0 +11:30/0 = 0 +11:31/0 = 0 +11:32/0 = 0 +11:33/0 = 0 +11:34/0 = 0 +11:35/0 = 0 +11:36/0 = 0 +11:37/0 = 0 +11:38/0 = 0 +11:39/0 = 0 +11:40/0 = 0 +11:41/0 = 0 +11:42/0 = 0 +11:43/0 = 0 +11:44/0 = 0 +11:45/0 = 0 +11:46/0 = 0 +11:47/0 = 0 +11:48/0 = 0 +11:49/0 = 0 +11:50/0 = 0 +11:51/0 = 0 +11:52/0 = 0 +11:53/0 = 0 +11:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +11:54/0 = 0 +11:55/0 = 0 +11:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +11:56/0 = 0 +11:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +11:57/0 = 0 +11:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +12:13/0 = 0 +12:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +12:14/0 = 0 +12:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +12:15/0 = 0 +12:16/0 = 0 +12:16/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +12:17/0 = 0 +12:18/0 = 0 +12:19/0 = 0 +12:20/0 = 0 +12:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +12:21/0 = 0 +12:22/0 = 0 +12:23/0 = 0 +12:24/0 = 0 +12:25/0 = 0 +12:26/0 = 0 +12:27/0 = 0 +12:28/0 = 0 +12:29/0 = 0 +12:30/0 = 0 +12:31/0 = 0 +12:32/0 = 0 +12:33/0 = 0 +12:34/0 = 0 +12:35/0 = 0 +12:36/0 = 0 +12:37/0 = 0 +12:38/0 = 0 +12:39/0 = 0 +12:40/0 = 0 +12:41/0 = 0 +12:42/0 = 0 +12:43/0 = 0 +12:44/0 = 0 +12:45/0 = 0 +12:46/0 = 0 +12:47/0 = 0 +12:48/0 = 0 +12:49/0 = 0 +12:50/0 = 0 +12:51/0 = 0 +12:52/0 = 0 +12:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +12:53/0 = 0 +12:54/0 = 0 +12:55/0 = 0 +12:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +12:56/0 = 0 +12:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +12:57/0 = 0 +12:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +13:13/0 = 0 +13:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +13:14/0 = 0 +13:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +13:15/0 = 0 +13:16/0 = 0 +13:17/0 = 0 +13:17/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +13:18/0 = 0 +13:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +13:19/0 = 0 +13:20/0 = 0 +13:21/0 = 0 +13:21/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +13:22/0 = 0 +13:23/0 = 0 +13:24/0 = 0 +13:25/0 = 0 +13:26/0 = 0 +13:27/0 = 0 +13:28/0 = 0 +13:29/0 = 0 +13:30/0 = 0 +13:31/0 = 0 +13:32/0 = 0 +13:33/0 = 0 +13:34/0 = 0 +13:35/0 = 0 +13:36/0 = 0 +13:37/0 = 0 +13:38/0 = 0 +13:39/0 = 0 +13:40/0 = 0 +13:41/0 = 0 +13:42/0 = 0 +13:43/0 = 0 +13:44/0 = 0 +13:45/0 = 0 +13:46/0 = 0 +13:47/0 = 0 +13:48/0 = 0 +13:49/0 = 0 +13:50/0 = 0 +13:51/0 = 0 +13:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +13:52/0 = 0 +13:53/0 = 0 +13:54/0 = 0 +13:55/0 = 0 +13:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +13:56/0 = 0 +13:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +13:57/0 = 0 +13:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +14:13/0 = 0 +14:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +14:14/0 = 0 +14:15/0 = 0 +14:16/0 = 0 +14:17/0 = 0 +14:18/0 = 0 +14:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +14:19/0 = 0 +14:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +14:20/0 = 0 +14:21/0 = 0 +14:22/0 = 0 +14:22/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +14:23/0 = 0 +14:24/0 = 0 +14:25/0 = 0 +14:26/0 = 0 +14:27/0 = 0 +14:28/0 = 0 +14:29/0 = 0 +14:30/0 = 0 +14:31/0 = 0 +14:32/0 = 0 +14:33/0 = 0 +14:34/0 = 0 +14:35/0 = 0 +14:36/0 = 0 +14:37/0 = 0 +14:38/0 = 0 +14:39/0 = 0 +14:40/0 = 0 +14:41/0 = 0 +14:42/0 = 0 +14:43/0 = 0 +14:44/0 = 0 +14:45/0 = 0 +14:46/0 = 0 +14:47/0 = 0 +14:48/0 = 0 +14:49/0 = 0 +14:50/0 = 0 +14:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +14:51/0 = 0 +14:52/0 = 0 +14:53/0 = 0 +14:54/0 = 0 +14:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +14:55/0 = 0 +14:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +14:56/0 = 0 +14:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +14:57/0 = 0 +14:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:13/0 = 0 +15:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:14/0 = 0 +15:15/0 = 0 +15:16/0 = 0 +15:17/0 = 0 +15:18/0 = 0 +15:19/0 = 0 +15:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:20/0 = 0 +15:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:21/0 = 0 +15:21/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:22/0 = 0 +15:23/0 = 0 +15:23/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:24/0 = 0 +15:24/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:25/0 = 0 +15:26/0 = 0 +15:27/0 = 0 +15:28/0 = 0 +15:29/0 = 0 +15:30/0 = 0 +15:31/0 = 0 +15:32/0 = 0 +15:33/0 = 0 +15:34/0 = 0 +15:35/0 = 0 +15:36/0 = 0 +15:37/0 = 0 +15:38/0 = 0 +15:39/0 = 0 +15:40/0 = 0 +15:41/0 = 0 +15:42/0 = 0 +15:43/0 = 0 +15:44/0 = 0 +15:45/0 = 0 +15:46/0 = 0 +15:47/0 = 0 +15:48/0 = 0 +15:49/0 = 0 +15:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:50/0 = 0 +15:51/0 = 0 +15:52/0 = 0 +15:53/0 = 0 +15:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:54/0 = 0 +15:55/0 = 0 +15:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:56/0 = 0 +15:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +15:57/0 = 0 +15:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +16:13/0 = 0 +16:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +16:14/0 = 0 +16:15/0 = 0 +16:16/0 = 0 +16:17/0 = 0 +16:18/0 = 0 +16:19/0 = 0 +16:20/0 = 0 +16:21/0 = 0 +16:22/0 = 0 +16:22/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +16:23/0 = 0 +16:24/0 = 0 +16:25/0 = 0 +16:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +16:26/0 = 0 +16:27/0 = 0 +16:28/0 = 0 +16:29/0 = 0 +16:30/0 = 0 +16:31/0 = 0 +16:32/0 = 0 +16:33/0 = 0 +16:34/0 = 0 +16:35/0 = 0 +16:36/0 = 0 +16:37/0 = 0 +16:38/0 = 0 +16:39/0 = 0 +16:40/0 = 0 +16:41/0 = 0 +16:42/0 = 0 +16:43/0 = 0 +16:44/0 = 0 +16:45/0 = 0 +16:46/0 = 0 +16:47/0 = 0 +16:48/0 = 0 +16:48/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +16:49/0 = 0 +16:50/0 = 0 +16:51/0 = 0 +16:52/0 = 0 +16:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +16:53/0 = 0 +16:54/0 = 0 +16:55/0 = 0 +16:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +16:56/0 = 0 +16:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +16:57/0 = 0 +16:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:13/0 = 0 +17:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:14/0 = 0 +17:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:15/0 = 0 +17:16/0 = 0 +17:17/0 = 0 +17:18/0 = 0 +17:19/0 = 0 +17:20/0 = 0 +17:21/0 = 0 +17:22/0 = 0 +17:23/0 = 0 +17:23/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:24/0 = 0 +17:25/0 = 0 +17:26/0 = 0 +17:26/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:27/0 = 0 +17:27/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:28/0 = 0 +17:29/0 = 0 +17:30/0 = 0 +17:31/0 = 0 +17:32/0 = 0 +17:33/0 = 0 +17:34/0 = 0 +17:35/0 = 0 +17:36/0 = 0 +17:37/0 = 0 +17:38/0 = 0 +17:39/0 = 0 +17:40/0 = 0 +17:41/0 = 0 +17:42/0 = 0 +17:43/0 = 0 +17:44/0 = 0 +17:45/0 = 0 +17:46/0 = 0 +17:47/0 = 0 +17:47/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:48/0 = 0 +17:49/0 = 0 +17:50/0 = 0 +17:51/0 = 0 +17:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:52/0 = 0 +17:53/0 = 0 +17:54/0 = 0 +17:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:55/0 = 0 +17:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:56/0 = 0 +17:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +17:57/0 = 0 +17:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +18:13/0 = 0 +18:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +18:14/0 = 0 +18:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +18:15/0 = 0 +18:16/0 = 0 +18:17/0 = 0 +18:18/0 = 0 +18:19/0 = 0 +18:20/0 = 0 +18:21/0 = 0 +18:22/0 = 0 +18:23/0 = 0 +18:24/0 = 0 +18:24/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +18:25/0 = 0 +18:26/0 = 0 +18:27/0 = 0 +18:28/0 = 0 +18:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +18:29/0 = 0 +18:30/0 = 0 +18:31/0 = 0 +18:32/0 = 0 +18:33/0 = 0 +18:34/0 = 0 +18:35/0 = 0 +18:36/0 = 0 +18:37/0 = 0 +18:38/0 = 0 +18:39/0 = 0 +18:40/0 = 0 +18:41/0 = 0 +18:42/0 = 0 +18:43/0 = 0 +18:44/0 = 0 +18:45/0 = 0 +18:46/0 = 0 +18:46/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +18:47/0 = 0 +18:48/0 = 0 +18:49/0 = 0 +18:50/0 = 0 +18:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +18:51/0 = 0 +18:52/0 = 0 +18:53/0 = 0 +18:54/0 = 0 +18:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +18:55/0 = 0 +18:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +18:56/0 = 0 +18:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +18:57/0 = 0 +18:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:13/0 = 0 +19:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:14/0 = 0 +19:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:15/0 = 0 +19:16/0 = 0 +19:17/0 = 0 +19:18/0 = 0 +19:19/0 = 0 +19:20/0 = 0 +19:21/0 = 0 +19:22/0 = 0 +19:23/0 = 0 +19:24/0 = 0 +19:25/0 = 0 +19:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:26/0 = 0 +19:27/0 = 0 +19:28/0 = 0 +19:29/0 = 0 +19:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:30/0 = 0 +19:30/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:31/0 = 0 +19:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:32/0 = 0 +19:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:33/0 = 0 +19:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:34/0 = 0 +19:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:35/0 = 0 +19:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:36/0 = 0 +19:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:37/0 = 0 +19:38/0 = 0 +19:39/0 = 0 +19:40/0 = 0 +19:41/0 = 0 +19:42/0 = 0 +19:43/0 = 0 +19:44/0 = 0 +19:45/0 = 0 +19:45/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:46/0 = 0 +19:47/0 = 0 +19:48/0 = 0 +19:49/0 = 0 +19:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:50/0 = 0 +19:51/0 = 0 +19:52/0 = 0 +19:53/0 = 0 +19:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:54/0 = 0 +19:55/0 = 0 +19:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:56/0 = 0 +19:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +19:57/0 = 0 +19:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:13/0 = 0 +20:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:14/0 = 0 +20:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:15/0 = 0 +20:16/0 = 0 +20:17/0 = 0 +20:18/0 = 0 +20:19/0 = 0 +20:20/0 = 0 +20:21/0 = 0 +20:22/0 = 0 +20:23/0 = 0 +20:24/0 = 0 +20:25/0 = 0 +20:26/0 = 0 +20:26/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:27/0 = 0 +20:27/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:28/0 = 0 +20:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:29/0 = 0 +20:30/0 = 0 +20:31/0 = 0 +20:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:32/0 = 0 +20:33/0 = 0 +20:34/0 = 0 +20:35/0 = 0 +20:36/0 = 0 +20:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:37/0 = 0 +20:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:39/0 = 0 +20:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:40/0 = 0 +20:41/0 = 0 +20:42/0 = 0 +20:43/0 = 0 +20:44/0 = 0 +20:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:45/0 = 0 +20:45/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:46/0 = 0 +20:46/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:47/0 = 0 +20:47/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:48/0 = 0 +20:48/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:49/0 = 0 +20:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:50/0 = 0 +20:51/0 = 0 +20:52/0 = 0 +20:53/0 = 0 +20:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:54/0 = 0 +20:55/0 = 0 +20:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:56/0 = 0 +20:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +20:57/0 = 0 +20:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:13/0 = 0 +21:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:14/0 = 0 +21:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:15/0 = 0 +21:16/0 = 0 +21:17/0 = 0 +21:18/0 = 0 +21:19/0 = 0 +21:20/0 = 0 +21:21/0 = 0 +21:22/0 = 0 +21:23/0 = 0 +21:24/0 = 0 +21:25/0 = 0 +21:26/0 = 0 +21:26/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:27/0 = 0 +21:27/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:28/0 = 0 +21:29/0 = 0 +21:30/0 = 0 +21:31/0 = 0 +21:32/0 = 0 +21:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:33/0 = 0 +21:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:34/0 = 0 +21:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:35/0 = 0 +21:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:36/0 = 0 +21:37/0 = 0 +21:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:38/0 = 0 +21:39/0 = 0 +21:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:40/0 = 0 +21:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:41/0 = 0 +21:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:42/0 = 0 +21:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:43/0 = 0 +21:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:44/0 = 0 +21:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:45/0 = 0 +21:46/0 = 0 +21:47/0 = 0 +21:48/0 = 0 +21:48/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:49/0 = 0 +21:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:50/0 = 0 +21:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:51/0 = 0 +21:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:52/0 = 0 +21:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:53/0 = 0 +21:54/0 = 0 +21:55/0 = 0 +21:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:56/0 = 0 +21:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +21:57/0 = 0 +21:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:13/0 = 0 +22:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:14/0 = 0 +22:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:15/0 = 0 +22:16/0 = 0 +22:17/0 = 0 +22:18/0 = 0 +22:19/0 = 0 +22:20/0 = 0 +22:21/0 = 0 +22:22/0 = 0 +22:23/0 = 0 +22:24/0 = 0 +22:25/0 = 0 +22:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:26/0 = 0 +22:27/0 = 0 +22:28/0 = 0 +22:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:29/0 = 0 +22:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:30/0 = 0 +22:31/0 = 0 +22:32/0 = 0 +22:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:33/0 = 0 +22:34/0 = 0 +22:35/0 = 0 +22:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:36/0 = 0 +22:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:37/0 = 0 +22:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:38/0 = 0 +22:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:39/0 = 0 +22:40/0 = 0 +22:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:41/0 = 0 +22:42/0 = 0 +22:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:43/0 = 0 +22:44/0 = 0 +22:45/0 = 0 +22:46/0 = 0 +22:47/0 = 0 +22:47/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:48/0 = 0 +22:49/0 = 0 +22:50/0 = 0 +22:51/0 = 0 +22:52/0 = 0 +22:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:53/0 = 0 +22:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:54/0 = 0 +22:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:55/0 = 0 +22:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:56/0 = 0 +22:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +22:57/0 = 0 +22:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:13/0 = 0 +23:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:14/0 = 0 +23:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:15/0 = 0 +23:16/0 = 0 +23:17/0 = 0 +23:18/0 = 0 +23:19/0 = 0 +23:20/0 = 0 +23:21/0 = 0 +23:22/0 = 0 +23:23/0 = 0 +23:24/0 = 0 +23:25/0 = 0 +23:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:26/0 = 0 +23:27/0 = 0 +23:28/0 = 0 +23:29/0 = 0 +23:30/0 = 0 +23:30/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:31/0 = 0 +23:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:32/0 = 0 +23:33/0 = 0 +23:34/0 = 0 +23:35/0 = 0 +23:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:36/0 = 0 +23:37/0 = 0 +23:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:38/0 = 0 +23:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:39/0 = 0 +23:40/0 = 0 +23:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:41/0 = 0 +23:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:42/0 = 0 +23:43/0 = 0 +23:44/0 = 0 +23:45/0 = 0 +23:45/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:46/0 = 0 +23:46/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:47/0 = 0 +23:48/0 = 0 +23:49/0 = 0 +23:50/0 = 0 +23:51/0 = 0 +23:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:52/0 = 0 +23:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:53/0 = 0 +23:54/0 = 0 +23:55/0 = 0 +23:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:56/0 = 0 +23:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +23:57/0 = 0 +23:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:13/0 = 0 +24:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:14/0 = 0 +24:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:15/0 = 0 +24:16/0 = 0 +24:17/0 = 0 +24:18/0 = 0 +24:19/0 = 0 +24:20/0 = 0 +24:21/0 = 0 +24:22/0 = 0 +24:23/0 = 0 +24:24/0 = 0 +24:25/0 = 0 +24:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:26/0 = 0 +24:27/0 = 0 +24:28/0 = 0 +24:29/0 = 0 +24:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:30/0 = 0 +24:31/0 = 0 +24:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:32/0 = 0 +24:33/0 = 0 +24:34/0 = 0 +24:35/0 = 0 +24:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:36/0 = 0 +24:37/0 = 0 +24:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:38/0 = 0 +24:39/0 = 0 +24:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:40/0 = 0 +24:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:41/0 = 0 +24:42/0 = 0 +24:43/0 = 0 +24:44/0 = 0 +24:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:45/0 = 0 +24:46/0 = 0 +24:47/0 = 0 +24:48/0 = 0 +24:49/0 = 0 +24:50/0 = 0 +24:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:51/0 = 0 +24:52/0 = 0 +24:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:53/0 = 0 +24:54/0 = 0 +24:55/0 = 0 +24:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:56/0 = 0 +24:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +24:57/0 = 0 +24:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:13/0 = 0 +25:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:14/0 = 0 +25:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:15/0 = 0 +25:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:16/0 = 0 +25:17/0 = 0 +25:18/0 = 0 +25:19/0 = 0 +25:20/0 = 0 +25:21/0 = 0 +25:22/0 = 0 +25:23/0 = 0 +25:24/0 = 0 +25:25/0 = 0 +25:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:26/0 = 0 +25:27/0 = 0 +25:28/0 = 0 +25:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:29/0 = 0 +25:30/0 = 0 +25:31/0 = 0 +25:32/0 = 0 +25:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:33/0 = 0 +25:34/0 = 0 +25:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:35/0 = 0 +25:36/0 = 0 +25:37/0 = 0 +25:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:38/0 = 0 +25:39/0 = 0 +25:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:40/0 = 0 +25:41/0 = 0 +25:42/0 = 0 +25:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:43/0 = 0 +25:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:44/0 = 0 +25:45/0 = 0 +25:46/0 = 0 +25:47/0 = 0 +25:48/0 = 0 +25:49/0 = 0 +25:50/0 = 0 +25:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:51/0 = 0 +25:52/0 = 0 +25:53/0 = 0 +25:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:54/0 = 0 +25:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:55/0 = 0 +25:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:56/0 = 0 +25:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +25:57/0 = 0 +25:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:13/0 = 0 +26:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:14/0 = 0 +26:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:15/0 = 0 +26:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:16/0 = 0 +26:17/0 = 0 +26:18/0 = 0 +26:19/0 = 0 +26:20/0 = 0 +26:21/0 = 0 +26:22/0 = 0 +26:23/0 = 0 +26:24/0 = 0 +26:24/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:25/0 = 0 +26:26/0 = 0 +26:27/0 = 0 +26:28/0 = 0 +26:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:29/0 = 0 +26:30/0 = 0 +26:31/0 = 0 +26:32/0 = 0 +26:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +26:33/0 = 0 +26:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:34/0 = 0 +26:35/0 = 0 +26:36/0 = 0 +26:37/0 = 0 +26:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:38/0 = 0 +26:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:39/0 = 0 +26:40/0 = 0 +26:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:41/0 = 0 +26:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:42/0 = 0 +26:43/0 = 0 +26:44/0 = 0 +26:45/0 = 0 +26:46/0 = 0 +26:47/0 = 0 +26:48/0 = 0 +26:49/0 = 0 +26:50/0 = 0 +26:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:51/0 = 0 +26:52/0 = 0 +26:53/0 = 0 +26:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:54/0 = 0 +26:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:55/0 = 0 +26:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:56/0 = 0 +26:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +26:57/0 = 0 +26:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:13/0 = 0 +27:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:14/0 = 0 +27:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:15/0 = 0 +27:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:16/0 = 0 +27:17/0 = 0 +27:18/0 = 0 +27:19/0 = 0 +27:20/0 = 0 +27:21/0 = 0 +27:22/0 = 0 +27:23/0 = 0 +27:24/0 = 0 +27:24/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:25/0 = 0 +27:26/0 = 0 +27:27/0 = 0 +27:28/0 = 0 +27:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:29/0 = 0 +27:30/0 = 0 +27:31/0 = 0 +27:32/0 = 0 +27:33/0 = 0 +27:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:34/0 = 0 +27:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:35/0 = 0 +27:36/0 = 0 +27:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:37/0 = 0 +27:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:38/0 = 0 +27:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:39/0 = 0 +27:40/0 = 0 +27:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:41/0 = 0 +27:42/0 = 0 +27:43/0 = 0 +27:44/0 = 0 +27:45/0 = 0 +27:46/0 = 0 +27:47/0 = 0 +27:48/0 = 0 +27:49/0 = 0 +27:50/0 = 0 +27:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:51/0 = 0 +27:52/0 = 0 +27:53/0 = 0 +27:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:54/0 = 0 +27:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:55/0 = 0 +27:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:56/0 = 0 +27:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +27:57/0 = 0 +27:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:13/0 = 0 +28:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:14/0 = 0 +28:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:15/0 = 0 +28:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:16/0 = 0 +28:17/0 = 0 +28:18/0 = 0 +28:19/0 = 0 +28:20/0 = 0 +28:21/0 = 0 +28:22/0 = 0 +28:23/0 = 0 +28:24/0 = 0 +28:24/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:25/0 = 0 +28:26/0 = 0 +28:27/0 = 0 +28:28/0 = 0 +28:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:29/0 = 0 +28:30/0 = 0 +28:31/0 = 0 +28:32/0 = 0 +28:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:33/0 = 0 +28:34/0 = 0 +28:35/0 = 0 +28:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:36/0 = 0 +28:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:37/0 = 0 +28:38/0 = 0 +28:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:39/0 = 0 +28:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:40/0 = 0 +28:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:41/0 = 0 +28:42/0 = 0 +28:43/0 = 0 +28:44/0 = 0 +28:45/0 = 0 +28:46/0 = 0 +28:47/0 = 0 +28:48/0 = 0 +28:49/0 = 0 +28:50/0 = 0 +28:51/0 = 0 +28:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:52/0 = 0 +28:53/0 = 0 +28:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:54/0 = 0 +28:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:55/0 = 0 +28:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:56/0 = 0 +28:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +28:57/0 = 0 +28:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:13/0 = 0 +29:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:14/0 = 0 +29:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:15/0 = 0 +29:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:16/0 = 0 +29:17/0 = 0 +29:18/0 = 0 +29:19/0 = 0 +29:20/0 = 0 +29:21/0 = 0 +29:22/0 = 0 +29:23/0 = 0 +29:23/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:24/0 = 0 +29:25/0 = 0 +29:26/0 = 0 +29:27/0 = 0 +29:28/0 = 0 +29:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:29/0 = 0 +29:30/0 = 0 +29:30/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:31/0 = 0 +29:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:32/0 = 0 +29:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:33/0 = 0 +29:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:34/0 = 0 +29:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:35/0 = 0 +29:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:36/0 = 0 +29:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:37/0 = 0 +29:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:38/0 = 0 +29:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:39/0 = 0 +29:40/0 = 0 +29:41/0 = 0 +29:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:42/0 = 0 +29:43/0 = 0 +29:44/0 = 0 +29:45/0 = 0 +29:46/0 = 0 +29:47/0 = 0 +29:48/0 = 0 +29:49/0 = 0 +29:50/0 = 0 +29:51/0 = 0 +29:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:52/0 = 0 +29:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:53/0 = 0 +29:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:54/0 = 0 +29:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:55/0 = 0 +29:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:56/0 = 0 +29:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +29:57/0 = 0 +29:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:13/0 = 0 +30:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:14/0 = 0 +30:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:15/0 = 0 +30:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:16/0 = 0 +30:17/0 = 0 +30:18/0 = 0 +30:19/0 = 0 +30:20/0 = 0 +30:21/0 = 0 +30:22/0 = 0 +30:23/0 = 0 +30:23/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:24/0 = 0 +30:25/0 = 0 +30:26/0 = 0 +30:27/0 = 0 +30:28/0 = 0 +30:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:29/0 = 0 +30:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:30/0 = 0 +30:31/0 = 0 +30:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:32/0 = 0 +30:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:33/0 = 0 +30:34/0 = 0 +30:35/0 = 0 +30:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:36/0 = 0 +30:37/0 = 0 +30:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:38/0 = 0 +30:39/0 = 0 +30:40/0 = 0 +30:41/0 = 0 +30:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:42/0 = 0 +30:43/0 = 0 +30:44/0 = 0 +30:45/0 = 0 +30:46/0 = 0 +30:47/0 = 0 +30:48/0 = 0 +30:49/0 = 0 +30:50/0 = 0 +30:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:51/0 = 0 +30:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:52/0 = 0 +30:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:53/0 = 0 +30:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:54/0 = 0 +30:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:55/0 = 0 +30:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:56/0 = 0 +30:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +30:57/0 = 0 +30:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:13/0 = 0 +31:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:14/0 = 0 +31:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:15/0 = 0 +31:16/0 = 0 +31:17/0 = 0 +31:18/0 = 0 +31:19/0 = 0 +31:20/0 = 0 +31:21/0 = 0 +31:22/0 = 0 +31:23/0 = 0 +31:24/0 = 0 +31:24/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:25/0 = 0 +31:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:26/0 = 0 +31:26/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:27/0 = 0 +31:27/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:28/0 = 0 +31:29/0 = 0 +31:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:30/0 = 0 +31:30/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:31/0 = 0 +31:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:32/0 = 0 +31:33/0 = 0 +31:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:34/0 = 0 +31:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:35/0 = 0 +31:36/0 = 0 +31:37/0 = 0 +31:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:38/0 = 0 +31:39/0 = 0 +31:40/0 = 0 +31:41/0 = 0 +31:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:42/0 = 0 +31:43/0 = 0 +31:44/0 = 0 +31:45/0 = 0 +31:46/0 = 0 +31:47/0 = 0 +31:48/0 = 0 +31:48/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:49/0 = 0 +31:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:50/0 = 0 +31:51/0 = 0 +31:52/0 = 0 +31:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:53/0 = 0 +31:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:54/0 = 0 +31:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:55/0 = 0 +31:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:56/0 = 0 +31:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +31:57/0 = 0 +31:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:13/0 = 0 +32:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:14/0 = 0 +32:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:15/0 = 0 +32:16/0 = 0 +32:17/0 = 0 +32:18/0 = 0 +32:19/0 = 0 +32:20/0 = 0 +32:21/0 = 0 +32:22/0 = 0 +32:23/0 = 0 +32:24/0 = 0 +32:25/0 = 0 +32:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:26/0 = 0 +32:26/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:27/0 = 0 +32:27/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:28/0 = 0 +32:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:29/0 = 0 +32:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:30/0 = 0 +32:30/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:31/0 = 0 +32:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:32/0 = 0 +32:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:33/0 = 0 +32:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:34/0 = 0 +32:35/0 = 0 +32:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:36/0 = 0 +32:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:37/0 = 0 +32:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:38/0 = 0 +32:39/0 = 0 +32:40/0 = 0 +32:41/0 = 0 +32:42/0 = 0 +32:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:43/0 = 0 +32:44/0 = 0 +32:45/0 = 0 +32:46/0 = 0 +32:46/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:47/0 = 0 +32:47/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:48/0 = 0 +32:49/0 = 0 +32:50/0 = 0 +32:51/0 = 0 +32:52/0 = 0 +32:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:53/0 = 0 +32:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:54/0 = 0 +32:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:55/0 = 0 +32:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:56/0 = 0 +32:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +32:57/0 = 0 +32:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:13/0 = 0 +33:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:14/0 = 0 +33:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:15/0 = 0 +33:16/0 = 0 +33:17/0 = 0 +33:18/0 = 0 +33:19/0 = 0 +33:20/0 = 0 +33:21/0 = 0 +33:22/0 = 0 +33:23/0 = 0 +33:24/0 = 0 +33:25/0 = 0 +33:26/0 = 0 +33:27/0 = 0 +33:27/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:28/0 = 0 +33:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:29/0 = 0 +33:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:30/0 = 0 +33:31/0 = 0 +33:32/0 = 0 +33:33/0 = 0 +33:34/0 = 0 +33:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:35/0 = 0 +33:36/0 = 0 +33:37/0 = 0 +33:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:38/0 = 0 +33:39/0 = 0 +33:40/0 = 0 +33:41/0 = 0 +33:42/0 = 0 +33:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:43/0 = 0 +33:44/0 = 0 +33:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:45/0 = 0 +33:45/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:46/0 = 0 +33:47/0 = 0 +33:48/0 = 0 +33:49/0 = 0 +33:50/0 = 0 +33:51/0 = 0 +33:52/0 = 0 +33:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:53/0 = 0 +33:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:54/0 = 0 +33:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:55/0 = 0 +33:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:56/0 = 0 +33:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +33:57/0 = 0 +33:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:13/0 = 0 +34:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:14/0 = 0 +34:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:15/0 = 0 +34:16/0 = 0 +34:17/0 = 0 +34:18/0 = 0 +34:19/0 = 0 +34:20/0 = 0 +34:21/0 = 0 +34:22/0 = 0 +34:23/0 = 0 +34:24/0 = 0 +34:25/0 = 0 +34:26/0 = 0 +34:27/0 = 0 +34:28/0 = 0 +34:29/0 = 0 +34:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:30/0 = 0 +34:31/0 = 0 +34:32/0 = 0 +34:33/0 = 0 +34:34/0 = 0 +34:35/0 = 0 +34:36/0 = 0 +34:37/0 = 0 +34:38/0 = 0 +34:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:39/0 = 0 +34:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:40/0 = 0 +34:41/0 = 0 +34:42/0 = 0 +34:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:43/0 = 0 +34:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:44/0 = 0 +34:45/0 = 0 +34:46/0 = 0 +34:47/0 = 0 +34:48/0 = 0 +34:49/0 = 0 +34:50/0 = 0 +34:51/0 = 0 +34:52/0 = 0 +34:53/0 = 0 +34:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:54/0 = 0 +34:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:55/0 = 0 +34:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:56/0 = 0 +34:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +34:57/0 = 0 +34:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:13/0 = 0 +35:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:14/0 = 0 +35:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:15/0 = 0 +35:16/0 = 0 +35:17/0 = 0 +35:18/0 = 0 +35:19/0 = 0 +35:20/0 = 0 +35:21/0 = 0 +35:22/0 = 0 +35:23/0 = 0 +35:24/0 = 0 +35:25/0 = 0 +35:26/0 = 0 +35:27/0 = 0 +35:28/0 = 0 +35:29/0 = 0 +35:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:30/0 = 0 +35:30/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:31/0 = 0 +35:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:32/0 = 0 +35:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:33/0 = 0 +35:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:34/0 = 0 +35:35/0 = 0 +35:36/0 = 0 +35:37/0 = 0 +35:38/0 = 0 +35:39/0 = 0 +35:40/0 = 0 +35:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:41/0 = 0 +35:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:42/0 = 0 +35:43/0 = 0 +35:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:44/0 = 0 +35:45/0 = 0 +35:46/0 = 0 +35:47/0 = 0 +35:48/0 = 0 +35:49/0 = 0 +35:50/0 = 0 +35:51/0 = 0 +35:52/0 = 0 +35:53/0 = 0 +35:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:54/0 = 0 +35:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:55/0 = 0 +35:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:56/0 = 0 +35:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +35:57/0 = 0 +35:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:13/0 = 0 +36:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:14/0 = 0 +36:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:15/0 = 0 +36:16/0 = 0 +36:17/0 = 0 +36:18/0 = 0 +36:19/0 = 0 +36:20/0 = 0 +36:21/0 = 0 +36:22/0 = 0 +36:23/0 = 0 +36:24/0 = 0 +36:25/0 = 0 +36:26/0 = 0 +36:27/0 = 0 +36:28/0 = 0 +36:29/0 = 0 +36:30/0 = 0 +36:31/0 = 0 +36:32/0 = 0 +36:33/0 = 0 +36:34/0 = 0 +36:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:35/0 = 0 +36:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:36/0 = 0 +36:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:37/0 = 0 +36:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:38/0 = 0 +36:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:39/0 = 0 +36:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:40/0 = 0 +36:41/0 = 0 +36:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:42/0 = 0 +36:43/0 = 0 +36:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:44/0 = 0 +36:45/0 = 0 +36:46/0 = 0 +36:47/0 = 0 +36:48/0 = 0 +36:49/0 = 0 +36:50/0 = 0 +36:51/0 = 0 +36:52/0 = 0 +36:53/0 = 0 +36:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:54/0 = 0 +36:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:55/0 = 0 +36:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:56/0 = 0 +36:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +36:57/0 = 0 +36:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +37:13/0 = 0 +37:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +37:14/0 = 0 +37:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +37:15/0 = 0 +37:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +37:16/0 = 0 +37:17/0 = 0 +37:18/0 = 0 +37:19/0 = 0 +37:20/0 = 0 +37:21/0 = 0 +37:22/0 = 0 +37:23/0 = 0 +37:24/0 = 0 +37:25/0 = 0 +37:26/0 = 0 +37:27/0 = 0 +37:28/0 = 0 +37:29/0 = 0 +37:30/0 = 0 +37:31/0 = 0 +37:32/0 = 0 +37:33/0 = 0 +37:34/0 = 0 +37:35/0 = 0 +37:36/0 = 0 +37:37/0 = 0 +37:38/0 = 0 +37:39/0 = 0 +37:40/0 = 0 +37:41/0 = 0 +37:42/0 = 0 +37:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +37:43/0 = 0 +37:44/0 = 0 +37:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +37:45/0 = 0 +37:46/0 = 0 +37:47/0 = 0 +37:48/0 = 0 +37:49/0 = 0 +37:50/0 = 0 +37:51/0 = 0 +37:52/0 = 0 +37:53/0 = 0 +37:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +37:54/0 = 0 +37:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +37:55/0 = 0 +37:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +37:56/0 = 0 +37:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +37:57/0 = 0 +37:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +38:13/0 = 0 +38:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +38:14/0 = 0 +38:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +38:15/0 = 0 +38:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +38:16/0 = 0 +38:17/0 = 0 +38:18/0 = 0 +38:19/0 = 0 +38:20/0 = 0 +38:21/0 = 0 +38:22/0 = 0 +38:23/0 = 0 +38:24/0 = 0 +38:25/0 = 0 +38:26/0 = 0 +38:27/0 = 0 +38:28/0 = 0 +38:29/0 = 0 +38:30/0 = 0 +38:31/0 = 0 +38:32/0 = 0 +38:33/0 = 0 +38:34/0 = 0 +38:35/0 = 0 +38:36/0 = 0 +38:37/0 = 0 +38:38/0 = 0 +38:39/0 = 0 +38:40/0 = 0 +38:41/0 = 0 +38:42/0 = 0 +38:43/0 = 0 +38:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +38:44/0 = 0 +38:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +38:45/0 = 0 +38:46/0 = 0 +38:47/0 = 0 +38:48/0 = 0 +38:49/0 = 0 +38:50/0 = 0 +38:51/0 = 0 +38:52/0 = 0 +38:53/0 = 0 +38:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +38:54/0 = 0 +38:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +38:55/0 = 0 +38:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +38:56/0 = 0 +38:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +38:57/0 = 0 +38:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +39:13/0 = 0 +39:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +39:14/0 = 0 +39:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +39:15/0 = 0 +39:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +39:16/0 = 0 +39:17/0 = 0 +39:18/0 = 0 +39:19/0 = 0 +39:20/0 = 0 +39:21/0 = 0 +39:22/0 = 0 +39:23/0 = 0 +39:24/0 = 0 +39:25/0 = 0 +39:26/0 = 0 +39:27/0 = 0 +39:28/0 = 0 +39:29/0 = 0 +39:30/0 = 0 +39:31/0 = 0 +39:32/0 = 0 +39:33/0 = 0 +39:34/0 = 0 +39:35/0 = 0 +39:36/0 = 0 +39:37/0 = 0 +39:38/0 = 0 +39:39/0 = 0 +39:40/0 = 0 +39:41/0 = 0 +39:42/0 = 0 +39:43/0 = 0 +39:44/0 = 0 +39:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +39:45/0 = 0 +39:45/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +39:46/0 = 0 +39:47/0 = 0 +39:48/0 = 0 +39:49/0 = 0 +39:50/0 = 0 +39:51/0 = 0 +39:52/0 = 0 +39:53/0 = 0 +39:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +39:54/0 = 0 +39:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +39:55/0 = 0 +39:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +39:56/0 = 0 +39:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +39:57/0 = 0 +39:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +40:13/0 = 0 +40:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +40:14/0 = 0 +40:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +40:15/0 = 0 +40:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +40:16/0 = 0 +40:17/0 = 0 +40:18/0 = 0 +40:19/0 = 0 +40:20/0 = 0 +40:21/0 = 0 +40:22/0 = 0 +40:23/0 = 0 +40:24/0 = 0 +40:25/0 = 0 +40:26/0 = 0 +40:27/0 = 0 +40:28/0 = 0 +40:29/0 = 0 +40:30/0 = 0 +40:31/0 = 0 +40:32/0 = 0 +40:33/0 = 0 +40:34/0 = 0 +40:35/0 = 0 +40:36/0 = 0 +40:37/0 = 0 +40:38/0 = 0 +40:39/0 = 0 +40:40/0 = 0 +40:41/0 = 0 +40:42/0 = 0 +40:43/0 = 0 +40:44/0 = 0 +40:45/0 = 0 +40:45/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +40:46/0 = 0 +40:47/0 = 0 +40:48/0 = 0 +40:49/0 = 0 +40:50/0 = 0 +40:51/0 = 0 +40:52/0 = 0 +40:53/0 = 0 +40:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +40:54/0 = 0 +40:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +40:55/0 = 0 +40:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +40:56/0 = 0 +40:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +40:57/0 = 0 +40:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +41:13/0 = 0 +41:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +41:14/0 = 0 +41:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +41:15/0 = 0 +41:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +41:16/0 = 0 +41:17/0 = 0 +41:18/0 = 0 +41:19/0 = 0 +41:20/0 = 0 +41:21/0 = 0 +41:22/0 = 0 +41:23/0 = 0 +41:24/0 = 0 +41:25/0 = 0 +41:26/0 = 0 +41:27/0 = 0 +41:28/0 = 0 +41:29/0 = 0 +41:30/0 = 0 +41:31/0 = 0 +41:32/0 = 0 +41:33/0 = 0 +41:34/0 = 0 +41:35/0 = 0 +41:36/0 = 0 +41:37/0 = 0 +41:38/0 = 0 +41:39/0 = 0 +41:40/0 = 0 +41:41/0 = 0 +41:42/0 = 0 +41:43/0 = 0 +41:44/0 = 0 +41:45/0 = 0 +41:46/0 = 0 +41:46/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +41:47/0 = 0 +41:48/0 = 0 +41:49/0 = 0 +41:50/0 = 0 +41:51/0 = 0 +41:52/0 = 0 +41:53/0 = 0 +41:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +41:54/0 = 0 +41:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +41:55/0 = 0 +41:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +41:56/0 = 0 +41:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +41:57/0 = 0 +41:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +42:13/0 = 0 +42:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +42:14/0 = 0 +42:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +42:15/0 = 0 +42:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +42:16/0 = 0 +42:17/0 = 0 +42:18/0 = 0 +42:19/0 = 0 +42:20/0 = 0 +42:21/0 = 0 +42:22/0 = 0 +42:23/0 = 0 +42:24/0 = 0 +42:25/0 = 0 +42:26/0 = 0 +42:27/0 = 0 +42:28/0 = 0 +42:29/0 = 0 +42:30/0 = 0 +42:31/0 = 0 +42:32/0 = 0 +42:33/0 = 0 +42:34/0 = 0 +42:35/0 = 0 +42:36/0 = 0 +42:37/0 = 0 +42:38/0 = 0 +42:39/0 = 0 +42:40/0 = 0 +42:41/0 = 0 +42:42/0 = 0 +42:43/0 = 0 +42:44/0 = 0 +42:45/0 = 0 +42:46/0 = 0 +42:46/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +42:47/0 = 0 +42:47/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +42:48/0 = 0 +42:49/0 = 0 +42:50/0 = 0 +42:51/0 = 0 +42:52/0 = 0 +42:53/0 = 0 +42:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +42:54/0 = 0 +42:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +42:55/0 = 0 +42:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +42:56/0 = 0 +42:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +42:57/0 = 0 +42:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:13/0 = 0 +43:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:14/0 = 0 +43:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:15/0 = 0 +43:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:16/0 = 0 +43:17/0 = 0 +43:18/0 = 0 +43:19/0 = 0 +43:20/0 = 0 +43:21/0 = 0 +43:22/0 = 0 +43:23/0 = 0 +43:24/0 = 0 +43:25/0 = 0 +43:26/0 = 0 +43:27/0 = 0 +43:28/0 = 0 +43:29/0 = 0 +43:30/0 = 0 +43:31/0 = 0 +43:32/0 = 0 +43:33/0 = 0 +43:34/0 = 0 +43:35/0 = 0 +43:36/0 = 0 +43:37/0 = 0 +43:38/0 = 0 +43:39/0 = 0 +43:40/0 = 0 +43:41/0 = 0 +43:42/0 = 0 +43:43/0 = 0 +43:44/0 = 0 +43:45/0 = 0 +43:46/0 = 0 +43:47/0 = 0 +43:47/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:48/0 = 0 +43:48/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:49/0 = 0 +43:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:50/0 = 0 +43:51/0 = 0 +43:52/0 = 0 +43:53/0 = 0 +43:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:54/0 = 0 +43:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:55/0 = 0 +43:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:56/0 = 0 +43:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +43:57/0 = 0 +43:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:13/0 = 0 +44:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:14/0 = 0 +44:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:15/0 = 0 +44:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:16/0 = 0 +44:16/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:17/0 = 0 +44:18/0 = 0 +44:19/0 = 0 +44:20/0 = 0 +44:21/0 = 0 +44:22/0 = 0 +44:23/0 = 0 +44:24/0 = 0 +44:25/0 = 0 +44:26/0 = 0 +44:27/0 = 0 +44:28/0 = 0 +44:29/0 = 0 +44:30/0 = 0 +44:31/0 = 0 +44:32/0 = 0 +44:33/0 = 0 +44:34/0 = 0 +44:35/0 = 0 +44:36/0 = 0 +44:37/0 = 0 +44:38/0 = 0 +44:39/0 = 0 +44:40/0 = 0 +44:41/0 = 0 +44:42/0 = 0 +44:43/0 = 0 +44:44/0 = 0 +44:45/0 = 0 +44:46/0 = 0 +44:47/0 = 0 +44:47/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:48/0 = 0 +44:49/0 = 0 +44:50/0 = 0 +44:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:51/0 = 0 +44:52/0 = 0 +44:53/0 = 0 +44:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:54/0 = 0 +44:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:55/0 = 0 +44:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:56/0 = 0 +44:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +44:57/0 = 0 +44:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:13/0 = 0 +45:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:14/0 = 0 +45:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:15/0 = 0 +45:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:16/0 = 0 +45:16/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:17/0 = 0 +45:18/0 = 0 +45:19/0 = 0 +45:20/0 = 0 +45:21/0 = 0 +45:22/0 = 0 +45:23/0 = 0 +45:24/0 = 0 +45:25/0 = 0 +45:26/0 = 0 +45:27/0 = 0 +45:28/0 = 0 +45:29/0 = 0 +45:30/0 = 0 +45:31/0 = 0 +45:32/0 = 0 +45:33/0 = 0 +45:34/0 = 0 +45:35/0 = 0 +45:36/0 = 0 +45:37/0 = 0 +45:38/0 = 0 +45:39/0 = 0 +45:40/0 = 0 +45:41/0 = 0 +45:42/0 = 0 +45:43/0 = 0 +45:44/0 = 0 +45:45/0 = 0 +45:46/0 = 0 +45:47/0 = 0 +45:48/0 = 0 +45:48/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:49/0 = 0 +45:50/0 = 0 +45:51/0 = 0 +45:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:52/0 = 0 +45:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:53/0 = 0 +45:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:54/0 = 0 +45:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:55/0 = 0 +45:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:56/0 = 0 +45:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +45:57/0 = 0 +45:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:13/0 = 0 +46:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:14/0 = 0 +46:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:15/0 = 0 +46:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:16/0 = 0 +46:17/0 = 0 +46:18/0 = 0 +46:19/0 = 0 +46:20/0 = 0 +46:21/0 = 0 +46:22/0 = 0 +46:23/0 = 0 +46:24/0 = 0 +46:25/0 = 0 +46:26/0 = 0 +46:27/0 = 0 +46:28/0 = 0 +46:29/0 = 0 +46:30/0 = 0 +46:31/0 = 0 +46:32/0 = 0 +46:33/0 = 0 +46:34/0 = 0 +46:35/0 = 0 +46:36/0 = 0 +46:37/0 = 0 +46:38/0 = 0 +46:39/0 = 0 +46:40/0 = 0 +46:41/0 = 0 +46:42/0 = 0 +46:43/0 = 0 +46:44/0 = 0 +46:45/0 = 0 +46:46/0 = 0 +46:47/0 = 0 +46:48/0 = 0 +46:49/0 = 0 +46:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:50/0 = 0 +46:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:51/0 = 0 +46:52/0 = 0 +46:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:53/0 = 0 +46:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:54/0 = 0 +46:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:55/0 = 0 +46:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:56/0 = 0 +46:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +46:57/0 = 0 +46:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +47:13/0 = 0 +47:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +47:14/0 = 0 +47:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +47:15/0 = 0 +47:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +47:16/0 = 0 +47:17/0 = 0 +47:18/0 = 0 +47:19/0 = 0 +47:20/0 = 0 +47:21/0 = 0 +47:22/0 = 0 +47:23/0 = 0 +47:24/0 = 0 +47:25/0 = 0 +47:26/0 = 0 +47:27/0 = 0 +47:28/0 = 0 +47:29/0 = 0 +47:30/0 = 0 +47:31/0 = 0 +47:32/0 = 0 +47:33/0 = 0 +47:34/0 = 0 +47:35/0 = 0 +47:36/0 = 0 +47:37/0 = 0 +47:38/0 = 0 +47:39/0 = 0 +47:40/0 = 0 +47:41/0 = 0 +47:42/0 = 0 +47:43/0 = 0 +47:44/0 = 0 +47:45/0 = 0 +47:46/0 = 0 +47:47/0 = 0 +47:48/0 = 0 +47:49/0 = 0 +47:50/0 = 0 +47:51/0 = 0 +47:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +47:52/0 = 0 +47:53/0 = 0 +47:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +47:54/0 = 0 +47:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +47:55/0 = 0 +47:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +47:56/0 = 0 +47:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +47:57/0 = 0 +47:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +48:13/0 = 0 +48:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +48:14/0 = 0 +48:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +48:15/0 = 0 +48:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +48:16/0 = 0 +48:17/0 = 0 +48:18/0 = 0 +48:19/0 = 0 +48:20/0 = 0 +48:21/0 = 0 +48:22/0 = 0 +48:23/0 = 0 +48:24/0 = 0 +48:25/0 = 0 +48:26/0 = 0 +48:27/0 = 0 +48:28/0 = 0 +48:29/0 = 0 +48:30/0 = 0 +48:31/0 = 0 +48:32/0 = 0 +48:33/0 = 0 +48:34/0 = 0 +48:35/0 = 0 +48:36/0 = 0 +48:37/0 = 0 +48:38/0 = 0 +48:39/0 = 0 +48:40/0 = 0 +48:41/0 = 0 +48:42/0 = 0 +48:43/0 = 0 +48:44/0 = 0 +48:45/0 = 0 +48:46/0 = 0 +48:47/0 = 0 +48:48/0 = 0 +48:49/0 = 0 +48:50/0 = 0 +48:51/0 = 0 +48:52/0 = 0 +48:53/0 = 0 +48:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +48:54/0 = 0 +48:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +48:55/0 = 0 +48:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +48:56/0 = 0 +48:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +48:57/0 = 0 +48:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +49:13/0 = 0 +49:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +49:14/0 = 0 +49:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +49:15/0 = 0 +49:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +49:16/0 = 0 +49:17/0 = 0 +49:18/0 = 0 +49:19/0 = 0 +49:20/0 = 0 +49:21/0 = 0 +49:22/0 = 0 +49:23/0 = 0 +49:24/0 = 0 +49:25/0 = 0 +49:26/0 = 0 +49:27/0 = 0 +49:28/0 = 0 +49:29/0 = 0 +49:30/0 = 0 +49:31/0 = 0 +49:32/0 = 0 +49:33/0 = 0 +49:34/0 = 0 +49:35/0 = 0 +49:36/0 = 0 +49:37/0 = 0 +49:38/0 = 0 +49:39/0 = 0 +49:40/0 = 0 +49:41/0 = 0 +49:42/0 = 0 +49:43/0 = 0 +49:44/0 = 0 +49:45/0 = 0 +49:46/0 = 0 +49:47/0 = 0 +49:48/0 = 0 +49:49/0 = 0 +49:50/0 = 0 +49:51/0 = 0 +49:52/0 = 0 +49:53/0 = 0 +49:54/0 = 0 +49:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +49:55/0 = 0 +49:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +49:56/0 = 0 +49:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +49:57/0 = 0 +49:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +50:13/0 = 0 +50:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +50:14/0 = 0 +50:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +50:15/0 = 0 +50:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +50:16/0 = 0 +50:17/0 = 0 +50:18/0 = 0 +50:19/0 = 0 +50:20/0 = 0 +50:21/0 = 0 +50:22/0 = 0 +50:23/0 = 0 +50:24/0 = 0 +50:25/0 = 0 +50:26/0 = 0 +50:27/0 = 0 +50:28/0 = 0 +50:29/0 = 0 +50:30/0 = 0 +50:31/0 = 0 +50:32/0 = 0 +50:33/0 = 0 +50:34/0 = 0 +50:35/0 = 0 +50:36/0 = 0 +50:37/0 = 0 +50:38/0 = 0 +50:39/0 = 0 +50:40/0 = 0 +50:41/0 = 0 +50:42/0 = 0 +50:43/0 = 0 +50:44/0 = 0 +50:45/0 = 0 +50:46/0 = 0 +50:47/0 = 0 +50:48/0 = 0 +50:49/0 = 0 +50:50/0 = 0 +50:51/0 = 0 +50:52/0 = 0 +50:53/0 = 0 +50:54/0 = 0 +50:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +50:55/0 = 0 +50:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +50:56/0 = 0 +50:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +50:57/0 = 0 +50:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +51:13/0 = 0 +51:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +51:14/0 = 0 +51:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +51:15/0 = 0 +51:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +51:16/0 = 0 +51:17/0 = 0 +51:18/0 = 0 +51:19/0 = 0 +51:20/0 = 0 +51:21/0 = 0 +51:22/0 = 0 +51:23/0 = 0 +51:24/0 = 0 +51:25/0 = 0 +51:26/0 = 0 +51:27/0 = 0 +51:28/0 = 0 +51:29/0 = 0 +51:30/0 = 0 +51:31/0 = 0 +51:32/0 = 0 +51:33/0 = 0 +51:34/0 = 0 +51:35/0 = 0 +51:36/0 = 0 +51:37/0 = 0 +51:38/0 = 0 +51:39/0 = 0 +51:40/0 = 0 +51:41/0 = 0 +51:42/0 = 0 +51:43/0 = 0 +51:44/0 = 0 +51:45/0 = 0 +51:46/0 = 0 +51:47/0 = 0 +51:48/0 = 0 +51:49/0 = 0 +51:50/0 = 0 +51:51/0 = 0 +51:52/0 = 0 +51:53/0 = 0 +51:54/0 = 0 +51:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +51:55/0 = 0 +51:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +51:56/0 = 0 +51:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +51:57/0 = 0 +51:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +52:13/0 = 0 +52:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +52:14/0 = 0 +52:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +52:15/0 = 0 +52:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +52:16/0 = 0 +52:17/0 = 0 +52:18/0 = 0 +52:19/0 = 0 +52:20/0 = 0 +52:21/0 = 0 +52:22/0 = 0 +52:23/0 = 0 +52:24/0 = 0 +52:25/0 = 0 +52:26/0 = 0 +52:27/0 = 0 +52:28/0 = 0 +52:29/0 = 0 +52:30/0 = 0 +52:31/0 = 0 +52:32/0 = 0 +52:33/0 = 0 +52:34/0 = 0 +52:35/0 = 0 +52:36/0 = 0 +52:37/0 = 0 +52:38/0 = 0 +52:39/0 = 0 +52:40/0 = 0 +52:41/0 = 0 +52:42/0 = 0 +52:43/0 = 0 +52:44/0 = 0 +52:45/0 = 0 +52:46/0 = 0 +52:47/0 = 0 +52:48/0 = 0 +52:49/0 = 0 +52:50/0 = 0 +52:51/0 = 0 +52:52/0 = 0 +52:53/0 = 0 +52:54/0 = 0 +52:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +52:55/0 = 0 +52:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +52:56/0 = 0 +52:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +52:57/0 = 0 +52:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:13/0 = 0 +53:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:14/0 = 0 +53:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:15/0 = 0 +53:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:16/0 = 0 +53:17/0 = 0 +53:18/0 = 0 +53:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:19/0 = 0 +53:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:20/0 = 0 +53:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:21/0 = 0 +53:21/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:22/0 = 0 +53:22/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:23/0 = 0 +53:24/0 = 0 +53:25/0 = 0 +53:26/0 = 0 +53:27/0 = 0 +53:28/0 = 0 +53:29/0 = 0 +53:30/0 = 0 +53:31/0 = 0 +53:32/0 = 0 +53:33/0 = 0 +53:34/0 = 0 +53:35/0 = 0 +53:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:36/0 = 0 +53:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:37/0 = 0 +53:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:38/0 = 0 +53:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:39/0 = 0 +53:40/0 = 0 +53:41/0 = 0 +53:42/0 = 0 +53:43/0 = 0 +53:44/0 = 0 +53:45/0 = 0 +53:46/0 = 0 +53:47/0 = 0 +53:48/0 = 0 +53:49/0 = 0 +53:50/0 = 0 +53:51/0 = 0 +53:52/0 = 0 +53:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:53/0 = 0 +53:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:54/0 = 0 +53:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:55/0 = 0 +53:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:56/0 = 0 +53:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +53:57/0 = 0 +53:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:13/0 = 0 +54:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:14/0 = 0 +54:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:15/0 = 0 +54:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:16/0 = 0 +54:16/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:17/0 = 0 +54:17/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:18/0 = 0 +54:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:19/0 = 0 +54:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:20/0 = 0 +54:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:21/0 = 0 +54:21/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:22/0 = 0 +54:22/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:23/0 = 0 +54:23/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:24/0 = 0 +54:24/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:25/0 = 0 +54:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:26/0 = 0 +54:27/0 = 0 +54:27/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:28/0 = 0 +54:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:29/0 = 0 +54:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:30/0 = 0 +54:30/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:31/0 = 0 +54:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:32/0 = 0 +54:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:33/0 = 0 +54:34/0 = 0 +54:35/0 = 0 +54:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:36/0 = 0 +54:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:37/0 = 0 +54:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:38/0 = 0 +54:39/0 = 0 +54:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:40/0 = 0 +54:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:41/0 = 0 +54:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:42/0 = 0 +54:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:43/0 = 0 +54:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:44/0 = 0 +54:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:45/0 = 0 +54:45/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:46/0 = 0 +54:46/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:47/0 = 0 +54:47/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:48/0 = 0 +54:48/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:49/0 = 0 +54:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:50/0 = 0 +54:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:51/0 = 0 +54:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:52/0 = 0 +54:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:53/0 = 0 +54:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:54/0 = 0 +54:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:55/0 = 0 +54:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:56/0 = 0 +54:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +54:57/0 = 0 +54:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:13/0 = 0 +55:13/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:14/0 = 0 +55:14/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:15/0 = 0 +55:15/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:16/0 = 0 +55:16/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:17/0 = 0 +55:17/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:18/0 = 0 +55:18/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:19/0 = 0 +55:19/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:20/0 = 0 +55:20/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:21/0 = 0 +55:21/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:22/0 = 0 +55:22/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:23/0 = 0 +55:23/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:24/0 = 0 +55:24/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:25/0 = 0 +55:25/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:26/0 = 0 +55:26/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:27/0 = 0 +55:27/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:28/0 = 0 +55:28/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:29/0 = 0 +55:29/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:30/0 = 0 +55:30/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:31/0 = 0 +55:31/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:32/0 = 0 +55:32/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:33/0 = 0 +55:33/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:34/0 = 0 +55:34/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:35/0 = 0 +55:35/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:36/0 = 0 +55:36/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:37/0 = 0 +55:37/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:38/0 = 0 +55:38/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:39/0 = 0 +55:39/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:40/0 = 0 +55:40/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:41/0 = 0 +55:41/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:42/0 = 0 +55:42/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:43/0 = 0 +55:43/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:44/0 = 0 +55:44/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:45/0 = 0 +55:45/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:46/0 = 0 +55:46/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:47/0 = 0 +55:47/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:48/0 = 0 +55:48/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:49/0 = 0 +55:49/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:50/0 = 0 +55:50/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:51/0 = 0 +55:51/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:52/0 = 0 +55:52/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:53/0 = 0 +55:53/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:54/0 = 0 +55:54/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:55/0 = 0 +55:55/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:56/0 = 0 +55:56/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) +55:57/0 = 0 +55:57/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0.87012863, 8, 8, -8, 8) + +[sub_resource type="TileSet" id="TileSet_q2d71"] +physics_layer_0/collision_layer = 1 +sources/1 = SubResource("TileSetAtlasSource_y7y61") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_q2d71"] +texture = ExtResource("7_y7y61") +11:2/size_in_atlas = Vector2i(22, 18) +11:2/0 = 0 + +[sub_resource type="TileSet" id="TileSet_uo7di"] +sources/0 = SubResource("TileSetAtlasSource_q2d71") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_kwl8l"] +texture = ExtResource("9_7yo87") +0:13/0 = 0 +0:13/0/terrain_set = 0 +0:12/0 = 0 +0:12/0/terrain_set = 0 +0:11/0 = 0 +0:11/0/terrain_set = 0 +0:10/0 = 0 +0:10/0/terrain_set = 0 +0:9/0 = 0 +0:9/0/terrain_set = 0 +1:9/0 = 0 +1:9/0/terrain_set = 0 +2:9/0 = 0 +2:9/0/terrain_set = 0 +2:10/0 = 0 +2:10/0/terrain_set = 0 +2:11/0 = 0 +2:11/0/terrain_set = 0 +1:11/0 = 0 +1:11/0/terrain_set = 0 +1:12/0 = 0 +1:12/0/terrain_set = 0 +1:13/0 = 0 +1:13/0/terrain_set = 0 +2:13/0 = 0 +2:13/0/terrain_set = 0 +2:12/0 = 0 +2:12/0/terrain_set = 0 +1:10/0 = 0 +1:10/0/terrain_set = 0 +3:9/0 = 0 +3:9/0/terrain_set = 0 +3:10/0 = 0 +3:10/0/terrain_set = 0 +3:11/0 = 0 +3:11/0/terrain_set = 0 +3:12/0 = 0 +3:12/0/terrain_set = 0 +3:13/0 = 0 +3:13/0/terrain_set = 0 +9:22/0 = 0 +9:22/0/terrain_set = 0 +9:22/0/terrain = 0 +9:22/0/terrains_peering_bit/right_side = 0 +9:22/0/terrains_peering_bit/bottom_right_corner = 0 +9:22/0/terrains_peering_bit/bottom_side = 0 +9:22/0/terrains_peering_bit/bottom_left_corner = 0 +9:22/0/terrains_peering_bit/left_side = 0 +9:22/0/terrains_peering_bit/top_left_corner = 0 +9:22/0/terrains_peering_bit/top_side = 0 +9:22/0/terrains_peering_bit/top_right_corner = 0 +9:21/0 = 0 +9:21/0/terrain_set = 0 +9:21/0/terrain = 0 +9:21/0/terrains_peering_bit/right_side = 0 +9:21/0/terrains_peering_bit/bottom_right_corner = 0 +9:21/0/terrains_peering_bit/bottom_side = 0 +9:21/0/terrains_peering_bit/bottom_left_corner = 0 +9:21/0/terrains_peering_bit/left_side = 0 +9:21/0/terrains_peering_bit/top_left_corner = 0 +9:21/0/terrains_peering_bit/top_side = 0 +9:21/0/terrains_peering_bit/top_right_corner = 0 +9:20/0 = 0 +9:20/0/terrain_set = 0 +9:20/0/terrain = 0 +9:20/0/terrains_peering_bit/right_side = 0 +9:20/0/terrains_peering_bit/bottom_right_corner = 0 +9:20/0/terrains_peering_bit/bottom_side = 0 +9:20/0/terrains_peering_bit/bottom_left_corner = 0 +9:20/0/terrains_peering_bit/left_side = 0 +9:20/0/terrains_peering_bit/top_left_corner = 0 +9:20/0/terrains_peering_bit/top_side = 0 +9:20/0/terrains_peering_bit/top_right_corner = 0 +9:19/0 = 0 +9:19/0/terrain_set = 0 +9:19/0/terrain = 0 +9:19/0/terrains_peering_bit/right_side = 0 +9:19/0/terrains_peering_bit/bottom_right_corner = 0 +9:19/0/terrains_peering_bit/bottom_side = 0 +9:19/0/terrains_peering_bit/bottom_left_corner = 0 +9:19/0/terrains_peering_bit/left_side = 0 +9:19/0/terrains_peering_bit/top_left_corner = 0 +9:19/0/terrains_peering_bit/top_side = 0 +9:19/0/terrains_peering_bit/top_right_corner = 0 +9:18/0 = 0 +9:18/0/terrain_set = 0 +9:18/0/terrain = 0 +9:18/0/terrains_peering_bit/right_side = 0 +9:18/0/terrains_peering_bit/bottom_right_corner = 0 +9:18/0/terrains_peering_bit/bottom_side = 0 +9:18/0/terrains_peering_bit/bottom_left_corner = 0 +9:18/0/terrains_peering_bit/left_side = 0 +9:18/0/terrains_peering_bit/top_left_corner = 0 +9:18/0/terrains_peering_bit/top_side = 0 +9:18/0/terrains_peering_bit/top_right_corner = 0 +9:17/0 = 0 +9:17/0/terrain_set = 0 +9:17/0/terrain = 0 +9:17/0/terrains_peering_bit/right_side = 0 +9:17/0/terrains_peering_bit/bottom_right_corner = 0 +9:17/0/terrains_peering_bit/bottom_side = 0 +9:17/0/terrains_peering_bit/bottom_left_corner = 0 +9:17/0/terrains_peering_bit/left_side = 0 +9:17/0/terrains_peering_bit/top_left_corner = 0 +9:17/0/terrains_peering_bit/top_side = 0 +9:17/0/terrains_peering_bit/top_right_corner = 0 +9:16/0 = 0 +9:16/0/terrain_set = 0 +9:16/0/terrain = 0 +9:16/0/terrains_peering_bit/right_side = 0 +9:16/0/terrains_peering_bit/bottom_right_corner = 0 +9:16/0/terrains_peering_bit/bottom_side = 0 +9:16/0/terrains_peering_bit/bottom_left_corner = 0 +9:16/0/terrains_peering_bit/left_side = 0 +9:16/0/terrains_peering_bit/top_left_corner = 0 +9:16/0/terrains_peering_bit/top_side = 0 +9:16/0/terrains_peering_bit/top_right_corner = 0 +9:15/0 = 0 +9:15/0/terrain_set = 0 +9:15/0/terrain = 0 +9:15/0/terrains_peering_bit/right_side = 0 +9:15/0/terrains_peering_bit/bottom_right_corner = 0 +9:15/0/terrains_peering_bit/bottom_side = 0 +9:15/0/terrains_peering_bit/bottom_left_corner = 0 +9:15/0/terrains_peering_bit/left_side = 0 +9:15/0/terrains_peering_bit/top_left_corner = 0 +9:15/0/terrains_peering_bit/top_side = 0 +9:15/0/terrains_peering_bit/top_right_corner = 0 +9:14/0 = 0 +9:14/0/terrain_set = 0 +9:14/0/terrain = 0 +9:14/0/terrains_peering_bit/right_side = 0 +9:14/0/terrains_peering_bit/bottom_right_corner = 0 +9:14/0/terrains_peering_bit/bottom_side = 0 +9:14/0/terrains_peering_bit/bottom_left_corner = 0 +9:14/0/terrains_peering_bit/left_side = 0 +9:14/0/terrains_peering_bit/top_left_corner = 0 +9:14/0/terrains_peering_bit/top_side = 0 +9:14/0/terrains_peering_bit/top_right_corner = 0 +10:14/0 = 0 +10:14/0/terrain_set = 0 +10:14/0/terrain = 0 +10:14/0/terrains_peering_bit/right_side = 0 +10:14/0/terrains_peering_bit/bottom_right_corner = 0 +10:14/0/terrains_peering_bit/bottom_side = 0 +10:14/0/terrains_peering_bit/bottom_left_corner = 0 +10:14/0/terrains_peering_bit/left_side = 0 +10:14/0/terrains_peering_bit/top_left_corner = 0 +10:14/0/terrains_peering_bit/top_side = 0 +10:14/0/terrains_peering_bit/top_right_corner = 0 +11:14/0 = 0 +11:14/0/terrain_set = 0 +11:14/0/terrain = 0 +11:14/0/terrains_peering_bit/right_side = 0 +11:14/0/terrains_peering_bit/bottom_right_corner = 0 +11:14/0/terrains_peering_bit/bottom_side = 0 +11:14/0/terrains_peering_bit/bottom_left_corner = 0 +11:14/0/terrains_peering_bit/left_side = 0 +11:14/0/terrains_peering_bit/top_left_corner = 0 +11:14/0/terrains_peering_bit/top_side = 0 +11:14/0/terrains_peering_bit/top_right_corner = 0 +12:14/0 = 0 +12:14/0/terrain_set = 0 +12:14/0/terrain = 0 +12:14/0/terrains_peering_bit/right_side = 0 +12:14/0/terrains_peering_bit/bottom_right_corner = 0 +12:14/0/terrains_peering_bit/bottom_side = 0 +12:14/0/terrains_peering_bit/bottom_left_corner = 0 +12:14/0/terrains_peering_bit/left_side = 0 +12:14/0/terrains_peering_bit/top_left_corner = 0 +12:14/0/terrains_peering_bit/top_side = 0 +12:14/0/terrains_peering_bit/top_right_corner = 0 +13:14/0 = 0 +13:14/0/terrain_set = 0 +13:14/0/terrain = 0 +13:14/0/terrains_peering_bit/right_side = 0 +13:14/0/terrains_peering_bit/bottom_right_corner = 0 +13:14/0/terrains_peering_bit/bottom_side = 0 +13:14/0/terrains_peering_bit/bottom_left_corner = 0 +13:14/0/terrains_peering_bit/left_side = 0 +13:14/0/terrains_peering_bit/top_left_corner = 0 +13:14/0/terrains_peering_bit/top_side = 0 +13:14/0/terrains_peering_bit/top_right_corner = 0 +14:14/0 = 0 +14:14/0/terrain_set = 0 +14:14/0/terrain = 0 +14:14/0/terrains_peering_bit/right_side = 0 +14:14/0/terrains_peering_bit/bottom_right_corner = 0 +14:14/0/terrains_peering_bit/bottom_side = 0 +14:14/0/terrains_peering_bit/bottom_left_corner = 0 +14:14/0/terrains_peering_bit/left_side = 0 +14:14/0/terrains_peering_bit/top_left_corner = 0 +14:14/0/terrains_peering_bit/top_side = 0 +14:14/0/terrains_peering_bit/top_right_corner = 0 +15:14/0 = 0 +15:14/0/terrain_set = 0 +15:14/0/terrain = 0 +15:14/0/terrains_peering_bit/right_side = 0 +15:14/0/terrains_peering_bit/bottom_right_corner = 0 +15:14/0/terrains_peering_bit/bottom_side = 0 +15:14/0/terrains_peering_bit/bottom_left_corner = 0 +15:14/0/terrains_peering_bit/left_side = 0 +15:14/0/terrains_peering_bit/top_left_corner = 0 +15:14/0/terrains_peering_bit/top_side = 0 +15:14/0/terrains_peering_bit/top_right_corner = 0 +16:14/0 = 0 +16:14/0/terrain_set = 0 +16:14/0/terrain = 0 +16:14/0/terrains_peering_bit/right_side = 0 +16:14/0/terrains_peering_bit/bottom_right_corner = 0 +16:14/0/terrains_peering_bit/bottom_side = 0 +16:14/0/terrains_peering_bit/bottom_left_corner = 0 +16:14/0/terrains_peering_bit/left_side = 0 +16:14/0/terrains_peering_bit/top_left_corner = 0 +16:14/0/terrains_peering_bit/top_side = 0 +16:14/0/terrains_peering_bit/top_right_corner = 0 +17:14/0 = 0 +17:14/0/terrain_set = 0 +17:14/0/terrain = 0 +17:14/0/terrains_peering_bit/right_side = 0 +17:14/0/terrains_peering_bit/bottom_right_corner = 0 +17:14/0/terrains_peering_bit/bottom_side = 0 +17:14/0/terrains_peering_bit/bottom_left_corner = 0 +17:14/0/terrains_peering_bit/left_side = 0 +17:14/0/terrains_peering_bit/top_left_corner = 0 +17:14/0/terrains_peering_bit/top_side = 0 +17:14/0/terrains_peering_bit/top_right_corner = 0 +18:14/0 = 0 +18:14/0/terrain_set = 0 +18:14/0/terrain = 0 +18:14/0/terrains_peering_bit/right_side = 0 +18:14/0/terrains_peering_bit/bottom_right_corner = 0 +18:14/0/terrains_peering_bit/bottom_side = 0 +18:14/0/terrains_peering_bit/bottom_left_corner = 0 +18:14/0/terrains_peering_bit/left_side = 0 +18:14/0/terrains_peering_bit/top_left_corner = 0 +18:14/0/terrains_peering_bit/top_side = 0 +18:14/0/terrains_peering_bit/top_right_corner = 0 +19:14/0 = 0 +19:14/0/terrain_set = 0 +19:14/0/terrain = 0 +19:14/0/terrains_peering_bit/right_side = 0 +19:14/0/terrains_peering_bit/bottom_right_corner = 0 +19:14/0/terrains_peering_bit/bottom_side = 0 +19:14/0/terrains_peering_bit/bottom_left_corner = 0 +19:14/0/terrains_peering_bit/left_side = 0 +19:14/0/terrains_peering_bit/top_left_corner = 0 +19:14/0/terrains_peering_bit/top_side = 0 +19:14/0/terrains_peering_bit/top_right_corner = 0 +20:14/0 = 0 +20:14/0/terrain_set = 0 +20:14/0/terrain = 0 +20:14/0/terrains_peering_bit/right_side = 0 +20:14/0/terrains_peering_bit/bottom_right_corner = 0 +20:14/0/terrains_peering_bit/bottom_side = 0 +20:14/0/terrains_peering_bit/bottom_left_corner = 0 +20:14/0/terrains_peering_bit/left_side = 0 +20:14/0/terrains_peering_bit/top_left_corner = 0 +20:14/0/terrains_peering_bit/top_side = 0 +20:14/0/terrains_peering_bit/top_right_corner = 0 +21:14/0 = 0 +21:14/0/terrain_set = 0 +21:14/0/terrain = 0 +21:14/0/terrains_peering_bit/right_side = 0 +21:14/0/terrains_peering_bit/bottom_right_corner = 0 +21:14/0/terrains_peering_bit/bottom_side = 0 +21:14/0/terrains_peering_bit/bottom_left_corner = 0 +21:14/0/terrains_peering_bit/left_side = 0 +21:14/0/terrains_peering_bit/top_left_corner = 0 +21:14/0/terrains_peering_bit/top_side = 0 +21:14/0/terrains_peering_bit/top_right_corner = 0 +22:14/0 = 0 +22:14/0/terrain_set = 0 +22:14/0/terrain = 0 +22:14/0/terrains_peering_bit/right_side = 0 +22:14/0/terrains_peering_bit/bottom_right_corner = 0 +22:14/0/terrains_peering_bit/bottom_side = 0 +22:14/0/terrains_peering_bit/bottom_left_corner = 0 +22:14/0/terrains_peering_bit/left_side = 0 +22:14/0/terrains_peering_bit/top_left_corner = 0 +22:14/0/terrains_peering_bit/top_side = 0 +22:14/0/terrains_peering_bit/top_right_corner = 0 +22:15/0 = 0 +22:15/0/terrain_set = 0 +22:15/0/terrain = 0 +22:15/0/terrains_peering_bit/right_side = 0 +22:15/0/terrains_peering_bit/bottom_right_corner = 0 +22:15/0/terrains_peering_bit/bottom_side = 0 +22:15/0/terrains_peering_bit/bottom_left_corner = 0 +22:15/0/terrains_peering_bit/left_side = 0 +22:15/0/terrains_peering_bit/top_left_corner = 0 +22:15/0/terrains_peering_bit/top_side = 0 +22:15/0/terrains_peering_bit/top_right_corner = 0 +22:16/0 = 0 +22:16/0/terrain_set = 0 +22:16/0/terrain = 0 +22:16/0/terrains_peering_bit/right_side = 0 +22:16/0/terrains_peering_bit/bottom_right_corner = 0 +22:16/0/terrains_peering_bit/bottom_side = 0 +22:16/0/terrains_peering_bit/bottom_left_corner = 0 +22:16/0/terrains_peering_bit/left_side = 0 +22:16/0/terrains_peering_bit/top_left_corner = 0 +22:16/0/terrains_peering_bit/top_side = 0 +22:16/0/terrains_peering_bit/top_right_corner = 0 +22:17/0 = 0 +22:17/0/terrain_set = 0 +22:17/0/terrain = 0 +22:17/0/terrains_peering_bit/right_side = 0 +22:17/0/terrains_peering_bit/bottom_right_corner = 0 +22:17/0/terrains_peering_bit/bottom_side = 0 +22:17/0/terrains_peering_bit/bottom_left_corner = 0 +22:17/0/terrains_peering_bit/left_side = 0 +22:17/0/terrains_peering_bit/top_left_corner = 0 +22:17/0/terrains_peering_bit/top_side = 0 +22:17/0/terrains_peering_bit/top_right_corner = 0 +22:18/0 = 0 +22:18/0/terrain_set = 0 +22:18/0/terrain = 0 +22:18/0/terrains_peering_bit/right_side = 0 +22:18/0/terrains_peering_bit/bottom_right_corner = 0 +22:18/0/terrains_peering_bit/bottom_side = 0 +22:18/0/terrains_peering_bit/bottom_left_corner = 0 +22:18/0/terrains_peering_bit/left_side = 0 +22:18/0/terrains_peering_bit/top_left_corner = 0 +22:18/0/terrains_peering_bit/top_side = 0 +22:18/0/terrains_peering_bit/top_right_corner = 0 +22:19/0 = 0 +22:19/0/terrain_set = 0 +22:19/0/terrain = 0 +22:19/0/terrains_peering_bit/right_side = 0 +22:19/0/terrains_peering_bit/bottom_right_corner = 0 +22:19/0/terrains_peering_bit/bottom_side = 0 +22:19/0/terrains_peering_bit/bottom_left_corner = 0 +22:19/0/terrains_peering_bit/left_side = 0 +22:19/0/terrains_peering_bit/top_left_corner = 0 +22:19/0/terrains_peering_bit/top_side = 0 +22:19/0/terrains_peering_bit/top_right_corner = 0 +22:20/0 = 0 +22:20/0/terrain_set = 0 +22:20/0/terrain = 0 +22:20/0/terrains_peering_bit/right_side = 0 +22:20/0/terrains_peering_bit/bottom_right_corner = 0 +22:20/0/terrains_peering_bit/bottom_side = 0 +22:20/0/terrains_peering_bit/bottom_left_corner = 0 +22:20/0/terrains_peering_bit/left_side = 0 +22:20/0/terrains_peering_bit/top_left_corner = 0 +22:20/0/terrains_peering_bit/top_side = 0 +22:20/0/terrains_peering_bit/top_right_corner = 0 +22:21/0 = 0 +22:21/0/terrain_set = 0 +22:21/0/terrain = 0 +22:21/0/terrains_peering_bit/right_side = 0 +22:21/0/terrains_peering_bit/bottom_right_corner = 0 +22:21/0/terrains_peering_bit/bottom_side = 0 +22:21/0/terrains_peering_bit/bottom_left_corner = 0 +22:21/0/terrains_peering_bit/left_side = 0 +22:21/0/terrains_peering_bit/top_left_corner = 0 +22:21/0/terrains_peering_bit/top_side = 0 +22:21/0/terrains_peering_bit/top_right_corner = 0 +22:22/0 = 0 +22:22/0/terrain_set = 0 +22:22/0/terrain = 0 +22:22/0/terrains_peering_bit/right_side = 0 +22:22/0/terrains_peering_bit/bottom_right_corner = 0 +22:22/0/terrains_peering_bit/bottom_side = 0 +22:22/0/terrains_peering_bit/bottom_left_corner = 0 +22:22/0/terrains_peering_bit/left_side = 0 +22:22/0/terrains_peering_bit/top_left_corner = 0 +22:22/0/terrains_peering_bit/top_side = 0 +22:22/0/terrains_peering_bit/top_right_corner = 0 +10:22/0 = 0 +10:22/0/terrain_set = 0 +10:22/0/terrain = 0 +10:22/0/terrains_peering_bit/right_side = 0 +10:22/0/terrains_peering_bit/bottom_right_corner = 0 +10:22/0/terrains_peering_bit/bottom_side = 0 +10:22/0/terrains_peering_bit/bottom_left_corner = 0 +10:22/0/terrains_peering_bit/left_side = 0 +10:22/0/terrains_peering_bit/top_left_corner = 0 +10:22/0/terrains_peering_bit/top_side = 0 +10:22/0/terrains_peering_bit/top_right_corner = 0 +11:22/0 = 0 +11:22/0/terrain_set = 0 +11:22/0/terrain = 0 +11:22/0/terrains_peering_bit/right_side = 0 +11:22/0/terrains_peering_bit/bottom_right_corner = 0 +11:22/0/terrains_peering_bit/bottom_side = 0 +11:22/0/terrains_peering_bit/bottom_left_corner = 0 +11:22/0/terrains_peering_bit/left_side = 0 +11:22/0/terrains_peering_bit/top_left_corner = 0 +11:22/0/terrains_peering_bit/top_side = 0 +11:22/0/terrains_peering_bit/top_right_corner = 0 +12:22/0 = 0 +12:22/0/terrain_set = 0 +12:22/0/terrain = 0 +12:22/0/terrains_peering_bit/right_side = 0 +12:22/0/terrains_peering_bit/bottom_right_corner = 0 +12:22/0/terrains_peering_bit/bottom_side = 0 +12:22/0/terrains_peering_bit/bottom_left_corner = 0 +12:22/0/terrains_peering_bit/left_side = 0 +12:22/0/terrains_peering_bit/top_left_corner = 0 +12:22/0/terrains_peering_bit/top_side = 0 +12:22/0/terrains_peering_bit/top_right_corner = 0 +13:22/0 = 0 +13:22/0/terrain_set = 0 +13:22/0/terrain = 0 +13:22/0/terrains_peering_bit/right_side = 0 +13:22/0/terrains_peering_bit/bottom_right_corner = 0 +13:22/0/terrains_peering_bit/bottom_side = 0 +13:22/0/terrains_peering_bit/bottom_left_corner = 0 +13:22/0/terrains_peering_bit/left_side = 0 +13:22/0/terrains_peering_bit/top_left_corner = 0 +13:22/0/terrains_peering_bit/top_side = 0 +13:22/0/terrains_peering_bit/top_right_corner = 0 +14:22/0 = 0 +14:22/0/terrain_set = 0 +14:22/0/terrain = 0 +14:22/0/terrains_peering_bit/right_side = 0 +14:22/0/terrains_peering_bit/bottom_right_corner = 0 +14:22/0/terrains_peering_bit/bottom_side = 0 +14:22/0/terrains_peering_bit/bottom_left_corner = 0 +14:22/0/terrains_peering_bit/left_side = 0 +14:22/0/terrains_peering_bit/top_left_corner = 0 +14:22/0/terrains_peering_bit/top_side = 0 +14:22/0/terrains_peering_bit/top_right_corner = 0 +15:22/0 = 0 +15:22/0/terrain_set = 0 +15:22/0/terrain = 0 +15:22/0/terrains_peering_bit/right_side = 0 +15:22/0/terrains_peering_bit/bottom_right_corner = 0 +15:22/0/terrains_peering_bit/bottom_side = 0 +15:22/0/terrains_peering_bit/bottom_left_corner = 0 +15:22/0/terrains_peering_bit/left_side = 0 +15:22/0/terrains_peering_bit/top_left_corner = 0 +15:22/0/terrains_peering_bit/top_side = 0 +15:22/0/terrains_peering_bit/top_right_corner = 0 +16:22/0 = 0 +16:22/0/terrain_set = 0 +16:22/0/terrain = 0 +16:22/0/terrains_peering_bit/right_side = 0 +16:22/0/terrains_peering_bit/bottom_right_corner = 0 +16:22/0/terrains_peering_bit/bottom_side = 0 +16:22/0/terrains_peering_bit/bottom_left_corner = 0 +16:22/0/terrains_peering_bit/left_side = 0 +16:22/0/terrains_peering_bit/top_left_corner = 0 +16:22/0/terrains_peering_bit/top_side = 0 +16:22/0/terrains_peering_bit/top_right_corner = 0 +17:22/0 = 0 +17:22/0/terrain_set = 0 +17:22/0/terrain = 0 +17:22/0/terrains_peering_bit/right_side = 0 +17:22/0/terrains_peering_bit/bottom_right_corner = 0 +17:22/0/terrains_peering_bit/bottom_side = 0 +17:22/0/terrains_peering_bit/bottom_left_corner = 0 +17:22/0/terrains_peering_bit/left_side = 0 +17:22/0/terrains_peering_bit/top_left_corner = 0 +17:22/0/terrains_peering_bit/top_side = 0 +17:22/0/terrains_peering_bit/top_right_corner = 0 +18:22/0 = 0 +18:22/0/terrain_set = 0 +18:22/0/terrain = 0 +18:22/0/terrains_peering_bit/right_side = 0 +18:22/0/terrains_peering_bit/bottom_right_corner = 0 +18:22/0/terrains_peering_bit/bottom_side = 0 +18:22/0/terrains_peering_bit/bottom_left_corner = 0 +18:22/0/terrains_peering_bit/left_side = 0 +18:22/0/terrains_peering_bit/top_left_corner = 0 +18:22/0/terrains_peering_bit/top_side = 0 +18:22/0/terrains_peering_bit/top_right_corner = 0 +19:22/0 = 0 +19:22/0/terrain_set = 0 +19:22/0/terrain = 0 +19:22/0/terrains_peering_bit/right_side = 0 +19:22/0/terrains_peering_bit/bottom_right_corner = 0 +19:22/0/terrains_peering_bit/bottom_side = 0 +19:22/0/terrains_peering_bit/bottom_left_corner = 0 +19:22/0/terrains_peering_bit/left_side = 0 +19:22/0/terrains_peering_bit/top_left_corner = 0 +19:22/0/terrains_peering_bit/top_side = 0 +19:22/0/terrains_peering_bit/top_right_corner = 0 +20:22/0 = 0 +20:22/0/terrain_set = 0 +20:22/0/terrain = 0 +20:22/0/terrains_peering_bit/right_side = 0 +20:22/0/terrains_peering_bit/bottom_right_corner = 0 +20:22/0/terrains_peering_bit/bottom_side = 0 +20:22/0/terrains_peering_bit/bottom_left_corner = 0 +20:22/0/terrains_peering_bit/left_side = 0 +20:22/0/terrains_peering_bit/top_left_corner = 0 +20:22/0/terrains_peering_bit/top_side = 0 +20:22/0/terrains_peering_bit/top_right_corner = 0 +21:22/0 = 0 +21:22/0/terrain_set = 0 +21:22/0/terrain = 0 +21:22/0/terrains_peering_bit/right_side = 0 +21:22/0/terrains_peering_bit/bottom_right_corner = 0 +21:22/0/terrains_peering_bit/bottom_side = 0 +21:22/0/terrains_peering_bit/bottom_left_corner = 0 +21:22/0/terrains_peering_bit/left_side = 0 +21:22/0/terrains_peering_bit/top_left_corner = 0 +21:22/0/terrains_peering_bit/top_side = 0 +21:22/0/terrains_peering_bit/top_right_corner = 0 +10:21/0 = 0 +10:21/0/terrain_set = 0 +10:21/0/terrain = 0 +10:21/0/terrains_peering_bit/right_side = 0 +10:21/0/terrains_peering_bit/bottom_right_corner = 0 +10:21/0/terrains_peering_bit/bottom_side = 0 +10:21/0/terrains_peering_bit/bottom_left_corner = 0 +10:21/0/terrains_peering_bit/left_side = 0 +10:21/0/terrains_peering_bit/top_left_corner = 0 +10:21/0/terrains_peering_bit/top_side = 0 +10:21/0/terrains_peering_bit/top_right_corner = 0 +10:20/0 = 0 +10:20/0/terrain_set = 0 +10:20/0/terrain = 0 +10:20/0/terrains_peering_bit/right_side = 0 +10:20/0/terrains_peering_bit/bottom_right_corner = 0 +10:20/0/terrains_peering_bit/bottom_side = 0 +10:20/0/terrains_peering_bit/bottom_left_corner = 0 +10:20/0/terrains_peering_bit/left_side = 0 +10:20/0/terrains_peering_bit/top_left_corner = 0 +10:20/0/terrains_peering_bit/top_side = 0 +10:20/0/terrains_peering_bit/top_right_corner = 0 +10:19/0 = 0 +10:19/0/terrain_set = 0 +10:19/0/terrain = 0 +10:19/0/terrains_peering_bit/right_side = 0 +10:19/0/terrains_peering_bit/bottom_right_corner = 0 +10:19/0/terrains_peering_bit/bottom_side = 0 +10:19/0/terrains_peering_bit/bottom_left_corner = 0 +10:19/0/terrains_peering_bit/left_side = 0 +10:19/0/terrains_peering_bit/top_left_corner = 0 +10:19/0/terrains_peering_bit/top_side = 0 +10:19/0/terrains_peering_bit/top_right_corner = 0 +10:18/0 = 0 +10:18/0/terrain_set = 0 +10:18/0/terrain = 0 +10:18/0/terrains_peering_bit/right_side = 0 +10:18/0/terrains_peering_bit/bottom_right_corner = 0 +10:18/0/terrains_peering_bit/bottom_side = 0 +10:18/0/terrains_peering_bit/bottom_left_corner = 0 +10:18/0/terrains_peering_bit/left_side = 0 +10:18/0/terrains_peering_bit/top_left_corner = 0 +10:18/0/terrains_peering_bit/top_side = 0 +10:18/0/terrains_peering_bit/top_right_corner = 0 +10:17/0 = 0 +10:17/0/terrain_set = 0 +10:17/0/terrain = 0 +10:17/0/terrains_peering_bit/right_side = 0 +10:17/0/terrains_peering_bit/bottom_right_corner = 0 +10:17/0/terrains_peering_bit/bottom_side = 0 +10:17/0/terrains_peering_bit/bottom_left_corner = 0 +10:17/0/terrains_peering_bit/left_side = 0 +10:17/0/terrains_peering_bit/top_left_corner = 0 +10:17/0/terrains_peering_bit/top_side = 0 +10:17/0/terrains_peering_bit/top_right_corner = 0 +10:16/0 = 0 +10:16/0/terrain_set = 0 +10:16/0/terrain = 0 +10:16/0/terrains_peering_bit/right_side = 0 +10:16/0/terrains_peering_bit/bottom_right_corner = 0 +10:16/0/terrains_peering_bit/bottom_side = 0 +10:16/0/terrains_peering_bit/bottom_left_corner = 0 +10:16/0/terrains_peering_bit/left_side = 0 +10:16/0/terrains_peering_bit/top_left_corner = 0 +10:16/0/terrains_peering_bit/top_side = 0 +10:16/0/terrains_peering_bit/top_right_corner = 0 +10:15/0 = 0 +10:15/0/terrain_set = 0 +10:15/0/terrain = 0 +10:15/0/terrains_peering_bit/right_side = 0 +10:15/0/terrains_peering_bit/bottom_right_corner = 0 +10:15/0/terrains_peering_bit/bottom_side = 0 +10:15/0/terrains_peering_bit/bottom_left_corner = 0 +10:15/0/terrains_peering_bit/left_side = 0 +10:15/0/terrains_peering_bit/top_left_corner = 0 +10:15/0/terrains_peering_bit/top_side = 0 +10:15/0/terrains_peering_bit/top_right_corner = 0 +11:15/0 = 0 +11:15/0/terrain_set = 0 +11:15/0/terrain = 0 +11:15/0/terrains_peering_bit/right_side = 0 +11:15/0/terrains_peering_bit/bottom_right_corner = 0 +11:15/0/terrains_peering_bit/bottom_side = 0 +11:15/0/terrains_peering_bit/bottom_left_corner = 0 +11:15/0/terrains_peering_bit/left_side = 0 +11:15/0/terrains_peering_bit/top_left_corner = 0 +11:15/0/terrains_peering_bit/top_side = 0 +11:15/0/terrains_peering_bit/top_right_corner = 0 +12:15/0 = 0 +12:15/0/terrain_set = 0 +12:15/0/terrain = 0 +12:15/0/terrains_peering_bit/right_side = 0 +12:15/0/terrains_peering_bit/bottom_right_corner = 0 +12:15/0/terrains_peering_bit/bottom_side = 0 +12:15/0/terrains_peering_bit/bottom_left_corner = 0 +12:15/0/terrains_peering_bit/left_side = 0 +12:15/0/terrains_peering_bit/top_left_corner = 0 +12:15/0/terrains_peering_bit/top_side = 0 +12:15/0/terrains_peering_bit/top_right_corner = 0 +12:16/0 = 0 +12:16/0/terrain_set = 0 +12:16/0/terrain = 0 +12:16/0/terrains_peering_bit/right_side = 0 +12:16/0/terrains_peering_bit/bottom_right_corner = 0 +12:16/0/terrains_peering_bit/bottom_side = 0 +12:16/0/terrains_peering_bit/bottom_left_corner = 0 +12:16/0/terrains_peering_bit/left_side = 0 +12:16/0/terrains_peering_bit/top_left_corner = 0 +12:16/0/terrains_peering_bit/top_side = 0 +12:16/0/terrains_peering_bit/top_right_corner = 0 +13:16/0 = 0 +13:16/0/terrain_set = 0 +13:16/0/terrain = 0 +13:16/0/terrains_peering_bit/right_side = 0 +13:16/0/terrains_peering_bit/bottom_right_corner = 0 +13:16/0/terrains_peering_bit/bottom_side = 0 +13:16/0/terrains_peering_bit/bottom_left_corner = 0 +13:16/0/terrains_peering_bit/left_side = 0 +13:16/0/terrains_peering_bit/top_left_corner = 0 +13:16/0/terrains_peering_bit/top_side = 0 +13:16/0/terrains_peering_bit/top_right_corner = 0 +14:16/0 = 0 +14:16/0/terrain_set = 0 +14:16/0/terrain = 0 +14:16/0/terrains_peering_bit/right_side = 0 +14:16/0/terrains_peering_bit/bottom_right_corner = 0 +14:16/0/terrains_peering_bit/bottom_side = 0 +14:16/0/terrains_peering_bit/bottom_left_corner = 0 +14:16/0/terrains_peering_bit/left_side = 0 +14:16/0/terrains_peering_bit/top_left_corner = 0 +14:16/0/terrains_peering_bit/top_side = 0 +14:16/0/terrains_peering_bit/top_right_corner = 0 +15:16/0 = 0 +15:16/0/terrain_set = 0 +15:16/0/terrain = 0 +15:16/0/terrains_peering_bit/right_side = 0 +15:16/0/terrains_peering_bit/bottom_right_corner = 0 +15:16/0/terrains_peering_bit/bottom_side = 0 +15:16/0/terrains_peering_bit/bottom_left_corner = 0 +15:16/0/terrains_peering_bit/left_side = 0 +15:16/0/terrains_peering_bit/top_left_corner = 0 +15:16/0/terrains_peering_bit/top_side = 0 +15:16/0/terrains_peering_bit/top_right_corner = 0 +16:16/0 = 0 +16:16/0/terrain_set = 0 +16:16/0/terrain = 0 +16:16/0/terrains_peering_bit/right_side = 0 +16:16/0/terrains_peering_bit/bottom_right_corner = 0 +16:16/0/terrains_peering_bit/bottom_side = 0 +16:16/0/terrains_peering_bit/bottom_left_corner = 0 +16:16/0/terrains_peering_bit/left_side = 0 +16:16/0/terrains_peering_bit/top_left_corner = 0 +16:16/0/terrains_peering_bit/top_side = 0 +16:16/0/terrains_peering_bit/top_right_corner = 0 +16:15/0 = 0 +16:15/0/terrain_set = 0 +16:15/0/terrain = 0 +16:15/0/terrains_peering_bit/right_side = 0 +16:15/0/terrains_peering_bit/bottom_right_corner = 0 +16:15/0/terrains_peering_bit/bottom_side = 0 +16:15/0/terrains_peering_bit/bottom_left_corner = 0 +16:15/0/terrains_peering_bit/left_side = 0 +16:15/0/terrains_peering_bit/top_left_corner = 0 +16:15/0/terrains_peering_bit/top_side = 0 +16:15/0/terrains_peering_bit/top_right_corner = 0 +17:15/0 = 0 +17:15/0/terrain_set = 0 +17:15/0/terrain = 0 +17:15/0/terrains_peering_bit/right_side = 0 +17:15/0/terrains_peering_bit/bottom_right_corner = 0 +17:15/0/terrains_peering_bit/bottom_side = 0 +17:15/0/terrains_peering_bit/bottom_left_corner = 0 +17:15/0/terrains_peering_bit/left_side = 0 +17:15/0/terrains_peering_bit/top_left_corner = 0 +17:15/0/terrains_peering_bit/top_side = 0 +17:15/0/terrains_peering_bit/top_right_corner = 0 +18:15/0 = 0 +18:15/0/terrain_set = 0 +18:15/0/terrain = 0 +18:15/0/terrains_peering_bit/right_side = 0 +18:15/0/terrains_peering_bit/bottom_right_corner = 0 +18:15/0/terrains_peering_bit/bottom_side = 0 +18:15/0/terrains_peering_bit/bottom_left_corner = 0 +18:15/0/terrains_peering_bit/left_side = 0 +18:15/0/terrains_peering_bit/top_left_corner = 0 +18:15/0/terrains_peering_bit/top_side = 0 +18:15/0/terrains_peering_bit/top_right_corner = 0 +15:15/0 = 0 +15:15/0/terrain_set = 0 +15:15/0/terrain = 0 +15:15/0/terrains_peering_bit/right_side = 0 +15:15/0/terrains_peering_bit/bottom_right_corner = 0 +15:15/0/terrains_peering_bit/bottom_side = 0 +15:15/0/terrains_peering_bit/bottom_left_corner = 0 +15:15/0/terrains_peering_bit/left_side = 0 +15:15/0/terrains_peering_bit/top_left_corner = 0 +15:15/0/terrains_peering_bit/top_side = 0 +15:15/0/terrains_peering_bit/top_right_corner = 0 +14:15/0 = 0 +14:15/0/terrain_set = 0 +14:15/0/terrain = 0 +14:15/0/terrains_peering_bit/right_side = 0 +14:15/0/terrains_peering_bit/bottom_right_corner = 0 +14:15/0/terrains_peering_bit/bottom_side = 0 +14:15/0/terrains_peering_bit/bottom_left_corner = 0 +14:15/0/terrains_peering_bit/left_side = 0 +14:15/0/terrains_peering_bit/top_left_corner = 0 +14:15/0/terrains_peering_bit/top_side = 0 +14:15/0/terrains_peering_bit/top_right_corner = 0 +13:15/0 = 0 +13:15/0/terrain_set = 0 +13:15/0/terrain = 0 +13:15/0/terrains_peering_bit/right_side = 0 +13:15/0/terrains_peering_bit/bottom_right_corner = 0 +13:15/0/terrains_peering_bit/bottom_side = 0 +13:15/0/terrains_peering_bit/bottom_left_corner = 0 +13:15/0/terrains_peering_bit/left_side = 0 +13:15/0/terrains_peering_bit/top_left_corner = 0 +13:15/0/terrains_peering_bit/top_side = 0 +13:15/0/terrains_peering_bit/top_right_corner = 0 +13:17/0 = 0 +13:17/0/terrain_set = 0 +13:17/0/terrain = 0 +13:17/0/terrains_peering_bit/right_side = 0 +13:17/0/terrains_peering_bit/bottom_right_corner = 0 +13:17/0/terrains_peering_bit/bottom_side = 0 +13:17/0/terrains_peering_bit/bottom_left_corner = 0 +13:17/0/terrains_peering_bit/left_side = 0 +13:17/0/terrains_peering_bit/top_left_corner = 0 +13:17/0/terrains_peering_bit/top_side = 0 +13:17/0/terrains_peering_bit/top_right_corner = 0 +12:17/0 = 0 +12:17/0/terrain_set = 0 +12:17/0/terrain = 0 +12:17/0/terrains_peering_bit/right_side = 0 +12:17/0/terrains_peering_bit/bottom_right_corner = 0 +12:17/0/terrains_peering_bit/bottom_side = 0 +12:17/0/terrains_peering_bit/bottom_left_corner = 0 +12:17/0/terrains_peering_bit/left_side = 0 +12:17/0/terrains_peering_bit/top_left_corner = 0 +12:17/0/terrains_peering_bit/top_side = 0 +12:17/0/terrains_peering_bit/top_right_corner = 0 +12:18/0 = 0 +12:18/0/terrain_set = 0 +12:18/0/terrain = 0 +12:18/0/terrains_peering_bit/right_side = 0 +12:18/0/terrains_peering_bit/bottom_right_corner = 0 +12:18/0/terrains_peering_bit/bottom_side = 0 +12:18/0/terrains_peering_bit/bottom_left_corner = 0 +12:18/0/terrains_peering_bit/left_side = 0 +12:18/0/terrains_peering_bit/top_left_corner = 0 +12:18/0/terrains_peering_bit/top_side = 0 +12:18/0/terrains_peering_bit/top_right_corner = 0 +12:19/0 = 0 +12:19/0/terrain_set = 0 +12:19/0/terrain = 0 +12:19/0/terrains_peering_bit/right_side = 0 +12:19/0/terrains_peering_bit/bottom_right_corner = 0 +12:19/0/terrains_peering_bit/bottom_side = 0 +12:19/0/terrains_peering_bit/bottom_left_corner = 0 +12:19/0/terrains_peering_bit/left_side = 0 +12:19/0/terrains_peering_bit/top_left_corner = 0 +12:19/0/terrains_peering_bit/top_side = 0 +12:19/0/terrains_peering_bit/top_right_corner = 0 +11:19/0 = 0 +11:19/0/terrain_set = 0 +11:19/0/terrain = 0 +11:19/0/terrains_peering_bit/right_side = 0 +11:19/0/terrains_peering_bit/bottom_right_corner = 0 +11:19/0/terrains_peering_bit/bottom_side = 0 +11:19/0/terrains_peering_bit/bottom_left_corner = 0 +11:19/0/terrains_peering_bit/left_side = 0 +11:19/0/terrains_peering_bit/top_left_corner = 0 +11:19/0/terrains_peering_bit/top_side = 0 +11:19/0/terrains_peering_bit/top_right_corner = 0 +11:20/0 = 0 +11:20/0/terrain_set = 0 +11:20/0/terrain = 0 +11:20/0/terrains_peering_bit/right_side = 0 +11:20/0/terrains_peering_bit/bottom_right_corner = 0 +11:20/0/terrains_peering_bit/bottom_side = 0 +11:20/0/terrains_peering_bit/bottom_left_corner = 0 +11:20/0/terrains_peering_bit/left_side = 0 +11:20/0/terrains_peering_bit/top_left_corner = 0 +11:20/0/terrains_peering_bit/top_side = 0 +11:20/0/terrains_peering_bit/top_right_corner = 0 +11:18/0 = 0 +11:18/0/terrain_set = 0 +11:18/0/terrain = 0 +11:18/0/terrains_peering_bit/right_side = 0 +11:18/0/terrains_peering_bit/bottom_right_corner = 0 +11:18/0/terrains_peering_bit/bottom_side = 0 +11:18/0/terrains_peering_bit/bottom_left_corner = 0 +11:18/0/terrains_peering_bit/left_side = 0 +11:18/0/terrains_peering_bit/top_left_corner = 0 +11:18/0/terrains_peering_bit/top_side = 0 +11:18/0/terrains_peering_bit/top_right_corner = 0 +11:17/0 = 0 +11:17/0/terrain_set = 0 +11:17/0/terrain = 0 +11:17/0/terrains_peering_bit/right_side = 0 +11:17/0/terrains_peering_bit/bottom_right_corner = 0 +11:17/0/terrains_peering_bit/bottom_side = 0 +11:17/0/terrains_peering_bit/bottom_left_corner = 0 +11:17/0/terrains_peering_bit/left_side = 0 +11:17/0/terrains_peering_bit/top_left_corner = 0 +11:17/0/terrains_peering_bit/top_side = 0 +11:17/0/terrains_peering_bit/top_right_corner = 0 +11:16/0 = 0 +11:16/0/terrain_set = 0 +11:16/0/terrain = 0 +11:16/0/terrains_peering_bit/right_side = 0 +11:16/0/terrains_peering_bit/bottom_right_corner = 0 +11:16/0/terrains_peering_bit/bottom_side = 0 +11:16/0/terrains_peering_bit/bottom_left_corner = 0 +11:16/0/terrains_peering_bit/left_side = 0 +11:16/0/terrains_peering_bit/top_left_corner = 0 +11:16/0/terrains_peering_bit/top_side = 0 +11:16/0/terrains_peering_bit/top_right_corner = 0 +11:21/0 = 0 +11:21/0/terrain_set = 0 +11:21/0/terrain = 0 +11:21/0/terrains_peering_bit/right_side = 0 +11:21/0/terrains_peering_bit/bottom_right_corner = 0 +11:21/0/terrains_peering_bit/bottom_side = 0 +11:21/0/terrains_peering_bit/bottom_left_corner = 0 +11:21/0/terrains_peering_bit/left_side = 0 +11:21/0/terrains_peering_bit/top_left_corner = 0 +11:21/0/terrains_peering_bit/top_side = 0 +11:21/0/terrains_peering_bit/top_right_corner = 0 +12:21/0 = 0 +12:21/0/terrain_set = 0 +12:21/0/terrain = 0 +12:21/0/terrains_peering_bit/right_side = 0 +12:21/0/terrains_peering_bit/bottom_right_corner = 0 +12:21/0/terrains_peering_bit/bottom_side = 0 +12:21/0/terrains_peering_bit/bottom_left_corner = 0 +12:21/0/terrains_peering_bit/left_side = 0 +12:21/0/terrains_peering_bit/top_left_corner = 0 +12:21/0/terrains_peering_bit/top_side = 0 +12:21/0/terrains_peering_bit/top_right_corner = 0 +13:21/0 = 0 +13:21/0/terrain_set = 0 +13:21/0/terrain = 0 +13:21/0/terrains_peering_bit/right_side = 0 +13:21/0/terrains_peering_bit/bottom_right_corner = 0 +13:21/0/terrains_peering_bit/bottom_side = 0 +13:21/0/terrains_peering_bit/bottom_left_corner = 0 +13:21/0/terrains_peering_bit/left_side = 0 +13:21/0/terrains_peering_bit/top_left_corner = 0 +13:21/0/terrains_peering_bit/top_side = 0 +13:21/0/terrains_peering_bit/top_right_corner = 0 +14:21/0 = 0 +14:21/0/terrain_set = 0 +14:21/0/terrain = 0 +14:21/0/terrains_peering_bit/right_side = 0 +14:21/0/terrains_peering_bit/bottom_right_corner = 0 +14:21/0/terrains_peering_bit/bottom_side = 0 +14:21/0/terrains_peering_bit/bottom_left_corner = 0 +14:21/0/terrains_peering_bit/left_side = 0 +14:21/0/terrains_peering_bit/top_left_corner = 0 +14:21/0/terrains_peering_bit/top_side = 0 +14:21/0/terrains_peering_bit/top_right_corner = 0 +15:21/0 = 0 +15:21/0/terrain_set = 0 +15:21/0/terrain = 0 +15:21/0/terrains_peering_bit/right_side = 0 +15:21/0/terrains_peering_bit/bottom_right_corner = 0 +15:21/0/terrains_peering_bit/bottom_side = 0 +15:21/0/terrains_peering_bit/bottom_left_corner = 0 +15:21/0/terrains_peering_bit/left_side = 0 +15:21/0/terrains_peering_bit/top_left_corner = 0 +15:21/0/terrains_peering_bit/top_side = 0 +15:21/0/terrains_peering_bit/top_right_corner = 0 +16:21/0 = 0 +16:21/0/terrain_set = 0 +16:21/0/terrain = 0 +16:21/0/terrains_peering_bit/right_side = 0 +16:21/0/terrains_peering_bit/bottom_right_corner = 0 +16:21/0/terrains_peering_bit/bottom_side = 0 +16:21/0/terrains_peering_bit/bottom_left_corner = 0 +16:21/0/terrains_peering_bit/left_side = 0 +16:21/0/terrains_peering_bit/top_left_corner = 0 +16:21/0/terrains_peering_bit/top_side = 0 +16:21/0/terrains_peering_bit/top_right_corner = 0 +13:20/0 = 0 +13:20/0/terrain_set = 0 +13:20/0/terrain = 0 +13:20/0/terrains_peering_bit/right_side = 0 +13:20/0/terrains_peering_bit/bottom_right_corner = 0 +13:20/0/terrains_peering_bit/bottom_side = 0 +13:20/0/terrains_peering_bit/bottom_left_corner = 0 +13:20/0/terrains_peering_bit/left_side = 0 +13:20/0/terrains_peering_bit/top_left_corner = 0 +13:20/0/terrains_peering_bit/top_side = 0 +13:20/0/terrains_peering_bit/top_right_corner = 0 +12:20/0 = 0 +12:20/0/terrain_set = 0 +12:20/0/terrain = 0 +12:20/0/terrains_peering_bit/right_side = 0 +12:20/0/terrains_peering_bit/bottom_right_corner = 0 +12:20/0/terrains_peering_bit/bottom_side = 0 +12:20/0/terrains_peering_bit/bottom_left_corner = 0 +12:20/0/terrains_peering_bit/left_side = 0 +12:20/0/terrains_peering_bit/top_left_corner = 0 +12:20/0/terrains_peering_bit/top_side = 0 +12:20/0/terrains_peering_bit/top_right_corner = 0 +14:20/0 = 0 +14:20/0/terrain_set = 0 +14:20/0/terrain = 0 +14:20/0/terrains_peering_bit/right_side = 0 +14:20/0/terrains_peering_bit/bottom_right_corner = 0 +14:20/0/terrains_peering_bit/bottom_side = 0 +14:20/0/terrains_peering_bit/bottom_left_corner = 0 +14:20/0/terrains_peering_bit/left_side = 0 +14:20/0/terrains_peering_bit/top_left_corner = 0 +14:20/0/terrains_peering_bit/top_side = 0 +14:20/0/terrains_peering_bit/top_right_corner = 0 +15:20/0 = 0 +15:20/0/terrain_set = 0 +15:20/0/terrain = 0 +15:20/0/terrains_peering_bit/right_side = 0 +15:20/0/terrains_peering_bit/bottom_right_corner = 0 +15:20/0/terrains_peering_bit/bottom_side = 0 +15:20/0/terrains_peering_bit/bottom_left_corner = 0 +15:20/0/terrains_peering_bit/left_side = 0 +15:20/0/terrains_peering_bit/top_left_corner = 0 +15:20/0/terrains_peering_bit/top_side = 0 +15:20/0/terrains_peering_bit/top_right_corner = 0 +16:20/0 = 0 +16:20/0/terrain_set = 0 +16:20/0/terrain = 0 +16:20/0/terrains_peering_bit/right_side = 0 +16:20/0/terrains_peering_bit/bottom_right_corner = 0 +16:20/0/terrains_peering_bit/bottom_side = 0 +16:20/0/terrains_peering_bit/bottom_left_corner = 0 +16:20/0/terrains_peering_bit/left_side = 0 +16:20/0/terrains_peering_bit/top_left_corner = 0 +16:20/0/terrains_peering_bit/top_side = 0 +16:20/0/terrains_peering_bit/top_right_corner = 0 +15:19/0 = 0 +15:19/0/terrain_set = 0 +15:19/0/terrain = 0 +15:19/0/terrains_peering_bit/right_side = 0 +15:19/0/terrains_peering_bit/bottom_right_corner = 0 +15:19/0/terrains_peering_bit/bottom_side = 0 +15:19/0/terrains_peering_bit/bottom_left_corner = 0 +15:19/0/terrains_peering_bit/left_side = 0 +15:19/0/terrains_peering_bit/top_left_corner = 0 +15:19/0/terrains_peering_bit/top_side = 0 +15:19/0/terrains_peering_bit/top_right_corner = 0 +14:19/0 = 0 +14:19/0/terrain_set = 0 +14:19/0/terrain = 0 +14:19/0/terrains_peering_bit/right_side = 0 +14:19/0/terrains_peering_bit/bottom_right_corner = 0 +14:19/0/terrains_peering_bit/bottom_side = 0 +14:19/0/terrains_peering_bit/bottom_left_corner = 0 +14:19/0/terrains_peering_bit/left_side = 0 +14:19/0/terrains_peering_bit/top_left_corner = 0 +14:19/0/terrains_peering_bit/top_side = 0 +14:19/0/terrains_peering_bit/top_right_corner = 0 +14:18/0 = 0 +14:18/0/terrain_set = 0 +14:18/0/terrain = 0 +14:18/0/terrains_peering_bit/right_side = 0 +14:18/0/terrains_peering_bit/bottom_right_corner = 0 +14:18/0/terrains_peering_bit/bottom_side = 0 +14:18/0/terrains_peering_bit/bottom_left_corner = 0 +14:18/0/terrains_peering_bit/left_side = 0 +14:18/0/terrains_peering_bit/top_left_corner = 0 +14:18/0/terrains_peering_bit/top_side = 0 +14:18/0/terrains_peering_bit/top_right_corner = 0 +14:17/0 = 0 +14:17/0/terrain_set = 0 +14:17/0/terrain = 0 +14:17/0/terrains_peering_bit/right_side = 0 +14:17/0/terrains_peering_bit/bottom_right_corner = 0 +14:17/0/terrains_peering_bit/bottom_side = 0 +14:17/0/terrains_peering_bit/bottom_left_corner = 0 +14:17/0/terrains_peering_bit/left_side = 0 +14:17/0/terrains_peering_bit/top_left_corner = 0 +14:17/0/terrains_peering_bit/top_side = 0 +14:17/0/terrains_peering_bit/top_right_corner = 0 +13:18/0 = 0 +13:18/0/terrain_set = 0 +13:18/0/terrain = 0 +13:18/0/terrains_peering_bit/right_side = 0 +13:18/0/terrains_peering_bit/bottom_right_corner = 0 +13:18/0/terrains_peering_bit/bottom_side = 0 +13:18/0/terrains_peering_bit/bottom_left_corner = 0 +13:18/0/terrains_peering_bit/left_side = 0 +13:18/0/terrains_peering_bit/top_left_corner = 0 +13:18/0/terrains_peering_bit/top_side = 0 +13:18/0/terrains_peering_bit/top_right_corner = 0 +13:19/0 = 0 +13:19/0/terrain_set = 0 +13:19/0/terrain = 0 +13:19/0/terrains_peering_bit/right_side = 0 +13:19/0/terrains_peering_bit/bottom_right_corner = 0 +13:19/0/terrains_peering_bit/bottom_side = 0 +13:19/0/terrains_peering_bit/bottom_left_corner = 0 +13:19/0/terrains_peering_bit/left_side = 0 +13:19/0/terrains_peering_bit/top_left_corner = 0 +13:19/0/terrains_peering_bit/top_side = 0 +13:19/0/terrains_peering_bit/top_right_corner = 0 +15:17/0 = 0 +15:17/0/terrain_set = 0 +15:17/0/terrain = 0 +15:17/0/terrains_peering_bit/right_side = 0 +15:17/0/terrains_peering_bit/bottom_right_corner = 0 +15:17/0/terrains_peering_bit/bottom_side = 0 +15:17/0/terrains_peering_bit/bottom_left_corner = 0 +15:17/0/terrains_peering_bit/left_side = 0 +15:17/0/terrains_peering_bit/top_left_corner = 0 +15:17/0/terrains_peering_bit/top_side = 0 +15:17/0/terrains_peering_bit/top_right_corner = 0 +15:18/0 = 0 +15:18/0/terrain_set = 0 +15:18/0/terrain = 0 +15:18/0/terrains_peering_bit/right_side = 0 +15:18/0/terrains_peering_bit/bottom_right_corner = 0 +15:18/0/terrains_peering_bit/bottom_side = 0 +15:18/0/terrains_peering_bit/bottom_left_corner = 0 +15:18/0/terrains_peering_bit/left_side = 0 +15:18/0/terrains_peering_bit/top_left_corner = 0 +15:18/0/terrains_peering_bit/top_side = 0 +15:18/0/terrains_peering_bit/top_right_corner = 0 +16:17/0 = 0 +16:17/0/terrain_set = 0 +16:17/0/terrain = 0 +16:17/0/terrains_peering_bit/right_side = 0 +16:17/0/terrains_peering_bit/bottom_right_corner = 0 +16:17/0/terrains_peering_bit/bottom_side = 0 +16:17/0/terrains_peering_bit/bottom_left_corner = 0 +16:17/0/terrains_peering_bit/left_side = 0 +16:17/0/terrains_peering_bit/top_left_corner = 0 +16:17/0/terrains_peering_bit/top_side = 0 +16:17/0/terrains_peering_bit/top_right_corner = 0 +17:18/0 = 0 +17:18/0/terrain_set = 0 +17:18/0/terrain = 0 +17:18/0/terrains_peering_bit/right_side = 0 +17:18/0/terrains_peering_bit/bottom_right_corner = 0 +17:18/0/terrains_peering_bit/bottom_side = 0 +17:18/0/terrains_peering_bit/bottom_left_corner = 0 +17:18/0/terrains_peering_bit/left_side = 0 +17:18/0/terrains_peering_bit/top_left_corner = 0 +17:18/0/terrains_peering_bit/top_side = 0 +17:18/0/terrains_peering_bit/top_right_corner = 0 +17:19/0 = 0 +17:19/0/terrain_set = 0 +17:19/0/terrain = 0 +17:19/0/terrains_peering_bit/right_side = 0 +17:19/0/terrains_peering_bit/bottom_right_corner = 0 +17:19/0/terrains_peering_bit/bottom_side = 0 +17:19/0/terrains_peering_bit/bottom_left_corner = 0 +17:19/0/terrains_peering_bit/left_side = 0 +17:19/0/terrains_peering_bit/top_left_corner = 0 +17:19/0/terrains_peering_bit/top_side = 0 +17:19/0/terrains_peering_bit/top_right_corner = 0 +17:20/0 = 0 +17:20/0/terrain_set = 0 +17:20/0/terrain = 0 +17:20/0/terrains_peering_bit/right_side = 0 +17:20/0/terrains_peering_bit/bottom_right_corner = 0 +17:20/0/terrains_peering_bit/bottom_side = 0 +17:20/0/terrains_peering_bit/bottom_left_corner = 0 +17:20/0/terrains_peering_bit/left_side = 0 +17:20/0/terrains_peering_bit/top_left_corner = 0 +17:20/0/terrains_peering_bit/top_side = 0 +17:20/0/terrains_peering_bit/top_right_corner = 0 +16:19/0 = 0 +16:19/0/terrain_set = 0 +16:19/0/terrain = 0 +16:19/0/terrains_peering_bit/right_side = 0 +16:19/0/terrains_peering_bit/bottom_right_corner = 0 +16:19/0/terrains_peering_bit/bottom_side = 0 +16:19/0/terrains_peering_bit/bottom_left_corner = 0 +16:19/0/terrains_peering_bit/left_side = 0 +16:19/0/terrains_peering_bit/top_left_corner = 0 +16:19/0/terrains_peering_bit/top_side = 0 +16:19/0/terrains_peering_bit/top_right_corner = 0 +16:18/0 = 0 +16:18/0/terrain_set = 0 +16:18/0/terrain = 0 +16:18/0/terrains_peering_bit/right_side = 0 +16:18/0/terrains_peering_bit/bottom_right_corner = 0 +16:18/0/terrains_peering_bit/bottom_side = 0 +16:18/0/terrains_peering_bit/bottom_left_corner = 0 +16:18/0/terrains_peering_bit/left_side = 0 +16:18/0/terrains_peering_bit/top_left_corner = 0 +16:18/0/terrains_peering_bit/top_side = 0 +16:18/0/terrains_peering_bit/top_right_corner = 0 +17:17/0 = 0 +17:17/0/terrain_set = 0 +17:17/0/terrain = 0 +17:17/0/terrains_peering_bit/right_side = 0 +17:17/0/terrains_peering_bit/bottom_right_corner = 0 +17:17/0/terrains_peering_bit/bottom_side = 0 +17:17/0/terrains_peering_bit/bottom_left_corner = 0 +17:17/0/terrains_peering_bit/left_side = 0 +17:17/0/terrains_peering_bit/top_left_corner = 0 +17:17/0/terrains_peering_bit/top_side = 0 +17:17/0/terrains_peering_bit/top_right_corner = 0 +17:16/0 = 0 +17:16/0/terrain_set = 0 +17:16/0/terrain = 0 +17:16/0/terrains_peering_bit/right_side = 0 +17:16/0/terrains_peering_bit/bottom_right_corner = 0 +17:16/0/terrains_peering_bit/bottom_side = 0 +17:16/0/terrains_peering_bit/bottom_left_corner = 0 +17:16/0/terrains_peering_bit/left_side = 0 +17:16/0/terrains_peering_bit/top_left_corner = 0 +17:16/0/terrains_peering_bit/top_side = 0 +17:16/0/terrains_peering_bit/top_right_corner = 0 +18:16/0 = 0 +18:16/0/terrain_set = 0 +18:16/0/terrain = 0 +18:16/0/terrains_peering_bit/right_side = 0 +18:16/0/terrains_peering_bit/bottom_right_corner = 0 +18:16/0/terrains_peering_bit/bottom_side = 0 +18:16/0/terrains_peering_bit/bottom_left_corner = 0 +18:16/0/terrains_peering_bit/left_side = 0 +18:16/0/terrains_peering_bit/top_left_corner = 0 +18:16/0/terrains_peering_bit/top_side = 0 +18:16/0/terrains_peering_bit/top_right_corner = 0 +19:16/0 = 0 +19:16/0/terrain_set = 0 +19:16/0/terrain = 0 +19:16/0/terrains_peering_bit/right_side = 0 +19:16/0/terrains_peering_bit/bottom_right_corner = 0 +19:16/0/terrains_peering_bit/bottom_side = 0 +19:16/0/terrains_peering_bit/bottom_left_corner = 0 +19:16/0/terrains_peering_bit/left_side = 0 +19:16/0/terrains_peering_bit/top_left_corner = 0 +19:16/0/terrains_peering_bit/top_side = 0 +19:16/0/terrains_peering_bit/top_right_corner = 0 +18:17/0 = 0 +18:17/0/terrain_set = 0 +18:17/0/terrain = 0 +18:17/0/terrains_peering_bit/right_side = 0 +18:17/0/terrains_peering_bit/bottom_right_corner = 0 +18:17/0/terrains_peering_bit/bottom_side = 0 +18:17/0/terrains_peering_bit/bottom_left_corner = 0 +18:17/0/terrains_peering_bit/left_side = 0 +18:17/0/terrains_peering_bit/top_left_corner = 0 +18:17/0/terrains_peering_bit/top_side = 0 +18:17/0/terrains_peering_bit/top_right_corner = 0 +19:15/0 = 0 +19:15/0/terrain_set = 0 +19:15/0/terrain = 0 +19:15/0/terrains_peering_bit/right_side = 0 +19:15/0/terrains_peering_bit/bottom_right_corner = 0 +19:15/0/terrains_peering_bit/bottom_side = 0 +19:15/0/terrains_peering_bit/bottom_left_corner = 0 +19:15/0/terrains_peering_bit/left_side = 0 +19:15/0/terrains_peering_bit/top_left_corner = 0 +19:15/0/terrains_peering_bit/top_side = 0 +19:15/0/terrains_peering_bit/top_right_corner = 0 +20:15/0 = 0 +20:15/0/terrain_set = 0 +20:15/0/terrain = 0 +20:15/0/terrains_peering_bit/right_side = 0 +20:15/0/terrains_peering_bit/bottom_right_corner = 0 +20:15/0/terrains_peering_bit/bottom_side = 0 +20:15/0/terrains_peering_bit/bottom_left_corner = 0 +20:15/0/terrains_peering_bit/left_side = 0 +20:15/0/terrains_peering_bit/top_left_corner = 0 +20:15/0/terrains_peering_bit/top_side = 0 +20:15/0/terrains_peering_bit/top_right_corner = 0 +21:15/0 = 0 +21:15/0/terrain_set = 0 +21:15/0/terrain = 0 +21:15/0/terrains_peering_bit/right_side = 0 +21:15/0/terrains_peering_bit/bottom_right_corner = 0 +21:15/0/terrains_peering_bit/bottom_side = 0 +21:15/0/terrains_peering_bit/bottom_left_corner = 0 +21:15/0/terrains_peering_bit/left_side = 0 +21:15/0/terrains_peering_bit/top_left_corner = 0 +21:15/0/terrains_peering_bit/top_side = 0 +21:15/0/terrains_peering_bit/top_right_corner = 0 +21:16/0 = 0 +21:16/0/terrain_set = 0 +21:16/0/terrain = 0 +21:16/0/terrains_peering_bit/right_side = 0 +21:16/0/terrains_peering_bit/bottom_right_corner = 0 +21:16/0/terrains_peering_bit/bottom_side = 0 +21:16/0/terrains_peering_bit/bottom_left_corner = 0 +21:16/0/terrains_peering_bit/left_side = 0 +21:16/0/terrains_peering_bit/top_left_corner = 0 +21:16/0/terrains_peering_bit/top_side = 0 +21:16/0/terrains_peering_bit/top_right_corner = 0 +21:17/0 = 0 +21:17/0/terrain_set = 0 +21:17/0/terrain = 0 +21:17/0/terrains_peering_bit/right_side = 0 +21:17/0/terrains_peering_bit/bottom_right_corner = 0 +21:17/0/terrains_peering_bit/bottom_side = 0 +21:17/0/terrains_peering_bit/bottom_left_corner = 0 +21:17/0/terrains_peering_bit/left_side = 0 +21:17/0/terrains_peering_bit/top_left_corner = 0 +21:17/0/terrains_peering_bit/top_side = 0 +21:17/0/terrains_peering_bit/top_right_corner = 0 +20:17/0 = 0 +20:17/0/terrain_set = 0 +20:17/0/terrain = 0 +20:17/0/terrains_peering_bit/right_side = 0 +20:17/0/terrains_peering_bit/bottom_right_corner = 0 +20:17/0/terrains_peering_bit/bottom_side = 0 +20:17/0/terrains_peering_bit/bottom_left_corner = 0 +20:17/0/terrains_peering_bit/left_side = 0 +20:17/0/terrains_peering_bit/top_left_corner = 0 +20:17/0/terrains_peering_bit/top_side = 0 +20:17/0/terrains_peering_bit/top_right_corner = 0 +20:18/0 = 0 +20:18/0/terrain_set = 0 +20:18/0/terrain = 0 +20:18/0/terrains_peering_bit/right_side = 0 +20:18/0/terrains_peering_bit/bottom_right_corner = 0 +20:18/0/terrains_peering_bit/bottom_side = 0 +20:18/0/terrains_peering_bit/bottom_left_corner = 0 +20:18/0/terrains_peering_bit/left_side = 0 +20:18/0/terrains_peering_bit/top_left_corner = 0 +20:18/0/terrains_peering_bit/top_side = 0 +20:18/0/terrains_peering_bit/top_right_corner = 0 +20:19/0 = 0 +20:19/0/terrain_set = 0 +20:19/0/terrain = 0 +20:19/0/terrains_peering_bit/right_side = 0 +20:19/0/terrains_peering_bit/bottom_right_corner = 0 +20:19/0/terrains_peering_bit/bottom_side = 0 +20:19/0/terrains_peering_bit/bottom_left_corner = 0 +20:19/0/terrains_peering_bit/left_side = 0 +20:19/0/terrains_peering_bit/top_left_corner = 0 +20:19/0/terrains_peering_bit/top_side = 0 +20:19/0/terrains_peering_bit/top_right_corner = 0 +20:20/0 = 0 +20:20/0/terrain_set = 0 +20:20/0/terrain = 0 +20:20/0/terrains_peering_bit/right_side = 0 +20:20/0/terrains_peering_bit/bottom_right_corner = 0 +20:20/0/terrains_peering_bit/bottom_side = 0 +20:20/0/terrains_peering_bit/bottom_left_corner = 0 +20:20/0/terrains_peering_bit/left_side = 0 +20:20/0/terrains_peering_bit/top_left_corner = 0 +20:20/0/terrains_peering_bit/top_side = 0 +20:20/0/terrains_peering_bit/top_right_corner = 0 +19:19/0 = 0 +19:19/0/terrain_set = 0 +19:19/0/terrain = 0 +19:19/0/terrains_peering_bit/right_side = 0 +19:19/0/terrains_peering_bit/bottom_right_corner = 0 +19:19/0/terrains_peering_bit/bottom_side = 0 +19:19/0/terrains_peering_bit/bottom_left_corner = 0 +19:19/0/terrains_peering_bit/left_side = 0 +19:19/0/terrains_peering_bit/top_left_corner = 0 +19:19/0/terrains_peering_bit/top_side = 0 +19:19/0/terrains_peering_bit/top_right_corner = 0 +19:18/0 = 0 +19:18/0/terrain_set = 0 +19:18/0/terrain = 0 +19:18/0/terrains_peering_bit/right_side = 0 +19:18/0/terrains_peering_bit/bottom_right_corner = 0 +19:18/0/terrains_peering_bit/bottom_side = 0 +19:18/0/terrains_peering_bit/bottom_left_corner = 0 +19:18/0/terrains_peering_bit/left_side = 0 +19:18/0/terrains_peering_bit/top_left_corner = 0 +19:18/0/terrains_peering_bit/top_side = 0 +19:18/0/terrains_peering_bit/top_right_corner = 0 +19:17/0 = 0 +19:17/0/terrain_set = 0 +19:17/0/terrain = 0 +19:17/0/terrains_peering_bit/right_side = 0 +19:17/0/terrains_peering_bit/bottom_right_corner = 0 +19:17/0/terrains_peering_bit/bottom_side = 0 +19:17/0/terrains_peering_bit/bottom_left_corner = 0 +19:17/0/terrains_peering_bit/left_side = 0 +19:17/0/terrains_peering_bit/top_left_corner = 0 +19:17/0/terrains_peering_bit/top_side = 0 +19:17/0/terrains_peering_bit/top_right_corner = 0 +20:16/0 = 0 +20:16/0/terrain_set = 0 +20:16/0/terrain = 0 +20:16/0/terrains_peering_bit/right_side = 0 +20:16/0/terrains_peering_bit/bottom_right_corner = 0 +20:16/0/terrains_peering_bit/bottom_side = 0 +20:16/0/terrains_peering_bit/bottom_left_corner = 0 +20:16/0/terrains_peering_bit/left_side = 0 +20:16/0/terrains_peering_bit/top_left_corner = 0 +20:16/0/terrains_peering_bit/top_side = 0 +20:16/0/terrains_peering_bit/top_right_corner = 0 +18:19/0 = 0 +18:19/0/terrain_set = 0 +18:19/0/terrain = 0 +18:19/0/terrains_peering_bit/right_side = 0 +18:19/0/terrains_peering_bit/bottom_right_corner = 0 +18:19/0/terrains_peering_bit/bottom_side = 0 +18:19/0/terrains_peering_bit/bottom_left_corner = 0 +18:19/0/terrains_peering_bit/left_side = 0 +18:19/0/terrains_peering_bit/top_left_corner = 0 +18:19/0/terrains_peering_bit/top_side = 0 +18:19/0/terrains_peering_bit/top_right_corner = 0 +18:18/0 = 0 +18:18/0/terrain_set = 0 +18:18/0/terrain = 0 +18:18/0/terrains_peering_bit/right_side = 0 +18:18/0/terrains_peering_bit/bottom_right_corner = 0 +18:18/0/terrains_peering_bit/bottom_side = 0 +18:18/0/terrains_peering_bit/bottom_left_corner = 0 +18:18/0/terrains_peering_bit/left_side = 0 +18:18/0/terrains_peering_bit/top_left_corner = 0 +18:18/0/terrains_peering_bit/top_side = 0 +18:18/0/terrains_peering_bit/top_right_corner = 0 +18:20/0 = 0 +18:20/0/terrain_set = 0 +18:20/0/terrain = 0 +18:20/0/terrains_peering_bit/right_side = 0 +18:20/0/terrains_peering_bit/bottom_right_corner = 0 +18:20/0/terrains_peering_bit/bottom_side = 0 +18:20/0/terrains_peering_bit/bottom_left_corner = 0 +18:20/0/terrains_peering_bit/left_side = 0 +18:20/0/terrains_peering_bit/top_left_corner = 0 +18:20/0/terrains_peering_bit/top_side = 0 +18:20/0/terrains_peering_bit/top_right_corner = 0 +17:21/0 = 0 +17:21/0/terrain_set = 0 +17:21/0/terrain = 0 +17:21/0/terrains_peering_bit/right_side = 0 +17:21/0/terrains_peering_bit/bottom_right_corner = 0 +17:21/0/terrains_peering_bit/bottom_side = 0 +17:21/0/terrains_peering_bit/bottom_left_corner = 0 +17:21/0/terrains_peering_bit/left_side = 0 +17:21/0/terrains_peering_bit/top_left_corner = 0 +17:21/0/terrains_peering_bit/top_side = 0 +17:21/0/terrains_peering_bit/top_right_corner = 0 +18:21/0 = 0 +18:21/0/terrain_set = 0 +18:21/0/terrain = 0 +18:21/0/terrains_peering_bit/right_side = 0 +18:21/0/terrains_peering_bit/bottom_right_corner = 0 +18:21/0/terrains_peering_bit/bottom_side = 0 +18:21/0/terrains_peering_bit/bottom_left_corner = 0 +18:21/0/terrains_peering_bit/left_side = 0 +18:21/0/terrains_peering_bit/top_left_corner = 0 +18:21/0/terrains_peering_bit/top_side = 0 +18:21/0/terrains_peering_bit/top_right_corner = 0 +19:21/0 = 0 +19:21/0/terrain_set = 0 +19:21/0/terrain = 0 +19:21/0/terrains_peering_bit/right_side = 0 +19:21/0/terrains_peering_bit/bottom_right_corner = 0 +19:21/0/terrains_peering_bit/bottom_side = 0 +19:21/0/terrains_peering_bit/bottom_left_corner = 0 +19:21/0/terrains_peering_bit/left_side = 0 +19:21/0/terrains_peering_bit/top_left_corner = 0 +19:21/0/terrains_peering_bit/top_side = 0 +19:21/0/terrains_peering_bit/top_right_corner = 0 +20:21/0 = 0 +20:21/0/terrain_set = 0 +20:21/0/terrain = 0 +20:21/0/terrains_peering_bit/right_side = 0 +20:21/0/terrains_peering_bit/bottom_right_corner = 0 +20:21/0/terrains_peering_bit/bottom_side = 0 +20:21/0/terrains_peering_bit/bottom_left_corner = 0 +20:21/0/terrains_peering_bit/left_side = 0 +20:21/0/terrains_peering_bit/top_left_corner = 0 +20:21/0/terrains_peering_bit/top_side = 0 +20:21/0/terrains_peering_bit/top_right_corner = 0 +21:18/0 = 0 +21:18/0/terrain_set = 0 +21:18/0/terrain = 0 +21:18/0/terrains_peering_bit/right_side = 0 +21:18/0/terrains_peering_bit/bottom_right_corner = 0 +21:18/0/terrains_peering_bit/bottom_side = 0 +21:18/0/terrains_peering_bit/bottom_left_corner = 0 +21:18/0/terrains_peering_bit/left_side = 0 +21:18/0/terrains_peering_bit/top_left_corner = 0 +21:18/0/terrains_peering_bit/top_side = 0 +21:18/0/terrains_peering_bit/top_right_corner = 0 +21:19/0 = 0 +21:19/0/terrain_set = 0 +21:19/0/terrain = 0 +21:19/0/terrains_peering_bit/right_side = 0 +21:19/0/terrains_peering_bit/bottom_right_corner = 0 +21:19/0/terrains_peering_bit/bottom_side = 0 +21:19/0/terrains_peering_bit/bottom_left_corner = 0 +21:19/0/terrains_peering_bit/left_side = 0 +21:19/0/terrains_peering_bit/top_left_corner = 0 +21:19/0/terrains_peering_bit/top_side = 0 +21:19/0/terrains_peering_bit/top_right_corner = 0 +21:20/0 = 0 +21:20/0/terrain_set = 0 +21:20/0/terrain = 0 +21:20/0/terrains_peering_bit/right_side = 0 +21:20/0/terrains_peering_bit/bottom_right_corner = 0 +21:20/0/terrains_peering_bit/bottom_side = 0 +21:20/0/terrains_peering_bit/bottom_left_corner = 0 +21:20/0/terrains_peering_bit/left_side = 0 +21:20/0/terrains_peering_bit/top_left_corner = 0 +21:20/0/terrains_peering_bit/top_side = 0 +21:20/0/terrains_peering_bit/top_right_corner = 0 +21:21/0 = 0 +21:21/0/terrain_set = 0 +21:21/0/terrain = 0 +21:21/0/terrains_peering_bit/right_side = 0 +21:21/0/terrains_peering_bit/bottom_right_corner = 0 +21:21/0/terrains_peering_bit/bottom_side = 0 +21:21/0/terrains_peering_bit/bottom_left_corner = 0 +21:21/0/terrains_peering_bit/left_side = 0 +21:21/0/terrains_peering_bit/top_left_corner = 0 +21:21/0/terrains_peering_bit/top_side = 0 +21:21/0/terrains_peering_bit/top_right_corner = 0 +19:20/0 = 0 +19:20/0/terrain_set = 0 +19:20/0/terrain = 0 +19:20/0/terrains_peering_bit/right_side = 0 +19:20/0/terrains_peering_bit/bottom_right_corner = 0 +19:20/0/terrains_peering_bit/bottom_side = 0 +19:20/0/terrains_peering_bit/bottom_left_corner = 0 +19:20/0/terrains_peering_bit/left_side = 0 +19:20/0/terrains_peering_bit/top_left_corner = 0 +19:20/0/terrains_peering_bit/top_side = 0 +19:20/0/terrains_peering_bit/top_right_corner = 0 +9:9/0 = 0 +10:9/0 = 0 +11:9/0 = 0 +11:10/0 = 0 +10:10/0 = 0 +9:10/0 = 0 +8:9/0 = 0 +8:10/0 = 0 +26:13/0 = 0 +27:13/0 = 0 +28:13/0 = 0 +29:13/0 = 0 +29:14/0 = 0 +28:14/0 = 0 +27:14/0 = 0 +26:14/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_xiqgv"] +texture = ExtResource("10_ti1bm") +0:28/0 = 0 +1:28/0 = 0 +2:28/0 = 0 +3:28/0 = 0 +4:28/0 = 0 +5:28/0 = 0 +6:28/0 = 0 +7:28/0 = 0 +8:28/0 = 0 +9:28/0 = 0 +10:28/0 = 0 +11:28/0 = 0 +12:28/0 = 0 +13:28/0 = 0 +14:28/0 = 0 +15:28/0 = 0 +16:28/0 = 0 +17:28/0 = 0 +17:27/0 = 0 +17:26/0 = 0 +17:25/0 = 0 +17:24/0 = 0 +17:23/0 = 0 +17:22/0 = 0 +17:21/0 = 0 +17:20/0 = 0 +17:19/0 = 0 +16:19/0 = 0 +15:19/0 = 0 +14:19/0 = 0 +13:19/0 = 0 +12:19/0 = 0 +11:19/0 = 0 +10:19/0 = 0 +9:19/0 = 0 +8:19/0 = 0 +7:19/0 = 0 +6:19/0 = 0 +5:19/0 = 0 +4:19/0 = 0 +3:19/0 = 0 +2:19/0 = 0 +1:19/0 = 0 +0:19/0 = 0 +0:20/0 = 0 +0:21/0 = 0 +0:22/0 = 0 +0:23/0 = 0 +0:24/0 = 0 +0:25/0 = 0 +0:26/0 = 0 +0:27/0 = 0 +1:24/0 = 0 +1:23/0 = 0 +1:22/0 = 0 +1:21/0 = 0 +1:25/0 = 0 +1:26/0 = 0 +1:27/0 = 0 +2:22/0 = 0 +2:21/0 = 0 +2:20/0 = 0 +2:23/0 = 0 +2:24/0 = 0 +2:25/0 = 0 +2:26/0 = 0 +3:27/0 = 0 +3:21/0 = 0 +3:22/0 = 0 +3:23/0 = 0 +3:24/0 = 0 +3:25/0 = 0 +3:26/0 = 0 +4:23/0 = 0 +4:24/0 = 0 +4:25/0 = 0 +4:26/0 = 0 +4:27/0 = 0 +2:27/0 = 0 +5:27/0 = 0 +1:20/0 = 0 +3:20/0 = 0 +4:20/0 = 0 +4:21/0 = 0 +5:21/0 = 0 +6:21/0 = 0 +7:21/0 = 0 +8:21/0 = 0 +9:21/0 = 0 +10:21/0 = 0 +9:20/0 = 0 +8:20/0 = 0 +7:20/0 = 0 +6:20/0 = 0 +5:20/0 = 0 +10:20/0 = 0 +11:20/0 = 0 +12:20/0 = 0 +13:20/0 = 0 +14:20/0 = 0 +15:20/0 = 0 +16:20/0 = 0 +16:21/0 = 0 +16:22/0 = 0 +16:23/0 = 0 +16:24/0 = 0 +16:25/0 = 0 +16:26/0 = 0 +16:27/0 = 0 +15:27/0 = 0 +14:27/0 = 0 +13:27/0 = 0 +12:27/0 = 0 +11:27/0 = 0 +10:27/0 = 0 +9:26/0 = 0 +8:26/0 = 0 +7:26/0 = 0 +6:26/0 = 0 +5:26/0 = 0 +9:27/0 = 0 +8:27/0 = 0 +7:27/0 = 0 +6:27/0 = 0 +6:25/0 = 0 +5:25/0 = 0 +5:24/0 = 0 +6:24/0 = 0 +7:23/0 = 0 +8:23/0 = 0 +9:23/0 = 0 +6:23/0 = 0 +5:23/0 = 0 +7:22/0 = 0 +8:22/0 = 0 +9:22/0 = 0 +6:22/0 = 0 +10:22/0 = 0 +11:22/0 = 0 +12:22/0 = 0 +5:22/0 = 0 +4:22/0 = 0 +11:21/0 = 0 +12:21/0 = 0 +13:21/0 = 0 +14:21/0 = 0 +15:21/0 = 0 +13:22/0 = 0 +12:23/0 = 0 +13:23/0 = 0 +14:23/0 = 0 +15:23/0 = 0 +15:24/0 = 0 +15:25/0 = 0 +15:26/0 = 0 +15:22/0 = 0 +14:22/0 = 0 +14:24/0 = 0 +13:25/0 = 0 +13:26/0 = 0 +13:24/0 = 0 +14:25/0 = 0 +14:26/0 = 0 +12:26/0 = 0 +11:26/0 = 0 +10:26/0 = 0 +7:25/0 = 0 +7:24/0 = 0 +8:24/0 = 0 +9:24/0 = 0 +10:24/0 = 0 +11:24/0 = 0 +12:24/0 = 0 +11:25/0 = 0 +10:25/0 = 0 +9:25/0 = 0 +8:25/0 = 0 +12:25/0 = 0 +11:23/0 = 0 +10:23/0 = 0 + +[sub_resource type="TileSet" id="TileSet_waglr"] +tile_size = Vector2i(8, 8) +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Terrain 0" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +sources/0 = SubResource("TileSetAtlasSource_kwl8l") +sources/1 = SubResource("TileSetAtlasSource_xiqgv") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ti1bm"] +texture = ExtResource("11_7yo87") +9:23/0 = 0 +10:23/0 = 0 +11:23/0 = 0 +12:23/0 = 0 +13:23/0 = 0 +14:23/0 = 0 +15:23/0 = 0 +16:23/0 = 0 +17:23/0 = 0 +17:22/0 = 0 +18:21/0 = 0 +18:20/0 = 0 +19:20/0 = 0 +19:19/0 = 0 +20:19/0 = 0 +20:18/0 = 0 +20:17/0 = 0 +20:16/0 = 0 +20:15/0 = 0 +20:14/0 = 0 +20:13/0 = 0 +19:13/0 = 0 +19:12/0 = 0 +18:12/0 = 0 +18:11/0 = 0 +17:11/0 = 0 +16:11/0 = 0 +16:10/0 = 0 +15:10/0 = 0 +14:10/0 = 0 +13:10/0 = 0 +12:10/0 = 0 +11:10/0 = 0 +10:10/0 = 0 +9:10/0 = 0 +8:10/0 = 0 +8:11/0 = 0 +8:12/0 = 0 +7:12/0 = 0 +7:13/0 = 0 +6:13/0 = 0 +6:14/0 = 0 +6:15/0 = 0 +5:15/0 = 0 +5:16/0 = 0 +6:16/0 = 0 +6:17/0 = 0 +6:18/0 = 0 +6:19/0 = 0 +5:18/0 = 0 +5:17/0 = 0 +5:19/0 = 0 +6:20/0 = 0 +7:20/0 = 0 +7:21/0 = 0 +8:21/0 = 0 +8:22/0 = 0 +9:22/0 = 0 +11:22/0 = 0 +12:22/0 = 0 +13:22/0 = 0 +14:22/0 = 0 +15:22/0 = 0 +16:22/0 = 0 +16:21/0 = 0 +15:21/0 = 0 +14:21/0 = 0 +13:21/0 = 0 +12:21/0 = 0 +11:21/0 = 0 +10:21/0 = 0 +10:22/0 = 0 +10:20/0 = 0 +10:19/0 = 0 +11:18/0 = 0 +11:17/0 = 0 +11:16/0 = 0 +12:15/0 = 0 +13:15/0 = 0 +14:15/0 = 0 +14:16/0 = 0 +15:16/0 = 0 +15:17/0 = 0 +15:18/0 = 0 +14:18/0 = 0 +14:19/0 = 0 +13:20/0 = 0 +12:20/0 = 0 +11:20/0 = 0 +9:20/0 = 0 +9:19/0 = 0 +8:19/0 = 0 +8:18/0 = 0 +9:17/0 = 0 +9:16/0 = 0 +10:16/0 = 0 +12:16/0 = 0 +13:17/0 = 0 +14:17/0 = 0 +13:19/0 = 0 +12:19/0 = 0 +11:19/0 = 0 +9:18/0 = 0 +10:15/0 = 0 +10:17/0 = 0 +10:18/0 = 0 +8:20/0 = 0 +7:19/0 = 0 +7:18/0 = 0 +7:17/0 = 0 +7:16/0 = 0 +8:16/0 = 0 +8:17/0 = 0 +9:21/0 = 0 +9:15/0 = 0 +9:14/0 = 0 +8:14/0 = 0 +8:15/0 = 0 +7:15/0 = 0 +7:14/0 = 0 +8:13/0 = 0 +9:13/0 = 0 +9:12/0 = 0 +10:12/0 = 0 +10:11/0 = 0 +9:11/0 = 0 +11:11/0 = 0 +12:11/0 = 0 +13:11/0 = 0 +14:11/0 = 0 +15:11/0 = 0 +12:12/0 = 0 +11:13/0 = 0 +11:14/0 = 0 +10:14/0 = 0 +10:13/0 = 0 +11:12/0 = 0 +13:12/0 = 0 +13:13/0 = 0 +14:14/0 = 0 +11:15/0 = 0 +12:13/0 = 0 +14:12/0 = 0 +14:13/0 = 0 +15:14/0 = 0 +15:15/0 = 0 +13:16/0 = 0 +12:17/0 = 0 +12:18/0 = 0 +13:14/0 = 0 +12:14/0 = 0 +13:18/0 = 0 +14:20/0 = 0 +15:20/0 = 0 +15:19/0 = 0 +16:19/0 = 0 +16:18/0 = 0 +16:20/0 = 0 +17:21/0 = 0 +17:20/0 = 0 +17:19/0 = 0 +18:19/0 = 0 +18:18/0 = 0 +19:18/0 = 0 +19:17/0 = 0 +19:16/0 = 0 +19:15/0 = 0 +19:14/0 = 0 +18:14/0 = 0 +18:13/0 = 0 +17:13/0 = 0 +17:12/0 = 0 +16:12/0 = 0 +15:12/0 = 0 +15:13/0 = 0 +16:14/0 = 0 +16:15/0 = 0 +16:16/0 = 0 +16:13/0 = 0 +16:17/0 = 0 +17:18/0 = 0 +17:17/0 = 0 +18:17/0 = 0 +18:16/0 = 0 +18:15/0 = 0 +17:14/0 = 0 +17:15/0 = 0 +17:16/0 = 0 +5:14/0 = 0 +17:10/0 = 0 +20:20/0 = 0 +19:21/0 = 0 +18:22/0 = 0 + +[sub_resource type="TileSet" id="TileSet_op4cu"] +sources/0 = SubResource("TileSetAtlasSource_ti1bm") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_b5aes"] +texture = ExtResource("15_xiqgv") +36:11/0 = 0 +37:11/0 = 0 +37:12/0 = 0 +36:12/0 = 0 +35:12/0 = 0 +35:11/0 = 0 +34:11/0 = 0 +33:11/0 = 0 +33:12/0 = 0 +34:12/0 = 0 +13:22/0 = 0 +13:21/0 = 0 +13:20/0 = 0 +13:19/0 = 0 +14:19/0 = 0 +14:20/0 = 0 +14:21/0 = 0 +14:22/0 = 0 + +[sub_resource type="TileSet" id="TileSet_w0bku"] +sources/0 = SubResource("TileSetAtlasSource_b5aes") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0ao37"] +texture = ExtResource("16_waglr") +0:0/animation_columns = 5 +0:0/animation_frame_0/duration = 0.2 +0:0/animation_frame_1/duration = 0.2 +0:0/animation_frame_2/duration = 0.2 +0:0/animation_frame_3/duration = 0.2 +0:0/animation_frame_4/duration = 0.2 +0:0/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_371b6"] +texture = ExtResource("18_g01fq") +5:9/0 = 0 +6:9/0 = 0 +6:10/0 = 0 +7:10/0 = 0 +8:10/0 = 0 +8:9/0 = 0 +7:9/0 = 0 +8:11/0 = 0 +8:12/0 = 0 +8:13/0 = 0 +7:13/0 = 0 +7:14/0 = 0 +6:13/0 = 0 +6:12/0 = 0 +5:12/0 = 0 +5:11/0 = 0 +6:11/0 = 0 +7:11/0 = 0 +4:11/0 = 0 +7:12/0 = 0 +5:10/0 = 0 +14:13/0 = 0 +15:13/0 = 0 +16:13/0 = 0 +16:14/0 = 0 +17:14/0 = 0 +17:15/0 = 0 +16:12/0 = 0 +17:13/0 = 0 +16:15/0 = 0 +16:16/0 = 0 +15:16/0 = 0 +15:15/0 = 0 +17:16/0 = 0 +14:15/0 = 0 +14:14/0 = 0 +15:14/0 = 0 +14:16/0 = 0 +0:4/0 = 0 +1:4/0 = 0 +2:4/0 = 0 +3:4/0 = 0 +4:4/0 = 0 +5:4/0 = 0 +6:4/0 = 0 +7:4/0 = 0 +8:4/0 = 0 +9:4/0 = 0 +9:5/0 = 0 +10:5/0 = 0 +11:4/0 = 0 +12:4/0 = 0 +10:4/0 = 0 +13:4/0 = 0 +12:5/0 = 0 +12:6/0 = 0 +12:7/0 = 0 +13:5/0 = 0 +13:6/0 = 0 +13:7/0 = 0 +12:8/0 = 0 +11:7/0 = 0 +10:7/0 = 0 +9:7/0 = 0 +8:7/0 = 0 +7:7/0 = 0 +6:7/0 = 0 +5:7/0 = 0 +4:7/0 = 0 +4:8/0 = 0 +3:8/0 = 0 +2:8/0 = 0 +1:8/0 = 0 +1:7/0 = 0 +0:7/0 = 0 +0:8/0 = 0 +5:8/0 = 0 +10:8/0 = 0 +11:8/0 = 0 +13:8/0 = 0 +9:8/0 = 0 +8:8/0 = 0 +7:8/0 = 0 +6:8/0 = 0 +2:7/0 = 0 +1:6/0 = 0 +0:6/0 = 0 +0:5/0 = 0 +1:5/0 = 0 +4:5/0 = 0 +3:5/0 = 0 +2:5/0 = 0 +5:5/0 = 0 +6:5/0 = 0 +7:5/0 = 0 +8:5/0 = 0 +5:6/0 = 0 +4:6/0 = 0 +3:6/0 = 0 +2:6/0 = 0 +6:6/0 = 0 +7:6/0 = 0 +8:6/0 = 0 +3:7/0 = 0 +5:3/0 = 0 +6:3/0 = 0 +7:3/0 = 0 +8:3/0 = 0 +9:3/0 = 0 +27:0/0 = 0 +28:0/0 = 0 +29:0/0 = 0 +30:0/0 = 0 +31:0/0 = 0 +32:0/0 = 0 +33:0/0 = 0 +34:0/0 = 0 +35:0/0 = 0 +36:0/0 = 0 +37:0/0 = 0 +38:0/0 = 0 +39:0/0 = 0 +40:0/0 = 0 +40:1/0 = 0 +40:2/0 = 0 +40:3/0 = 0 +39:3/0 = 0 +38:3/0 = 0 +37:3/0 = 0 +36:3/0 = 0 +35:3/0 = 0 +34:3/0 = 0 +33:3/0 = 0 +32:3/0 = 0 +31:3/0 = 0 +30:3/0 = 0 +29:3/0 = 0 +28:3/0 = 0 +27:3/0 = 0 +27:2/0 = 0 +27:1/0 = 0 +28:1/0 = 0 +29:1/0 = 0 +30:1/0 = 0 +31:1/0 = 0 +32:1/0 = 0 +33:1/0 = 0 +34:1/0 = 0 +35:1/0 = 0 +36:1/0 = 0 +37:1/0 = 0 +38:1/0 = 0 +39:1/0 = 0 +39:2/0 = 0 +38:2/0 = 0 +37:2/0 = 0 +36:2/0 = 0 +35:2/0 = 0 +34:2/0 = 0 +33:2/0 = 0 +32:2/0 = 0 +31:2/0 = 0 +30:2/0 = 0 +29:2/0 = 0 +28:2/0 = 0 +9:6/0 = 0 +10:6/0 = 0 +11:6/0 = 0 +11:5/0 = 0 +32:14/0 = 0 +32:13/0 = 0 +33:13/0 = 0 +34:13/0 = 0 +35:13/0 = 0 +36:13/0 = 0 +37:13/0 = 0 +38:13/0 = 0 +39:13/0 = 0 +40:13/0 = 0 +41:13/0 = 0 +42:13/0 = 0 +43:13/0 = 0 +44:13/0 = 0 +44:14/0 = 0 +44:15/0 = 0 +44:16/0 = 0 +43:16/0 = 0 +42:16/0 = 0 +41:16/0 = 0 +40:16/0 = 0 +39:16/0 = 0 +38:16/0 = 0 +37:16/0 = 0 +36:16/0 = 0 +35:16/0 = 0 +34:16/0 = 0 +33:16/0 = 0 +32:16/0 = 0 +32:15/0 = 0 +33:14/0 = 0 +34:14/0 = 0 +35:14/0 = 0 +41:14/0 = 0 +42:14/0 = 0 +43:14/0 = 0 +42:15/0 = 0 +41:15/0 = 0 +40:15/0 = 0 +39:15/0 = 0 +38:15/0 = 0 +37:15/0 = 0 +36:15/0 = 0 +35:15/0 = 0 +34:15/0 = 0 +37:14/0 = 0 +38:14/0 = 0 +39:14/0 = 0 +40:14/0 = 0 +43:15/0 = 0 + +[sub_resource type="TileSet" id="TileSet_d3ars"] +sources/1 = SubResource("TileSetAtlasSource_0ao37") +sources/3 = SubResource("TileSetAtlasSource_371b6") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8l3nt"] +texture = ExtResource("12_ti1bm") +4:2/size_in_atlas = Vector2i(23, 27) +4:2/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ao4cr"] +texture = ExtResource("18_0bcf6") +10:2/size_in_atlas = Vector2i(11, 27) +10:2/0 = 0 + +[sub_resource type="TileSet" id="TileSet_kwl8l"] +sources/0 = SubResource("TileSetAtlasSource_8l3nt") +sources/1 = SubResource("TileSetAtlasSource_ao4cr") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_w0bku"] +texture = ExtResource("15_waglr") +8:5/size_in_atlas = Vector2i(19, 20) +8:5/0 = 0 + +[sub_resource type="TileSet" id="TileSet_0ao37"] +sources/4 = SubResource("TileSetAtlasSource_w0bku") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_gjpho"] +texture = ExtResource("3_5nsto") +1:10/size_in_atlas = Vector2i(6, 4) +1:10/animation_columns = 6 +1:10/animation_separation = Vector2i(1, 0) +1:10/animation_frame_0/duration = 0.2 +1:10/animation_frame_1/duration = 0.2 +1:10/animation_frame_2/duration = 0.2 +1:10/animation_frame_3/duration = 0.2 +1:10/animation_frame_4/duration = 0.2 +1:10/animation_frame_5/duration = 0.2 +1:10/0 = 0 +1:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-96, -64, 96, -64, 96, 64, -96, 64) + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_g01fq"] +texture = ExtResource("19_d3ars") +23:14/0 = 0 +24:14/0 = 0 +25:14/0 = 0 +25:15/0 = 0 +26:15/0 = 0 +26:14/0 = 0 +26:16/0 = 0 +26:17/0 = 0 +25:17/0 = 0 +24:17/0 = 0 +23:17/0 = 0 +23:16/0 = 0 +23:15/0 = 0 +24:15/0 = 0 +24:16/0 = 0 +25:16/0 = 0 +35:14/0 = 0 +35:15/0 = 0 +36:15/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0bcf6"] +texture = ExtResource("19_mvfa8") +27:11/0 = 0 +28:11/0 = 0 +29:11/0 = 0 +30:11/0 = 0 +31:11/0 = 0 +32:11/0 = 0 +32:12/0 = 0 +31:12/0 = 0 +30:12/0 = 0 +29:12/0 = 0 +28:12/0 = 0 +27:12/0 = 0 +27:13/0 = 0 +28:13/0 = 0 +29:13/0 = 0 +30:13/0 = 0 +47:11/0 = 0 +48:11/0 = 0 +49:11/0 = 0 +49:12/0 = 0 +49:13/0 = 0 +49:14/0 = 0 +49:15/0 = 0 +49:16/0 = 0 +48:16/0 = 0 +48:15/0 = 0 +48:14/0 = 0 +48:13/0 = 0 +48:12/0 = 0 +47:12/0 = 0 +47:13/0 = 0 +47:16/0 = 0 +47:15/0 = 0 +47:14/0 = 0 + +[sub_resource type="TileSet" id="TileSet_p70al"] +physics_layer_0/collision_layer = 1 +sources/1 = SubResource("TileSetAtlasSource_gjpho") +sources/2 = SubResource("TileSetAtlasSource_g01fq") +sources/3 = SubResource("TileSetAtlasSource_0bcf6") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_d3ars"] +texture = ExtResource("18_rwt1y") +0:0/size_in_atlas = Vector2i(42, 22) +0:0/0 = 0 + +[sub_resource type="TileSet" id="TileSet_l11rc"] +sources/0 = SubResource("TileSetAtlasSource_d3ars") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_l11rc"] +texture = ExtResource("19_mvfa8") +4:12/0 = 0 +5:12/0 = 0 +6:12/0 = 0 +7:12/0 = 0 +8:13/0 = 0 +9:13/0 = 0 +10:13/0 = 0 +11:13/0 = 0 +12:13/0 = 0 +13:13/0 = 0 +14:13/0 = 0 +15:13/0 = 0 +16:13/0 = 0 +17:13/0 = 0 +18:13/0 = 0 +14:12/0 = 0 +13:12/0 = 0 +12:12/0 = 0 +11:12/0 = 0 +10:12/0 = 0 +9:12/0 = 0 +8:12/0 = 0 +15:12/0 = 0 +16:12/0 = 0 +17:12/0 = 0 +18:12/0 = 0 +19:12/0 = 0 +20:12/0 = 0 +21:12/0 = 0 +22:12/0 = 0 +23:12/0 = 0 +24:12/0 = 0 +25:12/0 = 0 +25:13/0 = 0 +25:14/0 = 0 +25:15/0 = 0 +25:16/0 = 0 +25:17/0 = 0 +25:18/0 = 0 +24:18/0 = 0 +23:18/0 = 0 +22:18/0 = 0 +21:18/0 = 0 +20:18/0 = 0 +19:18/0 = 0 +18:18/0 = 0 +17:18/0 = 0 +16:18/0 = 0 +15:18/0 = 0 +14:18/0 = 0 +13:18/0 = 0 +13:19/0 = 0 +12:19/0 = 0 +11:19/0 = 0 +10:19/0 = 0 +9:19/0 = 0 +8:19/0 = 0 +7:19/0 = 0 +6:19/0 = 0 +5:19/0 = 0 +4:19/0 = 0 +12:18/0 = 0 +24:19/0 = 0 +25:19/0 = 0 +23:19/0 = 0 +22:19/0 = 0 +21:19/0 = 0 +20:19/0 = 0 +19:19/0 = 0 +18:19/0 = 0 +17:19/0 = 0 +16:19/0 = 0 +15:19/0 = 0 +14:19/0 = 0 +8:18/0 = 0 +7:18/0 = 0 +6:18/0 = 0 +5:18/0 = 0 +4:18/0 = 0 +9:18/0 = 0 +10:18/0 = 0 +11:18/0 = 0 +15:17/0 = 0 +16:17/0 = 0 +17:17/0 = 0 +18:17/0 = 0 +19:17/0 = 0 +20:17/0 = 0 +21:17/0 = 0 +22:17/0 = 0 +14:17/0 = 0 +13:17/0 = 0 +12:17/0 = 0 +11:17/0 = 0 +23:17/0 = 0 +24:17/0 = 0 +26:17/0 = 0 +26:16/0 = 0 +24:16/0 = 0 +23:16/0 = 0 +22:16/0 = 0 +21:16/0 = 0 +20:16/0 = 0 +19:16/0 = 0 +18:16/0 = 0 +17:16/0 = 0 +16:16/0 = 0 +10:17/0 = 0 +9:17/0 = 0 +8:17/0 = 0 +7:17/0 = 0 +6:17/0 = 0 +5:17/0 = 0 +4:16/0 = 0 +5:16/0 = 0 +6:16/0 = 0 +7:16/0 = 0 +8:16/0 = 0 +4:17/0 = 0 +3:17/0 = 0 +3:16/0 = 0 +4:15/0 = 0 +4:14/0 = 0 +5:13/0 = 0 +6:13/0 = 0 +6:14/0 = 0 +6:15/0 = 0 +5:15/0 = 0 +5:14/0 = 0 +4:13/0 = 0 +7:15/0 = 0 +8:14/0 = 0 +9:14/0 = 0 +11:14/0 = 0 +10:15/0 = 0 +9:15/0 = 0 +7:14/0 = 0 +10:14/0 = 0 +7:13/0 = 0 +19:13/0 = 0 +20:13/0 = 0 +21:13/0 = 0 +22:13/0 = 0 +23:13/0 = 0 +24:13/0 = 0 +19:14/0 = 0 +18:14/0 = 0 +17:14/0 = 0 +16:14/0 = 0 +20:14/0 = 0 +21:14/0 = 0 +22:14/0 = 0 +23:14/0 = 0 +24:14/0 = 0 +26:14/0 = 0 +26:15/0 = 0 +24:15/0 = 0 +23:15/0 = 0 +22:15/0 = 0 +21:15/0 = 0 +20:15/0 = 0 +19:15/0 = 0 +18:15/0 = 0 +17:15/0 = 0 +16:15/0 = 0 +15:15/0 = 0 +14:15/0 = 0 +13:15/0 = 0 +12:15/0 = 0 +15:14/0 = 0 +14:14/0 = 0 +13:14/0 = 0 +12:14/0 = 0 +11:15/0 = 0 +9:16/0 = 0 +10:16/0 = 0 +11:16/0 = 0 +12:16/0 = 0 +13:16/0 = 0 +14:16/0 = 0 +15:16/0 = 0 +8:15/0 = 0 +26:19/0 = 0 +26:18/0 = 0 +26:13/0 = 0 +26:12/0 = 0 +26:11/0 = 0 +26:10/0 = 0 +26:9/0 = 0 +26:8/0 = 0 +26:5/0 = 0 +26:6/0 = 0 +26:7/0 = 0 +28:12/0 = 0 +28:13/0 = 0 +28:14/0 = 0 +28:15/0 = 0 +29:16/0 = 0 +29:17/0 = 0 +29:18/0 = 0 +29:19/0 = 0 +28:11/0 = 0 +29:12/0 = 0 +30:12/0 = 0 +29:11/0 = 0 +30:11/0 = 0 +31:11/0 = 0 +31:12/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_y1bqn"] +texture = ExtResource("22_l11rc") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_7dsfl"] +texture = ExtResource("23_w86vl") +11:10/0 = 0 +11:11/0 = 0 +12:11/0 = 0 +12:12/0 = 0 +13:12/0 = 0 +14:12/0 = 0 +15:12/0 = 0 +16:12/0 = 0 +17:12/0 = 0 +18:12/0 = 0 +18:11/0 = 0 +17:11/0 = 0 +16:10/0 = 0 +15:10/0 = 0 +14:10/0 = 0 +13:10/0 = 0 +12:10/0 = 0 +10:10/0 = 0 +9:10/0 = 0 +10:11/0 = 0 +13:11/0 = 0 +17:10/0 = 0 +18:10/0 = 0 +19:10/0 = 0 +20:10/0 = 0 +21:10/0 = 0 +21:11/0 = 0 +20:11/0 = 0 +19:11/0 = 0 +16:11/0 = 0 +15:11/0 = 0 +14:11/0 = 0 +11:12/0 = 0 +14:13/0 = 0 +13:13/0 = 0 +12:13/0 = 0 +11:13/0 = 0 +10:13/0 = 0 +10:12/0 = 0 +9:12/0 = 0 +9:13/0 = 0 +15:13/0 = 0 +16:13/0 = 0 +17:13/0 = 0 +18:13/0 = 0 +19:13/0 = 0 +20:13/0 = 0 +21:13/0 = 0 +21:12/0 = 0 +20:12/0 = 0 +19:12/0 = 0 +9:11/0 = 0 +8:10/0 = 0 +7:10/0 = 0 +7:11/0 = 0 +8:11/0 = 0 +8:12/0 = 0 +8:13/0 = 0 +8:14/0 = 0 +7:13/0 = 0 +7:12/0 = 0 +22:13/0 = 0 +22:12/0 = 0 +22:11/0 = 0 +22:10/0 = 0 +22:9/0 = 0 +22:8/0 = 0 +21:8/0 = 0 +21:7/0 = 0 +21:9/0 = 0 +21:6/0 = 0 +21:5/0 = 0 +22:5/0 = 0 +22:6/0 = 0 +22:7/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_mq4nq"] +texture = ExtResource("19_d3ars") +0:15/0 = 0 +1:11/0 = 0 +2:11/0 = 0 +3:11/0 = 0 +4:11/0 = 0 +5:11/0 = 0 +6:11/0 = 0 +6:12/0 = 0 +7:12/0 = 0 +8:12/0 = 0 +9:12/0 = 0 +10:12/0 = 0 +8:11/0 = 0 +7:11/0 = 0 +1:10/0 = 0 +2:10/0 = 0 +3:10/0 = 0 +4:10/0 = 0 +5:10/0 = 0 +6:10/0 = 0 +7:10/0 = 0 +8:10/0 = 0 +9:10/0 = 0 +9:11/0 = 0 +10:11/0 = 0 +5:12/0 = 0 +4:12/0 = 0 +3:12/0 = 0 +2:12/0 = 0 +1:12/0 = 0 +3:13/0 = 0 +4:13/0 = 0 +5:13/0 = 0 +5:15/0 = 0 +4:15/0 = 0 +6:15/0 = 0 +7:15/0 = 0 +8:15/0 = 0 +9:15/0 = 0 +7:13/0 = 0 +6:13/0 = 0 +8:13/0 = 0 +10:14/0 = 0 +10:15/0 = 0 +10:10/0 = 0 +0:16/0 = 0 +0:17/0 = 0 +1:17/0 = 0 +2:17/0 = 0 +3:17/0 = 0 +4:17/0 = 0 +5:17/0 = 0 +6:17/0 = 0 +7:17/0 = 0 +8:17/0 = 0 +9:17/0 = 0 +10:17/0 = 0 +10:16/0 = 0 +9:16/0 = 0 +8:16/0 = 0 +7:16/0 = 0 +6:16/0 = 0 +5:16/0 = 0 +4:16/0 = 0 +3:16/0 = 0 +1:16/0 = 0 +11:16/0 = 0 +11:15/0 = 0 +11:14/0 = 0 +11:12/0 = 0 +11:11/0 = 0 +11:10/0 = 0 +2:16/0 = 0 +2:13/0 = 0 +2:14/0 = 0 +2:15/0 = 0 +3:15/0 = 0 +3:14/0 = 0 +4:14/0 = 0 +1:15/0 = 0 +1:14/0 = 0 +1:13/0 = 0 +0:13/0 = 0 +0:12/0 = 0 +0:11/0 = 0 +0:14/0 = 0 +0:10/0 = 0 +9:13/0 = 0 +10:13/0 = 0 +11:13/0 = 0 +9:14/0 = 0 +8:14/0 = 0 +7:14/0 = 0 +6:14/0 = 0 +5:14/0 = 0 +12:15/0 = 0 +12:14/0 = 0 +12:13/0 = 0 +11:17/0 = 0 +12:10/0 = 0 +12:11/0 = 0 +12:12/0 = 0 +12:16/0 = 0 +12:17/0 = 0 +19:10/0 = 0 +19:11/0 = 0 +19:12/0 = 0 +19:13/0 = 0 +19:14/0 = 0 +19:15/0 = 0 +19:16/0 = 0 +19:17/0 = 0 +20:17/0 = 0 +21:17/0 = 0 +22:17/0 = 0 +22:16/0 = 0 +22:15/0 = 0 +21:14/0 = 0 +21:13/0 = 0 +21:12/0 = 0 +21:11/0 = 0 +21:10/0 = 0 +21:16/0 = 0 +21:15/0 = 0 +20:15/0 = 0 +20:14/0 = 0 +20:16/0 = 0 +20:13/0 = 0 +20:12/0 = 0 +20:11/0 = 0 +20:10/0 = 0 +22:11/0 = 0 +22:12/0 = 0 +22:13/0 = 0 +22:14/0 = 0 +22:10/0 = 0 +22:9/0 = 0 +22:8/0 = 0 +22:7/0 = 0 +22:6/0 = 0 +21:6/0 = 0 +21:7/0 = 0 +21:8/0 = 0 +21:9/0 = 0 +21:5/0 = 0 +21:4/0 = 0 +21:3/0 = 0 +21:2/0 = 0 +22:2/0 = 0 +22:1/0 = 0 +22:3/0 = 0 +22:4/0 = 0 +22:5/0 = 0 +21:1/0 = 0 +23:1/0 = 0 +24:1/0 = 0 +25:1/0 = 0 +26:1/0 = 0 +27:1/0 = 0 +28:1/0 = 0 +29:1/0 = 0 +30:1/0 = 0 +28:2/0 = 0 +27:2/0 = 0 +26:2/0 = 0 +25:2/0 = 0 +24:2/0 = 0 +23:2/0 = 0 +28:3/0 = 0 +29:3/0 = 0 +30:3/0 = 0 +31:3/0 = 0 +27:3/0 = 0 +26:3/0 = 0 +25:3/0 = 0 +24:3/0 = 0 +23:3/0 = 0 +27:4/0 = 0 +28:4/0 = 0 +29:4/0 = 0 +30:4/0 = 0 +26:4/0 = 0 +25:4/0 = 0 +24:4/0 = 0 +28:5/0 = 0 +29:5/0 = 0 +30:5/0 = 0 +31:5/0 = 0 +31:6/0 = 0 +30:6/0 = 0 +29:6/0 = 0 +28:6/0 = 0 +27:6/0 = 0 +26:6/0 = 0 +25:6/0 = 0 +24:6/0 = 0 +23:6/0 = 0 +23:5/0 = 0 +24:5/0 = 0 +25:5/0 = 0 +26:5/0 = 0 +27:5/0 = 0 +32:6/0 = 0 +33:6/0 = 0 +34:7/0 = 0 +35:7/0 = 0 +33:7/0 = 0 +32:7/0 = 0 +31:7/0 = 0 +30:7/0 = 0 +32:5/0 = 0 +33:5/0 = 0 +33:4/0 = 0 +32:3/0 = 0 +31:2/0 = 0 +30:2/0 = 0 +29:2/0 = 0 +29:0/0 = 0 +28:0/0 = 0 +27:0/0 = 0 +22:0/0 = 0 +21:0/0 = 0 +23:0/0 = 0 +24:0/0 = 0 +25:0/0 = 0 +26:0/0 = 0 +30:0/0 = 0 +31:0/0 = 0 +31:1/0 = 0 +32:1/0 = 0 +33:1/0 = 0 +32:0/0 = 0 +33:0/0 = 0 +34:0/0 = 0 +35:0/0 = 0 +36:0/0 = 0 +37:0/0 = 0 +36:1/0 = 0 +35:1/0 = 0 +34:1/0 = 0 +33:2/0 = 0 +32:2/0 = 0 +34:2/0 = 0 +35:2/0 = 0 +36:3/0 = 0 +37:3/0 = 0 +38:3/0 = 0 +36:4/0 = 0 +35:4/0 = 0 +34:4/0 = 0 +32:4/0 = 0 +31:4/0 = 0 +37:4/0 = 0 +38:4/0 = 0 +39:4/0 = 0 +33:3/0 = 0 +34:3/0 = 0 +35:3/0 = 0 +39:2/0 = 0 +38:2/0 = 0 +37:2/0 = 0 +36:2/0 = 0 +39:3/0 = 0 +40:3/0 = 0 +41:3/0 = 0 +41:2/0 = 0 +40:2/0 = 0 +37:1/0 = 0 +38:1/0 = 0 +39:1/0 = 0 +40:1/0 = 0 +41:1/0 = 0 +42:1/0 = 0 +43:1/0 = 0 +44:1/0 = 0 +45:1/0 = 0 +41:0/0 = 0 +40:0/0 = 0 +39:0/0 = 0 +38:0/0 = 0 +42:0/0 = 0 +43:0/0 = 0 +44:0/0 = 0 +45:0/0 = 0 +46:0/0 = 0 +46:1/0 = 0 +47:1/0 = 0 +47:0/0 = 0 +48:0/0 = 0 +49:0/0 = 0 +49:1/0 = 0 +49:2/0 = 0 +49:3/0 = 0 +49:4/0 = 0 +48:4/0 = 0 +48:5/0 = 0 +48:6/0 = 0 +48:7/0 = 0 +48:8/0 = 0 +48:9/0 = 0 +49:5/0 = 0 +49:6/0 = 0 +49:7/0 = 0 +49:8/0 = 0 +49:9/0 = 0 +49:10/0 = 0 +49:11/0 = 0 +49:12/0 = 0 +49:13/0 = 0 +49:14/0 = 0 +49:15/0 = 0 +49:16/0 = 0 +49:17/0 = 0 +48:17/0 = 0 +47:17/0 = 0 +46:17/0 = 0 +45:17/0 = 0 +44:17/0 = 0 +43:17/0 = 0 +42:17/0 = 0 +41:17/0 = 0 +40:17/0 = 0 +39:17/0 = 0 +38:17/0 = 0 +37:17/0 = 0 +36:17/0 = 0 +35:17/0 = 0 +34:17/0 = 0 +33:17/0 = 0 +32:17/0 = 0 +31:17/0 = 0 +30:17/0 = 0 +29:17/0 = 0 +28:17/0 = 0 +27:17/0 = 0 +26:17/0 = 0 +25:17/0 = 0 +24:17/0 = 0 +24:16/0 = 0 +25:16/0 = 0 +26:15/0 = 0 +27:14/0 = 0 +28:14/0 = 0 +29:14/0 = 0 +30:14/0 = 0 +31:14/0 = 0 +32:14/0 = 0 +33:14/0 = 0 +34:14/0 = 0 +35:14/0 = 0 +36:14/0 = 0 +37:14/0 = 0 +38:14/0 = 0 +39:14/0 = 0 +40:15/0 = 0 +41:15/0 = 0 +42:15/0 = 0 +43:15/0 = 0 +44:16/0 = 0 +45:16/0 = 0 +46:16/0 = 0 +47:16/0 = 0 +48:16/0 = 0 +31:16/0 = 0 +30:16/0 = 0 +29:16/0 = 0 +32:16/0 = 0 +33:16/0 = 0 +34:16/0 = 0 +35:15/0 = 0 +36:15/0 = 0 +37:15/0 = 0 +38:15/0 = 0 +39:15/0 = 0 +43:16/0 = 0 +39:16/0 = 0 +40:16/0 = 0 +37:16/0 = 0 +36:16/0 = 0 +35:16/0 = 0 +42:16/0 = 0 +41:16/0 = 0 +38:16/0 = 0 +28:16/0 = 0 +27:16/0 = 0 +27:15/0 = 0 +25:15/0 = 0 +28:15/0 = 0 +29:15/0 = 0 +30:15/0 = 0 +31:15/0 = 0 +32:15/0 = 0 +33:15/0 = 0 +34:15/0 = 0 +26:16/0 = 0 +23:16/0 = 0 +23:17/0 = 0 +23:15/0 = 0 +23:14/0 = 0 +24:14/0 = 0 +24:13/0 = 0 +24:12/0 = 0 +24:11/0 = 0 +24:10/0 = 0 +25:9/0 = 0 +25:8/0 = 0 +25:7/0 = 0 +24:7/0 = 0 +24:8/0 = 0 +24:9/0 = 0 +23:10/0 = 0 +23:11/0 = 0 +23:12/0 = 0 +23:9/0 = 0 +23:7/0 = 0 +23:8/0 = 0 +25:14/0 = 0 +26:14/0 = 0 +26:13/0 = 0 +25:13/0 = 0 +25:12/0 = 0 +23:13/0 = 0 +24:15/0 = 0 +29:13/0 = 0 +30:13/0 = 0 +31:13/0 = 0 +32:13/0 = 0 +33:12/0 = 0 +34:12/0 = 0 +35:11/0 = 0 +36:11/0 = 0 +37:11/0 = 0 +32:12/0 = 0 +31:12/0 = 0 +28:13/0 = 0 +27:13/0 = 0 +29:12/0 = 0 +30:12/0 = 0 +32:11/0 = 0 +33:11/0 = 0 +34:11/0 = 0 +38:11/0 = 0 +31:11/0 = 0 +30:11/0 = 0 +29:11/0 = 0 +28:11/0 = 0 +28:10/0 = 0 +29:10/0 = 0 +30:10/0 = 0 +25:10/0 = 0 +26:9/0 = 0 +26:8/0 = 0 +27:8/0 = 0 +27:9/0 = 0 +27:10/0 = 0 +27:11/0 = 0 +26:12/0 = 0 +25:11/0 = 0 +26:7/0 = 0 +27:7/0 = 0 +29:7/0 = 0 +29:8/0 = 0 +29:9/0 = 0 +26:10/0 = 0 +26:11/0 = 0 +28:7/0 = 0 +28:8/0 = 0 +28:9/0 = 0 +27:12/0 = 0 +30:8/0 = 0 +31:8/0 = 0 +31:9/0 = 0 +32:9/0 = 0 +33:9/0 = 0 +34:10/0 = 0 +35:10/0 = 0 +36:10/0 = 0 +37:10/0 = 0 +33:10/0 = 0 +32:10/0 = 0 +31:10/0 = 0 +30:9/0 = 0 +34:9/0 = 0 +35:9/0 = 0 +28:12/0 = 0 +34:8/0 = 0 +35:8/0 = 0 +36:8/0 = 0 +37:8/0 = 0 +37:9/0 = 0 +38:9/0 = 0 +38:10/0 = 0 +39:11/0 = 0 +38:12/0 = 0 +38:13/0 = 0 +34:13/0 = 0 +35:13/0 = 0 +36:12/0 = 0 +37:12/0 = 0 +33:13/0 = 0 +36:13/0 = 0 +37:13/0 = 0 +39:12/0 = 0 +40:12/0 = 0 +41:11/0 = 0 +42:11/0 = 0 +40:11/0 = 0 +35:12/0 = 0 +32:8/0 = 0 +38:8/0 = 0 +36:9/0 = 0 +33:8/0 = 0 +34:5/0 = 0 +35:5/0 = 0 +36:5/0 = 0 +37:5/0 = 0 +38:5/0 = 0 +37:6/0 = 0 +38:6/0 = 0 +39:6/0 = 0 +39:7/0 = 0 +40:7/0 = 0 +38:7/0 = 0 +37:7/0 = 0 +36:7/0 = 0 +36:6/0 = 0 +35:6/0 = 0 +34:6/0 = 0 +39:5/0 = 0 +40:5/0 = 0 +41:5/0 = 0 +42:4/0 = 0 +43:4/0 = 0 +44:4/0 = 0 +45:4/0 = 0 +45:5/0 = 0 +45:6/0 = 0 +45:7/0 = 0 +44:8/0 = 0 +44:9/0 = 0 +44:10/0 = 0 +44:11/0 = 0 +44:12/0 = 0 +44:13/0 = 0 +44:14/0 = 0 +44:15/0 = 0 +46:15/0 = 0 +47:14/0 = 0 +47:13/0 = 0 +47:12/0 = 0 +48:11/0 = 0 +48:10/0 = 0 +48:12/0 = 0 +48:13/0 = 0 +48:14/0 = 0 +48:15/0 = 0 +47:11/0 = 0 +47:10/0 = 0 +47:9/0 = 0 +47:8/0 = 0 +47:7/0 = 0 +46:12/0 = 0 +46:13/0 = 0 +46:14/0 = 0 +46:11/0 = 0 +46:10/0 = 0 +47:15/0 = 0 +45:13/0 = 0 +45:12/0 = 0 +45:10/0 = 0 +45:11/0 = 0 +45:14/0 = 0 +45:15/0 = 0 +39:13/0 = 0 +41:12/0 = 0 +42:12/0 = 0 +42:13/0 = 0 +42:14/0 = 0 +40:14/0 = 0 +41:14/0 = 0 +43:14/0 = 0 +43:12/0 = 0 +43:11/0 = 0 +41:13/0 = 0 +43:13/0 = 0 +43:10/0 = 0 +42:10/0 = 0 +40:13/0 = 0 +39:10/0 = 0 +39:9/0 = 0 +39:8/0 = 0 +41:7/0 = 0 +42:8/0 = 0 +43:8/0 = 0 +45:9/0 = 0 +43:9/0 = 0 +42:9/0 = 0 +41:9/0 = 0 +40:9/0 = 0 +40:8/0 = 0 +41:8/0 = 0 +41:10/0 = 0 +40:10/0 = 0 +42:7/0 = 0 +41:6/0 = 0 +40:6/0 = 0 +42:6/0 = 0 +43:6/0 = 0 +44:6/0 = 0 +44:5/0 = 0 +40:4/0 = 0 +41:4/0 = 0 +43:5/0 = 0 +44:7/0 = 0 +43:7/0 = 0 +42:5/0 = 0 +45:8/0 = 0 +46:9/0 = 0 +46:8/0 = 0 +46:7/0 = 0 +46:6/0 = 0 +46:5/0 = 0 +46:4/0 = 0 +47:4/0 = 0 +47:5/0 = 0 +47:6/0 = 0 + +[sub_resource type="TileSet" id="TileSet_w86vl"] +sources/0 = SubResource("TileSetAtlasSource_l11rc") +sources/1 = SubResource("TileSetAtlasSource_y1bqn") +sources/2 = SubResource("TileSetAtlasSource_7dsfl") +sources/3 = SubResource("TileSetAtlasSource_mq4nq") + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0ao37"] +size = Vector2(264, 204) + +[node name="World" type="Node2D"] +position = Vector2(0, 1) +script = ExtResource("1_script") + +[node name="PlayersContainer" type="Node2D" parent="."] +y_sort_enabled = true +position = Vector2(16, 0) +scale = Vector2(1.0000001, 1.0000001) + +[node name="Ground" type="TileMapLayer" parent="."] +tile_map_data = PackedByteArray("AAAAAAAABQABAAEAAAAAAAEABQABAAIAAAAAAAIABQABAAMAAAAAAAMABQABAAQAAAAAAAQABQABAAUAAAAAAAUABQABAAYAAAAAAAYABQABAAcAAAAAAAcABQABAAgAAAAAAAgABQABAAkAAAAAAAkABQABAAoAAAAAAAoABQABAAsAAAAAAAsABQABAAwAAAABAAAABQACAAEAAAABAAEABQACAAIAAAABAAIABQACAAMAAAABAAMABQACAAQAAAABAAQABQACAAUAAAABAAUABQACAAYAAAABAAYABQACAAcAAAABAAcABQACAAgAAAABAAgABQACAAkAAAABAAkABQACAAoAAAABAAoABQACAAsAAAABAAsABQACAAwAAAACAAAABQADAAEAAAACAAEABQADAAIAAAACAAIABQADAAMAAAACAAMABQADAAQAAAACAAQABQADAAUAAAACAAUABQADAAYAAAACAAYABQADAAcAAAACAAcABQADAAgAAAACAAgABQADAAkAAAACAAkABQADAAoAAAACAAoABQADAAsAAAACAAsABQADAAwAAAADAAAABQAEAAEAAAADAAEABQAEAAIAAAADAAIABQAEAAMAAAADAAMABQAEAAQAAAADAAQABQAEAAUAAAADAAUABQAEAAYAAAADAAYABQAEAAcAAAADAAcABQAEAAgAAAADAAgABQAEAAkAAAADAAkABQAEAAoAAAADAAoABQAEAAsAAAADAAsABQAEAAwAAAAEAAAABQAFAAEAAAAEAAEABQAFAAIAAAAEAAIABQAFAAMAAAAEAAMABQAFAAQAAAAEAAQABQAFAAUAAAAEAAUABQAFAAYAAAAEAAYABQAFAAcAAAAEAAcABQAFAAgAAAAEAAgABQAFAAkAAAAEAAkABQAFAAoAAAAEAAoABQAFAAsAAAAEAAsABQAFAAwAAAAFAAAABQAGAAEAAAAFAAEABQAGAAIAAAAFAAIABQAGAAMAAAAFAAMABQAGAAQAAAAFAAQABQAGAAUAAAAFAAUABQAGAAYAAAAFAAYABQAGAAcAAAAFAAcABQAGAAgAAAAFAAgABQAGAAkAAAAFAAkABQAGAAoAAAAFAAoABQAGAAsAAAAFAAsABQAGAAwAAAAGAAAABQAHAAEAAAAGAAEABQAHAAIAAAAGAAIABQAHAAMAAAAGAAMABQAHAAQAAAAGAAQABQAHAAUAAAAGAAUABQAHAAYAAAAGAAYABQAHAAcAAAAGAAcABQAHAAgAAAAGAAgABQAHAAkAAAAGAAkABQAHAAoAAAAGAAoABQAHAAsAAAAGAAsABQAHAAwAAAAHAAAABQAIAAEAAAAHAAEABQAIAAIAAAAHAAIABQAIAAMAAAAHAAMABQAIAAQAAAAHAAQABQAIAAUAAAAHAAUABQAIAAYAAAAHAAYABQAIAAcAAAAHAAcABQAIAAgAAAAHAAgABQAIAAkAAAAHAAkABQAIAAoAAAAHAAoABQAIAAsAAAAHAAsABQAIAAwAAAAIAAAABQAJAAEAAAAIAAEABQAJAAIAAAAIAAIABQAJAAMAAAAIAAMABQAJAAQAAAAIAAQABQAJAAUAAAAIAAUABQAJAAYAAAAIAAYABQAJAAcAAAAIAAcABQAJAAgAAAAIAAgABQAJAAkAAAAIAAkABQAJAAoAAAAIAAoABQAJAAsAAAAIAAsABQAJAAwAAAAJAAAABQAKAAEAAAAJAAEABQAKAAIAAAAJAAIABQAKAAMAAAAJAAMABQAKAAQAAAAJAAQABQAKAAUAAAAJAAUABQAKAAYAAAAJAAYABQAKAAcAAAAJAAcABQAKAAgAAAAJAAgABQAKAAkAAAAJAAkABQAKAAoAAAAJAAoABQAKAAsAAAAJAAsABQAKAAwAAAAKAAAABQALAAEAAAAKAAEABQALAAIAAAAKAAIABQALAAMAAAAKAAMABQALAAQAAAAKAAQABQALAAUAAAAKAAUABQALAAYAAAAKAAYABQALAAcAAAAKAAcABQALAAgAAAAKAAgABQALAAkAAAAKAAkABQALAAoAAAAKAAoABQALAAsAAAAKAAsABQALAAwAAAALAAAABQAMAAEAAAALAAEABQAMAAIAAAALAAIABQAMAAMAAAALAAMABQAMAAQAAAALAAQABQAMAAUAAAALAAUABQAMAAYAAAALAAYABQAMAAcAAAALAAcABQAMAAgAAAALAAgABQAMAAkAAAALAAkABQAMAAoAAAALAAoABQAMAAsAAAALAAsABQAMAAwAAAAMAAAABQANAAEAAAAMAAEABQANAAIAAAAMAAIABQANAAMAAAAMAAMABQANAAQAAAAMAAQABQANAAUAAAAMAAUABQANAAYAAAAMAAYABQANAAcAAAAMAAcABQANAAgAAAAMAAgABQANAAkAAAAMAAkABQANAAoAAAAMAAoABQANAAsAAAAMAAsABQANAAwAAAAAAAwABQABAAEAAAAAAA0ABQABAAIAAAAAAA4ABQABAAMAAAAAAA8ABQABAAQAAAAAABAABQABAAUAAAAAABEABQABAAYAAAAAABIABQABAAcAAAAAABMABQABAAgAAAAAABQABQABAAkAAAAAABUABQABAAoAAAAAABYABQABAAsAAAAAABcABQABAAwAAAABAAwABQACAAEAAAABAA0ABQACAAIAAAABAA4ABQACAAMAAAABAA8ABQACAAQAAAABABAABQACAAUAAAABABEABQACAAYAAAABABIABQACAAcAAAABABMABQACAAgAAAABABQABQACAAkAAAABABUABQACAAoAAAABABYABQACAAsAAAABABcABQACAAwAAAACAAwABQADAAEAAAACAA0ABQADAAIAAAACAA4ABQADAAMAAAACAA8ABQADAAQAAAACABAABQADAAUAAAACABEABQADAAYAAAACABIABQADAAcAAAACABMABQADAAgAAAACABQABQADAAkAAAACABUABQADAAoAAAACABYABQADAAsAAAACABcABQADAAwAAAADAAwABQAEAAEAAAADAA0ABQAEAAIAAAADAA4ABQAEAAMAAAADAA8ABQAEAAQAAAADABAABQAEAAUAAAADABEABQAEAAYAAAADABIABQAEAAcAAAADABMABQAEAAgAAAADABQABQAEAAkAAAADABUABQAEAAoAAAADABYABQAEAAsAAAADABcABQAEAAwAAAAEAAwABQAFAAEAAAAEAA0ABQAFAAIAAAAEAA4ABQAFAAMAAAAEAA8ABQAFAAQAAAAEABAABQAFAAUAAAAEABEABQAFAAYAAAAEABIABQAFAAcAAAAEABMABQAFAAgAAAAEABQABQAFAAkAAAAEABUABQAFAAoAAAAEABYABQAFAAsAAAAEABcABQAFAAwAAAAFAAwABQAGAAEAAAAFAA0ABQAGAAIAAAAFAA4ABQAGAAMAAAAFAA8ABQAGAAQAAAAFABAABQAGAAUAAAAFABEABQAGAAYAAAAFABIABQAGAAcAAAAFABMABQAGAAgAAAAFABQABQAGAAkAAAAFABUABQAGAAoAAAAFABYABQAGAAsAAAAFABcABQAGAAwAAAAGAAwABQAHAAEAAAAGAA0ABQAHAAIAAAAGAA4ABQAHAAMAAAAGAA8ABQAHAAQAAAAGABAABQAHAAUAAAAGABEABQAHAAYAAAAGABIABQAHAAcAAAAGABMABQAHAAgAAAAGABQABQAHAAkAAAAGABUABQAHAAoAAAAGABYABQAHAAsAAAAGABcABQAHAAwAAAAHAAwABQAIAAEAAAAHAA0ABQAIAAIAAAAHAA4ABQAIAAMAAAAHAA8ABQAIAAQAAAAHABAABQAIAAUAAAAHABEABQAIAAYAAAAHABIABQAIAAcAAAAHABMABQAIAAgAAAAHABQABQAIAAkAAAAHABUABQAIAAoAAAAHABYABQAIAAsAAAAHABcABQAIAAwAAAAIAAwABQAJAAEAAAAIAA0ABQAJAAIAAAAIAA4ABQAJAAMAAAAIAA8ABQAJAAQAAAAIABAABQAJAAUAAAAIABEABQAJAAYAAAAIABIABQAJAAcAAAAIABMABQAJAAgAAAAIABQABQAJAAkAAAAIABUABQAJAAoAAAAIABYABQAJAAsAAAAIABcABQAJAAwAAAAJAAwABQAKAAEAAAAJAA0ABQAKAAIAAAAJAA4ABQAKAAMAAAAJAA8ABQAKAAQAAAAJABAABQAKAAUAAAAJABEABQAKAAYAAAAJABIABQAKAAcAAAAJABMABQAKAAgAAAAJABQABQAKAAkAAAAJABUABQAKAAoAAAAJABYABQAKAAsAAAAJABcABQAKAAwAAAAKAAwABQALAAEAAAAKAA0ABQALAAIAAAAKAA4ABQALAAMAAAAKAA8ABQALAAQAAAAKABAABQALAAUAAAAKABEABQALAAYAAAAKABIABQALAAcAAAAKABMABQALAAgAAAAKABQABQALAAkAAAAKABUABQALAAoAAAAKABYABQALAAsAAAAKABcABQALAAwAAAALAAwABQAMAAEAAAALAA0ABQAMAAIAAAALAA4ABQAMAAMAAAALAA8ABQAMAAQAAAALABAABQAMAAUAAAALABEABQAMAAYAAAALABIABQAMAAcAAAALABMABQAMAAgAAAALABQABQAMAAkAAAALABUABQAMAAoAAAALABYABQAMAAsAAAALABcABQAMAAwAAAAMAAwABQANAAEAAAAMAA0ABQANAAIAAAAMAA4ABQANAAMAAAAMAA8ABQANAAQAAAAMABAABQANAAUAAAAMABEABQANAAYAAAAMABIABQANAAcAAAAMABMABQANAAgAAAAMABQABQANAAkAAAAMABUABQANAAoAAAAMABYABQANAAsAAAAMABcABQANAAwAAAAAABgABQABAAEAAAAAABkABQABAAIAAAAAABoABQABAAMAAAAAABsABQABAAQAAAAAABwABQABAAUAAAAAAB0ABQABAAYAAAAAAB4ABQABAAcAAAABABgABQACAAEAAAABABkABQACAAIAAAABABoABQACAAMAAAABABsABQACAAQAAAABABwABQACAAUAAAABAB0ABQACAAYAAAABAB4ABQACAAcAAAACABgABQADAAEAAAACABkABQADAAIAAAACABoABQADAAMAAAACABsABQADAAQAAAACABwABQADAAUAAAACAB0ABQADAAYAAAACAB4ABQADAAcAAAADABgABQAEAAEAAAADABkABQAEAAIAAAADABoABQAEAAMAAAADABsABQAEAAQAAAADABwABQAEAAUAAAADAB0ABQAEAAYAAAADAB4ABQAEAAcAAAAEABgABQAFAAEAAAAEABkABQAFAAIAAAAEABoABQAFAAMAAAAEABsABQAFAAQAAAAEABwABQAFAAUAAAAEAB0ABQAFAAYAAAAEAB4ABQAFAAcAAAAFABgABQAGAAEAAAAFABkABQAGAAIAAAAFABoABQAGAAMAAAAFABsABQAGAAQAAAAFABwABQAGAAUAAAAFAB0ABQAGAAYAAAAFAB4ABQAGAAcAAAAGABgABQAHAAEAAAAGABkABQAHAAIAAAAGABoABQAHAAMAAAAGABsABQAHAAQAAAAGABwABQAHAAUAAAAGAB0ABQAHAAYAAAAGAB4ABQAHAAcAAAAHABgABQAIAAEAAAAHABkABQAIAAIAAAAHABoABQAIAAMAAAAHABsABQAIAAQAAAAHABwABQAIAAUAAAAHAB0ABQAIAAYAAAAHAB4ABQAIAAcAAAAIABgABQAJAAEAAAAIABkABQAJAAIAAAAIABoABQAJAAMAAAAIABsABQAJAAQAAAAIABwABQAJAAUAAAAIAB0ABQAJAAYAAAAIAB4ABQAJAAcAAAAJABgABQAKAAEAAAAJABkABQAKAAIAAAAJABoABQAKAAMAAAAJABsABQAKAAQAAAAJABwABQAKAAUAAAAJAB0ABQAKAAYAAAAJAB4ABQAKAAcAAAAKABgABQALAAEAAAAKABkABQALAAIAAAAKABoABQALAAMAAAAKABsABQALAAQAAAAKABwABQALAAUAAAAKAB0ABQALAAYAAAAKAB4ABQALAAcAAAALABgABQAMAAEAAAALABkABQAMAAIAAAALABoABQAMAAMAAAALABsABQAMAAQAAAALABwABQAMAAUAAAALAB0ABQAMAAYAAAALAB4ABQAMAAcAAAAMABgABQANAAEAAAAMABkABQANAAIAAAAMABoABQANAAMAAAAMABsABQANAAQAAAAMABwABQANAAUAAAAMAB0ABQANAAYAAAAMAB4ABQANAAcAAAANAAAABQABAAEAAAANAAEABQABAAIAAAANAAIABQABAAMAAAANAAMABQABAAQAAAANAAQABQABAAUAAAANAAUABQABAAYAAAANAAYABQABAAcAAAANAAcABQABAAgAAAANAAgABQABAAkAAAANAAkABQABAAoAAAANAAoABQABAAsAAAANAAsABQABAAwAAAAOAAAABQACAAEAAAAOAAEABQACAAIAAAAOAAIABQACAAMAAAAOAAMABQACAAQAAAAOAAQABQACAAUAAAAOAAUABQACAAYAAAAOAAYABQACAAcAAAAOAAcABQACAAgAAAAOAAgABQACAAkAAAAOAAkABQACAAoAAAAOAAoABQACAAsAAAAOAAsABQACAAwAAAAPAAAABQADAAEAAAAPAAEABQADAAIAAAAPAAIABQADAAMAAAAPAAMABQADAAQAAAAPAAQABQADAAUAAAAPAAUABQADAAYAAAAPAAYABQADAAcAAAAPAAcABQADAAgAAAAPAAgABQADAAkAAAAPAAkABQADAAoAAAAPAAoABQADAAsAAAAPAAsABQADAAwAAAAQAAAABQAEAAEAAAAQAAEABQAEAAIAAAAQAAIABQAEAAMAAAAQAAMABQAEAAQAAAAQAAQABQAEAAUAAAAQAAUABQAEAAYAAAAQAAYABQAEAAcAAAAQAAcABQAEAAgAAAAQAAgABQAEAAkAAAAQAAkABQAEAAoAAAAQAAoABQAEAAsAAAAQAAsABQAEAAwAAAARAAAABQAFAAEAAAARAAEABQAFAAIAAAARAAIABQAFAAMAAAARAAMABQAFAAQAAAARAAQABQAFAAUAAAARAAUABQAFAAYAAAARAAYABQAFAAcAAAARAAcABQAFAAgAAAARAAgABQAFAAkAAAARAAkABQAFAAoAAAARAAoABQAFAAsAAAARAAsABQAFAAwAAAASAAAABQAGAAEAAAASAAEABQAGAAIAAAASAAIABQAGAAMAAAASAAMABQAGAAQAAAASAAQABQAGAAUAAAASAAUABQAGAAYAAAASAAYABQAGAAcAAAASAAcABQAGAAgAAAASAAgABQAGAAkAAAASAAkABQAGAAoAAAASAAoABQAGAAsAAAASAAsABQAGAAwAAAATAAAABQAHAAEAAAATAAEABQAHAAIAAAATAAIABQAHAAMAAAATAAMABQAHAAQAAAATAAQABQAHAAUAAAATAAUABQAHAAYAAAATAAYABQAHAAcAAAATAAcABQAHAAgAAAATAAgABQAHAAkAAAATAAkABQAHAAoAAAATAAoABQAHAAsAAAATAAsABQAHAAwAAAAUAAAABQAIAAEAAAAUAAEABQAIAAIAAAAUAAIABQAIAAMAAAAUAAMABQAIAAQAAAAUAAQABQAIAAUAAAAUAAUABQAIAAYAAAAUAAYABQAIAAcAAAAUAAcABQAIAAgAAAAUAAgABQAIAAkAAAAUAAkABQAIAAoAAAAUAAoABQAIAAsAAAAUAAsABQAIAAwAAAAVAAAABQAJAAEAAAAVAAEABQAJAAIAAAAVAAIABQAJAAMAAAAVAAMABQAJAAQAAAAVAAQABQAJAAUAAAAVAAUABQAJAAYAAAAVAAYABQAJAAcAAAAVAAcABQAJAAgAAAAVAAgABQAJAAkAAAAVAAkABQAJAAoAAAAVAAoABQAJAAsAAAAVAAsABQAJAAwAAAAWAAAABQAKAAEAAAAWAAEABQAKAAIAAAAWAAIABQAKAAMAAAAWAAMABQAKAAQAAAAWAAQABQAKAAUAAAAWAAUABQAKAAYAAAAWAAYABQAKAAcAAAAWAAcABQAKAAgAAAAWAAgABQAKAAkAAAAWAAkABQAKAAoAAAAWAAoABQAKAAsAAAAWAAsABQAKAAwAAAAXAAAABQALAAEAAAAXAAEABQALAAIAAAAXAAIABQALAAMAAAAXAAMABQALAAQAAAAXAAQABQALAAUAAAAXAAUABQALAAYAAAAXAAYABQALAAcAAAAXAAcABQALAAgAAAAXAAgABQALAAkAAAAXAAkABQALAAoAAAAXAAoABQALAAsAAAAXAAsABQALAAwAAAAYAAAABQAMAAEAAAAYAAEABQAMAAIAAAAYAAIABQAMAAMAAAAYAAMABQAMAAQAAAAYAAQABQAMAAUAAAAYAAUABQAMAAYAAAAYAAYABQAMAAcAAAAYAAcABQAMAAgAAAAYAAgABQAMAAkAAAAYAAkABQAMAAoAAAAYAAoABQAMAAsAAAAYAAsABQAMAAwAAAAZAAAABQANAAEAAAAZAAEABQANAAIAAAAZAAIABQANAAMAAAAZAAMABQANAAQAAAAZAAQABQANAAUAAAAZAAUABQANAAYAAAAZAAYABQANAAcAAAAZAAcABQANAAgAAAAZAAgABQANAAkAAAAZAAkABQANAAoAAAAZAAoABQANAAsAAAAZAAsABQANAAwAAAANAAwABQABAAEAAAANAA0ABQABAAIAAAANAA4ABQABAAMAAAANAA8ABQABAAQAAAANABAABQABAAUAAAANABEABQABAAYAAAANABIABQABAAcAAAANABMABQABAAgAAAANABQABQABAAkAAAANABUABQABAAoAAAANABYABQABAAsAAAANABcABQABAAwAAAAOAAwABQACAAEAAAAOAA0ABQACAAIAAAAOAA4ABQACAAMAAAAOAA8ABQACAAQAAAAOABAABQACAAUAAAAOABEABQACAAYAAAAOABIABQACAAcAAAAOABMABQACAAgAAAAOABQABQACAAkAAAAOABUABQACAAoAAAAOABYABQACAAsAAAAOABcABQACAAwAAAAPAAwABQADAAEAAAAPAA0ABQADAAIAAAAPAA4ABQADAAMAAAAPAA8ABQADAAQAAAAPABAABQADAAUAAAAPABEABQADAAYAAAAPABIABQADAAcAAAAPABMABQADAAgAAAAPABQABQADAAkAAAAPABUABQADAAoAAAAPABYABQADAAsAAAAPABcABQADAAwAAAAQAAwABQAEAAEAAAAQAA0ABQAEAAIAAAAQAA4ABQAEAAMAAAAQAA8ABQAEAAQAAAAQABAABQAEAAUAAAAQABEABQAEAAYAAAAQABIABQAEAAcAAAAQABMABQAEAAgAAAAQABQABQAEAAkAAAAQABUABQAEAAoAAAAQABYABQAEAAsAAAAQABcABQAEAAwAAAARAAwABQAFAAEAAAARAA0ABQAFAAIAAAARAA4ABQAFAAMAAAARAA8ABQAFAAQAAAARABAABQAFAAUAAAARABEABQAFAAYAAAARABIABQAFAAcAAAARABMABQAFAAgAAAARABQABQAFAAkAAAARABUABQAFAAoAAAARABYABQAFAAsAAAARABcABQAFAAwAAAASAAwABQAGAAEAAAASAA0ABQAGAAIAAAASAA4ABQAGAAMAAAASAA8ABQAGAAQAAAASABAABQAGAAUAAAASABEABQAGAAYAAAASABIABQAGAAcAAAASABMABQAGAAgAAAASABQABQAGAAkAAAASABUABQAGAAoAAAASABYABQAGAAsAAAASABcABQAGAAwAAAATAAwABQAHAAEAAAATAA0ABQAHAAIAAAATAA4ABQAHAAMAAAATAA8ABQAHAAQAAAATABAABQAHAAUAAAATABEABQAHAAYAAAATABIABQAHAAcAAAATABMABQAHAAgAAAATABQABQAHAAkAAAATABUABQAHAAoAAAATABYABQAHAAsAAAATABcABQAHAAwAAAAUAAwABQAIAAEAAAAUAA0ABQAIAAIAAAAUAA4ABQAIAAMAAAAUAA8ABQAIAAQAAAAUABAABQAIAAUAAAAUABEABQAIAAYAAAAUABIABQAIAAcAAAAUABMABQAIAAgAAAAUABQABQAIAAkAAAAUABUABQAIAAoAAAAUABYABQAIAAsAAAAUABcABQAIAAwAAAAVAAwABQAJAAEAAAAVAA0ABQAJAAIAAAAVAA4ABQAJAAMAAAAVAA8ABQAJAAQAAAAVABAABQAJAAUAAAAVABEABQAJAAYAAAAVABIABQAJAAcAAAAVABMABQAJAAgAAAAVABQABQAJAAkAAAAVABUABQAJAAoAAAAVABYABQAJAAsAAAAVABcABQAJAAwAAAAWAAwABQAKAAEAAAAWAA0ABQAKAAIAAAAWAA4ABQAKAAMAAAAWAA8ABQAKAAQAAAAWABAABQAKAAUAAAAWABEABQAKAAYAAAAWABIABQAKAAcAAAAWABMABQAKAAgAAAAWABQABQAKAAkAAAAWABUABQAKAAoAAAAWABYABQAKAAsAAAAWABcABQAKAAwAAAAXAAwABQALAAEAAAAXAA0ABQALAAIAAAAXAA4ABQALAAMAAAAXAA8ABQALAAQAAAAXABAABQALAAUAAAAXABEABQALAAYAAAAXABIABQALAAcAAAAXABMABQALAAgAAAAXABQABQALAAkAAAAXABUABQALAAoAAAAXABYABQALAAsAAAAXABcABQALAAwAAAAYAAwABQAMAAEAAAAYAA0ABQAMAAIAAAAYAA4ABQAMAAMAAAAYAA8ABQAMAAQAAAAYABAABQAMAAUAAAAYABEABQAMAAYAAAAYABIABQAMAAcAAAAYABMABQAMAAgAAAAYABQABQAMAAkAAAAYABUABQAMAAoAAAAYABYABQAMAAsAAAAYABcABQAMAAwAAAAZAAwABQANAAEAAAAZAA0ABQANAAIAAAAZAA4ABQANAAMAAAAZAA8ABQANAAQAAAAZABAABQANAAUAAAAZABEABQANAAYAAAAZABIABQANAAcAAAAZABMABQANAAgAAAAZABQABQANAAkAAAAZABUABQANAAoAAAAZABYABQANAAsAAAAZABcABQANAAwAAAANABgABQABAAEAAAANABkABQABAAIAAAANABoABQABAAMAAAANABsABQABAAQAAAANABwABQABAAUAAAANAB0ABQABAAYAAAANAB4ABQABAAcAAAAOABgABQACAAEAAAAOABkABQACAAIAAAAOABoABQACAAMAAAAOABsABQACAAQAAAAOABwABQACAAUAAAAOAB0ABQACAAYAAAAOAB4ABQACAAcAAAAOAB8ABQACAAgAAAAPABgABQADAAEAAAAPABkABQADAAIAAAAPABoABQADAAMAAAAPABsABQADAAQAAAAPABwABQADAAUAAAAPAB0ABQADAAYAAAAPAB4ABQADAAcAAAAPAB8ABQADAAgAAAAQABgABQAEAAEAAAAQABkABQAEAAIAAAAQABoABQAEAAMAAAAQABsABQAEAAQAAAAQABwABQAEAAUAAAAQAB0ABQAEAAYAAAAQAB4ABQAEAAcAAAAQAB8ABQAEAAgAAAARABgABQAFAAEAAAARABkABQAFAAIAAAARABoABQAFAAMAAAARABsABQAFAAQAAAARABwABQAFAAUAAAARAB0ABQAFAAYAAAARAB4ABQAFAAcAAAARAB8ABQAFAAgAAAASABgABQAGAAEAAAASABkABQAGAAIAAAASABoABQAGAAMAAAASABsABQAGAAQAAAASABwABQAGAAUAAAASAB0ABQAGAAYAAAASAB4ABQAGAAcAAAASAB8ABQAGAAgAAAATABgABQAHAAEAAAATABkABQAHAAIAAAATABoABQAHAAMAAAATABsABQAHAAQAAAATABwABQAHAAUAAAATAB0ABQAHAAYAAAATAB4ABQAHAAcAAAATAB8ABQAHAAgAAAAUABgABQAIAAEAAAAUABkABQAIAAIAAAAUABoABQAIAAMAAAAUABsABQAIAAQAAAAUABwABQAIAAUAAAAUAB0ABQAIAAYAAAAUAB4ABQAIAAcAAAAUAB8ABQAIAAgAAAAVABgABQAJAAEAAAAVABkABQAJAAIAAAAVABoABQAJAAMAAAAVABsABQAJAAQAAAAVABwABQAJAAUAAAAVAB0ABQAJAAYAAAAVAB4ABQAJAAcAAAAVAB8ABQAJAAgAAAAWABgABQAKAAEAAAAWABkABQAKAAIAAAAWABoABQAKAAMAAAAWABsABQAKAAQAAAAWABwABQAKAAUAAAAWAB0ABQAKAAYAAAAWAB4ABQAKAAcAAAAWAB8ABQAKAAgAAAAXABgABQALAAEAAAAXABkABQALAAIAAAAXABoABQALAAMAAAAXABsABQALAAQAAAAXABwABQALAAUAAAAXAB0ABQALAAYAAAAXAB4ABQALAAcAAAAXAB8ABQALAAgAAAAYABgABQAMAAEAAAAYABkABQAMAAIAAAAYABoABQAMAAMAAAAYABsABQAMAAQAAAAYABwABQAMAAUAAAAYAB0ABQAMAAYAAAAYAB4ABQAMAAcAAAAYAB8ABQAMAAgAAAAZABgABQANAAEAAAAZABkABQANAAIAAAAZABoABQANAAMAAAAZABsABQANAAQAAAAZABwABQANAAUAAAAZAB0ABQANAAYAAAAZAB4ABQANAAcAAAAZAB8ABQANAAgAAAAaAAAABQABAAEAAAAaAAEABQABAAIAAAAaAAIABQABAAMAAAAaAAMABQABAAQAAAAaAAQABQABAAUAAAAaAAUABQABAAYAAAAaAAYABQABAAcAAAAaAAcABQABAAgAAAAaAAgABQABAAkAAAAaAAkABQABAAoAAAAaAAoABQABAAsAAAAaAAsABQABAAwAAAAbAAAABQACAAEAAAAbAAEABQACAAIAAAAbAAIABQACAAMAAAAbAAMABQACAAQAAAAbAAQABQACAAUAAAAbAAUABQACAAYAAAAbAAYABQACAAcAAAAbAAcABQACAAgAAAAbAAgABQACAAkAAAAbAAkABQACAAoAAAAbAAoABQACAAsAAAAbAAsABQACAAwAAAAcAAAABQADAAEAAAAcAAEABQADAAIAAAAcAAIABQADAAMAAAAcAAMABQADAAQAAAAcAAQABQADAAUAAAAcAAUABQADAAYAAAAcAAYABQADAAcAAAAcAAcABQADAAgAAAAcAAgABQADAAkAAAAcAAkABQADAAoAAAAcAAoABQADAAsAAAAcAAsABQADAAwAAAAdAAAABQAEAAEAAAAdAAEABQAEAAIAAAAdAAIABQAEAAMAAAAdAAMABQAEAAQAAAAdAAQABQAEAAUAAAAdAAUABQAEAAYAAAAdAAYABQAEAAcAAAAdAAcABQAEAAgAAAAdAAgABQAEAAkAAAAdAAkABQAEAAoAAAAdAAoABQAEAAsAAAAdAAsABQAEAAwAAAAeAAAABQAFAAEAAAAeAAEABQAFAAIAAAAeAAIABQAFAAMAAAAeAAMABQAFAAQAAAAeAAQABQAFAAUAAAAeAAUABQAFAAYAAAAeAAYABQAFAAcAAAAeAAcABQAFAAgAAAAeAAgABQAFAAkAAAAeAAkABQAFAAoAAAAeAAoABQAFAAsAAAAeAAsABQAFAAwAAAAfAAAABQAGAAEAAAAfAAEABQAGAAIAAAAfAAIABQAGAAMAAAAfAAMABQAGAAQAAAAfAAQABQAGAAUAAAAfAAUABQAGAAYAAAAfAAYABQAGAAcAAAAfAAcABQAGAAgAAAAfAAgABQAGAAkAAAAfAAkABQAGAAoAAAAfAAoABQAGAAsAAAAfAAsABQAGAAwAAAAgAAAABQAHAAEAAAAgAAEABQAHAAIAAAAgAAIABQAHAAMAAAAgAAMABQAHAAQAAAAgAAQABQAHAAUAAAAgAAUABQAHAAYAAAAgAAYABQAHAAcAAAAgAAcABQAHAAgAAAAgAAgABQAHAAkAAAAgAAkABQAHAAoAAAAgAAoABQAHAAsAAAAgAAsABQAHAAwAAAAaAAwABQABAAEAAAAaAA0ABQABAAIAAAAaAA4ABQABAAMAAAAaAA8ABQABAAQAAAAaABAABQABAAUAAAAaABEABQABAAYAAAAaABIABQABAAcAAAAaABMABQABAAgAAAAaABQABQABAAkAAAAaABUABQABAAoAAAAaABYABQABAAsAAAAaABcABQABAAwAAAAbAAwABQACAAEAAAAbAA0ABQACAAIAAAAbAA4ABQACAAMAAAAbAA8ABQACAAQAAAAbABAABQACAAUAAAAbABEABQACAAYAAAAbABIABQACAAcAAAAbABMABQACAAgAAAAbABQABQACAAkAAAAbABUABQACAAoAAAAbABYABQACAAsAAAAbABcABQACAAwAAAAcAAwABQADAAEAAAAcAA0ABQADAAIAAAAcAA4ABQADAAMAAAAcAA8ABQADAAQAAAAcABAABQADAAUAAAAcABEABQADAAYAAAAcABIABQADAAcAAAAcABMABQADAAgAAAAcABQABQADAAkAAAAcABUABQADAAoAAAAcABYABQADAAsAAAAcABcABQADAAwAAAAdAAwABQAEAAEAAAAdAA0ABQAEAAIAAAAdAA4ABQAEAAMAAAAdAA8ABQAEAAQAAAAdABAABQAEAAUAAAAdABEABQAEAAYAAAAdABIABQAEAAcAAAAdABMABQAEAAgAAAAdABQABQAEAAkAAAAdABUABQAEAAoAAAAdABYABQAEAAsAAAAdABcABQAEAAwAAAAeAAwABQAFAAEAAAAeAA0ABQAFAAIAAAAeAA4ABQAFAAMAAAAeAA8ABQAFAAQAAAAeABAABQAFAAUAAAAeABEABQAFAAYAAAAeABIABQAFAAcAAAAeABMABQAFAAgAAAAeABQABQAFAAkAAAAeABUABQAFAAoAAAAeABYABQAFAAsAAAAeABcABQAFAAwAAAAfAAwABQAGAAEAAAAfAA0ABQAGAAIAAAAfAA4ABQAGAAMAAAAfAA8ABQAGAAQAAAAfABAABQAGAAUAAAAfABEABQAGAAYAAAAfABIABQAGAAcAAAAfABMABQAGAAgAAAAfABQABQAGAAkAAAAfABUABQAGAAoAAAAfABYABQAGAAsAAAAfABcABQAGAAwAAAAgAAwABQAHAAEAAAAgAA0ABQAHAAIAAAAgAA4ABQAHAAMAAAAgAA8ABQAHAAQAAAAgABAABQAHAAUAAAAgABEABQAHAAYAAAAgABIABQAHAAcAAAAgABMABQAHAAgAAAAgABQABQAHAAkAAAAgABUABQAHAAoAAAAgABYABQAHAAsAAAAgABcABQAHAAwAAAAaABgABQABAAEAAAAaABkABQABAAIAAAAaABoABQABAAMAAAAaABsABQABAAQAAAAaABwABQABAAUAAAAaAB0ABQABAAYAAAAaAB4ABQABAAcAAAAaAB8ABQABAAgAAAAbABgABQACAAEAAAAbABkABQACAAIAAAAbABoABQACAAMAAAAbABsABQACAAQAAAAbABwABQACAAUAAAAbAB0ABQACAAYAAAAbAB4ABQACAAcAAAAbAB8ABQACAAgAAAAcABgABQADAAEAAAAcABkABQADAAIAAAAcABoABQADAAMAAAAcABsABQADAAQAAAAcABwABQADAAUAAAAcAB0ABQADAAYAAAAcAB4ABQADAAcAAAAcAB8ABQADAAgAAAAdABgABQAEAAEAAAAdABkABQAEAAIAAAAdABoABQAEAAMAAAAdABsABQAEAAQAAAAdABwABQAEAAUAAAAdAB0ABQAEAAYAAAAdAB4ABQAEAAcAAAAdAB8ABQAEAAgAAAAeABgABQAFAAEAAAAeABkABQAFAAIAAAAeABoABQAFAAMAAAAeABsABQAFAAQAAAAeABwABQAFAAUAAAAeAB0ABQAFAAYAAAAeAB4ABQAFAAcAAAAeAB8ABQAFAAgAAAAfABgABQAGAAEAAAAfABkABQAGAAIAAAAfABoABQAGAAMAAAAfABsABQAGAAQAAAAfABwABQAGAAUAAAAfAB0ABQAGAAYAAAAfAB4ABQAGAAcAAAAfAB8ABQAGAAgAAAAgABgABQAHAAEAAAAgABkABQAHAAIAAAAgABoABQAHAAMAAAAgABsABQAHAAQAAAAgABwABQAHAAUAAAAgAB0ABQAHAAYAAAAgAB4ABQAHAAcAAAAgAB8ABQAHAAgAAADh/wAABQAJAAEAAADh/wEABQAJAAIAAADh/wIABQAJAAMAAADh/wMABQAJAAQAAADh/wQABQAJAAUAAADh/wUABQAJAAYAAADh/wYABQAJAAcAAADh/wcABQAJAAgAAADh/wgABQAJAAkAAADh/wkABQAJAAoAAADh/woABQAJAAsAAADh/wsABQAJAAwAAADi/wAABQAKAAEAAADi/wEABQAKAAIAAADi/wIABQAKAAMAAADi/wMABQAKAAQAAADi/wQABQAKAAUAAADi/wUABQAKAAYAAADi/wYABQAKAAcAAADi/wcABQAKAAgAAADi/wgABQAKAAkAAADi/wkABQAKAAoAAADi/woABQAKAAsAAADi/wsABQAKAAwAAADj/wAABQALAAEAAADj/wEABQALAAIAAADj/wIABQALAAMAAADj/wMABQALAAQAAADj/wQABQALAAUAAADj/wUABQALAAYAAADj/wYABQALAAcAAADj/wcABQALAAgAAADj/wgABQALAAkAAADj/wkABQALAAoAAADj/woABQALAAsAAADj/wsABQALAAwAAADk/wAABQAMAAEAAADk/wEABQAMAAIAAADk/wIABQAMAAMAAADk/wMABQAMAAQAAADk/wQABQAMAAUAAADk/wUABQAMAAYAAADk/wYABQAMAAcAAADk/wcABQAMAAgAAADk/wgABQAMAAkAAADk/wkABQAMAAoAAADk/woABQAMAAsAAADk/wsABQAMAAwAAADl/wAABQANAAEAAADl/wEABQANAAIAAADl/wIABQANAAMAAADl/wMABQANAAQAAADl/wQABQANAAUAAADl/wUABQANAAYAAADl/wYABQANAAcAAADl/wcABQANAAgAAADl/wgABQANAAkAAADl/wkABQANAAoAAADl/woABQANAAsAAADl/wsABQANAAwAAADh/wwABQAJAAEAAADh/w0ABQAJAAIAAADh/w4ABQAJAAMAAADh/w8ABQAJAAQAAADh/xAABQAJAAUAAADh/xEABQAJAAYAAADh/xIABQAJAAcAAADh/xMABQAJAAgAAADh/xQABQAJAAkAAADh/xUABQAJAAoAAADh/xYABQAJAAsAAADh/xcABQAJAAwAAADi/wwABQAKAAEAAADi/w0ABQAKAAIAAADi/w4ABQAKAAMAAADi/w8ABQAKAAQAAADi/xAABQAKAAUAAADi/xEABQAKAAYAAADi/xIABQAKAAcAAADi/xMABQAKAAgAAADi/xQABQAKAAkAAADi/xUABQAKAAoAAADi/xYABQAKAAsAAADi/xcABQAKAAwAAADj/wwABQALAAEAAADj/w0ABQALAAIAAADj/w4ABQALAAMAAADj/w8ABQALAAQAAADj/xAABQALAAUAAADj/xEABQALAAYAAADj/xIABQALAAcAAADj/xMABQALAAgAAADj/xQABQALAAkAAADj/xUABQALAAoAAADj/xYABQALAAsAAADj/xcABQALAAwAAADk/wwABQAMAAEAAADk/w0ABQAMAAIAAADk/w4ABQAMAAMAAADk/w8ABQAMAAQAAADk/xAABQAMAAUAAADk/xEABQAMAAYAAADk/xIABQAMAAcAAADk/xMABQAMAAgAAADk/xQABQAMAAkAAADk/xUABQAMAAoAAADk/xYABQAMAAsAAADk/xcABQAMAAwAAADl/wwABQANAAEAAADl/w0ABQANAAIAAADl/w4ABQANAAMAAADl/w8ABQANAAQAAADl/xAABQANAAUAAADl/xEABQANAAYAAADl/xIABQANAAcAAADl/xMABQANAAgAAADl/xQABQANAAkAAADl/xUABQANAAoAAADl/xYABQANAAsAAADl/xcABQANAAwAAADh/xgABQAJAAEAAADh/xkABQAJAAIAAADh/xoABQAJAAMAAADh/xsABQAJAAQAAADh/xwABQAJAAUAAADh/x0ABQAJAAYAAADh/x4ABQAJAAcAAADi/xgABQAKAAEAAADi/xkABQAKAAIAAADi/xoABQAKAAMAAADi/xsABQAKAAQAAADi/xwABQAKAAUAAADi/x0ABQAKAAYAAADi/x4ABQAKAAcAAADj/xgABQALAAEAAADj/xkABQALAAIAAADj/xoABQALAAMAAADj/xsABQALAAQAAADj/xwABQALAAUAAADj/x0ABQALAAYAAADj/x4ABQALAAcAAADk/xgABQAMAAEAAADk/xkABQAMAAIAAADk/xoABQAMAAMAAADk/xsABQAMAAQAAADk/xwABQAMAAUAAADk/x0ABQAMAAYAAADk/x4ABQAMAAcAAADl/xgABQANAAEAAADl/xkABQANAAIAAADl/xoABQANAAMAAADl/xsABQANAAQAAADl/xwABQANAAUAAADl/x0ABQANAAYAAADl/x4ABQANAAcAAADm/wAABQABAAEAAADm/wEABQABAAIAAADm/wIABQABAAMAAADm/wMABQABAAQAAADm/wQABQABAAUAAADm/wUABQABAAYAAADm/wYABQABAAcAAADm/wcABQABAAgAAADm/wgABQABAAkAAADm/wkABQABAAoAAADm/woABQABAAsAAADm/wsABQABAAwAAADn/wAABQACAAEAAADn/wEABQACAAIAAADn/wIABQACAAMAAADn/wMABQACAAQAAADn/wQABQACAAUAAADn/wUABQACAAYAAADn/wYABQACAAcAAADn/wcABQACAAgAAADn/wgABQACAAkAAADn/wkABQACAAoAAADn/woABQACAAsAAADn/wsABQACAAwAAADo/wAABQADAAEAAADo/wEABQADAAIAAADo/wIABQADAAMAAADo/wMABQADAAQAAADo/wQABQADAAUAAADo/wUABQADAAYAAADo/wYABQADAAcAAADo/wcABQADAAgAAADo/wgABQADAAkAAADo/wkABQADAAoAAADo/woABQADAAsAAADo/wsABQADAAwAAADp/wAABQAEAAEAAADp/wEABQAEAAIAAADp/wIABQAEAAMAAADp/wMABQAEAAQAAADp/wQABQAEAAUAAADp/wUABQAEAAYAAADp/wYABQAEAAcAAADp/wcABQAEAAgAAADp/wgABQAEAAkAAADp/wkABQAEAAoAAADp/woABQAEAAsAAADp/wsABQAEAAwAAADq/wAABQAFAAEAAADq/wEABQAFAAIAAADq/wIABQAFAAMAAADq/wMABQAFAAQAAADq/wQABQAFAAUAAADq/wUABQAFAAYAAADq/wYABQAFAAcAAADq/wcABQAFAAgAAADq/wgABQAFAAkAAADq/wkABQAFAAoAAADq/woABQAFAAsAAADq/wsABQAFAAwAAADr/wAABQAGAAEAAADr/wEABQAGAAIAAADr/wIABQAGAAMAAADr/wMABQAGAAQAAADr/wQABQAGAAUAAADr/wUABQAGAAYAAADr/wYABQAGAAcAAADr/wcABQAGAAgAAADr/wgABQAGAAkAAADr/wkABQAGAAoAAADr/woABQAGAAsAAADr/wsABQAGAAwAAADs/wAABQAHAAEAAADs/wEABQAHAAIAAADs/wIABQAHAAMAAADs/wMABQAHAAQAAADs/wQABQAHAAUAAADs/wUABQAHAAYAAADs/wYABQAHAAcAAADs/wcABQAHAAgAAADs/wgABQAHAAkAAADs/wkABQAHAAoAAADs/woABQAHAAsAAADs/wsABQAHAAwAAADt/wAABQAIAAEAAADt/wEABQAIAAIAAADt/wIABQAIAAMAAADt/wMABQAIAAQAAADt/wQABQAIAAUAAADt/wUABQAIAAYAAADt/wYABQAIAAcAAADt/wcABQAIAAgAAADt/wgABQAIAAkAAADt/wkABQAIAAoAAADt/woABQAIAAsAAADt/wsABQAIAAwAAADu/wAABQAJAAEAAADu/wEABQAJAAIAAADu/wIABQAJAAMAAADu/wMABQAJAAQAAADu/wQABQAJAAUAAADu/wUABQAJAAYAAADu/wYABQAJAAcAAADu/wcABQAJAAgAAADu/wgABQAJAAkAAADu/wkABQAJAAoAAADu/woABQAJAAsAAADu/wsABQAJAAwAAADv/wAABQAKAAEAAADv/wEABQAKAAIAAADv/wIABQAKAAMAAADv/wMABQAKAAQAAADv/wQABQAKAAUAAADv/wUABQAKAAYAAADv/wYABQAKAAcAAADv/wcABQAKAAgAAADv/wgABQAKAAkAAADv/wkABQAKAAoAAADv/woABQAKAAsAAADv/wsABQAKAAwAAADw/wAABQALAAEAAADw/wEABQALAAIAAADw/wIABQALAAMAAADw/wMABQALAAQAAADw/wQABQALAAUAAADw/wUABQALAAYAAADw/wYABQALAAcAAADw/wcABQALAAgAAADw/wgABQALAAkAAADw/wkABQALAAoAAADw/woABQALAAsAAADw/wsABQALAAwAAADx/wAABQAMAAEAAADx/wEABQAMAAIAAADx/wIABQAMAAMAAADx/wMABQAMAAQAAADx/wQABQAMAAUAAADx/wUABQAMAAYAAADx/wYABQAMAAcAAADx/wcABQAMAAgAAADx/wgABQAMAAkAAADx/wkABQAMAAoAAADx/woABQAMAAsAAADx/wsABQAMAAwAAADy/wAABQANAAEAAADy/wEABQANAAIAAADy/wIABQANAAMAAADy/wMABQANAAQAAADy/wQABQANAAUAAADy/wUABQANAAYAAADy/wYABQANAAcAAADy/wcABQANAAgAAADy/wgABQANAAkAAADy/wkABQANAAoAAADy/woABQANAAsAAADy/wsABQANAAwAAADm/wwABQABAAEAAADm/w0ABQABAAIAAADm/w4ABQABAAMAAADm/w8ABQABAAQAAADm/xAABQABAAUAAADm/xEABQABAAYAAADm/xIABQABAAcAAADm/xMABQABAAgAAADm/xQABQABAAkAAADm/xUABQABAAoAAADm/xYABQABAAsAAADm/xcABQABAAwAAADn/wwABQACAAEAAADn/w0ABQACAAIAAADn/w4ABQACAAMAAADn/w8ABQACAAQAAADn/xAABQACAAUAAADn/xEABQACAAYAAADn/xIABQACAAcAAADn/xMABQACAAgAAADn/xQABQACAAkAAADn/xUABQACAAoAAADn/xYABQACAAsAAADn/xcABQACAAwAAADo/wwABQADAAEAAADo/w0ABQADAAIAAADo/w4ABQADAAMAAADo/w8ABQADAAQAAADo/xAABQADAAUAAADo/xEABQADAAYAAADo/xIABQADAAcAAADo/xMABQADAAgAAADo/xQABQADAAkAAADo/xUABQADAAoAAADo/xYABQADAAsAAADo/xcABQADAAwAAADp/wwABQAEAAEAAADp/w0ABQAEAAIAAADp/w4ABQAEAAMAAADp/w8ABQAEAAQAAADp/xAABQAEAAUAAADp/xEABQAEAAYAAADp/xIABQAEAAcAAADp/xMABQAEAAgAAADp/xQABQAEAAkAAADp/xUABQAEAAoAAADp/xYABQAEAAsAAADp/xcABQAEAAwAAADq/wwABQAFAAEAAADq/w0ABQAFAAIAAADq/w4ABQAFAAMAAADq/w8ABQAFAAQAAADq/xAABQAFAAUAAADq/xEABQAFAAYAAADq/xIABQAFAAcAAADq/xMABQAFAAgAAADq/xQABQAFAAkAAADq/xUABQAFAAoAAADq/xYABQAFAAsAAADq/xcABQAFAAwAAADr/wwABQAGAAEAAADr/w0ABQAGAAIAAADr/w4ABQAGAAMAAADr/w8ABQAGAAQAAADr/xAABQAGAAUAAADr/xEABQAGAAYAAADr/xIABQAGAAcAAADr/xMABQAGAAgAAADr/xQABQAGAAkAAADr/xUABQAGAAoAAADr/xYABQAGAAsAAADr/xcABQAGAAwAAADs/wwABQAHAAEAAADs/w0ABQAHAAIAAADs/w4ABQAHAAMAAADs/w8ABQAHAAQAAADs/xAABQAHAAUAAADs/xEABQAHAAYAAADs/xIABQAHAAcAAADs/xMABQAHAAgAAADs/xQABQAHAAkAAADs/xUABQAHAAoAAADs/xYABQAHAAsAAADs/xcABQAHAAwAAADt/wwABQAIAAEAAADt/w0ABQAIAAIAAADt/w4ABQAIAAMAAADt/w8ABQAIAAQAAADt/xAABQAIAAUAAADt/xEABQAIAAYAAADt/xIABQAIAAcAAADt/xMABQAIAAgAAADt/xQABQAIAAkAAADt/xUABQAIAAoAAADt/xYABQAIAAsAAADt/xcABQAIAAwAAADu/wwABQAJAAEAAADu/w0ABQAJAAIAAADu/w4ABQAJAAMAAADu/w8ABQAJAAQAAADu/xAABQAJAAUAAADu/xEABQAJAAYAAADu/xIABQAJAAcAAADu/xMABQAJAAgAAADu/xQABQAJAAkAAADu/xUABQAJAAoAAADu/xYABQAJAAsAAADu/xcABQAJAAwAAADv/wwABQAKAAEAAADv/w0ABQAKAAIAAADv/w4ABQAKAAMAAADv/w8ABQAKAAQAAADv/xAABQAKAAUAAADv/xEABQAKAAYAAADv/xIABQAKAAcAAADv/xMABQAKAAgAAADv/xQABQAKAAkAAADv/xUABQAKAAoAAADv/xYABQAKAAsAAADv/xcABQAKAAwAAADw/wwABQALAAEAAADw/w0ABQALAAIAAADw/w4ABQALAAMAAADw/w8ABQALAAQAAADw/xAABQALAAUAAADw/xEABQALAAYAAADw/xIABQALAAcAAADw/xMABQALAAgAAADw/xQABQALAAkAAADw/xUABQALAAoAAADw/xYABQALAAsAAADw/xcABQALAAwAAADx/wwABQAMAAEAAADx/w0ABQAMAAIAAADx/w4ABQAMAAMAAADx/w8ABQAMAAQAAADx/xAABQAMAAUAAADx/xEABQAMAAYAAADx/xIABQAMAAcAAADx/xMABQAMAAgAAADx/xQABQAMAAkAAADx/xUABQAMAAoAAADx/xYABQAMAAsAAADx/xcABQAMAAwAAADy/wwABQANAAEAAADy/w0ABQANAAIAAADy/w4ABQANAAMAAADy/w8ABQANAAQAAADy/xAABQANAAUAAADy/xEABQANAAYAAADy/xIABQANAAcAAADy/xMABQANAAgAAADy/xQABQANAAkAAADy/xUABQANAAoAAADy/xYABQANAAsAAADy/xcABQANAAwAAADm/xgABQABAAEAAADm/xkABQABAAIAAADm/xoABQABAAMAAADm/xsABQABAAQAAADm/xwABQABAAUAAADm/x0ABQABAAYAAADm/x4ABQABAAcAAADn/xgABQACAAEAAADn/xkABQACAAIAAADn/xoABQACAAMAAADn/xsABQACAAQAAADn/xwABQACAAUAAADn/x0ABQACAAYAAADn/x4ABQACAAcAAADo/xgABQADAAEAAADo/xkABQADAAIAAADo/xoABQADAAMAAADo/xsABQADAAQAAADo/xwABQADAAUAAADo/x0ABQADAAYAAADo/x4ABQADAAcAAADp/xgABQAEAAEAAADp/xkABQAEAAIAAADp/xoABQAEAAMAAADp/xsABQAEAAQAAADp/xwABQAEAAUAAADp/x0ABQAEAAYAAADp/x4ABQAEAAcAAADq/xgABQAFAAEAAADq/xkABQAFAAIAAADq/xoABQAFAAMAAADq/xsABQAFAAQAAADq/xwABQAFAAUAAADq/x0ABQAFAAYAAADq/x4ABQAFAAcAAADr/xgABQAGAAEAAADr/xkABQAGAAIAAADr/xoABQAGAAMAAADr/xsABQAGAAQAAADr/xwABQAGAAUAAADr/x0ABQAGAAYAAADr/x4ABQAGAAcAAADs/xgABQAHAAEAAADs/xkABQAHAAIAAADs/xoABQAHAAMAAADs/xsABQAHAAQAAADs/xwABQAHAAUAAADs/x0ABQAHAAYAAADs/x4ABQAHAAcAAADt/xgABQAIAAEAAADt/xkABQAIAAIAAADt/xoABQAIAAMAAADt/xsABQAIAAQAAADt/xwABQAIAAUAAADt/x0ABQAIAAYAAADt/x4ABQAIAAcAAADu/xgABQAJAAEAAADu/xkABQAJAAIAAADu/xoABQAJAAMAAADu/xsABQAJAAQAAADu/xwABQAJAAUAAADu/x0ABQAJAAYAAADu/x4ABQAJAAcAAADv/xgABQAKAAEAAADv/xkABQAKAAIAAADv/xoABQAKAAMAAADv/xsABQAKAAQAAADv/xwABQAKAAUAAADv/x0ABQAKAAYAAADv/x4ABQAKAAcAAADw/xgABQALAAEAAADw/xkABQALAAIAAADw/xoABQALAAMAAADw/xsABQALAAQAAADw/xwABQALAAUAAADw/x0ABQALAAYAAADw/x4ABQALAAcAAADx/xgABQAMAAEAAADx/xkABQAMAAIAAADx/xoABQAMAAMAAADx/xsABQAMAAQAAADx/xwABQAMAAUAAADx/x0ABQAMAAYAAADx/x4ABQAMAAcAAADy/xgABQANAAEAAADy/xkABQANAAIAAADy/xoABQANAAMAAADy/xsABQANAAQAAADy/xwABQANAAUAAADy/x0ABQANAAYAAADy/x4ABQANAAcAAADz/wAABQABAAEAAADz/wEABQABAAIAAADz/wIABQABAAMAAADz/wMABQABAAQAAADz/wQABQABAAUAAADz/wUABQABAAYAAADz/wYABQABAAcAAADz/wcABQABAAgAAADz/wgABQABAAkAAADz/wkABQABAAoAAADz/woABQABAAsAAADz/wsABQABAAwAAAD0/wAABQACAAEAAAD0/wEABQACAAIAAAD0/wIABQACAAMAAAD0/wMABQACAAQAAAD0/wQABQACAAUAAAD0/wUABQACAAYAAAD0/wYABQACAAcAAAD0/wcABQACAAgAAAD0/wgABQACAAkAAAD0/wkABQACAAoAAAD0/woABQACAAsAAAD0/wsABQACAAwAAAD1/wAABQADAAEAAAD1/wEABQADAAIAAAD1/wIABQADAAMAAAD1/wMABQADAAQAAAD1/wQABQADAAUAAAD1/wUABQADAAYAAAD1/wYABQADAAcAAAD1/wcABQADAAgAAAD1/wgABQADAAkAAAD1/wkABQADAAoAAAD1/woABQADAAsAAAD1/wsABQADAAwAAAD2/wAABQAEAAEAAAD2/wEABQAEAAIAAAD2/wIABQAEAAMAAAD2/wMABQAEAAQAAAD2/wQABQAEAAUAAAD2/wUABQAEAAYAAAD2/wYABQAEAAcAAAD2/wcABQAEAAgAAAD2/wgABQAEAAkAAAD2/wkABQAEAAoAAAD2/woABQAEAAsAAAD2/wsABQAEAAwAAAD3/wAABQAFAAEAAAD3/wEABQAFAAIAAAD3/wIABQAFAAMAAAD3/wMABQAFAAQAAAD3/wQABQAFAAUAAAD3/wUABQAFAAYAAAD3/wYABQAFAAcAAAD3/wcABQAFAAgAAAD3/wgABQAFAAkAAAD3/wkABQAFAAoAAAD3/woABQAFAAsAAAD3/wsABQAFAAwAAAD4/wAABQAGAAEAAAD4/wEABQAGAAIAAAD4/wIABQAGAAMAAAD4/wMABQAGAAQAAAD4/wQABQAGAAUAAAD4/wUABQAGAAYAAAD4/wYABQAGAAcAAAD4/wcABQAGAAgAAAD4/wgABQAGAAkAAAD4/wkABQAGAAoAAAD4/woABQAGAAsAAAD4/wsABQAGAAwAAAD5/wAABQAHAAEAAAD5/wEABQAHAAIAAAD5/wIABQAHAAMAAAD5/wMABQAHAAQAAAD5/wQABQAHAAUAAAD5/wUABQAHAAYAAAD5/wYABQAHAAcAAAD5/wcABQAHAAgAAAD5/wgABQAHAAkAAAD5/wkABQAHAAoAAAD5/woABQAHAAsAAAD5/wsABQAHAAwAAAD6/wAABQAIAAEAAAD6/wEABQAIAAIAAAD6/wIABQAIAAMAAAD6/wMABQAIAAQAAAD6/wQABQAIAAUAAAD6/wUABQAIAAYAAAD6/wYABQAIAAcAAAD6/wcABQAIAAgAAAD6/wgABQAIAAkAAAD6/wkABQAIAAoAAAD6/woABQAIAAsAAAD6/wsABQAIAAwAAAD7/wAABQAJAAEAAAD7/wEABQAJAAIAAAD7/wIABQAJAAMAAAD7/wMABQAJAAQAAAD7/wQABQAJAAUAAAD7/wUABQAJAAYAAAD7/wYABQAJAAcAAAD7/wcABQAJAAgAAAD7/wgABQAJAAkAAAD7/wkABQAJAAoAAAD7/woABQAJAAsAAAD7/wsABQAJAAwAAAD8/wAABQAKAAEAAAD8/wEABQAKAAIAAAD8/wIABQAKAAMAAAD8/wMABQAKAAQAAAD8/wQABQAKAAUAAAD8/wUABQAKAAYAAAD8/wYABQAKAAcAAAD8/wcABQAKAAgAAAD8/wgABQAKAAkAAAD8/wkABQAKAAoAAAD8/woABQAKAAsAAAD8/wsABQAKAAwAAAD9/wAABQALAAEAAAD9/wEABQALAAIAAAD9/wIABQALAAMAAAD9/wMABQALAAQAAAD9/wQABQALAAUAAAD9/wUABQALAAYAAAD9/wYABQALAAcAAAD9/wcABQALAAgAAAD9/wgABQALAAkAAAD9/wkABQALAAoAAAD9/woABQALAAsAAAD9/wsABQALAAwAAAD+/wAABQAMAAEAAAD+/wEABQAMAAIAAAD+/wIABQAMAAMAAAD+/wMABQAMAAQAAAD+/wQABQAMAAUAAAD+/wUABQAMAAYAAAD+/wYABQAMAAcAAAD+/wcABQAMAAgAAAD+/wgABQAMAAkAAAD+/wkABQAMAAoAAAD+/woABQAMAAsAAAD+/wsABQAMAAwAAAD//wAABQANAAEAAAD//wEABQANAAIAAAD//wIABQANAAMAAAD//wMABQANAAQAAAD//wQABQANAAUAAAD//wUABQANAAYAAAD//wYABQANAAcAAAD//wcABQANAAgAAAD//wgABQANAAkAAAD//wkABQANAAoAAAD//woABQANAAsAAAD//wsABQANAAwAAADz/wwABQABAAEAAADz/w0ABQABAAIAAADz/w4ABQABAAMAAADz/w8ABQABAAQAAADz/xAABQABAAUAAADz/xEABQABAAYAAADz/xIABQABAAcAAADz/xMABQABAAgAAADz/xQABQABAAkAAADz/xUABQABAAoAAADz/xYABQABAAsAAADz/xcABQABAAwAAAD0/wwABQACAAEAAAD0/w0ABQACAAIAAAD0/w4ABQACAAMAAAD0/w8ABQACAAQAAAD0/xAABQACAAUAAAD0/xEABQACAAYAAAD0/xIABQACAAcAAAD0/xMABQACAAgAAAD0/xQABQACAAkAAAD0/xUABQACAAoAAAD0/xYABQACAAsAAAD0/xcABQACAAwAAAD1/wwABQADAAEAAAD1/w0ABQADAAIAAAD1/w4ABQADAAMAAAD1/w8ABQADAAQAAAD1/xAABQADAAUAAAD1/xEABQADAAYAAAD1/xIABQADAAcAAAD1/xMABQADAAgAAAD1/xQABQADAAkAAAD1/xUABQADAAoAAAD1/xYABQADAAsAAAD1/xcABQADAAwAAAD2/wwABQAEAAEAAAD2/w4ABQAEAAMAAAD2/w8ABQAEAAQAAAD2/xAABQAEAAUAAAD2/xEABQAEAAYAAAD2/xIABQAEAAcAAAD2/xMABQAEAAgAAAD2/xQABQAEAAkAAAD2/xUABQAEAAoAAAD2/xYABQAEAAsAAAD2/xcABQAEAAwAAAD3/wwABQAFAAEAAAD3/w0ABQAFAAIAAAD3/w4ABQAFAAMAAAD3/w8ABQAFAAQAAAD3/xAABQAFAAUAAAD3/xEABQAFAAYAAAD3/xIABQAFAAcAAAD3/xMABQAFAAgAAAD3/xQABQAFAAkAAAD3/xUABQAFAAoAAAD3/xYABQAFAAsAAAD3/xcABQAFAAwAAAD4/wwABQAGAAEAAAD4/w0ABQAGAAIAAAD4/w4ABQAGAAMAAAD4/w8ABQAGAAQAAAD4/xAABQAGAAUAAAD4/xEABQAGAAYAAAD4/xIABQAGAAcAAAD4/xMABQAGAAgAAAD4/xQABQAGAAkAAAD4/xUABQAGAAoAAAD4/xYABQAGAAsAAAD4/xcABQAGAAwAAAD5/wwABQAHAAEAAAD5/w0ABQAHAAIAAAD5/w4ABQAHAAMAAAD5/w8ABQAHAAQAAAD5/xAABQAHAAUAAAD5/xEABQAHAAYAAAD5/xIABQAHAAcAAAD5/xMABQAHAAgAAAD5/xQABQAHAAkAAAD5/xUABQAHAAoAAAD5/xYABQAHAAsAAAD5/xcABQAHAAwAAAD6/wwABQAIAAEAAAD6/w0ABQAIAAIAAAD6/w4ABQAIAAMAAAD6/w8ABQAIAAQAAAD6/xAABQAIAAUAAAD6/xEABQAIAAYAAAD6/xIABQAIAAcAAAD6/xMABQAIAAgAAAD6/xQABQAIAAkAAAD6/xUABQAIAAoAAAD6/xYABQAIAAsAAAD6/xcABQAIAAwAAAD7/wwABQAJAAEAAAD7/w0ABQAJAAIAAAD7/w4ABQAJAAMAAAD7/w8ABQAJAAQAAAD7/xAABQAJAAUAAAD7/xEABQAJAAYAAAD7/xIABQAJAAcAAAD7/xMABQAJAAgAAAD7/xQABQAJAAkAAAD7/xUABQAJAAoAAAD7/xYABQAJAAsAAAD7/xcABQAJAAwAAAD8/wwABQAKAAEAAAD8/w0ABQAKAAIAAAD8/w4ABQAKAAMAAAD8/w8ABQAKAAQAAAD8/xAABQAKAAUAAAD8/xEABQAKAAYAAAD8/xIABQAKAAcAAAD8/xMABQAKAAgAAAD8/xQABQAKAAkAAAD8/xUABQAKAAoAAAD8/xYABQAKAAsAAAD8/xcABQAKAAwAAAD9/wwABQALAAEAAAD9/w0ABQALAAIAAAD9/w4ABQALAAMAAAD9/w8ABQALAAQAAAD9/xAABQALAAUAAAD9/xEABQALAAYAAAD9/xIABQALAAcAAAD9/xMABQALAAgAAAD9/xQABQALAAkAAAD9/xUABQALAAoAAAD9/xYABQALAAsAAAD9/xcABQALAAwAAAD+/wwABQAMAAEAAAD+/w0ABQAMAAIAAAD+/w4ABQAMAAMAAAD+/w8ABQAMAAQAAAD+/xAABQAMAAUAAAD+/xEABQAMAAYAAAD+/xIABQAMAAcAAAD+/xMABQAMAAgAAAD+/xQABQAMAAkAAAD+/xUABQAMAAoAAAD+/xYABQAMAAsAAAD+/xcABQAMAAwAAAD//wwABQANAAEAAAD//w0ABQANAAIAAAD//w4ABQANAAMAAAD//w8ABQANAAQAAAD//xAABQANAAUAAAD//xEABQANAAYAAAD//xIABQANAAcAAAD//xMABQANAAgAAAD//xQABQANAAkAAAD//xUABQANAAoAAAD//xYABQANAAsAAAD//xcABQANAAwAAADz/xgABQABAAEAAADz/xkABQABAAIAAADz/xoABQABAAMAAADz/xsABQABAAQAAADz/xwABQABAAUAAADz/x0ABQABAAYAAADz/x4ABQABAAcAAAD0/xgABQACAAEAAAD0/xkABQACAAIAAAD0/xoABQACAAMAAAD0/xsABQACAAQAAAD0/xwABQACAAUAAAD0/x0ABQACAAYAAAD0/x4ABQACAAcAAAD1/xgABQADAAEAAAD1/xkABQADAAIAAAD1/xoABQADAAMAAAD1/xsABQADAAQAAAD1/xwABQADAAUAAAD1/x0ABQADAAYAAAD1/x4ABQADAAcAAAD2/xgABQAEAAEAAAD2/xkABQAEAAIAAAD2/xoABQAEAAMAAAD2/xsABQAEAAQAAAD2/xwABQAEAAUAAAD2/x0ABQAEAAYAAAD2/x4ABQAEAAcAAAD3/xgABQAFAAEAAAD3/xkABQAFAAIAAAD3/xoABQAFAAMAAAD3/xsABQAFAAQAAAD3/xwABQAFAAUAAAD3/x0ABQAFAAYAAAD3/x4ABQAFAAcAAAD4/xgABQAGAAEAAAD4/xkABQAGAAIAAAD4/xoABQAGAAMAAAD4/xsABQAGAAQAAAD4/xwABQAGAAUAAAD4/x0ABQAGAAYAAAD4/x4ABQAGAAcAAAD5/xgABQAHAAEAAAD5/xkABQAHAAIAAAD5/xoABQAHAAMAAAD5/xsABQAHAAQAAAD5/xwABQAHAAUAAAD5/x0ABQAHAAYAAAD5/x4ABQAHAAcAAAD6/xgABQAIAAEAAAD6/xkABQAIAAIAAAD6/xoABQAIAAMAAAD6/xsABQAIAAQAAAD6/xwABQAIAAUAAAD6/x0ABQAIAAYAAAD6/x4ABQAIAAcAAAD7/xgABQAJAAEAAAD7/xkABQAJAAIAAAD7/xoABQAJAAMAAAD7/xsABQAJAAQAAAD7/xwABQAJAAUAAAD7/x0ABQAJAAYAAAD7/x4ABQAJAAcAAAD8/xgABQAKAAEAAAD8/xkABQAKAAIAAAD8/xoABQAKAAMAAAD8/xsABQAKAAQAAAD8/xwABQAKAAUAAAD8/x0ABQAKAAYAAAD8/x4ABQAKAAcAAAD9/xgABQALAAEAAAD9/xkABQALAAIAAAD9/xoABQALAAMAAAD9/xsABQALAAQAAAD9/xwABQALAAUAAAD9/x0ABQALAAYAAAD9/x4ABQALAAcAAAD+/xgABQAMAAEAAAD+/xkABQAMAAIAAAD+/xoABQAMAAMAAAD+/xsABQAMAAQAAAD+/xwABQAMAAUAAAD+/x0ABQAMAAYAAAD+/x4ABQAMAAcAAAD//xgABQANAAEAAAD//xkABQANAAIAAAD//xoABQANAAMAAAD//xsABQANAAQAAAD//xwABQANAAUAAAD//x0ABQANAAYAAAD//x4ABQANAAcAAAAAAO7/BQABAAcAAAAAAO//BQABAAgAAAAAAPD/BQABAAkAAAAAAPH/BQABAAoAAAAAAPL/BQABAAsAAAAAAPP/BQABAAwAAAABAO7/BQACAAcAAAABAO//BQACAAgAAAABAPD/BQACAAkAAAABAPH/BQACAAoAAAABAPL/BQACAAsAAAABAPP/BQACAAwAAAACAO7/BQADAAcAAAACAO//BQADAAgAAAACAPD/BQADAAkAAAACAPH/BQADAAoAAAACAPL/BQADAAsAAAACAPP/BQADAAwAAAADAO7/BQAEAAcAAAADAO//BQAEAAgAAAADAPD/BQAEAAkAAAADAPH/BQAEAAoAAAADAPL/BQAEAAsAAAADAPP/BQAEAAwAAAAEAO7/BQAFAAcAAAAEAO//BQAFAAgAAAAEAPD/BQAFAAkAAAAEAPH/BQAFAAoAAAAEAPL/BQAFAAsAAAAEAPP/BQAFAAwAAAAFAO7/BQAGAAcAAAAFAO//BQAGAAgAAAAFAPD/BQAGAAkAAAAFAPH/BQAGAAoAAAAFAPL/BQAGAAsAAAAFAPP/BQAGAAwAAAAGAO7/BQAHAAcAAAAGAO//BQAHAAgAAAAGAPD/BQAHAAkAAAAGAPH/BQAHAAoAAAAGAPL/BQAHAAsAAAAGAPP/BQAHAAwAAAAHAO7/BQAIAAcAAAAHAO//BQAIAAgAAAAHAPD/BQAIAAkAAAAHAPH/BQAIAAoAAAAHAPL/BQAIAAsAAAAHAPP/BQAIAAwAAAAIAO7/BQAJAAcAAAAIAO//BQAJAAgAAAAIAPD/BQAJAAkAAAAIAPH/BQAJAAoAAAAIAPL/BQAJAAsAAAAIAPP/BQAJAAwAAAAJAO7/BQAKAAcAAAAJAO//BQAKAAgAAAAJAPD/BQAKAAkAAAAJAPH/BQAKAAoAAAAJAPL/BQAKAAsAAAAJAPP/BQAKAAwAAAAKAO7/BQALAAcAAAAKAO//BQALAAgAAAAKAPD/BQALAAkAAAAKAPH/BQALAAoAAAAKAPL/BQALAAsAAAAKAPP/BQALAAwAAAALAO7/BQAMAAcAAAALAO//BQAMAAgAAAALAPD/BQAMAAkAAAALAPH/BQAMAAoAAAALAPL/BQAMAAsAAAALAPP/BQAMAAwAAAAMAO7/BQANAAcAAAAMAO//BQANAAgAAAAMAPD/BQANAAkAAAAMAPH/BQANAAoAAAAMAPL/BQANAAsAAAAMAPP/BQANAAwAAAAAAPT/BQABAAEAAAAAAPX/BQABAAIAAAAAAPb/BQABAAMAAAAAAPf/BQABAAQAAAAAAPj/BQABAAUAAAAAAPn/BQABAAYAAAAAAPr/BQABAAcAAAAAAPv/BQABAAgAAAAAAPz/BQABAAkAAAAAAP3/BQABAAoAAAAAAP7/BQABAAsAAAAAAP//BQABAAwAAAABAPT/BQACAAEAAAABAPX/BQACAAIAAAABAPb/BQACAAMAAAABAPf/BQACAAQAAAABAPj/BQACAAUAAAABAPn/BQACAAYAAAABAPr/BQACAAcAAAABAPv/BQACAAgAAAABAPz/BQACAAkAAAABAP3/BQACAAoAAAABAP7/BQACAAsAAAABAP//BQACAAwAAAACAPT/BQADAAEAAAACAPX/BQADAAIAAAACAPb/BQADAAMAAAACAPf/BQADAAQAAAACAPj/BQADAAUAAAACAPn/BQADAAYAAAACAPr/BQADAAcAAAACAPv/BQADAAgAAAACAPz/BQADAAkAAAACAP3/BQADAAoAAAACAP7/BQADAAsAAAACAP//BQADAAwAAAADAPT/BQAEAAEAAAADAPX/BQAEAAIAAAADAPb/BQAEAAMAAAADAPf/BQAEAAQAAAADAPj/BQAEAAUAAAADAPn/BQAEAAYAAAADAPr/BQAEAAcAAAADAPv/BQAEAAgAAAADAPz/BQAEAAkAAAADAP3/BQAEAAoAAAADAP7/BQAEAAsAAAADAP//BQAEAAwAAAAEAPT/BQAFAAEAAAAEAPX/BQAFAAIAAAAEAPb/BQAFAAMAAAAEAPf/BQAFAAQAAAAEAPj/BQAFAAUAAAAEAPn/BQAFAAYAAAAEAPr/BQAFAAcAAAAEAPv/BQAFAAgAAAAEAPz/BQAFAAkAAAAEAP3/BQAFAAoAAAAEAP7/BQAFAAsAAAAEAP//BQAFAAwAAAAFAPT/BQAGAAEAAAAFAPX/BQAGAAIAAAAFAPb/BQAGAAMAAAAFAPf/BQAGAAQAAAAFAPj/BQAGAAUAAAAFAPn/BQAGAAYAAAAFAPr/BQAGAAcAAAAFAPv/BQAGAAgAAAAFAPz/BQAGAAkAAAAFAP3/BQAGAAoAAAAFAP7/BQAGAAsAAAAFAP//BQAGAAwAAAAGAPT/BQAHAAEAAAAGAPX/BQAHAAIAAAAGAPb/BQAHAAMAAAAGAPf/BQAHAAQAAAAGAPj/BQAHAAUAAAAGAPn/BQAHAAYAAAAGAPr/BQAHAAcAAAAGAPv/BQAHAAgAAAAGAPz/BQAHAAkAAAAGAP3/BQAHAAoAAAAGAP7/BQAHAAsAAAAGAP//BQAHAAwAAAAHAPT/BQAIAAEAAAAHAPX/BQAIAAIAAAAHAPb/BQAIAAMAAAAHAPf/BQAIAAQAAAAHAPj/BQAIAAUAAAAHAPn/BQAIAAYAAAAHAPr/BQAIAAcAAAAHAPv/BQAIAAgAAAAHAPz/BQAIAAkAAAAHAP3/BQAIAAoAAAAHAP7/BQAIAAsAAAAHAP//BQAIAAwAAAAIAPT/BQAJAAEAAAAIAPX/BQAJAAIAAAAIAPb/BQAJAAMAAAAIAPf/BQAJAAQAAAAIAPj/BQAJAAUAAAAIAPn/BQAJAAYAAAAIAPr/BQAJAAcAAAAIAPv/BQAJAAgAAAAIAPz/BQAJAAkAAAAIAP3/BQAJAAoAAAAIAP7/BQAJAAsAAAAIAP//BQAJAAwAAAAJAPT/BQAKAAEAAAAJAPX/BQAKAAIAAAAJAPb/BQAKAAMAAAAJAPf/BQAKAAQAAAAJAPj/BQAKAAUAAAAJAPn/BQAKAAYAAAAJAPr/BQAKAAcAAAAJAPv/BQAKAAgAAAAJAPz/BQAKAAkAAAAJAP3/BQAKAAoAAAAJAP7/BQAKAAsAAAAJAP//BQAKAAwAAAAKAPT/BQALAAEAAAAKAPX/BQALAAIAAAAKAPb/BQALAAMAAAAKAPf/BQALAAQAAAAKAPj/BQALAAUAAAAKAPn/BQALAAYAAAAKAPr/BQALAAcAAAAKAPv/BQALAAgAAAAKAPz/BQALAAkAAAAKAP3/BQALAAoAAAAKAP7/BQALAAsAAAAKAP//BQALAAwAAAALAPT/BQAMAAEAAAALAPX/BQAMAAIAAAALAPb/BQAMAAMAAAALAPf/BQAMAAQAAAALAPj/BQAMAAUAAAALAPn/BQAMAAYAAAALAPr/BQAMAAcAAAALAPv/BQAMAAgAAAALAPz/BQAMAAkAAAALAP3/BQAMAAoAAAALAP7/BQAMAAsAAAALAP//BQAMAAwAAAAMAPT/BQANAAEAAAAMAPX/BQANAAIAAAAMAPb/BQANAAMAAAAMAPf/BQANAAQAAAAMAPj/BQANAAUAAAAMAPn/BQANAAYAAAAMAPr/BQANAAcAAAAMAPv/BQANAAgAAAAMAPz/BQANAAkAAAAMAP3/BQANAAoAAAAMAP7/BQANAAsAAAAMAP//BQANAAwAAAANAO7/BQABAAcAAAANAO//BQABAAgAAAANAPD/BQABAAkAAAANAPH/BQABAAoAAAANAPL/BQABAAsAAAANAPP/BQABAAwAAAAOAO7/BQACAAcAAAAOAO//BQACAAgAAAAOAPD/BQACAAkAAAAOAPH/BQACAAoAAAAOAPL/BQACAAsAAAAOAPP/BQACAAwAAAAPAO7/BQADAAcAAAAPAO//BQADAAgAAAAPAPD/BQADAAkAAAAPAPH/BQADAAoAAAAPAPL/BQADAAsAAAAPAPP/BQADAAwAAAAQAO7/BQAEAAcAAAAQAO//BQAEAAgAAAAQAPD/BQAEAAkAAAAQAPH/BQAEAAoAAAAQAPL/BQAEAAsAAAAQAPP/BQAEAAwAAAARAO7/BQAFAAcAAAARAO//BQAFAAgAAAARAPD/BQAFAAkAAAARAPH/BQAFAAoAAAARAPL/BQAFAAsAAAARAPP/BQAFAAwAAAASAO7/BQAGAAcAAAASAO//BQAGAAgAAAASAPD/BQAGAAkAAAASAPH/BQAGAAoAAAASAPL/BQAGAAsAAAASAPP/BQAGAAwAAAATAO7/BQAHAAcAAAATAO//BQAHAAgAAAATAPD/BQAHAAkAAAATAPH/BQAHAAoAAAATAPL/BQAHAAsAAAATAPP/BQAHAAwAAAAUAO7/BQAIAAcAAAAUAO//BQAIAAgAAAAUAPD/BQAIAAkAAAAUAPH/BQAIAAoAAAAUAPL/BQAIAAsAAAAUAPP/BQAIAAwAAAAVAO7/BQAJAAcAAAAVAO//BQAJAAgAAAAVAPD/BQAJAAkAAAAVAPH/BQAJAAoAAAAVAPL/BQAJAAsAAAAVAPP/BQAJAAwAAAAWAO7/BQAKAAcAAAAWAO//BQAKAAgAAAAWAPD/BQAKAAkAAAAWAPH/BQAKAAoAAAAWAPL/BQAKAAsAAAAWAPP/BQAKAAwAAAAXAO7/BQALAAcAAAAXAO//BQALAAgAAAAXAPD/BQALAAkAAAAXAPH/BQALAAoAAAAXAPL/BQALAAsAAAAXAPP/BQALAAwAAAAYAO7/BQAMAAcAAAAYAO//BQAMAAgAAAAYAPD/BQAMAAkAAAAYAPH/BQAMAAoAAAAYAPL/BQAMAAsAAAAYAPP/BQAMAAwAAAAZAO7/BQANAAcAAAAZAO//BQANAAgAAAAZAPD/BQANAAkAAAAZAPH/BQANAAoAAAAZAPL/BQANAAsAAAAZAPP/BQANAAwAAAANAPT/BQABAAEAAAANAPX/BQABAAIAAAANAPb/BQABAAMAAAANAPf/BQABAAQAAAANAPj/BQABAAUAAAANAPn/BQABAAYAAAANAPr/BQABAAcAAAANAPv/BQABAAgAAAANAPz/BQABAAkAAAANAP3/BQABAAoAAAANAP7/BQABAAsAAAANAP//BQABAAwAAAAOAPT/BQACAAEAAAAOAPX/BQACAAIAAAAOAPb/BQACAAMAAAAOAPf/BQACAAQAAAAOAPj/BQACAAUAAAAOAPn/BQACAAYAAAAOAPr/BQACAAcAAAAOAPv/BQACAAgAAAAOAPz/BQACAAkAAAAOAP3/BQACAAoAAAAOAP7/BQACAAsAAAAOAP//BQACAAwAAAAPAPT/BQADAAEAAAAPAPX/BQADAAIAAAAPAPb/BQADAAMAAAAPAPf/BQADAAQAAAAPAPj/BQADAAUAAAAPAPn/BQADAAYAAAAPAPr/BQADAAcAAAAPAPv/BQADAAgAAAAPAPz/BQADAAkAAAAPAP3/BQADAAoAAAAPAP7/BQADAAsAAAAPAP//BQADAAwAAAAQAPT/BQAEAAEAAAAQAPX/BQAEAAIAAAAQAPb/BQAEAAMAAAAQAPf/BQAEAAQAAAAQAPj/BQAEAAUAAAAQAPn/BQAEAAYAAAAQAPr/BQAEAAcAAAAQAPv/BQAEAAgAAAAQAPz/BQAEAAkAAAAQAP3/BQAEAAoAAAAQAP7/BQAEAAsAAAAQAP//BQAEAAwAAAARAPT/BQAFAAEAAAARAPX/BQAFAAIAAAARAPb/BQAFAAMAAAARAPf/BQAFAAQAAAARAPj/BQAFAAUAAAARAPn/BQAFAAYAAAARAPr/BQAFAAcAAAARAPv/BQAFAAgAAAARAPz/BQAFAAkAAAARAP3/BQAFAAoAAAARAP7/BQAFAAsAAAARAP//BQAFAAwAAAASAPT/BQAGAAEAAAASAPX/BQAGAAIAAAASAPb/BQAGAAMAAAASAPf/BQAGAAQAAAASAPj/BQAGAAUAAAASAPn/BQAGAAYAAAASAPr/BQAGAAcAAAASAPv/BQAGAAgAAAASAPz/BQAGAAkAAAASAP3/BQAGAAoAAAASAP7/BQAGAAsAAAASAP//BQAGAAwAAAATAPT/BQAHAAEAAAATAPX/BQAHAAIAAAATAPb/BQAHAAMAAAATAPf/BQAHAAQAAAATAPj/BQAHAAUAAAATAPn/BQAHAAYAAAATAPr/BQAHAAcAAAATAPv/BQAHAAgAAAATAPz/BQAHAAkAAAATAP3/BQAHAAoAAAATAP7/BQAHAAsAAAATAP//BQAHAAwAAAAUAPT/BQAIAAEAAAAUAPX/BQAIAAIAAAAUAPb/BQAIAAMAAAAUAPf/BQAIAAQAAAAUAPj/BQAIAAUAAAAUAPn/BQAIAAYAAAAUAPr/BQAIAAcAAAAUAPv/BQAIAAgAAAAUAPz/BQAIAAkAAAAUAP3/BQAIAAoAAAAUAP7/BQAIAAsAAAAUAP//BQAIAAwAAAAVAPT/BQAJAAEAAAAVAPX/BQAJAAIAAAAVAPb/BQAJAAMAAAAVAPf/BQAJAAQAAAAVAPj/BQAJAAUAAAAVAPn/BQAJAAYAAAAVAPr/BQAJAAcAAAAVAPv/BQAJAAgAAAAVAPz/BQAJAAkAAAAVAP3/BQAJAAoAAAAVAP7/BQAJAAsAAAAVAP//BQAJAAwAAAAWAPT/BQAKAAEAAAAWAPX/BQAKAAIAAAAWAPb/BQAKAAMAAAAWAPf/BQAKAAQAAAAWAPj/BQAKAAUAAAAWAPn/BQAKAAYAAAAWAPr/BQAKAAcAAAAWAPv/BQAKAAgAAAAWAPz/BQAKAAkAAAAWAP3/BQAKAAoAAAAWAP7/BQAKAAsAAAAWAP//BQAKAAwAAAAXAPT/BQALAAEAAAAXAPX/BQALAAIAAAAXAPb/BQALAAMAAAAXAPf/BQALAAQAAAAXAPj/BQALAAUAAAAXAPn/BQALAAYAAAAXAPr/BQALAAcAAAAXAPv/BQALAAgAAAAXAPz/BQALAAkAAAAXAP3/BQALAAoAAAAXAP7/BQALAAsAAAAXAP//BQALAAwAAAAYAPT/BQAMAAEAAAAYAPX/BQAMAAIAAAAYAPb/BQAMAAMAAAAYAPf/BQAMAAQAAAAYAPj/BQAMAAUAAAAYAPn/BQAMAAYAAAAYAPr/BQAMAAcAAAAYAPv/BQAMAAgAAAAYAPz/BQAMAAkAAAAYAP3/BQAMAAoAAAAYAP7/BQAMAAsAAAAYAP//BQAMAAwAAAAZAPT/BQANAAEAAAAZAPX/BQANAAIAAAAZAPb/BQANAAMAAAAZAPf/BQANAAQAAAAZAPj/BQANAAUAAAAZAPn/BQANAAYAAAAZAPr/BQANAAcAAAAZAPv/BQANAAgAAAAZAPz/BQANAAkAAAAZAP3/BQANAAoAAAAZAP7/BQANAAsAAAAZAP//BQANAAwAAAAaAO7/BQABAAcAAAAaAO//BQABAAgAAAAaAPD/BQABAAkAAAAaAPH/BQABAAoAAAAaAPL/BQABAAsAAAAaAPP/BQABAAwAAAAbAO7/BQACAAcAAAAbAO//BQACAAgAAAAbAPD/BQACAAkAAAAbAPH/BQACAAoAAAAbAPL/BQACAAsAAAAbAPP/BQACAAwAAAAcAO7/BQADAAcAAAAcAO//BQADAAgAAAAcAPD/BQADAAkAAAAcAPH/BQADAAoAAAAcAPL/BQADAAsAAAAcAPP/BQADAAwAAAAdAO7/BQAEAAcAAAAdAO//BQAEAAgAAAAdAPD/BQAEAAkAAAAdAPH/BQAEAAoAAAAdAPL/BQAEAAsAAAAdAPP/BQAEAAwAAAAeAO7/BQAFAAcAAAAeAO//BQAFAAgAAAAeAPD/BQAFAAkAAAAeAPH/BQAFAAoAAAAeAPL/BQAFAAsAAAAeAPP/BQAFAAwAAAAfAO7/BQAGAAcAAAAfAO//BQAGAAgAAAAfAPD/BQAGAAkAAAAfAPH/BQAGAAoAAAAfAPL/BQAGAAsAAAAfAPP/BQAGAAwAAAAgAO7/BQAHAAcAAAAgAO//BQAHAAgAAAAgAPD/BQAHAAkAAAAgAPH/BQAHAAoAAAAgAPL/BQAHAAsAAAAgAPP/BQAHAAwAAAAaAPT/BQABAAEAAAAaAPX/BQABAAIAAAAaAPb/BQABAAMAAAAaAPf/BQABAAQAAAAaAPj/BQABAAUAAAAaAPn/BQABAAYAAAAaAPr/BQABAAcAAAAaAPv/BQABAAgAAAAaAPz/BQABAAkAAAAaAP3/BQABAAoAAAAaAP7/BQABAAsAAAAaAP//BQABAAwAAAAbAPT/BQACAAEAAAAbAPX/BQACAAIAAAAbAPb/BQACAAMAAAAbAPf/BQACAAQAAAAbAPj/BQACAAUAAAAbAPn/BQACAAYAAAAbAPr/BQACAAcAAAAbAPv/BQACAAgAAAAbAPz/BQACAAkAAAAbAP3/BQACAAoAAAAbAP7/BQACAAsAAAAbAP//BQACAAwAAAAcAPT/BQADAAEAAAAcAPX/BQADAAIAAAAcAPb/BQADAAMAAAAcAPf/BQADAAQAAAAcAPj/BQADAAUAAAAcAPn/BQADAAYAAAAcAPr/BQADAAcAAAAcAPv/BQADAAgAAAAcAPz/BQADAAkAAAAcAP3/BQADAAoAAAAcAP7/BQADAAsAAAAcAP//BQADAAwAAAAdAPT/BQAEAAEAAAAdAPX/BQAEAAIAAAAdAPb/BQAEAAMAAAAdAPf/BQAEAAQAAAAdAPj/BQAEAAUAAAAdAPn/BQAEAAYAAAAdAPr/BQAEAAcAAAAdAPv/BQAEAAgAAAAdAPz/BQAEAAkAAAAdAP3/BQAEAAoAAAAdAP7/BQAEAAsAAAAdAP//BQAEAAwAAAAeAPT/BQAFAAEAAAAeAPX/BQAFAAIAAAAeAPb/BQAFAAMAAAAeAPf/BQAFAAQAAAAeAPj/BQAFAAUAAAAeAPn/BQAFAAYAAAAeAPr/BQAFAAcAAAAeAPv/BQAFAAgAAAAeAPz/BQAFAAkAAAAeAP3/BQAFAAoAAAAeAP7/BQAFAAsAAAAeAP//BQAFAAwAAAAfAPT/BQAGAAEAAAAfAPX/BQAGAAIAAAAfAPb/BQAGAAMAAAAfAPf/BQAGAAQAAAAfAPj/BQAGAAUAAAAfAPn/BQAGAAYAAAAfAPr/BQAGAAcAAAAfAPv/BQAGAAgAAAAfAPz/BQAGAAkAAAAfAP3/BQAGAAoAAAAfAP7/BQAGAAsAAAAfAP//BQAGAAwAAAAgAPT/BQAHAAEAAAAgAPX/BQAHAAIAAAAgAPb/BQAHAAMAAAAgAPf/BQAHAAQAAAAgAPj/BQAHAAUAAAAgAPn/BQAHAAYAAAAgAPr/BQAHAAcAAAAgAPv/BQAHAAgAAAAgAPz/BQAHAAkAAAAgAP3/BQAHAAoAAAAgAP7/BQAHAAsAAAAgAP//BQAHAAwAAADj/+7/BQALAAcAAADj/+//BQALAAgAAADj//D/BQALAAkAAADj//H/BQALAAoAAADj//L/BQALAAsAAADj//P/BQALAAwAAADk/+7/BQAMAAcAAADk/+//BQAMAAgAAADk//D/BQAMAAkAAADk//H/BQAMAAoAAADk//L/BQAMAAsAAADk//P/BQAMAAwAAADl/+7/BQANAAcAAADl/+//BQANAAgAAADl//D/BQANAAkAAADl//H/BQANAAoAAADl//L/BQANAAsAAADl//P/BQANAAwAAADj//T/BQALAAEAAADj//X/BQALAAIAAADj//b/BQALAAMAAADj//f/BQALAAQAAADj//j/BQALAAUAAADj//n/BQALAAYAAADj//r/BQALAAcAAADj//v/BQALAAgAAADj//z/BQALAAkAAADj//3/BQALAAoAAADj//7/BQALAAsAAADj////BQALAAwAAADk//T/BQAMAAEAAADk//X/BQAMAAIAAADk//b/BQAMAAMAAADk//f/BQAMAAQAAADk//j/BQAMAAUAAADk//n/BQAMAAYAAADk//r/BQAMAAcAAADk//v/BQAMAAgAAADk//z/BQAMAAkAAADk//3/BQAMAAoAAADk//7/BQAMAAsAAADk////BQAMAAwAAADl//T/BQANAAEAAADl//X/BQANAAIAAADl//b/BQANAAMAAADl//f/BQANAAQAAADl//j/BQANAAUAAADl//n/BQANAAYAAADl//r/BQANAAcAAADl//v/BQANAAgAAADl//z/BQANAAkAAADl//3/BQANAAoAAADl//7/BQANAAsAAADl////BQANAAwAAADm/+7/BQABAAcAAADm/+//BQABAAgAAADm//D/BQABAAkAAADm//H/BQABAAoAAADm//L/BQABAAsAAADm//P/BQABAAwAAADn/+7/BQACAAcAAADn/+//BQACAAgAAADn//D/BQACAAkAAADn//H/BQACAAoAAADn//L/BQACAAsAAADn//P/BQACAAwAAADo/+7/BQADAAcAAADo/+//BQADAAgAAADo//D/BQADAAkAAADo//H/BQADAAoAAADo//L/BQADAAsAAADo//P/BQADAAwAAADp/+7/BQAEAAcAAADp/+//BQAEAAgAAADp//D/BQAEAAkAAADp//H/BQAEAAoAAADp//L/BQAEAAsAAADp//P/BQAEAAwAAADq/+7/BQAFAAcAAADq/+//BQAFAAgAAADq//D/BQAFAAkAAADq//H/BQAFAAoAAADq//L/BQAFAAsAAADq//P/BQAFAAwAAADr/+7/BQAGAAcAAADr/+//BQAGAAgAAADr//D/BQAGAAkAAADr//H/BQAGAAoAAADr//L/BQAGAAsAAADr//P/BQAGAAwAAADs/+7/BQAHAAcAAADs/+//BQAHAAgAAADs//D/BQAHAAkAAADs//H/BQAHAAoAAADs//L/BQAHAAsAAADs//P/BQAHAAwAAADt/+7/BQAIAAcAAADt/+//BQAIAAgAAADt//D/BQAIAAkAAADt//H/BQAIAAoAAADt//L/BQAIAAsAAADt//P/BQAIAAwAAADu/+7/BQAJAAcAAADu/+//BQAJAAgAAADu//D/BQAJAAkAAADu//H/BQAJAAoAAADu//L/BQAJAAsAAADu//P/BQAJAAwAAADv/+7/BQAKAAcAAADv/+//BQAKAAgAAADv//D/BQAKAAkAAADv//H/BQAKAAoAAADv//L/BQAKAAsAAADv//P/BQAKAAwAAADw/+7/BQALAAcAAADw/+//BQALAAgAAADw//D/BQALAAkAAADw//H/BQALAAoAAADw//L/BQALAAsAAADw//P/BQALAAwAAADx/+7/BQAMAAcAAADx/+//BQAMAAgAAADx//D/BQAMAAkAAADx//H/BQAMAAoAAADx//L/BQAMAAsAAADx//P/BQAMAAwAAADy/+7/BQANAAcAAADy/+//BQANAAgAAADy//D/BQANAAkAAADy//H/BQANAAoAAADy//L/BQANAAsAAADy//P/BQANAAwAAADm//T/BQABAAEAAADm//X/BQABAAIAAADm//b/BQABAAMAAADm//f/BQABAAQAAADm//j/BQABAAUAAADm//n/BQABAAYAAADm//r/BQABAAcAAADm//v/BQABAAgAAADm//z/BQABAAkAAADm//3/BQABAAoAAADm//7/BQABAAsAAADm////BQABAAwAAADn//T/BQACAAEAAADn//X/BQACAAIAAADn//b/BQACAAMAAADn//f/BQACAAQAAADn//j/BQACAAUAAADn//n/BQACAAYAAADn//r/BQACAAcAAADn//v/BQACAAgAAADn//z/BQACAAkAAADn//3/BQACAAoAAADn//7/BQACAAsAAADn////BQACAAwAAADo//T/BQADAAEAAADo//X/BQADAAIAAADo//b/BQADAAMAAADo//f/BQADAAQAAADo//j/BQADAAUAAADo//n/BQADAAYAAADo//r/BQADAAcAAADo//v/BQADAAgAAADo//z/BQADAAkAAADo//3/BQADAAoAAADo//7/BQADAAsAAADo////BQADAAwAAADp//T/BQAEAAEAAADp//X/BQAEAAIAAADp//b/BQAEAAMAAADp//f/BQAEAAQAAADp//j/BQAEAAUAAADp//n/BQAEAAYAAADp//r/BQAEAAcAAADp//v/BQAEAAgAAADp//z/BQAEAAkAAADp//3/BQAEAAoAAADp//7/BQAEAAsAAADp////BQAEAAwAAADq//T/BQAFAAEAAADq//X/BQAFAAIAAADq//b/BQAFAAMAAADq//f/BQAFAAQAAADq//j/BQAFAAUAAADq//n/BQAFAAYAAADq//r/BQAFAAcAAADq//v/BQAFAAgAAADq//z/BQAFAAkAAADq//3/BQAFAAoAAADq//7/BQAFAAsAAADq////BQAFAAwAAADr//T/BQAGAAEAAADr//X/BQAGAAIAAADr//b/BQAGAAMAAADr//f/BQAGAAQAAADr//j/BQAGAAUAAADr//n/BQAGAAYAAADr//r/BQAGAAcAAADr//v/BQAGAAgAAADr//z/BQAGAAkAAADr//3/BQAGAAoAAADr//7/BQAGAAsAAADr////BQAGAAwAAADs//T/BQAHAAEAAADs//X/BQAHAAIAAADs//b/BQAHAAMAAADs//f/BQAHAAQAAADs//j/BQAHAAUAAADs//n/BQAHAAYAAADs//r/BQAHAAcAAADs//v/BQAHAAgAAADs//z/BQAHAAkAAADs//3/BQAHAAoAAADs//7/BQAHAAsAAADs////BQAHAAwAAADt//T/BQAIAAEAAADt//X/BQAIAAIAAADt//b/BQAIAAMAAADt//f/BQAIAAQAAADt//j/BQAIAAUAAADt//n/BQAIAAYAAADt//r/BQAIAAcAAADt//v/BQAIAAgAAADt//z/BQAIAAkAAADt//3/BQAIAAoAAADt//7/BQAIAAsAAADt////BQAIAAwAAADu//T/BQAJAAEAAADu//X/BQAJAAIAAADu//b/BQAJAAMAAADu//f/BQAJAAQAAADu//j/BQAJAAUAAADu//n/BQAJAAYAAADu//r/BQAJAAcAAADu//v/BQAJAAgAAADu//z/BQAJAAkAAADu//3/BQAJAAoAAADu//7/BQAJAAsAAADu////BQAJAAwAAADv//T/BQAKAAEAAADv//X/BQAKAAIAAADv//b/BQAKAAMAAADv//f/BQAKAAQAAADv//j/BQAKAAUAAADv//n/BQAKAAYAAADv//r/BQAKAAcAAADv//v/BQAKAAgAAADv//z/BQAKAAkAAADv//3/BQAKAAoAAADv//7/BQAKAAsAAADv////BQAKAAwAAADw//T/BQALAAEAAADw//X/BQALAAIAAADw//b/BQALAAMAAADw//f/BQALAAQAAADw//j/BQALAAUAAADw//n/BQALAAYAAADw//r/BQALAAcAAADw//v/BQALAAgAAADw//z/BQALAAkAAADw//3/BQALAAoAAADw//7/BQALAAsAAADw////BQALAAwAAADx//T/BQAMAAEAAADx//X/BQAMAAIAAADx//b/BQAMAAMAAADx//f/BQAMAAQAAADx//j/BQAMAAUAAADx//n/BQAMAAYAAADx//r/BQAMAAcAAADx//v/BQAMAAgAAADx//z/BQAMAAkAAADx//3/BQAMAAoAAADx//7/BQAMAAsAAADx////BQAMAAwAAADy//T/BQANAAEAAADy//X/BQANAAIAAADy//b/BQANAAMAAADy//f/BQANAAQAAADy//j/BQANAAUAAADy//n/BQANAAYAAADy//r/BQANAAcAAADy//v/BQANAAgAAADy//z/BQANAAkAAADy//3/BQANAAoAAADy//7/BQANAAsAAADy////BQANAAwAAADz/+7/BQABAAcAAADz/+//BQABAAgAAADz//D/BQABAAkAAADz//H/BQABAAoAAADz//L/BQABAAsAAADz//P/BQABAAwAAAD0/+7/BQACAAcAAAD0/+//BQACAAgAAAD0//D/BQACAAkAAAD0//H/BQACAAoAAAD0//L/BQACAAsAAAD0//P/BQACAAwAAAD1/+7/BQADAAcAAAD1/+//BQADAAgAAAD1//D/BQADAAkAAAD1//H/BQADAAoAAAD1//L/BQADAAsAAAD1//P/BQADAAwAAAD2/+7/BQAEAAcAAAD2/+//BQAEAAgAAAD2//D/BQAEAAkAAAD2//H/BQAEAAoAAAD2//L/BQAEAAsAAAD2//P/BQAEAAwAAAD3/+7/BQAFAAcAAAD3/+//BQAFAAgAAAD3//D/BQAFAAkAAAD3//H/BQAFAAoAAAD3//L/BQAFAAsAAAD3//P/BQAFAAwAAAD4/+7/BQAGAAcAAAD4/+//BQAGAAgAAAD4//D/BQAGAAkAAAD4//H/BQAGAAoAAAD4//L/BQAGAAsAAAD4//P/BQAGAAwAAAD5/+7/BQAHAAcAAAD5/+//BQAHAAgAAAD5//D/BQAHAAkAAAD5//H/BQAHAAoAAAD5//L/BQAHAAsAAAD5//P/BQAHAAwAAAD6/+7/BQAIAAcAAAD6/+//BQAIAAgAAAD6//D/BQAIAAkAAAD6//H/BQAIAAoAAAD6//L/BQAIAAsAAAD6//P/BQAIAAwAAAD7/+7/BQAJAAcAAAD7/+//BQAJAAgAAAD7//D/BQAJAAkAAAD7//H/BQAJAAoAAAD7//L/BQAJAAsAAAD7//P/BQAJAAwAAAD8/+7/BQAKAAcAAAD8/+//BQAKAAgAAAD8//D/BQAKAAkAAAD8//H/BQAKAAoAAAD8//L/BQAKAAsAAAD8//P/BQAKAAwAAAD9/+7/BQALAAcAAAD9/+//BQALAAgAAAD9//D/BQALAAkAAAD9//H/BQALAAoAAAD9//L/BQALAAsAAAD9//P/BQALAAwAAAD+/+7/BQAMAAcAAAD+/+//BQAMAAgAAAD+//D/BQAMAAkAAAD+//H/BQAMAAoAAAD+//L/BQAMAAsAAAD+//P/BQAMAAwAAAD//+7/BQANAAcAAAD//+//BQANAAgAAAD///D/BQANAAkAAAD///H/BQANAAoAAAD///L/BQANAAsAAAD///P/BQANAAwAAADz//T/BQABAAEAAADz//X/BQABAAIAAADz//b/BQABAAMAAADz//f/BQABAAQAAADz//j/BQABAAUAAADz//n/BQABAAYAAADz//r/BQABAAcAAADz//v/BQABAAgAAADz//z/BQABAAkAAADz//3/BQABAAoAAADz//7/BQABAAsAAADz////BQABAAwAAAD0//T/BQACAAEAAAD0//X/BQACAAIAAAD0//b/BQACAAMAAAD0//f/BQACAAQAAAD0//j/BQACAAUAAAD0//n/BQACAAYAAAD0//r/BQACAAcAAAD0//v/BQACAAgAAAD0//z/BQACAAkAAAD0//3/BQACAAoAAAD0//7/BQACAAsAAAD0////BQACAAwAAAD1//T/BQADAAEAAAD1//X/BQADAAIAAAD1//b/BQADAAMAAAD1//f/BQADAAQAAAD1//j/BQADAAUAAAD1//n/BQADAAYAAAD1//r/BQADAAcAAAD1//v/BQADAAgAAAD1//z/BQADAAkAAAD1//3/BQADAAoAAAD1//7/BQADAAsAAAD1////BQADAAwAAAD2//T/BQAEAAEAAAD2//X/BQAEAAIAAAD2//b/BQAEAAMAAAD2//f/BQAEAAQAAAD2//j/BQAEAAUAAAD2//n/BQAEAAYAAAD2//r/BQAEAAcAAAD2//v/BQAEAAgAAAD2//z/BQAEAAkAAAD2//3/BQAEAAoAAAD2//7/BQAEAAsAAAD2////BQAEAAwAAAD3//T/BQAFAAEAAAD3//X/BQAFAAIAAAD3//b/BQAFAAMAAAD3//f/BQAFAAQAAAD3//j/BQAFAAUAAAD3//n/BQAFAAYAAAD3//r/BQAFAAcAAAD3//v/BQAFAAgAAAD3//z/BQAFAAkAAAD3//3/BQAFAAoAAAD3//7/BQAFAAsAAAD3////BQAFAAwAAAD4//T/BQAGAAEAAAD4//X/BQAGAAIAAAD4//b/BQAGAAMAAAD4//f/BQAGAAQAAAD4//j/BQAGAAUAAAD4//n/BQAGAAYAAAD4//r/BQAGAAcAAAD4//v/BQAGAAgAAAD4//z/BQAGAAkAAAD4//3/BQAGAAoAAAD4//7/BQAGAAsAAAD4////BQAGAAwAAAD5//T/BQAHAAEAAAD5//X/BQAHAAIAAAD5//b/BQAHAAMAAAD5//f/BQAHAAQAAAD5//j/BQAHAAUAAAD5//n/BQAHAAYAAAD5//r/BQAHAAcAAAD5//v/BQAHAAgAAAD5//z/BQAHAAkAAAD5//3/BQAHAAoAAAD5//7/BQAHAAsAAAD5////BQAHAAwAAAD6//T/BQAIAAEAAAD6//X/BQAIAAIAAAD6//b/BQAIAAMAAAD6//f/BQAIAAQAAAD6//j/BQAIAAUAAAD6//n/BQAIAAYAAAD6//r/BQAIAAcAAAD6//v/BQAIAAgAAAD6//z/BQAIAAkAAAD6//3/BQAIAAoAAAD6//7/BQAIAAsAAAD6////BQAIAAwAAAD7//T/BQAJAAEAAAD7//X/BQAJAAIAAAD7//b/BQAJAAMAAAD7//f/BQAJAAQAAAD7//j/BQAJAAUAAAD7//n/BQAJAAYAAAD7//r/BQAJAAcAAAD7//v/BQAJAAgAAAD7//z/BQAJAAkAAAD7//3/BQAJAAoAAAD7//7/BQAJAAsAAAD7////BQAJAAwAAAD8//T/BQAKAAEAAAD8//X/BQAKAAIAAAD8//b/BQAKAAMAAAD8//f/BQAKAAQAAAD8//j/BQAKAAUAAAD8//n/BQAKAAYAAAD8//r/BQAKAAcAAAD8//v/BQAKAAgAAAD8//z/BQAKAAkAAAD8//3/BQAKAAoAAAD8//7/BQAKAAsAAAD8////BQAKAAwAAAD9//T/BQALAAEAAAD9//X/BQALAAIAAAD9//b/BQALAAMAAAD9//f/BQALAAQAAAD9//j/BQALAAUAAAD9//n/BQALAAYAAAD9//r/BQALAAcAAAD9//v/BQALAAgAAAD9//z/BQALAAkAAAD9//3/BQALAAoAAAD9//7/BQALAAsAAAD9////BQALAAwAAAD+//T/BQAMAAEAAAD+//X/BQAMAAIAAAD+//b/BQAMAAMAAAD+//f/BQAMAAQAAAD+//j/BQAMAAUAAAD+//n/BQAMAAYAAAD+//r/BQAMAAcAAAD+//v/BQAMAAgAAAD+//z/BQAMAAkAAAD+//3/BQAMAAoAAAD+//7/BQAMAAsAAAD+////BQAMAAwAAAD///T/BQANAAEAAAD///X/BQANAAIAAAD///b/BQANAAMAAAD///f/BQANAAQAAAD///j/BQANAAUAAAD///n/BQANAAYAAAD///r/BQANAAcAAAD///v/BQANAAgAAAD///z/BQANAAkAAAD///3/BQANAAoAAAD///7/BQANAAsAAAD/////BQANAAwAAADh/+7/BQAMAAcAAADh/+//BQAMAAgAAADh//D/BQAMAAkAAADh//H/BQAMAAoAAADh//L/BQAMAAsAAADh//P/BQAMAAwAAADi/+7/BQANAAcAAADi/+//BQANAAgAAADi//D/BQANAAkAAADi//H/BQANAAoAAADi//L/BQANAAsAAADi//P/BQANAAwAAADh//T/BQAMAAEAAADh//X/BQAMAAIAAADh//b/BQAMAAMAAADh//f/BQAMAAQAAADh//j/BQAMAAUAAADh//n/BQAMAAYAAADh//r/BQAMAAcAAADh//v/BQAMAAgAAADh//z/BQAMAAkAAADh//3/BQAMAAoAAADh//7/BQAMAAsAAADh////BQAMAAwAAADi//T/BQANAAEAAADi//X/BQANAAIAAADi//b/BQANAAMAAADi//f/BQANAAQAAADi//j/BQANAAUAAADi//n/BQANAAYAAADi//r/BQANAAcAAADi//v/BQANAAgAAADi//z/BQANAAkAAADi//3/BQANAAoAAADi//7/BQANAAsAAADi////BQANAAwAAAAhAO7/BQAAAAAAAAAhAO//BQAAAAEAAAAhAPD/BQAAAAIAAAAhAPH/BQAAAAMAAAAhAPL/BQAAAAQAAAAiAO7/BQABAAAAAAAiAO//BQABAAEAAAAiAPD/BQABAAIAAAAiAPH/BQABAAMAAAAiAPL/BQABAAQAAAAjAO7/BQACAAAAAAAjAO//BQACAAEAAAAjAPD/BQACAAIAAAAjAPH/BQACAAMAAAAjAPL/BQACAAQAAAAkAO7/BQADAAAAAAAkAO//BQADAAEAAAAkAPD/BQADAAIAAAAkAPH/BQADAAMAAAAkAPL/BQADAAQAAAAlAO7/BQAEAAAAAAAlAO//BQAEAAEAAAAlAPD/BQAEAAIAAAAlAPH/BQAEAAMAAAAlAPL/BQAEAAQAAAAmAO7/BQAFAAAAAAAmAO//BQAFAAEAAAAmAPD/BQAFAAIAAAAmAPH/BQAFAAMAAAAmAPL/BQAFAAQAAAAnAO7/BQAGAAAAAAAnAO//BQAGAAEAAAAnAPD/BQAGAAIAAAAnAPH/BQAGAAMAAAAnAPL/BQAGAAQAAAAoAO7/BQAHAAAAAAAoAO//BQAHAAEAAAAoAPD/BQAHAAIAAAAoAPH/BQAHAAMAAAAoAPL/BQAHAAQAAAAhAPP/BQAAAAAAAAAhAPT/BQAAAAEAAAAhAPX/BQAAAAIAAAAhAPb/BQAAAAMAAAAhAPf/BQAAAAQAAAAiAPP/BQABAAAAAAAiAPT/BQABAAEAAAAiAPX/BQABAAIAAAAiAPb/BQABAAMAAAAiAPf/BQABAAQAAAAjAPP/BQACAAAAAAAjAPT/BQACAAEAAAAjAPX/BQACAAIAAAAjAPb/BQACAAMAAAAjAPf/BQACAAQAAAAkAPP/BQADAAAAAAAkAPT/BQADAAEAAAAkAPX/BQADAAIAAAAkAPb/BQADAAMAAAAkAPf/BQADAAQAAAAlAPP/BQAEAAAAAAAlAPT/BQAEAAEAAAAlAPX/BQAEAAIAAAAlAPb/BQAEAAMAAAAlAPf/BQAEAAQAAAAmAPP/BQAFAAAAAAAmAPT/BQAFAAEAAAAmAPX/BQAFAAIAAAAmAPb/BQAFAAMAAAAmAPf/BQAFAAQAAAAnAPP/BQAGAAAAAAAnAPT/BQAGAAEAAAAnAPX/BQAGAAIAAAAnAPb/BQAGAAMAAAAnAPf/BQAGAAQAAAAoAPP/BQAHAAAAAAAoAPT/BQAHAAEAAAAoAPX/BQAHAAIAAAAoAPb/BQAHAAMAAAAoAPf/BQAHAAQAAAAhAPj/BQAAAAAAAAAhAPn/BQAAAAEAAAAhAPr/BQAAAAIAAAAhAPv/BQAAAAMAAAAhAPz/BQAAAAQAAAAiAPj/BQABAAAAAAAiAPn/BQABAAEAAAAiAPr/BQABAAIAAAAiAPv/BQABAAMAAAAiAPz/BQABAAQAAAAjAPj/BQACAAAAAAAjAPn/BQACAAEAAAAjAPr/BQACAAIAAAAjAPv/BQACAAMAAAAjAPz/BQACAAQAAAAkAPj/BQADAAAAAAAkAPn/BQADAAEAAAAkAPr/BQADAAIAAAAkAPv/BQADAAMAAAAkAPz/BQADAAQAAAAlAPj/BQAEAAAAAAAlAPn/BQAEAAEAAAAlAPr/BQAEAAIAAAAlAPv/BQAEAAMAAAAlAPz/BQAEAAQAAAAmAPj/BQAFAAAAAAAmAPn/BQAFAAEAAAAmAPr/BQAFAAIAAAAmAPv/BQAFAAMAAAAmAPz/BQAFAAQAAAAnAPj/BQAGAAAAAAAnAPn/BQAGAAEAAAAnAPr/BQAGAAIAAAAnAPv/BQAGAAMAAAAnAPz/BQAGAAQAAAAoAPj/BQAHAAAAAAAoAPn/BQAHAAEAAAAoAPr/BQAHAAIAAAAoAPv/BQAHAAMAAAAoAPz/BQAHAAQAAAAhAP3/BQAAAAAAAAAhAP7/BQAAAAEAAAAhAP//BQAAAAIAAAAhAAAABQAAAAMAAAAhAAEABQAAAAQAAAAiAP3/BQABAAAAAAAiAP7/BQABAAEAAAAiAP//BQABAAIAAAAiAAAABQABAAMAAAAiAAEABQABAAQAAAAjAP3/BQACAAAAAAAjAP7/BQACAAEAAAAjAP//BQACAAIAAAAjAAAABQACAAMAAAAjAAEABQACAAQAAAAkAP3/BQADAAAAAAAkAP7/BQADAAEAAAAkAP//BQADAAIAAAAkAAAABQADAAMAAAAkAAEABQADAAQAAAAlAP3/BQAEAAAAAAAlAP7/BQAEAAEAAAAlAP//BQAEAAIAAAAlAAAABQAEAAMAAAAlAAEABQAEAAQAAAAmAP3/BQAFAAAAAAAmAP7/BQAFAAEAAAAmAP//BQAFAAIAAAAmAAAABQAFAAMAAAAmAAEABQAFAAQAAAAnAP3/BQAGAAAAAAAnAP7/BQAGAAEAAAAnAP//BQAGAAIAAAAnAAAABQAGAAMAAAAnAAEABQAGAAQAAAAoAP3/BQAHAAAAAAAoAP7/BQAHAAEAAAAoAP//BQAHAAIAAAAoAAAABQAHAAMAAAAoAAEABQAHAAQAAAAhAAIABQAAAAAAAAAhAAMABQAAAAEAAAAhAAQABQAAAAIAAAAhAAUABQAAAAMAAAAhAAYABQAAAAQAAAAiAAIABQABAAAAAAAiAAMABQABAAEAAAAiAAQABQABAAIAAAAiAAUABQABAAMAAAAiAAYABQABAAQAAAAjAAIABQACAAAAAAAjAAMABQACAAEAAAAjAAQABQACAAIAAAAjAAUABQACAAMAAAAjAAYABQACAAQAAAAkAAIABQADAAAAAAAkAAMABQADAAEAAAAkAAQABQADAAIAAAAkAAUABQADAAMAAAAkAAYABQADAAQAAAAlAAIABQAEAAAAAAAlAAMABQAEAAEAAAAlAAQABQAEAAIAAAAlAAUABQAEAAMAAAAlAAYABQAEAAQAAAAmAAIABQAFAAAAAAAmAAMABQAFAAEAAAAmAAQABQAFAAIAAAAmAAUABQAFAAMAAAAmAAYABQAFAAQAAAAnAAIABQAGAAAAAAAnAAMABQAGAAEAAAAnAAQABQAGAAIAAAAnAAUABQAGAAMAAAAnAAYABQAGAAQAAAAoAAIABQAHAAAAAAAoAAMABQAHAAEAAAAoAAQABQAHAAIAAAAoAAUABQAHAAMAAAAoAAYABQAHAAQAAAAhAAcABQAAAAAAAAAhAAgABQAAAAEAAAAhAAkABQAAAAIAAAAhAAoABQAAAAMAAAAhAAsABQAAAAQAAAAiAAcABQABAAAAAAAiAAgABQABAAEAAAAiAAkABQABAAIAAAAiAAoABQABAAMAAAAiAAsABQABAAQAAAAjAAcABQACAAAAAAAjAAgABQACAAEAAAAjAAkABQACAAIAAAAjAAoABQACAAMAAAAjAAsABQACAAQAAAAkAAcABQADAAAAAAAkAAgABQADAAEAAAAkAAkABQADAAIAAAAkAAoABQADAAMAAAAkAAsABQADAAQAAAAlAAcABQAEAAAAAAAlAAgABQAEAAEAAAAlAAkABQAEAAIAAAAlAAoABQAEAAMAAAAlAAsABQAEAAQAAAAmAAcABQAFAAAAAAAmAAgABQAFAAEAAAAmAAkABQAFAAIAAAAmAAoABQAFAAMAAAAmAAsABQAFAAQAAAAnAAcABQAGAAAAAAAnAAgABQAGAAEAAAAnAAkABQAGAAIAAAAnAAoABQAGAAMAAAAnAAsABQAGAAQAAAAoAAcABQAHAAAAAAAoAAgABQAHAAEAAAAoAAkABQAHAAIAAAAoAAoABQAHAAMAAAAoAAsABQAHAAQAAAAhAAwABQAAAAAAAAAhAA0ABQAAAAEAAAAhAA4ABQAAAAIAAAAhAA8ABQAAAAMAAAAhABAABQAAAAQAAAAiAAwABQABAAAAAAAiAA0ABQABAAEAAAAiAA4ABQABAAIAAAAiAA8ABQABAAMAAAAiABAABQABAAQAAAAjAAwABQACAAAAAAAjAA0ABQACAAEAAAAjAA4ABQACAAIAAAAjAA8ABQACAAMAAAAjABAABQACAAQAAAAkAAwABQADAAAAAAAkAA0ABQADAAEAAAAkAA4ABQADAAIAAAAkAA8ABQADAAMAAAAkABAABQADAAQAAAAlAAwABQAEAAAAAAAlAA0ABQAEAAEAAAAlAA4ABQAEAAIAAAAlAA8ABQAEAAMAAAAlABAABQAEAAQAAAAmAAwABQAFAAAAAAAmAA0ABQAFAAEAAAAmAA4ABQAFAAIAAAAmAA8ABQAFAAMAAAAmABAABQAFAAQAAAAnAAwABQAGAAAAAAAnAA0ABQAGAAEAAAAnAA4ABQAGAAIAAAAnAA8ABQAGAAMAAAAnABAABQAGAAQAAAAoAAwABQAHAAAAAAAoAA0ABQAHAAEAAAAoAA4ABQAHAAIAAAAoAA8ABQAHAAMAAAAoABAABQAHAAQAAAAhABEABQAAAAAAAAAhABIABQAAAAEAAAAhABMABQAAAAIAAAAhABQABQAAAAMAAAAhABUABQAAAAQAAAAiABEABQABAAAAAAAiABIABQABAAEAAAAiABMABQABAAIAAAAiABQABQABAAMAAAAiABUABQABAAQAAAAjABEABQACAAAAAAAjABIABQACAAEAAAAjABMABQACAAIAAAAjABQABQACAAMAAAAjABUABQACAAQAAAAkABEABQADAAAAAAAkABIABQADAAEAAAAkABMABQADAAIAAAAkABQABQADAAMAAAAkABUABQADAAQAAAAlABEABQAEAAAAAAAlABIABQAEAAEAAAAlABMABQAEAAIAAAAlABQABQAEAAMAAAAlABUABQAEAAQAAAAmABEABQAFAAAAAAAmABIABQAFAAEAAAAmABMABQAFAAIAAAAmABQABQAFAAMAAAAmABUABQAFAAQAAAAnABEABQAGAAAAAAAnABIABQAGAAEAAAAnABMABQAGAAIAAAAnABQABQAGAAMAAAAnABUABQAGAAQAAAAoABEABQAHAAAAAAAoABIABQAHAAEAAAAoABMABQAHAAIAAAAoABQABQAHAAMAAAAoABUABQAHAAQAAAAhABYABQAAAAAAAAAhABcABQAAAAEAAAAhABgABQAAAAIAAAAhABkABQAAAAMAAAAhABoABQAAAAQAAAAiABYABQABAAAAAAAiABcABQABAAEAAAAiABgABQABAAIAAAAiABkABQABAAMAAAAiABoABQABAAQAAAAjABYABQACAAAAAAAjABcABQACAAEAAAAjABgABQACAAIAAAAjABkABQACAAMAAAAjABoABQACAAQAAAAkABYABQADAAAAAAAkABcABQADAAEAAAAkABgABQADAAIAAAAkABkABQADAAMAAAAkABoABQADAAQAAAAlABYABQAEAAAAAAAlABcABQAEAAEAAAAlABgABQAEAAIAAAAlABkABQAEAAMAAAAlABoABQAEAAQAAAAmABYABQAFAAAAAAAmABcABQAFAAEAAAAmABgABQAFAAIAAAAmABkABQAFAAMAAAAmABoABQAFAAQAAAAnABYABQAGAAAAAAAnABcABQAGAAEAAAAnABgABQAGAAIAAAAnABkABQAGAAMAAAAnABoABQAGAAQAAAAoABYABQAHAAAAAAAoABcABQAHAAEAAAAoABgABQAHAAIAAAAoABkABQAHAAMAAAAoABoABQAHAAQAAAAhABsABQAAAAAAAAAhABwABQAAAAEAAAAhAB0ABQAAAAIAAAAhAB4ABQAAAAMAAAAhAB8ABQAAAAQAAAAiABsABQABAAAAAAAiABwABQABAAEAAAAiAB0ABQABAAIAAAAiAB4ABQABAAMAAAAiAB8ABQABAAQAAAAjABsABQACAAAAAAAjABwABQACAAEAAAAjAB0ABQACAAIAAAAjAB4ABQACAAMAAAAjAB8ABQACAAQAAAAkABsABQADAAAAAAAkABwABQADAAEAAAAkAB0ABQADAAIAAAAkAB4ABQADAAMAAAAkAB8ABQADAAQAAAAlABsABQAEAAAAAAAlABwABQAEAAEAAAAlAB0ABQAEAAIAAAAlAB4ABQAEAAMAAAAlAB8ABQAEAAQAAAAmABsABQAFAAAAAAAmABwABQAFAAEAAAAmAB0ABQAFAAIAAAAmAB4ABQAFAAMAAAAmAB8ABQAFAAQAAAAnABsABQAGAAAAAAAnABwABQAGAAEAAAAnAB0ABQAGAAIAAAAnAB4ABQAGAAMAAAAnAB8ABQAGAAQAAAAoABsABQAHAAAAAAAoABwABQAHAAEAAAAoAB0ABQAHAAIAAAAoAB4ABQAHAAMAAAAoAB8ABQAHAAQAAADZ/+7/BQABAAAAAADZ/+//BQABAAEAAADZ//D/BQABAAIAAADZ//H/BQABAAMAAADZ//L/BQABAAQAAADa/+7/BQACAAAAAADa/+//BQACAAEAAADa//D/BQACAAIAAADa//H/BQACAAMAAADa//L/BQACAAQAAADb/+7/BQADAAAAAADb/+//BQADAAEAAADb//D/BQADAAIAAADb//H/BQADAAMAAADb//L/BQADAAQAAADc/+7/BQAEAAAAAADc/+//BQAEAAEAAADc//D/BQAEAAIAAADc//H/BQAEAAMAAADc//L/BQAEAAQAAADd/+7/BQAFAAAAAADd/+//BQAFAAEAAADd//D/BQAFAAIAAADd//H/BQAFAAMAAADd//L/BQAFAAQAAADe/+7/BQAGAAAAAADe/+//BQAGAAEAAADe//D/BQAGAAIAAADe//H/BQAGAAMAAADe//L/BQAGAAQAAADf/+7/BQAHAAAAAADf/+//BQAHAAEAAADf//D/BQAHAAIAAADf//H/BQAHAAMAAADf//L/BQAHAAQAAADg/+7/BQAIAAAAAADg/+//BQAIAAEAAADg//D/BQAIAAIAAADg//H/BQAIAAMAAADg//L/BQAIAAQAAADZ//P/BQABAAAAAADZ//T/BQABAAEAAADZ//X/BQABAAIAAADZ//b/BQABAAMAAADZ//f/BQABAAQAAADa//P/BQACAAAAAADa//T/BQACAAEAAADa//X/BQACAAIAAADa//b/BQACAAMAAADa//f/BQACAAQAAADb//P/BQADAAAAAADb//T/BQADAAEAAADb//X/BQADAAIAAADb//b/BQADAAMAAADb//f/BQADAAQAAADc//P/BQAEAAAAAADc//T/BQAEAAEAAADc//X/BQAEAAIAAADc//b/BQAEAAMAAADc//f/BQAEAAQAAADd//P/BQAFAAAAAADd//T/BQAFAAEAAADd//X/BQAFAAIAAADd//b/BQAFAAMAAADd//f/BQAFAAQAAADe//P/BQAGAAAAAADe//T/BQAGAAEAAADe//X/BQAGAAIAAADe//b/BQAGAAMAAADe//f/BQAGAAQAAADf//P/BQAHAAAAAADf//T/BQAHAAEAAADf//X/BQAHAAIAAADf//b/BQAHAAMAAADf//f/BQAHAAQAAADg//P/BQAIAAAAAADg//T/BQAIAAEAAADg//X/BQAIAAIAAADg//b/BQAIAAMAAADg//f/BQAIAAQAAADZ//j/BQABAAAAAADZ//n/BQABAAEAAADZ//r/BQABAAIAAADZ//v/BQABAAMAAADZ//z/BQABAAQAAADa//j/BQACAAAAAADa//n/BQACAAEAAADa//r/BQACAAIAAADa//v/BQACAAMAAADa//z/BQACAAQAAADb//j/BQADAAAAAADb//n/BQADAAEAAADb//r/BQADAAIAAADb//v/BQADAAMAAADb//z/BQADAAQAAADc//j/BQAEAAAAAADc//n/BQAEAAEAAADc//r/BQAEAAIAAADc//v/BQAEAAMAAADc//z/BQAEAAQAAADd//j/BQAFAAAAAADd//n/BQAFAAEAAADd//r/BQAFAAIAAADd//v/BQAFAAMAAADd//z/BQAFAAQAAADe//j/BQAGAAAAAADe//n/BQAGAAEAAADe//r/BQAGAAIAAADe//v/BQAGAAMAAADe//z/BQAGAAQAAADf//j/BQAHAAAAAADf//n/BQAHAAEAAADf//r/BQAHAAIAAADf//v/BQAHAAMAAADf//z/BQAHAAQAAADg//j/BQAIAAAAAADg//n/BQAIAAEAAADg//r/BQAIAAIAAADg//v/BQAIAAMAAADg//z/BQAIAAQAAADZ//3/BQABAAAAAADZ//7/BQABAAEAAADZ////BQABAAIAAADZ/wAABQABAAMAAADZ/wEABQABAAQAAADa//3/BQACAAAAAADa//7/BQACAAEAAADa////BQACAAIAAADa/wAABQACAAMAAADa/wEABQACAAQAAADb//3/BQADAAAAAADb//7/BQADAAEAAADb////BQADAAIAAADb/wAABQADAAMAAADb/wEABQADAAQAAADc//3/BQAEAAAAAADc//7/BQAEAAEAAADc////BQAEAAIAAADc/wAABQAEAAMAAADc/wEABQAEAAQAAADd//3/BQAFAAAAAADd//7/BQAFAAEAAADd////BQAFAAIAAADd/wAABQAFAAMAAADd/wEABQAFAAQAAADe//3/BQAGAAAAAADe//7/BQAGAAEAAADe////BQAGAAIAAADe/wAABQAGAAMAAADe/wEABQAGAAQAAADf//3/BQAHAAAAAADf//7/BQAHAAEAAADf////BQAHAAIAAADf/wAABQAHAAMAAADf/wEABQAHAAQAAADg//3/BQAIAAAAAADg//7/BQAIAAEAAADg////BQAIAAIAAADg/wAABQAIAAMAAADg/wEABQAIAAQAAADZ/wIABQABAAAAAADZ/wMABQABAAEAAADZ/wQABQABAAIAAADZ/wUABQABAAMAAADZ/wYABQABAAQAAADa/wIABQACAAAAAADa/wMABQACAAEAAADa/wQABQACAAIAAADa/wUABQACAAMAAADa/wYABQACAAQAAADb/wIABQADAAAAAADb/wMABQADAAEAAADb/wQABQADAAIAAADb/wUABQADAAMAAADb/wYABQADAAQAAADc/wIABQAEAAAAAADc/wMABQAEAAEAAADc/wQABQAEAAIAAADc/wUABQAEAAMAAADc/wYABQAEAAQAAADd/wIABQAFAAAAAADd/wMABQAFAAEAAADd/wQABQAFAAIAAADd/wUABQAFAAMAAADd/wYABQAFAAQAAADe/wIABQAGAAAAAADe/wMABQAGAAEAAADe/wQABQAGAAIAAADe/wUABQAGAAMAAADe/wYABQAGAAQAAADf/wIABQAHAAAAAADf/wMABQAHAAEAAADf/wQABQAHAAIAAADf/wUABQAHAAMAAADf/wYABQAHAAQAAADg/wIABQAIAAAAAADg/wMABQAIAAEAAADg/wQABQAIAAIAAADg/wUABQAIAAMAAADg/wYABQAIAAQAAADZ/wcABQABAAAAAADZ/wgABQABAAEAAADZ/wkABQABAAIAAADZ/woABQABAAMAAADZ/wsABQABAAQAAADa/wcABQACAAAAAADa/wgABQACAAEAAADa/wkABQACAAIAAADa/woABQACAAMAAADa/wsABQACAAQAAADb/wcABQADAAAAAADb/wgABQADAAEAAADb/wkABQADAAIAAADb/woABQADAAMAAADb/wsABQADAAQAAADc/wcABQAEAAAAAADc/wgABQAEAAEAAADc/wkABQAEAAIAAADc/woABQAEAAMAAADc/wsABQAEAAQAAADd/wcABQAFAAAAAADd/wgABQAFAAEAAADd/wkABQAFAAIAAADd/woABQAFAAMAAADd/wsABQAFAAQAAADe/wcABQAGAAAAAADe/wgABQAGAAEAAADe/wkABQAGAAIAAADe/woABQAGAAMAAADe/wsABQAGAAQAAADf/wcABQAHAAAAAADf/wgABQAHAAEAAADf/wkABQAHAAIAAADf/woABQAHAAMAAADf/wsABQAHAAQAAADg/wcABQAIAAAAAADg/wgABQAIAAEAAADg/wkABQAIAAIAAADg/woABQAIAAMAAADg/wsABQAIAAQAAADZ/wwABQABAAAAAADZ/w0ABQABAAEAAADZ/w4ABQABAAIAAADZ/w8ABQABAAMAAADZ/xAABQABAAQAAADa/wwABQACAAAAAADa/w0ABQACAAEAAADa/w4ABQACAAIAAADa/w8ABQACAAMAAADa/xAABQACAAQAAADb/wwABQADAAAAAADb/w0ABQADAAEAAADb/w4ABQADAAIAAADb/w8ABQADAAMAAADb/xAABQADAAQAAADc/wwABQAEAAAAAADc/w0ABQAEAAEAAADc/w4ABQAEAAIAAADc/w8ABQAEAAMAAADc/xAABQAEAAQAAADd/wwABQAFAAAAAADd/w0ABQAFAAEAAADd/w4ABQAFAAIAAADd/w8ABQAFAAMAAADd/xAABQAFAAQAAADe/wwABQAGAAAAAADe/w0ABQAGAAEAAADe/w4ABQAGAAIAAADe/w8ABQAGAAMAAADe/xAABQAGAAQAAADf/wwABQAHAAAAAADf/w0ABQAHAAEAAADf/w4ABQAHAAIAAADf/w8ABQAHAAMAAADf/xAABQAHAAQAAADg/wwABQAIAAAAAADg/w0ABQAIAAEAAADg/w4ABQAIAAIAAADg/w8ABQAIAAMAAADg/xAABQAIAAQAAADZ/xEABQABAAAAAADZ/xIABQABAAEAAADZ/xMABQABAAIAAADZ/xQABQABAAMAAADZ/xUABQABAAQAAADa/xEABQACAAAAAADa/xIABQACAAEAAADa/xMABQACAAIAAADa/xQABQACAAMAAADa/xUABQACAAQAAADb/xEABQADAAAAAADb/xIABQADAAEAAADb/xMABQADAAIAAADb/xQABQADAAMAAADb/xUABQADAAQAAADc/xEABQAEAAAAAADc/xIABQAEAAEAAADc/xMABQAEAAIAAADc/xQABQAEAAMAAADc/xUABQAEAAQAAADd/xEABQAFAAAAAADd/xIABQAFAAEAAADd/xMABQAFAAIAAADd/xQABQAFAAMAAADd/xUABQAFAAQAAADe/xEABQAGAAAAAADe/xIABQAGAAEAAADe/xMABQAGAAIAAADe/xQABQAGAAMAAADe/xUABQAGAAQAAADf/xEABQAHAAAAAADf/xIABQAHAAEAAADf/xMABQAHAAIAAADf/xQABQAHAAMAAADf/xUABQAHAAQAAADg/xEABQAIAAAAAADg/xIABQAIAAEAAADg/xMABQAIAAIAAADg/xQABQAIAAMAAADg/xUABQAIAAQAAADZ/xYABQABAAAAAADZ/xcABQABAAEAAADZ/xgABQABAAIAAADZ/xkABQABAAMAAADZ/xoABQABAAQAAADa/xYABQACAAAAAADa/xcABQACAAEAAADa/xgABQACAAIAAADa/xkABQACAAMAAADa/xoABQACAAQAAADb/xYABQADAAAAAADb/xcABQADAAEAAADb/xgABQADAAIAAADb/xkABQADAAMAAADb/xoABQADAAQAAADc/xYABQAEAAAAAADc/xcABQAEAAEAAADc/xgABQAEAAIAAADc/xkABQAEAAMAAADc/xoABQAEAAQAAADd/xYABQAFAAAAAADd/xcABQAFAAEAAADd/xgABQAFAAIAAADd/xkABQAFAAMAAADd/xoABQAFAAQAAADe/xYABQAGAAAAAADe/xcABQAGAAEAAADe/xgABQAGAAIAAADe/xkABQAGAAMAAADe/xoABQAGAAQAAADf/xYABQAHAAAAAADf/xcABQAHAAEAAADf/xgABQAHAAIAAADf/xkABQAHAAMAAADf/xoABQAHAAQAAADg/xYABQAIAAAAAADg/xcABQAIAAEAAADg/xgABQAIAAIAAADg/xkABQAIAAMAAADg/xoABQAIAAQAAADZ/xsABQABAAAAAADZ/xwABQABAAEAAADZ/x0ABQABAAIAAADZ/x4ABQABAAMAAADZ/x8ABQABAAQAAADa/xsABQACAAAAAADa/xwABQACAAEAAADa/x0ABQACAAIAAADa/x4ABQACAAMAAADa/x8ABQACAAQAAADb/xsABQADAAAAAADb/xwABQADAAEAAADb/x0ABQADAAIAAADb/x4ABQADAAMAAADb/x8ABQADAAQAAADc/xsABQAEAAAAAADc/xwABQAEAAEAAADc/x0ABQAEAAIAAADc/x4ABQAEAAMAAADc/x8ABQAEAAQAAADd/xsABQAFAAAAAADd/xwABQAFAAEAAADd/x0ABQAFAAIAAADd/x4ABQAFAAMAAADd/x8ABQAFAAQAAADe/xsABQAGAAAAAADe/xwABQAGAAEAAADe/x0ABQAGAAIAAADe/x4ABQAGAAMAAADe/x8ABQAGAAQAAADf/xsABQAHAAAAAADf/xwABQAHAAEAAADf/x0ABQAHAAIAAADf/x4ABQAHAAMAAADg/xsABQAIAAAAAADg/xwABQAIAAEAAADg/x0ABQAIAAIAAADg/x4ABQAIAAMAAABnAAcABQAAAAAAAAD2/w0ABQAEAAIAAAANAB8ABQABAAgAAAD9/x8ABQALAAgAAAD+/x8ABQAMAAgAAAD//x8ABQANAAgAAAAAAB8ABQABAAgAAAABAB8ABQACAAgAAAACAB8ABQADAAgAAAADAB8ABQAEAAgAAAAEAB8ABQAFAAgAAAAFAB8ABQAGAAgAAAAGAB8ABQAHAAgAAAAHAB8ABQAIAAgAAAAIAB8ABQAJAAgAAAAJAB8ABQAKAAgAAAAKAB8ABQALAAgAAAALAB8ABQAMAAgAAAAMAB8ABQANAAgAAADf/x8ABQAHAAQAAADg/x8ABQAIAAQAAADh/x8ABQAJAAgAAADi/x8ABQAKAAgAAADj/x8ABQALAAgAAADk/x8ABQAMAAgAAADl/x8ABQANAAgAAADm/x8ABQABAAgAAADn/x8ABQACAAgAAADo/x8ABQADAAgAAADp/x8ABQAEAAgAAADq/x8ABQAFAAgAAADr/x8ABQAGAAgAAADs/x8ABQAHAAgAAADt/x8ABQAIAAgAAADu/x8ABQAJAAgAAADv/x8ABQAKAAgAAADw/x8ABQALAAgAAADx/x8ABQAMAAgAAADy/x8ABQANAAgAAADz/x8ABQABAAgAAAD0/x8ABQACAAgAAAD1/x8ABQADAAgAAAD2/x8ABQAEAAgAAAD3/x8ABQAFAAgAAAD4/x8ABQAGAAgAAAD5/x8ABQAHAAgAAAD6/x8ABQAIAAgAAAD7/x8ABQAJAAgAAAD8/x8ABQAKAAgAAAA=") +tile_set = ExtResource("2_tileset") +collision_enabled = false + +[node name="Grass" type="TileMapLayer" parent="."] +position = Vector2(0, -1) +tile_map_data = PackedByteArray("AACy/9z/AAAZAAUAAACy/93/AAAZAAYAAACy/97/AAAZAAcAAACy/9//AAAZAAgAAACz/9z/AAAaAAUAAACz/93/AAAaAAYAAACz/97/AAAaAAcAAACz/9//AAAaAAgAAAC0/9z/AAAbAAUAAAC0/93/AAAbAAYAAAC0/97/AAAbAAcAAAC0/9//AAAbAAgAAACy/+D/AAAZAAQAAACy/+H/AAAZAAUAAACy/+L/AAAZAAYAAACy/+P/AAAZAAcAAACy/+T/AAAZAAgAAACz/+D/AAAaAAQAAACz/+H/AAAaAAUAAACz/+L/AAAaAAYAAACz/+P/AAAaAAcAAACz/+T/AAAaAAgAAAC0/+D/AAAbAAQAAAC0/+H/AAAbAAUAAAC0/+L/AAAbAAYAAAC0/+P/AAAbAAcAAAC0/+T/AAAbAAgAAACy/+X/AAAZAAQAAACy/+b/AAAZAAUAAACy/+f/AAAZAAYAAACy/+j/AAAZAAcAAACy/+n/AAAZAAgAAACz/+X/AAAaAAQAAACz/+b/AAAaAAUAAACz/+f/AAAaAAYAAACz/+j/AAAaAAcAAACz/+n/AAAaAAgAAAC0/+X/AAAbAAQAAAC0/+b/AAAbAAUAAAC0/+f/AAAbAAYAAAC0/+j/AAAbAAcAAAC0/+n/AAAbAAgAAACy/+r/AAAZAAQAAACy/+v/AAAZAAUAAACy/+z/AAAZAAYAAACy/+3/AAAZAAcAAACy/+7/AAAZAAgAAACz/+r/AAAaAAQAAACz/+v/AAAaAAUAAACz/+z/AAAaAAYAAACz/+3/AAAaAAcAAACz/+7/AAAaAAgAAAC0/+r/AAAbAAQAAAC0/+v/AAAbAAUAAAC0/+z/AAAbAAYAAAC0/+3/AAAbAAcAAAC0/+7/AAAbAAgAAACy/+//AAAZAAQAAACy//D/AAAZAAUAAACy//H/AAAZAAYAAACy//L/AAAZAAcAAACy//P/AAAZAAgAAACz/+//AAAaAAQAAACz//D/AAAaAAUAAACz//H/AAAaAAYAAACz//L/AAAaAAcAAACz//P/AAAaAAgAAAC0/+//AAAbAAQAAAC0//D/AAAbAAUAAAC0//H/AAAbAAYAAAC0//L/AAAbAAcAAAC0//P/AAAbAAgAAACy//T/AAAZAAQAAACy//X/AAAZAAUAAACy//b/AAAZAAYAAACy//f/AAAZAAcAAACy//j/AAAZAAgAAACz//T/AAAaAAQAAACz//X/AAAaAAUAAACz//b/AAAaAAYAAACz//f/AAAaAAcAAACz//j/AAAaAAgAAAC0//T/AAAbAAQAAAC0//X/AAAbAAUAAAC0//b/AAAbAAYAAAC0//f/AAAbAAcAAAC0//j/AAAbAAgAAACy//n/AAAZAAQAAACy//r/AAAZAAUAAACy//v/AAAZAAYAAACy//z/AAAZAAcAAACy//3/AAAZAAgAAACz//n/AAAaAAQAAACz//r/AAAaAAUAAACz//v/AAAaAAYAAACz//z/AAAaAAcAAACz//3/AAAaAAgAAAC0//n/AAAbAAQAAAC0//r/AAAbAAUAAAC0//v/AAAbAAYAAAC0//z/AAAbAAcAAAC0//3/AAAbAAgAAACy//7/AAAZAAQAAACy////AAAYAAkAAACz//7/AAAaAAQAAACz////AAAZAAkAAAC0//7/AAAbAAQAAAC0////AAAaAAkAAAC1/9z/AAAYAAUAAAC1/93/AAAYAAYAAAC1/97/AAAYAAcAAAC1/9//AAAYAAgAAAC2/9z/AAAZAAUAAAC2/93/AAAZAAYAAAC2/97/AAAZAAcAAAC2/9//AAAZAAgAAAC3/9z/AAAaAAUAAAC3/93/AAAaAAYAAAC3/97/AAAaAAcAAAC3/9//AAAaAAgAAAC4/9z/AAAbAAUAAAC4/93/AAAbAAYAAAC4/97/AAAbAAcAAAC4/9//AAAbAAgAAAC1/+D/AAAYAAQAAAC1/+H/AAAYAAUAAAC1/+L/AAAYAAYAAAC1/+P/AAAYAAcAAAC1/+T/AAAYAAgAAAC2/+D/AAAZAAQAAAC2/+H/AAAZAAUAAAC2/+L/AAAZAAYAAAC2/+P/AAAZAAcAAAC2/+T/AAAZAAgAAAC3/+D/AAAaAAQAAAC3/+H/AAAaAAUAAAC3/+L/AAAaAAYAAAC3/+P/AAAaAAcAAAC3/+T/AAAaAAgAAAC4/+D/AAAbAAQAAAC4/+H/AAAbAAUAAAC4/+L/AAAbAAYAAAC4/+P/AAAbAAcAAAC4/+T/AAAbAAgAAAC1/+X/AAAYAAQAAAC1/+b/AAAYAAUAAAC1/+f/AAAYAAYAAAC1/+j/AAAYAAcAAAC1/+n/AAAYAAgAAAC2/+X/AAAZAAQAAAC2/+b/AAAZAAUAAAC2/+f/AAAZAAYAAAC2/+j/AAAZAAcAAAC2/+n/AAAZAAgAAAC3/+X/AAAaAAQAAAC3/+b/AAAaAAUAAAC3/+f/AAAaAAYAAAC3/+j/AAAaAAcAAAC3/+n/AAAaAAgAAAC4/+X/AAAbAAQAAAC4/+b/AAAbAAUAAAC4/+f/AAAbAAYAAAC4/+j/AAAbAAcAAAC4/+n/AAAbAAgAAAC1/+r/AAAYAAQAAAC1/+v/AAAYAAUAAAC1/+z/AAAYAAYAAAC1/+3/AAAYAAcAAAC1/+7/AAAYAAgAAAC2/+r/AAAZAAQAAAC2/+v/AAAZAAUAAAC2/+z/AAAZAAYAAAC2/+3/AAAZAAcAAAC2/+7/AAAZAAgAAAC3/+r/AAAaAAQAAAC3/+v/AAAaAAUAAAC3/+z/AAAaAAYAAAC3/+3/AAAaAAcAAAC3/+7/AAAaAAgAAAC4/+r/AAAbAAQAAAC4/+v/AAAbAAUAAAC4/+z/AAAbAAYAAAC4/+3/AAAbAAcAAAC4/+7/AAAbAAgAAAC1/+//AAAYAAQAAAC1//D/AAAYAAUAAAC1//H/AAAYAAYAAAC1//L/AAAYAAcAAAC1//P/AAAYAAgAAAC2/+//AAAZAAQAAAC2//D/AAAZAAUAAAC2//H/AAAZAAYAAAC2//L/AAAZAAcAAAC2//P/AAAZAAgAAAC3/+//AAAaAAQAAAC3//D/AAAaAAUAAAC3//H/AAAaAAYAAAC3//L/AAAaAAcAAAC3//P/AAAaAAgAAAC4/+//AAAbAAQAAAC4//D/AAAbAAUAAAC4//H/AAAbAAYAAAC4//L/AAAbAAcAAAC4//P/AAAbAAgAAAC1//T/AAAYAAQAAAC1//X/AAAYAAUAAAC1//b/AAAYAAYAAAC1//f/AAAYAAcAAAC1//j/AAAYAAgAAAC2//T/AAAZAAQAAAC2//X/AAAZAAUAAAC2//b/AAAZAAYAAAC2//f/AAAZAAcAAAC2//j/AAAZAAgAAAC3//T/AAAaAAQAAAC3//X/AAAaAAUAAAC3//b/AAAaAAYAAAC3//f/AAAaAAcAAAC3//j/AAAaAAgAAAC4//T/AAAbAAQAAAC4//X/AAAbAAUAAAC4//b/AAAbAAYAAAC4//f/AAAbAAcAAAC4//j/AAAbAAgAAAC1//n/AAAYAAQAAAC1//r/AAAYAAUAAAC1//v/AAAYAAYAAAC1//z/AAAYAAcAAAC1//3/AAAYAAgAAAC2//n/AAAZAAQAAAC2//r/AAAZAAUAAAC2//v/AAAZAAYAAAC2//z/AAAZAAcAAAC2//3/AAAZAAgAAAC3//n/AAAaAAQAAAC3//r/AAAaAAUAAAC3//v/AAAaAAYAAAC3//z/AAAaAAcAAAC3//3/AAAaAAgAAAC4//n/AAAbAAQAAAC4//r/AAAbAAUAAAC4//v/AAAbAAYAAAC4//z/AAAbAAcAAAC4//3/AAAbAAgAAAC1//7/AAAYAAQAAAC1////AAAbAAkAAAC2//7/AAAZAAQAAAC2////AAAYAAkAAAC3//7/AAAaAAQAAAC3////AAAZAAkAAAC4//7/AAAbAAQAAAC4////AAAaAAkAAAC5/9z/AAAYAAUAAAC5/93/AAAYAAYAAAC5/97/AAAYAAcAAAC5/9//AAAYAAgAAAC6/9z/AAAZAAUAAAC6/93/AAAZAAYAAAC6/97/AAAZAAcAAAC6/9//AAAZAAgAAAC7/9z/AAAaAAUAAAC7/93/AAAaAAYAAAC7/97/AAAaAAcAAAC7/9//AAAaAAgAAAC8/9z/AAAbAAUAAAC8/93/AAAbAAYAAAC8/97/AAAbAAcAAAC8/9//AAAbAAgAAAC5/+D/AAAYAAQAAAC5/+H/AAAYAAUAAAC5/+L/AAAYAAYAAAC5/+P/AAAYAAcAAAC5/+T/AAAYAAgAAAC6/+D/AAAZAAQAAAC6/+H/AAAZAAUAAAC6/+L/AAAZAAYAAAC6/+P/AAAZAAcAAAC6/+T/AAAZAAgAAAC7/+D/AAAaAAQAAAC7/+H/AAAaAAUAAAC7/+L/AAAaAAYAAAC7/+P/AAAaAAcAAAC7/+T/AAAaAAgAAAC8/+D/AAAbAAQAAAC8/+H/AAAbAAUAAAC8/+L/AAAbAAYAAAC8/+P/AAAbAAcAAAC8/+T/AAAbAAgAAAC5/+X/AAAYAAQAAAC5/+b/AAAYAAUAAAC5/+f/AAAYAAYAAAC5/+j/AAAYAAcAAAC5/+n/AAAYAAgAAAC6/+X/AAAZAAQAAAC6/+b/AAAZAAUAAAC6/+f/AAAZAAYAAAC6/+j/AAAZAAcAAAC6/+n/AAAZAAgAAAC7/+X/AAAaAAQAAAC7/+b/AAAaAAUAAAC7/+f/AAAaAAYAAAC7/+j/AAAaAAcAAAC7/+n/AAAaAAgAAAC8/+X/AAAbAAQAAAC8/+b/AAAbAAUAAAC8/+f/AAAbAAYAAAC8/+j/AAAbAAcAAAC8/+n/AAAbAAgAAAC5/+r/AAAYAAQAAAC5/+v/AAAYAAUAAAC5/+z/AAAYAAYAAAC5/+3/AAAYAAcAAAC5/+7/AAAYAAgAAAC6/+r/AAAZAAQAAAC6/+v/AAAZAAUAAAC6/+z/AAAZAAYAAAC6/+3/AAAZAAcAAAC6/+7/AAAZAAgAAAC7/+r/AAAaAAQAAAC7/+v/AAAaAAUAAAC7/+z/AAAaAAYAAAC7/+3/AAAaAAcAAAC7/+7/AAAaAAgAAAC8/+r/AAAbAAQAAAC8/+v/AAAbAAUAAAC8/+z/AAAbAAYAAAC8/+3/AAAbAAcAAAC8/+7/AAAbAAgAAAC5/+//AAAYAAQAAAC5//D/AAAYAAUAAAC5//H/AAAYAAYAAAC5//L/AAAYAAcAAAC5//P/AAAYAAgAAAC6/+//AAAZAAQAAAC6//D/AAAZAAUAAAC6//H/AAAZAAYAAAC6//L/AAAZAAcAAAC6//P/AAAZAAgAAAC7/+//AAAaAAQAAAC7//D/AAAaAAUAAAC7//H/AAAaAAYAAAC7//L/AAAaAAcAAAC7//P/AAAaAAgAAAC8/+//AAAbAAQAAAC8//D/AAAbAAUAAAC8//H/AAAbAAYAAAC8//L/AAAbAAcAAAC8//P/AAAbAAgAAAC5//T/AAAYAAQAAAC5//X/AAAYAAUAAAC5//b/AAAYAAYAAAC5//f/AAAYAAcAAAC5//j/AAAYAAgAAAC6//T/AAAZAAQAAAC6//X/AAAZAAUAAAC6//b/AAAZAAYAAAC6//f/AAAZAAcAAAC6//j/AAAZAAgAAAC7//T/AAAaAAQAAAC7//X/AAAaAAUAAAC7//b/AAAaAAYAAAC7//f/AAAaAAcAAAC7//j/AAAaAAgAAAC8//T/AAAbAAQAAAC8//X/AAAbAAUAAAC8//b/AAAbAAYAAAC8//f/AAAbAAcAAAC8//j/AAAbAAgAAAC5//n/AAAYAAQAAAC5//r/AAAYAAUAAAC5//v/AAAYAAYAAAC5//z/AAAYAAcAAAC5//3/AAAYAAgAAAC6//n/AAAZAAQAAAC6//r/AAAZAAUAAAC6//v/AAAZAAYAAAC6//z/AAAZAAcAAAC6//3/AAAZAAgAAAC7//n/AAAaAAQAAAC7//r/AAAaAAUAAAC7//v/AAAaAAYAAAC7//z/AAAaAAcAAAC7//3/AAAaAAgAAAC8//n/AAAbAAQAAAC8//r/AAAbAAUAAAC8//v/AAAbAAYAAAC8//z/AAAbAAcAAAC8//3/AAAbAAgAAAC5//7/AAAYAAQAAAC5////AAAbAAkAAAC6//7/AAAZAAQAAAC6////AAAYAAkAAAC7//7/AAAaAAQAAAC7////AAAZAAkAAAC8//7/AAAbAAQAAAC8////AAAaAAkAAAC9/9z/AAAYAAUAAAC9/93/AAAYAAYAAAC9/97/AAAYAAcAAAC9/9//AAAYAAgAAAC+/9z/AAAZAAUAAAC+/93/AAAZAAYAAAC+/97/AAAZAAcAAAC+/9//AAAZAAgAAAC//9z/AAAaAAUAAAC//93/AAAaAAYAAAC//97/AAAaAAcAAAC//9//AAAaAAgAAADA/9z/AAAbAAUAAADA/93/AAAbAAYAAADA/97/AAAbAAcAAADA/9//AAAbAAgAAAC9/+D/AAAYAAQAAAC9/+H/AAAYAAUAAAC9/+L/AAAYAAYAAAC9/+P/AAAYAAcAAAC9/+T/AAAYAAgAAAC+/+D/AAAZAAQAAAC+/+H/AAAZAAUAAAC+/+L/AAAZAAYAAAC+/+P/AAAZAAcAAAC+/+T/AAAZAAgAAAC//+D/AAAaAAQAAAC//+H/AAAaAAUAAAC//+L/AAAaAAYAAAC//+P/AAAaAAcAAAC//+T/AAAaAAgAAADA/+D/AAAbAAQAAADA/+H/AAAbAAUAAADA/+L/AAAbAAYAAADA/+P/AAAbAAcAAADA/+T/AAAbAAgAAAC9/+X/AAAYAAQAAAC9/+b/AAAYAAUAAAC9/+f/AAAYAAYAAAC9/+j/AAAYAAcAAAC9/+n/AAAYAAgAAAC+/+X/AAAZAAQAAAC+/+b/AAAZAAUAAAC+/+f/AAAZAAYAAAC+/+j/AAAZAAcAAAC+/+n/AAAZAAgAAAC//+X/AAAaAAQAAAC//+b/AAAaAAUAAAC//+f/AAAaAAYAAAC//+j/AAAaAAcAAAC//+n/AAAaAAgAAADA/+X/AAAbAAQAAADA/+b/AAAbAAUAAADA/+f/AAAbAAYAAADA/+j/AAAbAAcAAADA/+n/AAAbAAgAAAC9/+r/AAAYAAQAAAC9/+v/AAAYAAUAAAC9/+z/AAAYAAYAAAC9/+3/AAAYAAcAAAC9/+7/AAAYAAgAAAC+/+r/AAAZAAQAAAC+/+v/AAAZAAUAAAC+/+z/AAAZAAYAAAC+/+3/AAAZAAcAAAC+/+7/AAAZAAgAAAC//+r/AAAaAAQAAAC//+v/AAAaAAUAAAC//+z/AAAaAAYAAAC//+3/AAAaAAcAAAC//+7/AAAaAAgAAADA/+r/AAAbAAQAAADA/+v/AAAbAAUAAADA/+z/AAAbAAYAAADA/+3/AAAbAAcAAADA/+7/AAAbAAgAAAC9/+//AAAYAAQAAAC9//D/AAAYAAUAAAC9//H/AAAYAAYAAAC9//L/AAAYAAcAAAC9//P/AAAYAAgAAAC+/+//AAAZAAQAAAC+//D/AAAZAAUAAAC+//H/AAAZAAYAAAC+//L/AAAZAAcAAAC+//P/AAAZAAgAAAC//+//AAAaAAQAAAC///D/AAAaAAUAAAC///H/AAAaAAYAAAC///L/AAAaAAcAAAC///P/AAAaAAgAAADA/+//AAAbAAQAAADA//D/AAAbAAUAAADA//H/AAAbAAYAAADA//L/AAAbAAcAAADA//P/AAAbAAgAAAC9//T/AAAYAAQAAAC9//X/AAAYAAUAAAC9//b/AAAYAAYAAAC9//f/AAAYAAcAAAC9//j/AAAYAAgAAAC+//T/AAAZAAQAAAC+//X/AAAZAAUAAAC+//b/AAAZAAYAAAC+//f/AAAZAAcAAAC+//j/AAAZAAgAAAC///T/AAAaAAQAAAC///X/AAAaAAUAAAC///b/AAAaAAYAAAC///f/AAAaAAcAAAC///j/AAAaAAgAAADA//T/AAAbAAQAAADA//X/AAAbAAUAAADA//b/AAAbAAYAAADA//f/AAAbAAcAAADA//j/AAAbAAgAAAC9//n/AAAYAAQAAAC9//r/AAAYAAUAAAC9//v/AAAYAAYAAAC9//z/AAAYAAcAAAC9//3/AAAYAAgAAAC+//n/AAAZAAQAAAC+//r/AAAZAAUAAAC+//v/AAAZAAYAAAC+//z/AAAZAAcAAAC+//3/AAAZAAgAAAC///n/AAAaAAQAAAC///r/AAAaAAUAAAC///v/AAAaAAYAAAC///z/AAAaAAcAAAC///3/AAAaAAgAAADA//n/AAAbAAQAAADA//r/AAAbAAUAAADA//v/AAAbAAYAAADA//z/AAAbAAcAAADA//3/AAAbAAgAAAC9//7/AAAYAAQAAAC9////AAAbAAkAAAC+//7/AAAZAAQAAAC+////AAAYAAkAAAC///7/AAAaAAQAAAC/////AAAZAAkAAADA//7/AAAbAAQAAADA////AAAaAAkAAADB/9z/AAAYAAUAAADB/93/AAAYAAYAAADB/97/AAAYAAcAAADB/9//AAAYAAgAAADC/9z/AAAZAAUAAADC/93/AAAZAAYAAADC/97/AAAZAAcAAADC/9//AAAZAAgAAADD/9z/AAAaAAUAAADD/93/AAAaAAYAAADD/97/AAAaAAcAAADD/9//AAAaAAgAAADE/9z/AAAbAAUAAADE/93/AAAbAAYAAADE/97/AAAbAAcAAADE/9//AAAbAAgAAADB/+D/AAAYAAQAAADB/+H/AAAYAAUAAADB/+L/AAAYAAYAAADB/+P/AAAYAAcAAADB/+T/AAAYAAgAAADC/+D/AAAZAAQAAADC/+H/AAAZAAUAAADC/+L/AAAZAAYAAADC/+P/AAAZAAcAAADC/+T/AAAZAAgAAADD/+D/AAAaAAQAAADD/+H/AAAaAAUAAADD/+L/AAAaAAYAAADD/+P/AAAaAAcAAADD/+T/AAAaAAgAAADE/+D/AAAbAAQAAADE/+H/AAAbAAUAAADE/+L/AAAbAAYAAADE/+P/AAAbAAcAAADE/+T/AAAbAAgAAADB/+X/AAAYAAQAAADB/+b/AAAYAAUAAADB/+f/AAAYAAYAAADB/+j/AAAYAAcAAADB/+n/AAAYAAgAAADC/+X/AAAZAAQAAADC/+b/AAAZAAUAAADC/+f/AAAZAAYAAADC/+j/AAAZAAcAAADC/+n/AAAZAAgAAADD/+X/AAAaAAQAAADD/+b/AAAaAAUAAADD/+f/AAAaAAYAAADD/+j/AAAaAAcAAADD/+n/AAAaAAgAAADE/+X/AAAbAAQAAADE/+b/AAAbAAUAAADE/+f/AAAbAAYAAADE/+j/AAAbAAcAAADE/+n/AAAbAAgAAADB/+r/AAAYAAQAAADB/+v/AAAYAAUAAADB/+z/AAAYAAYAAADB/+3/AAAYAAcAAADB/+7/AAAYAAgAAADC/+r/AAAZAAQAAADC/+v/AAAZAAUAAADC/+z/AAAZAAYAAADC/+3/AAAZAAcAAADC/+7/AAAZAAgAAADD/+r/AAAaAAQAAADD/+v/AAAaAAUAAADD/+z/AAAaAAYAAADD/+3/AAAaAAcAAADD/+7/AAAaAAgAAADE/+r/AAAbAAQAAADE/+v/AAAbAAUAAADE/+z/AAAbAAYAAADE/+3/AAAbAAcAAADE/+7/AAAbAAgAAADB/+//AAAYAAQAAADB//D/AAAYAAUAAADB//H/AAAYAAYAAADB//L/AAAYAAcAAADB//P/AAAYAAgAAADC/+//AAAZAAQAAADC//D/AAAZAAUAAADC//H/AAAZAAYAAADC//L/AAAZAAcAAADC//P/AAAZAAgAAADD/+//AAAaAAQAAADD//D/AAAaAAUAAADD//H/AAAaAAYAAADD//L/AAAaAAcAAADD//P/AAAaAAgAAADE/+//AAAbAAQAAADE//D/AAAbAAUAAADE//H/AAAbAAYAAADE//L/AAAbAAcAAADE//P/AAAbAAgAAADB//T/AAAYAAQAAADB//X/AAAYAAUAAADB//b/AAAYAAYAAADB//f/AAAYAAcAAADB//j/AAAYAAgAAADC//T/AAAZAAQAAADC//X/AAAZAAUAAADC//b/AAAZAAYAAADC//f/AAAZAAcAAADC//j/AAAZAAgAAADD//T/AAAaAAQAAADD//X/AAAaAAUAAADD//b/AAAaAAYAAADD//f/AAAaAAcAAADD//j/AAAaAAgAAADE//T/AAAbAAQAAADE//X/AAAbAAUAAADE//b/AAAbAAYAAADE//f/AAAbAAcAAADE//j/AAAbAAgAAADB//n/AAAYAAQAAADB//r/AAAYAAUAAADB//v/AAAYAAYAAADB//z/AAAYAAcAAADB//3/AAAYAAgAAADC//n/AAAZAAQAAADC//r/AAAZAAUAAADC//v/AAAZAAYAAADC//z/AAAZAAcAAADC//3/AAAZAAgAAADD//n/AAAaAAQAAADD//r/AAAaAAUAAADD//v/AAAaAAYAAADD//z/AAAaAAcAAADD//3/AAAaAAgAAADE//n/AAAbAAQAAADE//r/AAAbAAUAAADE//v/AAAbAAYAAADE//z/AAAbAAcAAADE//3/AAAbAAgAAADB//7/AAAYAAQAAADB////AAAbAAkAAADC//7/AAAZAAQAAADC////AAAYAAkAAADD//7/AAAaAAQAAADD////AAAZAAkAAADE//7/AAAbAAQAAADE////AAAaAAkAAADF/9z/AAAYAAUAAADF/93/AAAYAAYAAADF/97/AAAYAAcAAADF/9//AAAYAAgAAADG/9z/AAAZAAUAAADG/93/AAAZAAYAAADG/97/AAAZAAcAAADG/9//AAAZAAgAAADH/9z/AAAaAAUAAADH/93/AAAaAAYAAADH/97/AAAaAAcAAADH/9//AAAaAAgAAADI/9z/AAAbAAUAAADI/93/AAAbAAYAAADI/97/AAAbAAcAAADI/9//AAAbAAgAAADF/+D/AAAYAAQAAADF/+H/AAAYAAUAAADF/+L/AAAYAAYAAADF/+P/AAAYAAcAAADF/+T/AAAYAAgAAADG/+D/AAAZAAQAAADG/+H/AAAZAAUAAADG/+L/AAAZAAYAAADG/+P/AAAZAAcAAADG/+T/AAAZAAgAAADH/+D/AAAaAAQAAADH/+H/AAAaAAUAAADH/+L/AAAaAAYAAADH/+P/AAAaAAcAAADH/+T/AAAaAAgAAADI/+D/AAAbAAQAAADI/+H/AAAbAAUAAADI/+L/AAAbAAYAAADI/+P/AAAbAAcAAADI/+T/AAAbAAgAAADF/+X/AAAYAAQAAADF/+b/AAAYAAUAAADF/+f/AAAYAAYAAADF/+j/AAAYAAcAAADF/+n/AAAYAAgAAADG/+X/AAAZAAQAAADG/+b/AAAZAAUAAADG/+f/AAAZAAYAAADG/+j/AAAZAAcAAADG/+n/AAAZAAgAAADH/+X/AAAaAAQAAADH/+b/AAAaAAUAAADH/+f/AAAaAAYAAADH/+j/AAAaAAcAAADH/+n/AAAaAAgAAADI/+X/AAAbAAQAAADI/+b/AAAbAAUAAADI/+f/AAAbAAYAAADI/+j/AAAbAAcAAADI/+n/AAAbAAgAAADF/+r/AAAYAAQAAADF/+v/AAAYAAUAAADF/+z/AAAYAAYAAADF/+3/AAAYAAcAAADF/+7/AAAYAAgAAADG/+r/AAAZAAQAAADG/+v/AAAZAAUAAADG/+z/AAAZAAYAAADG/+3/AAAZAAcAAADG/+7/AAAZAAgAAADH/+r/AAAaAAQAAADH/+v/AAAaAAUAAADH/+z/AAAaAAYAAADH/+3/AAAaAAcAAADH/+7/AAAaAAgAAADI/+r/AAAbAAQAAADI/+v/AAAbAAUAAADI/+z/AAAbAAYAAADI/+3/AAAbAAcAAADI/+7/AAAbAAgAAADF/+//AAAYAAQAAADF//D/AAAYAAUAAADF//H/AAAYAAYAAADF//L/AAAYAAcAAADF//P/AAAYAAgAAADG/+//AAAZAAQAAADG//D/AAAZAAUAAADG//H/AAAZAAYAAADG//L/AAAZAAcAAADG//P/AAAZAAgAAADH/+//AAAaAAQAAADH//D/AAAaAAUAAADH//H/AAAaAAYAAADH//L/AAAaAAcAAADH//P/AAAaAAgAAADI/+//AAAbAAQAAADI//D/AAAbAAUAAADI//H/AAAbAAYAAADI//L/AAAbAAcAAADI//P/AAAbAAgAAADF//T/AAAYAAQAAADF//X/AAAYAAUAAADF//b/AAAYAAYAAADF//f/AAAYAAcAAADF//j/AAAYAAgAAADG//T/AAAZAAQAAADG//X/AAAZAAUAAADG//b/AAAZAAYAAADG//f/AAAZAAcAAADG//j/AAAZAAgAAADH//T/AAAaAAQAAADH//X/AAAaAAUAAADH//b/AAAaAAYAAADH//f/AAAaAAcAAADH//j/AAAaAAgAAADI//T/AAAbAAQAAADI//X/AAAbAAUAAADI//b/AAAbAAYAAADI//f/AAAbAAcAAADI//j/AAAbAAgAAADF//n/AAAYAAQAAADF//r/AAAYAAUAAADF//v/AAAYAAYAAADF//z/AAAYAAcAAADF//3/AAAYAAgAAADG//n/AAAZAAQAAADG//r/AAAZAAUAAADG//v/AAAZAAYAAADG//z/AAAZAAcAAADG//3/AAAZAAgAAADH//n/AAAaAAQAAADH//r/AAAaAAUAAADH//v/AAAaAAYAAADH//z/AAAaAAcAAADH//3/AAAaAAgAAADI//n/AAAbAAQAAADI//r/AAAbAAUAAADI//v/AAAbAAYAAADI//z/AAAbAAcAAADI//3/AAAbAAgAAADF//7/AAAYAAQAAADF////AAAbAAkAAADG//7/AAAZAAQAAADG////AAAYAAkAAADH//7/AAAaAAQAAADH////AAAZAAkAAADI//7/AAAbAAQAAADI////AAAaAAkAAADJ/9z/AAAYAAUAAADJ/93/AAAYAAYAAADJ/97/AAAYAAcAAADJ/9//AAAYAAgAAADK/9z/AAAZAAUAAADK/93/AAAZAAYAAADK/97/AAAZAAcAAADK/9//AAAZAAgAAADL/9z/AAAaAAUAAADL/93/AAAaAAYAAADL/97/AAAaAAcAAADL/9//AAAaAAgAAADM/9z/AAAbAAUAAADM/93/AAAbAAYAAADM/97/AAAbAAcAAADM/9//AAAbAAgAAADJ/+D/AAAYAAQAAADJ/+H/AAAYAAUAAADJ/+L/AAAYAAYAAADJ/+P/AAAYAAcAAADJ/+T/AAAYAAgAAADK/+D/AAAZAAQAAADK/+H/AAAZAAUAAADK/+L/AAAZAAYAAADK/+P/AAAZAAcAAADK/+T/AAAZAAgAAADL/+D/AAAaAAQAAADL/+H/AAAaAAUAAADL/+L/AAAaAAYAAADL/+P/AAAaAAcAAADL/+T/AAAaAAgAAADM/+D/AAAbAAQAAADM/+H/AAAbAAUAAADM/+L/AAAbAAYAAADM/+P/AAAbAAcAAADM/+T/AAAbAAgAAADJ/+X/AAAYAAQAAADJ/+b/AAAYAAUAAADJ/+f/AAAYAAYAAADJ/+j/AAAYAAcAAADJ/+n/AAAYAAgAAADK/+X/AAAZAAQAAADK/+b/AAAZAAUAAADK/+f/AAAZAAYAAADK/+j/AAAZAAcAAADK/+n/AAAZAAgAAADL/+X/AAAaAAQAAADL/+b/AAAaAAUAAADL/+f/AAAaAAYAAADL/+j/AAAaAAcAAADL/+n/AAAaAAgAAADM/+X/AAAbAAQAAADM/+b/AAAbAAUAAADM/+f/AAAbAAYAAADM/+j/AAAbAAcAAADM/+n/AAAbAAgAAADJ/+r/AAAYAAQAAADJ/+v/AAAYAAUAAADJ/+z/AAAYAAYAAADJ/+3/AAAYAAcAAADJ/+7/AAAYAAgAAADK/+r/AAAZAAQAAADK/+v/AAAZAAUAAADK/+z/AAAZAAYAAADK/+3/AAAZAAcAAADK/+7/AAAZAAgAAADL/+r/AAAaAAQAAADL/+v/AAAaAAUAAADL/+z/AAAaAAYAAADL/+3/AAAaAAcAAADL/+7/AAAaAAgAAADM/+r/AAAbAAQAAADM/+v/AAAbAAUAAADM/+z/AAAbAAYAAADM/+3/AAAbAAcAAADM/+7/AAAbAAgAAADJ/+//AAAYAAQAAADJ//D/AAAYAAUAAADJ//H/AAAYAAYAAADJ//L/AAAYAAcAAADJ//P/AAAYAAgAAADK/+//AAAZAAQAAADK//D/AAAZAAUAAADK//H/AAAZAAYAAADK//L/AAAZAAcAAADK//P/AAAZAAgAAADL/+//AAAaAAQAAADL//D/AAAaAAUAAADL//H/AAAaAAYAAADL//L/AAAaAAcAAADL//P/AAAaAAgAAADM/+//AAAbAAQAAADM//D/AAAbAAUAAADM//H/AAAbAAYAAADM//L/AAAbAAcAAADM//P/AAAbAAgAAADJ//T/AAAYAAQAAADJ//X/AAAYAAUAAADJ//b/AAAYAAYAAADJ//f/AAAYAAcAAADJ//j/AAAYAAgAAADK//T/AAAZAAQAAADK//X/AAAZAAUAAADK//b/AAAZAAYAAADK//f/AAAZAAcAAADK//j/AAAZAAgAAADL//T/AAAaAAQAAADL//X/AAAaAAUAAADL//b/AAAaAAYAAADL//f/AAAaAAcAAADL//j/AAAaAAgAAADM//T/AAAbAAQAAADM//X/AAAbAAUAAADM//b/AAAbAAYAAADM//f/AAAbAAcAAADM//j/AAAbAAgAAADJ//n/AAAYAAQAAADJ//r/AAAYAAUAAADJ//v/AAAYAAYAAADJ//z/AAAYAAcAAADJ//3/AAAYAAgAAADK//n/AAAZAAQAAADK//r/AAAZAAUAAADK//v/AAAZAAYAAADK//z/AAAZAAcAAADK//3/AAAZAAgAAADL//n/AAAaAAQAAADL//r/AAAaAAUAAADL//v/AAAaAAYAAADL//z/AAAaAAcAAADL//3/AAAaAAgAAADM//n/AAAbAAQAAADM//r/AAAbAAUAAADM//v/AAAbAAYAAADM//z/AAAbAAcAAADM//3/AAAbAAgAAADJ//7/AAAYAAQAAADJ////AAAbAAkAAADK//7/AAAZAAQAAADK////AAAYAAkAAADL//7/AAAaAAQAAADL////AAAZAAkAAADM//7/AAAbAAQAAADM////AAAaAAkAAADN/9z/AAAYAAUAAADN/93/AAAYAAYAAADN/97/AAAYAAcAAADN/9//AAAYAAgAAADO/9z/AAAZAAUAAADO/93/AAAZAAYAAADO/97/AAAZAAcAAADO/9//AAAZAAgAAADP/9z/AAAaAAUAAADP/93/AAAaAAYAAADP/97/AAAaAAcAAADP/9//AAAaAAgAAADQ/9z/AAAbAAUAAADQ/93/AAAbAAYAAADQ/97/AAAbAAcAAADQ/9//AAAbAAgAAADN/+D/AAAYAAQAAADN/+H/AAAYAAUAAADN/+L/AAAYAAYAAADN/+P/AAAYAAcAAADN/+T/AAAYAAgAAADO/+D/AAAZAAQAAADO/+H/AAAZAAUAAADO/+L/AAAZAAYAAADO/+P/AAAZAAcAAADO/+T/AAAZAAgAAADP/+D/AAAaAAQAAADP/+H/AAAaAAUAAADP/+L/AAAaAAYAAADP/+P/AAAaAAcAAADP/+T/AAAaAAgAAADQ/+D/AAAbAAQAAADQ/+H/AAAbAAUAAADQ/+L/AAAbAAYAAADQ/+P/AAAbAAcAAADQ/+T/AAAbAAgAAADN/+X/AAAYAAQAAADN/+b/AAAYAAUAAADN/+f/AAAYAAYAAADN/+j/AAAYAAcAAADN/+n/AAAYAAgAAADO/+X/AAAZAAQAAADO/+b/AAAZAAUAAADO/+f/AAAZAAYAAADO/+j/AAAZAAcAAADO/+n/AAAZAAgAAADP/+X/AAAaAAQAAADP/+b/AAAaAAUAAADP/+f/AAAaAAYAAADP/+j/AAAaAAcAAADP/+n/AAAaAAgAAADQ/+X/AAAbAAQAAADQ/+b/AAAbAAUAAADQ/+f/AAAbAAYAAADQ/+j/AAAbAAcAAADQ/+n/AAAbAAgAAADN/+r/AAAYAAQAAADN/+v/AAAYAAUAAADN/+z/AAAYAAYAAADN/+3/AAAYAAcAAADN/+7/AAAYAAgAAADO/+r/AAAZAAQAAADO/+v/AAAZAAUAAADO/+z/AAAZAAYAAADO/+3/AAAZAAcAAADO/+7/AAAZAAgAAADP/+r/AAAaAAQAAADP/+v/AAAaAAUAAADP/+z/AAAaAAYAAADP/+3/AAAaAAcAAADP/+7/AAAaAAgAAADQ/+r/AAAbAAQAAADQ/+v/AAAbAAUAAADQ/+z/AAAbAAYAAADQ/+3/AAAbAAcAAADQ/+7/AAAbAAgAAADN/+//AAAYAAQAAADN//D/AAAYAAUAAADN//H/AAAYAAYAAADN//L/AAAYAAcAAADN//P/AAAYAAgAAADO/+//AAAZAAQAAADO//D/AAAZAAUAAADO//H/AAAZAAYAAADO//L/AAAZAAcAAADO//P/AAAZAAgAAADP/+//AAAaAAQAAADP//D/AAAaAAUAAADP//H/AAAaAAYAAADP//L/AAAaAAcAAADP//P/AAAaAAgAAADQ/+//AAAbAAQAAADQ//D/AAAbAAUAAADQ//H/AAAbAAYAAADQ//L/AAAbAAcAAADQ//P/AAAbAAgAAADN//T/AAAYAAQAAADN//X/AAAYAAUAAADN//b/AAAYAAYAAADN//f/AAAYAAcAAADN//j/AAAYAAgAAADO//T/AAAZAAQAAADO//X/AAAZAAUAAADO//b/AAAZAAYAAADO//f/AAAZAAcAAADO//j/AAAZAAgAAADP//T/AAAaAAQAAADP//X/AAAaAAUAAADP//b/AAAaAAYAAADP//f/AAAaAAcAAADP//j/AAAaAAgAAADQ//T/AAAbAAQAAADQ//X/AAAbAAUAAADQ//b/AAAbAAYAAADQ//f/AAAbAAcAAADQ//j/AAAbAAgAAADN//n/AAAYAAQAAADN//r/AAAYAAUAAADN//v/AAAYAAYAAADN//z/AAAYAAcAAADN//3/AAAYAAgAAADO//n/AAAZAAQAAADO//r/AAAZAAUAAADO//v/AAAZAAYAAADO//z/AAAZAAcAAADO//3/AAAZAAgAAADP//n/AAAaAAQAAADP//r/AAAaAAUAAADP//v/AAAaAAYAAADP//z/AAAaAAcAAADP//3/AAAaAAgAAADQ//n/AAAbAAQAAADQ//r/AAAbAAUAAADQ//v/AAAbAAYAAADQ//z/AAAbAAcAAADQ//3/AAAbAAgAAADN//7/AAAYAAQAAADN////AAAbAAkAAADO//7/AAAZAAQAAADO////AAAYAAkAAADP//7/AAAaAAQAAADP////AAAZAAkAAADQ//7/AAAbAAQAAADQ////AAAaAAkAAADR/9z/AAAYAAUAAADR/93/AAAYAAYAAADR/97/AAAYAAcAAADR/9//AAAYAAgAAADS/9z/AAAZAAUAAADS/93/AAAZAAYAAADS/97/AAAZAAcAAADS/9//AAAZAAgAAADT/9z/AAAaAAUAAADT/93/AAAaAAYAAADT/97/AAAaAAcAAADT/9//AAAaAAgAAADU/9z/AAAbAAUAAADU/93/AAAbAAYAAADU/97/AAAbAAcAAADU/9//AAAbAAgAAADR/+D/AAAYAAQAAADR/+H/AAAYAAUAAADR/+L/AAAYAAYAAADR/+P/AAAYAAcAAADR/+T/AAAYAAgAAADS/+D/AAAZAAQAAADS/+H/AAAZAAUAAADS/+L/AAAZAAYAAADS/+P/AAAZAAcAAADS/+T/AAAZAAgAAADT/+D/AAAaAAQAAADT/+H/AAAaAAUAAADT/+L/AAAaAAYAAADT/+P/AAAaAAcAAADT/+T/AAAaAAgAAADU/+D/AAAbAAQAAADU/+H/AAAbAAUAAADU/+L/AAAbAAYAAADU/+P/AAAbAAcAAADU/+T/AAAbAAgAAADR/+X/AAAYAAQAAADR/+b/AAAYAAUAAADR/+f/AAAYAAYAAADR/+j/AAAYAAcAAADR/+n/AAAYAAgAAADS/+X/AAAZAAQAAADS/+b/AAAZAAUAAADS/+f/AAAZAAYAAADS/+j/AAAZAAcAAADS/+n/AAAZAAgAAADT/+X/AAAaAAQAAADT/+b/AAAaAAUAAADT/+f/AAAaAAYAAADT/+j/AAAaAAcAAADT/+n/AAAaAAgAAADU/+X/AAAbAAQAAADU/+b/AAAbAAUAAADU/+f/AAAbAAYAAADU/+j/AAAbAAcAAADU/+n/AAAbAAgAAADR/+r/AAAYAAQAAADR/+v/AAAYAAUAAADR/+z/AAAYAAYAAADR/+3/AAAYAAcAAADR/+7/AAAYAAgAAADS/+r/AAAZAAQAAADS/+v/AAAZAAUAAADS/+z/AAAZAAYAAADS/+3/AAAZAAcAAADS/+7/AAAZAAgAAADT/+r/AAAaAAQAAADT/+v/AAAaAAUAAADT/+z/AAAaAAYAAADT/+3/AAAaAAcAAADT/+7/AAAaAAgAAADU/+r/AAAbAAQAAADU/+v/AAAbAAUAAADU/+z/AAAbAAYAAADU/+3/AAAbAAcAAADU/+7/AAAbAAgAAADR/+//AAAYAAQAAADR//D/AAAYAAUAAADR//H/AAAYAAYAAADR//L/AAAYAAcAAADR//P/AAAYAAgAAADS/+//AAAZAAQAAADS//D/AAAZAAUAAADS//H/AAAZAAYAAADS//L/AAAZAAcAAADS//P/AAAZAAgAAADT/+//AAAaAAQAAADT//D/AAAaAAUAAADT//H/AAAaAAYAAADT//L/AAAaAAcAAADT//P/AAAaAAgAAADU/+//AAAbAAQAAADU//D/AAAbAAUAAADU//H/AAAbAAYAAADU//L/AAAbAAcAAADU//P/AAAbAAgAAADR//T/AAAYAAQAAADR//X/AAAYAAUAAADR//b/AAAYAAYAAADR//f/AAAYAAcAAADR//j/AAAYAAgAAADS//T/AAAZAAQAAADS//X/AAAZAAUAAADS//b/AAAZAAYAAADS//f/AAAZAAcAAADS//j/AAAZAAgAAADT//T/AAAaAAQAAADT//X/AAAaAAUAAADT//b/AAAaAAYAAADT//f/AAAaAAcAAADT//j/AAAaAAgAAADU//T/AAAbAAQAAADU//X/AAAbAAUAAADU//b/AAAbAAYAAADU//f/AAAbAAcAAADU//j/AAAbAAgAAADR//n/AAAYAAQAAADR//r/AAAYAAUAAADR//v/AAAYAAYAAADR//z/AAAYAAcAAADR//3/AAAYAAgAAADS//n/AAAZAAQAAADS//r/AAAZAAUAAADS//v/AAAZAAYAAADS//z/AAAZAAcAAADS//3/AAAZAAgAAADT//n/AAAaAAQAAADT//r/AAAaAAUAAADT//v/AAAaAAYAAADT//z/AAAaAAcAAADT//3/AAAaAAgAAADU//n/AAAbAAQAAADU//r/AAAbAAUAAADU//v/AAAbAAYAAADU//z/AAAbAAcAAADU//3/AAAbAAgAAADR//7/AAAYAAQAAADR////AAAbAAkAAADS//7/AAAZAAQAAADS////AAAYAAkAAADT//7/AAAaAAQAAADT////AAAZAAkAAADU//7/AAAbAAQAAADU////AAAaAAkAAADV/9z/AAAYAAUAAADV/93/AAAYAAYAAADV/97/AAAYAAcAAADV/9//AAAYAAgAAADW/9z/AAAZAAUAAADW/93/AAAZAAYAAADW/97/AAAZAAcAAADW/9//AAAZAAgAAADX/9z/AAAaAAUAAADX/93/AAAaAAYAAADX/97/AAAaAAcAAADX/9//AAAaAAgAAADY/9z/AAAbAAUAAADY/93/AAAbAAYAAADY/97/AAAbAAcAAADY/9//AAAbAAgAAADV/+D/AAAYAAQAAADV/+H/AAAYAAUAAADV/+L/AAAYAAYAAADV/+P/AAAYAAcAAADV/+T/AAAYAAgAAADW/+D/AAAZAAQAAADW/+H/AAAZAAUAAADW/+L/AAAZAAYAAADW/+P/AAAZAAcAAADW/+T/AAAZAAgAAADX/+D/AAAaAAQAAADX/+H/AAAaAAUAAADX/+L/AAAaAAYAAADX/+P/AAAaAAcAAADX/+T/AAAaAAgAAADY/+D/AAAbAAQAAADY/+H/AAAbAAUAAADY/+L/AAAbAAYAAADY/+P/AAAbAAcAAADY/+T/AAAbAAgAAADV/+X/AAAYAAQAAADV/+b/AAAYAAUAAADV/+f/AAAYAAYAAADV/+j/AAAYAAcAAADV/+n/AAAYAAgAAADW/+X/AAAZAAQAAADW/+b/AAAZAAUAAADW/+f/AAAZAAYAAADW/+j/AAAZAAcAAADW/+n/AAAZAAgAAADX/+X/AAAaAAQAAADX/+b/AAAaAAUAAADX/+f/AAAaAAYAAADX/+j/AAAaAAcAAADX/+n/AAAaAAgAAADY/+X/AAAbAAQAAADY/+b/AAAbAAUAAADY/+f/AAAbAAYAAADY/+j/AAAbAAcAAADY/+n/AAAbAAgAAADV/+r/AAAYAAQAAADV/+v/AAAYAAUAAADV/+z/AAAYAAYAAADV/+3/AAAYAAcAAADV/+7/AAAYAAgAAADW/+r/AAAZAAQAAADW/+v/AAAZAAUAAADW/+z/AAAZAAYAAADW/+3/AAAZAAcAAADW/+7/AAAZAAgAAADX/+r/AAAaAAQAAADX/+v/AAAaAAUAAADX/+z/AAAaAAYAAADX/+3/AAAaAAcAAADX/+7/AAAaAAgAAADY/+r/AAAbAAQAAADY/+v/AAAbAAUAAADY/+z/AAAbAAYAAADY/+3/AAAbAAcAAADY/+7/AAAbAAgAAADV/+//AAAYAAQAAADV//D/AAAYAAUAAADV//H/AAAYAAYAAADV//L/AAAYAAcAAADV//P/AAAYAAgAAADW/+//AAAZAAQAAADW//D/AAAZAAUAAADW//H/AAAZAAYAAADW//L/AAAZAAcAAADW//P/AAAZAAgAAADX/+//AAAaAAQAAADX//D/AAAaAAUAAADX//H/AAAaAAYAAADX//L/AAAaAAcAAADX//P/AAAaAAgAAADY/+//AAAbAAQAAADY//D/AAAbAAUAAADY//H/AAAbAAYAAADY//L/AAAbAAcAAADY//P/AAAbAAgAAADV//T/AAAYAAQAAADV//X/AAAYAAUAAADV//b/AAAYAAYAAADV//f/AAAYAAcAAADV//j/AAAYAAgAAADW//T/AAAZAAQAAADW//X/AAAZAAUAAADW//b/AAAZAAYAAADW//f/AAAZAAcAAADW//j/AAAZAAgAAADX//T/AAAaAAQAAADX//X/AAAaAAUAAADX//b/AAAaAAYAAADX//f/AAAaAAcAAADX//j/AAAaAAgAAADY//T/AAAbAAQAAADY//X/AAAbAAUAAADY//b/AAAbAAYAAADY//f/AAAbAAcAAADY//j/AAAbAAgAAADV//n/AAAYAAQAAADV//r/AAAYAAUAAADV//v/AAAYAAYAAADV//z/AAAYAAcAAADV//3/AAAYAAgAAADW//n/AAAZAAQAAADW//r/AAAZAAUAAADW//v/AAAZAAYAAADW//z/AAAZAAcAAADW//3/AAAZAAgAAADX//n/AAAaAAQAAADX//r/AAAaAAUAAADX//v/AAAaAAYAAADX//z/AAAaAAcAAADX//3/AAAaAAgAAADY//n/AAAbAAQAAADY//r/AAAbAAUAAADY//v/AAAbAAYAAADY//z/AAAbAAcAAADY//3/AAAbAAgAAADV//7/AAAYAAQAAADV////AAAbAAkAAADW//7/AAAZAAQAAADW////AAAYAAkAAADX//7/AAAaAAQAAADX////AAAZAAkAAADY//7/AAAbAAQAAADY////AAAaAAkAAADZ/9z/AAAYAAUAAADZ/93/AAAYAAYAAADZ/97/AAAYAAcAAADZ/9//AAAYAAgAAADa/9z/AAAZAAUAAADa/93/AAAZAAYAAADa/97/AAAZAAcAAADa/9//AAAZAAgAAADb/9z/AAAaAAUAAADb/93/AAAaAAYAAADb/97/AAAaAAcAAADb/9//AAAaAAgAAADc/9z/AAAbAAUAAADc/93/AAAbAAYAAADc/97/AAAbAAcAAADc/9//AAAbAAgAAADZ/+D/AAAYAAQAAADZ/+H/AAAYAAUAAADZ/+L/AAAYAAYAAADZ/+P/AAAYAAcAAADZ/+T/AAAYAAgAAADa/+D/AAAZAAQAAADa/+H/AAAZAAUAAADa/+L/AAAZAAYAAADa/+P/AAAZAAcAAADa/+T/AAAZAAgAAADb/+D/AAAaAAQAAADb/+H/AAAaAAUAAADb/+L/AAAaAAYAAADb/+P/AAAaAAcAAADb/+T/AAAaAAgAAADc/+D/AAAbAAQAAADc/+H/AAAbAAUAAADc/+L/AAAbAAYAAADc/+P/AAAbAAcAAADc/+T/AAAbAAgAAADZ/+X/AAAYAAQAAADZ/+b/AAAYAAUAAADZ/+f/AAAYAAYAAADZ/+j/AAAYAAcAAADZ/+n/AAAYAAgAAADa/+X/AAAZAAQAAADa/+b/AAAZAAUAAADa/+f/AAAZAAYAAADa/+j/AAAZAAcAAADa/+n/AAAZAAgAAADb/+X/AAAaAAQAAADb/+b/AAAaAAUAAADb/+f/AAAaAAYAAADb/+j/AAAaAAcAAADb/+n/AAAaAAgAAADc/+X/AAAbAAQAAADc/+b/AAAbAAUAAADc/+f/AAAbAAYAAADc/+j/AAAbAAcAAADc/+n/AAAbAAgAAADZ/+r/AAAYAAQAAADZ/+v/AAAYAAUAAADZ/+z/AAAYAAYAAADZ/+3/AAAYAAcAAADZ/+7/AAAYAAgAAADa/+r/AAAZAAQAAADa/+v/AAAZAAUAAADa/+z/AAAZAAYAAADa/+3/AAAZAAcAAADa/+7/AAAZAAgAAADb/+r/AAAaAAQAAADb/+v/AAAaAAUAAADb/+z/AAAaAAYAAADb/+3/AAAaAAcAAADb/+7/AAAaAAgAAADc/+r/AAAbAAQAAADc/+v/AAAbAAUAAADc/+z/AAAbAAYAAADc/+3/AAAbAAcAAADc/+7/AAAbAAgAAADZ/+//AAAYAAQAAADZ//D/AAAYAAUAAADZ//H/AAAYAAYAAADZ//L/AAAYAAcAAADZ//P/AAAYAAgAAADa/+//AAAZAAQAAADa//D/AAAZAAUAAADa//H/AAAZAAYAAADa//L/AAAZAAcAAADa//P/AAAZAAgAAADb/+//AAAaAAQAAADb//D/AAAaAAUAAADb//H/AAAaAAYAAADb//L/AAAaAAcAAADb//P/AAAaAAgAAADc/+//AAAbAAQAAADc//D/AAAbAAUAAADc//H/AAAbAAYAAADc//L/AAAbAAcAAADc//P/AAAbAAgAAADZ//T/AAAYAAQAAADZ//X/AAAYAAUAAADZ//b/AAAYAAYAAADZ//f/AAAYAAcAAADZ//j/AAAYAAgAAADa//T/AAAZAAQAAADa//X/AAAZAAUAAADa//b/AAAZAAYAAADa//f/AAAZAAcAAADa//j/AAAZAAgAAADb//T/AAAaAAQAAADb//X/AAAaAAUAAADb//b/AAAaAAYAAADb//f/AAAaAAcAAADb//j/AAAaAAgAAADc//T/AAAbAAQAAADc//X/AAAbAAUAAADc//b/AAAbAAYAAADc//f/AAAbAAcAAADc//j/AAAbAAgAAADZ//n/AAAYAAQAAADZ//r/AAAYAAUAAADZ//v/AAAYAAYAAADZ//z/AAAYAAcAAADZ//3/AAAYAAgAAADa//n/AAAZAAQAAADa//r/AAAZAAUAAADa//v/AAAZAAYAAADa//z/AAAZAAcAAADa//3/AAAZAAgAAADb//n/AAAaAAQAAADb//r/AAAaAAUAAADb//v/AAAaAAYAAADb//z/AAAaAAcAAADb//3/AAAaAAgAAADc//n/AAAbAAQAAADc//r/AAAbAAUAAADc//v/AAAbAAYAAADc//z/AAAbAAcAAADc//3/AAAbAAgAAADZ//7/AAAYAAQAAADZ////AAAbAAkAAADa//7/AAAZAAQAAADa////AAAYAAkAAADb//7/AAAaAAQAAADb////AAAZAAkAAADc//7/AAAbAAQAAADc////AAAaAAkAAADd/9z/AAAYAAUAAADd/93/AAAYAAYAAADd/97/AAAYAAcAAADd/9//AAAYAAgAAADe/9z/AAAZAAUAAADe/93/AAAZAAYAAADe/97/AAAZAAcAAADe/9//AAAZAAgAAADf/9z/AAAaAAUAAADf/93/AAAaAAYAAADf/97/AAAaAAcAAADf/9//AAAaAAgAAADg/9z/AAAbAAUAAADg/93/AAAbAAYAAADg/97/AAAbAAcAAADg/9//AAAbAAgAAADd/+D/AAAYAAQAAADd/+H/AAAYAAUAAADd/+L/AAAYAAYAAADd/+P/AAAYAAcAAADd/+T/AAAYAAgAAADe/+D/AAAZAAQAAADe/+H/AAAZAAUAAADe/+L/AAAZAAYAAADe/+P/AAAZAAcAAADe/+T/AAAZAAgAAADf/+D/AAAaAAQAAADf/+H/AAAaAAUAAADf/+L/AAAaAAYAAADf/+P/AAAaAAcAAADf/+T/AAAaAAgAAADg/+D/AAAbAAQAAADg/+H/AAAbAAUAAADg/+L/AAAbAAYAAADg/+P/AAAbAAcAAADg/+T/AAAbAAgAAADd/+X/AAAYAAQAAADd/+b/AAAYAAUAAADd/+f/AAAYAAYAAADd/+j/AAAYAAcAAADd/+n/AAAYAAgAAADe/+X/AAAZAAQAAADe/+b/AAAZAAUAAADe/+f/AAAZAAYAAADe/+j/AAAZAAcAAADe/+n/AAAZAAgAAADf/+X/AAAaAAQAAADf/+b/AAAaAAUAAADf/+f/AAAaAAYAAADf/+j/AAAaAAcAAADf/+n/AAAaAAgAAADg/+X/AAAbAAQAAADg/+b/AAAbAAUAAADg/+f/AAAbAAYAAADg/+j/AAAbAAcAAADg/+n/AAAbAAgAAADd/+r/AAAYAAQAAADd/+v/AAAYAAUAAADd/+z/AAAYAAYAAADd/+3/AAAYAAcAAADd/+7/AAAYAAgAAADe/+r/AAAZAAQAAADe/+v/AAAZAAUAAADe/+z/AAAZAAYAAADe/+3/AAAZAAcAAADe/+7/AAAZAAgAAADf/+r/AAAaAAQAAADf/+v/AAAaAAUAAADf/+z/AAAaAAYAAADf/+3/AAAaAAcAAADf/+7/AAAaAAgAAADg/+r/AAAbAAQAAADg/+v/AAAbAAUAAADg/+z/AAAbAAYAAADg/+3/AAAbAAcAAADg/+7/AAAbAAgAAADd/+//AAAYAAQAAADd//D/AAAYAAUAAADd//H/AAAYAAYAAADd//L/AAAYAAcAAADd//P/AAAYAAgAAADe/+//AAAZAAQAAADe//D/AAAZAAUAAADe//H/AAAZAAYAAADe//L/AAAZAAcAAADe//P/AAAZAAgAAADf/+//AAAaAAQAAADf//D/AAAaAAUAAADf//H/AAAaAAYAAADf//L/AAAaAAcAAADf//P/AAAaAAgAAADg/+//AAAbAAQAAADg//D/AAAbAAUAAADg//H/AAAbAAYAAADg//L/AAAbAAcAAADg//P/AAAbAAgAAADd//T/AAAYAAQAAADd//X/AAAYAAUAAADd//b/AAAYAAYAAADd//f/AAAYAAcAAADd//j/AAAYAAgAAADe//T/AAAZAAQAAADe//X/AAAZAAUAAADe//b/AAAZAAYAAADe//f/AAAZAAcAAADe//j/AAAZAAgAAADf//T/AAAaAAQAAADf//X/AAAaAAUAAADf//b/AAAaAAYAAADf//f/AAAaAAcAAADf//j/AAAaAAgAAADg//T/AAAbAAQAAADg//X/AAAbAAUAAADg//b/AAAbAAYAAADg//f/AAAbAAcAAADg//j/AAAbAAgAAADd//n/AAAYAAQAAADd//r/AAAYAAUAAADd//v/AAAYAAYAAADd//z/AAAYAAcAAADd//3/AAAYAAgAAADe//n/AAAZAAQAAADe//r/AAAZAAUAAADe//v/AAAZAAYAAADe//z/AAAZAAcAAADe//3/AAAZAAgAAADf//n/AAAaAAQAAADf//r/AAAaAAUAAADf//v/AAAaAAYAAADf//z/AAAaAAcAAADf//3/AAAaAAgAAADg//n/AAAbAAQAAADg//r/AAAbAAUAAADg//v/AAAbAAYAAADg//z/AAAbAAcAAADg//3/AAAbAAgAAADd//7/AAAYAAQAAADd////AAAbAAkAAADe//7/AAAZAAQAAADe////AAAYAAkAAADf//7/AAAaAAQAAADf////AAAZAAkAAADg//7/AAAbAAQAAADg////AAAaAAkAAADh/9z/AAAYAAUAAADh/93/AAAYAAYAAADh/97/AAAYAAcAAADh/9//AAAYAAgAAADi/9z/AAAZAAUAAADi/93/AAAZAAYAAADi/97/AAAZAAcAAADi/9//AAAZAAgAAADj/9z/AAAaAAUAAADj/93/AAAaAAYAAADj/97/AAAaAAcAAADj/9//AAAaAAgAAADk/9z/AAAbAAUAAADk/93/AAAbAAYAAADk/97/AAAbAAcAAADk/9//AAAbAAgAAADh/+D/AAAYAAQAAADh/+H/AAAYAAUAAADh/+L/AAAYAAYAAADh/+P/AAAYAAcAAADh/+T/AAAYAAgAAADi/+D/AAAZAAQAAADi/+H/AAAZAAUAAADi/+L/AAAZAAYAAADi/+P/AAAZAAcAAADi/+T/AAAZAAgAAADj/+D/AAAaAAQAAADj/+H/AAAaAAUAAADj/+L/AAAaAAYAAADj/+P/AAAaAAcAAADj/+T/AAAaAAgAAADk/+D/AAAbAAQAAADk/+H/AAAbAAUAAADk/+L/AAAbAAYAAADk/+P/AAAbAAcAAADk/+T/AAAbAAgAAADh/+X/AAAYAAQAAADh/+b/AAAYAAUAAADh/+f/AAAYAAYAAADh/+j/AAAYAAcAAADh/+n/AAAYAAgAAADi/+X/AAAZAAQAAADi/+b/AAAZAAUAAADi/+f/AAAZAAYAAADi/+j/AAAZAAcAAADi/+n/AAAZAAgAAADj/+X/AAAaAAQAAADj/+b/AAAaAAUAAADj/+f/AAAaAAYAAADj/+j/AAAaAAcAAADj/+n/AAAaAAgAAADk/+X/AAAbAAQAAADk/+b/AAAbAAUAAADk/+f/AAAbAAYAAADk/+j/AAAbAAcAAADk/+n/AAAbAAgAAADh/+r/AAAYAAQAAADh/+v/AAAYAAUAAADh/+z/AAAYAAYAAADh/+3/AAAYAAcAAADh/+7/AAAYAAgAAADi/+r/AAAZAAQAAADi/+v/AAAZAAUAAADi/+z/AAAZAAYAAADi/+3/AAAZAAcAAADi/+7/AAAZAAgAAADj/+r/AAAaAAQAAADj/+v/AAAaAAUAAADj/+z/AAAaAAYAAADj/+3/AAAaAAcAAADj/+7/AAAaAAgAAADk/+r/AAAbAAQAAADk/+v/AAAbAAUAAADk/+z/AAAbAAYAAADk/+3/AAAbAAcAAADk/+7/AAAbAAgAAADh/+//AAAYAAQAAADh//D/AAAYAAUAAADh//H/AAAYAAYAAADh//L/AAAYAAcAAADh//P/AAAYAAgAAADi/+//AAAZAAQAAADi//D/AAAZAAUAAADi//H/AAAZAAYAAADi//L/AAAZAAcAAADi//P/AAAZAAgAAADj/+//AAAaAAQAAADj//D/AAAaAAUAAADj//H/AAAaAAYAAADj//L/AAAaAAcAAADj//P/AAAaAAgAAADk/+//AAAbAAQAAADk//D/AAAbAAUAAADk//H/AAAbAAYAAADk//L/AAAbAAcAAADk//P/AAAbAAgAAADh//T/AAAYAAQAAADh//X/AAAYAAUAAADh//b/AAAYAAYAAADh//f/AAAYAAcAAADh//j/AAAYAAgAAADi//T/AAAZAAQAAADi//X/AAAZAAUAAADi//b/AAAZAAYAAADi//f/AAAZAAcAAADi//j/AAAZAAgAAADj//T/AAAaAAQAAADj//X/AAAaAAUAAADj//b/AAAaAAYAAADj//f/AAAaAAcAAADj//j/AAAaAAgAAADk//T/AAAbAAQAAADk//X/AAAbAAUAAADk//b/AAAbAAYAAADk//f/AAAbAAcAAADk//j/AAAbAAgAAADh//n/AAAYAAQAAADh//r/AAAYAAUAAADh//v/AAAYAAYAAADh//z/AAAYAAcAAADh//3/AAAYAAgAAADi//n/AAAZAAQAAADi//r/AAAZAAUAAADi//v/AAAZAAYAAADi//z/AAAZAAcAAADi//3/AAAZAAgAAADj//n/AAAaAAQAAADj//r/AAAaAAUAAADj//v/AAAaAAYAAADj//z/AAAaAAcAAADj//3/AAAaAAgAAADk//n/AAAbAAQAAADk//r/AAAbAAUAAADk//v/AAAbAAYAAADk//z/AAAbAAcAAADk//3/AAAbAAgAAADh//7/AAAYAAQAAADh////AAAbAAkAAADi//7/AAAZAAQAAADi////AAAaAAkAAADj//7/AAAaAAQAAADj////AAAbAAkAAADk//7/AAAbAAQAAADk////AAAYAAkAAADl/9z/AAAYAAUAAADl/93/AAAYAAYAAADl/97/AAAYAAcAAADl/9//AAAYAAgAAADm/9z/AAAZAAUAAADm/93/AAAZAAYAAADm/97/AAAZAAcAAADm/9//AAAZAAgAAADn/9z/AAAaAAUAAADn/93/AAAaAAYAAADn/97/AAAaAAcAAADn/9//AAAaAAgAAADo/9z/AAAbAAUAAADo/93/AAAbAAYAAADo/97/AAAbAAcAAADo/9//AAAbAAgAAADl/+D/AAAYAAQAAADl/+H/AAAYAAUAAADl/+L/AAAYAAYAAADl/+P/AAAYAAcAAADl/+T/AAAYAAgAAADm/+D/AAAZAAQAAADm/+H/AAAZAAUAAADm/+L/AAAZAAYAAADm/+P/AAAZAAcAAADm/+T/AAAZAAgAAADn/+D/AAAaAAQAAADn/+H/AAAaAAUAAADn/+L/AAAaAAYAAADn/+P/AAAaAAcAAADn/+T/AAAaAAgAAADo/+D/AAAbAAQAAADo/+H/AAAbAAUAAADo/+L/AAAbAAYAAADo/+P/AAAbAAcAAADo/+T/AAAbAAgAAADl/+X/AAAYAAQAAADl/+b/AAAYAAUAAADl/+f/AAAYAAYAAADl/+j/AAAYAAcAAADl/+n/AAAYAAgAAADm/+X/AAAZAAQAAADm/+b/AAAZAAUAAADm/+f/AAAZAAYAAADm/+j/AAAZAAcAAADm/+n/AAAZAAgAAADn/+X/AAAaAAQAAADn/+b/AAAaAAUAAADn/+f/AAAaAAYAAADn/+j/AAAaAAcAAADn/+n/AAAaAAgAAADo/+X/AAAbAAQAAADo/+b/AAAbAAUAAADo/+f/AAAbAAYAAADo/+j/AAAbAAcAAADo/+n/AAAbAAgAAADl/+r/AAAYAAQAAADl/+v/AAAYAAUAAADl/+z/AAAYAAYAAADl/+3/AAAYAAcAAADl/+7/AAAYAAgAAADm/+r/AAAZAAQAAADm/+v/AAAZAAUAAADm/+z/AAAZAAYAAADm/+3/AAAZAAcAAADm/+7/AAAZAAgAAADn/+r/AAAaAAQAAADn/+v/AAAaAAUAAADn/+z/AAAaAAYAAADn/+3/AAAaAAcAAADn/+7/AAAaAAgAAADo/+r/AAAbAAQAAADo/+v/AAAbAAUAAADo/+z/AAAbAAYAAADo/+3/AAAbAAcAAADo/+7/AAAbAAgAAADl/+//AAAYAAQAAADl//D/AAAYAAUAAADl//H/AAAYAAYAAADl//L/AAAYAAcAAADl//P/AAAYAAgAAADm/+//AAAZAAQAAADm//D/AAAZAAUAAADm//H/AAAZAAYAAADm//L/AAAZAAcAAADm//P/AAAZAAgAAADn/+//AAAaAAQAAADn//D/AAAaAAUAAADn//H/AAAaAAYAAADn//L/AAAaAAcAAADn//P/AAAaAAgAAADo/+//AAAbAAQAAADo//D/AAAbAAUAAADo//H/AAAbAAYAAADo//L/AAAbAAcAAADo//P/AAAbAAgAAADl//T/AAAYAAQAAADl//X/AAAYAAUAAADl//b/AAAYAAYAAADl//f/AAAYAAcAAADl//j/AAAYAAgAAADm//T/AAAZAAQAAADm//X/AAAZAAUAAADm//b/AAAZAAYAAADm//f/AAAZAAcAAADm//j/AAAZAAgAAADn//T/AAAaAAQAAADn//X/AAAaAAUAAADn//b/AAAaAAYAAADn//f/AAAaAAcAAADn//j/AAAaAAgAAADo//T/AAAbAAQAAADo//X/AAAbAAUAAADo//b/AAAbAAYAAADo//f/AAAbAAcAAADo//j/AAAbAAgAAADl//n/AAAYAAQAAADl//r/AAAYAAUAAADl//v/AAAYAAYAAADl//z/AAAYAAcAAADl//3/AAAYAAgAAADm//n/AAAZAAQAAADm//r/AAAZAAUAAADm//v/AAAZAAYAAADm//z/AAAZAAcAAADm//3/AAAZAAgAAADn//n/AAAaAAQAAADn//r/AAAaAAUAAADn//v/AAAaAAYAAADn//z/AAAaAAcAAADn//3/AAAaAAgAAADo//n/AAAbAAQAAADo//r/AAAbAAUAAADo//v/AAAbAAYAAADo//z/AAAbAAcAAADo//3/AAAbAAgAAADl//7/AAAYAAQAAADl////AAAZAAkAAADm//7/AAAZAAQAAADm////AAAaAAkAAADn//7/AAAaAAQAAADn////AAAbAAkAAADo//7/AAAbAAQAAADo////AAAYAAkAAADp/9z/AAAYAAUAAADp/93/AAAYAAYAAADp/97/AAAYAAcAAADp/9//AAAYAAgAAADq/9z/AAAZAAUAAADq/93/AAAZAAYAAADq/97/AAAZAAcAAADq/9//AAAZAAgAAADr/9z/AAAaAAUAAADr/93/AAAaAAYAAADr/97/AAAaAAcAAADr/9//AAAaAAgAAADs/9z/AAAbAAUAAADs/93/AAAbAAYAAADs/97/AAAbAAcAAADs/9//AAAbAAgAAADp/+D/AAAYAAQAAADp/+H/AAAYAAUAAADp/+L/AAAYAAYAAADp/+P/AAAYAAcAAADp/+T/AAAYAAgAAADq/+D/AAAZAAQAAADq/+H/AAAZAAUAAADq/+L/AAAZAAYAAADq/+P/AAAZAAcAAADq/+T/AAAZAAgAAADr/+D/AAAaAAQAAADr/+H/AAAaAAUAAADr/+L/AAAaAAYAAADr/+P/AAAaAAcAAADr/+T/AAAaAAgAAADs/+D/AAAbAAQAAADs/+H/AAAbAAUAAADs/+L/AAAbAAYAAADs/+P/AAAbAAcAAADs/+T/AAAbAAgAAADp/+X/AAAYAAQAAADp/+b/AAAYAAUAAADp/+f/AAAYAAYAAADp/+j/AAAYAAcAAADp/+n/AAAYAAgAAADq/+X/AAAZAAQAAADq/+b/AAAZAAUAAADq/+f/AAAZAAYAAADq/+j/AAAZAAcAAADq/+n/AAAZAAgAAADr/+X/AAAaAAQAAADr/+b/AAAaAAUAAADr/+f/AAAaAAYAAADr/+j/AAAaAAcAAADr/+n/AAAaAAgAAADs/+X/AAAbAAQAAADs/+b/AAAbAAUAAADs/+f/AAAbAAYAAADs/+j/AAAbAAcAAADs/+n/AAAbAAgAAADp/+r/AAAYAAQAAADp/+v/AAAYAAUAAADp/+z/AAAYAAYAAADp/+3/AAAYAAcAAADp/+7/AAAYAAgAAADq/+r/AAAZAAQAAADq/+v/AAAZAAUAAADq/+z/AAAZAAYAAADq/+3/AAAZAAcAAADq/+7/AAAZAAgAAADr/+r/AAAaAAQAAADr/+v/AAAaAAUAAADr/+z/AAAaAAYAAADr/+3/AAAaAAcAAADr/+7/AAAaAAgAAADs/+r/AAAbAAQAAADs/+v/AAAbAAUAAADs/+z/AAAbAAYAAADs/+3/AAAbAAcAAADs/+7/AAAbAAgAAADp/+//AAAYAAQAAADp//D/AAAYAAUAAADp//H/AAAYAAYAAADp//L/AAAYAAcAAADp//P/AAAYAAgAAADq/+//AAAZAAQAAADq//D/AAAZAAUAAADq//H/AAAZAAYAAADq//L/AAAZAAcAAADq//P/AAAZAAgAAADr/+//AAAaAAQAAADr//D/AAAaAAUAAADr//H/AAAaAAYAAADr//L/AAAaAAcAAADr//P/AAAaAAgAAADs/+//AAAbAAQAAADs//D/AAAbAAUAAADs//H/AAAbAAYAAADs//L/AAAbAAcAAADs//P/AAAbAAgAAADp//T/AAAYAAQAAADp//X/AAAYAAUAAADp//b/AAAYAAYAAADp//f/AAAYAAcAAADp//j/AAAYAAgAAADq//T/AAAZAAQAAADq//X/AAAZAAUAAADq//b/AAAZAAYAAADq//f/AAAZAAcAAADq//j/AAAZAAgAAADr//T/AAAaAAQAAADr//X/AAAaAAUAAADr//b/AAAaAAYAAADr//f/AAAaAAcAAADr//j/AAAaAAgAAADs//T/AAAbAAQAAADs//X/AAAbAAUAAADs//b/AAAbAAYAAADs//f/AAAbAAcAAADs//j/AAAbAAgAAADp//n/AAAYAAQAAADp//r/AAAYAAUAAADp//v/AAAYAAYAAADp//z/AAAYAAcAAADp//3/AAAYAAgAAADq//n/AAAZAAQAAADq//r/AAAZAAUAAADq//v/AAAZAAYAAADq//z/AAAZAAcAAADq//3/AAAZAAgAAADr//n/AAAaAAQAAADr//r/AAAaAAUAAADr//v/AAAaAAYAAADr//z/AAAaAAcAAADr//3/AAAaAAgAAADs//n/AAAbAAQAAADs//r/AAAbAAUAAADs//v/AAAbAAYAAADs//z/AAAbAAcAAADs//3/AAAbAAgAAADp//7/AAAYAAQAAADp////AAAZAAkAAADq//7/AAAZAAQAAADq////AAAaAAkAAADr//7/AAAaAAQAAADr////AAAbAAkAAADs//7/AAAbAAQAAADs////AAAYAAkAAADt/9z/AAAYAAUAAADt/93/AAAYAAYAAADt/97/AAAYAAcAAADt/9//AAAYAAgAAADu/9z/AAAZAAUAAADu/93/AAAZAAYAAADu/97/AAAZAAcAAADu/9//AAAZAAgAAADv/9z/AAAaAAUAAADv/93/AAAaAAYAAADv/97/AAAaAAcAAADv/9//AAAaAAgAAADw/9z/AAAbAAUAAADw/93/AAAbAAYAAADw/97/AAAbAAcAAADw/9//AAAbAAgAAADt/+D/AAAYAAQAAADt/+H/AAAYAAUAAADt/+L/AAAYAAYAAADt/+P/AAAYAAcAAADt/+T/AAAYAAgAAADu/+D/AAAZAAQAAADu/+H/AAAZAAUAAADu/+L/AAAZAAYAAADu/+P/AAAZAAcAAADu/+T/AAAZAAgAAADv/+D/AAAaAAQAAADv/+H/AAAaAAUAAADv/+L/AAAaAAYAAADv/+P/AAAaAAcAAADv/+T/AAAaAAgAAADw/+D/AAAbAAQAAADw/+H/AAAbAAUAAADw/+L/AAAbAAYAAADw/+P/AAAbAAcAAADw/+T/AAAbAAgAAADt/+X/AAAYAAQAAADt/+b/AAAYAAUAAADt/+f/AAAYAAYAAADt/+j/AAAYAAcAAADt/+n/AAAYAAgAAADu/+X/AAAZAAQAAADu/+b/AAAZAAUAAADu/+f/AAAZAAYAAADu/+j/AAAZAAcAAADu/+n/AAAZAAgAAADv/+X/AAAaAAQAAADv/+b/AAAaAAUAAADv/+f/AAAaAAYAAADv/+j/AAAaAAcAAADv/+n/AAAaAAgAAADw/+X/AAAbAAQAAADw/+b/AAAbAAUAAADw/+f/AAAbAAYAAADw/+j/AAAbAAcAAADw/+n/AAAbAAgAAADt/+r/AAAYAAQAAADt/+v/AAAYAAUAAADt/+z/AAAYAAYAAADt/+3/AAAYAAcAAADt/+7/AAAYAAgAAADu/+r/AAAZAAQAAADu/+v/AAAZAAUAAADu/+z/AAAZAAYAAADu/+3/AAAZAAcAAADu/+7/AAAZAAgAAADv/+r/AAAaAAQAAADv/+v/AAAaAAUAAADv/+z/AAAaAAYAAADv/+3/AAAaAAcAAADv/+7/AAAaAAgAAADw/+r/AAAbAAQAAADw/+v/AAAbAAUAAADw/+z/AAAbAAYAAADw/+3/AAAbAAcAAADw/+7/AAAbAAgAAADt/+//AAAYAAQAAADt//D/AAAYAAUAAADt//H/AAAYAAYAAADt//L/AAAYAAcAAADt//P/AAAYAAgAAADu/+//AAAZAAQAAADu//D/AAAZAAUAAADu//H/AAAZAAYAAADu//L/AAAZAAcAAADu//P/AAAZAAgAAADv/+//AAAaAAQAAADv//D/AAAaAAUAAADv//H/AAAaAAYAAADv//L/AAAaAAcAAADv//P/AAAaAAgAAADw/+//AAAbAAQAAADw//D/AAAbAAUAAADw//H/AAAbAAYAAADw//L/AAAbAAcAAADw//P/AAAbAAgAAADt//T/AAAYAAQAAADt//X/AAAYAAUAAADt//b/AAAYAAYAAADt//f/AAAYAAcAAADt//j/AAAYAAgAAADu//T/AAAZAAQAAADu//X/AAAZAAUAAADu//b/AAAZAAYAAADu//f/AAAZAAcAAADu//j/AAAZAAgAAADv//T/AAAaAAQAAADv//X/AAAaAAUAAADv//b/AAAaAAYAAADv//f/AAAaAAcAAADv//j/AAAaAAgAAADw//T/AAAbAAQAAADw//X/AAAbAAUAAADw//b/AAAbAAYAAADw//f/AAAbAAcAAADw//j/AAAbAAgAAADt//n/AAAYAAQAAADt//r/AAAYAAUAAADt//v/AAAYAAYAAADt//z/AAAYAAcAAADt//3/AAAYAAgAAADu//n/AAAZAAQAAADu//r/AAAZAAUAAADu//v/AAAZAAYAAADu//z/AAAZAAcAAADu//3/AAAZAAgAAADv//n/AAAaAAQAAADv//r/AAAaAAUAAADv//v/AAAaAAYAAADv//z/AAAaAAcAAADv//3/AAAaAAgAAADw//n/AAAbAAQAAADw//r/AAAbAAUAAADw//v/AAAbAAYAAADw//z/AAAbAAcAAADw//3/AAAbAAgAAADt//7/AAAYAAQAAADt////AAAZAAkAAADu//7/AAAZAAQAAADu////AAAaAAkAAADv//7/AAAaAAQAAADv////AAAbAAkAAADw//7/AAAbAAQAAADw////AAAYAAkAAADx/9z/AAAYAAUAAADx/93/AAAYAAYAAADx/97/AAAYAAcAAADx/9//AAAYAAgAAADy/9z/AAAZAAUAAADy/93/AAAZAAYAAADy/97/AAAZAAcAAADy/9//AAAZAAgAAADz/9z/AAAaAAUAAADz/93/AAAaAAYAAADz/97/AAAaAAcAAADz/9//AAAaAAgAAAD0/9z/AAAbAAUAAAD0/93/AAAbAAYAAAD0/97/AAAbAAcAAAD0/9//AAAbAAgAAADx/+D/AAAYAAQAAADx/+H/AAAYAAUAAADx/+L/AAAYAAYAAADx/+P/AAAYAAcAAADx/+T/AAAYAAgAAADy/+D/AAAZAAQAAADy/+H/AAAZAAUAAADy/+L/AAAZAAYAAADy/+P/AAAZAAcAAADy/+T/AAAZAAgAAADz/+D/AAAaAAQAAADz/+H/AAAaAAUAAADz/+L/AAAaAAYAAADz/+P/AAAaAAcAAADz/+T/AAAaAAgAAAD0/+D/AAAbAAQAAAD0/+H/AAAbAAUAAAD0/+L/AAAbAAYAAAD0/+P/AAAbAAcAAAD0/+T/AAAbAAgAAADx/+X/AAAYAAQAAADx/+b/AAAYAAUAAADx/+f/AAAYAAYAAADx/+j/AAAYAAcAAADx/+n/AAAYAAgAAADy/+X/AAAZAAQAAADy/+b/AAAZAAUAAADy/+f/AAAZAAYAAADy/+j/AAAZAAcAAADy/+n/AAAZAAgAAADz/+X/AAAaAAQAAADz/+b/AAAaAAUAAADz/+f/AAAaAAYAAADz/+j/AAAaAAcAAADz/+n/AAAaAAgAAAD0/+X/AAAbAAQAAAD0/+b/AAAbAAUAAAD0/+f/AAAbAAYAAAD0/+j/AAAbAAcAAAD0/+n/AAAbAAgAAADx/+r/AAAYAAQAAADx/+v/AAAYAAUAAADx/+z/AAAYAAYAAADx/+3/AAAYAAcAAADx/+7/AAAYAAgAAADy/+r/AAAZAAQAAADy/+v/AAAZAAUAAADy/+z/AAAZAAYAAADy/+3/AAAZAAcAAADy/+7/AAAZAAgAAADz/+r/AAAaAAQAAADz/+v/AAAaAAUAAADz/+z/AAAaAAYAAADz/+3/AAAaAAcAAADz/+7/AAAaAAgAAAD0/+r/AAAbAAQAAAD0/+v/AAAbAAUAAAD0/+z/AAAbAAYAAAD0/+3/AAAbAAcAAAD0/+7/AAAbAAgAAADx/+//AAAYAAQAAADx//D/AAAYAAUAAADx//H/AAAYAAYAAADx//L/AAAYAAcAAADx//P/AAAYAAgAAADy/+//AAAZAAQAAADy//D/AAAZAAUAAADy//H/AAAZAAYAAADy//L/AAAZAAcAAADy//P/AAAZAAgAAADz/+//AAAaAAQAAADz//D/AAAaAAUAAADz//H/AAAaAAYAAADz//L/AAAaAAcAAADz//P/AAAaAAgAAAD0/+//AAAbAAQAAAD0//D/AAAbAAUAAAD0//H/AAAbAAYAAAD0//L/AAAbAAcAAAD0//P/AAAbAAgAAADx//T/AAAYAAQAAADx//X/AAAYAAUAAADx//b/AAAYAAYAAADx//f/AAAYAAcAAADx//j/AAAYAAgAAADy//T/AAAZAAQAAADy//X/AAAZAAUAAADy//b/AAAZAAYAAADy//f/AAAZAAcAAADy//j/AAAZAAgAAADz//T/AAAaAAQAAADz//X/AAAaAAUAAADz//b/AAAaAAYAAADz//f/AAAaAAcAAADz//j/AAAaAAgAAAD0//T/AAAbAAQAAAD0//X/AAAbAAUAAAD0//b/AAAbAAYAAAD0//f/AAAbAAcAAAD0//j/AAAbAAgAAADx//n/AAAYAAQAAADx//r/AAAYAAUAAADx//v/AAAYAAYAAADx//z/AAAYAAcAAADx//3/AAAYAAgAAADy//n/AAAZAAQAAADy//r/AAAZAAUAAADy//v/AAAZAAYAAADy//z/AAAZAAcAAADy//3/AAAZAAgAAADz//n/AAAaAAQAAADz//r/AAAaAAUAAADz//v/AAAaAAYAAADz//z/AAAaAAcAAADz//3/AAAaAAgAAAD0//n/AAAbAAQAAAD0//r/AAAbAAUAAAD0//v/AAAbAAYAAAD0//z/AAAbAAcAAAD0//3/AAAbAAgAAADx//7/AAAYAAQAAADx////AAAZAAkAAADy//7/AAAZAAQAAADy////AAAaAAkAAADz//7/AAAaAAQAAADz////AAAbAAkAAAD0//7/AAAbAAQAAAD0////AAAYAAkAAAD1/9z/AAAYAAUAAAD1/93/AAAYAAYAAAD1/97/AAAYAAcAAAD1/9//AAAYAAgAAAD2/9z/AAAZAAUAAAD2/93/AAAZAAYAAAD2/97/AAAZAAcAAAD2/9//AAAZAAgAAAD3/9z/AAAaAAUAAAD3/93/AAAaAAYAAAD3/97/AAAaAAcAAAD3/9//AAAaAAgAAAD4/9z/AAAbAAUAAAD4/93/AAAbAAYAAAD4/97/AAAbAAcAAAD4/9//AAAbAAgAAAD1/+D/AAAYAAQAAAD1/+H/AAAYAAUAAAD1/+L/AAAYAAYAAAD1/+P/AAAYAAcAAAD1/+T/AAAYAAgAAAD2/+D/AAAZAAQAAAD2/+H/AAAZAAUAAAD2/+L/AAAZAAYAAAD2/+P/AAAZAAcAAAD2/+T/AAAZAAgAAAD3/+D/AAAaAAQAAAD3/+H/AAAaAAUAAAD3/+L/AAAaAAYAAAD3/+P/AAAaAAcAAAD3/+T/AAAaAAgAAAD4/+D/AAAbAAQAAAD4/+H/AAAbAAUAAAD4/+L/AAAbAAYAAAD4/+P/AAAbAAcAAAD4/+T/AAAbAAgAAAD1/+X/AAAYAAQAAAD1/+b/AAAYAAUAAAD1/+f/AAAYAAYAAAD1/+j/AAAYAAcAAAD1/+n/AAAYAAgAAAD2/+X/AAAZAAQAAAD2/+b/AAAZAAUAAAD2/+f/AAAZAAYAAAD2/+j/AAAZAAcAAAD2/+n/AAAZAAgAAAD3/+X/AAAaAAQAAAD3/+b/AAAaAAUAAAD3/+f/AAAaAAYAAAD3/+j/AAAaAAcAAAD3/+n/AAAaAAgAAAD4/+X/AAAbAAQAAAD4/+b/AAAbAAUAAAD4/+f/AAAbAAYAAAD4/+j/AAAbAAcAAAD4/+n/AAAbAAgAAAD1/+r/AAAYAAQAAAD1/+v/AAAYAAUAAAD1/+z/AAAYAAYAAAD1/+3/AAAYAAcAAAD1/+7/AAAYAAgAAAD2/+r/AAAZAAQAAAD2/+v/AAAZAAUAAAD2/+z/AAAZAAYAAAD2/+3/AAAZAAcAAAD2/+7/AAAZAAgAAAD3/+r/AAAaAAQAAAD3/+v/AAAaAAUAAAD3/+z/AAAaAAYAAAD3/+3/AAAaAAcAAAD3/+7/AAAaAAgAAAD4/+r/AAAbAAQAAAD4/+v/AAAbAAUAAAD4/+z/AAAbAAYAAAD4/+3/AAAbAAcAAAD4/+7/AAAbAAgAAAD1/+//AAAYAAQAAAD1//D/AAAYAAUAAAD1//H/AAAYAAYAAAD1//L/AAAYAAcAAAD1//P/AAAYAAgAAAD2/+//AAAZAAQAAAD2//D/AAAZAAUAAAD2//H/AAAZAAYAAAD2//L/AAAZAAcAAAD2//P/AAAZAAgAAAD3/+//AAAaAAQAAAD3//D/AAAaAAUAAAD3//H/AAAaAAYAAAD3//L/AAAaAAcAAAD3//P/AAAaAAgAAAD4/+//AAAbAAQAAAD4//D/AAAbAAUAAAD4//H/AAAbAAYAAAD4//L/AAAbAAcAAAD4//P/AAAbAAgAAAD1//T/AAAYAAQAAAD1//X/AAAYAAUAAAD1//b/AAAYAAYAAAD1//f/AAAYAAcAAAD1//j/AAAYAAgAAAD2//T/AAAZAAQAAAD2//X/AAAZAAUAAAD2//b/AAAZAAYAAAD2//f/AAAZAAcAAAD2//j/AAAZAAgAAAD3//T/AAAaAAQAAAD3//X/AAAaAAUAAAD3//b/AAAaAAYAAAD3//f/AAAaAAcAAAD3//j/AAAaAAgAAAD4//T/AAAbAAQAAAD4//X/AAAbAAUAAAD4//b/AAAbAAYAAAD4//f/AAAbAAcAAAD4//j/AAAbAAgAAAD1//n/AAAYAAQAAAD1//r/AAAYAAUAAAD1//v/AAAYAAYAAAD1//z/AAAYAAcAAAD1//3/AAAYAAgAAAD2//n/AAAZAAQAAAD2//r/AAAZAAUAAAD2//v/AAAZAAYAAAD2//z/AAAZAAcAAAD2//3/AAAZAAgAAAD3//n/AAAaAAQAAAD3//r/AAAaAAUAAAD3//v/AAAaAAYAAAD3//z/AAAaAAcAAAD3//3/AAAaAAgAAAD4//n/AAAbAAQAAAD4//r/AAAbAAUAAAD4//v/AAAbAAYAAAD4//z/AAAbAAcAAAD4//3/AAAbAAgAAAD1//7/AAAYAAQAAAD1////AAAZAAkAAAD2//7/AAAZAAQAAAD2////AAAaAAkAAAD3//7/AAAaAAQAAAD3////AAAbAAkAAAD4////AAAYAAkAAAD5/9z/AAAYAAUAAAD5/93/AAAYAAYAAAD5/97/AAAYAAcAAAD5/9//AAAYAAgAAAD6/9z/AAAZAAUAAAD6/93/AAAZAAYAAAD6/97/AAAZAAcAAAD6/9//AAAZAAgAAAD7/9//AAAcAAYAAAD5/+D/AAAYAAQAAAD5/+H/AAAYAAUAAAD5/+L/AAAYAAYAAAD5/+P/AAAYAAcAAAD5/+T/AAAYAAgAAAD6/+D/AAAZAAQAAAD6/+H/AAAZAAUAAAD6/+L/AAAZAAYAAAD6/+P/AAAZAAcAAAD6/+T/AAAZAAgAAAD7/+D/AAAaAAQAAAD7/+H/AAAaAAUAAAD7/+L/AAAaAAYAAAD7/+P/AAAaAAcAAAD7/+T/AAAaAAgAAAD8/+D/AAAbAAQAAAD8/+H/AAAbAAUAAAD8/+L/AAAbAAYAAAD8/+P/AAAbAAcAAAD8/+T/AAAbAAgAAAD5/+X/AAAYAAQAAAD5/+b/AAAYAAUAAAD5/+f/AAAYAAYAAAD5/+j/AAAYAAcAAAD5/+n/AAAYAAgAAAD6/+X/AAAZAAQAAAD6/+b/AAAZAAUAAAD6/+f/AAAZAAYAAAD6/+j/AAAZAAcAAAD6/+n/AAAZAAgAAAD7/+X/AAAaAAQAAAD7/+b/AAAaAAUAAAD7/+f/AAAaAAYAAAD7/+j/AAAaAAcAAAD7/+n/AAAaAAgAAAD8/+X/AAAbAAQAAAD8/+b/AAAbAAUAAAD8/+f/AAAbAAYAAAD8/+j/AAAbAAcAAAD8/+n/AAAbAAgAAAD5/+r/AAAYAAQAAAD5/+v/AAAYAAUAAAD5/+z/AAAYAAYAAAD5/+3/AAAYAAcAAAD5/+7/AAAYAAgAAAD6/+r/AAAZAAQAAAD6/+v/AAAZAAUAAAD6/+z/AAAZAAYAAAD6/+3/AAAZAAcAAAD6/+7/AAAZAAgAAAD7/+r/AAAaAAQAAAD7/+v/AAAaAAUAAAD7/+z/AAAaAAYAAAD7/+3/AAAaAAcAAAD7/+7/AAAaAAgAAAD8/+r/AAAbAAQAAAD8/+v/AAAbAAUAAAD8/+z/AAAbAAYAAAD8/+3/AAAbAAcAAAD8/+7/AAAbAAgAAAD5/+//AAAYAAQAAAD5//D/AAAYAAUAAAD5//H/AAAYAAYAAAD5//L/AAAYAAcAAAD5//P/AAAYAAgAAAD6/+//AAAZAAQAAAD6//D/AAAZAAUAAAD6//H/AAAZAAYAAAD6//L/AAAZAAcAAAD6//P/AAAZAAgAAAD7/+//AAAaAAQAAAD7//D/AAAaAAUAAAD7//H/AAAaAAYAAAD7//L/AAAaAAcAAAD7//P/AAAaAAgAAAD8/+//AAAbAAQAAAD8//D/AAAbAAUAAAD8//H/AAAbAAYAAAD8//L/AAAbAAcAAAD8//P/AAAbAAgAAAD5//T/AAAYAAQAAAD5//X/AAAYAAUAAAD5//b/AAAYAAYAAAD5//f/AAAYAAcAAAD5//j/AAAYAAgAAAD6//T/AAAZAAQAAAD6//X/AAAZAAUAAAD6//b/AAAZAAYAAAD6//f/AAAZAAcAAAD6//j/AAAZAAgAAAD7//T/AAAaAAQAAAD7//X/AAAaAAUAAAD7//b/AAAaAAYAAAD7//f/AAAaAAcAAAD8//T/AAAbAAQAAAD8//X/AAAbAAUAAAD8//b/AAAbAAYAAAD5//n/AAAYAAQAAAD5//r/AAAYAAUAAAD5//v/AAAYAAYAAAD5//z/AAAYAAcAAAD5//3/AAAYAAgAAAD6//n/AAAZAAQAAAD6//r/AAAZAAUAAAD6//v/AAAZAAYAAAD6//z/AAAZAAcAAAD6//3/AAAZAAgAAAD5//7/AAAYAAQAAAD5////AAAZAAkAAAD6//7/AAAZAAQAAAD6////AAAaAAkAAAD9/+D/AAAYAAQAAAD9/+H/AAAYAAUAAAD9/+L/AAAYAAYAAAD9/+P/AAAYAAcAAAD9/+T/AAAYAAgAAAD+/+D/AAAZAAQAAAD+/+H/AAAZAAUAAAD+/+L/AAAZAAYAAAD+/+P/AAAZAAcAAAD+/+T/AAAZAAgAAAD//+D/AAAaAAQAAAD//+H/AAAaAAUAAAD//+L/AAAaAAYAAAD//+P/AAAaAAcAAAD//+T/AAAaAAgAAAAAAOH/AAAbAAUAAAAAAOL/AAAbAAYAAAAAAOP/AAAbAAcAAAAAAOT/AAAbAAgAAAD9/+X/AAAYAAQAAAD9/+b/AAAYAAUAAAD9/+f/AAAYAAYAAAD9/+j/AAAYAAcAAAD9/+n/AAAYAAgAAAD+/+X/AAAZAAQAAAD+/+b/AAAZAAUAAAD+/+f/AAAZAAYAAAD+/+j/AAAZAAcAAAD+/+n/AAAZAAgAAAD//+X/AAAaAAQAAAD//+b/AAAaAAUAAAD//+f/AAAaAAYAAAD//+j/AAAaAAcAAAD//+n/AAAaAAgAAAAAAOX/AAAbAAQAAAAAAOb/AAAbAAUAAAAAAOf/AAAbAAYAAAAAAOj/AAAbAAcAAAAAAOn/AAAbAAgAAAD9/+r/AAAYAAQAAAD9/+v/AAAYAAUAAAD9/+z/AAAYAAYAAAD9/+3/AAAYAAcAAAD9/+7/AAAYAAgAAAD+/+r/AAAZAAQAAAD+/+v/AAAZAAUAAAD+/+z/AAAZAAYAAAD+/+3/AAAZAAcAAAD+/+7/AAAZAAgAAAD//+r/AAAaAAQAAAD//+v/AAAaAAUAAAD//+z/AAAaAAYAAAD//+3/AAAaAAcAAAD//+7/AAAaAAgAAAAAAOr/AAAbAAQAAAAAAOv/AAAbAAUAAAAAAOz/AAAbAAYAAAAAAO3/AAAbAAcAAAAAAO7/AAAbAAgAAAD9/+//AAAYAAQAAAD9//D/AAAYAAUAAAD9//H/AAAYAAYAAAD9//L/AAAYAAcAAAD9//P/AAAYAAgAAAD+/+//AAAZAAQAAAD+//D/AAAZAAUAAAD+//H/AAAZAAYAAAD+//L/AAAZAAcAAAD+//P/AAAZAAgAAAD//+//AAAaAAQAAAD///D/AAAaAAUAAAD///H/AAAaAAYAAAD///L/AAAaAAcAAAD///P/AAAaAAgAAAAAAO//AAAbAAQAAAAAAPD/AAAbAAUAAAAAAPH/AAAbAAYAAAAAAPL/AAAbAAcAAAAAAPP/AAAbAAgAAAD9//T/AAAYAAQAAAD9//X/AAAYAAUAAAD9//b/AAAYAAYAAAD+//T/AAAZAAQAAAD+//X/AAAZAAUAAAD+//b/AAAZAAYAAAD///T/AAAaAAQAAAD///X/AAAaAAUAAAD///b/AAAaAAYAAAAAAPT/AAAbAAQAAAAAAPX/AAAbAAUAAAAAAPb/AAAbAAYAAAAEANz/AAAXAAQAAAAEAN3/AAAXAAUAAAAEAN7/AAAXAAYAAAAEAN//AAAXAAcAAAABAOL/AAAYAAYAAAABAOP/AAAYAAcAAAABAOT/AAAYAAgAAAACAOP/AAAZAAcAAAACAOT/AAAZAAgAAAADAOP/AAAWAAcAAAADAOT/AAAaAAgAAAAEAOD/AAAXAAQAAAAEAOH/AAAXAAUAAAAEAOL/AAAXAAYAAAAEAOP/AAAXAAcAAAAEAOT/AAAbAAgAAAABAOX/AAAYAAQAAAABAOb/AAAYAAUAAAABAOf/AAAYAAYAAAABAOj/AAAYAAcAAAABAOn/AAAYAAgAAAACAOX/AAAZAAQAAAACAOb/AAAZAAUAAAACAOf/AAAZAAYAAAACAOj/AAAZAAcAAAACAOn/AAAZAAgAAAADAOX/AAAaAAQAAAADAOb/AAAaAAUAAAADAOf/AAAaAAYAAAADAOj/AAAaAAcAAAADAOn/AAAaAAgAAAAEAOX/AAAbAAQAAAAEAOb/AAAbAAUAAAAEAOf/AAAbAAYAAAAEAOj/AAAbAAcAAAAEAOn/AAAbAAgAAAABAOr/AAAYAAQAAAABAOv/AAAYAAUAAAABAOz/AAAYAAYAAAABAO3/AAAYAAcAAAABAO7/AAAYAAgAAAACAOr/AAAZAAQAAAACAOv/AAAZAAUAAAACAOz/AAAZAAYAAAACAO3/AAAZAAcAAAACAO7/AAAZAAgAAAADAOr/AAAaAAQAAAADAOv/AAAaAAUAAAADAOz/AAAaAAYAAAADAO3/AAAaAAcAAAADAO7/AAAaAAgAAAAEAOr/AAAbAAQAAAAEAOv/AAAbAAUAAAAEAOz/AAAbAAYAAAAEAO3/AAAbAAcAAAAEAO7/AAAbAAgAAAABAO//AAAYAAQAAAABAPD/AAAYAAUAAAABAPH/AAAYAAYAAAABAPL/AAAYAAcAAAABAPP/AAAYAAgAAAACAO//AAAZAAQAAAACAPD/AAAZAAUAAAACAPH/AAAZAAYAAAACAPL/AAAZAAcAAAACAPP/AAAZAAgAAAADAO//AAAaAAQAAAADAPD/AAAaAAUAAAADAPH/AAAaAAYAAAADAPL/AAAaAAcAAAADAPP/AAAaAAgAAAAEAO//AAAbAAQAAAAEAPD/AAAbAAUAAAAEAPH/AAAbAAYAAAAEAPL/AAAbAAcAAAAEAPP/AAAbAAgAAAABAPT/AAAYAAQAAAABAPX/AAAYAAUAAAABAPb/AAAYAAYAAAACAPT/AAAZAAQAAAACAPX/AAAZAAUAAAACAPb/AAAZAAYAAAACAPf/AAAZAAcAAAADAPT/AAAaAAQAAAADAPX/AAAaAAUAAAADAPb/AAAaAAYAAAAEAPT/AAAbAAQAAAAEAPX/AAAbAAUAAAAEAPb/AAAbAAYAAAAEAPf/AAAbAAcAAAAEAPj/AAAbAAgAAAAEAPn/AAAbAAQAAAAEAPr/AAAbAAUAAAAEAPv/AAAbAAYAAAAEAPz/AAAbAAcAAAAEAP3/AAAbAAgAAAAEAP7/AAAbAAQAAAAFANz/AAAYAAUAAAAFAN3/AAAYAAYAAAAFAN7/AAAYAAcAAAAFAN//AAAYAAgAAAAGANz/AAAZAAUAAAAGAN3/AAAZAAYAAAAGAN7/AAAZAAcAAAAGAN//AAAZAAgAAAAHANz/AAAaAAUAAAAHAN3/AAAaAAYAAAAHAN7/AAAaAAcAAAAHAN//AAAaAAgAAAAIANz/AAAbAAUAAAAIAN3/AAAbAAYAAAAIAN7/AAAbAAcAAAAIAN//AAAbAAgAAAAFAOD/AAAYAAQAAAAFAOH/AAAYAAUAAAAFAOL/AAAYAAYAAAAFAOP/AAAYAAcAAAAFAOT/AAAYAAgAAAAGAOD/AAAZAAQAAAAGAOH/AAAZAAUAAAAGAOL/AAAZAAYAAAAGAOP/AAAZAAcAAAAGAOT/AAAZAAgAAAAHAOD/AAAaAAQAAAAHAOH/AAAaAAUAAAAHAOL/AAAaAAYAAAAHAOP/AAAaAAcAAAAHAOT/AAAaAAgAAAAIAOD/AAAbAAQAAAAIAOH/AAAbAAUAAAAIAOL/AAAbAAYAAAAIAOP/AAAbAAcAAAAIAOT/AAAbAAgAAAAFAOX/AAAYAAQAAAAFAOb/AAAYAAUAAAAFAOf/AAAYAAYAAAAFAOj/AAAYAAcAAAAFAOn/AAAYAAgAAAAGAOX/AAAZAAQAAAAGAOb/AAAZAAUAAAAGAOf/AAAZAAYAAAAGAOj/AAAZAAcAAAAGAOn/AAAZAAgAAAAHAOX/AAAaAAQAAAAHAOb/AAAaAAUAAAAHAOf/AAAaAAYAAAAHAOj/AAAaAAcAAAAHAOn/AAAaAAgAAAAIAOX/AAAbAAQAAAAIAOb/AAAbAAUAAAAIAOf/AAAbAAYAAAAIAOj/AAAbAAcAAAAIAOn/AAAbAAgAAAAFAOr/AAAYAAQAAAAFAOv/AAAYAAUAAAAFAOz/AAAYAAYAAAAFAO3/AAAYAAcAAAAFAO7/AAAYAAgAAAAGAOr/AAAZAAQAAAAGAOv/AAAZAAUAAAAGAOz/AAAZAAYAAAAGAO3/AAAZAAcAAAAGAO7/AAAZAAgAAAAHAOr/AAAaAAQAAAAHAOv/AAAaAAUAAAAHAOz/AAAaAAYAAAAHAO3/AAAaAAcAAAAHAO7/AAAaAAgAAAAIAOr/AAAbAAQAAAAIAOv/AAAbAAUAAAAIAOz/AAAbAAYAAAAIAO3/AAAbAAcAAAAIAO7/AAAbAAgAAAAFAO//AAAYAAQAAAAFAPD/AAAYAAUAAAAFAPH/AAAYAAYAAAAFAPL/AAAYAAcAAAAFAPP/AAAYAAgAAAAGAO//AAAZAAQAAAAGAPD/AAAZAAUAAAAGAPH/AAAZAAYAAAAGAPL/AAAZAAcAAAAGAPP/AAAZAAgAAAAHAO//AAAaAAQAAAAHAPD/AAAaAAUAAAAHAPH/AAAaAAYAAAAHAPL/AAAaAAcAAAAHAPP/AAAaAAgAAAAIAO//AAAbAAQAAAAIAPD/AAAbAAUAAAAIAPH/AAAbAAYAAAAIAPL/AAAbAAcAAAAIAPP/AAAbAAgAAAAFAPT/AAAYAAQAAAAFAPX/AAAYAAUAAAAFAPb/AAAYAAYAAAAFAPf/AAAYAAcAAAAFAPj/AAAYAAgAAAAGAPT/AAAZAAQAAAAGAPX/AAAZAAUAAAAGAPb/AAAZAAYAAAAGAPf/AAAZAAcAAAAGAPj/AAAZAAgAAAAHAPT/AAAaAAQAAAAHAPX/AAAaAAUAAAAHAPb/AAAaAAYAAAAHAPf/AAAaAAcAAAAHAPj/AAAaAAgAAAAIAPT/AAAbAAQAAAAIAPX/AAAbAAUAAAAIAPb/AAAbAAYAAAAIAPf/AAAbAAcAAAAIAPj/AAAbAAgAAAAFAPn/AAAYAAQAAAAFAPr/AAAYAAUAAAAFAPv/AAAYAAYAAAAFAPz/AAAYAAcAAAAFAP3/AAAYAAgAAAAGAPn/AAAZAAQAAAAGAPr/AAAZAAUAAAAGAPv/AAAZAAYAAAAGAPz/AAAZAAcAAAAGAP3/AAAZAAgAAAAHAPn/AAAaAAQAAAAHAPr/AAAaAAUAAAAHAPv/AAAaAAYAAAAHAPz/AAAaAAcAAAAHAP3/AAAaAAgAAAAIAPn/AAAbAAQAAAAIAPr/AAAbAAUAAAAIAPv/AAAbAAYAAAAIAPz/AAAbAAcAAAAIAP3/AAAbAAgAAAAFAP7/AAAYAAQAAAAGAP7/AAAZAAQAAAAHAP7/AAAaAAQAAAAIAP7/AAAbAAQAAAAJANz/AAAYAAUAAAAJAN3/AAAYAAYAAAAJAN7/AAAYAAcAAAAJAN//AAAYAAgAAAAKANz/AAAZAAUAAAAKAN3/AAAZAAYAAAAKAN7/AAAZAAcAAAAKAN//AAAZAAgAAAALANz/AAAaAAUAAAALAN3/AAAaAAYAAAALAN7/AAAaAAcAAAALAN//AAAaAAgAAAAMANz/AAAbAAUAAAAMAN3/AAAbAAYAAAAMAN7/AAAbAAcAAAAMAN//AAAbAAgAAAAJAOD/AAAYAAQAAAAJAOH/AAAYAAUAAAAJAOL/AAAYAAYAAAAJAOP/AAAYAAcAAAAJAOT/AAAYAAgAAAAKAOD/AAAZAAQAAAAKAOH/AAAZAAUAAAAKAOL/AAAZAAYAAAAKAOP/AAAZAAcAAAAKAOT/AAAZAAgAAAALAOD/AAAaAAQAAAALAOH/AAAaAAUAAAALAOL/AAAaAAYAAAALAOP/AAAaAAcAAAALAOT/AAAaAAgAAAAMAOD/AAAbAAQAAAAMAOH/AAAbAAUAAAAMAOL/AAAbAAYAAAAMAOP/AAAbAAcAAAAMAOT/AAAbAAgAAAAJAOX/AAAYAAQAAAAJAOb/AAAYAAUAAAAJAOf/AAAYAAYAAAAJAOj/AAAYAAcAAAAJAOn/AAAYAAgAAAAKAOX/AAAZAAQAAAAKAOb/AAAZAAUAAAAKAOf/AAAZAAYAAAAKAOj/AAAZAAcAAAAKAOn/AAAZAAgAAAALAOX/AAAaAAQAAAALAOb/AAAaAAUAAAALAOf/AAAaAAYAAAALAOj/AAAaAAcAAAALAOn/AAAaAAgAAAAMAOX/AAAbAAQAAAAMAOb/AAAbAAUAAAAMAOf/AAAbAAYAAAAMAOj/AAAbAAcAAAAMAOn/AAAbAAgAAAAJAOr/AAAYAAQAAAAJAOv/AAAYAAUAAAAJAOz/AAAYAAYAAAAJAO3/AAAYAAcAAAAJAO7/AAAYAAgAAAAKAOr/AAAZAAQAAAAKAOv/AAAZAAUAAAAKAOz/AAAZAAYAAAAKAO3/AAAZAAcAAAAKAO7/AAAZAAgAAAALAOr/AAAaAAQAAAALAOv/AAAaAAUAAAALAOz/AAAaAAYAAAALAO3/AAAaAAcAAAALAO7/AAAaAAgAAAAMAOr/AAAbAAQAAAAMAOv/AAAbAAUAAAAMAOz/AAAbAAYAAAAMAO3/AAAbAAcAAAAMAO7/AAAbAAgAAAAJAO//AAAYAAQAAAAJAPD/AAAYAAUAAAAJAPH/AAAYAAYAAAAJAPL/AAAYAAcAAAAJAPP/AAAYAAgAAAAKAO//AAAZAAQAAAAKAPD/AAAZAAUAAAAKAPH/AAAZAAYAAAAKAPL/AAAZAAcAAAAKAPP/AAAZAAgAAAALAO//AAAaAAQAAAALAPD/AAAaAAUAAAALAPH/AAAaAAYAAAALAPL/AAAaAAcAAAALAPP/AAAaAAgAAAAMAO//AAAbAAQAAAAMAPD/AAAbAAUAAAAMAPH/AAAbAAYAAAAMAPL/AAAbAAcAAAAMAPP/AAAbAAgAAAAJAPT/AAAYAAQAAAAJAPX/AAAYAAUAAAAJAPb/AAAYAAYAAAAJAPf/AAAYAAcAAAAJAPj/AAAYAAgAAAAKAPT/AAAZAAQAAAAKAPX/AAAZAAUAAAAKAPb/AAAZAAYAAAAKAPf/AAAZAAcAAAAKAPj/AAAZAAgAAAALAPT/AAAaAAQAAAALAPX/AAAaAAUAAAALAPb/AAAaAAYAAAALAPf/AAAaAAcAAAALAPj/AAAaAAgAAAAMAPT/AAAbAAQAAAAMAPX/AAAbAAUAAAAMAPb/AAAbAAYAAAAMAPf/AAAbAAcAAAAMAPj/AAAbAAgAAAAJAPn/AAAYAAQAAAAJAPr/AAAYAAUAAAAJAPv/AAAYAAYAAAAJAPz/AAAYAAcAAAAJAP3/AAAYAAgAAAAKAPn/AAAZAAQAAAAKAPr/AAAZAAUAAAAKAPv/AAAZAAYAAAAKAPz/AAAZAAcAAAAKAP3/AAAZAAgAAAALAPn/AAAaAAQAAAALAPr/AAAaAAUAAAALAPv/AAAaAAYAAAALAPz/AAAaAAcAAAALAP3/AAAaAAgAAAAMAPn/AAAbAAQAAAAMAPr/AAAbAAUAAAAMAPv/AAAbAAYAAAAMAPz/AAAbAAcAAAAMAP3/AAAbAAgAAAAJAP7/AAAYAAQAAAAKAP7/AAAZAAQAAAALAP7/AAAaAAQAAAAMAP7/AAAbAAQAAAANANz/AAAYAAUAAAANAN3/AAAYAAYAAAANAN7/AAAYAAcAAAANAN//AAAYAAgAAAAOANz/AAAZAAUAAAAOAN3/AAAZAAYAAAAOAN7/AAAZAAcAAAAOAN//AAAZAAgAAAAPANz/AAAaAAUAAAAPAN3/AAAaAAYAAAAPAN7/AAAaAAcAAAAPAN//AAAaAAgAAAAQANz/AAAbAAUAAAAQAN3/AAAbAAYAAAAQAN7/AAAbAAcAAAAQAN//AAAbAAgAAAANAOD/AAAYAAQAAAANAOH/AAAYAAUAAAANAOL/AAAYAAYAAAANAOP/AAAYAAcAAAANAOT/AAAYAAgAAAAOAOD/AAAZAAQAAAAOAOH/AAAZAAUAAAAOAOL/AAAZAAYAAAAOAOP/AAAZAAcAAAAOAOT/AAAZAAgAAAAPAOD/AAAaAAQAAAAPAOH/AAAaAAUAAAAPAOL/AAAaAAYAAAAPAOP/AAAaAAcAAAAPAOT/AAAaAAgAAAAQAOD/AAAbAAQAAAAQAOH/AAAbAAUAAAAQAOL/AAAbAAYAAAAQAOP/AAAbAAcAAAAQAOT/AAAbAAgAAAANAOX/AAAYAAQAAAANAOb/AAAYAAUAAAANAOf/AAAYAAYAAAANAOj/AAAYAAcAAAANAOn/AAAYAAgAAAAOAOX/AAAZAAQAAAAOAOb/AAAZAAUAAAAOAOf/AAAZAAYAAAAOAOj/AAAZAAcAAAAOAOn/AAAZAAgAAAAPAOX/AAAaAAQAAAAPAOb/AAAaAAUAAAAPAOf/AAAaAAYAAAAPAOj/AAAaAAcAAAAPAOn/AAAaAAgAAAAQAOX/AAAbAAQAAAAQAOb/AAAbAAUAAAAQAOf/AAAbAAYAAAAQAOj/AAAbAAcAAAAQAOn/AAAbAAgAAAANAOr/AAAYAAQAAAANAOv/AAAYAAUAAAANAOz/AAAYAAYAAAANAO3/AAAYAAcAAAANAO7/AAAYAAgAAAAOAOr/AAAZAAQAAAAOAOv/AAAZAAUAAAAOAOz/AAAZAAYAAAAOAO3/AAAZAAcAAAAOAO7/AAAZAAgAAAAPAOr/AAAaAAQAAAAPAOv/AAAaAAUAAAAPAOz/AAAaAAYAAAAPAO3/AAAaAAcAAAAPAO7/AAAaAAgAAAAQAOr/AAAbAAQAAAAQAOv/AAAbAAUAAAAQAOz/AAAbAAYAAAAQAO3/AAAbAAcAAAAQAO7/AAAbAAgAAAANAO//AAAYAAQAAAANAPD/AAAYAAUAAAANAPH/AAAYAAYAAAANAPL/AAAYAAcAAAANAPP/AAAYAAgAAAAOAO//AAAZAAQAAAAOAPD/AAAZAAUAAAAOAPH/AAAZAAYAAAAOAPL/AAAZAAcAAAAOAPP/AAAZAAgAAAAPAO//AAAaAAQAAAAPAPD/AAAaAAUAAAAPAPH/AAAaAAYAAAAPAPL/AAAaAAcAAAAPAPP/AAAaAAgAAAAQAO//AAAbAAQAAAAQAPD/AAAbAAUAAAAQAPH/AAAbAAYAAAAQAPL/AAAbAAcAAAAQAPP/AAAbAAgAAAANAPT/AAAYAAQAAAANAPX/AAAYAAUAAAANAPb/AAAYAAYAAAANAPf/AAAYAAcAAAANAPj/AAAYAAgAAAAOAPT/AAAZAAQAAAAOAPX/AAAZAAUAAAAOAPb/AAAZAAYAAAAOAPf/AAAZAAcAAAAOAPj/AAAZAAgAAAAPAPT/AAAaAAQAAAAPAPX/AAAaAAUAAAAPAPb/AAAaAAYAAAAPAPf/AAAaAAcAAAAPAPj/AAAaAAgAAAAQAPT/AAAbAAQAAAAQAPX/AAAbAAUAAAAQAPb/AAAbAAYAAAAQAPf/AAAbAAcAAAAQAPj/AAAbAAgAAAANAPn/AAAYAAQAAAANAPr/AAAYAAUAAAANAPv/AAAYAAYAAAANAPz/AAAYAAcAAAANAP3/AAAYAAgAAAAOAPn/AAAZAAQAAAAOAPr/AAAZAAUAAAAOAPv/AAAZAAYAAAAOAPz/AAAZAAcAAAAOAP3/AAAZAAgAAAAPAPn/AAAaAAQAAAAPAPr/AAAaAAUAAAAPAPv/AAAaAAYAAAAPAPz/AAAaAAcAAAAPAP3/AAAaAAgAAAAQAPn/AAAbAAQAAAAQAPr/AAAbAAUAAAAQAPv/AAAbAAYAAAAQAPz/AAAbAAcAAAAQAP3/AAAbAAgAAAANAP7/AAAYAAQAAAAOAP7/AAAZAAQAAAAPAP7/AAAaAAQAAAAQAP7/AAAbAAQAAAARANz/AAAYAAUAAAARAN3/AAAYAAYAAAARAN7/AAAYAAcAAAARAN//AAAYAAgAAAASANz/AAAZAAUAAAASAN3/AAAZAAYAAAASAN7/AAAZAAcAAAASAN//AAAZAAgAAAATANz/AAAaAAUAAAATAN3/AAAaAAYAAAATAN7/AAAaAAcAAAATAN//AAAaAAgAAAAUANz/AAAcAAMAAAAUAN3/AAAcAAQAAAAUAN7/AAAcAAUAAAAUAN//AAAcAAYAAAARAOD/AAAYAAQAAAARAOH/AAAYAAUAAAARAOL/AAAYAAYAAAARAOP/AAAYAAcAAAARAOT/AAAYAAgAAAASAOD/AAAZAAQAAAASAOH/AAAZAAUAAAASAOL/AAAZAAYAAAASAOP/AAAZAAcAAAASAOT/AAAZAAgAAAATAOD/AAAaAAQAAAATAOH/AAAaAAUAAAATAOL/AAAaAAYAAAATAOP/AAAaAAcAAAATAOT/AAAaAAgAAAAUAOD/AAAcAAcAAAAUAOH/AAAcAAgAAAAUAOL/AAAcAAMAAAAUAOP/AAAcAAQAAAAUAOT/AAAcAAUAAAARAOX/AAAYAAQAAAARAOb/AAAYAAUAAAARAOf/AAAYAAYAAAARAOj/AAAYAAcAAAARAOn/AAAYAAgAAAASAOX/AAAZAAQAAAASAOb/AAAZAAUAAAASAOf/AAAZAAYAAAASAOj/AAAZAAcAAAASAOn/AAAZAAgAAAATAOX/AAAaAAQAAAATAOb/AAAaAAUAAAATAOf/AAAaAAYAAAATAOj/AAAaAAcAAAATAOn/AAAaAAgAAAAUAOX/AAAcAAYAAAAUAOb/AAAcAAcAAAAUAOf/AAAcAAgAAAAUAOj/AAAcAAMAAAAUAOn/AAAcAAQAAAARAOr/AAAYAAQAAAARAOv/AAAYAAUAAAARAOz/AAAYAAYAAAARAO3/AAAYAAcAAAARAO7/AAAYAAgAAAASAOr/AAAZAAQAAAASAOv/AAAZAAUAAAASAOz/AAAZAAYAAAASAO3/AAAZAAcAAAASAO7/AAAZAAgAAAATAOr/AAAaAAQAAAATAOv/AAAaAAUAAAATAOz/AAAaAAYAAAATAO3/AAAaAAcAAAATAO7/AAAaAAgAAAAUAOr/AAAcAAUAAAAUAOv/AAAcAAYAAAAUAOz/AAAcAAcAAAAUAO3/AAAcAAgAAAAUAO7/AAAcAAMAAAARAO//AAAYAAQAAAARAPD/AAAYAAUAAAARAPH/AAAYAAYAAAARAPL/AAAYAAcAAAARAPP/AAAYAAgAAAASAO//AAAZAAQAAAASAPD/AAAZAAUAAAASAPH/AAAZAAYAAAASAPL/AAAZAAcAAAASAPP/AAAZAAgAAAATAO//AAAaAAQAAAATAPD/AAAaAAUAAAATAPH/AAAaAAYAAAATAPL/AAAaAAcAAAATAPP/AAAaAAgAAAAUAO//AAAcAAQAAAAUAPD/AAAcAAUAAAAUAPH/AAAcAAYAAAAUAPL/AAAcAAcAAAAUAPP/AAAcAAgAAAARAPT/AAAYAAQAAAARAPX/AAAYAAUAAAARAPb/AAAYAAYAAAARAPf/AAAYAAcAAAARAPj/AAAYAAgAAAASAPT/AAAZAAQAAAASAPX/AAAZAAUAAAASAPb/AAAZAAYAAAASAPf/AAAZAAcAAAASAPj/AAAZAAgAAAATAPT/AAAaAAQAAAATAPX/AAAaAAUAAAATAPb/AAAaAAYAAAATAPf/AAAaAAcAAAATAPj/AAAaAAgAAAAUAPT/AAAcAAMAAAAUAPX/AAAcAAQAAAAUAPb/AAAcAAUAAAAUAPf/AAAcAAYAAAAUAPj/AAAcAAcAAAARAPn/AAAYAAQAAAARAPr/AAAYAAUAAAARAPv/AAAYAAYAAAARAPz/AAAYAAcAAAARAP3/AAAYAAgAAAASAPn/AAAZAAQAAAASAPr/AAAZAAUAAAASAPv/AAAZAAYAAAASAPz/AAAZAAcAAAASAP3/AAAZAAgAAAATAPn/AAAaAAQAAAATAPr/AAAaAAUAAAATAPv/AAAaAAYAAAATAPz/AAAaAAcAAAATAP3/AAAaAAgAAAAUAPn/AAAcAAgAAAAUAPr/AAAcAAMAAAAUAPv/AAAcAAQAAAAUAPz/AAAcAAUAAAAUAP3/AAAcAAYAAAARAP7/AAAYAAQAAAASAP7/AAAZAAQAAAATAP7/AAAaAAQAAAAUAP7/AAAcAAcAAAAVANz/AAAdAAMAAAAVAN3/AAAdAAQAAAAVAN7/AAAdAAUAAAAVAN//AAAdAAYAAAAVAOD/AAAdAAcAAAAVAOH/AAAdAAgAAAAVAOL/AAAdAAMAAAAVAOP/AAAdAAQAAAAVAOT/AAAdAAUAAAAVAOX/AAAdAAYAAAAVAOb/AAAdAAcAAAAVAOf/AAAdAAgAAAAVAOj/AAAdAAMAAAAVAOn/AAAdAAQAAAAVAOr/AAAdAAUAAAAVAOv/AAAdAAYAAAAVAOz/AAAdAAcAAAAVAO3/AAAdAAgAAAAVAO7/AAAdAAMAAAAVAO//AAAdAAQAAAAVAPD/AAAdAAUAAAAVAPH/AAAdAAYAAAAVAPL/AAAdAAcAAAAVAPP/AAAdAAgAAAAVAPT/AAAdAAMAAAAVAPX/AAAdAAQAAAAVAPb/AAAdAAUAAAAVAPf/AAAdAAYAAAAVAPj/AAAdAAcAAAAVAPn/AAAdAAgAAAAVAPr/AAAdAAMAAAAVAPv/AAAdAAQAAAAVAPz/AAAdAAUAAAAVAP3/AAAdAAYAAAAVAP7/AAAdAAcAAAAVAP//AAAdAAgAAAADAPf/AAAaAAcAAAD7//j/AAAcAAMAAAD7//n/AAAcAAQAAAD7//r/AAAcAAUAAAD7//v/AAAcAAYAAAD7//z/AAAcAAcAAAD7//3/AAAcAAgAAAD8//j/AAAdAAMAAAD8//n/AAAdAAQAAAD8//r/AAAdAAUAAAD8//v/AAAdAAYAAAD8//z/AAAdAAcAAAD8//3/AAAdAAgAAAD7//7/AAAcAAMAAAD8//7/AAAdAAMAAAACAPj/AAAWAAMAAAACAPn/AAAWAAQAAAACAPr/AAAWAAUAAAACAPv/AAAWAAYAAAACAPz/AAAWAAcAAAACAP3/AAAWAAgAAAADAPj/AAAXAAMAAAADAPn/AAAXAAQAAAADAPr/AAAXAAUAAAADAPv/AAAXAAYAAAADAPz/AAAXAAcAAAADAP3/AAAXAAgAAAACAP7/AAAWAAMAAAACAP//AAAWAAQAAAADAP7/AAAXAAMAAAADAP//AAAYAAkAAAAEAP//AAAZAAkAAAAFAP//AAAaAAkAAAAGAP//AAAbAAkAAAAHAP//AAAYAAkAAAAIAP//AAAZAAkAAAAJAP//AAAaAAkAAAAKAP//AAAbAAkAAAALAP//AAAYAAkAAAAMAP//AAAZAAkAAAANAP//AAAaAAkAAAAOAP//AAAbAAkAAAAPAP//AAAYAAkAAAAQAP//AAAZAAkAAAARAP//AAAaAAkAAAASAP//AAAbAAkAAAATAP//AAAYAAkAAAAUAP//AAAZAAkAAAADAAAAAAAYAAoAAAAEAAAAAAAZAAoAAAAFAAAAAAAaAAoAAAAGAAAAAAAbAAoAAAAHAAAAAAAYAAoAAAAIAAAAAAAZAAoAAAAJAAAAAAAaAAoAAAAKAAAAAAAbAAoAAAALAAAAAAAYAAoAAAAMAAAAAAAZAAoAAAANAAAAAAAaAAoAAAAOAAAAAAAbAAoAAAAPAAAAAAAYAAoAAAAQAAAAAAAZAAoAAAARAAAAAAAaAAoAAAASAAAAAAAbAAoAAAATAAAAAAAYAAoAAAAUAAAAAAAZAAoAAAACAAAAAAAWAAoAAAAVAAAAAAAdAAoAAAD4/wAAAAAYAAoAAAD5/wAAAAAZAAoAAAD6/wAAAAAaAAoAAAD0/wAAAAAYAAoAAAD1/wAAAAAZAAoAAAD2/wAAAAAaAAoAAAD3/wAAAAAbAAoAAADw/wAAAAAYAAoAAADx/wAAAAAZAAoAAADy/wAAAAAaAAoAAADz/wAAAAAbAAoAAADs/wAAAAAYAAoAAADt/wAAAAAZAAoAAADu/wAAAAAaAAoAAADv/wAAAAAbAAoAAADo/wAAAAAYAAoAAADp/wAAAAAZAAoAAADq/wAAAAAaAAoAAADr/wAAAAAbAAoAAADk/wAAAAAYAAoAAADl/wAAAAAZAAoAAADm/wAAAAAaAAoAAADn/wAAAAAbAAoAAADg/wAAAAAaAAoAAADh/wAAAAAbAAoAAADi/wAAAAAaAAoAAADj/wAAAAAbAAoAAADe/wAAAAAYAAoAAADf/wAAAAAZAAoAAADa/wAAAAAYAAoAAADb/wAAAAAZAAoAAADc/wAAAAAaAAoAAADd/wAAAAAbAAoAAADW/wAAAAAYAAoAAADX/wAAAAAZAAoAAADY/wAAAAAaAAoAAADZ/wAAAAAbAAoAAADS/wAAAAAYAAoAAADT/wAAAAAZAAoAAADU/wAAAAAaAAoAAADV/wAAAAAbAAoAAADO/wAAAAAYAAoAAADP/wAAAAAZAAoAAADQ/wAAAAAaAAoAAADR/wAAAAAbAAoAAADK/wAAAAAYAAoAAADL/wAAAAAZAAoAAADM/wAAAAAaAAoAAADN/wAAAAAbAAoAAADG/wAAAAAYAAoAAADH/wAAAAAZAAoAAADI/wAAAAAaAAoAAADJ/wAAAAAbAAoAAADC/wAAAAAYAAoAAADD/wAAAAAZAAoAAADE/wAAAAAaAAoAAADF/wAAAAAbAAoAAAC+/wAAAAAYAAoAAAC//wAAAAAZAAoAAADA/wAAAAAaAAoAAADB/wAAAAAbAAoAAAC6/wAAAAAYAAoAAAC7/wAAAAAZAAoAAAC8/wAAAAAaAAoAAAC9/wAAAAAbAAoAAAC2/wAAAAAYAAoAAAC3/wAAAAAZAAoAAAC4/wAAAAAaAAoAAAC5/wAAAAAbAAoAAACy/wAAAAAYAAoAAACz/wAAAAAZAAoAAAC0/wAAAAAaAAoAAAC1/wAAAAAbAAoAAAD7/wAAAAAbAAoAAAD8////AAAdAAQAAAD7////AAAbAAkAAAD4//7/AAAbAAQAAAD8/wAAAAAdAAoAAAD7/9z/AAAcAAQAAAD7/97/AAAcAAUAAAD7/93/AAAcAAQAAAD8/9z/AAAdAAQAAAD8/93/AAAdAAQAAAD8/97/AAAdAAUAAAD8/9//AAAdAAYAAAADANz/AAAWAAQAAAADAN3/AAAWAAUAAAADAN7/AAAWAAYAAAADAN//AAAWAAcAAAADAOD/AAAWAAQAAAADAOH/AAAWAAUAAAADAOL/AAAWAAYAAACy/wsAAAAYAAgAAACy/wwAAAAZAAUAAACy/w0AAAAZAAYAAACy/w4AAAAZAAcAAACy/w8AAAAZAAgAAACz/wsAAAAZAAgAAACz/wwAAAAaAAUAAACz/w0AAAAaAAYAAACz/w4AAAAaAAcAAACz/w8AAAAaAAgAAAC0/wsAAAAaAAgAAAC0/wwAAAAbAAUAAAC0/w0AAAAbAAYAAAC0/w4AAAAbAAcAAAC0/w8AAAAbAAgAAACy/xAAAAAZAAQAAACy/xEAAAAZAAUAAACy/xIAAAAZAAYAAACy/xMAAAAZAAcAAACy/xQAAAAZAAgAAACz/xAAAAAaAAQAAACz/xEAAAAaAAUAAACz/xIAAAAaAAYAAACz/xMAAAAaAAcAAACz/xQAAAAaAAgAAAC0/xAAAAAbAAQAAAC0/xEAAAAbAAUAAAC0/xIAAAAbAAYAAAC0/xMAAAAbAAcAAAC0/xQAAAAbAAgAAACy/xUAAAAZAAQAAACy/xYAAAAZAAUAAACy/xcAAAAZAAYAAACy/xgAAAAZAAcAAACz/xUAAAAaAAQAAACz/xYAAAAaAAUAAACz/xcAAAAaAAYAAACz/xgAAAAaAAcAAAC0/xUAAAAbAAQAAAC0/xYAAAAbAAUAAAC0/xcAAAAbAAYAAAC0/xgAAAAbAAcAAACy/x8AAAAZAAQAAACy/yAAAAAZAAUAAACy/yEAAAAZAAYAAACy/yIAAAAZAAcAAACy/yMAAAAZAAgAAACz/x8AAAAaAAQAAACz/yAAAAAaAAUAAACz/yEAAAAaAAYAAACz/yIAAAAaAAcAAACz/yMAAAAaAAgAAAC0/x8AAAAbAAQAAAC0/yAAAAAbAAUAAAC0/yEAAAAbAAYAAAC0/yIAAAAbAAcAAAC0/yMAAAAbAAgAAACy/yQAAAAZAAQAAACy/yUAAAAZAAUAAACy/yYAAAAZAAYAAACy/ycAAAAZAAcAAACy/ygAAAAZAAgAAACz/yQAAAAaAAQAAACz/yUAAAAaAAUAAACz/yYAAAAaAAYAAACz/ycAAAAaAAcAAACz/ygAAAAaAAgAAAC0/yQAAAAbAAQAAAC0/yUAAAAbAAUAAAC0/yYAAAAbAAYAAAC0/ycAAAAbAAcAAAC0/ygAAAAbAAgAAACy/ykAAAAZAAQAAACy/yoAAAAZAAUAAACy/ysAAAAZAAYAAACy/ywAAAAZAAcAAACy/y0AAAAZAAgAAACz/ykAAAAaAAQAAACz/yoAAAAaAAUAAACz/ysAAAAaAAYAAACz/ywAAAAaAAcAAACz/y0AAAAaAAgAAAC0/ykAAAAbAAQAAAC0/yoAAAAbAAUAAAC0/ysAAAAbAAYAAAC0/ywAAAAbAAcAAAC0/y0AAAAbAAgAAAC1/wsAAAAbAAgAAAC1/wwAAAAYAAUAAAC1/w0AAAAYAAYAAAC1/w4AAAAYAAcAAAC1/w8AAAAYAAgAAAC2/wsAAAAYAAgAAAC2/wwAAAAZAAUAAAC2/w0AAAAZAAYAAAC2/w4AAAAZAAcAAAC2/w8AAAAZAAgAAAC3/wsAAAAZAAgAAAC3/wwAAAAaAAUAAAC3/w0AAAAaAAYAAAC3/w4AAAAaAAcAAAC3/w8AAAAaAAgAAAC4/wsAAAAaAAgAAAC4/wwAAAAbAAUAAAC4/w0AAAAbAAYAAAC4/w4AAAAbAAcAAAC4/w8AAAAbAAgAAAC1/xAAAAAYAAQAAAC1/xEAAAAYAAUAAAC1/xIAAAAYAAYAAAC1/xMAAAAYAAcAAAC1/xQAAAAYAAgAAAC2/xAAAAAZAAQAAAC2/xEAAAAZAAUAAAC2/xIAAAAZAAYAAAC2/xMAAAAZAAcAAAC2/xQAAAAZAAgAAAC3/xAAAAAaAAQAAAC3/xEAAAAaAAUAAAC3/xIAAAAaAAYAAAC3/xMAAAAaAAcAAAC3/xQAAAAaAAgAAAC4/xAAAAAbAAQAAAC4/xEAAAAbAAUAAAC4/xIAAAAbAAYAAAC4/xMAAAAbAAcAAAC4/xQAAAAbAAgAAAC1/xUAAAAYAAQAAAC1/xYAAAAYAAUAAAC1/xcAAAAYAAYAAAC1/xgAAAAYAAcAAAC2/xUAAAAZAAQAAAC2/xYAAAAZAAUAAAC2/xcAAAAZAAYAAAC2/xgAAAAZAAcAAAC3/xUAAAAaAAQAAAC3/xYAAAAaAAUAAAC3/xcAAAAaAAYAAAC3/xgAAAAaAAcAAAC4/xUAAAAbAAQAAAC4/xYAAAAbAAUAAAC4/xcAAAAbAAYAAAC4/xgAAAAbAAcAAAC1/x8AAAAYAAQAAAC1/yAAAAAYAAUAAAC1/yEAAAAYAAYAAAC1/yIAAAAYAAcAAAC1/yMAAAAYAAgAAAC2/x8AAAAZAAQAAAC2/yAAAAAZAAUAAAC2/yEAAAAZAAYAAAC2/yIAAAAZAAcAAAC2/yMAAAAZAAgAAAC3/x8AAAAaAAQAAAC3/yAAAAAaAAUAAAC3/yEAAAAaAAYAAAC3/yIAAAAaAAcAAAC3/yMAAAAaAAgAAAC4/x8AAAAbAAQAAAC4/yAAAAAbAAUAAAC4/yEAAAAbAAYAAAC4/yIAAAAbAAcAAAC4/yMAAAAbAAgAAAC1/yQAAAAYAAQAAAC1/yUAAAAYAAUAAAC1/yYAAAAYAAYAAAC1/ycAAAAYAAcAAAC1/ygAAAAYAAgAAAC2/yQAAAAZAAQAAAC2/yUAAAAZAAUAAAC2/yYAAAAZAAYAAAC2/ycAAAAZAAcAAAC2/ygAAAAZAAgAAAC3/yQAAAAaAAQAAAC3/yUAAAAaAAUAAAC3/yYAAAAaAAYAAAC3/ycAAAAaAAcAAAC3/ygAAAAaAAgAAAC4/yQAAAAbAAQAAAC4/yUAAAAbAAUAAAC4/yYAAAAbAAYAAAC4/ycAAAAbAAcAAAC4/ygAAAAbAAgAAAC1/ykAAAAYAAQAAAC1/yoAAAAYAAUAAAC1/ysAAAAYAAYAAAC1/ywAAAAYAAcAAAC1/y0AAAAYAAgAAAC2/ykAAAAZAAQAAAC2/yoAAAAZAAUAAAC2/ysAAAAZAAYAAAC2/ywAAAAZAAcAAAC2/y0AAAAZAAgAAAC3/ykAAAAaAAQAAAC3/yoAAAAaAAUAAAC3/ysAAAAaAAYAAAC3/ywAAAAaAAcAAAC3/y0AAAAaAAgAAAC4/ykAAAAbAAQAAAC4/yoAAAAbAAUAAAC4/ysAAAAbAAYAAAC4/ywAAAAbAAcAAAC4/y0AAAAbAAgAAAC5/wsAAAAbAAgAAAC5/wwAAAAYAAUAAAC5/w0AAAAYAAYAAAC5/w4AAAAYAAcAAAC5/w8AAAAYAAgAAAC6/wsAAAAYAAgAAAC6/wwAAAAZAAUAAAC6/w0AAAAZAAYAAAC6/w4AAAAZAAcAAAC7/wsAAAAZAAgAAAC7/wwAAAAaAAUAAAC7/w0AAAAaAAYAAAC7/w4AAAAaAAcAAAC7/w8AAAAUABAAAAC8/wsAAAAaAAgAAAC8/wwAAAAbAAUAAAC8/w0AAAAbAAYAAAC8/w4AAAAbAAcAAAC8/w8AAAAUABAAAAC5/xMAAAAYAAcAAAC5/xQAAAAYAAgAAAC5/xUAAAAYAAQAAAC5/xYAAAAYAAUAAAC5/xcAAAAYAAYAAAC5/xgAAAAYAAcAAAC5/ykAAAAYAAQAAAC5/yoAAAAYAAUAAAC5/ysAAAAYAAYAAAC5/ywAAAAYAAcAAAC5/y0AAAAYAAgAAAC6/ykAAAAYAAwAAAC6/yoAAAAZAAUAAAC6/ysAAAAZAAYAAAC6/ywAAAAZAAcAAAC6/y0AAAAZAAgAAAC7/ykAAAAYAAwAAAC7/yoAAAAaAAUAAAC7/ysAAAAaAAYAAAC7/ywAAAAaAAcAAAC7/y0AAAAaAAgAAAC8/ykAAAAYAAwAAAC8/yoAAAAbAAUAAAC8/ysAAAAbAAYAAAC8/ywAAAAbAAcAAAC8/y0AAAAbAAgAAAC9/wsAAAAbAAgAAAC9/wwAAAAYAAUAAAC9/w0AAAAYAAYAAAC9/w4AAAAYAAcAAAC9/w8AAAAUABAAAAC+/wsAAAAYAAgAAAC+/wwAAAAZAAUAAAC+/w0AAAAZAAYAAAC+/w4AAAAZAAcAAAC+/w8AAAAUABAAAAC//wsAAAAZAAgAAAC//wwAAAAaAAUAAAC//w0AAAAaAAYAAAC//w4AAAAaAAcAAAC//w8AAAAUABAAAADA/wsAAAAaAAgAAADA/wwAAAAbAAUAAADA/w0AAAAbAAYAAADA/w4AAAAbAAcAAADA/w8AAAAUABAAAAC9/ykAAAAYAAwAAAC9/yoAAAAYAAUAAAC9/ysAAAAYAAYAAAC9/ywAAAAYAAcAAAC9/y0AAAAYAAgAAAC+/ykAAAAYAAwAAAC+/yoAAAAZAAUAAAC+/ysAAAAZAAYAAAC+/ywAAAAZAAcAAAC+/y0AAAAZAAgAAAC//ykAAAAYAAwAAAC//yoAAAAaAAUAAAC//ysAAAAaAAYAAAC//ywAAAAaAAcAAAC//y0AAAAaAAgAAADA/ykAAAAYAAwAAADA/yoAAAAbAAUAAADA/ysAAAAbAAYAAADA/ywAAAAbAAcAAADA/y0AAAAbAAgAAADB/wsAAAAbAAgAAADB/wwAAAAYAAUAAADB/w0AAAAYAAYAAADB/w4AAAAYAAcAAADB/w8AAAAUABAAAADC/wsAAAAYAAgAAADC/wwAAAAZAAUAAADC/w0AAAAZAAYAAADC/w4AAAAZAAcAAADC/w8AAAAUABAAAADD/wsAAAAZAAgAAADD/wwAAAAaAAUAAADD/w0AAAAaAAYAAADD/w4AAAAaAAcAAADD/w8AAAAUABAAAADE/wsAAAAaAAgAAADE/wwAAAAbAAUAAADE/w0AAAAbAAYAAADE/w4AAAAbAAcAAADE/w8AAAAUABAAAADB/ykAAAAYAAwAAADB/yoAAAAYAAUAAADB/ysAAAAYAAYAAADB/ywAAAAYAAcAAADB/y0AAAAYAAgAAADC/ykAAAAYAAwAAADC/yoAAAAZAAUAAADC/ysAAAAZAAYAAADC/ywAAAAZAAcAAADC/y0AAAAZAAgAAADD/ykAAAAYAAwAAADD/yoAAAAaAAUAAADD/ysAAAAaAAYAAADD/ywAAAAaAAcAAADD/y0AAAAaAAgAAADE/ykAAAAYAAwAAADE/yoAAAAbAAUAAADE/ysAAAAbAAYAAADE/ywAAAAbAAcAAADE/y0AAAAbAAgAAADF/wsAAAAbAAgAAADF/wwAAAAYAAUAAADF/w0AAAAYAAYAAADF/w4AAAAYAAcAAADF/w8AAAAUABAAAADG/wsAAAAYAAgAAADG/wwAAAAZAAUAAADG/w0AAAAZAAYAAADG/w4AAAAZAAcAAADG/w8AAAAUABAAAADH/wsAAAAZAAgAAADH/wwAAAAaAAUAAADH/w0AAAAaAAYAAADH/w4AAAAaAAcAAADH/w8AAAAUABAAAADI/wsAAAAaAAgAAADI/wwAAAAbAAUAAADI/w0AAAAbAAYAAADI/w4AAAAbAAcAAADI/w8AAAAUABAAAADF/ykAAAAYAAwAAADF/yoAAAAYAAUAAADF/ysAAAAYAAYAAADF/ywAAAAYAAcAAADF/y0AAAAYAAgAAADG/ykAAAAYAAwAAADG/yoAAAAZAAUAAADG/ysAAAAZAAYAAADG/ywAAAAZAAcAAADG/y0AAAAZAAgAAADH/ykAAAAYAAwAAADH/yoAAAAaAAUAAADH/ysAAAAaAAYAAADH/ywAAAAaAAcAAADH/y0AAAAaAAgAAADI/ykAAAAYAAwAAADI/yoAAAAbAAUAAADI/ysAAAAbAAYAAADI/ywAAAAbAAcAAADI/y0AAAAbAAgAAADQ/wsAAAAaAAgAAADQ/wwAAAAbAAUAAADQ/w0AAAAbAAYAAADQ/w4AAAAbAAcAAADQ/w8AAAATABAAAADQ/ykAAAAYAAwAAADQ/yoAAAAbAAUAAADQ/ysAAAAbAAYAAADQ/ywAAAAbAAcAAADQ/y0AAAAbAAgAAADR/wsAAAAbAAgAAADR/wwAAAAYAAUAAADR/w0AAAAYAAYAAADR/w4AAAAYAAcAAADR/w8AAAATABAAAADS/wsAAAAYAAgAAADS/wwAAAAZAAUAAADS/w0AAAAZAAYAAADS/w4AAAAZAAcAAADS/w8AAAATABAAAADT/wsAAAAZAAgAAADT/wwAAAAaAAUAAADT/w0AAAAaAAYAAADT/w4AAAAaAAcAAADT/w8AAAATABAAAADU/wsAAAAaAAgAAADU/wwAAAAbAAUAAADU/w0AAAAbAAYAAADU/w4AAAAbAAcAAADU/w8AAAATABAAAADR/ykAAAAYAAwAAADR/yoAAAAYAAUAAADR/ysAAAAYAAYAAADR/ywAAAAYAAcAAADR/y0AAAAYAAgAAADS/ykAAAAYAAwAAADS/yoAAAAZAAUAAADS/ysAAAAZAAYAAADS/ywAAAAZAAcAAADS/y0AAAAZAAgAAADT/ykAAAAYAAwAAADT/yoAAAAaAAUAAADT/ysAAAAaAAYAAADT/ywAAAAaAAcAAADT/y0AAAAaAAgAAADU/ykAAAAYAAwAAADU/yoAAAAbAAUAAADU/ysAAAAbAAYAAADU/ywAAAAbAAcAAADU/y0AAAAbAAgAAADV/wsAAAAbAAgAAADV/wwAAAAYAAUAAADV/w0AAAAYAAYAAADV/w4AAAAYAAcAAADV/w8AAAATABAAAADW/wsAAAAYAAgAAADW/wwAAAAZAAUAAADW/w0AAAAZAAYAAADW/w4AAAAZAAcAAADW/w8AAAATABAAAADX/wsAAAAZAAgAAADX/wwAAAAaAAUAAADX/w0AAAAaAAYAAADX/w4AAAAaAAcAAADX/w8AAAATABAAAADY/wsAAAAaAAgAAADY/wwAAAAbAAUAAADY/w0AAAAbAAYAAADY/w4AAAAbAAcAAADY/w8AAAATABAAAADV/ykAAAAYAAwAAADV/yoAAAAYAAUAAADV/ysAAAAYAAYAAADV/ywAAAAYAAcAAADV/y0AAAAYAAgAAADW/ykAAAAYAAwAAADW/yoAAAAZAAUAAADW/ysAAAAZAAYAAADW/ywAAAAZAAcAAADW/y0AAAAZAAgAAADX/ykAAAAYAAwAAADX/yoAAAAaAAUAAADX/ysAAAAaAAYAAADX/ywAAAAaAAcAAADX/y0AAAAaAAgAAADY/ykAAAAYAAwAAADY/yoAAAAbAAUAAADY/ysAAAAbAAYAAADY/ywAAAAbAAcAAADY/y0AAAAbAAgAAADZ/wsAAAAbAAgAAADZ/wwAAAAYAAUAAADZ/w0AAAAYAAYAAADZ/w4AAAAYAAcAAADZ/w8AAAATABAAAADa/wsAAAAYAAgAAADa/wwAAAAZAAUAAADa/w0AAAAZAAYAAADa/w4AAAAZAAcAAADa/w8AAAATABAAAADb/wsAAAAZAAgAAADb/wwAAAAaAAUAAADb/w0AAAAaAAYAAADb/w4AAAAaAAcAAADb/w8AAAATABAAAADc/wsAAAAaAAgAAADc/wwAAAAbAAUAAADc/w0AAAAbAAYAAADc/w4AAAAbAAcAAADc/w8AAAATABAAAADZ/ykAAAAYAAwAAADZ/yoAAAAYAAUAAADZ/ysAAAAYAAYAAADZ/ywAAAAYAAcAAADZ/y0AAAAYAAgAAADa/ykAAAAYAAwAAADa/yoAAAAZAAUAAADa/ysAAAAZAAYAAADa/ywAAAAZAAcAAADa/y0AAAAZAAgAAADb/ykAAAAYAAwAAADb/yoAAAAaAAUAAADb/ysAAAAaAAYAAADb/ywAAAAaAAcAAADb/y0AAAAaAAgAAADc/ykAAAAYAAwAAADc/yoAAAAbAAUAAADc/ysAAAAbAAYAAADc/ywAAAAbAAcAAADc/y0AAAAbAAgAAADd/wsAAAAbAAgAAADd/wwAAAAYAAUAAADd/w0AAAAYAAYAAADd/w4AAAAYAAcAAADd/w8AAAATABAAAADe/wsAAAAYAAgAAADe/wwAAAAZAAUAAADe/w0AAAAZAAYAAADe/w4AAAAZAAcAAADe/w8AAAATABAAAADf/wsAAAAZAAgAAADf/wwAAAAaAAUAAADf/w0AAAAaAAYAAADf/w4AAAAaAAcAAADf/w8AAAATABAAAADg/wsAAAAaAAgAAADg/wwAAAAbAAUAAADg/w0AAAAbAAYAAADg/w4AAAAbAAcAAADg/w8AAAATABAAAADd/ykAAAAYAAwAAADd/yoAAAAYAAUAAADd/ysAAAAYAAYAAADd/ywAAAAYAAcAAADd/y0AAAAYAAgAAADe/ykAAAAYAAwAAADe/yoAAAAZAAUAAADe/ysAAAAZAAYAAADe/ywAAAAZAAcAAADe/y0AAAAZAAgAAADf/ykAAAAYAAwAAADf/yoAAAAaAAUAAADf/ysAAAAaAAYAAADf/ywAAAAaAAcAAADf/y0AAAAaAAgAAADg/ykAAAAYAAwAAADg/yoAAAAbAAUAAADg/ysAAAAbAAYAAADg/ywAAAAbAAcAAADg/y0AAAAbAAgAAADh/wsAAAAbAAgAAADh/wwAAAAYAAUAAADh/w0AAAAYAAYAAADh/w4AAAAZAAUAAADh/w8AAAAZAAYAAADi/wsAAAAYAAgAAADi/wwAAAAZAAUAAADi/w0AAAAZAAYAAADi/w4AAAAZAAcAAADi/w8AAAAZAAgAAADj/wsAAAAZAAgAAADj/wwAAAAaAAUAAADj/w0AAAAaAAYAAADj/w4AAAAaAAcAAADj/w8AAAAaAAgAAADk/wsAAAAaAAgAAADk/wwAAAAbAAUAAADk/w0AAAAbAAYAAADk/w4AAAAbAAcAAADk/w8AAAAbAAgAAADi/xAAAAAZAAQAAADi/xEAAAAZAAUAAADi/xIAAAAZAAYAAADi/xMAAAAZAAcAAADi/xQAAAAZAAgAAADj/xAAAAAaAAQAAADj/xEAAAAaAAUAAADj/xIAAAAaAAYAAADj/xMAAAAaAAcAAADj/xQAAAAaAAgAAADk/xAAAAAbAAQAAADk/xEAAAAbAAUAAADk/xIAAAAbAAYAAADk/xMAAAAbAAcAAADk/xQAAAAbAAgAAADi/xUAAAAZAAQAAADi/xYAAAAZAAUAAADi/xcAAAAZAAYAAADi/xgAAAAZAAcAAADj/xUAAAAaAAQAAADj/xYAAAAaAAUAAADj/xcAAAAaAAYAAADj/xgAAAAaAAcAAADk/xUAAAAbAAQAAADk/xYAAAAbAAUAAADk/xcAAAAbAAYAAADk/xgAAAAbAAcAAADi/x8AAAAaAAMAAADi/yAAAAAZAAUAAADi/yEAAAAZAAYAAADi/yIAAAAZAAcAAADi/yMAAAAZAAgAAADj/x8AAAAbAAMAAADj/yAAAAAaAAUAAADj/yEAAAAaAAYAAADj/yIAAAAaAAcAAADj/yMAAAAaAAgAAADk/x8AAAAYAAMAAADk/yAAAAAbAAUAAADk/yEAAAAbAAYAAADk/yIAAAAbAAcAAADk/yMAAAAbAAgAAADi/yQAAAAZAAQAAADi/yUAAAAZAAUAAADi/yYAAAAZAAYAAADi/ycAAAAZAAcAAADi/ygAAAAZAAgAAADj/yQAAAAaAAQAAADj/yUAAAAaAAUAAADj/yYAAAAaAAYAAADj/ycAAAAaAAcAAADj/ygAAAAaAAgAAADk/yQAAAAbAAQAAADk/yUAAAAbAAUAAADk/yYAAAAbAAYAAADk/ycAAAAbAAcAAADk/ygAAAAbAAgAAADh/ykAAAAZAAcAAADh/yoAAAAYAAUAAADh/ysAAAAYAAYAAADh/ywAAAAYAAcAAADh/y0AAAAYAAgAAADi/ykAAAAZAAQAAADi/yoAAAAZAAUAAADi/ysAAAAZAAYAAADi/ywAAAAZAAcAAADi/y0AAAAZAAgAAADj/ykAAAAaAAQAAADj/yoAAAAaAAUAAADj/ysAAAAaAAYAAADj/ywAAAAaAAcAAADj/y0AAAAaAAgAAADk/ykAAAAbAAQAAADk/yoAAAAbAAUAAADk/ysAAAAbAAYAAADk/ywAAAAbAAcAAADk/y0AAAAbAAgAAADl/wsAAAAbAAgAAADl/wwAAAAYAAUAAADl/w0AAAAYAAYAAADl/w4AAAAYAAcAAADl/w8AAAAYAAgAAADm/wsAAAAYAAgAAADm/wwAAAAZAAUAAADm/w0AAAAZAAYAAADm/w4AAAAZAAcAAADm/w8AAAAZAAgAAADn/wsAAAAZAAgAAADn/wwAAAAaAAUAAADn/w0AAAAaAAYAAADn/w4AAAAaAAcAAADn/w8AAAAaAAgAAADo/wsAAAAZAAQAAADo/wwAAAAZAAUAAADo/w0AAAAZAAYAAADo/w4AAAAZAAcAAADo/w8AAAAZAAQAAADl/xAAAAAYAAQAAADl/xEAAAAYAAUAAADl/xIAAAAYAAYAAADl/xMAAAAYAAcAAADl/xQAAAAYAAgAAADm/xAAAAAZAAQAAADm/xEAAAAZAAUAAADm/xIAAAAZAAYAAADm/xMAAAAZAAcAAADm/xQAAAAZAAgAAADn/xAAAAAaAAQAAADn/xEAAAAaAAUAAADn/xIAAAAaAAYAAADn/xMAAAAaAAcAAADn/xQAAAAaAAgAAADo/xAAAAAZAAUAAADo/xEAAAAZAAYAAADo/xIAAAAZAAcAAADo/xMAAAAZAAQAAADo/xQAAAAZAAUAAADl/xUAAAAYAAQAAADl/xYAAAAYAAUAAADl/xcAAAAYAAYAAADl/xgAAAAYAAcAAADm/xUAAAAZAAQAAADm/xYAAAAZAAUAAADm/xcAAAAZAAYAAADm/xgAAAAZAAcAAADn/xUAAAAaAAQAAADn/xYAAAAaAAUAAADn/xcAAAAaAAYAAADn/xgAAAAaAAcAAADo/xUAAAAZAAYAAADo/xYAAAAZAAcAAADo/xcAAAAZAAQAAADo/xgAAAAZAAUAAADl/x8AAAAZAAMAAADl/yAAAAAYAAUAAADl/yEAAAAYAAYAAADl/yIAAAAYAAcAAADl/yMAAAAYAAgAAADm/x8AAAAaAAMAAADm/yAAAAAZAAUAAADm/yEAAAAZAAYAAADm/yIAAAAZAAcAAADm/yMAAAAZAAgAAADn/x8AAAAbAAMAAADn/yAAAAAaAAUAAADn/yEAAAAaAAYAAADn/yIAAAAaAAcAAADn/yMAAAAaAAgAAADo/x8AAAAbAAMAAADo/yAAAAAbAAUAAADo/yEAAAAbAAYAAADo/yIAAAAbAAcAAADo/yMAAAAbAAgAAADl/yQAAAAYAAQAAADl/yUAAAAYAAUAAADl/yYAAAAYAAYAAADl/ycAAAAYAAcAAADl/ygAAAAYAAgAAADm/yQAAAAZAAQAAADm/yUAAAAZAAUAAADm/yYAAAAZAAYAAADm/ycAAAAZAAcAAADm/ygAAAAZAAgAAADn/yQAAAAaAAQAAADn/yUAAAAaAAUAAADn/yYAAAAaAAYAAADn/ycAAAAaAAcAAADn/ygAAAAaAAgAAADo/yQAAAAbAAQAAADo/yUAAAAbAAUAAADo/yYAAAAbAAYAAADo/ycAAAAbAAcAAADo/ygAAAAbAAgAAADl/ykAAAAYAAQAAADl/yoAAAAYAAUAAADl/ysAAAAYAAYAAADl/ywAAAAYAAcAAADl/y0AAAAYAAgAAADm/ykAAAAZAAQAAADm/yoAAAAZAAUAAADm/ysAAAAZAAYAAADm/ywAAAAZAAcAAADm/y0AAAAZAAgAAADn/ykAAAAaAAQAAADn/yoAAAAaAAUAAADn/ysAAAAaAAYAAADn/ywAAAAaAAcAAADn/y0AAAAaAAgAAADo/ykAAAAbAAQAAADo/yoAAAAbAAUAAADo/ysAAAAbAAYAAADo/ywAAAAbAAcAAADo/y0AAAAbAAgAAACy/woAAAAYAAcAAACz/woAAAAZAAcAAAC0/woAAAAaAAcAAAC1/woAAAAbAAcAAAC2/woAAAAYAAcAAAC3/woAAAAZAAcAAAC4/woAAAAaAAcAAAC5/woAAAAbAAcAAAC6/woAAAAYAAcAAAC7/woAAAAZAAcAAAC8/woAAAAaAAcAAAC9/woAAAAbAAcAAAC+/woAAAAYAAcAAAC//woAAAAZAAcAAADA/woAAAAaAAcAAADB/woAAAAbAAcAAADC/woAAAAYAAcAAADD/woAAAAZAAcAAADE/woAAAAaAAcAAADF/woAAAAbAAcAAADG/woAAAAYAAcAAADH/woAAAAZAAcAAADI/woAAAAaAAcAAADQ/woAAAAaAAcAAADR/woAAAAbAAcAAADS/woAAAAYAAcAAADT/woAAAAZAAcAAADU/woAAAAaAAcAAADV/woAAAAbAAcAAADW/woAAAAYAAcAAADX/woAAAAZAAcAAADY/woAAAAaAAcAAADZ/woAAAAbAAcAAADa/woAAAAYAAcAAADb/woAAAAZAAcAAADc/woAAAAaAAcAAADd/woAAAAbAAcAAADe/woAAAAYAAcAAADf/woAAAAZAAcAAADg/woAAAAaAAcAAADh/woAAAAbAAcAAADi/woAAAAYAAcAAADj/woAAAAZAAcAAADk/woAAAAaAAcAAADl/woAAAAbAAcAAADm/woAAAAYAAcAAADn/woAAAAZAAcAAADo/woAAAAaAAcAAACy/wkAAAAYAAIAAACz/wkAAAAZAAIAAAC0/wkAAAAaAAIAAAC1/wkAAAAbAAIAAAC2/wkAAAAYAAIAAAC3/wkAAAAZAAIAAAC4/wkAAAAaAAIAAAC5/wkAAAAbAAIAAAC6/wkAAAAYAAIAAAC7/wkAAAAZAAIAAAC8/wkAAAAaAAIAAAC9/wkAAAAbAAIAAAC+/wkAAAAYAAIAAAC//wkAAAAZAAIAAADA/wkAAAAaAAIAAADB/wkAAAAbAAIAAADC/wkAAAAYAAIAAADD/wkAAAAZAAIAAADE/wkAAAAaAAIAAADF/wkAAAAbAAIAAADG/wkAAAAYAAIAAADH/wkAAAAZAAIAAADI/wkAAAAaAAIAAADQ/wkAAAAaAAIAAADR/wkAAAAbAAIAAADS/wkAAAAYAAIAAADT/wkAAAAZAAIAAADU/wkAAAAaAAIAAADV/wkAAAAbAAIAAADW/wkAAAAYAAIAAADX/wkAAAAZAAIAAADY/wkAAAAaAAIAAADZ/wkAAAAbAAIAAADa/wkAAAAYAAIAAADb/wkAAAAZAAIAAADc/wkAAAAaAAIAAADd/wkAAAAbAAIAAADe/wkAAAAYAAIAAADf/wkAAAAZAAIAAADg/wkAAAAaAAIAAADh/wkAAAAbAAIAAADi/wkAAAAYAAIAAADj/wkAAAAZAAIAAADk/wkAAAAaAAIAAADl/wkAAAAbAAIAAADm/wkAAAAYAAIAAADn/wkAAAAZAAIAAADo/wkAAAAaAAIAAADp/wkAAAAcAAIAAADp/woAAAAcAAMAAADp/wsAAAAcAAUAAADp/wwAAAAcAAYAAADp/w0AAAAcAAcAAADp/w4AAAAcAAgAAADp/w8AAAAcAAQAAADp/xAAAAAcAAUAAADp/xEAAAAcAAYAAADp/xIAAAAcAAcAAADp/xMAAAAcAAgAAADp/xQAAAAcAAQAAADp/xUAAAAcAAUAAADp/xYAAAAcAAYAAADp/xcAAAAcAAcAAADp/xgAAAAcAAgAAADp/x8AAAAcAAMAAADp/yAAAAAcAAYAAADp/yEAAAAcAAcAAADp/yIAAAAcAAgAAADp/yMAAAAcAAQAAADp/yQAAAAcAAUAAADp/yUAAAAcAAYAAADp/yYAAAAcAAcAAADp/ycAAAAcAAgAAADp/ygAAAAcAAQAAADp/ykAAAAcAAUAAADp/yoAAAAcAAYAAADp/ysAAAAcAAcAAADp/ywAAAAcAAgAAADp/y0AAAAcAAQAAADq/woAAAAdAAMAAADq/wsAAAAdAAUAAADq/wwAAAAdAAYAAADq/w0AAAAdAAcAAADq/w4AAAAdAAgAAADq/w8AAAAdAAQAAADq/xAAAAAdAAUAAADq/xEAAAAdAAYAAADq/xIAAAAdAAcAAADq/xMAAAAdAAgAAADq/xQAAAAdAAQAAADq/xUAAAAdAAUAAADq/xYAAAAdAAYAAADq/xcAAAAdAAcAAADq/xgAAAAdAAgAAADq/x8AAAAdAAUAAADq/yAAAAAdAAYAAADq/yEAAAAdAAcAAADq/yIAAAAdAAgAAADq/yMAAAAdAAQAAADq/yQAAAAdAAUAAADq/yUAAAAdAAYAAADq/yYAAAAdAAcAAADq/ycAAAAdAAgAAADq/ygAAAAdAAQAAADq/ykAAAAdAAUAAADq/yoAAAAdAAYAAADq/ysAAAAdAAcAAADq/ywAAAAdAAgAAADq/y0AAAAdAAQAAADq/wkAAAAdAAIAAACy/y4AAAAYAAkAAACy/y8AAAAYAAoAAACz/y4AAAAZAAkAAACz/y8AAAAZAAoAAAC0/y4AAAAaAAkAAAC0/y8AAAAaAAoAAAC1/y4AAAAbAAkAAAC1/y8AAAAbAAoAAAC2/y4AAAAYAAkAAAC2/y8AAAAYAAoAAAC3/y4AAAAZAAkAAAC3/y8AAAAZAAoAAAC4/y4AAAAaAAkAAAC4/y8AAAAaAAoAAAC5/y4AAAAbAAkAAAC5/y8AAAAbAAoAAAC6/y4AAAAYAAkAAAC6/y8AAAAYAAoAAAC7/y4AAAAZAAkAAAC7/y8AAAAZAAoAAAC8/y4AAAAaAAkAAAC8/y8AAAAaAAoAAAC9/y4AAAAYAAkAAAC9/y8AAAAYAAoAAAC+/y4AAAAZAAkAAAC+/y8AAAAZAAoAAAC//y4AAAAaAAkAAAC//y8AAAAaAAoAAADA/y4AAAAbAAkAAADA/y8AAAAbAAoAAADB/y4AAAAYAAkAAADB/y8AAAAYAAoAAADC/y4AAAAZAAkAAADC/y8AAAAZAAoAAADD/y4AAAAaAAkAAADD/y8AAAAaAAoAAADE/y4AAAAbAAkAAADE/y8AAAAbAAoAAADF/y4AAAAYAAkAAADF/y8AAAAYAAoAAADG/y4AAAAZAAkAAADG/y8AAAAZAAoAAADH/y4AAAAaAAkAAADH/y8AAAAaAAoAAADI/y8AAAAbAAoAAADQ/y4AAAAbAAkAAADQ/y8AAAAbAAoAAADR/y4AAAAYAAkAAADR/y8AAAAYAAoAAADS/y4AAAAZAAkAAADS/y8AAAAZAAoAAADT/y4AAAAaAAkAAADT/y8AAAAaAAoAAADU/y4AAAAbAAkAAADU/y8AAAAbAAoAAADV/y4AAAAYAAkAAADV/y8AAAAYAAoAAADW/y4AAAAZAAkAAADW/y8AAAAZAAoAAADX/y4AAAAaAAkAAADX/y8AAAAaAAoAAADY/y4AAAAbAAkAAADY/y8AAAAbAAoAAADZ/y4AAAAYAAkAAADZ/y8AAAAYAAoAAADa/y4AAAAZAAkAAADa/y8AAAAZAAoAAADb/y4AAAAaAAkAAADb/y8AAAAaAAoAAADc/y4AAAAbAAkAAADc/y8AAAAbAAoAAADd/y4AAAAYAAkAAADd/y8AAAAYAAoAAADe/y4AAAAZAAkAAADe/y8AAAAZAAoAAADf/y4AAAAaAAkAAADf/y8AAAAaAAoAAADg/y4AAAAbAAkAAADg/y8AAAAbAAoAAADh/y4AAAAYAAkAAADh/y8AAAAYAAoAAADi/y4AAAAZAAkAAADi/y8AAAAZAAoAAADj/y4AAAAaAAkAAADj/y8AAAAaAAoAAADk/y4AAAAbAAkAAADk/y8AAAAbAAoAAADl/y4AAAAYAAkAAADl/y8AAAAYAAoAAADm/y4AAAAZAAkAAADm/y8AAAAZAAoAAADn/y4AAAAaAAkAAADn/y8AAAAaAAoAAADo/y4AAAAbAAkAAADo/y8AAAAbAAoAAADp/y4AAAAcAAkAAADp/y8AAAAcAAoAAADq/y4AAAAdAAkAAADq/y8AAAAdAAoAAADI/y4AAAAbAAkAAADi/x4AAAAaAAIAAADj/x4AAAAbAAIAAADk/x4AAAAYAAIAAADl/x4AAAAZAAIAAADm/x4AAAAaAAIAAADn/x4AAAAbAAIAAADo/x4AAAAbAAIAAADp/x4AAAAcAAIAAADq/x4AAAAdAAIAAAC4/x4AAAAYAAIAAAC5/x4AAAAZAAIAAAC1/x4AAAAYAAIAAAC2/x4AAAAZAAIAAAC3/x4AAAAaAAIAAACy/x4AAAAYAAIAAACz/x4AAAAZAAIAAAC0/x4AAAAaAAIAAADJ/woAAAAdAAMAAADJ/wsAAAAdAAQAAADJ/wwAAAAdAAUAAADJ/w0AAAAdAAMAAADJ/w4AAAAdAAQAAADJ/w8AAAAdAAUAAADP/woAAAAWAAQAAADP/wsAAAAWAAUAAADP/wwAAAAWAAYAAADP/w0AAAAWAAQAAADP/w4AAAAWAAUAAADP/w8AAAAWAAYAAADJ/wkAAAAdAAIAAADP/wkAAAAWAAIAAAC5/ygAAAAYAAgAAAC5/ycAAAAcAAYAAAC5/yYAAAAcAAUAAAC5/yUAAAAcAAQAAAC5/yQAAAAcAAYAAAC5/yMAAAAcAAUAAAC5/yIAAAAcAAQAAAC5/yEAAAAcAAYAAAC5/yAAAAAcAAUAAAC5/x8AAAAcAAQAAADh/ycAAAAZAAUAAADh/ygAAAAZAAYAAADh/yQAAAAZAAUAAADh/yUAAAAZAAYAAADh/yYAAAAZAAcAAADh/yEAAAAZAAUAAADh/yIAAAAZAAYAAADh/yMAAAAZAAcAAADh/x8AAAAZAAYAAADh/yAAAAAZAAcAAADh/xcAAAAZAAUAAADh/xgAAAAZAAYAAADh/xQAAAAZAAUAAADh/xUAAAAZAAYAAADh/xYAAAAZAAcAAADh/xEAAAAZAAUAAADh/xIAAAAZAAYAAADh/xMAAAAZAAcAAADh/xAAAAAZAAcAAADh/x4AAAAYAAIAAADh/xkAAAAYAAoAAADi/xkAAAAZAAoAAADj/xkAAAAaAAoAAADk/xkAAAAYAAoAAADl/xkAAAAZAAoAAADm/xkAAAAaAAoAAADn/xkAAAAYAAoAAADo/xkAAAAZAAoAAADp/xkAAAAaAAoAAADq/xkAAAAdAAoAAACy/xkAAAAYAAoAAACz/xkAAAAZAAoAAAC0/xkAAAAaAAoAAAC1/xkAAAAYAAoAAAC2/xkAAAAZAAoAAAC3/xkAAAAYAAoAAAC4/xkAAAAZAAoAAAC5/xkAAAAaAAoAAAC6/xkAAAAdAAoAAAC6/xQAAAAdAAgAAAC6/xUAAAAdAAUAAAC6/xYAAAAdAAYAAAC6/xcAAAAdAAcAAAC6/xgAAAAdAAgAAAC6/xIAAAAdAAYAAAC6/xMAAAAdAAcAAAC6/w8AAAAUABAAAAC6/xAAAAAdAAkAAAC6/xEAAAAdAAQAAAC5/xAAAAAYAAgAAAC5/xEAAAAaAAYAAAC5/xIAAAAaAAcAAADg/xAAAAAWAAQAAADg/xEAAAAWAAUAAADg/xIAAAAWAAYAAADg/xMAAAAWAAQAAADg/xQAAAAWAAUAAADg/xUAAAAWAAYAAADg/xYAAAAWAAQAAADg/xcAAAAWAAUAAADg/xgAAAAWAAYAAADg/xkAAAAWAAoAAADg/x8AAAAWAAMAAADg/yAAAAAWAAQAAADg/yEAAAAWAAUAAADg/yIAAAAWAAYAAADg/yMAAAAWAAcAAADg/yQAAAAWAAMAAADg/yUAAAAWAAQAAADg/yYAAAAWAAUAAADg/ycAAAAWAAYAAADg/ygAAAAWAAcAAAC6/x8AAAAdAAQAAAC6/yAAAAAdAAUAAAC6/yEAAAAdAAYAAAC6/yIAAAAdAAQAAAC6/yMAAAAdAAUAAAC6/yQAAAAdAAYAAAC6/yUAAAAdAAQAAAC6/yYAAAAdAAUAAAC6/ycAAAAdAAYAAAC6/ygAAAAdAAUAAAC6/x4AAAAdAAIAAADg/x4AAAAWAAIAAADJ/ysAAAAdAAUAAADJ/ywAAAAdAAYAAADJ/y0AAAAdAAcAAADJ/y4AAAAdAAcAAADJ/yoAAAAdAAQAAADJ/ykAAAAdAAIAAADJ/y8AAAAdAAoAAADP/yoAAAAWAAYAAADP/ysAAAAWAAYAAADP/ywAAAAWAAYAAADP/y0AAAAWAAYAAADP/y4AAAAWAAYAAADP/ykAAAAWAAYAAADP/y8AAAAWAAoAAAA=") +tile_set = SubResource("TileSet_8l3nt") + +[node name="WaterFountain" type="TileMapLayer" parent="."] +y_sort_enabled = true +position = Vector2(32, 296) +scale = Vector2(1.2099657, 1.2099657) +tile_map_data = PackedByteArray("AAD//wIAAgABAAQAAAA=") +tile_set = SubResource("TileSet_y7y61") + +[node name="Guardrail" type="TileMapLayer" parent="."] +position = Vector2(-128, 12) +tile_map_data = PackedByteArray("AABYACsAAAAoAAoAAAAmACYAAAAZAAUAAAAmACcAAAAZAAYAAAAmACgAAAAZAAcAAAAmACkAAAAZAAgAAAAmACoAAAAZAAkAAAAmACsAAAAZAAoAAAAnACYAAAAaAAUAAAAnACcAAAAaAAYAAAAnACgAAAAaAAcAAAAnACkAAAAaAAgAAAAnACoAAAAaAAkAAAAnACsAAAAaAAoAAAAoACYAAAAbAAUAAAAoACcAAAAbAAYAAAAoACgAAAAbAAcAAAAoACkAAAAbAAgAAAAoACoAAAAbAAkAAAAoACsAAAAbAAoAAAApACYAAAAcAAUAAAApACcAAAAcAAYAAAApACgAAAAcAAcAAAApACkAAAAcAAgAAAApACoAAAAcAAkAAAApACsAAAAcAAoAAAAqACYAAAAdAAUAAAAqACcAAAAdAAYAAAAqACgAAAAdAAcAAAAqACkAAAAdAAgAAAAqACoAAAAdAAkAAAAqACsAAAAdAAoAAAArACYAAAAeAAUAAAArACcAAAAeAAYAAAArACgAAAAeAAcAAAArACkAAAAeAAgAAAArACoAAAAeAAkAAAArACsAAAAeAAoAAAAsACYAAAAfAAUAAAAsACcAAAAfAAYAAAAsACgAAAAfAAcAAAAsACkAAAAfAAgAAAAsACoAAAAfAAkAAAAsACsAAAAfAAoAAAAtACYAAAAgAAUAAAAtACcAAAAgAAYAAAAtACgAAAAgAAcAAAAtACkAAAAgAAgAAAAtACoAAAAgAAkAAAAtACsAAAAgAAoAAAAuACYAAAAhAAUAAAAuACcAAAAhAAYAAAAuACgAAAAhAAcAAAAuACkAAAAhAAgAAAAuACoAAAAhAAkAAAAuACsAAAAhAAoAAAAvACYAAAAiAAUAAAAvACcAAAAiAAYAAAAvACgAAAAiAAcAAAAvACkAAAAiAAgAAAAvACoAAAAiAAkAAAAvACsAAAAiAAoAAAAwACYAAAAjAAUAAAAwACcAAAAjAAYAAAAwACgAAAAjAAcAAAAwACkAAAAjAAgAAAAwACoAAAAjAAkAAAAwACsAAAAjAAoAAAAxACYAAAAkAAUAAAAxACcAAAAkAAYAAAAxACgAAAAkAAcAAAAxACkAAAAkAAgAAAAxACoAAAAkAAkAAAAxACsAAAAkAAoAAAAyACYAAAAlAAUAAAAyACcAAAAlAAYAAAAyACgAAAAlAAcAAAAyACkAAAAlAAgAAAAyACoAAAAlAAkAAAAyACsAAAAlAAoAAAAzACYAAAAmAAUAAAAzACcAAAAmAAYAAAAzACgAAAAmAAcAAAAzACkAAAAmAAgAAAAzACoAAAAmAAkAAAAzACsAAAAmAAoAAAA0ACYAAAAnAAUAAAA0ACcAAAAnAAYAAAA0ACgAAAAnAAcAAAA0ACkAAAAnAAgAAAA0ACoAAAAnAAkAAAA0ACsAAAAnAAoAAAA1ACYAAAAoAAUAAAA1ACcAAAAoAAYAAAA1ACgAAAAoAAcAAAA1ACkAAAAoAAgAAAA1ACoAAAAoAAkAAAA1ACsAAAAoAAoAAABGACYAAAApAAUAAABGACcAAAApAAYAAABGACgAAAApAAcAAABGACkAAAApAAgAAABGACoAAAApAAkAAABGACsAAAApAAoAAABGACwAAAApAAsAAABFACYAAAAoAAUAAABFACcAAAAoAAYAAABFACgAAAAoAAcAAABFACkAAAAoAAgAAABFACoAAAAoAAkAAABFACsAAAAoAAoAAABFACwAAAAoAAsAAABEACYAAAAnAAUAAABEACcAAAAnAAYAAABEACgAAAAnAAcAAABEACkAAAAnAAgAAABEACoAAAAnAAkAAABEACsAAAAnAAoAAABEACwAAAAnAAsAAABDACYAAAAmAAUAAABDACcAAAAmAAYAAABDACgAAAAmAAcAAABDACkAAAAmAAgAAABDACoAAAAmAAkAAABDACsAAAAmAAoAAABDACwAAAAmAAsAAABCACYAAAAlAAUAAABCACcAAAAlAAYAAABCACgAAAAlAAcAAABCACkAAAAlAAgAAABCACoAAAAlAAkAAABCACsAAAAlAAoAAABCACwAAAAlAAsAAABBACYAAAAkAAUAAABBACcAAAAkAAYAAABBACgAAAAkAAcAAABBACkAAAAkAAgAAABBACoAAAAkAAkAAABBACsAAAAkAAoAAABBACwAAAAkAAsAAABAACYAAAAjAAUAAABAACcAAAAjAAYAAABAACgAAAAjAAcAAABAACkAAAAjAAgAAABAACoAAAAjAAkAAABAACsAAAAjAAoAAABAACwAAAAjAAsAAAA/ACYAAAAiAAUAAAA/ACcAAAAiAAYAAAA/ACgAAAAiAAcAAAA/ACkAAAAiAAgAAAA/ACoAAAAiAAkAAAA/ACsAAAAiAAoAAAA/ACwAAAAiAAsAAAA+ACYAAAAhAAUAAAA+ACcAAAAhAAYAAAA+ACgAAAAhAAcAAAA+ACkAAAAhAAgAAAA+ACoAAAAhAAkAAAA+ACsAAAAhAAoAAAA+ACwAAAAhAAsAAAA9ACYAAAAgAAUAAAA9ACcAAAAgAAYAAAA9ACgAAAAgAAcAAAA9ACkAAAAgAAgAAAA9ACoAAAAgAAkAAAA9ACsAAAAgAAoAAAA9ACwAAAAgAAsAAAA8ACYAAAAfAAUAAAA8ACcAAAAfAAYAAAA8ACgAAAAfAAcAAAA8ACkAAAAfAAgAAAA8ACoAAAAfAAkAAAA8ACsAAAAfAAoAAAA8ACwAAAAfAAsAAAA7ACYAAAAeAAUAAAA7ACcAAAAeAAYAAAA7ACgAAAAeAAcAAAA7ACkAAAAeAAgAAAA7ACoAAAAeAAkAAAA7ACsAAAAeAAoAAAA7ACwAAAAeAAsAAAA6ACYAAAAdAAUAAAA6ACcAAAAdAAYAAAA6ACgAAAAdAAcAAAA6ACkAAAAdAAgAAAA6ACoAAAAdAAkAAAA6ACsAAAAdAAoAAAA6ACwAAAAdAAsAAAA5ACYAAAAcAAUAAAA5ACcAAAAcAAYAAAA5ACgAAAAcAAcAAAA5ACkAAAAcAAgAAAA5ACoAAAAcAAkAAAA5ACsAAAAcAAoAAAA5ACwAAAAcAAsAAAA4ACYAAAAbAAUAAAA4ACcAAAAbAAYAAAA4ACgAAAAbAAcAAAA4ACkAAAAbAAgAAAA4ACoAAAAbAAkAAAA4ACsAAAAbAAoAAAA4ACwAAAAbAAsAAAA3ACYAAAAaAAUAAAA3ACcAAAAaAAYAAAA3ACgAAAAaAAcAAAA3ACkAAAAaAAgAAAA3ACoAAAAaAAkAAAA3ACsAAAAaAAoAAAA3ACwAAAAaAAsAAAA2ACYAAAAZAAUAAAA2ACcAAAAZAAYAAAA2ACgAAAAZAAcAAAA2ACkAAAAZAAgAAAA2ACoAAAAZAAkAAAA2ACsAAAAZAAoAAAA2ACwAAAAZAAsAAABXACYAAAAnAAUAAABXACcAAAAnAAYAAABXACgAAAAnAAcAAABXACkAAAAnAAgAAABXACoAAAAnAAkAAABXACsAAAAnAAoAAABXACwAAAAnAAsAAABWACYAAAAmAAUAAABWACcAAAAmAAYAAABWACgAAAAmAAcAAABWACkAAAAmAAgAAABWACoAAAAmAAkAAABWACsAAAAmAAoAAABWACwAAAAmAAsAAABVACYAAAAlAAUAAABVACcAAAAlAAYAAABVACgAAAAlAAcAAABVACkAAAAlAAgAAABVACoAAAAlAAkAAABVACsAAAAlAAoAAABVACwAAAAlAAsAAABUACYAAAAkAAUAAABUACcAAAAkAAYAAABUACgAAAAkAAcAAABUACkAAAAkAAgAAABUACoAAAAkAAkAAABUACsAAAAkAAoAAABUACwAAAAkAAsAAABTACYAAAAjAAUAAABTACcAAAAjAAYAAABTACgAAAAjAAcAAABTACkAAAAjAAgAAABTACoAAAAjAAkAAABTACsAAAAjAAoAAABTACwAAAAjAAsAAABSACYAAAAiAAUAAABSACcAAAAiAAYAAABSACgAAAAiAAcAAABSACkAAAAiAAgAAABSACoAAAAiAAkAAABSACsAAAAiAAoAAABSACwAAAAiAAsAAABRACYAAAAhAAUAAABRACcAAAAhAAYAAABRACgAAAAhAAcAAABRACkAAAAhAAgAAABRACoAAAAhAAkAAABRACsAAAAhAAoAAABRACwAAAAhAAsAAABQACYAAAAgAAUAAABQACcAAAAgAAYAAABQACgAAAAgAAcAAABQACkAAAAgAAgAAABQACoAAAAgAAkAAABQACsAAAAgAAoAAABQACwAAAAgAAsAAABPACYAAAAfAAUAAABPACcAAAAfAAYAAABPACgAAAAfAAcAAABPACkAAAAfAAgAAABPACoAAAAfAAkAAABPACsAAAAfAAoAAABPACwAAAAfAAsAAABOACYAAAAeAAUAAABOACcAAAAeAAYAAABOACgAAAAeAAcAAABOACkAAAAeAAgAAABOACoAAAAeAAkAAABOACsAAAAeAAoAAABOACwAAAAeAAsAAABNACYAAAAdAAUAAABNACcAAAAdAAYAAABNACgAAAAdAAcAAABNACkAAAAdAAgAAABNACoAAAAdAAkAAABNACsAAAAdAAoAAABNACwAAAAdAAsAAABMACYAAAAcAAUAAABMACcAAAAcAAYAAABMACgAAAAcAAcAAABMACkAAAAcAAgAAABMACoAAAAcAAkAAABMACsAAAAcAAoAAABMACwAAAAcAAsAAABLACYAAAAbAAUAAABLACcAAAAbAAYAAABLACgAAAAbAAcAAABLACkAAAAbAAgAAABLACoAAAAbAAkAAABLACsAAAAbAAoAAABLACwAAAAbAAsAAABKACYAAAAaAAUAAABKACcAAAAaAAYAAABKACgAAAAaAAcAAABKACkAAAAaAAgAAABKACoAAAAaAAkAAABKACsAAAAaAAoAAABKACwAAAAaAAsAAABJACYAAAAZAAUAAABJACcAAAAZAAYAAABJACgAAAAZAAcAAABJACkAAAAZAAgAAABJACoAAAAZAAkAAABJACsAAAAZAAoAAABJACwAAAAZAAsAAABIACYAAAAaAAUAAABIACcAAAAaAAYAAABIACgAAAAaAAcAAABIACkAAAAaAAgAAABIACoAAAAaAAkAAABIACsAAAAaAAoAAABIACwAAAAaAAsAAABHACYAAAAZAAUAAABHACcAAAAZAAYAAABHACgAAAAZAAcAAABHACkAAAAZAAgAAABHACoAAAAZAAkAAABHACsAAAAZAAoAAABHACwAAAAZAAsAAABZACYAAAApAAUAAABZACcAAAApAAYAAABZACgAAAApAAcAAABZACkAAAApAAgAAABZACoAAAApAAkAAABZACsAAAApAAoAAABZACwAAAApAAsAAABYACYAAAAoAAUAAABYACcAAAAoAAYAAABYACgAAAAoAAcAAABYACkAAAAoAAgAAABYACoAAAAoAAkAAABYACwAAAAoAAsAAAA=") +tile_set = SubResource("TileSet_45d1s") + +[node name="Haystack" type="TileMapLayer" parent="."] +tile_map_data = PackedByteArray("AACx/+3/AAAAAAoAAACx/+7/AAAAAAsAAACx/+//AAAAAAwAAACx//D/AAAAAA0AAACx//H/AAAAAA4AAACx//L/AAAAAA8AAACx//P/AAAAABAAAACx//T/AAAAABEAAACx//X/AAAAABIAAACx//b/AAAAABMAAACx//f/AAAAABQAAACx//j/AAAAABUAAACx//n/AAAAABYAAACx//r/AAAAABcAAACx//v/AAAAABgAAACx//z/AAAAABkAAACx//3/AAAAABoAAACx//7/AAAAABsAAACx////AAAAABwAAACy/+3/AAABAAoAAACy/+7/AAABAAsAAACy/+//AAABAAwAAACy//D/AAABAA0AAACy//H/AAABAA4AAACy//L/AAABAA8AAACy//P/AAABABAAAACy//T/AAABABEAAACy//X/AAABABIAAACy//b/AAABABMAAACy//f/AAABABQAAACy//j/AAABABUAAACy//n/AAABABYAAACy//r/AAABABcAAACy//v/AAABABgAAACy//z/AAABABkAAACy//3/AAABABoAAACy//7/AAABABsAAACy////AAABABwAAACz/+3/AAACAAoAAACz/+7/AAACAAsAAACz/+//AAACAAwAAACz//D/AAACAA0AAACz//H/AAACAA4AAACz//L/AAACAA8AAACz//P/AAACABAAAACz//T/AAACABEAAACz//X/AAACABIAAACz//b/AAACABMAAACz//f/AAACABQAAACz//j/AAACABUAAACz//n/AAACABYAAACz//r/AAACABcAAACz//v/AAACABgAAACz//z/AAACABkAAACz//3/AAACABoAAACz//7/AAACABsAAACz////AAACABwAAAC0/+3/AAADAAoAAAC0/+7/AAADAAsAAAC0/+//AAADAAwAAAC0//D/AAADAA0AAAC0//H/AAADAA4AAAC0//L/AAADAA8AAAC0//P/AAADABAAAAC0//T/AAADABEAAAC0//X/AAADABIAAAC0//b/AAADABMAAAC0//f/AAADABQAAAC0//j/AAADABUAAAC0//n/AAADABYAAAC0//r/AAADABcAAAC0//v/AAADABgAAAC0//z/AAADABkAAAC0//3/AAADABoAAAC0//7/AAADABsAAAC0////AAADABwAAACx/9z/AAAAAAwAAACx/93/AAAAAA0AAACx/97/AAAAAA4AAACx/9//AAAAAA8AAACx/+D/AAAAABAAAACx/+H/AAAAABEAAACx/+L/AAAAABIAAACx/+P/AAAAABMAAACx/+T/AAAAABQAAACx/+X/AAAAABUAAACx/+b/AAAAABYAAACx/+f/AAAAABcAAACx/+j/AAAAABgAAACx/+n/AAAAABkAAACx/+r/AAAAABoAAACx/+v/AAAAABsAAACx/+z/AAAAABwAAACy/9z/AAABAAwAAACy/93/AAABAA0AAACy/97/AAABAA4AAACy/9//AAABAA8AAACy/+D/AAABABAAAACy/+H/AAABABEAAACy/+L/AAABABIAAACy/+P/AAABABMAAACy/+T/AAABABQAAACy/+X/AAABABUAAACy/+b/AAABABYAAACy/+f/AAABABcAAACy/+j/AAABABgAAACy/+n/AAABABkAAACy/+r/AAABABoAAACy/+v/AAABABsAAACy/+z/AAABABwAAACz/9z/AAACAAwAAACz/93/AAACAA0AAACz/97/AAACAA4AAACz/9//AAACAA8AAACz/+D/AAACABAAAACz/+H/AAACABEAAACz/+L/AAACABIAAACz/+P/AAACABMAAACz/+T/AAACABQAAACz/+X/AAACABUAAACz/+b/AAACABYAAACz/+f/AAACABcAAACz/+j/AAACABgAAACz/+n/AAACABkAAACz/+r/AAACABoAAACz/+v/AAACABsAAACz/+z/AAACABwAAAC0/9z/AAADAAwAAAC0/93/AAADAA0AAAC0/97/AAADAA4AAAC0/9//AAADAA8AAAC0/+D/AAADABAAAAC0/+H/AAADABEAAAC0/+L/AAADABIAAAC0/+P/AAADABMAAAC0/+T/AAADABQAAAC0/+X/AAADABUAAAC0/+b/AAADABYAAAC0/+f/AAADABcAAAC0/+j/AAADABgAAAC0/+n/AAADABkAAAC0/+r/AAADABoAAAC0/+v/AAADABsAAAC0/+z/AAADABwAAAC2/9z/AAAEABQAAAC2/93/AAAEABUAAAC2/97/AAAEABYAAAC2/9//AAAEABcAAAC3/9z/AAAFABQAAAC3/93/AAAFABUAAAC3/97/AAAFABYAAAC3/9//AAAFABcAAAC4/9z/AAAGABQAAAC4/93/AAAGABUAAAC4/97/AAAGABYAAAC4/9//AAAGABcAAAC5/9z/AAAHABQAAAC5/93/AAAHABUAAAC5/97/AAAHABYAAAC5/9//AAAHABcAAAC6/9z/AAAIABQAAAC6/93/AAAIABUAAAC6/97/AAAIABYAAAC6/9//AAAIABcAAAC7/9z/AAAJABQAAAC7/93/AAAJABUAAAC7/97/AAAJABYAAAC7/9//AAAJABcAAAC8/9z/AAAKABQAAAC8/93/AAAKABUAAAC8/97/AAAKABYAAAC8/9//AAAKABcAAAC9/9z/AAALABQAAAC9/93/AAALABUAAAC9/97/AAALABYAAAC9/9//AAALABcAAAC+/9z/AAAMABQAAAC+/93/AAAMABUAAAC+/97/AAAMABYAAAC+/9//AAAMABcAAAC//9z/AAANABQAAAC//93/AAANABUAAAC//97/AAANABYAAAC//9//AAANABcAAADA/9z/AAAOABQAAADA/93/AAAOABUAAADA/97/AAAOABYAAADA/9//AAAOABcAAADB/9z/AAAPABQAAADB/93/AAAPABUAAADB/97/AAAPABYAAADB/9//AAAPABcAAADD/9z/AAAEAA8AAADD/93/AAAEABAAAADD/97/AAAEABEAAADD/9//AAAEABIAAADE/9z/AAAFAA8AAADE/93/AAAFABAAAADE/97/AAAFABEAAADE/9//AAAFABIAAADF/9z/AAAGAA8AAADF/93/AAAGABAAAADF/97/AAAGABEAAADF/9//AAAGABIAAADG/9z/AAAHAA8AAADG/93/AAAHABAAAADG/97/AAAHABEAAADG/9//AAAHABIAAADI/9z/AAAEABQAAADI/93/AAAEABUAAADI/97/AAAEABYAAADI/9//AAAEABcAAADJ/9z/AAAFABQAAADJ/93/AAAFABUAAADJ/97/AAAFABYAAADJ/9//AAAFABcAAADK/9z/AAAGABQAAADK/93/AAAGABUAAADK/97/AAAGABYAAADK/9//AAAGABcAAADL/9z/AAAHABQAAADL/93/AAAHABUAAADL/97/AAAHABYAAADL/9//AAAHABcAAADM/9z/AAAIABQAAADM/93/AAAIABUAAADM/97/AAAIABYAAADM/9//AAAIABcAAADN/9z/AAAJABQAAADN/93/AAAJABUAAADN/97/AAAJABYAAADN/9//AAAJABcAAADO/9z/AAAKABQAAADO/93/AAAKABUAAADO/97/AAAKABYAAADO/9//AAAKABcAAADP/9z/AAALABQAAADP/93/AAALABUAAADP/97/AAALABYAAADP/9//AAALABcAAADQ/9z/AAAMABQAAADQ/93/AAAMABUAAADQ/97/AAAMABYAAADQ/9//AAAMABcAAADR/9z/AAANABQAAADR/93/AAANABUAAADR/97/AAANABYAAADR/9//AAANABcAAADS/9z/AAAOABQAAADS/93/AAAOABUAAADS/97/AAAOABYAAADS/9//AAAOABcAAADT/9z/AAAPABQAAADT/93/AAAPABUAAADT/97/AAAPABYAAADT/9//AAAPABcAAADV/9z/AAAJABAAAADV/93/AAAJABEAAADV/97/AAAJABIAAADW/9z/AAAKABAAAADW/93/AAAKABEAAADW/97/AAAKABIAAADX/9z/AAALABAAAADX/93/AAALABEAAADX/97/AAALABIAAADY/9//AAAAABwAAHDZ/9//AAAAABsAAHDa/9//AAAAABoAAHDb/9//AAAAABkAAHDc/9//AAAAABgAAHDd/9//AAAAABcAAHDe/9//AAAAABYAAHDf/9//AAAAABUAAHDg/9//AAAAABQAAHDh/9//AAAAABMAAHDi/9//AAAAABIAAHDj/9//AAAAABEAAHDk/9//AAAAABAAAHDl/9//AAAAAA8AAHDm/9//AAAAAA4AAHDn/9//AAAAAA0AAHDo/9//AAAAAAwAAHDp/9//AAAAAAsAAHDq/9//AAAAAAoAAHDY/97/AAABABwAAHDZ/97/AAABABsAAHDa/97/AAABABoAAHDb/97/AAABABkAAHDc/97/AAABABgAAHDd/97/AAABABcAAHDe/97/AAABABYAAHDf/97/AAABABUAAHDg/97/AAABABQAAHDh/97/AAABABMAAHDi/97/AAABABIAAHDj/97/AAABABEAAHDk/97/AAABABAAAHDl/97/AAABAA8AAHDm/97/AAABAA4AAHDn/97/AAABAA0AAHDo/97/AAABAAwAAHDp/97/AAABAAsAAHDq/97/AAABAAoAAHDY/93/AAACABwAAHDZ/93/AAACABsAAHDa/93/AAACABoAAHDb/93/AAACABkAAHDc/93/AAACABgAAHDd/93/AAACABcAAHDe/93/AAACABYAAHDf/93/AAACABUAAHDg/93/AAACABQAAHDh/93/AAACABMAAHDi/93/AAACABIAAHDj/93/AAACABEAAHDk/93/AAACABAAAHDl/93/AAACAA8AAHDm/93/AAACAA4AAHDn/93/AAACAA0AAHDo/93/AAACAAwAAHDp/93/AAACAAsAAHDq/93/AAACAAoAAHDY/9z/AAADABwAAHDZ/9z/AAADABsAAHDa/9z/AAADABoAAHDb/9z/AAADABkAAHDc/9z/AAADABgAAHDd/9z/AAADABcAAHDe/9z/AAADABYAAHDf/9z/AAADABUAAHDg/9z/AAADABQAAHDh/9z/AAADABMAAHDi/9z/AAADABIAAHDj/9z/AAADABEAAHDk/9z/AAADABAAAHDl/9z/AAADAA8AAHDm/9z/AAADAA4AAHDn/9z/AAADAA0AAHDo/9z/AAADAAwAAHDp/9z/AAADAAsAAHDq/9z/AAADAAoAAHDs/9z/AAAAAAYAAADs/93/AAAAAAcAAADs/97/AAAAAAgAAADs/9//AAAAAAkAAADt/9z/AAABAAYAAADt/93/AAABAAcAAADt/97/AAABAAgAAADt/9//AAABAAkAAADu/9z/AAACAAYAAADu/93/AAACAAcAAADu/97/AAACAAgAAADu/9//AAACAAkAAADv/9z/AAADAAYAAADv/93/AAADAAcAAADv/97/AAADAAgAAADv/9//AAADAAkAAADw/9z/AAAEAAYAAADw/93/AAAEAAcAAADw/97/AAAEAAgAAADw/9//AAAEAAkAAADx/9z/AAAFAAYAAADx/93/AAAFAAcAAADx/97/AAAFAAgAAADx/9//AAAFAAkAAADy/9z/AAAGAAYAAADy/93/AAAGAAcAAADy/97/AAAGAAgAAADy/9//AAAGAAkAAADz/9z/AAAHAAYAAADz/93/AAAHAAcAAADz/97/AAAHAAgAAADz/9//AAAHAAkAAAD0/9z/AAAIAAYAAAD0/93/AAAIAAcAAAD0/97/AAAIAAgAAAD0/9//AAAIAAkAAAD1/9z/AAAJAAYAAAD1/93/AAAJAAcAAAD1/97/AAAJAAgAAAD1/9//AAAJAAkAAAD2/9z/AAAKAAYAAAD2/93/AAAKAAcAAAD2/97/AAAKAAgAAAD2/9//AAAKAAkAAAD3/9z/AAALAAYAAAD3/93/AAALAAcAAAD3/97/AAALAAgAAAD3/9//AAALAAkAAAD4/9z/AAAMAAYAAAD4/93/AAAMAAcAAAD4/97/AAAMAAgAAAD4/9//AAAMAAkAAAD5/9z/AAANAAYAAAD5/93/AAANAAcAAAD5/97/AAANAAgAAAD5/9//AAANAAkAAAD6/9z/AAAOAAYAAAD6/93/AAAOAAcAAAD6/97/AAAOAAgAAAD6/9//AAAOAAkAAAD7/9z/AAAPAAYAAAD7/93/AAAPAAcAAAD7/97/AAAPAAgAAAD7/9//AAAPAAkAAAATANz/AAAAAAYAABASANz/AAABAAYAABARANz/AAACAAYAABAQANz/AAADAAYAABAPANz/AAAEAAYAABAOANz/AAAFAAYAABANANz/AAAGAAYAABAMANz/AAAHAAYAABALANz/AAAIAAYAABAKANz/AAAJAAYAABAJANz/AAAKAAYAABAIANz/AAALAAYAABAHANz/AAAMAAYAABAGANz/AAANAAYAABAFANz/AAAOAAYAABAEANz/AAAPAAYAABATAN3/AAAAAAcAABASAN3/AAABAAcAABARAN3/AAACAAcAABAQAN3/AAADAAcAABAPAN3/AAAEAAcAABAOAN3/AAAFAAcAABANAN3/AAAGAAcAABAMAN3/AAAHAAcAABALAN3/AAAIAAcAABAKAN3/AAAJAAcAABAJAN3/AAAKAAcAABAIAN3/AAALAAcAABAHAN3/AAAMAAcAABAGAN3/AAANAAcAABAFAN3/AAAOAAcAABAEAN3/AAAPAAcAABATAN7/AAAAAAgAABASAN7/AAABAAgAABARAN7/AAACAAgAABAQAN7/AAADAAgAABAPAN7/AAAEAAgAABAOAN7/AAAFAAgAABANAN7/AAAGAAgAABAMAN7/AAAHAAgAABALAN7/AAAIAAgAABAKAN7/AAAJAAgAABAJAN7/AAAKAAgAABAIAN7/AAALAAgAABAHAN7/AAAMAAgAABAGAN7/AAANAAgAABAFAN7/AAAOAAgAABAEAN7/AAAPAAgAABATAN//AAAAAAkAABASAN//AAABAAkAABARAN//AAACAAkAABAQAN//AAADAAkAABAPAN//AAAEAAkAABAOAN//AAAFAAkAABANAN//AAAGAAkAABAMAN//AAAHAAkAABALAN//AAAIAAkAABAKAN//AAAJAAkAABAJAN//AAAKAAkAABAIAN//AAALAAkAABAHAN//AAAMAAkAABAGAN//AAANAAkAABAFAN//AAAOAAkAABAEAN//AAAPAAkAABDU/woAAAAEABQAAADU/wsAAAAEABUAAADU/wwAAAAEABYAAADU/w0AAAAEABcAAADV/woAAAAFABQAAADV/wsAAAAFABUAAADV/wwAAAAFABYAAADV/w0AAAAFABcAAADW/woAAAAGABQAAADW/wsAAAAGABUAAADW/wwAAAAGABYAAADW/w0AAAAGABcAAADX/woAAAAHABQAAADX/wsAAAAHABUAAADX/wwAAAAHABYAAADX/w0AAAAHABcAAADY/woAAAAIABQAAADY/wsAAAAIABUAAADY/wwAAAAIABYAAADY/w0AAAAIABcAAADZ/woAAAAJABQAAADZ/wsAAAAJABUAAADZ/wwAAAAJABYAAADZ/w0AAAAJABcAAADa/woAAAAKABQAAADa/wsAAAAKABUAAADa/wwAAAAKABYAAADa/w0AAAAKABcAAADb/woAAAALABQAAADb/wsAAAALABUAAADb/wwAAAALABYAAADb/w0AAAALABcAAADc/woAAAAMABQAAADc/wsAAAAMABUAAADc/wwAAAAMABYAAADc/w0AAAAMABcAAADd/woAAAANABQAAADd/wsAAAANABUAAADd/wwAAAANABYAAADd/w0AAAANABcAAADe/woAAAAOABQAAADe/wsAAAAOABUAAADe/wwAAAAOABYAAADe/w0AAAAOABcAAADf/woAAAAPABQAAADf/wsAAAAPABUAAADf/wwAAAAPABYAAADf/w0AAAAPABcAAAC6/woAAAAEABQAAAC6/wsAAAAEABUAAAC6/wwAAAAEABYAAAC6/w0AAAAEABcAAAC7/woAAAAFABQAAAC7/wsAAAAFABUAAAC7/wwAAAAFABYAAAC7/w0AAAAFABcAAAC8/woAAAAGABQAAAC8/wsAAAAGABUAAAC8/wwAAAAGABYAAAC8/w0AAAAGABcAAAC9/woAAAAHABQAAAC9/wsAAAAHABUAAAC9/wwAAAAHABYAAAC9/w0AAAAHABcAAAC+/woAAAAIABQAAAC+/wsAAAAIABUAAAC+/wwAAAAIABYAAAC+/w0AAAAIABcAAAC//woAAAAJABQAAAC//wsAAAAJABUAAAC//wwAAAAJABYAAAC//w0AAAAJABcAAADA/woAAAAKABQAAADA/wsAAAAKABUAAADA/wwAAAAKABYAAADA/w0AAAAKABcAAADB/woAAAALABQAAADB/wsAAAALABUAAADB/wwAAAALABYAAADB/w0AAAALABcAAADC/woAAAAMABQAAADC/wsAAAAMABUAAADC/wwAAAAMABYAAADC/w0AAAAMABcAAADD/woAAAANABQAAADD/wsAAAANABUAAADD/wwAAAANABYAAADD/w0AAAANABcAAADE/woAAAAOABQAAADE/wsAAAAOABUAAADE/wwAAAAOABYAAADE/w0AAAAOABcAAADF/woAAAAPABQAAADF/wsAAAAPABUAAADF/wwAAAAPABYAAADF/w0AAAAPABcAAAC0/xAAAAAEAA8AAAC0/xEAAAAEABAAAAC0/xIAAAAEABEAAAC0/xMAAAAEABIAAAC1/xAAAAAFAA8AAAC1/xEAAAAFABAAAAC1/xIAAAAFABEAAAC1/xMAAAAFABIAAAC2/xAAAAAGAA8AAAC2/xEAAAAGABAAAAC2/xIAAAAGABEAAAC2/xMAAAAGABIAAAC3/xAAAAAHAA8AAAC3/xEAAAAHABAAAAC3/xIAAAAHABEAAAC3/xMAAAAHABIAAAC0/xUAAAAEAA8AAAC0/xYAAAAEABAAAAC0/xcAAAAEABEAAAC0/xgAAAAEABIAAAC1/xUAAAAFAA8AAAC1/xYAAAAFABAAAAC1/xcAAAAFABEAAAC1/xgAAAAFABIAAAC2/xUAAAAGAA8AAAC2/xYAAAAGABAAAAC2/xcAAAAGABEAAAC2/xgAAAAGABIAAAC3/xUAAAAHAA8AAAC3/xYAAAAHABAAAAC3/xcAAAAHABEAAAC3/xgAAAAHABIAAADj/xAAAAAEAA8AAADj/xEAAAAEABAAAADj/xIAAAAEABEAAADj/xMAAAAEABIAAADk/xAAAAAFAA8AAADk/xEAAAAFABAAAADk/xIAAAAFABEAAADk/xMAAAAFABIAAADl/xAAAAAGAA8AAADl/xEAAAAGABAAAADl/xIAAAAGABEAAADl/xMAAAAGABIAAADm/xAAAAAHAA8AAADm/xEAAAAHABAAAADm/xIAAAAHABEAAADm/xMAAAAHABIAAADj/xUAAAAEAA8AAADj/xYAAAAEABAAAADj/xcAAAAEABEAAADj/xgAAAAEABIAAADk/xUAAAAFAA8AAADk/xYAAAAFABAAAADk/xcAAAAFABEAAADk/xgAAAAFABIAAADl/xUAAAAGAA8AAADl/xYAAAAGABAAAADl/xcAAAAGABEAAADl/xgAAAAGABIAAADm/xUAAAAHAA8AAADm/xYAAAAHABAAAADm/xcAAAAHABEAAADm/xgAAAAHABIAAAA=") +tile_set = SubResource("TileSet_mvfa8") + +[node name="Road" type="TileMapLayer" parent="Haystack"] +tile_map_data = PackedByteArray("AADK////AQAPAA8AAGDK//7/AQAQAA8AAGDK//3/AQARAA8AAGDK//z/AQASAA8AAGDK//v/AQATAA8AAGDK//r/AQAUAA8AAGDK//n/AQAVAA8AAGDL////AQAPABAAAGDL//7/AQAQABAAAGDL//3/AQARABAAAGDL//z/AQASABAAAGDL//v/AQATABAAAGDL//r/AQAUABAAAGDL//n/AQAVABAAAGDM////AQAPABAAAGDM//7/AQAQABAAAGDM//3/AQARABAAAGDM//z/AQASABAAAGDM//v/AQATABAAAGDM//r/AQAUABAAAGDM//n/AQAVABAAAGDO//n/AQAVAA8AAHDN//n/AQAVABAAAHDO//r/AQAUAA8AAHDN//r/AQAUABAAAHDO//v/AQATAA8AAHDN//v/AQATABAAAHDO//z/AQASAA8AAHDN//z/AQASABAAAHDO//3/AQARAA8AAHDN//3/AQARABAAAHDO//7/AQAQAA8AAHDN//7/AQAQABAAAHDO////AQAPAA8AAHDN////AQAPABAAAHDK//j/AQAQAA8AAGDK//f/AQARAA8AAGDK//b/AQASAA8AAGDK//X/AQATAA8AAGDK//T/AQAUAA8AAGDK//P/AQAVAA8AAGDL//j/AQAQABAAAGDL//f/AQARABAAAGDL//b/AQASABAAAGDL//X/AQATABAAAGDL//T/AQAUABAAAGDL//P/AQAVABAAAGDK//L/AQAQAA8AAGDK//H/AQARAA8AAGDK//D/AQASAA8AAGDK/+//AQATAA8AAGDK/+7/AQAUAA8AAGDK/+3/AQAVAA8AACDL//L/AQAQABAAAGDL//H/AQARABAAAGDL//D/AQASABAAAGDL/+//AQATABAAAGDL/+7/AQAUABAAAGDL/+3/AQAVABAAAGDM//j/AQAQABAAAGDM//f/AQARABAAAGDM//b/AQASABAAAGDM//X/AQATABAAAGDM//T/AQAUABAAAGDM//P/AQAVABAAAGDM//L/AQAQABAAAGDM//H/AQARABAAAGDM//D/AQASABAAAGDM/+//AQATABAAAGDM/+7/AQAUABAAAGDM/+3/AQAVABAAAGDO//P/AQAQABAAAADN//P/AQAVABAAAHDO//T/AQAQABAAACDN//T/AQAUABAAAHDO//X/AQAQAA8AACDN//X/AQATABAAAHDO//b/AQASAA8AAHDN//b/AQASABAAAHDO//f/AQARAA8AAHDN//f/AQARABAAAHDO//j/AQAQAA8AAHDN//j/AQAQABAAAHDO/+3/AQAVAA8AAHDN/+3/AQAVABAAAHDO/+7/AQAUAA8AAHDN/+7/AQAUABAAAHDO/+//AQATAA8AAHDN/+//AQATABAAAHDO//D/AQASAA8AAHDN//D/AQASABAAAHDO//H/AQAQAA8AAADN//H/AQARABAAAHDO//L/AQAQABAAAADN//L/AQAQABAAAHDT//T/AQAVABAAACDT//X/AQAVAA8AACDS//T/AQAUABAAACDS//X/AQAUAA8AACDR//T/AQATABAAACDR//X/AQATAA8AACDQ//T/AQASABAAACDQ//X/AQASAA8AACDP//T/AQARABAAACDP//X/AQARAA8AACDZ//T/AQAVABAAACDZ//X/AQAVAA8AACDY//T/AQAUABAAACDY//X/AQAUAA8AACDX//T/AQATABAAACDX//X/AQATAA8AACDW//T/AQASABAAACDW//X/AQASAA8AACDV//T/AQARABAAACDV//X/AQARAA8AACDU//T/AQAQABAAACDU//X/AQAQAA8AACDf//T/AQAVABAAACDf//X/AQAVAA8AACDe//T/AQAUABAAACDe//X/AQAUAA8AACDd//T/AQATABAAACDd//X/AQATAA8AACDc//T/AQASABAAACDc//X/AQASAA8AACDb//T/AQARABAAACDb//X/AQARAA8AACDa//T/AQAQABAAACDa//X/AQAQAA8AACDP//P/AQARABAAAADQ//P/AQASABAAAADR//P/AQATABAAAADS//P/AQAUABAAAADT//P/AQAVABAAAADU//P/AQAQABAAAADV//P/AQARABAAAADW//P/AQASABAAAADX//P/AQATABAAAADY//P/AQAUABAAAADZ//P/AQAVABAAAADa//P/AQAQABAAAADb//P/AQARABAAAADc//P/AQASABAAAADd//P/AQATABAAAADe//P/AQAUABAAAADf//P/AQAVABAAAADP//H/AQARAA8AAADP//L/AQARABAAAADQ//H/AQASAA8AAADQ//L/AQASABAAAADR//H/AQATAA8AAADR//L/AQATABAAAADS//H/AQAUAA8AAADS//L/AQAUABAAAADT//H/AQAVAA8AAADT//L/AQAVABAAAADU//H/AQAQAA8AAADU//L/AQAQABAAAADV//H/AQARAA8AAADV//L/AQARABAAAADW//H/AQASAA8AAADW//L/AQASABAAAADX//H/AQATAA8AAADX//L/AQATABAAAADY//H/AQAUAA8AAADY//L/AQAUABAAAADZ//H/AQAVAA8AAADZ//L/AQAVABAAAADa//H/AQAQAA8AAADa//L/AQAQABAAAADb//H/AQARAA8AAADb//L/AQARABAAAADc//H/AQASAA8AAADc//L/AQASABAAAADd//H/AQATAA8AAADd//L/AQATABAAAADe//H/AQAUAA8AAADe//L/AQAUABAAAADf//H/AQAVAA8AAADf//L/AQAVABAAAADF/+3/AQAQAA8AACDG/+3/AQARAA8AACDH/+3/AQASAA8AACDI/+3/AQATAA8AACDJ/+3/AQAUAA8AACDF/+z/AQAQABAAACDG/+z/AQARABAAACDH/+z/AQASABAAACDI/+z/AQATABAAACDJ/+z/AQAUABAAACDK/+z/AQAVABAAACC//+3/AQAQAA8AACDA/+3/AQARAA8AACDB/+3/AQASAA8AACDC/+3/AQATAA8AACDD/+3/AQAUAA8AACDE/+3/AQAVAA8AACC//+z/AQAQABAAACDA/+z/AQARABAAACDB/+z/AQASABAAACDC/+z/AQATABAAACDD/+z/AQAUABAAACDE/+z/AQAVABAAACC//+v/AQAQABAAAADA/+v/AQARABAAAADB/+v/AQASABAAAADC/+v/AQATABAAAADD/+v/AQAUABAAAADE/+v/AQAVABAAAADF/+v/AQAQABAAAADG/+v/AQARABAAAADH/+v/AQASABAAAADI/+v/AQATABAAAADJ/+v/AQAUABAAAADK/+v/AQAVABAAAAC//+r/AQAQABAAAAC//+n/AQAQAA8AAADA/+r/AQARABAAAADA/+n/AQARAA8AAADB/+r/AQASABAAAADB/+n/AQASAA8AAADC/+r/AQATABAAAADC/+n/AQATAA8AAADD/+r/AQAUABAAAADD/+n/AQAUAA8AAADE/+r/AQAVABAAAADE/+n/AQAVAA8AAADF/+r/AQAQABAAAADF/+n/AQAQAA8AAADG/+r/AQARABAAAADG/+n/AQARAA8AAADH/+r/AQASABAAAADH/+n/AQASAA8AAADI/+r/AQATABAAAADI/+n/AQATAA8AAADJ/+r/AQAUABAAAADJ/+n/AQAUAA8AAADK/+r/AQAVABAAAADK/+n/AQAVAA8AAADL/+z/AQATABAAAGDL/+v/AQAUABAAAGDL/+r/AQAVABAAAGDM/+z/AQATABAAAGDM/+v/AQAUABAAAGDM/+r/AQAVABAAAGDN/+z/AQATABAAAGDN/+v/AQAUABAAAGDN/+r/AQAVABAAAGDO/+v/AQAUAA8AAFDO/+z/AQAVAA8AAFDO/+n/AQAWAA8AAADO/+r/AQAVAA8AAFDL/+n/AQASAA8AAADM/+n/AQASAA8AAADN/+n/AQASAA8AAAA=") +tile_set = SubResource("TileSet_b5aes") + +[node name="Community" type="TileMapLayer" parent="."] +position = Vector2(93, -29.000002) +scale = Vector2(1.0944023, 1.2205348) +tile_map_data = PackedByteArray("AAAWAOT/AQAIAA0AAAAWAOX/AQAIAA4AAAAWAOb/AQAIAA8AAAAWAOf/AQAIABAAAAAWAOj/AQAIABEAAAAWAOn/AQAIABIAAAAWAOr/AQAIABMAAAAWAOv/AQAIABQAAAAWAOz/AQAIABUAAAAWAO3/AQAIABYAAAAWAO7/AQAIABcAAAAWAO//AQAIABgAAAAWAPD/AQAIABkAAAAWAPH/AQAIABoAAAAWAPL/AQAIABsAAAAWAPP/AQAIABwAAAAWAPT/AQAIAB0AAAAWAPX/AQAIAB4AAAAWAPb/AQAIAB8AAAAWAPf/AQAIACAAAAAWAPj/AQAIACEAAAAWAPn/AQAIACIAAAAWAPr/AQAIACMAAAAWAPv/AQAIACQAAAAWAPz/AQAIACUAAAAWAP3/AQAIACYAAAAWAP7/AQAIACcAAAAWAP//AQAIACgAAAAWAAAAAQAIACkAAAAWAAEAAQAIACoAAAAWAAIAAQAIACsAAAAWAAMAAQAIACwAAAAWAAQAAQAIAC0AAAAWAAUAAQAIAC4AAAAWAAYAAQAIAC8AAAAWAAcAAQAIADAAAAAWAAgAAQAIADEAAAAWAAkAAQAIADIAAAAWAAoAAQAIADMAAAAWAAsAAQAIADQAAAAWAAwAAQAIADUAAAAWAA0AAQAIADYAAAAWAA4AAQAIADcAAAAWAA8AAQAIADgAAAAWABAAAQAIADkAAAAXAOT/AQAJAA0AAAAXAOX/AQAJAA4AAAAXAOb/AQAJAA8AAAAXAOf/AQAJABAAAAAXAOj/AQAJABEAAAAXAOn/AQAJABIAAAAXAOr/AQAJABMAAAAXAOv/AQAJABQAAAAXAOz/AQAJABUAAAAXAO3/AQAJABYAAAAXAO7/AQAJABcAAAAXAO//AQAJABgAAAAXAPD/AQAJABkAAAAXAPH/AQAJABoAAAAXAPL/AQAJABsAAAAXAPP/AQAJABwAAAAXAPT/AQAJAB0AAAAXAPX/AQAJAB4AAAAXAPb/AQAJAB8AAAAXAPf/AQAJACAAAAAXAPj/AQAJACEAAAAXAPn/AQAJACIAAAAXAPr/AQAJACMAAAAXAPv/AQAJACQAAAAXAPz/AQAJACUAAAAXAP3/AQAJACYAAAAXAP7/AQAJACcAAAAXAP//AQAJACgAAAAXAAAAAQAJACkAAAAXAAEAAQAJACoAAAAXAAIAAQAJACsAAAAXAAMAAQAJACwAAAAXAAQAAQAJAC0AAAAXAAUAAQAJAC4AAAAXAAYAAQAJAC8AAAAXAAcAAQAJADAAAAAXAAgAAQAJADEAAAAXAAkAAQAJADIAAAAXAAoAAQAJADMAAAAXAAsAAQAJADQAAAAXAAwAAQAJADUAAAAXAA0AAQAJADYAAAAXAA4AAQAJADcAAAAXAA8AAQAJADgAAAAXABAAAQAJADkAAAAYAOT/AQAKAA0AAAAYAOX/AQAKAA4AAAAYAOb/AQAKAA8AAAAYAOf/AQAKABAAAAAYAOj/AQAKABEAAAAYAOn/AQAKABIAAAAYAOr/AQAKABMAAAAYAOv/AQAKABQAAAAYAOz/AQAKABUAAAAYAO3/AQAKABYAAAAYAO7/AQAKABcAAAAYAO//AQAKABgAAAAYAPD/AQAKABkAAAAYAPH/AQAKABoAAAAYAPL/AQAKABsAAAAYAPP/AQAKABwAAAAYAPT/AQAKAB0AAAAYAPX/AQAKAB4AAAAYAPb/AQAKAB8AAAAYAPf/AQAKACAAAAAYAPj/AQAKACEAAAAYAPn/AQAKACIAAAAYAPr/AQAKACMAAAAYAPv/AQAKACQAAAAYAPz/AQAKACUAAAAYAP3/AQAKACYAAAAYAP7/AQAKACcAAAAYAP//AQAKACgAAAAYAAAAAQAKACkAAAAYAAEAAQAKACoAAAAYAAIAAQAKACsAAAAYAAMAAQAKACwAAAAYAAQAAQAKAC0AAAAYAAUAAQAKAC4AAAAYAAYAAQAKAC8AAAAYAAcAAQAKADAAAAAYAAgAAQAKADEAAAAYAAkAAQAKADIAAAAYAAoAAQAKADMAAAAYAAsAAQAKADQAAAAYAAwAAQAKADUAAAAYAA0AAQAKADYAAAAYAA4AAQAKADcAAAAYAA8AAQAKADgAAAAYABAAAQAKADkAAAAZAOT/AQALAA0AAAAZAOX/AQALAA4AAAAZAOb/AQALAA8AAAAZAOf/AQALABAAAAAZAOj/AQALABEAAAAZAOn/AQALABIAAAAZAOr/AQALABMAAAAZAOv/AQALABQAAAAZAOz/AQALABUAAAAZAO3/AQALABYAAAAZAO7/AQALABcAAAAZAO//AQALABgAAAAZAPD/AQALABkAAAAZAPH/AQALABoAAAAZAPL/AQALABsAAAAZAPP/AQALABwAAAAZAPT/AQALAB0AAAAZAPX/AQALAB4AAAAZAPb/AQALAB8AAAAZAPf/AQALACAAAAAZAPj/AQALACEAAAAZAPn/AQALACIAAAAZAPr/AQALACMAAAAZAPv/AQALACQAAAAZAPz/AQALACUAAAAZAP3/AQALACYAAAAZAP7/AQALACcAAAAZAP//AQALACgAAAAZAAAAAQALACkAAAAZAAEAAQALACoAAAAZAAIAAQALACsAAAAZAAMAAQALACwAAAAZAAQAAQALAC0AAAAZAAUAAQALAC4AAAAZAAYAAQALAC8AAAAZAAcAAQALADAAAAAZAAgAAQALADEAAAAZAAkAAQALADIAAAAZAAoAAQALADMAAAAZAAsAAQALADQAAAAZAAwAAQALADUAAAAZAA0AAQALADYAAAAZAA4AAQALADcAAAAZAA8AAQALADgAAAAZABAAAQALADkAAAAaAOT/AQAMAA0AAAAaAOX/AQAMAA4AAAAaAOb/AQAMAA8AAAAaAOf/AQAMABAAAAAaAOj/AQAMABEAAAAaAOn/AQAMABIAAAAaAOr/AQAMABMAAAAaAOv/AQAMABQAAAAaAOz/AQAMABUAAAAaAO3/AQAMABYAAAAaAO7/AQAMABcAAAAaAO//AQAMABgAAAAaAPD/AQAMABkAAAAaAPH/AQAMABoAAAAaAPL/AQAMABsAAAAaAPP/AQAMABwAAAAaAPT/AQAMAB0AAAAaAPX/AQAMAB4AAAAaAPb/AQAMAB8AAAAaAPf/AQAMACAAAAAaAPj/AQAMACEAAAAaAPn/AQAMACIAAAAaAPr/AQAMACMAAAAaAPv/AQAMACQAAAAaAPz/AQAMACUAAAAaAP3/AQAMACYAAAAaAP7/AQAMACcAAAAaAP//AQAMACgAAAAaAAAAAQAMACkAAAAaAAEAAQAMACoAAAAaAAIAAQAMACsAAAAaAAMAAQAMACwAAAAaAAQAAQAMAC0AAAAaAAUAAQAMAC4AAAAaAAYAAQAMAC8AAAAaAAcAAQAMADAAAAAaAAgAAQAMADEAAAAaAAkAAQAMADIAAAAaAAoAAQAMADMAAAAaAAsAAQAMADQAAAAaAAwAAQAMADUAAAAaAA0AAQAMADYAAAAaAA4AAQAMADcAAAAaAA8AAQAMADgAAAAaABAAAQAMADkAAAAbAOT/AQANAA0AAAAbAOX/AQANAA4AAAAbAOb/AQANAA8AAAAbAOf/AQANABAAAAAbAOj/AQANABEAAAAbAOn/AQANABIAAAAbAOr/AQANABMAAAAbAOv/AQANABQAAAAbAOz/AQANABUAAAAbAO3/AQANABYAAAAbAO7/AQANABcAAAAbAO//AQANABgAAAAbAPD/AQANABkAAAAbAPH/AQANABoAAAAbAPL/AQANABsAAAAbAPP/AQANABwAAAAbAPT/AQANAB0AAAAbAPX/AQANAB4AAAAbAPb/AQANAB8AAAAbAPf/AQANACAAAAAbAPj/AQANACEAAAAbAPn/AQANACIAAAAbAPr/AQANACMAAAAbAPv/AQANACQAAAAbAPz/AQANACUAAAAbAP3/AQANACYAAAAbAP7/AQANACcAAAAbAP//AQANACgAAAAbAAAAAQANACkAAAAbAAEAAQANACoAAAAbAAIAAQANACsAAAAbAAMAAQANACwAAAAbAAQAAQANAC0AAAAbAAUAAQANAC4AAAAbAAYAAQANAC8AAAAbAAcAAQANADAAAAAbAAgAAQANADEAAAAbAAkAAQANADIAAAAbAAoAAQANADMAAAAbAAsAAQANADQAAAAbAAwAAQANADUAAAAbAA0AAQANADYAAAAbAA4AAQANADcAAAAbAA8AAQANADgAAAAbABAAAQANADkAAAAcAOT/AQAOAA0AAAAcAOX/AQAOAA4AAAAcAOb/AQAOAA8AAAAcAOf/AQAOABAAAAAcAOj/AQAOABEAAAAcAOn/AQAOABIAAAAcAOr/AQAOABMAAAAcAOv/AQAOABQAAAAcAOz/AQAOABUAAAAcAO3/AQAOABYAAAAcAO7/AQAOABcAAAAcAO//AQAOABgAAAAcAPD/AQAOABkAAAAcAPH/AQAOABoAAAAcAPL/AQAOABsAAAAcAPP/AQAOABwAAAAcAPT/AQAOAB0AAAAcAPX/AQAOAB4AAAAcAPb/AQAOAB8AAAAcAPf/AQAOACAAAAAcAPj/AQAOACEAAAAcAPn/AQAOACIAAAAcAPr/AQAOACMAAAAcAPv/AQAOACQAAAAcAPz/AQAOACUAAAAcAP3/AQAOACYAAAAcAP7/AQAOACcAAAAcAP//AQAOACgAAAAcAAAAAQAOACkAAAAcAAEAAQAOACoAAAAcAAIAAQAOACsAAAAcAAMAAQAOACwAAAAcAAQAAQAOAC0AAAAcAAUAAQAOAC4AAAAcAAYAAQAOAC8AAAAcAAcAAQAOADAAAAAcAAgAAQAOADEAAAAcAAkAAQAOADIAAAAcAAoAAQAOADMAAAAcAAsAAQAOADQAAAAcAAwAAQAOADUAAAAcAA0AAQAOADYAAAAcAA4AAQAOADcAAAAcAA8AAQAOADgAAAAcABAAAQAOADkAAAAdAOT/AQAPAA0AAAAdAOX/AQAPAA4AAAAdAOb/AQAPAA8AAAAdAOf/AQAPABAAAAAdAOj/AQAPABEAAAAdAOn/AQAPABIAAAAdAOr/AQAPABMAAAAdAOv/AQAPABQAAAAdAOz/AQAPABUAAAAdAO3/AQAPABYAAAAdAO7/AQAPABcAAAAdAO//AQAPABgAAAAdAPD/AQAPABkAAAAdAPH/AQAPABoAAAAdAPL/AQAPABsAAAAdAPP/AQAPABwAAAAdAPT/AQAPAB0AAAAdAPX/AQAPAB4AAAAdAPb/AQAPAB8AAAAdAPf/AQAPACAAAAAdAPj/AQAPACEAAAAdAPn/AQAPACIAAAAdAPr/AQAPACMAAAAdAPv/AQAPACQAAAAdAPz/AQAPACUAAAAdAP3/AQAPACYAAAAdAP7/AQAPACcAAAAdAP//AQAPACgAAAAdAAAAAQAPACkAAAAdAAEAAQAPACoAAAAdAAIAAQAPACsAAAAdAAMAAQAPACwAAAAdAAQAAQAPAC0AAAAdAAUAAQAPAC4AAAAdAAYAAQAPAC8AAAAdAAcAAQAPADAAAAAdAAgAAQAPADEAAAAdAAkAAQAPADIAAAAdAAoAAQAPADMAAAAdAAsAAQAPADQAAAAdAAwAAQAPADUAAAAdAA0AAQAPADYAAAAdAA4AAQAPADcAAAAdAA8AAQAPADgAAAAdABAAAQAPADkAAAAeAOT/AQAQAA0AAAAeAOX/AQAQAA4AAAAeAOb/AQAQAA8AAAAeAOf/AQAQABAAAAAeAOj/AQAQABEAAAAeAOn/AQAQABIAAAAeAOr/AQAQABMAAAAeAOv/AQAQABQAAAAeAOz/AQAQABUAAAAeAO3/AQAQABYAAAAeAO7/AQAQABcAAAAeAO//AQAQABgAAAAeAPD/AQAQABkAAAAeAPH/AQAQABoAAAAeAPL/AQAQABsAAAAeAPP/AQAQABwAAAAeAPT/AQAQAB0AAAAeAPX/AQAQAB4AAAAeAPb/AQAQAB8AAAAeAPf/AQAQACAAAAAeAPj/AQAQACEAAAAeAPn/AQAQACIAAAAeAPr/AQAQACMAAAAeAPv/AQAQACQAAAAeAPz/AQAQACUAAAAeAP3/AQAQACYAAAAeAP7/AQAQACcAAAAeAP//AQAQACgAAAAeAAAAAQAQACkAAAAeAAEAAQAQACoAAAAeAAIAAQAQACsAAAAeAAMAAQAQACwAAAAeAAQAAQAQAC0AAAAeAAUAAQAQAC4AAAAeAAYAAQAQAC8AAAAeAAcAAQAQADAAAAAeAAgAAQAQADEAAAAeAAkAAQAQADIAAAAeAAoAAQAQADMAAAAeAAsAAQAQADQAAAAeAAwAAQAQADUAAAAeAA0AAQAQADYAAAAeAA4AAQAQADcAAAAeAA8AAQAQADgAAAAeABAAAQAQADkAAAAfAOT/AQARAA0AAAAfAOX/AQARAA4AAAAfAOb/AQARAA8AAAAfAOf/AQARABAAAAAfAOj/AQARABEAAAAfAOn/AQARABIAAAAfAOr/AQARABMAAAAfAOv/AQARABQAAAAfAOz/AQARABUAAAAfAO3/AQARABYAAAAfAO7/AQARABcAAAAfAO//AQARABgAAAAfAPD/AQARABkAAAAfAPH/AQARABoAAAAfAPL/AQARABsAAAAfAPP/AQARABwAAAAfAPT/AQARAB0AAAAfAPX/AQARAB4AAAAfAPb/AQARAB8AAAAfAPf/AQARACAAAAAfAPj/AQARACEAAAAfAPn/AQARACIAAAAfAPr/AQARACMAAAAfAPv/AQARACQAAAAfAPz/AQARACUAAAAfAP3/AQARACYAAAAfAP7/AQARACcAAAAfAP//AQARACgAAAAfAAAAAQARACkAAAAfAAEAAQARACoAAAAfAAIAAQARACsAAAAfAAMAAQARACwAAAAfAAQAAQARAC0AAAAfAAUAAQARAC4AAAAfAAYAAQARAC8AAAAfAAcAAQARADAAAAAfAAgAAQARADEAAAAfAAkAAQARADIAAAAfAAoAAQARADMAAAAfAAsAAQARADQAAAAfAAwAAQARADUAAAAfAA0AAQARADYAAAAfAA4AAQARADcAAAAfAA8AAQARADgAAAAfABAAAQARADkAAAAgAOT/AQASAA0AAAAgAOX/AQASAA4AAAAgAOb/AQASAA8AAAAgAOf/AQASABAAAAAgAOj/AQASABEAAAAgAOn/AQASABIAAAAgAOr/AQASABMAAAAgAOv/AQASABQAAAAgAOz/AQASABUAAAAgAO3/AQASABYAAAAgAO7/AQASABcAAAAgAO//AQASABgAAAAgAPD/AQASABkAAAAgAPH/AQASABoAAAAgAPL/AQASABsAAAAgAPP/AQASABwAAAAgAPT/AQASAB0AAAAgAPX/AQASAB4AAAAgAPb/AQASAB8AAAAgAPf/AQASACAAAAAgAPj/AQASACEAAAAgAPn/AQASACIAAAAgAPr/AQASACMAAAAgAPv/AQASACQAAAAgAPz/AQASACUAAAAgAP3/AQASACYAAAAgAP7/AQASACcAAAAgAP//AQASACgAAAAgAAAAAQASACkAAAAgAAEAAQASACoAAAAgAAIAAQASACsAAAAgAAMAAQASACwAAAAgAAQAAQASAC0AAAAgAAUAAQASAC4AAAAgAAYAAQASAC8AAAAgAAcAAQASADAAAAAgAAgAAQASADEAAAAgAAkAAQASADIAAAAgAAoAAQASADMAAAAgAAsAAQASADQAAAAgAAwAAQASADUAAAAgAA0AAQASADYAAAAgAA4AAQASADcAAAAgAA8AAQASADgAAAAgABAAAQASADkAAAAhAOT/AQATAA0AAAAhAOX/AQATAA4AAAAhAOb/AQATAA8AAAAhAOf/AQATABAAAAAhAOj/AQATABEAAAAhAOn/AQATABIAAAAhAOr/AQATABMAAAAhAOv/AQATABQAAAAhAOz/AQATABUAAAAhAO3/AQATABYAAAAhAO7/AQATABcAAAAhAO//AQATABgAAAAhAPD/AQATABkAAAAhAPH/AQATABoAAAAhAPL/AQATABsAAAAhAPP/AQATABwAAAAhAPT/AQATAB0AAAAhAPX/AQATAB4AAAAhAPb/AQATAB8AAAAhAPf/AQATACAAAAAhAPj/AQATACEAAAAhAPn/AQATACIAAAAhAPr/AQATACMAAAAhAPv/AQATACQAAAAhAPz/AQATACUAAAAhAP3/AQATACYAAAAhAP7/AQATACcAAAAhAP//AQATACgAAAAhAAAAAQATACkAAAAhAAEAAQATACoAAAAhAAIAAQATACsAAAAhAAMAAQATACwAAAAhAAQAAQATAC0AAAAhAAUAAQATAC4AAAAhAAYAAQATAC8AAAAhAAcAAQATADAAAAAhAAgAAQATADEAAAAhAAkAAQATADIAAAAhAAoAAQATADMAAAAhAAsAAQATADQAAAAhAAwAAQATADUAAAAhAA0AAQATADYAAAAhAA4AAQATADcAAAAhAA8AAQATADgAAAAhABAAAQATADkAAAAiAOT/AQAUAA0AAAAiAOX/AQAUAA4AAAAiAOb/AQAUAA8AAAAiAOf/AQAUABAAAAAiAOj/AQAUABEAAAAiAOn/AQAUABIAAAAiAOr/AQAUABMAAAAiAOv/AQAUABQAAAAiAOz/AQAUABUAAAAiAO3/AQAUABYAAAAiAO7/AQAUABcAAAAiAO//AQAUABgAAAAiAPD/AQAUABkAAAAiAPH/AQAUABoAAAAiAPL/AQAUABsAAAAiAPP/AQAUABwAAAAiAPT/AQAUAB0AAAAiAPX/AQAUAB4AAAAiAPb/AQAUAB8AAAAiAPf/AQAUACAAAAAiAPj/AQAUACEAAAAiAPn/AQAUACIAAAAiAPr/AQAUACMAAAAiAPv/AQAUACQAAAAiAPz/AQAUACUAAAAiAP3/AQAUACYAAAAiAP7/AQAUACcAAAAiAP//AQAUACgAAAAiAAAAAQAUACkAAAAiAAEAAQAUACoAAAAiAAIAAQAUACsAAAAiAAMAAQAUACwAAAAiAAQAAQAUAC0AAAAiAAUAAQAUAC4AAAAiAAYAAQAUAC8AAAAiAAcAAQAUADAAAAAiAAgAAQAUADEAAAAiAAkAAQAUADIAAAAiAAoAAQAUADMAAAAiAAsAAQAUADQAAAAiAAwAAQAUADUAAAAiAA0AAQAUADYAAAAiAA4AAQAUADcAAAAiAA8AAQAUADgAAAAiABAAAQAUADkAAAAjAOT/AQAVAA0AAAAjAOX/AQAVAA4AAAAjAOb/AQAVAA8AAAAjAOf/AQAVABAAAAAjAOj/AQAVABEAAAAjAOn/AQAVABIAAAAjAOr/AQAVABMAAAAjAOv/AQAVABQAAAAjAOz/AQAVABUAAAAjAO3/AQAVABYAAAAjAO7/AQAVABcAAAAjAO//AQAVABgAAAAjAPD/AQAVABkAAAAjAPH/AQAVABoAAAAjAPL/AQAVABsAAAAjAPP/AQAVABwAAAAjAPT/AQAVAB0AAAAjAPX/AQAVAB4AAAAjAPb/AQAVAB8AAAAjAPf/AQAVACAAAAAjAPj/AQAVACEAAAAjAPn/AQAVACIAAAAjAPr/AQAVACMAAAAjAPv/AQAVACQAAAAjAPz/AQAVACUAAAAjAP3/AQAVACYAAAAjAP7/AQAVACcAAAAjAP//AQAVACgAAAAjAAAAAQAVACkAAAAjAAEAAQAVACoAAAAjAAIAAQAVACsAAAAjAAMAAQAVACwAAAAjAAQAAQAVAC0AAAAjAAUAAQAVAC4AAAAjAAYAAQAVAC8AAAAjAAcAAQAVADAAAAAjAAgAAQAVADEAAAAjAAkAAQAVADIAAAAjAAoAAQAVADMAAAAjAAsAAQAVADQAAAAjAAwAAQAVADUAAAAjAA0AAQAVADYAAAAjAA4AAQAVADcAAAAjAA8AAQAVADgAAAAjABAAAQAVADkAAAAkAOT/AQAWAA0AAAAkAOX/AQAWAA4AAAAkAOb/AQAWAA8AAAAkAOf/AQAWABAAAAAkAOj/AQAWABEAAAAkAOn/AQAWABIAAAAkAOr/AQAWABMAAAAkAOv/AQAWABQAAAAkAOz/AQAWABUAAAAkAO3/AQAWABYAAAAkAO7/AQAWABcAAAAkAO//AQAWABgAAAAkAPD/AQAWABkAAAAkAPH/AQAWABoAAAAkAPL/AQAWABsAAAAkAPP/AQAWABwAAAAkAPT/AQAWAB0AAAAkAPX/AQAWAB4AAAAkAPb/AQAWAB8AAAAkAPf/AQAWACAAAAAkAPj/AQAWACEAAAAkAPn/AQAWACIAAAAkAPr/AQAWACMAAAAkAPv/AQAWACQAAAAkAPz/AQAWACUAAAAkAP3/AQAWACYAAAAkAP7/AQAWACcAAAAkAP//AQAWACgAAAAkAAAAAQAWACkAAAAkAAEAAQAWACoAAAAkAAIAAQAWACsAAAAkAAMAAQAWACwAAAAkAAQAAQAWAC0AAAAkAAUAAQAWAC4AAAAkAAYAAQAWAC8AAAAkAAcAAQAWADAAAAAkAAgAAQAWADEAAAAkAAkAAQAWADIAAAAkAAoAAQAWADMAAAAkAAsAAQAWADQAAAAkAAwAAQAWADUAAAAkAA0AAQAWADYAAAAkAA4AAQAWADcAAAAkAA8AAQAWADgAAAAkABAAAQAWADkAAAAlAOT/AQAXAA0AAAAlAOX/AQAXAA4AAAAlAOb/AQAXAA8AAAAlAOf/AQAXABAAAAAlAOj/AQAXABEAAAAlAOn/AQAXABIAAAAlAOr/AQAXABMAAAAlAOv/AQAXABQAAAAlAOz/AQAXABUAAAAlAO3/AQAXABYAAAAlAO7/AQAXABcAAAAlAO//AQAXABgAAAAlAPD/AQAXABkAAAAlAPH/AQAXABoAAAAlAPL/AQAXABsAAAAlAPP/AQAXABwAAAAlAPT/AQAXAB0AAAAlAPX/AQAXAB4AAAAlAPb/AQAXAB8AAAAlAPf/AQAXACAAAAAlAPj/AQAXACEAAAAlAPn/AQAXACIAAAAlAPr/AQAXACMAAAAlAPv/AQAXACQAAAAlAPz/AQAXACUAAAAlAP3/AQAXACYAAAAlAP7/AQAXACcAAAAlAP//AQAXACgAAAAlAAAAAQAXACkAAAAlAAEAAQAXACoAAAAlAAIAAQAXACsAAAAlAAMAAQAXACwAAAAlAAQAAQAXAC0AAAAlAAUAAQAXAC4AAAAlAAYAAQAXAC8AAAAlAAcAAQAXADAAAAAlAAgAAQAXADEAAAAlAAkAAQAXADIAAAAlAAoAAQAXADMAAAAlAAsAAQAXADQAAAAlAAwAAQAXADUAAAAlAA0AAQAXADYAAAAlAA4AAQAXADcAAAAlAA8AAQAXADgAAAAlABAAAQAXADkAAAAmAOT/AQAYAA0AAAAmAOX/AQAYAA4AAAAmAOb/AQAYAA8AAAAmAOf/AQAYABAAAAAmAOj/AQAYABEAAAAmAOn/AQAYABIAAAAmAOr/AQAYABMAAAAmAOv/AQAYABQAAAAmAOz/AQAYABUAAAAmAO3/AQAYABYAAAAmAO7/AQAYABcAAAAmAO//AQAYABgAAAAmAPD/AQAYABkAAAAmAPH/AQAYABoAAAAmAPL/AQAYABsAAAAmAPP/AQAYABwAAAAmAPT/AQAYAB0AAAAmAPX/AQAYAB4AAAAmAPb/AQAYAB8AAAAmAPf/AQAYACAAAAAmAPj/AQAYACEAAAAmAPn/AQAYACIAAAAmAPr/AQAYACMAAAAmAPv/AQAYACQAAAAmAPz/AQAYACUAAAAmAP3/AQAYACYAAAAmAP7/AQAYACcAAAAmAP//AQAYACgAAAAmAAAAAQAYACkAAAAmAAEAAQAYACoAAAAmAAIAAQAYACsAAAAmAAMAAQAYACwAAAAmAAQAAQAYAC0AAAAmAAUAAQAYAC4AAAAmAAYAAQAYAC8AAAAmAAcAAQAYADAAAAAmAAgAAQAYADEAAAAmAAkAAQAYADIAAAAmAAoAAQAYADMAAAAmAAsAAQAYADQAAAAmAAwAAQAYADUAAAAmAA0AAQAYADYAAAAmAA4AAQAYADcAAAAmAA8AAQAYADgAAAAmABAAAQAYADkAAAAnAOT/AQAZAA0AAAAnAOX/AQAZAA4AAAAnAOb/AQAZAA8AAAAnAOf/AQAZABAAAAAnAOj/AQAZABEAAAAnAOn/AQAZABIAAAAnAOr/AQAZABMAAAAnAOv/AQAZABQAAAAnAOz/AQAZABUAAAAnAO3/AQAZABYAAAAnAO7/AQAZABcAAAAnAO//AQAZABgAAAAnAPD/AQAZABkAAAAnAPH/AQAZABoAAAAnAPL/AQAZABsAAAAnAPP/AQAZABwAAAAnAPT/AQAZAB0AAAAnAPX/AQAZAB4AAAAnAPb/AQAZAB8AAAAnAPf/AQAZACAAAAAnAPj/AQAZACEAAAAnAPn/AQAZACIAAAAnAPr/AQAZACMAAAAnAPv/AQAZACQAAAAnAPz/AQAZACUAAAAnAP3/AQAZACYAAAAnAP7/AQAZACcAAAAnAP//AQAZACgAAAAnAAAAAQAZACkAAAAnAAEAAQAZACoAAAAnAAIAAQAZACsAAAAnAAMAAQAZACwAAAAnAAQAAQAZAC0AAAAnAAUAAQAZAC4AAAAnAAYAAQAZAC8AAAAnAAcAAQAZADAAAAAnAAgAAQAZADEAAAAnAAkAAQAZADIAAAAnAAoAAQAZADMAAAAnAAsAAQAZADQAAAAnAAwAAQAZADUAAAAnAA0AAQAZADYAAAAnAA4AAQAZADcAAAAnAA8AAQAZADgAAAAnABAAAQAZADkAAAAoAOT/AQAaAA0AAAAoAOX/AQAaAA4AAAAoAOb/AQAaAA8AAAAoAOf/AQAaABAAAAAoAOj/AQAaABEAAAAoAOn/AQAaABIAAAAoAOr/AQAaABMAAAAoAOv/AQAaABQAAAAoAOz/AQAaABUAAAAoAO3/AQAaABYAAAAoAO7/AQAaABcAAAAoAO//AQAaABgAAAAoAPD/AQAaABkAAAAoAPH/AQAaABoAAAAoAPL/AQAaABsAAAAoAPP/AQAaABwAAAAoAPT/AQAaAB0AAAAoAPX/AQAaAB4AAAAoAPb/AQAaAB8AAAAoAPf/AQAaACAAAAAoAPj/AQAaACEAAAAoAPn/AQAaACIAAAAoAPr/AQAaACMAAAAoAPv/AQAaACQAAAAoAPz/AQAaACUAAAAoAP3/AQAaACYAAAAoAP7/AQAaACcAAAAoAP//AQAaACgAAAAoAAAAAQAaACkAAAAoAAEAAQAaACoAAAAoAAIAAQAaACsAAAAoAAMAAQAaACwAAAAoAAQAAQAaAC0AAAAoAAUAAQAaAC4AAAAoAAYAAQAaAC8AAAAoAAcAAQAaADAAAAAoAAgAAQAaADEAAAAoAAkAAQAaADIAAAAoAAoAAQAaADMAAAAoAAsAAQAaADQAAAAoAAwAAQAaADUAAAAoAA0AAQAaADYAAAAoAA4AAQAaADcAAAAoAA8AAQAaADgAAAAoABAAAQAaADkAAAApAOT/AQAbAA0AAAApAOX/AQAbAA4AAAApAOb/AQAbAA8AAAApAOf/AQAbABAAAAApAOj/AQAbABEAAAApAOn/AQAbABIAAAApAOr/AQAbABMAAAApAOv/AQAbABQAAAApAOz/AQAbABUAAAApAO3/AQAbABYAAAApAO7/AQAbABcAAAApAO//AQAbABgAAAApAPD/AQAbABkAAAApAPH/AQAbABoAAAApAPL/AQAbABsAAAApAPP/AQAbABwAAAApAPT/AQAbAB0AAAApAPX/AQAbAB4AAAApAPb/AQAbAB8AAAApAPf/AQAbACAAAAApAPj/AQAbACEAAAApAPn/AQAbACIAAAApAPr/AQAbACMAAAApAPv/AQAbACQAAAApAPz/AQAbACUAAAApAP3/AQAbACYAAAApAP7/AQAbACcAAAApAP//AQAbACgAAAApAAAAAQAbACkAAAApAAEAAQAbACoAAAApAAIAAQAbACsAAAApAAMAAQAbACwAAAApAAQAAQAbAC0AAAApAAUAAQAbAC4AAAApAAYAAQAbAC8AAAApAAcAAQAbADAAAAApAAgAAQAbADEAAAApAAkAAQAbADIAAAApAAoAAQAbADMAAAApAAsAAQAbADQAAAApAAwAAQAbADUAAAApAA0AAQAbADYAAAApAA4AAQAbADcAAAApAA8AAQAbADgAAAApABAAAQAbADkAAAAqAOT/AQAcAA0AAAAqAOX/AQAcAA4AAAAqAOb/AQAcAA8AAAAqAOf/AQAcABAAAAAqAOj/AQAcABEAAAAqAOn/AQAcABIAAAAqAOr/AQAcABMAAAAqAOv/AQAcABQAAAAqAOz/AQAcABUAAAAqAO3/AQAcABYAAAAqAO7/AQAcABcAAAAqAO//AQAcABgAAAAqAPD/AQAcABkAAAAqAPH/AQAcABoAAAAqAPL/AQAcABsAAAAqAPP/AQAcABwAAAAqAPT/AQAcAB0AAAAqAPX/AQAcAB4AAAAqAPb/AQAcAB8AAAAqAPf/AQAcACAAAAAqAPj/AQAcACEAAAAqAPn/AQAcACIAAAAqAPr/AQAcACMAAAAqAPv/AQAcACQAAAAqAPz/AQAcACUAAAAqAP3/AQAcACYAAAAqAP7/AQAcACcAAAAqAP//AQAcACgAAAAqAAAAAQAcACkAAAAqAAEAAQAcACoAAAAqAAIAAQAcACsAAAAqAAMAAQAcACwAAAAqAAQAAQAcAC0AAAAqAAUAAQAcAC4AAAAqAAYAAQAcAC8AAAAqAAcAAQAcADAAAAAqAAgAAQAcADEAAAAqAAkAAQAcADIAAAAqAAoAAQAcADMAAAAqAAsAAQAcADQAAAAqAAwAAQAcADUAAAAqAA0AAQAcADYAAAAqAA4AAQAcADcAAAAqAA8AAQAcADgAAAAqABAAAQAcADkAAAArAOT/AQAdAA0AAAArAOX/AQAdAA4AAAArAOb/AQAdAA8AAAArAOf/AQAdABAAAAArAOj/AQAdABEAAAArAOn/AQAdABIAAAArAOr/AQAdABMAAAArAOv/AQAdABQAAAArAOz/AQAdABUAAAArAO3/AQAdABYAAAArAO7/AQAdABcAAAArAO//AQAdABgAAAArAPD/AQAdABkAAAArAPH/AQAdABoAAAArAPL/AQAdABsAAAArAPP/AQAdABwAAAArAPT/AQAdAB0AAAArAPX/AQAdAB4AAAArAPb/AQAdAB8AAAArAPf/AQAdACAAAAArAPj/AQAdACEAAAArAPn/AQAdACIAAAArAPr/AQAdACMAAAArAPv/AQAdACQAAAArAPz/AQAdACUAAAArAP3/AQAdACYAAAArAP7/AQAdACcAAAArAP//AQAdACgAAAArAAAAAQAdACkAAAArAAEAAQAdACoAAAArAAIAAQAdACsAAAArAAMAAQAdACwAAAArAAQAAQAdAC0AAAArAAUAAQAdAC4AAAArAAYAAQAdAC8AAAArAAcAAQAdADAAAAArAAgAAQAdADEAAAArAAkAAQAdADIAAAArAAoAAQAdADMAAAArAAsAAQAdADQAAAArAAwAAQAdADUAAAArAA0AAQAdADYAAAArAA4AAQAdADcAAAArAA8AAQAdADgAAAArABAAAQAdADkAAAAsAOT/AQAeAA0AAAAsAOX/AQAeAA4AAAAsAOb/AQAeAA8AAAAsAOf/AQAeABAAAAAsAOj/AQAeABEAAAAsAOn/AQAeABIAAAAsAOr/AQAeABMAAAAsAOv/AQAeABQAAAAsAOz/AQAeABUAAAAsAO3/AQAeABYAAAAsAO7/AQAeABcAAAAsAO//AQAeABgAAAAsAPD/AQAeABkAAAAsAPH/AQAeABoAAAAsAPL/AQAeABsAAAAsAPP/AQAeABwAAAAsAPT/AQAeAB0AAAAsAPX/AQAeAB4AAAAsAPb/AQAeAB8AAAAsAPf/AQAeACAAAAAsAPj/AQAeACEAAAAsAPn/AQAeACIAAAAsAPr/AQAeACMAAAAsAPv/AQAeACQAAAAsAPz/AQAeACUAAAAsAP3/AQAeACYAAAAsAP7/AQAeACcAAAAsAP//AQAeACgAAAAsAAAAAQAeACkAAAAsAAEAAQAeACoAAAAsAAIAAQAeACsAAAAsAAMAAQAeACwAAAAsAAQAAQAeAC0AAAAsAAUAAQAeAC4AAAAsAAYAAQAeAC8AAAAsAAcAAQAeADAAAAAsAAgAAQAeADEAAAAsAAkAAQAeADIAAAAsAAoAAQAeADMAAAAsAAsAAQAeADQAAAAsAAwAAQAeADUAAAAsAA0AAQAeADYAAAAsAA4AAQAeADcAAAAsAA8AAQAeADgAAAAsABAAAQAeADkAAAAtAOT/AQAfAA0AAAAtAOX/AQAfAA4AAAAtAOb/AQAfAA8AAAAtAOf/AQAfABAAAAAtAOj/AQAfABEAAAAtAOn/AQAfABIAAAAtAOr/AQAfABMAAAAtAOv/AQAfABQAAAAtAOz/AQAfABUAAAAtAO3/AQAfABYAAAAtAO7/AQAfABcAAAAtAO//AQAfABgAAAAtAPD/AQAfABkAAAAtAPH/AQAfABoAAAAtAPL/AQAfABsAAAAtAPP/AQAfABwAAAAtAPT/AQAfAB0AAAAtAPX/AQAfAB4AAAAtAPb/AQAfAB8AAAAtAPf/AQAfACAAAAAtAPj/AQAfACEAAAAtAPn/AQAfACIAAAAtAPr/AQAfACMAAAAtAPv/AQAfACQAAAAtAPz/AQAfACUAAAAtAP3/AQAfACYAAAAtAP7/AQAfACcAAAAtAP//AQAfACgAAAAtAAAAAQAfACkAAAAtAAEAAQAfACoAAAAtAAIAAQAfACsAAAAtAAMAAQAfACwAAAAtAAQAAQAfAC0AAAAtAAUAAQAfAC4AAAAtAAYAAQAfAC8AAAAtAAcAAQAfADAAAAAtAAgAAQAfADEAAAAtAAkAAQAfADIAAAAtAAoAAQAfADMAAAAtAAsAAQAfADQAAAAtAAwAAQAfADUAAAAtAA0AAQAfADYAAAAtAA4AAQAfADcAAAAtAA8AAQAfADgAAAAtABAAAQAfADkAAAAuAOT/AQAgAA0AAAAuAOX/AQAgAA4AAAAuAOb/AQAgAA8AAAAuAOf/AQAgABAAAAAuAOj/AQAgABEAAAAuAOn/AQAgABIAAAAuAOr/AQAgABMAAAAuAOv/AQAgABQAAAAuAOz/AQAgABUAAAAuAO3/AQAgABYAAAAuAO7/AQAgABcAAAAuAO//AQAgABgAAAAuAPD/AQAgABkAAAAuAPH/AQAgABoAAAAuAPL/AQAgABsAAAAuAPP/AQAgABwAAAAuAPT/AQAgAB0AAAAuAPX/AQAgAB4AAAAuAPb/AQAgAB8AAAAuAPf/AQAgACAAAAAuAPj/AQAgACEAAAAuAPn/AQAgACIAAAAuAPr/AQAgACMAAAAuAPv/AQAgACQAAAAuAPz/AQAgACUAAAAuAP3/AQAgACYAAAAuAP7/AQAgACcAAAAuAP//AQAgACgAAAAuAAAAAQAgACkAAAAuAAEAAQAgACoAAAAuAAIAAQAgACsAAAAuAAMAAQAgACwAAAAuAAQAAQAgAC0AAAAuAAUAAQAgAC4AAAAuAAYAAQAgAC8AAAAuAAcAAQAgADAAAAAuAAgAAQAgADEAAAAuAAkAAQAgADIAAAAuAAoAAQAgADMAAAAuAAsAAQAgADQAAAAuAAwAAQAgADUAAAAuAA0AAQAgADYAAAAuAA4AAQAgADcAAAAuAA8AAQAgADgAAAAvAOT/AQAhAA0AAAAvAOX/AQAhAA4AAAAvAOb/AQAhAA8AAAAvAOf/AQAhABAAAAAvAOj/AQAhABEAAAAvAOn/AQAhABIAAAAvAOr/AQAhABMAAAAvAOv/AQAhABQAAAAvAOz/AQAhABUAAAAvAO3/AQAhABYAAAAvAO7/AQAhABcAAAAvAO//AQAhABgAAAAvAPD/AQAhABkAAAAvAPH/AQAhABoAAAAvAPL/AQAhABsAAAAvAPP/AQAhABwAAAAvAPT/AQAhAB0AAAAvAPX/AQAhAB4AAAAvAPb/AQAhAB8AAAAvAPf/AQAhACAAAAAvAPj/AQAhACEAAAAvAPn/AQAhACIAAAAvAPr/AQAhACMAAAAvAPv/AQAhACQAAAAvAPz/AQAhACUAAAAvAP3/AQAhACYAAAAvAP7/AQAhACcAAAAvAP//AQAhACgAAAAvAAAAAQAhACkAAAAvAAEAAQAhACoAAAAvAAIAAQAhACsAAAAvAAMAAQAhACwAAAAvAAQAAQAhAC0AAAAvAAUAAQAhAC4AAAAvAAYAAQAhAC8AAAAvAAcAAQAhADAAAAAvAAgAAQAhADEAAAAvAAkAAQAhADIAAAAvAAoAAQAhADMAAAAvAAsAAQAhADQAAAAvAAwAAQAhADUAAAAvAA0AAQAhADYAAAAvAA4AAQAhADcAAAAvAA8AAQAhADgAAAAvABAAAQAhADkAAAAwAOT/AQAiAA0AAAAwAOX/AQAiAA4AAAAwAOb/AQAiAA8AAAAwAOf/AQAiABAAAAAwAOj/AQAiABEAAAAwAOn/AQAiABIAAAAwAOr/AQAiABMAAAAwAOv/AQAiABQAAAAwAOz/AQAiABUAAAAwAO3/AQAiABYAAAAwAO7/AQAiABcAAAAwAO//AQAiABgAAAAwAPD/AQAiABkAAAAwAPH/AQAiABoAAAAwAPL/AQAiABsAAAAwAPP/AQAiABwAAAAwAPT/AQAiAB0AAAAwAPX/AQAiAB4AAAAwAPb/AQAiAB8AAAAwAPf/AQAiACAAAAAwAPj/AQAiACEAAAAwAPn/AQAiACIAAAAwAPr/AQAiACMAAAAwAPv/AQAiACQAAAAwAPz/AQAiACUAAAAwAP3/AQAiACYAAAAwAP7/AQAiACcAAAAwAP//AQAiACgAAAAwAAAAAQAiACkAAAAwAAEAAQAiACoAAAAwAAIAAQAiACsAAAAwAAMAAQAiACwAAAAwAAQAAQAiAC0AAAAwAAUAAQAiAC4AAAAwAAYAAQAiAC8AAAAwAAcAAQAiADAAAAAwAAgAAQAiADEAAAAwAAkAAQAiADIAAAAwAAoAAQAiADMAAAAwAAsAAQAiADQAAAAwAAwAAQAiADUAAAAwAA0AAQAiADYAAAAwAA4AAQAiADcAAAAwAA8AAQAiADgAAAAwABAAAQAiADkAAAAxAOT/AQAjAA0AAAAxAOX/AQAjAA4AAAAxAOb/AQAjAA8AAAAxAOf/AQAjABAAAAAxAOj/AQAjABEAAAAxAOn/AQAjABIAAAAxAOr/AQAjABMAAAAxAOv/AQAjABQAAAAxAOz/AQAjABUAAAAxAO3/AQAjABYAAAAxAO7/AQAjABcAAAAxAO//AQAjABgAAAAxAPD/AQAjABkAAAAxAPH/AQAjABoAAAAxAPL/AQAjABsAAAAxAPP/AQAjABwAAAAxAPT/AQAjAB0AAAAxAPX/AQAjAB4AAAAxAPb/AQAjAB8AAAAxAPf/AQAjACAAAAAxAPj/AQAjACEAAAAxAPn/AQAjACIAAAAxAPr/AQAjACMAAAAxAPv/AQAjACQAAAAxAPz/AQAjACUAAAAxAP3/AAAcAAoAAAAxAP7/AQAjACcAAAAxAP//AQAjACgAAAAxAAAAAQAjACkAAAAxAAEAAQAjACoAAAAxAAIAAQAjACsAAAAxAAMAAQAjACwAAAAxAAQAAQAjAC0AAAAxAAUAAQAjAC4AAAAxAAYAAQAjAC8AAAAxAAcAAQAjADAAAAAxAAgAAQAjADEAAAAxAAkAAQAjADIAAAAxAAoAAQAjADMAAAAxAAsAAQAjADQAAAAxAAwAAQAjADUAAAAxAA0AAQAjADYAAAAxAA4AAQAjADcAAAAxAA8AAQAjADgAAAAxABAAAQAjADkAAAAyAOT/AQAkAA0AAAAyAOX/AQAkAA4AAAAyAOb/AQAkAA8AAAAyAOf/AQAkABAAAAAyAOj/AQAkABEAAAAyAOn/AQAkABIAAAAyAOr/AQAkABMAAAAyAOv/AQAkABQAAAAyAOz/AQAkABUAAAAyAO3/AQAkABYAAAAyAO7/AQAkABcAAAAyAO//AQAkABgAAAAyAPD/AQAkABkAAAAyAPH/AQAkABoAAAAyAPL/AQAkABsAAAAyAPP/AQAkABwAAAAyAPT/AQAkAB0AAAAyAPX/AQAkAB4AAAAyAPb/AQAkAB8AAAAyAPf/AQAkACAAAAAyAPj/AQAkACEAAAAyAPn/AQAkACIAAAAyAPr/AQAkACMAAAAyAPv/AQAkACQAAAAyAPz/AQAkACUAAAAyAP3/AAAdAAkAAAAyAP7/AQAkACcAAAAyAP//AQAkACgAAAAyAAAAAQAkACkAAAAyAAEAAQAkACoAAAAyAAIAAQAkACsAAAAyAAMAAQAkACwAAAAyAAQAAQAkAC0AAAAyAAUAAQAkAC4AAAAyAAYAAQAkAC8AAAAyAAcAAQAkADAAAAAyAAgAAQAkADEAAAAyAAkAAQAkADIAAAAyAAoAAQAkADMAAAAyAAsAAQAkADQAAAAyAAwAAQAkADUAAAAyAA0AAQAkADYAAAAyAA4AAQAkADcAAAAyAA8AAQAkADgAAAAyABAAAQAkADkAAAAzAOT/AQAlAA0AAAAzAOX/AQAlAA4AAAAzAOb/AQAlAA8AAAAzAOf/AQAlABAAAAAzAOj/AQAlABEAAAAzAOn/AQAlABIAAAAzAOr/AQAlABMAAAAzAOv/AQAlABQAAAAzAOz/AQAlABUAAAAzAO3/AQAlABYAAAAzAO7/AQAlABcAAAAzAO//AQAlABgAAAAzAPD/AQAlABkAAAAzAPH/AQAlABoAAAAzAPL/AQAlABsAAAAzAPP/AQAlABwAAAAzAPT/AQAlAB0AAAAzAPX/AQAlAB4AAAAzAPb/AQAlAB8AAAAzAPf/AQAlACAAAAAzAPj/AQAlACEAAAAzAPn/AQAlACIAAAAzAPr/AQAlACMAAAAzAPv/AQAlACQAAAAzAPz/AQAlACUAAAAzAP3/AAAdAAoAAAAzAP7/AQAlACcAAAAzAP//AQAlACgAAAAzAAAAAQAlACkAAAAzAAIAAQAlACsAAAAzAAMAAQAlACwAAAAzAAQAAQAlAC0AAAAzAAUAAQAlAC4AAAAzAAYAAQAlAC8AAAAzAAcAAQAlADAAAAAzAAgAAQAlADEAAAAzAAkAAQAlADIAAAAzAAoAAQAlADMAAAAzAAsAAQAlADQAAAAzAAwAAQAlADUAAAAzAA0AAQAlADYAAAAzAA4AAQAlADcAAAAzAA8AAQAlADgAAAAzABAAAQAlADkAAAA0AOT/AQAmAA0AAAA0AOX/AQAmAA4AAAA0AOb/AQAmAA8AAAA0AOf/AQAmABAAAAA0AOj/AQAmABEAAAA0AOn/AQAmABIAAAA0AOr/AQAmABMAAAA0AOv/AQAmABQAAAA0AOz/AQAmABUAAAA0AO3/AQAmABYAAAA0AO7/AQAmABcAAAA0AO//AQAmABgAAAA0APD/AQAmABkAAAA0APH/AQAmABoAAAA0APL/AQAmABsAAAA0APP/AQAmABwAAAA0APT/AQAmAB0AAAA0APX/AQAmAB4AAAA0APb/AQAmAB8AAAA0APf/AQAmACAAAAA0APj/AQAmACEAAAA0APn/AQAmACIAAAA0APr/AQAmACMAAAA0APv/AQAmACQAAAA0APz/AQAmACUAAAA0AP3/AQAmACYAAAA0AP7/AQAmACcAAAA0AP//AQAmACgAAAA0AAAAAQAmACkAAAA0AAEAAQAmACoAAAA0AAIAAQAmACsAAAA0AAMAAQAmACwAAAA0AAQAAQAmAC0AAAA0AAUAAQAmAC4AAAA0AAYAAQAmAC8AAAA0AAcAAQAmADAAAAA0AAgAAQAmADEAAAA0AAkAAQAmADIAAAA0AAoAAQAmADMAAAA0AAsAAQAmADQAAAA0AAwAAQAmADUAAAA0AA0AAQAmADYAAAA0AA4AAQAmADcAAAA0AA8AAQAmADgAAAA0ABAAAQAmADkAAAA1AOT/AQAnAA0AAAA1AOX/AQAnAA4AAAA1AOb/AQAnAA8AAAA1AOf/AQAnABAAAAA1AOj/AQAnABEAAAA1AOn/AQAnABIAAAA1AOr/AQAnABMAAAA1AOv/AQAnABQAAAA1AOz/AQAnABUAAAA1AO3/AQAnABYAAAA1AO7/AQAnABcAAAA1AO//AQAnABgAAAA1APD/AQAnABkAAAA1APH/AQAnABoAAAA1APL/AQAnABsAAAA1APP/AQAnABwAAAA1APT/AQAnAB0AAAA1APX/AQAnAB4AAAA1APb/AQAnAB8AAAA1APf/AQAnACAAAAA1APj/AQAnACEAAAA1APn/AQAnACIAAAA1APr/AQAnACMAAAA1APv/AQAnACQAAAA1APz/AQAnACUAAAA1AP3/AQAnACYAAAA1AP7/AQAnACcAAAA1AP//AQAnACgAAAA1AAAAAQAnACkAAAA1AAEAAQAnACoAAAA1AAIAAQAnACsAAAA1AAMAAQAnACwAAAA1AAQAAQAnAC0AAAA1AAUAAQAnAC4AAAA1AAYAAQAnAC8AAAA1AAcAAQAnADAAAAA1AAgAAQAnADEAAAA1AAkAAQAnADIAAAA1AAoAAQAnADMAAAA1AAsAAQAnADQAAAA1AAwAAQAnADUAAAA1AA0AAQAnADYAAAA1AA4AAQAnADcAAAA1AA8AAQAnADgAAAA1ABAAAQAnADkAAAA2AOT/AQAoAA0AAAA2AOX/AQAoAA4AAAA2AOb/AQAoAA8AAAA2AOf/AQAoABAAAAA2AOj/AQAoABEAAAA2AOn/AQAoABIAAAA2AOr/AQAoABMAAAA2AOv/AQAoABQAAAA2AOz/AQAoABUAAAA2AO3/AQAoABYAAAA2AO7/AQAoABcAAAA2AO//AQAoABgAAAA2APD/AQAoABkAAAA2APH/AQAoABoAAAA2APL/AQAoABsAAAA2APP/AQAoABwAAAA2APT/AQAoAB0AAAA2APX/AQAoAB4AAAA2APb/AQAoAB8AAAA2APf/AQAoACAAAAA2APj/AQAoACEAAAA2APn/AQAoACIAAAA2APr/AQAoACMAAAA2APv/AQAoACQAAAA2APz/AQAoACUAAAA2AP3/AQAoACYAAAA2AP7/AQAoACcAAAA2AP//AQAoACgAAAA2AAAAAQAoACkAAAA2AAEAAQAoACoAAAA2AAIAAQAoACsAAAA2AAMAAQAoACwAAAA2AAQAAQAoAC0AAAA2AAUAAQAoAC4AAAA2AAYAAQAoAC8AAAA2AAcAAQAoADAAAAA2AAgAAQAoADEAAAA2AAkAAQAoADIAAAA2AAoAAQAoADMAAAA2AAsAAQAoADQAAAA2AAwAAQAoADUAAAA2AA0AAQAoADYAAAA2AA4AAQAoADcAAAA2AA8AAQAoADgAAAA2ABAAAQAoADkAAAA3AOT/AQApAA0AAAA3AOX/AQApAA4AAAA3AOb/AQApAA8AAAA3AOf/AQApABAAAAA3AOj/AQApABEAAAA3AOn/AQApABIAAAA3AOr/AQApABMAAAA3AOv/AQApABQAAAA3AOz/AQApABUAAAA3AO3/AQApABYAAAA3AO7/AQApABcAAAA3AO//AQApABgAAAA3APD/AQApABkAAAA3APH/AQApABoAAAA3APL/AQApABsAAAA3APP/AQApABwAAAA3APT/AQApAB0AAAA3APX/AQApAB4AAAA3APb/AQApAB8AAAA3APf/AQApACAAAAA3APj/AQApACEAAAA3APn/AQApACIAAAA3APr/AQApACMAAAA3APv/AQApACQAAAA3APz/AQApACUAAAA3AP3/AQApACYAAAA3AP7/AQApACcAAAA3AP//AQApACgAAAA3AAAAAQApACkAAAA3AAEAAQApACoAAAA3AAIAAQApACsAAAA3AAMAAQApACwAAAA3AAQAAQApAC0AAAA3AAUAAQApAC4AAAA3AAYAAQApAC8AAAA3AAcAAQApADAAAAA3AAgAAQApADEAAAA3AAkAAQApADIAAAA3AAoAAQApADMAAAA3AAsAAQApADQAAAA3AAwAAQApADUAAAA3AA0AAQApADYAAAA3AA4AAQApADcAAAA3AA8AAQApADgAAAA3ABAAAQApADkAAAA4AOT/AQAqAA0AAAA4AOX/AQAqAA4AAAA4AOb/AQAqAA8AAAA4AOf/AQAqABAAAAA4AOj/AQAqABEAAAA4AOn/AQAqABIAAAA4AOr/AQAqABMAAAA4AOv/AQAqABQAAAA4AOz/AQAqABUAAAA4AO3/AQAqABYAAAA4AO7/AQAqABcAAAA4AO//AQAqABgAAAA4APD/AQAqABkAAAA4APH/AQAqABoAAAA4APL/AQAqABsAAAA4APP/AQAqABwAAAA4APT/AQAqAB0AAAA4APX/AQAqAB4AAAA4APb/AQAqAB8AAAA4APf/AQAqACAAAAA4APj/AQAqACEAAAA4APn/AQAqACIAAAA4APr/AQAqACMAAAA4APv/AQAqACQAAAA4APz/AQAqACUAAAA4AP3/AQAqACYAAAA4AP7/AQAqACcAAAA4AP//AQAqACgAAAA4AAAAAQAqACkAAAA4AAEAAQAqACoAAAA4AAIAAQAqACsAAAA4AAMAAQAqACwAAAA4AAQAAQAqAC0AAAA4AAUAAQAqAC4AAAA4AAYAAQAqAC8AAAA4AAcAAQAqADAAAAA4AAgAAQAqADEAAAA4AAkAAQAqADIAAAA4AAoAAQAqADMAAAA4AAsAAQAqADQAAAA4AAwAAQAqADUAAAA4AA0AAQAqADYAAAA4AA4AAQAqADcAAAA4AA8AAQAqADgAAAA4ABAAAQAqADkAAAA5AOT/AQArAA0AAAA5AOX/AQArAA4AAAA5AOb/AQArAA8AAAA5AOf/AQArABAAAAA5AOj/AQArABEAAAA5AOn/AQArABIAAAA5AOr/AQArABMAAAA5AOv/AQArABQAAAA5AOz/AQArABUAAAA5AO3/AQArABYAAAA5AO7/AQArABcAAAA5AO//AQArABgAAAA5APD/AQArABkAAAA5APH/AQArABoAAAA5APL/AQArABsAAAA5APP/AQArABwAAAA5APT/AQArAB0AAAA5APX/AQArAB4AAAA5APb/AQArAB8AAAA5APf/AQArACAAAAA5APj/AQArACEAAAA5APn/AQArACIAAAA5APr/AQArACMAAAA5APv/AQArACQAAAA5APz/AQArACUAAAA5AP3/AQArACYAAAA5AP7/AQArACcAAAA5AP//AQArACgAAAA5AAAAAQArACkAAAA5AAEAAQArACoAAAA5AAIAAQArACsAAAA5AAMAAQArACwAAAA5AAQAAQArAC0AAAA5AAUAAQArAC4AAAA5AAYAAQArAC8AAAA5AAcAAQArADAAAAA5AAgAAQArADEAAAA5AAkAAQArADIAAAA5AAoAAQArADMAAAA5AAsAAQArADQAAAA5AAwAAQArADUAAAA5AA0AAQArADYAAAA5AA4AAQArADcAAAA5AA8AAQArADgAAAA5ABAAAQArADkAAAA6AOT/AQAsAA0AAAA6AOX/AQAsAA4AAAA6AOb/AQAsAA8AAAA6AOf/AQAsABAAAAA6AOj/AQAsABEAAAA6AOn/AQAsABIAAAA6AOr/AQAsABMAAAA6AOv/AQAsABQAAAA6AOz/AQAsABUAAAA6AO3/AQAsABYAAAA6AO7/AQAsABcAAAA6AO//AQAsABgAAAA6APD/AQAsABkAAAA6APH/AQAsABoAAAA6APL/AQAsABsAAAA6APP/AQAsABwAAAA6APT/AQAsAB0AAAA6APX/AQAsAB4AAAA6APb/AQAsAB8AAAA6APf/AQAsACAAAAA6APj/AQAsACEAAAA6APn/AQAsACIAAAA6APr/AQAsACMAAAA6APv/AQAsACQAAAA6APz/AQAsACUAAAA6AP3/AQAsACYAAAA6AP7/AQAsACcAAAA6AP//AQAsACgAAAA6AAAAAQAsACkAAAA6AAEAAQAsACoAAAA6AAIAAQAsACsAAAA6AAMAAQAsACwAAAA6AAQAAQAsAC0AAAA6AAUAAQAsAC4AAAA6AAYAAQAsAC8AAAA6AAcAAQAsADAAAAA6AAgAAQAsADEAAAA6AAkAAQAsADIAAAA6AAoAAQAsADMAAAA6AAsAAQAsADQAAAA6AAwAAQAsADUAAAA6AA0AAQAsADYAAAA6AA4AAQAsADcAAAA6AA8AAQAsADgAAAA6ABAAAQAsADkAAAA7AOT/AQAtAA0AAAA7AOX/AQAtAA4AAAA7AOb/AQAtAA8AAAA7AOf/AQAtABAAAAA7AOj/AQAtABEAAAA7AOn/AQAtABIAAAA7AOr/AQAtABMAAAA7AOv/AQAtABQAAAA7AOz/AQAtABUAAAA7AO3/AQAtABYAAAA7AO7/AQAtABcAAAA7AO//AQAtABgAAAA7APD/AQAtABkAAAA7APH/AQAtABoAAAA7APL/AQAtABsAAAA7APP/AQAtABwAAAA7APT/AQAtAB0AAAA7APX/AQAtAB4AAAA7APb/AQAtAB8AAAA7APf/AQAtACAAAAA7APj/AQAtACEAAAA7APn/AQAtACIAAAA7APr/AQAtACMAAAA7APv/AQAtACQAAAA7APz/AQAtACUAAAA7AP3/AQAtACYAAAA7AP7/AQAtACcAAAA7AP//AQAtACgAAAA7AAAAAQAtACkAAAA7AAEAAQAtACoAAAA7AAIAAQAtACsAAAA7AAMAAQAtACwAAAA7AAQAAQAtAC0AAAA7AAUAAQAtAC4AAAA7AAYAAQAtAC8AAAA7AAcAAQAtADAAAAA7AAgAAQAtADEAAAA7AAkAAQAtADIAAAA7AAoAAQAtADMAAAA7AAsAAQAtADQAAAA7AAwAAQAtADUAAAA7AA0AAQAtADYAAAA7AA4AAQAtADcAAAA7AA8AAQAtADgAAAA7ABAAAQAtADkAAAA8AOT/AQAuAA0AAAA8AOX/AQAuAA4AAAA8AOb/AQAuAA8AAAA8AOf/AQAuABAAAAA8AOj/AQAuABEAAAA8AOn/AQAuABIAAAA8AOr/AQAuABMAAAA8AOv/AQAuABQAAAA8AOz/AQAuABUAAAA8AO3/AQAuABYAAAA8AO7/AQAuABcAAAA8AO//AQAuABgAAAA8APD/AQAuABkAAAA8APH/AQAuABoAAAA8APL/AQAuABsAAAA8APP/AQAuABwAAAA8APT/AQAuAB0AAAA8APX/AQAuAB4AAAA8APb/AQAuAB8AAAA8APf/AQAuACAAAAA8APj/AQAuACEAAAA8APn/AQAuACIAAAA8APr/AQAuACMAAAA8APv/AQAuACQAAAA8APz/AQAuACUAAAA8AP3/AQAuACYAAAA8AP7/AQAuACcAAAA8AP//AQAuACgAAAA8AAAAAQAuACkAAAA8AAEAAQAuACoAAAA8AAIAAQAuACsAAAA8AAMAAQAuACwAAAA8AAQAAQAuAC0AAAA8AAUAAQAuAC4AAAA8AAYAAQAuAC8AAAA8AAcAAQAuADAAAAA8AAgAAQAuADEAAAA8AAkAAQAuADIAAAA8AAoAAQAuADMAAAA8AAsAAQAuADQAAAA8AAwAAQAuADUAAAA8AA0AAQAuADYAAAA8AA4AAQAuADcAAAA8AA8AAQAuADgAAAA8ABAAAQAuADkAAAA9AOT/AQAvAA0AAAA9AOX/AQAvAA4AAAA9AOb/AQAvAA8AAAA9AOf/AQAvABAAAAA9AOj/AQAvABEAAAA9AOn/AQAvABIAAAA9AOr/AQAvABMAAAA9AOv/AQAvABQAAAA9AOz/AQAvABUAAAA9AO3/AQAvABYAAAA9AO7/AQAvABcAAAA9AO//AQAvABgAAAA9APD/AQAvABkAAAA9APH/AQAvABoAAAA9APL/AQAvABsAAAA9APP/AQAvABwAAAA9APT/AQAvAB0AAAA9APX/AQAvAB4AAAA9APb/AQAvAB8AAAA9APf/AQAvACAAAAA9APj/AQAvACEAAAA9APn/AQAvACIAAAA9APr/AQAvACMAAAA9APv/AQAvACQAAAA9APz/AQAvACUAAAA9AP3/AQAvACYAAAA9AP7/AQAvACcAAAA9AP//AQAvACgAAAA9AAAAAQAvACkAAAA9AAEAAQAvACoAAAA9AAIAAQAvACsAAAA9AAMAAQAvACwAAAA9AAQAAQAvAC0AAAA9AAUAAQAvAC4AAAA9AAYAAQAvAC8AAAA9AAcAAQAvADAAAAA9AAgAAQAvADEAAAA9AAkAAQAvADIAAAA9AAoAAQAvADMAAAA9AAsAAQAvADQAAAA9AAwAAQAvADUAAAA9AA0AAQAvADYAAAA9AA4AAQAvADcAAAA9AA8AAQAvADgAAAA9ABAAAQAvADkAAAA+AOT/AQAwAA0AAAA+AOX/AQAwAA4AAAA+AOb/AQAwAA8AAAA+AOf/AQAwABAAAAA+AOj/AQAwABEAAAA+AOn/AQAwABIAAAA+AOr/AQAwABMAAAA+AOv/AQAwABQAAAA+AOz/AQAwABUAAAA+AO3/AQAwABYAAAA+AO7/AQAwABcAAAA+AO//AQAwABgAAAA+APD/AQAwABkAAAA+APH/AQAwABoAAAA+APL/AQAwABsAAAA+APP/AQAwABwAAAA+APT/AQAwAB0AAAA+APX/AQAwAB4AAAA+APb/AQAwAB8AAAA+APf/AQAwACAAAAA+APj/AQAwACEAAAA+APn/AQAwACIAAAA+APr/AQAwACMAAAA+APv/AQAwACQAAAA+APz/AQAwACUAAAA+AP3/AQAwACYAAAA+AP7/AQAwACcAAAA+AP//AQAwACgAAAA+AAAAAQAwACkAAAA+AAEAAQAwACoAAAA+AAIAAQAwACsAAAA+AAMAAQAwACwAAAA+AAQAAQAwAC0AAAA+AAUAAQAwAC4AAAA+AAYAAQAwAC8AAAA+AAcAAQAwADAAAAA+AAgAAQAwADEAAAA+AAkAAQAwADIAAAA+AAoAAQAwADMAAAA+AAsAAQAwADQAAAA+AAwAAQAwADUAAAA+AA0AAQAwADYAAAA+AA4AAQAwADcAAAA+AA8AAQAwADgAAAA+ABAAAQAwADkAAAA/AOT/AQAxAA0AAAA/AOX/AQAxAA4AAAA/AOb/AQAxAA8AAAA/AOf/AQAxABAAAAA/AOj/AQAxABEAAAA/AOn/AQAxABIAAAA/AOr/AQAxABMAAAA/AOv/AQAxABQAAAA/AOz/AQAxABUAAAA/AO3/AQAxABYAAAA/AO7/AQAxABcAAAA/AO//AQAxABgAAAA/APD/AQAxABkAAAA/APH/AQAxABoAAAA/APL/AQAxABsAAAA/APP/AQAxABwAAAA/APT/AQAxAB0AAAA/APX/AQAxAB4AAAA/APb/AQAxAB8AAAA/APf/AQAxACAAAAA/APj/AQAxACEAAAA/APn/AQAxACIAAAA/APr/AQAxACMAAAA/APv/AQAxACQAAAA/APz/AQAxACUAAAA/AP3/AQAxACYAAAA/AP7/AQAxACcAAAA/AP//AQAxACgAAAA/AAAAAQAxACkAAAA/AAEAAQAxACoAAAA/AAIAAQAxACsAAAA/AAMAAQAxACwAAAA/AAQAAQAxAC0AAAA/AAUAAQAxAC4AAAA/AAYAAQAxAC8AAAA/AAcAAQAxADAAAAA/AAgAAQAxADEAAAA/AAkAAQAxADIAAAA/AAoAAQAxADMAAAA/AAsAAQAxADQAAAA/AAwAAQAxADUAAAA/AA0AAQAxADYAAAA/AA4AAQAxADcAAAA/AA8AAQAxADgAAAA/ABAAAQAxADkAAABAAOT/AQAyAA0AAABAAOX/AQAyAA4AAABAAOb/AQAyAA8AAABAAOf/AQAyABAAAABAAOj/AQAyABEAAABAAOn/AQAyABIAAABAAOr/AQAyABMAAABAAOv/AQAyABQAAABAAOz/AQAyABUAAABAAO3/AQAyABYAAABAAO7/AQAyABcAAABAAO//AQAyABgAAABAAPD/AQAyABkAAABAAPH/AQAyABoAAABAAPL/AQAyABsAAABAAPP/AQAyABwAAABAAPT/AQAyAB0AAABAAPX/AQAyAB4AAABAAPb/AQAyAB8AAABAAPf/AQAyACAAAABAAPj/AQAyACEAAABAAPn/AQAyACIAAABAAPr/AQAyACMAAABAAPv/AQAyACQAAABAAPz/AQAyACUAAABAAP3/AQAyACYAAABAAP7/AQAyACcAAABAAP//AQAyACgAAABAAAAAAQAyACkAAABAAAEAAQAyACoAAABAAAIAAQAyACsAAABAAAMAAQAyACwAAABAAAQAAQAyAC0AAABAAAUAAQAyAC4AAABAAAYAAQAyAC8AAABAAAcAAQAyADAAAABAAAgAAQAyADEAAABAAAkAAQAyADIAAABAAAoAAQAyADMAAABAAAsAAQAyADQAAABAAAwAAQAyADUAAABAAA0AAQAyADYAAABAAA4AAQAyADcAAABAAA8AAQAyADgAAABAABAAAQAyADkAAABBAOT/AQAzAA0AAABBAOX/AQAzAA4AAABBAOb/AQAzAA8AAABBAOf/AQAzABAAAABBAOj/AQAzABEAAABBAOn/AQAzABIAAABBAOr/AQAzABMAAABBAOv/AQAzABQAAABBAOz/AQAzABUAAABBAO3/AQAzABYAAABBAO7/AQAzABcAAABBAO//AQAzABgAAABBAPD/AQAzABkAAABBAPH/AQAzABoAAABBAPL/AQAzABsAAABBAPP/AQAzABwAAABBAPT/AQAzAB0AAABBAPX/AQAzAB4AAABBAPb/AQAzAB8AAABBAPf/AQAzACAAAABBAPj/AQAzACEAAABBAPn/AQAzACIAAABBAPr/AQAzACMAAABBAPv/AQAzACQAAABBAPz/AQAzACUAAABBAP3/AQAzACYAAABBAP7/AQAzACcAAABBAP//AQAzACgAAABBAAAAAQAzACkAAABBAAEAAQAzACoAAABBAAIAAQAzACsAAABBAAMAAQAzACwAAABBAAQAAQAzAC0AAABBAAUAAQAzAC4AAABBAAYAAQAzAC8AAABBAAcAAQAzADAAAABBAAgAAQAzADEAAABBAAkAAQAzADIAAABBAAoAAQAzADMAAABBAAsAAQAzADQAAABBAAwAAQAzADUAAABBAA0AAQAzADYAAABBAA4AAQAzADcAAABBAA8AAQAzADgAAABBABAAAQAzADkAAABCAOT/AQA0AA0AAABCAOX/AQA0AA4AAABCAOb/AQA0AA8AAABCAOf/AQA0ABAAAABCAOj/AQA0ABEAAABCAOn/AQA0ABIAAABCAOr/AQA0ABMAAABCAOv/AQA0ABQAAABCAOz/AQA0ABUAAABCAO3/AQA0ABYAAABCAO7/AQA0ABcAAABCAO//AQA0ABgAAABCAPD/AQA0ABkAAABCAPH/AQA0ABoAAABCAPL/AQA0ABsAAABCAPP/AQA0ABwAAABCAPT/AQA0AB0AAABCAPX/AQA0AB4AAABCAPb/AQA0AB8AAABCAPf/AQA0ACAAAABCAPj/AQA0ACEAAABCAPn/AQA0ACIAAABCAPr/AQA0ACMAAABCAPv/AQA0ACQAAABCAPz/AQA0ACUAAABCAP3/AQA0ACYAAABCAP7/AQA0ACcAAABCAP//AQA0ACgAAABCAAAAAQA0ACkAAABCAAEAAQA0ACoAAABCAAIAAQA0ACsAAABCAAMAAQA0ACwAAABCAAQAAQA0AC0AAABCAAUAAQA0AC4AAABCAAYAAQA0AC8AAABCAAcAAQA0ADAAAABCAAgAAQA0ADEAAABCAAkAAQA0ADIAAABCAAoAAQA0ADMAAABCAAsAAQA0ADQAAABCAAwAAQA0ADUAAABCAA0AAQA0ADYAAABCAA4AAQA0ADcAAABCAA8AAQA0ADgAAABCABAAAQA0ADkAAABDAOT/AQA1AA0AAABDAOX/AQA1AA4AAABDAOb/AQA1AA8AAABDAOf/AQA1ABAAAABDAOj/AQA1ABEAAABDAOn/AQA1ABIAAABDAOr/AQA1ABMAAABDAOv/AQA1ABQAAABDAOz/AQA1ABUAAABDAO3/AQA1ABYAAABDAO7/AQA1ABcAAABDAO//AQA1ABgAAABDAPD/AQA1ABkAAABDAPH/AQA1ABoAAABDAPL/AQA1ABsAAABDAPP/AQA1ABwAAABDAPT/AQA1AB0AAABDAPX/AQA1AB4AAABDAPb/AQA1AB8AAABDAPf/AQA1ACAAAABDAPj/AQA1ACEAAABDAPn/AQA1ACIAAABDAPr/AQA1ACMAAABDAPv/AQA1ACQAAABDAPz/AQA1ACUAAABDAP3/AQA1ACYAAABDAP7/AQA1ACcAAABDAP//AQA1ACgAAABDAAAAAQA1ACkAAABDAAEAAQA1ACoAAABDAAIAAQA1ACsAAABDAAMAAQA1ACwAAABDAAQAAQA1AC0AAABDAAUAAQA1AC4AAABDAAYAAQA1AC8AAABDAAcAAQA1ADAAAABDAAgAAQA1ADEAAABDAAkAAQA1ADIAAABDAAoAAQA1ADMAAABDAAsAAQA1ADQAAABDAAwAAQA1ADUAAABDAA0AAQA1ADYAAABDAA4AAQA1ADcAAABDAA8AAQA1ADgAAABDABAAAQA1ADkAAABEAOT/AQA2AA0AAABEAOX/AQA2AA4AAABEAOb/AQA2AA8AAABEAOf/AQA2ABAAAABEAOj/AQA2ABEAAABEAOn/AQA2ABIAAABEAOr/AQA2ABMAAABEAOv/AQA2ABQAAABEAOz/AQA2ABUAAABEAO3/AQA2ABYAAABEAO7/AQA2ABcAAABEAO//AQA2ABgAAABEAPD/AQA2ABkAAABEAPH/AQA2ABoAAABEAPL/AQA2ABsAAABEAPP/AQA2ABwAAABEAPT/AQA2AB0AAABEAPX/AQA2AB4AAABEAPb/AQA2AB8AAABEAPf/AQA2ACAAAABEAPj/AQA2ACEAAABEAPn/AQA2ACIAAABEAPr/AQA2ACMAAABEAPv/AQA2ACQAAABEAPz/AQA2ACUAAABEAP3/AQA2ACYAAABEAP7/AQA2ACcAAABEAP//AQA2ACgAAABEAAAAAQA2ACkAAABEAAEAAQA2ACoAAABEAAIAAQA2ACsAAABEAAMAAQA2ACwAAABEAAQAAQA2AC0AAABEAAUAAQA2AC4AAABEAAYAAQA2AC8AAABEAAcAAQA2ADAAAABEAAgAAQA2ADEAAABEAAkAAQA2ADIAAABEAAoAAQA2ADMAAABEAAsAAQA2ADQAAABEAAwAAQA2ADUAAABEAA0AAQA2ADYAAABEAA4AAQA2ADcAAABEAA8AAQA2ADgAAABEABAAAQA2ADkAAABFAOT/AQA3AA0AAABFAOX/AQA3AA4AAABFAOb/AQA3AA8AAABFAOf/AQA3ABAAAABFAOj/AQA3ABEAAABFAOn/AQA3ABIAAABFAOr/AQA3ABMAAABFAOv/AQA3ABQAAABFAOz/AQA3ABUAAABFAO3/AQA3ABYAAABFAO7/AQA3ABcAAABFAO//AQA3ABgAAABFAPD/AQA3ABkAAABFAPH/AQA3ABoAAABFAPL/AQA3ABsAAABFAPP/AQA3ABwAAABFAPT/AQA3AB0AAABFAPX/AQA3AB4AAABFAPb/AQA3AB8AAABFAPf/AQA3ACAAAABFAPj/AQA3ACEAAABFAPn/AQA3ACIAAABFAPr/AQA3ACMAAABFAPv/AQA3ACQAAABFAPz/AQA3ACUAAABFAP3/AQA3ACYAAABFAP7/AQA3ACcAAABFAP//AQA3ACgAAABFAAAAAQA3ACkAAABFAAEAAQA3ACoAAABFAAIAAQA3ACsAAABFAAMAAQA3ACwAAABFAAQAAQA3AC0AAABFAAUAAQA3AC4AAABFAAYAAQA3AC8AAABFAAcAAQA3ADAAAABFAAgAAQA3ADEAAABFAAkAAQA3ADIAAABFAAoAAQA3ADMAAABFAAsAAQA3ADQAAABFAAwAAQA3ADUAAABFAA0AAQA3ADYAAABFAA4AAQA3ADcAAABFAA8AAQA3ADgAAABFABAAAQA3ADkAAAA=") +tile_set = SubResource("TileSet_q2d71") + +[node name="House" type="TileMapLayer" parent="."] +position = Vector2(62.00002, 289.00003) +scale = Vector2(1.866584, 1.866584) +tile_map_data = PackedByteArray("AAD+/+z/AAALAAIAAAA=") +tile_set = SubResource("TileSet_uo7di") + +[node name="Street" type="TileMapLayer" parent="."] +tile_set = SubResource("TileSet_waglr") + +[node name="Fountain" type="TileMapLayer" parent="."] +tile_map_data = PackedByteArray("AADE/xkAAAAFAA4AAADE/xoAAAAFAA8AAADE/xsAAAAFABAAAADE/xwAAAAFABEAAADE/x0AAAAFABIAAADE/x4AAAAFABMAAADF/xgAAAAGAA0AAADF/xkAAAAGAA4AAADF/xoAAAAGAA8AAADF/xsAAAAGABAAAADF/xwAAAAGABEAAADF/x0AAAAGABIAAADF/x4AAAAGABMAAADF/x8AAAAGABQAAADG/xcAAAAHAAwAAADG/xgAAAAHAA0AAADG/xkAAAAHAA4AAADG/xoAAAAHAA8AAADG/xsAAAAHABAAAADG/xwAAAAHABEAAADG/x0AAAAHABIAAADG/x4AAAAHABMAAADG/x8AAAAHABQAAADG/yAAAAAHABUAAADH/xUAAAAIAAoAAADH/xYAAAAIAAsAAADH/xcAAAAIAAwAAADH/xgAAAAIAA0AAADH/xkAAAAIAA4AAADH/xoAAAAIAA8AAADH/xsAAAAIABAAAADH/xwAAAAIABEAAADH/x0AAAAIABIAAADH/x4AAAAIABMAAADH/x8AAAAIABQAAADH/yAAAAAIABUAAADH/yEAAAAIABYAAADI/xUAAAAJAAoAAADI/xYAAAAJAAsAAADI/xcAAAAJAAwAAADI/xgAAAAJAA0AAADI/xkAAAAJAA4AAADI/xoAAAAJAA8AAADI/xsAAAAJABAAAADI/xwAAAAJABEAAADI/x0AAAAJABIAAADI/x4AAAAJABMAAADI/x8AAAAJABQAAADI/yAAAAAJABUAAADI/yEAAAAJABYAAADI/yIAAAAJABcAAADJ/xUAAAAKAAoAAADJ/xYAAAAKAAsAAADJ/xcAAAAKAAwAAADJ/xgAAAAKAA0AAADJ/xkAAAAKAA4AAADJ/xoAAAAKAA8AAADJ/xsAAAAKABAAAADJ/xwAAAAKABEAAADJ/x0AAAAKABIAAADJ/x4AAAAKABMAAADJ/x8AAAAKABQAAADJ/yAAAAAKABUAAADJ/yEAAAAKABYAAADJ/yIAAAAKABcAAADK/xUAAAALAAoAAADK/xYAAAALAAsAAADK/xcAAAALAAwAAADK/xgAAAALAA0AAADK/xkAAAALAA4AAADK/xoAAAALAA8AAADK/xsAAAALABAAAADK/xwAAAALABEAAADK/x0AAAALABIAAADK/x4AAAALABMAAADK/x8AAAALABQAAADK/yAAAAALABUAAADK/yEAAAALABYAAADK/yIAAAALABcAAADL/xUAAAAMAAoAAADL/xYAAAAMAAsAAADL/xcAAAAMAAwAAADL/xgAAAAMAA0AAADL/xkAAAAMAA4AAADL/xoAAAAMAA8AAADL/xsAAAAMABAAAADL/xwAAAAMABEAAADL/x0AAAAMABIAAADL/x4AAAAMABMAAADL/x8AAAAMABQAAADL/yAAAAAMABUAAADL/yEAAAAMABYAAADL/yIAAAAMABcAAADM/xUAAAANAAoAAADM/xYAAAANAAsAAADM/xcAAAANAAwAAADM/xgAAAANAA0AAADM/xkAAAANAA4AAADM/xoAAAANAA8AAADM/xsAAAANABAAAADM/xwAAAANABEAAADM/x0AAAANABIAAADM/x4AAAANABMAAADM/x8AAAANABQAAADM/yAAAAANABUAAADM/yEAAAANABYAAADM/yIAAAANABcAAADN/xUAAAAOAAoAAADN/xYAAAAOAAsAAADN/xcAAAAOAAwAAADN/xgAAAAOAA0AAADN/xkAAAAOAA4AAADN/xoAAAAOAA8AAADN/xsAAAAOABAAAADN/xwAAAAOABEAAADN/x0AAAAOABIAAADN/x4AAAAOABMAAADN/x8AAAAOABQAAADN/yAAAAAOABUAAADN/yEAAAAOABYAAADN/yIAAAAOABcAAADO/xUAAAAPAAoAAADO/xYAAAAPAAsAAADO/xcAAAAPAAwAAADO/xgAAAAPAA0AAADO/xkAAAAPAA4AAADO/xoAAAAPAA8AAADO/xsAAAAPABAAAADO/xwAAAAPABEAAADO/x0AAAAPABIAAADO/x4AAAAPABMAAADO/x8AAAAPABQAAADO/yAAAAAPABUAAADO/yEAAAAPABYAAADO/yIAAAAPABcAAADP/xUAAAAQAAoAAADP/xYAAAAQAAsAAADP/xcAAAAQAAwAAADP/xgAAAAQAA0AAADP/xkAAAAQAA4AAADP/xoAAAAQAA8AAADP/xsAAAAQABAAAADP/xwAAAAQABEAAADP/x0AAAAQABIAAADP/x4AAAAQABMAAADP/x8AAAAQABQAAADP/yAAAAAQABUAAADP/yEAAAAQABYAAADP/yIAAAAQABcAAADQ/xUAAAARAAoAAADQ/xYAAAARAAsAAADQ/xcAAAARAAwAAADQ/xgAAAARAA0AAADQ/xkAAAARAA4AAADQ/xoAAAARAA8AAADQ/xsAAAARABAAAADQ/xwAAAARABEAAADQ/x0AAAARABIAAADQ/x4AAAARABMAAADQ/x8AAAARABQAAADQ/yAAAAARABUAAADQ/yEAAAARABYAAADQ/yIAAAARABcAAADR/xYAAAASAAsAAADR/xcAAAASAAwAAADR/xgAAAASAA0AAADR/xkAAAASAA4AAADR/xoAAAASAA8AAADR/xsAAAASABAAAADR/xwAAAASABEAAADR/x0AAAASABIAAADR/x4AAAASABMAAADR/x8AAAASABQAAADR/yAAAAASABUAAADR/yEAAAASABYAAADS/xcAAAATAAwAAADS/xgAAAATAA0AAADS/xkAAAATAA4AAADS/xoAAAATAA8AAADS/xsAAAATABAAAADS/xwAAAATABEAAADS/x0AAAATABIAAADS/x4AAAATABMAAADS/x8AAAATABQAAADS/yAAAAATABUAAADT/xgAAAAUAA0AAADT/xkAAAAUAA4AAADT/xoAAAAUAA8AAADT/xsAAAAUABAAAADT/xwAAAAUABEAAADT/x0AAAAUABIAAADT/x4AAAAUABMAAADT/x8AAAAUABQAAAA=") +tile_set = SubResource("TileSet_op4cu") + +[node name="Other" type="TileMapLayer" parent="."] +tile_set = SubResource("TileSet_w0bku") + +[node name="Flowers" type="TileMapLayer" parent="."] +position = Vector2(-576, 167) +scale = Vector2(0.70710504, 0.4777418) +tile_map_data = PackedByteArray("AADw/7r/AwAbAAAAAADw/7v/AwAbAAEAAADw/7z/AwAbAAIAAADw/73/AwAbAAMAAADx/7r/AwAcAAAAAADx/7v/AwAcAAEAAADx/7z/AwAcAAIAAADx/73/AwAcAAMAAADy/7r/AwAdAAAAAADy/7v/AwAdAAEAAADy/7z/AwAdAAIAAADy/73/AwAdAAMAAADz/7r/AwAeAAAAAADz/7v/AwAeAAEAAADz/7z/AwAeAAIAAADz/73/AwAeAAMAAAD0/7r/AwAfAAAAAAD0/7v/AwAfAAEAAAD0/7z/AwAfAAIAAAD0/73/AwAfAAMAAAD1/7r/AwAgAAAAAAD1/7v/AwAgAAEAAAD1/7z/AwAgAAIAAAD1/73/AwAgAAMAAAD2/7r/AwAhAAAAAAD2/7v/AwAhAAEAAAD2/7z/AwAhAAIAAAD2/73/AwAhAAMAAAD3/7r/AwAiAAAAAAD3/7v/AwAiAAEAAAD3/7z/AwAiAAIAAAD3/73/AwAiAAMAAAD4/7r/AwAjAAAAAAD4/7v/AwAjAAEAAAD4/7z/AwAjAAIAAAD4/73/AwAjAAMAAAD5/7r/AwAkAAAAAAD5/7v/AwAkAAEAAAD5/7z/AwAkAAIAAAD5/73/AwAkAAMAAAD6/7r/AwAlAAAAAAD6/7v/AwAlAAEAAAD6/7z/AwAlAAIAAAD6/73/AwAlAAMAAAD7/7r/AwAmAAAAAAD7/7v/AwAmAAEAAAD7/7z/AwAmAAIAAAD7/73/AwAmAAMAAAD8/7r/AwAnAAAAAAD8/7v/AwAnAAEAAAD8/7z/AwAnAAIAAAD8/73/AwAnAAMAAAD9/7r/AwAoAAAAAAD9/7v/AwAoAAEAAAD9/7z/AwAoAAIAAAD9/73/AwAoAAMAAADx/8D/AwAAAAQAAADx/8H/AwAAAAUAAADx/8L/AwAAAAYAAADx/8P/AwAAAAcAAADx/8T/AwAAAAgAAADy/8D/AwABAAQAAADy/8H/AwABAAUAAADy/8L/AwABAAYAAADy/8P/AwABAAcAAADy/8T/AwABAAgAAADz/8D/AwACAAQAAADz/8H/AwACAAUAAADz/8L/AwACAAYAAADz/8P/AwACAAcAAADz/8T/AwACAAgAAAD0/8D/AwADAAQAAAD0/8H/AwADAAUAAAD0/8L/AwADAAYAAAD0/8P/AwADAAcAAAD0/8T/AwADAAgAAAD1/8D/AwAEAAQAAAD1/8H/AwAEAAUAAAD1/8L/AwAEAAYAAAD1/8P/AwAEAAcAAAD1/8T/AwAEAAgAAAD2/8D/AwAFAAQAAAD2/8H/AwAFAAUAAAD2/8L/AwAFAAYAAAD2/8P/AwAFAAcAAAD2/8T/AwAFAAgAAAD3/8D/AwAGAAQAAAD3/8H/AwAGAAUAAAD3/8L/AwAGAAYAAAD3/8P/AwAGAAcAAAD3/8T/AwAGAAgAAAD4/8D/AwAHAAQAAAD4/8H/AwAHAAUAAAD4/8L/AwAHAAYAAAD4/8P/AwAHAAcAAAD4/8T/AwAHAAgAAAD5/8D/AwAIAAQAAAD5/8H/AwAIAAUAAAD5/8L/AwAIAAYAAAD5/8P/AwAIAAcAAAD5/8T/AwAIAAgAAAD6/8D/AwAJAAQAAAD6/8H/AwAJAAUAAAD6/8L/AwAJAAYAAAD6/8P/AwAJAAcAAAD6/8T/AwAJAAgAAAD7/8D/AwAKAAQAAAD7/8H/AwAKAAUAAAD7/8L/AwAKAAYAAAD7/8P/AwAKAAcAAAD7/8T/AwAKAAgAAAD8/8D/AwALAAQAAAD8/8H/AwALAAUAAAD8/8L/AwALAAYAAAD8/8P/AwALAAcAAAD8/8T/AwALAAgAAAD9/8D/AwAMAAQAAAD9/8H/AwAMAAUAAAD9/8L/AwAMAAYAAAD9/8P/AwAMAAcAAAD9/8T/AwAMAAgAAAD+/8D/AwANAAQAAAD+/8H/AwANAAUAAAD+/8L/AwANAAYAAAD+/8P/AwANAAcAAAD+/8T/AwANAAgAAADx/8b/AwAgAA0AAADx/8f/AwAgAA4AAADx/8j/AwAgAA8AAADx/8n/AwAgABAAAADy/8b/AwAhAA0AAADy/8f/AwAhAA4AAADy/8n/AwAhABAAAADz/8b/AwAiAA0AAADz/8f/AwAiAA4AAADz/8j/AwAiAA8AAADz/8n/AwAiABAAAAD0/8b/AwAjAA0AAAD0/8f/AwAjAA4AAAD0/8j/AwAjAA8AAAD0/8n/AwAjABAAAAD1/8b/AwAkAA0AAAD1/8j/AwAkAA8AAAD1/8n/AwAkABAAAAD2/8b/AwAlAA0AAAD2/8f/AwAlAA4AAAD2/8j/AwAlAA8AAAD2/8n/AwAlABAAAAD3/8b/AwAmAA0AAAD3/8f/AwAmAA4AAAD3/8j/AwAmAA8AAAD3/8n/AwAmABAAAAD4/8b/AwAnAA0AAAD4/8f/AwAnAA4AAAD4/8j/AwAnAA8AAAD4/8n/AwAnABAAAAD5/8b/AwAoAA0AAAD5/8f/AwAoAA4AAAD5/8j/AwAoAA8AAAD5/8n/AwAoABAAAAD6/8b/AwApAA0AAAD6/8f/AwApAA4AAAD6/8j/AwApAA8AAAD6/8n/AwApABAAAAD7/8b/AwAqAA0AAAD7/8f/AwAqAA4AAAD7/8j/AwAqAA8AAAD7/8n/AwAqABAAAAD8/8b/AwArAA0AAAD8/8f/AwArAA4AAAD8/8j/AwArAA8AAAD8/8n/AwArABAAAAD9/8b/AwAsAA0AAAD9/8f/AwAsAA4AAAD9/8j/AwAsAA8AAAD9/8n/AwAsABAAAAAAALn/AwAgAA0AAAAAALr/AwAgAA4AAAAAALv/AwAgAA8AAAAAALz/AwAgABAAAAABALn/AwAhAA0AAAABALr/AwAhAA4AAAABALz/AwAhABAAAAACALn/AwAiAA0AAAACALr/AwAiAA4AAAACALv/AwAiAA8AAAACALz/AwAiABAAAAADALn/AwAjAA0AAAADALr/AwAjAA4AAAADALv/AwAjAA8AAAADALz/AwAjABAAAAAEALn/AwAkAA0AAAAEALv/AwAkAA8AAAAEALz/AwAkABAAAAAFALn/AwAlAA0AAAAFALr/AwAlAA4AAAAFALv/AwAlAA8AAAAFALz/AwAlABAAAAAGALn/AwAmAA0AAAAGALr/AwAmAA4AAAAGALv/AwAmAA8AAAAGALz/AwAmABAAAAAHALn/AwAnAA0AAAAHALr/AwAnAA4AAAAHALv/AwAnAA8AAAAHALz/AwAnABAAAAAIALn/AwAoAA0AAAAIALr/AwAoAA4AAAAIALv/AwAoAA8AAAAIALz/AwAoABAAAAAJALn/AwApAA0AAAAJALr/AwApAA4AAAAJALv/AwApAA8AAAAJALz/AwApABAAAAAKALn/AwAqAA0AAAAKALr/AwAqAA4AAAAKALv/AwAqAA8AAAAKALz/AwAqABAAAAALALn/AwArAA0AAAALALr/AwArAA4AAAALALv/AwArAA8AAAALALz/AwArABAAAAAMALn/AwAsAA0AAAAMALr/AwAsAA4AAAAMALv/AwAsAA8AAAAMALz/AwAsABAAAAAAAMD/AwAbAAAAAAAAAMH/AwAbAAEAAAAAAML/AwAbAAIAAAAAAMP/AwAbAAMAAAABAMD/AwAcAAAAAAABAMH/AwAcAAEAAAABAML/AwAcAAIAAAABAMP/AwAcAAMAAAACAMD/AwAdAAAAAAACAMH/AwAdAAEAAAACAML/AwAdAAIAAAACAMP/AwAdAAMAAAADAMD/AwAeAAAAAAADAMH/AwAeAAEAAAADAML/AwAeAAIAAAADAMP/AwAeAAMAAAAEAMD/AwAfAAAAAAAEAMH/AwAfAAEAAAAEAML/AwAfAAIAAAAEAMP/AwAfAAMAAAAFAMD/AwAgAAAAAAAFAMH/AwAgAAEAAAAFAML/AwAgAAIAAAAFAMP/AwAgAAMAAAAGAMD/AwAhAAAAAAAGAMH/AwAhAAEAAAAGAML/AwAhAAIAAAAGAMP/AwAhAAMAAAAHAMD/AwAiAAAAAAAHAMH/AwAiAAEAAAAHAML/AwAiAAIAAAAHAMP/AwAiAAMAAAAIAMD/AwAjAAAAAAAIAMH/AwAjAAEAAAAIAML/AwAjAAIAAAAIAMP/AwAjAAMAAAAJAMD/AwAkAAAAAAAJAMH/AwAkAAEAAAAJAML/AwAkAAIAAAAJAMP/AwAkAAMAAAAKAMD/AwAlAAAAAAAKAMH/AwAlAAEAAAAKAML/AwAlAAIAAAAKAMP/AwAlAAMAAAALAMD/AwAmAAAAAAALAMH/AwAmAAEAAAALAML/AwAmAAIAAAALAMP/AwAmAAMAAAAMAMD/AwAnAAAAAAAMAMH/AwAnAAEAAAAMAML/AwAnAAIAAAAMAMP/AwAnAAMAAAANAMD/AwAoAAAAAAANAMH/AwAoAAEAAAANAML/AwAoAAIAAAANAMP/AwAoAAMAAAAAAMb/AwAAAAQAAAAAAMf/AwAAAAUAAAAAAMj/AwAAAAYAAAAAAMn/AwAAAAcAAAAAAMr/AwAAAAgAAAABAMb/AwABAAQAAAABAMf/AwABAAUAAAABAMj/AwABAAYAAAABAMn/AwABAAcAAAABAMr/AwABAAgAAAACAMb/AwACAAQAAAACAMf/AwACAAUAAAACAMj/AwACAAYAAAACAMn/AwACAAcAAAACAMr/AwACAAgAAAADAMb/AwADAAQAAAADAMf/AwADAAUAAAADAMj/AwADAAYAAAADAMn/AwADAAcAAAADAMr/AwADAAgAAAAEAMb/AwAEAAQAAAAEAMf/AwAEAAUAAAAEAMj/AwAEAAYAAAAEAMn/AwAEAAcAAAAEAMr/AwAEAAgAAAAFAMb/AwAFAAQAAAAFAMf/AwAFAAUAAAAFAMj/AwAFAAYAAAAFAMn/AwAFAAcAAAAFAMr/AwAFAAgAAAAGAMb/AwAGAAQAAAAGAMf/AwAGAAUAAAAGAMj/AwAGAAYAAAAGAMn/AwAGAAcAAAAGAMr/AwAGAAgAAAAHAMb/AwAHAAQAAAAHAMf/AwAHAAUAAAAHAMj/AwAHAAYAAAAHAMn/AwAHAAcAAAAHAMr/AwAHAAgAAAAIAMb/AwAIAAQAAAAIAMf/AwAIAAUAAAAIAMj/AwAIAAYAAAAIAMn/AwAIAAcAAAAIAMr/AwAIAAgAAAAJAMb/AwAJAAQAAAAJAMf/AwAJAAUAAAAJAMj/AwAJAAYAAAAJAMn/AwAJAAcAAAAJAMr/AwAJAAgAAAAKAMb/AwAKAAQAAAAKAMf/AwAKAAUAAAAKAMj/AwAKAAYAAAAKAMn/AwAKAAcAAAAKAMr/AwAKAAgAAAALAMb/AwALAAQAAAALAMf/AwALAAUAAAALAMj/AwALAAYAAAALAMn/AwALAAcAAAALAMr/AwALAAgAAAAMAMb/AwAMAAQAAAAMAMf/AwAMAAUAAAAMAMj/AwAMAAYAAAAMAMn/AwAMAAcAAAAMAMr/AwAMAAgAAAANAMb/AwANAAQAAAANAMf/AwANAAUAAAANAMj/AwANAAYAAAANAMn/AwANAAcAAAANAMr/AwANAAgAAADG/y0AAwAOAA0AAADG/y4AAwAOAA4AAADG/y8AAwAOAA8AAADG/zAAAwAOABAAAADH/y0AAwAPAA0AAADH/y4AAwAPAA4AAADH/y8AAwAPAA8AAADH/zAAAwAPABAAAADI/y0AAwAQAA0AAADI/y4AAwAQAA4AAADI/y8AAwAQAA8AAADI/zAAAwAQABAAAADJ/y0AAwARAA0AAADJ/y4AAwARAA4AAADJ/y8AAwARAA8AAADJ/zAAAwARABAAAADL/y0AAwAFAAkAAADL/y4AAwAFAAoAAADL/y8AAwAFAAsAAADL/zAAAwAFAAwAAADM/y0AAwAGAAkAAADM/y4AAwAGAAoAAADM/y8AAwAGAAsAAADM/zAAAwAGAAwAAADN/y0AAwAHAAkAAADN/y4AAwAHAAoAAADN/y8AAwAHAAsAAADN/zAAAwAHAAwAAADO/y0AAwAIAAkAAADO/y4AAwAIAAoAAADO/y8AAwAIAAsAAADO/zAAAwAIAAwAAAAIAC0AAwAFAAkAAAAIAC4AAwAFAAoAAAAIAC8AAwAFAAsAAAAIADAAAwAFAAwAAAAJAC0AAwAGAAkAAAAJAC4AAwAGAAoAAAAJAC8AAwAGAAsAAAAJADAAAwAGAAwAAAAKAC0AAwAHAAkAAAAKAC4AAwAHAAoAAAAKAC8AAwAHAAsAAAAKADAAAwAHAAwAAAALAC0AAwAIAAkAAAALAC4AAwAIAAoAAAALAC8AAwAIAAsAAAALADAAAwAIAAwAAAANAC0AAwAOAA0AAAANAC4AAwAOAA4AAAANAC8AAwAOAA8AAAANADAAAwAOABAAAAAOAC0AAwAPAA0AAAAOAC4AAwAPAA4AAAAOAC8AAwAPAA8AAAAOADAAAwAPABAAAAAPAC0AAwAQAA0AAAAPAC4AAwAQAA4AAAAPAC8AAwAQAA8AAAAPADAAAwAQABAAAAAQAC0AAwARAA0AAAAQAC4AAwARAA4AAAAQAC8AAwARAA8AAAAQADAAAwARABAAAAA=") +tile_set = SubResource("TileSet_d3ars") + +[node name="Tree" type="TileMapLayer" parent="."] +position = Vector2(56, 128) +scale = Vector2(0.3850729, 0.3850729) +tile_map_data = PackedByteArray("AAC2/wEAAAAEAAIAAAA2/wEAAAAEAAIAAAA2/1UAAAAEAAIAAAC2/1UAAAAEAAIAAAA+/8z/AQAKAAIAAABa/8z/AQAKAAIAAAA=") +tile_set = SubResource("TileSet_kwl8l") + +[node name="Cherry" type="TileMapLayer" parent="Tree"] +position = Vector2(477.8316, 477.83167) +scale = Vector2(1.4491513, 1.4720803) +tile_map_data = PackedByteArray("AAC4/8L/BAAIAAUAAAA=") +tile_set = SubResource("TileSet_0ao37") + +[node name="Water" type="TileMapLayer" parent="."] +y_sort_enabled = true +position = Vector2(384, -95) +tile_map_data = PackedByteArray("AAAHADwAAwAvAAwAAAAIADwAAwAwAAwAAAAJADwAAwAxAAwAAAAKADwAAwAvAAwAAAALADwAAwAwAAwAAAAMADwAAwAxAAwAAAANADwAAwAvAAwAAAAOADwAAwAwAAwAAAAPADwAAwAxAAwAAAANAD0AAwAvAAwAAAAOAD0AAwAwAAwAAAAPAD0AAwAxAAwAAAAKAD0AAwAvAAwAAAALAD0AAwAwAAwAAAAMAD0AAwAxAAwAAAAHAD0AAwAvAAwAAAAIAD0AAwAwAAwAAAAJAD0AAwAxAAwAAAAQADwAAwAvAAwAAAARADwAAwAwAAwAAAASADwAAwAxAAwAAAATADwAAwAvAAwAAAAUADwAAwAwAAwAAAAVADwAAwAxAAwAAAAWADwAAwAvAAwAAAAXADwAAwAwAAwAAAAYADwAAwAxAAwAAAAWAD0AAwAvAAwAAAAXAD0AAwAwAAwAAAAYAD0AAwAxAAwAAAATAD0AAwAvAAwAAAAUAD0AAwAwAAwAAAAVAD0AAwAxAAwAAAAQAD0AAwAvAAwAAAARAD0AAwAwAAwAAAASAD0AAwAxAAwAAAAZAD0AAwAvAAwAAAAaAD0AAwAwAAwAAAAbAD0AAwAxAAwAAAAcAD0AAwAvAAwAAAAdAD0AAwAwAAwAAAAeAD0AAwAxAAwAAAAcADwAAwAvAAwAAAAdADwAAwAwAAwAAAAeADwAAwAxAAwAAAAZADwAAwAvAAwAAAAaADwAAwAwAAwAAAAbADwAAwAxAAwAAAAfADwAAwAvAAwAAAAgADwAAwAwAAwAAAAhADwAAwAxAAwAAAAiADwAAwAvAAwAAAAjADwAAwAwAAwAAAAkADwAAwAxAAwAAAAfAD0AAwAvAAwAAAAgAD0AAwAwAAwAAAAhAD0AAwAxAAwAAAAiAD0AAwAvAAwAAAAjAD0AAwAwAAwAAAAkAD0AAwAxAAwAAAAlAD0AAwAvAAwAAAAmAD0AAwAwAAwAAAAnAD0AAwAxAAwAAAAlADwAAwAvAAwAAAAmADwAAwAwAAwAAAAnADwAAwAxAAwAAAAoADwAAwAvAAwAAAApADwAAwAwAAwAAAAqADwAAwAxAAwAAAArADwAAwAvAAwAAAAsADwAAwAwAAwAAAAtADwAAwAxAAwAAAAuADwAAwAvAAwAAAAvADwAAwAwAAwAAAAwADwAAwAxAAwAAAAxADwAAwAvAAwAAAAyADwAAwAwAAwAAAAzADwAAwAxAAwAAAA0ADwAAwAvAAwAAAA1ADwAAwAwAAwAAAA2ADwAAwAxAAwAAAA3ADwAAwAvAAwAAAA4ADwAAwAwAAwAAAA5ADwAAwAxAAwAAAA3AD0AAwAvAAwAAAA4AD0AAwAwAAwAAAA5AD0AAwAxAAwAAAA0AD0AAwAvAAwAAAA1AD0AAwAwAAwAAAA2AD0AAwAxAAwAAAAxAD0AAwAvAAwAAAAyAD0AAwAwAAwAAAAzAD0AAwAxAAwAAAAuAD0AAwAvAAwAAAAvAD0AAwAwAAwAAAAwAD0AAwAxAAwAAAArAD0AAwAvAAwAAAAsAD0AAwAwAAwAAAAtAD0AAwAxAAwAAAAoAD0AAwAvAAwAAAApAD0AAwAwAAwAAAAqAD0AAwAxAAwAAAAIAD4AAgAXAA4AAAAIAD8AAgAXAA8AAAAIAEAAAgAXABAAAAAIAEEAAgAXABEAAAAJAD4AAgAYAA4AAAAJAD8AAgAYAA8AAAAJAEAAAgAYABAAAAAJAEEAAgAYABEAAAAKAD4AAgAZAA4AAAAKAD8AAgAZAA8AAAAKAEAAAgAZABAAAAAKAEEAAgAZABEAAAALAD4AAgAXAA4AAAALAD8AAgAXAA8AAAALAEAAAgAXABAAAAALAEEAAgAXABEAAAAMAD4AAgAYAA4AAAAMAD8AAgAYAA8AAAAMAEAAAgAYABAAAAAMAEEAAgAYABEAAAANAD4AAgAZAA4AAAANAD8AAgAZAA8AAAANAEAAAgAZABAAAAANAEEAAgAZABEAAAAOAD4AAgAaAA4AAAAOAD8AAgAaAA8AAAAOAEAAAgAaABAAAAAOAEEAAgAaABEAAAAIAEIAAgAXAA4AAAAIAEMAAgAXAA8AAAAJAEIAAgAYAA4AAAAJAEMAAgAYAA8AAAAKAEIAAgAZAA4AAAAKAEMAAgAZAA8AAAALAEIAAgAaAA4AAAALAEMAAgAaAA8AAAAMAEIAAgAXAA4AAAAMAEMAAgAXAA8AAAANAEIAAgAYAA4AAAANAEMAAgAYAA8AAAAOAEIAAgAZAA4AAAAOAEMAAgAZAA8AAAAPAEIAAgAXAA4AAAAPAEMAAgAXAA8AAAARAEIAAgAZAA4AAAARAEMAAgAZAA8AAAASAEIAAgAaAA4AAAASAEMAAgAaAA8AAAATAEIAAgAZAA4AAAATAEMAAgAZAA8AAAAUAEIAAgAXAA4AAAAUAEMAAgAXAA8AAAAQAEIAAgAYAA4AAAAQAEMAAgAYAA8AAAAPAD4AAgAXAA4AAAAPAD8AAgAXAA8AAAAPAEAAAgAXABAAAAAPAEEAAgAXABEAAAAQAD4AAgAYAA4AAAAQAD8AAgAYAA8AAAAQAEAAAgAYABAAAAAQAEEAAgAYABEAAAARAD4AAgAZAA4AAAARAD8AAgAZAA8AAAARAEAAAgAZABAAAAARAEEAAgAZABEAAAASAD4AAgAXAA4AAAASAD8AAgAXAA8AAAASAEAAAgAXABAAAAASAEEAAgAXABEAAAAUAD4AAgAZAA4AAAAUAD8AAgAZAA8AAAAUAEAAAgAZABAAAAAUAEEAAgAXAA4AAAAVAD4AAgAaAA4AAAAVAD8AAgAaAA8AAAAVAEAAAgAaABAAAAAVAEEAAgAYAA4AAAAWAD4AAgAZAA4AAAAWAD8AAgAZAA8AAAAWAEAAAgAZABAAAAAWAEEAAgAZAA4AAAAXAD4AAgAaAA4AAAAXAD8AAgAaAA8AAAAXAEAAAgAZABAAAAAXAEEAAgAZABAAAAATAD4AAgAYAA4AAAATAD8AAgAYAA8AAAATAEAAAgAYABAAAAATAEEAAgAYABEAAAAYAD4AAgAXAA4AAAAYAD8AAgAZABAAAAAYAEAAAgAZABAAAAAYAEEAAgAZABAAAAAZAD4AAgAYAA4AAAAZAD8AAgAZABAAAAAZAEAAAgAZABAAAAAZAEEAAgAZABAAAAAaAD4AAgAZAA4AAAAaAD8AAgAZABAAAAAaAEAAAgAZABAAAAAaAEEAAgAZABAAAAAbAD4AAgAaAA4AAAAbAD8AAgAZABAAAAAbAEAAAgAZABAAAAAbAEEAAgAZABAAAAAWAEIAAgAZAA4AAAAWAEMAAgAZAA8AAAAXAEIAAgAXAA4AAAAXAEMAAgAXAA8AAAAYAEIAAgAZABAAAAAYAEMAAgAYAA8AAAAZAEIAAgAZABAAAAAZAEMAAgAZABAAAAAVAEIAAgAYAA4AAAAVAEMAAgAYAA8AAAAaAEIAAgAZABAAAAAaAEMAAgAXAA8AAAAbAEIAAgAZABAAAAAbAEMAAgAYAA8AAAAcAEEAAgAZABAAAAAcAEIAAgAZABAAAAAcAEMAAgAZAA8AAAAdAEIAAgAZABAAAAAdAEMAAgAZABAAAAAeAEIAAgAXAA4AAAAeAEMAAgAXAA8AAAAfAEIAAgAZABAAAAAfAEMAAgAYAA8AAAAgAEIAAgAZABAAAAAgAEMAAgAZAA8AAAAhAEIAAgAaAA4AAAAhAEMAAgAaAA8AAAAhAEQAAgAaABAAAAAiAEIAAgAZABAAAAAiAEMAAgAXAA8AAAAiAEQAAgAXABAAAAAjAEIAAgAXABEAAAAjAEMAAgAXAA8AAAAjAEQAAgAXABAAAAAkAEIAAgAYABEAAAAkAEMAAgAYAA8AAAAkAEQAAgAYABAAAAAlAEIAAgAZABEAAAAlAEMAAgAZAA8AAAAlAEQAAgAZABAAAAAmAEIAAgAXAA4AAAAmAEMAAgAXAA8AAAAmAEQAAgAXABAAAAAjAD8AAgAZABAAAAAjAEAAAgAZABAAAAAjAEEAAgAXABEAAAAkAD8AAgAYAA8AAAAkAEAAAgAYABAAAAAkAEEAAgAYABEAAAAlAD8AAgAZAA8AAAAlAEAAAgAZABAAAAAlAEEAAgAZABEAAAAmAD8AAgAXAA8AAAAmAEAAAgAXABAAAAAmAEEAAgAXABEAAAAjAD4AAgAZABAAAAAkAD4AAgAYAA4AAAAlAD4AAgAZAA4AAAAmAD4AAgAXAA4AAAAnAD4AAgAYAA4AAAAnAD8AAgAYAA8AAAAnAEAAAgAYABAAAAAnAEEAAgAYABEAAAAoAD4AAgAZAA4AAAAoAD8AAgAZAA8AAAAoAEAAAgAZABAAAAAoAEEAAgAXAA4AAAApAD4AAgAXAA4AAAApAD8AAgAXAA8AAAApAEAAAgAXABAAAAApAEEAAgAYAA4AAAAqAD4AAgAYAA4AAAAqAD8AAgAYAA8AAAAqAEAAAgAYABAAAAAqAEEAAgAZAA4AAAArAD4AAgAZAA4AAAArAD8AAgAZAA8AAAArAEAAAgAZABAAAAArAEEAAgAaAA4AAAAsAD4AAgAaAA4AAAAsAD8AAgAaAA8AAAAsAEAAAgAaABAAAAAsAEEAAgAaABEAAAAtAD4AAgAXAA4AAAAtAD8AAgAXAA8AAAAtAEAAAgAXABAAAAAtAEEAAgAXABEAAAAuAD4AAgAYAA4AAAAuAD8AAgAYAA8AAAAuAEAAAgAYABAAAAAuAEEAAgAYABEAAAAvAD4AAgAZAA4AAAAvAD8AAgAZAA8AAAAvAEAAAgAZABAAAAAvAEEAAgAZABEAAAAwAD4AAgAaAA4AAAAwAD8AAgAaAA8AAAAwAEAAAgAaABAAAAAwAEEAAgAaABEAAAAxAD4AAgAXAA4AAAAxAD8AAgAXAA8AAAAxAEAAAgAXABAAAAAxAEEAAgAXABEAAAAyAD4AAgAYAA4AAAAyAD8AAgAYAA8AAAAyAEAAAgAYABAAAAAyAEEAAgAYABEAAAAzAD4AAgAZAA4AAAAzAD8AAgAZAA8AAAAzAEAAAgAZABAAAAAzAEEAAgAZABEAAAA0AD4AAgAaAA4AAAA0AD8AAgAaAA8AAAA0AEAAAgAaABAAAAA0AEEAAgAaABEAAAA1AD4AAgAXAA4AAAA1AD8AAgAXAA8AAAA1AEAAAgAXABAAAAA1AEEAAgAXABEAAAA2AD4AAgAYAA4AAAA2AD8AAgAYAA8AAAA2AEAAAgAYABAAAAA2AEEAAgAYABEAAAA3AD4AAgAZAA4AAAA3AD8AAgAZAA8AAAA3AEAAAgAZABAAAAA3AEEAAgAXAA4AAAA4AD4AAgAXAA4AAAA4AD8AAgAXAA8AAAA4AEAAAgAXABAAAAA4AEEAAgAYAA4AAAA5AD4AAgAYAA4AAAA5AD8AAgAYAA8AAAA5AEAAAgAYABAAAAA5AEEAAgAZAA4AAAA3AEIAAgAaAA4AAAA3AEMAAgAaAA8AAAA3AEQAAgAaABAAAAA4AEIAAgAYAA8AAAA4AEMAAgAYAA4AAAA4AEQAAgAYAA8AAAA5AEIAAgAZAA8AAAA5AEMAAgAZAA4AAAA5AEQAAgAZAA8AAAA0AEIAAgAaAA4AAAA0AEMAAgAaAA8AAAA0AEQAAgAaABAAAAA1AEIAAgAYAA4AAAA1AEMAAgAYAA8AAAA1AEQAAgAYABAAAAA2AEIAAgAZAA4AAAA2AEMAAgAZAA8AAAA2AEQAAgAZABAAAAAxAEIAAgAZAA4AAAAxAEMAAgAZAA8AAAAxAEQAAgAZABAAAAAyAEIAAgAaAA4AAAAyAEMAAgAaAA8AAAAyAEQAAgAaABAAAAAzAEIAAgAZAA4AAAAzAEMAAgAZAA8AAAAzAEQAAgAZABAAAAAvAEIAAgAXAA4AAAAvAEMAAgAXAA8AAAAvAEQAAgAXABAAAAAwAEIAAgAYAA4AAAAwAEMAAgAYAA8AAAAwAEQAAgAYABAAAAArAEIAAgAaAA8AAAArAEMAAgAaABAAAAArAEQAAgAaABEAAAAsAEIAAgAYAA4AAAAsAEMAAgAYAA8AAAAsAEQAAgAYABAAAAAtAEIAAgAZAA4AAAAtAEMAAgAZAA8AAAAtAEQAAgAZABAAAAAuAEIAAgAaAA4AAAAuAEMAAgAaAA8AAAAuAEQAAgAaABAAAAAoAEMAAgAXABAAAAAoAEQAAgAXABEAAAApAEMAAgAYABAAAAApAEQAAgAYABEAAAAqAEMAAgAZABAAAAAqAEQAAgAZABEAAAAnAEIAAgAYAA4AAAAnAEMAAgAYAA8AAAAnAEQAAgAYABAAAAAoAEIAAgAXAA8AAAApAEIAAgAYAA8AAAAqAEIAAgAZAA8AAAAHAD4AAgAYAA4AAAAHAD8AAgAYAA8AAAAHAEAAAgAYABAAAAAHAEEAAgAYAA4AAAAHAEIAAgAYAA4AAAAHAEMAAgAYAA8AAAAHAEQAAgAYABAAAAAIAEQAAgAXABAAAAAJAEQAAgAYABAAAAAKAEQAAgAZABAAAAALAEQAAgAaABAAAAAMAEQAAgAXABAAAAANAEQAAgAYABAAAAAOAEQAAgAZABAAAAAPAEQAAgAXABAAAAAQAEQAAgAYABAAAAARAEQAAgAZABAAAAASAEQAAgAaABAAAAATAEQAAgAZABAAAAAUAEQAAgAXABAAAAAVAEQAAgAYABAAAAAWAEQAAgAZABAAAAAXAEQAAgAXABAAAAAYAEQAAgAYABAAAAAZAEQAAgAZABAAAAAaAEQAAgAXABAAAAAbAEQAAgAYABAAAAAcAEQAAgAZABAAAAAdAEQAAgAaABAAAAAeAEQAAgAXABAAAAAfAEQAAgAYABAAAAAgAEQAAgAZABAAAAAHAEUAAgAXABAAAAAIAEUAAgAYABAAAAAJAEUAAgAZABAAAAAKAEUAAgAaABAAAAALAEUAAgAXABAAAAAMAEUAAgAYABAAAAANAEUAAgAZABAAAAAOAEUAAgAaABAAAAAPAEUAAgAXABAAAAAQAEUAAgAYABAAAAARAEUAAgAZABAAAAASAEUAAgAaABAAAAATAEUAAgAXABAAAAAUAEUAAgAYABAAAAAVAEUAAgAZABAAAAAWAEUAAgAaABAAAAAXAEUAAgAXABAAAAAYAEUAAgAYABAAAAAZAEUAAgAZABAAAAAaAEUAAgAaABAAAAAbAEUAAgAXABAAAAAjAEUAAgAXABAAAAAkAEUAAgAYABAAAAAlAEUAAgAZABAAAAAmAEUAAgAaABAAAAAnAEUAAgAXABAAAAAoAEUAAgAYABAAAAApAEUAAgAZABAAAAAqAEUAAgAaABAAAAArAEUAAgAXABAAAAAsAEUAAgAYABAAAAAtAEUAAgAZABAAAAAuAEUAAgAaABAAAAAvAEUAAgAXABAAAAAwAEUAAgAYABAAAAAxAEUAAgAZABAAAAAyAEUAAgAaABAAAAAzAEUAAgAXABAAAAA0AEUAAgAYABAAAAA1AEUAAgAZABAAAAA2AEUAAgAaABAAAAA3AEUAAgAXABAAAAA4AEUAAgAYABAAAAA5AEUAAgAZABAAAAAcAEUAAgAjAA8AAAAdAEUAAgAjAA8AAAAeAEUAAgAjAA8AAAAfAEUAAgAjAA8AAAAgAEUAAgAjAA8AAAAhAEUAAgAjAA8AAAAiAEUAAgAjAA8AAAAcAD8AAgAZABAAAAAdAD8AAgAZABAAAAAeAD8AAgAZABAAAAAfAD8AAgAZABAAAAAgAD8AAgAZABAAAAAeAEAAAgAZABAAAAAdAEAAAgAZABAAAAAcAEAAAgAZABAAAAAfAEAAAgAZABAAAAAgAEAAAgAZABAAAAAhAEAAAgAZABAAAAAiAEAAAgAZABAAAAAiAEEAAgAZABAAAAAhAEEAAgAZABAAAAAgAEEAAgAZABAAAAAfAEEAAgAZABAAAAAeAEEAAgAZABAAAAAdAEEAAgAZABAAAAAcAD4AAgAZABAAAAAdAD4AAgAZABAAAAAeAD4AAgAZABAAAAAfAD4AAgAZABAAAAAgAD4AAgAZABAAAAAhAD4AAgAZABAAAAAiAD4AAgAZABAAAAAiAD8AAgAZABAAAAAhAD8AAgAZABAAAAA=") +tile_set = SubResource("TileSet_p70al") + +[node name="Pier" type="TileMapLayer" parent="."] +position = Vector2(-376, -288) +scale = Vector2(1.2806993, 1.2685307) +tile_map_data = PackedByteArray("AAA+ADUAAAAAAAAAAAA=") +tile_set = SubResource("TileSet_l11rc") + +[node name="Seaside" type="TileMapLayer" parent="."] +position = Vector2(728, -80) +tile_map_data = PackedByteArray("AACF/z0AAwACAAoAAACF/z4AAwACAAsAAACF/z8AAwACAAwAAACF/0AAAwACAA0AAACF/0EAAwACAA4AAACF/0IAAwACAA8AAACF/0MAAwACABAAAACF/0QAAwACABEAAACG/z0AAwADAAoAAACG/z4AAwADAAsAAACG/z8AAwADAAwAAACG/0AAAwADAA0AAACG/0EAAwADAA4AAACG/0IAAwADAA8AAACG/0MAAwADABAAAACG/0QAAwADABEAAACH/z0AAwAEAAoAAACH/z4AAwAEAAsAAACH/z8AAwAEAAwAAACH/0AAAwAEAA0AAACH/0EAAwAEAA4AAACH/0IAAwAEAA8AAACH/0MAAwAEABAAAACH/0QAAwAEABEAAACI/z0AAwAFAAoAAACI/z4AAwAFAAsAAACI/z8AAwAFAAwAAACI/0AAAwAFAA0AAACI/0EAAwAFAA4AAACI/0IAAwAFAA8AAACI/0MAAwAFABAAAACI/0QAAwAFABEAAACJ/z0AAwAGAAoAAACJ/z4AAwAGAAsAAACJ/z8AAwAGAAwAAACJ/0AAAwAGAA0AAACJ/0EAAwAGAA4AAACJ/0IAAwAGAA8AAACJ/0MAAwAGABAAAACJ/0QAAwAGABEAAACK/z0AAwAHAAoAAACK/z4AAwAHAAsAAACK/z8AAwAHAAwAAACK/0AAAwAHAA0AAACK/0EAAwAHAA4AAACK/0IAAwAHAA8AAACK/0MAAwAHABAAAACK/0QAAwAHABEAAACL/z0AAwAIAAoAAACL/z4AAwAIAAsAAACL/z8AAwAIAAwAAACL/0AAAwAIAA0AAACL/0EAAwAIAA4AAACL/0IAAwAIAA8AAACL/0MAAwAIABAAAACL/0QAAwAIABEAAACM/z0AAwAJAAoAAACM/z4AAwAJAAsAAACM/z8AAwAJAAwAAACM/0AAAwAJAA0AAACM/0EAAwAJAA4AAACM/0IAAwAJAA8AAACM/0MAAwAJABAAAACM/0QAAwAJABEAAACN/z0AAwAKAAoAAACN/z4AAwAKAAsAAACN/z8AAwAKAAwAAACN/0AAAwAKAA0AAACN/0EAAwAKAA4AAACN/0IAAwAKAA8AAACN/0MAAwAKABAAAACN/0QAAwAKABEAAACO/z0AAwALAAoAAACO/z4AAwALAAsAAACO/z8AAwALAAwAAACO/0AAAwALAA0AAACO/0EAAwALAA4AAACO/0IAAwALAA8AAACO/0MAAwALABAAAACO/0QAAwALABEAAACP/z0AAwACAAoAAACP/z4AAwACAAsAAACP/z8AAwACAAwAAACP/0AAAwACAA0AAACP/0EAAwACAA4AAACP/0IAAwACAA8AAACP/0MAAwACABAAAACP/0QAAwACABEAAACQ/z0AAwADAAoAAACQ/z4AAwADAAsAAACQ/z8AAwADAAwAAACQ/0AAAwADAA0AAACQ/0EAAwADAA4AAACQ/0IAAwADAA8AAACQ/0MAAwADABAAAACQ/0QAAwADABEAAACR/z0AAwAEAAoAAACR/z4AAwAEAAsAAACR/z8AAwAEAAwAAACR/0AAAwAEAA0AAACR/0EAAwAEAA4AAACR/0IAAwAEAA8AAACR/0MAAwAEABAAAACR/0QAAwAEABEAAACS/z0AAwAFAAoAAACS/z4AAwAFAAsAAACS/z8AAwAFAAwAAACS/0AAAwAFAA0AAACS/0EAAwAFAA4AAACS/0IAAwAFAA8AAACS/0MAAwAFABAAAACS/0QAAwAFABEAAACT/z0AAwAGAAoAAACT/z4AAwAGAAsAAACT/z8AAwAGAAwAAACT/0AAAwAGAA0AAACT/0EAAwAGAA4AAACT/0IAAwAGAA8AAACT/0MAAwAGABAAAACT/0QAAwAGABEAAACU/z0AAwAHAAoAAACU/z4AAwAHAAsAAACU/z8AAwAHAAwAAACU/0AAAwAHAA0AAACU/0EAAwAHAA4AAACU/0IAAwAHAA8AAACU/0MAAwAHABAAAACU/0QAAwAHABEAAACV/z0AAwAIAAoAAACV/z4AAwAIAAsAAACV/z8AAwAIAAwAAACV/0AAAwAIAA0AAACV/0EAAwAIAA4AAACV/0IAAwAIAA8AAACV/0MAAwAIABAAAACV/0QAAwAIABEAAACW/z0AAwAJAAoAAACW/z4AAwAJAAsAAACW/z8AAwAJAAwAAACW/0AAAwAJAA0AAACW/0EAAwAJAA4AAACW/0IAAwAJAA8AAACW/0MAAwAJABAAAACW/0QAAwAJABEAAACX/z0AAwAKAAoAAACX/z4AAwAKAAsAAACX/z8AAwAKAAwAAACX/0AAAwAKAA0AAACX/0EAAwAKAA4AAACX/0IAAwAKAA8AAACX/0MAAwAKABAAAACX/0QAAwAKABEAAACY/z0AAwALAAoAAACY/z4AAwALAAsAAACY/z8AAwALAAwAAACY/0AAAwALAA0AAACY/0EAAwALAA4AAACY/0IAAwALAA8AAACY/0MAAwALABAAAACY/0QAAwALABEAAACZ/z0AAwAMAAoAAACZ/z4AAwAMAAsAAACZ/z8AAwAMAAwAAACZ/0AAAwAMAA0AAACZ/0EAAwAMAA4AAACZ/0IAAwAMAA8AAACZ/0MAAwAMABAAAACZ/0QAAwAMABEAAACa/z0AAwACAAoAAACa/z4AAwACAAsAAACa/z8AAwACAAwAAACa/0AAAwACAA0AAACa/0EAAwACAA4AAACa/0IAAwACAA8AAACa/0MAAwACABAAAACa/0QAAwACABEAAACb/z0AAwADAAoAAACb/z4AAwADAAsAAACb/z8AAwADAAwAAACb/0AAAwADAA0AAACb/0EAAwADAA4AAACb/0IAAwADAA8AAACb/0MAAwADABAAAACb/0QAAwADABEAAACc/z0AAwAEAAoAAACc/z4AAwAEAAsAAACc/z8AAwAEAAwAAACc/0AAAwAEAA0AAACc/0EAAwAEAA4AAACc/0IAAwAEAA8AAACc/0MAAwAEABAAAACc/0QAAwAEABEAAACd/z0AAwAFAAoAAACd/z4AAwAFAAsAAACd/z8AAwAFAAwAAACd/0AAAwAFAA0AAACd/0EAAwAFAA4AAACd/0IAAwAFAA8AAACd/0MAAwAFABAAAACd/0QAAwAFABEAAACe/z0AAwAGAAoAAACe/z4AAwAGAAsAAACe/z8AAwAGAAwAAACe/0AAAwAGAA0AAACe/0EAAwAGAA4AAACe/0IAAwAGAA8AAACe/0MAAwAGABAAAACe/0QAAwAGABEAAACf/z0AAwAHAAoAAACf/z4AAwAHAAsAAACf/z8AAwAHAAwAAACf/0AAAwAHAA0AAACf/0EAAwAHAA4AAACf/0IAAwAHAA8AAACf/0MAAwAHABAAAACf/0QAAwAHABEAAACg/z0AAwAIAAoAAACg/z4AAwAIAAsAAACg/z8AAwAIAAwAAACg/0AAAwAIAA0AAACg/0EAAwAIAA4AAACg/0IAAwAIAA8AAACg/0MAAwAIABAAAACg/0QAAwAIABEAAACh/z0AAwAJAAoAAACh/z4AAwAJAAsAAACh/z8AAwAJAAwAAACh/0AAAwAJAA0AAACh/0EAAwAJAA4AAACh/0IAAwAJAA8AAACh/0MAAwAJABAAAACh/0QAAwAJABEAAACi/z0AAwAKAAoAAACi/z4AAwAKAAsAAACi/z8AAwAKAAwAAACi/0AAAwAKAA0AAACi/0EAAwAKAA4AAACi/0IAAwAKAA8AAACi/0MAAwAKABAAAACi/0QAAwAKABEAAACj/z0AAwALAAoAAACj/z4AAwALAAsAAACj/z8AAwALAAwAAACj/0AAAwALAA0AAACj/0EAAwALAA4AAACj/0IAAwALAA8AAACj/0MAAwALABAAAACj/0QAAwALABEAAACk/z0AAwACAAoAAACk/z4AAwACAAsAAACk/z8AAwACAAwAAACk/0AAAwACAA0AAACk/0EAAwACAA4AAACk/0IAAwACAA8AAACk/0MAAwACABAAAACk/0QAAwACABEAAACl/z0AAwADAAoAAACl/z4AAwADAAsAAACl/z8AAwADAAwAAACl/0AAAwADAA0AAACl/0EAAwADAA4AAACl/0IAAwADAA8AAACl/0MAAwADABAAAACl/0QAAwADABEAAACm/z0AAwAEAAoAAACm/z4AAwAEAAsAAACm/z8AAwAEAAwAAACm/0AAAwAEAA0AAACm/0EAAwAEAA4AAACm/0IAAwAEAA8AAACm/0MAAwAEABAAAACm/0QAAwAEABEAAACn/z0AAwAFAAoAAACn/z4AAwAFAAsAAACn/z8AAwAFAAwAAACn/0AAAwAFAA0AAACn/0EAAwAFAA4AAACn/0IAAwAFAA8AAACn/0MAAwAFABAAAACn/0QAAwAFABEAAACo/z0AAwAGAAoAAACo/z4AAwAGAAsAAACo/z8AAwAGAAwAAACo/0AAAwAGAA0AAACo/0EAAwAGAA4AAACo/0IAAwAGAA8AAACo/0MAAwAGABAAAACo/0QAAwAGABEAAACp/z0AAwAHAAoAAACp/z4AAwAHAAsAAACp/z8AAwAHAAwAAACp/0AAAwAHAA0AAACp/0EAAwAHAA4AAACp/0IAAwAHAA8AAACp/0MAAwAHABAAAACp/0QAAwAHABEAAACq/z0AAwAIAAoAAACq/z4AAwAIAAsAAACq/z8AAwAIAAwAAACq/0AAAwAIAA0AAACq/0EAAwAIAA4AAACq/0IAAwAIAA8AAACq/0MAAwAIABAAAACq/0QAAwAIABEAAACr/z0AAwAJAAoAAACr/z4AAwAJAAsAAACr/z8AAwAJAAwAAACr/0AAAwAJAA0AAACr/0EAAwAJAA4AAACr/0IAAwAJAA8AAACr/0MAAwAJABAAAACr/0QAAwAJABEAAACs/z0AAwAKAAoAAACs/z4AAwAKAAsAAACs/z8AAwAKAAwAAACs/0AAAwAKAA0AAACs/0EAAwAKAA4AAACs/0IAAwAKAA8AAACs/0MAAwAKABAAAACs/0QAAwAKABEAAACt/z0AAwALAAoAAACt/z4AAwALAAsAAACt/z8AAwALAAwAAACt/0AAAwALAA0AAACt/0EAAwALAA4AAACt/0IAAwALAA8AAACt/0MAAwALABAAAACt/0QAAwALABEAAACu/z0AAwAMAAoAAACu/z4AAwAMAAsAAACu/z8AAwAMAAwAAACu/0AAAwAMAA0AAACu/0EAAwAMAA4AAACu/0IAAwAMAA8AAACu/0MAAwAMABAAAACu/0QAAwAMABEAAACv/z0AAwACAAoAAACv/z4AAwACAAsAAACv/z8AAwACAAwAAACv/0AAAwACAA0AAACv/0EAAwACAA4AAACv/0IAAwACAA8AAACv/0MAAwACABAAAACv/0QAAwACABEAAACw/z0AAwADAAoAAACw/z4AAwADAAsAAACw/z8AAwADAAwAAACw/0AAAwADAA0AAACw/0EAAwADAA4AAACw/0IAAwADAA8AAACw/0MAAwADABAAAACw/0QAAwADABEAAACx/z0AAwAEAAoAAACx/z4AAwAEAAsAAACx/z8AAwAEAAwAAACx/0AAAwAEAA0AAACx/0EAAwAEAA4AAACx/0IAAwAEAA8AAACx/0MAAwAEABAAAACx/0QAAwAEABEAAACy/z0AAwAFAAoAAACy/z4AAwAFAAsAAACy/z8AAwAFAAwAAACy/0AAAwAFAA0AAACy/0EAAwAFAA4AAACy/0IAAwAFAA8AAACy/0MAAwAFABAAAACy/0QAAwAFABEAAACz/z0AAwAGAAoAAACz/z4AAwAGAAsAAACz/z8AAwAGAAwAAACz/0AAAwAGAA0AAACz/0EAAwAGAA4AAACz/0IAAwAGAA8AAACz/0MAAwAGABAAAACz/0QAAwAGABEAAAC0/z0AAwAHAAoAAAC0/z4AAwAHAAsAAAC0/z8AAwAHAAwAAAC0/0AAAwAHAA0AAAC0/0EAAwAHAA4AAAC0/0IAAwAHAA8AAAC0/0MAAwAHABAAAAC0/0QAAwAHABEAAAC1/z0AAwAIAAoAAAC1/z4AAwAIAAsAAAC1/z8AAwAIAAwAAAC1/0AAAwAIAA0AAAC1/0EAAwAIAA4AAAC1/0IAAwAIAA8AAAC1/0MAAwAIABAAAAC1/0QAAwAIABEAAAC2/z0AAwAJAAoAAAC2/z4AAwAJAAsAAAC2/z8AAwAJAAwAAAC2/0AAAwAJAA0AAAC2/0EAAwAJAA4AAAC2/0IAAwAJAA8AAAC2/0MAAwAJABAAAAC2/0QAAwAJABEAAAC3/z0AAwAKAAoAAAC3/z4AAwAKAAsAAAC3/z8AAwAKAAwAAAC3/0AAAwAKAA0AAAC3/0EAAwAKAA4AAAC3/0IAAwAKAA8AAAC3/0MAAwAKABAAAAC3/0QAAwAKABEAAAC4/z0AAwALAAoAAAC4/z4AAwALAAsAAAC4/z8AAwALAAwAAAC4/0AAAwALAA0AAAC4/0EAAwALAA4AAAC4/0IAAwALAA8AAAC4/0MAAwALABAAAAC4/0QAAwALABEAAAC5/z0AAwAMAAoAAAC5/z4AAwAMAAsAAAC5/z8AAwAMAAwAAAC5/0AAAwAMAA0AAAC5/0EAAwAMAA4AAAC5/0IAAwAMAA8AAAC5/0MAAwAMABAAAAC5/0QAAwAMABEAAAC6/z0AAwACAAoAAAC6/z4AAwACAAsAAAC6/z8AAwACAAwAAAC6/0AAAwACAA0AAAC6/0EAAwACAA4AAAC6/0IAAwACAA8AAAC6/0MAAwACABAAAAC6/0QAAwACABEAAAC7/z0AAwADAAoAAAC7/z4AAwADAAsAAAC7/z8AAwADAAwAAAC7/0AAAwADAA0AAAC7/0EAAwADAA4AAAC7/0IAAwADAA8AAAC7/0MAAwADABAAAAC7/0QAAwADABEAAAC8/z0AAwAEAAoAAAC8/z4AAwAEAAsAAAC8/z8AAwAEAAwAAAC8/0AAAwAEAA0AAAC8/0EAAwAEAA4AAAC8/0IAAwAEAA8AAAC8/0MAAwAEABAAAAC8/0QAAwAEABEAAAC9/z0AAwAFAAoAAAC9/z4AAwAFAAsAAAC9/z8AAwAFAAwAAAC9/0AAAwAFAA0AAAC9/0EAAwAFAA4AAAC9/0IAAwAFAA8AAAC9/0MAAwAFABAAAAC9/0QAAwAFABEAAAC+/z0AAwAGAAoAAAC+/z4AAwAGAAsAAAC+/z8AAwAGAAwAAAC+/0AAAwAGAA0AAAC+/0EAAwAGAA4AAAC+/0IAAwAGAA8AAAC+/0MAAwAGABAAAAC+/0QAAwAGABEAAAC//z0AAwAHAAoAAAC//z4AAwAHAAsAAAC//z8AAwAHAAwAAAC//0AAAwAHAA0AAAC//0EAAwAHAA4AAAC//0IAAwAHAA8AAAC//0MAAwAHABAAAAC//0QAAwAHABEAAADA/z0AAwAIAAoAAADA/z4AAwAIAAsAAADA/z8AAwAIAAwAAADA/0AAAwAIAA0AAADA/0EAAwAIAA4AAADA/0IAAwAIAA8AAADA/0MAAwAIABAAAADA/0QAAwAIABEAAADB/z0AAwAJAAoAAADB/z4AAwAJAAsAAADB/z8AAwAJAAwAAADB/0AAAwAJAA0AAADB/0EAAwAJAA4AAADB/0IAAwAJAA8AAADB/0MAAwAJABAAAADB/0QAAwAJABEAAADC/z0AAwAKAAoAAADC/z4AAwAKAAsAAADC/z8AAwAKAAwAAADC/0AAAwAKAA0AAADC/0EAAwAKAA4AAADC/0IAAwAKAA8AAADC/0MAAwAKABAAAADC/0QAAwAKABEAAADD/z0AAwALAAoAAADD/z4AAwALAAsAAADD/z8AAwALAAwAAADD/0AAAwALAA0AAADD/0EAAwALAA4AAADD/0IAAwALAA8AAADD/0MAAwALABAAAADD/0QAAwALABEAAADE/z0AAwAMAAoAAADE/z4AAwAMAAsAAADE/z8AAwAMAAwAAADE/0AAAwAMAA0AAADE/0EAAwAMAA4AAADE/0IAAwAMAA8AAADE/0MAAwAMABAAAADE/0QAAwAMABEAAADF/z0AAwACAAoAAADF/z4AAwACAAsAAADF/z8AAwACAAwAAADF/0AAAwACAA0AAADF/0EAAwACAA4AAADF/0IAAwACAA8AAADF/0MAAwACABAAAADF/0QAAwACABEAAADG/z0AAwADAAoAAADG/z4AAwADAAsAAADG/z8AAwADAAwAAADG/0AAAwADAA0AAADG/0EAAwADAA4AAADG/0IAAwADAA8AAADG/0MAAwADABAAAADG/0QAAwADABEAAADH/z0AAwAEAAoAAADH/z4AAwAEAAsAAADH/z8AAwAEAAwAAADH/0AAAwAEAA0AAADH/0EAAwAEAA4AAADH/0IAAwAEAA8AAADH/0MAAwAEABAAAADH/0QAAwAEABEAAADI/z0AAwAFAAoAAADI/z4AAwAFAAsAAADI/z8AAwAFAAwAAADI/0AAAwAFAA0AAADI/0EAAwAFAA4AAADI/0IAAwAFAA8AAADI/0MAAwAFABAAAADI/0QAAwAFABEAAADJ/z0AAwAGAAoAAADJ/z4AAwAGAAsAAADJ/z8AAwAGAAwAAADJ/0AAAwAGAA0AAADJ/0EAAwAGAA4AAADJ/0IAAwAGAA8AAADJ/0MAAwAGABAAAADJ/0QAAwAGABEAAADK/z0AAwAHAAoAAADK/z4AAwAHAAsAAADK/z8AAwAHAAwAAADK/0AAAwAHAA0AAADK/0EAAwAHAA4AAADK/0IAAwAHAA8AAADK/0MAAwAHABAAAADK/0QAAwAHABEAAADL/z0AAwAIAAoAAADL/z4AAwAIAAsAAADL/z8AAwAIAAwAAADL/0AAAwAIAA0AAADL/0EAAwAIAA4AAADL/0IAAwAIAA8AAADL/0MAAwAIABAAAADL/0QAAwAIABEAAADM/z0AAwAJAAoAAADM/z4AAwAJAAsAAADM/z8AAwAJAAwAAADM/0AAAwAJAA0AAADM/0EAAwAJAA4AAADM/0IAAwAJAA8AAADM/0MAAwAJABAAAADM/0QAAwAJABEAAADN/z0AAwAKAAoAAADN/z4AAwAKAAsAAADN/z8AAwAKAAwAAADN/0AAAwAKAA0AAADN/0EAAwAKAA4AAADN/0IAAwAKAA8AAADN/0MAAwAKABAAAADN/0QAAwAKABEAAADO/z0AAwALAAoAAADO/z4AAwALAAsAAADO/z8AAwALAAwAAADO/0AAAwALAA0AAADO/0EAAwALAA4AAADO/0IAAwALAA8AAADO/0MAAwALABAAAADO/0QAAwALABEAAADP/z0AAwAMAAoAAADP/z4AAwAMAAsAAADP/z8AAwAMAAwAAADP/0AAAwAMAA0AAADP/0EAAwAMAA4AAADP/0IAAwAMAA8AAADP/0MAAwAMABAAAADP/0QAAwAMABEAAADQ/z0AAwACAAoAAADQ/z4AAwACAAsAAADQ/z8AAwACAAwAAADQ/0AAAwACAA0AAADQ/0EAAwACAA4AAADQ/0IAAwACAA8AAADQ/0MAAwACABAAAADQ/0QAAwACABEAAADR/z0AAwADAAoAAADR/z4AAwADAAsAAADR/z8AAwADAAwAAADR/0AAAwADAA0AAADR/0EAAwADAA4AAADR/0IAAwADAA8AAADR/0MAAwADABAAAADR/0QAAwADABEAAADS/z0AAwAEAAoAAADS/z4AAwAEAAsAAADS/z8AAwAEAAwAAADS/0AAAwAEAA0AAADS/0EAAwAEAA4AAADS/0IAAwAEAA8AAADS/0MAAwAEABAAAADS/0QAAwAEABEAAADT/z0AAwAFAAoAAADT/z4AAwAFAAsAAADT/z8AAwAFAAwAAADT/0AAAwAFAA0AAADT/0EAAwAFAA4AAADT/0IAAwAFAA8AAADT/0MAAwAFABAAAADT/0QAAwAFABEAAADU/z0AAwAGAAoAAADU/z4AAwAGAAsAAADU/z8AAwAGAAwAAADU/0AAAwAGAA0AAADU/0EAAwAGAA4AAADU/0IAAwAGAA8AAADU/0MAAwAGABAAAADU/0QAAwAGABEAAADV/z0AAwAHAAoAAADV/z4AAwAHAAsAAADV/z8AAwAHAAwAAADV/0AAAwAHAA0AAADV/0EAAwAHAA4AAADV/0IAAwAHAA8AAADV/0MAAwAHABAAAADV/0QAAwAHABEAAADW/z0AAwAIAAoAAADW/z4AAwAIAAsAAADW/z8AAwAIAAwAAADW/0AAAwAIAA0AAADW/0EAAwAIAA4AAADW/0IAAwAIAA8AAADW/0MAAwAIABAAAADW/0QAAwAIABEAAADX/z0AAwAJAAoAAADX/z4AAwAJAAsAAADX/z8AAwAJAAwAAADX/0AAAwAJAA0AAADX/0EAAwAJAA4AAADX/0IAAwAJAA8AAADX/0MAAwAJABAAAADX/0QAAwAJABEAAADY/z0AAwAKAAoAAADY/z4AAwAKAAsAAADY/z8AAwAKAAwAAADY/0AAAwAKAA0AAADY/0EAAwAKAA4AAADY/0IAAwAKAA8AAADY/0MAAwAKABAAAADY/0QAAwAKABEAAADZ/z0AAwALAAoAAADZ/z4AAwALAAsAAADZ/z8AAwALAAwAAADZ/0AAAwALAA0AAADZ/0EAAwALAA4AAADZ/0IAAwALAA8AAADZ/0MAAwALABAAAADZ/0QAAwALABEAAADa/z0AAwAMAAoAAADa/z4AAwAMAAsAAADa/z8AAwAMAAwAAADa/0AAAwAMAA0AAADa/0EAAwAMAA4AAADa/0IAAwAMAA8AAADa/0MAAwAMABAAAADa/0QAAwAMABEAAADb/z0AAwACAAoAAADb/z4AAwACAAsAAADb/z8AAwACAAwAAADb/0AAAwACAA0AAADb/0EAAwACAA4AAADb/0IAAwACAA8AAADb/0MAAwACABAAAADb/0QAAwACABEAAADc/z0AAwADAAoAAADc/z4AAwADAAsAAADc/z8AAwADAAwAAADc/0AAAwADAA0AAADc/0EAAwADAA4AAADc/0IAAwADAA8AAADc/0MAAwADABAAAADc/0QAAwADABEAAADd/z0AAwAEAAoAAADd/z4AAwAEAAsAAADd/z8AAwAEAAwAAADd/0AAAwAEAA0AAADd/0EAAwAEAA4AAADd/0IAAwAEAA8AAADd/0MAAwAEABAAAADd/0QAAwAEABEAAADe/z0AAwAFAAoAAADe/z4AAwAFAAsAAADe/z8AAwAFAAwAAADe/0AAAwAFAA0AAADe/0EAAwAFAA4AAADe/0IAAwAFAA8AAADe/0MAAwAFABAAAADe/0QAAwAFABEAAADf/z0AAwAGAAoAAADf/z4AAwAGAAsAAADf/z8AAwAGAAwAAADf/0AAAwAGAA0AAADf/0EAAwAGAA4AAADf/0IAAwAGAA8AAADf/0MAAwAGABAAAADf/0QAAwAGABEAAADg/z0AAwAHAAoAAADg/z4AAwAHAAsAAADg/z8AAwAHAAwAAADg/0AAAwAHAA0AAADg/0EAAwAHAA4AAADg/0IAAwAHAA8AAADg/0MAAwAHABAAAADg/0QAAwAHABEAAADh/z0AAwAIAAoAAADh/z4AAwAIAAsAAADh/z8AAwAIAAwAAADh/0AAAwAIAA0AAADh/0EAAwAIAA4AAADh/0IAAwAIAA8AAADh/0MAAwAIABAAAADh/0QAAwAIABEAAADi/z0AAwAJAAoAAADi/z4AAwAJAAsAAADi/z8AAwAJAAwAAADi/0AAAwAJAA0AAADi/0EAAwAJAA4AAADi/0IAAwAJAA8AAADi/0MAAwAJABAAAADi/0QAAwAJABEAAADj/z0AAwAKAAoAAADj/z4AAwAKAAsAAADj/z8AAwAKAAwAAADj/0AAAwAKAA0AAADj/0EAAwAKAA4AAADj/0IAAwAKAA8AAADj/0MAAwAKABAAAADj/0QAAwAKABEAAADk/z0AAwALAAoAAADk/z4AAwALAAsAAADk/z8AAwALAAwAAADk/0AAAwALAA0AAADk/0EAAwALAA4AAADk/0IAAwALAA8AAADk/0MAAwALABAAAADk/0QAAwALABEAAADl/z0AAwAMAAoAAADl/z4AAwAMAAsAAADl/z8AAwAMAAwAAADl/0AAAwAMAA0AAADl/0EAAwAMAA4AAADl/0IAAwAMAA8AAADl/0MAAwAMABAAAADl/0QAAwAMABEAAADm/z0AAwACAAoAAADm/z4AAwACAAsAAADm/z8AAwACAAwAAADm/0AAAwACAA0AAADm/0EAAwACAA4AAADm/0IAAwACAA8AAADm/0MAAwACABAAAADm/0QAAwACABEAAADn/z0AAwADAAoAAADn/z4AAwADAAsAAADn/z8AAwADAAwAAADn/0AAAwADAA0AAADn/0EAAwADAA4AAADn/0IAAwADAA8AAADn/0MAAwADABAAAADn/0QAAwADABEAAADo/z0AAwAEAAoAAADo/z4AAwAEAAsAAADo/z8AAwAEAAwAAADo/0AAAwAEAA0AAADo/0EAAwAEAA4AAADo/0IAAwAEAA8AAADo/0MAAwAEABAAAADo/0QAAwAEABEAAADp/z0AAwAFAAoAAADp/z4AAwAFAAsAAADp/z8AAwAFAAwAAADp/0AAAwAFAA0AAADp/0EAAwAFAA4AAADp/0IAAwAFAA8AAADp/0MAAwAFABAAAADp/0QAAwAFABEAAADq/z0AAwAGAAoAAADq/z4AAwAGAAsAAADq/z8AAwAGAAwAAADq/0AAAwAGAA0AAADq/0EAAwAGAA4AAADq/0IAAwAGAA8AAADq/0MAAwAGABAAAADq/0QAAwAGABEAAADr/z0AAwAHAAoAAADr/z4AAwAHAAsAAADr/z8AAwAHAAwAAADr/0AAAwAHAA0AAADr/0EAAwAHAA4AAADr/0IAAwAHAA8AAADr/0MAAwAHABAAAADr/0QAAwAHABEAAADs/z0AAwAIAAoAAADs/z4AAwAIAAsAAADs/z8AAwAIAAwAAADs/0AAAwAIAA0AAADs/0EAAwAIAA4AAADs/0IAAwAIAA8AAADs/0MAAwAIABAAAADs/0QAAwAIABEAAADt/z0AAwAKAAoAAADt/z4AAwAKAAsAAADt/z8AAwAKAAwAAADt/0AAAwAKAA0AAADt/0EAAwAKAA4AAADt/0IAAwAKAA8AAADt/0MAAwAKABAAAADt/0QAAwAKABEAAADu/z0AAwALAAoAAADu/z4AAwALAAsAAADu/z8AAwALAAwAAADu/0AAAwALAA0AAADu/0EAAwALAA4AAADu/0IAAwALAA8AAADu/0MAAwALABAAAADu/0QAAwALABEAAADv/z0AAwAMAAoAAADv/z4AAwAMAAsAAADv/z8AAwAMAAwAAADv/0AAAwAMAA0AAADv/0EAAwAMAA4AAADv/0IAAwAMAA8AAADv/0MAAwAMABAAAADv/0QAAwAMABEAAADw/zoAAwAVAAcAAADw/zsAAwAVAAgAAADw/zwAAwAVAAkAAADw/z0AAwAVAAoAAADw/z4AAwAVAAsAAADw/z8AAwAVAAwAAADw/0AAAwAVAA0AAADw/0EAAwAVAA4AAADw/0IAAwAVAA8AAADw/0MAAwAVABAAAADw/0QAAwAVABEAAADx/z4AAwAWAAsAAADx/z8AAwAWAAwAAADx/0AAAwAWAA0AAADx/0EAAwAWAA4AAADx/0IAAwAWAA8AAADx/0MAAwAWABAAAADx/0QAAwAWABEAAADx/z0AAwAWAAsAAADy/0QAAwAXABAAAADz/0QAAwAXABAAAAD0/0QAAwAXABAAAAD1/0QAAwAXABAAAAD2/0QAAwAXABAAAAD3/0QAAwAXABAAAAD4/0QAAwAXABAAAAD5/0QAAwAXABAAAAD6/0QAAwAXABAAAAD7/0QAAwAXABAAAAD8/0QAAwAXABAAAAD9/0QAAwAXABAAAAD+/0QAAwAXABAAAAD//0QAAwAXABAAAAAAAEQAAwAXABAAAAABAEQAAwAXABAAAAACAEQAAwAXABAAAAADAEQAAwAXABAAAAAEAEQAAwAXABAAAAAFAEQAAwAXABAAAAAOAEQAAwAXABAAAAAPAEQAAwAXABAAAAAQAEQAAwAXABAAAAARAEQAAwAXABAAAAASAEQAAwAXABAAAAATAEQAAwAXABAAAAAUAEQAAwAXABAAAAAVAEQAAwAXABAAAAAWAEQAAwAXABAAAAAXAEQAAwAXABAAAAAYAEQAAwAXABAAAAAZAEQAAwAXABAAAAAaAEQAAwAXABAAAAAbAEQAAwAXABAAAAAcAEQAAwAXABAAAAAdAEQAAwAXABAAAAAeAEQAAwAXABAAAAAfAEQAAwAXABAAAAAgAEQAAwAXABAAAAAhAEQAAwAXABAAAAAiAEQAAwAXABAAAAAjAEQAAwAXABAAAAAkAEQAAwAXABAAAACE/z0AAwAAAAoAAACE/z4AAwAAAAsAAACE/z8AAwAAAAwAAACE/0AAAwAAAA0AAACE/0EAAwAAAA4AAACE/0IAAwAAAA8AAACE/0MAAwAAABAAAACE/0QAAwAAABEAAAA=") +tile_set = SubResource("TileSet_w86vl") + +[node name="NeighborhoodEntrance" type="Area2D" parent="."] +position = Vector2(896, 271) +collision_layer = 2 +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="NeighborhoodEntrance"] +position = Vector2(8, -38) +shape = SubResource("RectangleShape2D_0ao37") + +[node name="WelcomeBoard" parent="." instance=ExtResource("24_board")] +position = Vector2(144, -57) + +[node name="NPCMayor" parent="." instance=ExtResource("25_mayor")] +position = Vector2(-112, -57) + +[node name="NoticeBoard" parent="." instance=ExtResource("26_noticeboard")] +position = Vector2(-400, -73) + +[node name="Chairs" type="Node2D" parent="."] +position = Vector2(-1024, 87) + +[node name="Chair1" parent="Chairs" instance=ExtResource("27_chair")] +position = Vector2(-24, -136) +scale = Vector2(0.552, 0.552) + +[node name="Chair2" parent="Chairs" instance=ExtResource("27_chair")] +position = Vector2(360, -136) +scale = Vector2(0.552, 0.552) + +[node name="Chair3" parent="Chairs" instance=ExtResource("27_chair")] +position = Vector2(24, 624) +scale = Vector2(0.552, 0.552) + +[node name="Chair4" parent="Chairs" instance=ExtResource("27_chair")] +position = Vector2(392, 624) +scale = Vector2(0.552, 0.552) + +[connection signal="body_entered" from="NeighborhoodEntrance" to="." method="_on_neighborhood_entrance_body_entered"] diff --git a/Scenes/placeholder_tileset.tres b/Scenes/placeholder_tileset.tres new file mode 100644 index 0000000..6624844 --- /dev/null +++ b/Scenes/placeholder_tileset.tres @@ -0,0 +1,11 @@ +[gd_resource type="TileSet" load_steps=2 format=3 uid="uid://1ouutp6s2r1b"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_1"] +0:0/0 = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +1:0/0 = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) + +[resource] +physics_layer_0/collision_layer = 1 +sources/0 = SubResource("TileSetAtlasSource_1") diff --git a/Scripts/.DS_Store b/Scripts/.DS_Store new file mode 100644 index 0000000..b58e818 Binary files /dev/null and b/Scripts/.DS_Store differ diff --git a/Scripts/AutoLoad/NetworkManager.gd b/Scripts/AutoLoad/NetworkManager.gd new file mode 100644 index 0000000..17fa453 --- /dev/null +++ b/Scripts/AutoLoad/NetworkManager.gd @@ -0,0 +1,169 @@ +extends Node + +signal connected +signal disconnected +signal login_ok(my_id, players) +signal player_joined(id, name, x, y, skin_id) +signal player_left(id) +signal player_moved(id, x, y, flip_h, frame) +signal chat_message_received(sender_id, text) + +signal private_chat_message_received(sender_id, text) +signal notices_received(data) + +const DEFAULT_SERVER_URL = "ws://127.0.0.1:8910" + +var socket := WebSocketPeer.new() +var my_id: int = -1 +var player_info := {"name": "Player", "skin_id": 0} +var players := {} # id -> {name, x, y, skin_id} +var _connected := false +var next_spawn_position: Vector2 = Vector2.ZERO + +func _ready(): + process_mode = Node.PROCESS_MODE_ALWAYS + +func _process(_delta): + socket.poll() + var state = socket.get_ready_state() + + if state == WebSocketPeer.STATE_OPEN: + if not _connected: + _connected = true + _on_connected() + + while socket.get_available_packet_count(): + var packet = socket.get_packet() + _on_message(packet.get_string_from_utf8()) + + elif state == WebSocketPeer.STATE_CLOSED: + if _connected: + _connected = false + _on_disconnected() + +func connect_to_server(url: String = ""): + if url.is_empty(): + url = DEFAULT_SERVER_URL + var err = socket.connect_to_url(url) + if err != OK: + print("Failed to connect: ", err) + return err + +func _on_connected(): + print("Connected to server!") + # Send login + send_json({ + "type": "login", + "name": player_info["name"], + "skin_id": player_info["skin_id"] + }) + connected.emit() + +func _on_disconnected(): + print("Disconnected from server") + my_id = -1 + players.clear() + disconnected.emit() + +func _on_message(data: String): + var json = JSON.new() + var err = json.parse(data) + if err != OK: + print("JSON parse error: ", data) + return + + var msg = json.data + # if msg.get("type") == "player_move" and int(msg.get("id", -1)) != my_id: + # print("RAW NET: ", data) + var msg_type = msg.get("type", "") + + match msg_type: + "login_ok": + my_id = int(msg["id"]) + for p in msg["players"]: + players[int(p["id"])] = { + "name": p["name"], + "x": p["x"], + "y": p["y"], + "skin_id": p["skin_id"] + } + login_ok.emit(my_id, players) + + "player_join": + var id = int(msg["id"]) + players[id] = { + "name": msg["name"], + "x": msg["x"], + "y": msg["y"], + "skin_id": msg["skin_id"] + } + player_joined.emit(id, msg["name"], msg["x"], msg["y"], msg["skin_id"]) + + "player_leave": + var id = int(msg["id"]) + players.erase(id) + player_left.emit(id) + + "player_move": + var id = int(msg["id"]) + if id != my_id: # Only log others to reduce spam, or log all? Let's log all for now if issue is critical + print("Net: Recv Move for ID: ", id, " Frame: ", msg.get("frame", 1)) + if players.has(id): + players[id]["x"] = msg["x"] + players[id]["y"] = msg["y"] + player_moved.emit(id, msg["x"], msg["y"], msg.get("flip_h", false), int(msg.get("frame", 1))) + + "chat": + var id = int(msg["id"]) + chat_message_received.emit(id, msg["text"]) + + "private_chat": + var id = int(msg["sender_id"]) + private_chat_message_received.emit(id, msg["text"]) + + "notices_list": + notices_received.emit(msg.get("data", [])) + + + "scene_peers": + # Refresh player list for new scene + players.clear() + for p in msg["players"]: + players[int(p["id"])] = { + "name": p["name"], + "x": p["x"], + "y": p["y"], + "skin_id": p["skin_id"] + } + # Emit login_ok to trigger refresh (or we could add a scene_loaded signal) + login_ok.emit(my_id, players) + +func send_json(obj: Dictionary): + if socket.get_ready_state() == WebSocketPeer.STATE_OPEN: + socket.send_text(JSON.stringify(obj)) + +func send_move(x: float, y: float, flip_h: bool, frame: int): + send_json({"type": "move", "x": x, "y": y, "flip_h": flip_h, "frame": frame}) + +func send_change_scene(scene_name: String, pos: Vector2 = Vector2(-20000, -20000)): + var data = {"type": "change_scene", "scene": scene_name} + if pos.x != -20000: + data["x"] = pos.x + data["y"] = pos.y + send_json(data) + +func send_message(text: String): + send_json({"type": "chat", "text": text}) + +func send_private_message(target_id: int, text: String): + send_json({"type": "private_chat", "target_id": target_id, "text": text}) + +func request_notices(): + send_json({"type": "get_notices"}) + + +func set_player_name(n: String): + player_info["name"] = n + +func set_skin_id(id: int): + player_info["skin_id"] = id diff --git a/Scripts/AutoLoad/NetworkManager.gd.uid b/Scripts/AutoLoad/NetworkManager.gd.uid new file mode 100644 index 0000000..edd50c4 --- /dev/null +++ b/Scripts/AutoLoad/NetworkManager.gd.uid @@ -0,0 +1 @@ +uid://bxf7twlnfjyfo diff --git a/Scripts/AutoLoad/SkinManager.gd b/Scripts/AutoLoad/SkinManager.gd new file mode 100644 index 0000000..d00909c --- /dev/null +++ b/Scripts/AutoLoad/SkinManager.gd @@ -0,0 +1,13 @@ +extends Node + +# Placeholder skins +var skins: Dictionary = { + 0: "res://icon.svg", # Fallback +} + +func get_skin_texture(id: int) -> Texture2D: + if skins.has(id): + # In a real scenario, this would preload or load form cache + # For now, using load() is fine for prototype + return load(skins[id]) + return load(skins[0]) diff --git a/Scripts/AutoLoad/SkinManager.gd.uid b/Scripts/AutoLoad/SkinManager.gd.uid new file mode 100644 index 0000000..ba184d2 --- /dev/null +++ b/Scripts/AutoLoad/SkinManager.gd.uid @@ -0,0 +1 @@ +uid://d0oxbcdjtte7y diff --git a/Scripts/Chair.gd b/Scripts/Chair.gd new file mode 100644 index 0000000..eb9cc1f --- /dev/null +++ b/Scripts/Chair.gd @@ -0,0 +1,48 @@ +extends StaticBody2D + +signal on_player_entered_range +signal on_player_exited_range + +@onready var sit_marker = $SitMarker +@onready var interaction_area = $InteractionArea + +var is_occupied: bool = false +var current_player: Node2D = null +var player_in_range: Node2D = null + +func _ready(): + interaction_area.body_entered.connect(_on_body_entered) + interaction_area.body_exited.connect(_on_body_exited) + +func _input(event): + if is_occupied: + return + + if player_in_range and event is InputEventKey and event.pressed and event.keycode == KEY_E: + _interact(player_in_range) + +func _interact(player: Node2D): + if is_occupied: + return + + is_occupied = true + current_player = player + + # Assume player has this method (we will implement it next) + if player.has_method("start_sitting"): + player.start_sitting(sit_marker.global_position, self) + +# Called by player when they stand up +func on_player_stand_up(): + is_occupied = false + current_player = null + +func _on_body_entered(body): + if body.has_method("start_sitting"): + player_in_range = body + emit_signal("on_player_entered_range") + +func _on_body_exited(body): + if body == player_in_range: + player_in_range = null + emit_signal("on_player_exited_range") diff --git a/Scripts/Chair.gd.uid b/Scripts/Chair.gd.uid new file mode 100644 index 0000000..a5d25c0 --- /dev/null +++ b/Scripts/Chair.gd.uid @@ -0,0 +1 @@ +uid://hlnghptb6myk diff --git a/Scripts/NPCMayor.gd b/Scripts/NPCMayor.gd new file mode 100644 index 0000000..ee833db --- /dev/null +++ b/Scripts/NPCMayor.gd @@ -0,0 +1,30 @@ +extends CharacterBody2D + +signal interaction_happened(text) + +@export var npc_name: String = "Mayor" +@export var dialogue: String = "欢迎来到WhaleTown,我是镇长范鲸鱼" + +func _ready(): + $Sprite2D.texture = preload("res://Assets/MayorWhale.png") + # Sprite Sheet setup for idle animation (if needed later) + # For now, frame 0 is fine + $Sprite2D.hframes = 3 + $Sprite2D.vframes = 4 + + # Start Idle Animation + if has_node("AnimationPlayer"): + $AnimationPlayer.play("idle") + + # Ensure interaction layer + collision_layer = 3 # Layer 1 & 2 (Blocking) + collision_mask = 3 + +func interact(): + show_bubble(dialogue) + return null + +func show_bubble(text): + var bubble = preload("res://Scenes/UI/ChatBubble.tscn").instantiate() + add_child(bubble) + bubble.set_text(text) diff --git a/Scripts/NPCMayor.gd.uid b/Scripts/NPCMayor.gd.uid new file mode 100644 index 0000000..1b6cd14 --- /dev/null +++ b/Scripts/NPCMayor.gd.uid @@ -0,0 +1 @@ +uid://5tvkhbf0237e diff --git a/Scripts/NoticeBoard.gd b/Scripts/NoticeBoard.gd new file mode 100644 index 0000000..7feee05 --- /dev/null +++ b/Scripts/NoticeBoard.gd @@ -0,0 +1,13 @@ +extends StaticBody2D + +func interact(): + print("Interacted with Notice Board") + + # Check if dialog already exists + if get_tree().root.has_node("NoticeDialog"): + return + + var dialog = preload("res://Scenes/UI/NoticeDialog.tscn").instantiate() + dialog.name = "NoticeDialog" + get_tree().root.add_child(dialog) + return null # No bubble text needed diff --git a/Scripts/NoticeBoard.gd.uid b/Scripts/NoticeBoard.gd.uid new file mode 100644 index 0000000..a267270 --- /dev/null +++ b/Scripts/NoticeBoard.gd.uid @@ -0,0 +1 @@ +uid://do577s3lo1p6f diff --git a/Scripts/Player.gd b/Scripts/Player.gd new file mode 100644 index 0000000..6133993 --- /dev/null +++ b/Scripts/Player.gd @@ -0,0 +1,222 @@ +extends CharacterBody2D + +@export var grid_size := 16 + +var player_id: int = -1 +var is_local := false +var is_moving := false +var server_position := Vector2.ZERO + +signal interaction_request(target_id, target_name) + +@onready var ray = $RayCast2D + +func _ready(): + server_position = position + + # Initial sprite setup + $Sprite2D.scale = Vector2(0.5, 0.5) + $Sprite2D.frame = 1 + + # Physics Collision (Movement) + collision_layer = 2 # Force Player to be on Layer 2 + collision_mask = 1 # Only collide with World (Layer 1), walk through other Players (Layer 2) + + # RayCast Setup + ray.enabled = true + ray.hit_from_inside = true # Detect if overlapping + ray.collision_mask = 3 # Layers 1 (World) and 2 (Player) + ray.add_exception(self) # Ignore local player + + if is_local: + var cam = Camera2D.new() + cam.zoom = Vector2(1.0, 1.0) + cam.position_smoothing_enabled = true + add_child(cam) + + NetworkManager.chat_message_received.connect(_on_chat_message) + + # Set Name Label + var name_label = $NameLabel + if is_local: + name_label.text = NetworkManager.player_info["name"] + name_label.modulate = Color(0.5, 1, 0.5) # Highlight local player + elif player_id != -1 and NetworkManager.players.has(player_id): + name_label.text = NetworkManager.players[player_id].name + +func _physics_process(_delta): + if is_local: + _process_input() + else: + _process_remote_movement() + + # Interaction Check (F Key) moved to _input to prevent spam + +var is_sitting := false +var current_chair: Node2D = null + +func _process_input(): + # Stop input if chatting + var focus_owner = get_viewport().gui_get_focus_owner() + if focus_owner is LineEdit: + return + + if is_moving or is_sitting: + return + + var input_dir := Vector2.ZERO + if Input.is_action_pressed("ui_up") or Input.is_key_pressed(KEY_W): + input_dir = Vector2.UP + $Sprite2D.frame = 4 # Row 1, Center (Back view) + $Sprite2D.flip_h = false + ray.target_position = Vector2(0, -96) + elif Input.is_action_pressed("ui_down") or Input.is_key_pressed(KEY_S): + input_dir = Vector2.DOWN + $Sprite2D.frame = 1 # Row 0, Center (Front view) + $Sprite2D.flip_h = false + ray.target_position = Vector2(0, 96) + elif Input.is_action_pressed("ui_left") or Input.is_key_pressed(KEY_A): + input_dir = Vector2.LEFT + $Sprite2D.frame = 3 # Row 1, Left (Side view) + $Sprite2D.flip_h = false + ray.target_position = Vector2(-96, 0) + elif Input.is_action_pressed("ui_right") or Input.is_key_pressed(KEY_D): + input_dir = Vector2.RIGHT + $Sprite2D.frame = 3 # Use same side view + $Sprite2D.flip_h = true # Flip it + ray.target_position = Vector2(96, 0) + + if input_dir != Vector2.ZERO: + _attempt_move(input_dir) + +func _input(event): + if not is_local: + return + + if event is InputEventKey and event.pressed and not event.echo and event.keycode == KEY_F: + # Check if ignoring input (chatting) + var focus_owner = get_viewport().gui_get_focus_owner() + if focus_owner is LineEdit: + return + + if is_sitting: + stand_up() + return + + ray.force_raycast_update() + + if ray.is_colliding(): + var collider = ray.get_collider() + # Check if collider is a player (ID-based name) + if collider: + if collider.has_method("interact"): + var text = collider.interact() + if text: + show_bubble(text) # Show response locally for now + elif collider.name.is_valid_int(): + var target_id = int(str(collider.name)) + var p_info = NetworkManager.players.get(target_id) + var t_name = p_info["name"] if p_info else "Unknown" + interaction_request.emit(target_id, t_name) + +func start_sitting(target_pos: Vector2, chair: Node2D): + if is_sitting: + return + + is_sitting = true + is_moving = false # Force stop moving + current_chair = chair + + # Disable physics/collision + set_physics_process(false) + $CollisionShape2D.set_deferred("disabled", true) + + # Tween to seat + var tween = create_tween() + tween.tween_property(self, "position", target_pos, 0.3).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) + + # Visuals + $Sprite2D.frame = 1 # Sit/Idle Front + $Sprite2D.flip_h = false + # You might want to offset Z-index if chair has backrest vs stool + # z_index = 0 # Default + +func stand_up(): + if not is_sitting: + return + + is_sitting = false + + # Notify chair + if current_chair and current_chair.has_method("on_player_stand_up"): + current_chair.on_player_stand_up() + current_chair = null + + # Restore physics + set_physics_process(true) + $CollisionShape2D.set_deferred("disabled", false) + + # Optional: Move slightly forward to avoid clipping immediately if collision enables + var exit_pos = position + Vector2(0, 10) + position = exit_pos + NetworkManager.send_move(position.x, position.y, $Sprite2D.flip_h, $Sprite2D.frame) + + + + +func _attempt_move(dir: Vector2): + var target_pos = position + dir * grid_size + + # Save state + var old_target = ray.target_position + var old_mask = ray.collision_mask + var old_hfi = ray.hit_from_inside + var old_cwa = ray.collide_with_areas + + # Configure for movement check (World Only, Short Range, Bodies Only) + ray.target_position = dir * grid_size + ray.collision_mask = 1 + ray.hit_from_inside = false + ray.collide_with_areas = false # Ignore Areas (like Doors), only hit Walls (Bodies) + + ray.force_raycast_update() + var blocked = ray.is_colliding() + + # Restore state for Chat Interaction + ray.target_position = old_target + ray.collision_mask = old_mask + ray.hit_from_inside = old_hfi + ray.collide_with_areas = old_cwa + + if not blocked: + _tween_movement(target_pos) + # Send to server WITH orientation + NetworkManager.send_move(target_pos.x, target_pos.y, $Sprite2D.flip_h, $Sprite2D.frame) + +func _process_remote_movement(): + if position != server_position and not is_moving: + _tween_movement(server_position) + +func set_remote_state(pos: Vector2, flip_h: bool, frame: int): + if is_local: + return # Do not let remote updates override local input + server_position = pos + $Sprite2D.flip_h = flip_h + $Sprite2D.frame = frame + +func _tween_movement(target_pos: Vector2): + is_moving = true + var tween = create_tween() + tween.tween_property(self, "position", target_pos, 0.2) + tween.tween_callback(func(): is_moving = false) + +func _on_chat_message(sender_id, text): + if sender_id == player_id: + show_bubble(text) + +func show_bubble(text): + $NameLabel.hide() + var bubble = preload("res://Scenes/UI/ChatBubble.tscn").instantiate() + add_child(bubble) + bubble.set_text(text) + bubble.tree_exited.connect(func(): $NameLabel.show()) diff --git a/Scripts/Player.gd.uid b/Scripts/Player.gd.uid new file mode 100644 index 0000000..7ce804e --- /dev/null +++ b/Scripts/Player.gd.uid @@ -0,0 +1 @@ +uid://c2oq8ax5dl7s2 diff --git a/Scripts/Room.gd b/Scripts/Room.gd new file mode 100644 index 0000000..8c3bde8 --- /dev/null +++ b/Scripts/Room.gd @@ -0,0 +1,91 @@ +extends Node2D + +@onready var tile_map = $TileMapLayer +@onready var players_container = $PlayersContainer + +var player_nodes := {} # id -> Node + +func _ready(): + # Visual setup + tile_map.scale = Vector2(0.5, 0.5) + + NetworkManager.login_ok.connect(_on_login_ok) + NetworkManager.player_joined.connect(_on_player_joined) + NetworkManager.player_left.connect(_on_player_left) + NetworkManager.player_moved.connect(_on_player_moved) + NetworkManager.disconnected.connect(_on_disconnected) # Handle disconnect + NetworkManager.chat_message_received.connect(_on_chat_message_received) # Reuse chat logic if desired + + # Spawn myself manually since scene_peers excludes self + _spawn_player(NetworkManager.my_id, NetworkManager.player_info["name"], 0, 0, NetworkManager.player_info["skin_id"]) + + # Spawn existing players (including self if already in list, but we usually spawn self manually or via list) + # Since we just transitioned, NetworkManager.players contains the new list from 'scene_peers' message + for id in NetworkManager.players: + var p = NetworkManager.players[id] + _spawn_player(id, p["name"], p["x"], p["y"], p.get("skin_id", 0)) + + # Chat UI + var chat = preload("res://Scenes/UI/ChatHUD.tscn").instantiate() + add_child(chat) + +func _spawn_player(id, _p_name, x, y, _skin_id): + if player_nodes.has(id): return # Prevent duplicate + + var p = preload("res://Scenes/Player.tscn").instantiate() + p.name = str(id) + + # For local player in Room, we might want a fixed spawn point (0,0) or the one from server + # If it's local player, we usually force it to (0,0) on entry + if id == NetworkManager.my_id: + p.position = Vector2(0, 0) + else: + p.position = Vector2(x, y) + + p.player_id = id + p.is_local = (id == NetworkManager.my_id) + + players_container.add_child(p) + player_nodes[id] = p + + if p.is_local: + var camera = Camera2D.new() + camera.make_current() + p.add_child(camera) + +func _on_login_ok(_my_id, _players): + # Refresh players if we get a full update + for id in player_nodes: + if id != NetworkManager.my_id: + player_nodes[id].queue_free() + player_nodes.clear() + + for id in NetworkManager.players: + var p = NetworkManager.players[id] + _spawn_player(id, p["name"], p["x"], p["y"], p.get("skin_id", 0)) + +func _on_player_joined(id, p_name, x, y, skin_id): + _spawn_player(id, p_name, x, y, skin_id) + +func _on_player_left(id): + if player_nodes.has(id): + player_nodes[id].queue_free() + player_nodes.erase(id) + +func _on_player_moved(id, x, y, flip_h, frame): + if player_nodes.has(id): + player_nodes[id].set_remote_state(Vector2(x, y), flip_h, frame) + +func _on_chat_message_received(sender_id, text): + # Chat HUD handles it via signals usually, but if we need bubbles: + if player_nodes.has(sender_id): + player_nodes[sender_id].show_bubble(text) + +func _on_disconnected(): + get_tree().change_scene_to_file("res://Scenes/StartMenu.tscn") + +func _on_exit_body_entered(body): + if body.name == str(NetworkManager.my_id): + # Return to the world + NetworkManager.send_change_scene("world", NetworkManager.next_spawn_position) + get_tree().change_scene_to_file("res://Scenes/World.tscn") diff --git a/Scripts/Room.gd.uid b/Scripts/Room.gd.uid new file mode 100644 index 0000000..ffb2233 --- /dev/null +++ b/Scripts/Room.gd.uid @@ -0,0 +1 @@ +uid://dbq68ofn2ldxm diff --git a/Scripts/StartMenu.gd b/Scripts/StartMenu.gd new file mode 100644 index 0000000..c594bf5 --- /dev/null +++ b/Scripts/StartMenu.gd @@ -0,0 +1,31 @@ +extends CanvasLayer + +@onready var name_input = $CenterContainer/Card/Content/Form/NameInput + +const SERVER_URL = "ws://127.0.0.1:8910" + +func _ready(): + name_input.grab_focus() + +func _unhandled_input(event): + if event.is_action_pressed("ui_accept"): + _on_join_pressed() + +func _on_join_pressed(): + if name_input.text.strip_edges().is_empty(): + return + + NetworkManager.set_player_name(name_input.text) + + # Connect with hardcoded URL + var err = NetworkManager.connect_to_server(SERVER_URL) + if err == OK: + # Disable button to prevent double click? + # Wait for login_ok before changing scene + if not NetworkManager.login_ok.is_connected(_on_login_ok): + NetworkManager.login_ok.connect(_on_login_ok, CONNECT_ONE_SHOT) + else: + print("Connection failed: ", err) + +func _on_login_ok(_my_id, _players): + get_tree().change_scene_to_file("res://Scenes/World.tscn") diff --git a/Scripts/StartMenu.gd.uid b/Scripts/StartMenu.gd.uid new file mode 100644 index 0000000..1fc302b --- /dev/null +++ b/Scripts/StartMenu.gd.uid @@ -0,0 +1 @@ +uid://c78blp14uphut diff --git a/Scripts/UI/ChatBubble.gd b/Scripts/UI/ChatBubble.gd new file mode 100644 index 0000000..7cf5367 --- /dev/null +++ b/Scripts/UI/ChatBubble.gd @@ -0,0 +1,9 @@ +extends Control + +@onready var label = $PanelContainer/Label + +func set_text(text): + label.text = text + # Destroy after 5 seconds + await get_tree().create_timer(5.0).timeout + queue_free() diff --git a/Scripts/UI/ChatBubble.gd.uid b/Scripts/UI/ChatBubble.gd.uid new file mode 100644 index 0000000..8e154ed --- /dev/null +++ b/Scripts/UI/ChatBubble.gd.uid @@ -0,0 +1 @@ +uid://bpddnrpvlcf7l diff --git a/Scripts/UI/ChatHUD.gd b/Scripts/UI/ChatHUD.gd new file mode 100644 index 0000000..7dfca34 --- /dev/null +++ b/Scripts/UI/ChatHUD.gd @@ -0,0 +1,71 @@ +extends CanvasLayer + +@onready var chat_log = $PanelContainer/VBoxContainer/RichTextLabel +@onready var input_field = $PanelContainer/VBoxContainer/LineEdit + +var private_target_id: int = -1 +var private_target_name: String = "" + +func _ready(): + NetworkManager.chat_message_received.connect(_on_chat_message_received) + NetworkManager.private_chat_message_received.connect(_on_private_message_received) + input_field.text_submitted.connect(_on_text_submitted) + +func _input(event): + if event.is_action_pressed("ui_cancel"): # ESC + set_private_target(-1, "") + input_field.release_focus() + elif event.is_action_pressed("ui_accept"): # Enter + if not input_field.has_focus(): + input_field.grab_focus() + get_viewport().set_input_as_handled() + +func set_private_target(id: int, p_name: String): + private_target_id = id + private_target_name = p_name + + if id != -1: + input_field.placeholder_text = "[Private] To " + p_name + "..." + input_field.add_theme_color_override("font_color", Color(1, 0.5, 1)) # Pink for private + # input_field.grab_focus() # Don't grab focus automatically, let user move + else: + input_field.placeholder_text = "Press Enter to chat..." + input_field.remove_theme_color_override("font_color") + +func _on_text_submitted(new_text): + if new_text.strip_edges().is_empty(): + input_field.release_focus() + return + + if private_target_id != -1: + NetworkManager.send_private_message(private_target_id, new_text) + # Show my own private message in log + chat_log.append_text("[color=#FF88FF][Private -> %s]: %s[/color]\n" % [private_target_name, new_text]) + else: + NetworkManager.send_message(new_text) + + input_field.clear() + input_field.release_focus() + +func _on_chat_message_received(sender_id, text): + var sender_name = str(sender_id) + + print("Chat Debug: Msg from ", sender_id, " (Type: ", typeof(sender_id), ")") + print("Known Players: ", NetworkManager.players.keys()) + + if NetworkManager.players.has(sender_id): + sender_name = NetworkManager.players[sender_id].get("name", str(sender_id)) + # Debug empty name + if sender_name == "": + sender_name = "Player_" + str(sender_id) + else: + print("Chat Debug: Player ID not found in NetworkManager.players") + + chat_log.append_text("[color=yellow]%s[/color]: %s\n" % [sender_name, text]) + +func _on_private_message_received(sender_id, text): + var sender_name = str(sender_id) + if NetworkManager.players.has(sender_id): + sender_name = NetworkManager.players[sender_id].get("name", str(sender_id)) + + chat_log.append_text("[color=#FF88FF][Private From %s]: %s[/color]\n" % [sender_name, text]) diff --git a/Scripts/UI/ChatHUD.gd.uid b/Scripts/UI/ChatHUD.gd.uid new file mode 100644 index 0000000..be4c1c8 --- /dev/null +++ b/Scripts/UI/ChatHUD.gd.uid @@ -0,0 +1 @@ +uid://dia2n8udb7xxq diff --git a/Scripts/UI/NoticeDialog.gd b/Scripts/UI/NoticeDialog.gd new file mode 100644 index 0000000..3087711 --- /dev/null +++ b/Scripts/UI/NoticeDialog.gd @@ -0,0 +1,144 @@ +extends CanvasLayer + +@onready var content_label = $CenterContainer/PanelContainer/VBoxContainer/ContentContainer/TextPanel/ContentLabel +@onready var prev_btn = $CenterContainer/PanelContainer/VBoxContainer/Footer/PrevButton +@onready var next_btn = $CenterContainer/PanelContainer/VBoxContainer/Footer/NextButton +@onready var dots_container = $CenterContainer/PanelContainer/VBoxContainer/Footer/DotsContainer +@onready var content_container = $CenterContainer/PanelContainer/VBoxContainer/ContentContainer + +# Mock Data +var pages = [ + { + "text": "欢迎来到 [color=#3399ff]Datawhale Town[/color]!\n\n这里是开源学习者的家园。在这里,我们一同探索知识,分享成长。\n\n[center]🐋[/center]", + "image_color": Color(0.9, 0.9, 0.9) # Mock image placeholder + }, + { + "text": "最新活动:\n\n- 镇长刚刚搬进来了,就在喷泉左边。\n- 欢迎板已经设立,查看最新动态。\n- 玩家名字现在显示在头顶了!", + "image_color": Color(0.8, 0.9, 0.8) + }, + { + "text": "操作提示:\n\n- 按 [color=#ffaa00]F[/color] 键可以与物体互动。\n- 在下方输入框输入文字并在气泡中显示。\n- 点击右下角按钮发送聊天。", + "image_color": Color(0.9, 0.8, 0.8) + } +] + +var current_page = 0 +var tween: Tween + +func _ready(): + # Pause the game + get_tree().paused = true + + $CenterContainer/PanelContainer/VBoxContainer/Header/RightContainer/CloseButton.pressed.connect(_on_close_pressed) + prev_btn.pressed.connect(_on_prev_pressed) + next_btn.pressed.connect(_on_next_pressed) + + # Network Integration + NetworkManager.notices_received.connect(_on_notices_received) + NetworkManager.request_notices() + + # Initial Setup (with generic "Loading" state) + pages = [{"text": "[center]Loading notices...[/center]", "image_color": Color(0.9, 0.9, 0.9)}] + _setup_dots() + _update_ui(false) + +func _on_notices_received(data: Array): + if data.is_empty(): + pages = [{"text": "[center]No notices available.[/center]", "image_color": Color(0.9, 0.9, 0.9)}] + else: + pages = data + # Handle color strings from JSON if necessary + for p in pages: + if p.has("image_color") and p["image_color"] is String: + p["image_color"] = Color(p["image_color"]) + + current_page = 0 + _setup_dots() + _update_ui(true) + + +func _setup_dots(): + for child in dots_container.get_children(): + child.queue_free() + + for i in range(pages.size()): + var dot = ColorRect.new() + dot.custom_minimum_size = Vector2(10, 10) # Base size + dots_container.add_child(dot) + +func _update_ui(animate: bool = true): + if pages.is_empty(): + return + + # Update Buttons + prev_btn.disabled = (current_page == 0) + next_btn.disabled = (current_page == pages.size() - 1) + + # Update Dots Logic + var dots = dots_container.get_children() + for i in range(dots.size()): + if i == current_page: + dots[i].color = Color(0.2, 0.2, 0.2, 1) # Dark Active + dots[i].custom_minimum_size = Vector2(12, 12) # Active Slightly Larger + else: + dots[i].color = Color(0.8, 0.8, 0.8, 1) # Light Inactive + dots[i].custom_minimum_size = Vector2(10, 10) + + # Update Content + if animate: + _animate_content_change() + else: + _set_content_immediate() + +@onready var image_rect = $CenterContainer/PanelContainer/VBoxContainer/ContentContainer/ImagePanel/ImageRect +@onready var image_label = $CenterContainer/PanelContainer/VBoxContainer/ContentContainer/ImagePanel/ImageLabel + +func _set_content_immediate(): + var page = pages[current_page] + content_label.text = page.get("text", "") + + if page.has("image_path") and page["image_path"] != "": + var path = page["image_path"] + if ResourceLoader.exists(path): + image_rect.texture = load(path) + image_label.visible = false + else: + image_rect.texture = null + image_label.visible = true + image_label.text = "Image Not Found" + else: + image_rect.texture = null + image_label.visible = true + image_label.text = "No Image" + + + +func _animate_content_change(): + if tween and tween.is_valid(): + tween.kill() + + tween = create_tween() + + # Fade Out + tween.tween_property(content_container, "modulate:a", 0.0, 0.15) + + # Callback to change text + tween.tween_callback(self._set_content_immediate) + + # Fade In + tween.tween_property(content_container, "modulate:a", 1.0, 0.15) + +func _on_prev_pressed(): + if current_page > 0: + current_page -= 1 + _update_ui() + +func _on_next_pressed(): + if current_page < pages.size() - 1: + current_page += 1 + _update_ui() + +func _on_close_pressed(): + # Unpause the game + get_tree().paused = false + queue_free() diff --git a/Scripts/UI/NoticeDialog.gd.uid b/Scripts/UI/NoticeDialog.gd.uid new file mode 100644 index 0000000..83dc63b --- /dev/null +++ b/Scripts/UI/NoticeDialog.gd.uid @@ -0,0 +1 @@ +uid://cy3n8ccmeolgd diff --git a/Scripts/UI/WelcomeDialog.gd b/Scripts/UI/WelcomeDialog.gd new file mode 100644 index 0000000..154b799 --- /dev/null +++ b/Scripts/UI/WelcomeDialog.gd @@ -0,0 +1,20 @@ +extends CanvasLayer + +func _ready(): + # Connect close button (X) + var header_close = find_child("CloseButton", true, false) + if header_close: + header_close.pressed.connect(_on_close_pressed) + + # Connect Start button + var start_btn = find_child("StartButton", true, false) + if start_btn: + start_btn.pressed.connect(_on_close_pressed) + +func _on_close_pressed(): + queue_free() + +func _input(event): + # Allow ESC to close + if event.is_action_pressed("ui_cancel"): + queue_free() diff --git a/Scripts/UI/WelcomeDialog.gd.uid b/Scripts/UI/WelcomeDialog.gd.uid new file mode 100644 index 0000000..195f870 --- /dev/null +++ b/Scripts/UI/WelcomeDialog.gd.uid @@ -0,0 +1 @@ +uid://djjy58mh6kl4o diff --git a/Scripts/WelcomeBoard.gd b/Scripts/WelcomeBoard.gd new file mode 100644 index 0000000..c43b466 --- /dev/null +++ b/Scripts/WelcomeBoard.gd @@ -0,0 +1,13 @@ +extends StaticBody2D + +func interact(): + # Prevent multiple dialogs + if get_tree().root.has_node("WelcomeDialog"): + return null + + # Spawn the Welcome Dialog + var dialog = preload("res://Scenes/UI/WelcomeDialog.tscn").instantiate() + dialog.name = "WelcomeDialog" + # Add to the Scene Root (World) or CanvasLayer if it has one + get_tree().root.add_child(dialog) + return null # Return null prevents Player from showing a bubble diff --git a/Scripts/WelcomeBoard.gd.uid b/Scripts/WelcomeBoard.gd.uid new file mode 100644 index 0000000..75155a3 --- /dev/null +++ b/Scripts/WelcomeBoard.gd.uid @@ -0,0 +1 @@ +uid://cfiinv7n2spwd diff --git a/Scripts/World.gd b/Scripts/World.gd new file mode 100644 index 0000000..c258e6d --- /dev/null +++ b/Scripts/World.gd @@ -0,0 +1,159 @@ +extends Node2D + +@onready var players_container = $PlayersContainer +@onready var tile_map = $Ground + +var player_nodes := {} # id -> Node + +func _ready(): + $Ground.scale = Vector2(1, 1) + if has_node("Water"): + $Water.scale = Vector2(1, 1) + + # Clean setup: trust the scene file + var entrance = get_node_or_null("NeighborhoodEntrance") + if entrance: + entrance.monitorable = true + entrance.monitoring = true + # Ensure it detects Player (Layer 2) OR Layer 1 just in case + entrance.collision_mask = 3 # Layers 1 and 2 + + if not entrance.body_entered.is_connected(_on_neighborhood_entrance_body_entered): + entrance.body_entered.connect(_on_neighborhood_entrance_body_entered) + if not entrance.body_exited.is_connected(_on_neighborhood_entrance_body_exited): + entrance.body_exited.connect(_on_neighborhood_entrance_body_exited) + + NetworkManager.login_ok.connect(_on_login_ok) + NetworkManager.player_joined.connect(_on_player_joined) + NetworkManager.player_left.connect(_on_player_left) + NetworkManager.player_moved.connect(_on_player_moved) + NetworkManager.disconnected.connect(_on_disconnected) + + # Explicitly spawn local player if logged in + if NetworkManager.my_id != -1: + _spawn_player(NetworkManager.my_id, NetworkManager.player_info["name"], 0, 0, NetworkManager.player_info["skin_id"]) + + for id in NetworkManager.players: + var p = NetworkManager.players[id] + _spawn_player(id, p["name"], p["x"], p["y"], p.get("skin_id", 0)) + + var chat = preload("res://Scenes/UI/ChatHUD.tscn").instantiate() + add_child(chat) + + + + + +var player_in_entrance := false + +func _on_neighborhood_entrance_body_entered(body): + print("Body ENTERED Trigger: ", body.name, " (My ID: ", NetworkManager.my_id, ")") + # Check if it's the local player + if body.name == str(NetworkManager.my_id): + player_in_entrance = true + print("Player ENTERED entrance area") + +func _on_neighborhood_entrance_body_exited(body): + if body.name == str(NetworkManager.my_id): + player_in_entrance = false + print("Player EXITED entrance area") + +func _physics_process(_delta): + if player_in_entrance: + # Check for Up input while inside the entrance + if Input.is_action_pressed("ui_up") or Input.is_key_pressed(KEY_W): + _do_room_transition() + +func _do_room_transition(): + var entrance = get_node_or_null("NeighborhoodEntrance") + if not entrance: + return + + var local_player = player_nodes.get(NetworkManager.my_id) + if not local_player: + return + + player_in_entrance = false # Prevent re-trigger + NetworkManager.next_spawn_position = local_player.position + Vector2(0, 32) + NetworkManager.send_change_scene("room_" + str(NetworkManager.my_id), Vector2(0, 0)) + get_tree().change_scene_to_file("res://Scenes/Room.tscn") + + +func _fill_background(): + # Fill base stone floor (standard blue brick at 0,0) + # Procedural generation for background + # Procedural generation for background + for x in range(-50, 150): + for y in range(-50, 100): + var tile_pos = Vector2i(x, y) + + # Plaza in the center (0 to 15) + if x >= 0 and x < 15 and y >= 0 and y < 15: + # Use light gray stone coordinates confirmed in TownTileset.tres + var rand_var = randi() % 3 + tile_map.set_cell(tile_pos, 5, Vector2i(4 + rand_var, 0)) # (4,0), (5,0), (6,0) + else: + # Regular floor (blue-ish / darker) + if (x + y) % 2 == 0: + tile_map.set_cell(tile_pos, 5, Vector2i(1, 0)) + else: + tile_map.set_cell(tile_pos, 5, Vector2i(2, 0)) + +func _on_login_ok(_my_id, _players): + pass + +func _on_player_joined(id, p_name, x, y, skin_id): + _spawn_player(id, p_name, x, y, skin_id) + +func _on_player_left(id): + if player_nodes.has(id): + player_nodes[id].queue_free() + player_nodes.erase(id) + +func _on_player_moved(id, x, y, flip_h, frame): + if player_nodes.has(id): + player_nodes[id].set_remote_state(Vector2(x, y), flip_h, frame) + +func _on_disconnected(): + get_tree().change_scene_to_file("res://Scenes/StartMenu.tscn") + +func _spawn_player(id, _p_name, x, y, _skin_id): + # Anti-Ghosting: Check if this player already exists in the tree + if players_container.has_node(str(id)): + var old_node = players_container.get_node(str(id)) + old_node.name = "Ghost_" + str(id) # Rename to avoid duplicate name error during queue_free + old_node.queue_free() + + # Also clean dictionary + if player_nodes.has(id): + player_nodes.erase(id) + + var p = preload("res://Scenes/Player.tscn").instantiate() + p.name = str(id) + + # Override position if returning from another scene + var spawn_pos = Vector2(x, y) + if id == NetworkManager.my_id and NetworkManager.next_spawn_position != Vector2.ZERO: + spawn_pos = NetworkManager.next_spawn_position + # Reset after use + NetworkManager.next_spawn_position = Vector2.ZERO + + p.position = spawn_pos + p.player_id = id + p.is_local = (id == NetworkManager.my_id) + print("Spawning Player ID: ", id, " Name: ", _p_name, " Is Local: ", p.is_local, " (My ID: ", NetworkManager.my_id, ")") + + if p.is_local: + p.interaction_request.connect(_on_interaction_request) + + players_container.add_child(p) + player_nodes[id] = p + +func _on_interaction_request(target_id, target_name): + print("World received interaction request for: ", target_name) + var chat = get_node_or_null("ChatHUD") + if chat: + if chat.has_method("set_private_target"): + chat.set_private_target(target_id, target_name) + else: + print("ChatHUD missing set_private_target method") diff --git a/Scripts/World.gd.uid b/Scripts/World.gd.uid new file mode 100644 index 0000000..a1889e0 --- /dev/null +++ b/Scripts/World.gd.uid @@ -0,0 +1 @@ +uid://dpgj6ge7vk76f diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..8aed351 --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..89a73e5 --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://btjiaj0jyoj0p" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.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/project.godot b/project.godot new file mode 100644 index 0000000..628b5a0 --- /dev/null +++ b/project.godot @@ -0,0 +1,37 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Project PokePlaza" +run/main_scene="res://Scenes/StartMenu.tscn" +config/features=PackedStringArray("4.5", "GL Compatibility") +config/icon="res://icon.svg" + +[autoload] + +NetworkManager="*res://Scripts/AutoLoad/NetworkManager.gd" +SkinManager="*res://Scripts/AutoLoad/SkinManager.gd" + +[display] + +window/size/viewport_width=960 +window/size/viewport_height=540 +window/size/window_width_override=1280 +window/size/window_height_override=720 +window/stretch/mode="canvas_items" + +[rendering] + +textures/canvas_textures/default_texture_filter=0 +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" +environment/defaults/default_clear_color=Color(0, 0, 0, 1) +occlusion_culling/use_occlusion_culling=true diff --git a/server/index.js b/server/index.js new file mode 100644 index 0000000..12f6670 --- /dev/null +++ b/server/index.js @@ -0,0 +1,265 @@ +const WebSocket = require('ws'); + +const PORT = 8910; +const wss = new WebSocket.Server({ port: PORT }); + +// Game State +let nextPlayerId = 1; +const players = new Map(); // id -> { id, name, x, y, skin_id, ws } + +// Mock Data +const NOTICES = [ + { + "text": "欢迎来到 [color=#3399ff]Datawhale Town (Online)[/color]!\n\n这里是开源学习者的家园。在这里,我们一同探索知识,分享成长。\n\n[center]🐋[/center]", + "image_path": "res://Assets/Assets/background2.png" + }, + { + "text": "最新活动 (Server):\n\n- 镇长刚刚搬进来了,就在喷泉左边。\n- 欢迎板已经设立,查看最新动态。\n- 玩家名字现在显示在头顶了!", + "image_path": "res://Assets/MayorWhale.png" + }, + { + "text": "操作提示:\n\n- 按 [color=#ffaa00]F[/color] 键可以与物体互动。\n- 在下方输入框输入文字并在气泡中显示。\n- 点击右下角按钮发送聊天。", + "image_path": "res://Assets/NoticeBoard.png" + } +]; + +console.log(`PokePlaza Server listening on ws://localhost:${PORT}`); + +wss.on('connection', (ws) => { + let playerId = null; + + ws.on('message', (rawData) => { + let msg; + try { + msg = JSON.parse(rawData.toString()); + } catch (e) { + console.error('Invalid JSON:', rawData.toString()); + return; + } + + switch (msg.type) { + case 'login': + handleLogin(ws, msg); + break; + case 'move': + handleMove(msg); + break; + case 'chat': + handleChat(msg); + break; + case 'private_chat': + handlePrivateChat(msg); + break; + case 'change_scene': + handleChangeScene(msg); + break; + case 'get_notices': + handleGetNotices(ws); + break; + + + + + + function handlePrivateChat(msg) { + if (playerId === null) return; + + const targetId = msg.target_id; + const targetPlayer = players.get(targetId); + + if (targetPlayer) { + // Send to Target + send(targetPlayer.ws, { + type: 'private_chat', + sender_id: playerId, + text: msg.text + }); + + // Send back to Sender (so they know it sent) + // Actually, client can handle simulated display, but server confirmation is nice. + // In this design, let's just let client handle its own "Sent" display to avoid double-echo if we aren't strict. + // But wait, our client code relies on "private_chat_message_received" for INCOMING. + // For OUTGOING, the client code manually appends to log. So we DON'T echo back. + } + } + default: + console.warn('Unknown message type:', msg.type); + } + }); + + ws.on('close', () => { + if (playerId !== null) { + console.log(`Player ${playerId} disconnected`); + const player = players.get(playerId); + const currentScene = player ? player.scene : 'world'; + players.delete(playerId); + broadcastExcept(playerId, { type: 'player_leave', id: playerId }, currentScene); + } + }); + + function handleLogin(ws, msg) { + playerId = nextPlayerId++; + const player = { + id: playerId, + name: msg.name || 'Anonymous', + x: 240, // Center of 480x270 viewport + y: 135, + skin_id: msg.skin_id || 0, + scene: 'world', // Default scene + ws: ws + }; + players.set(playerId, player); + + // Send login_ok to this player with all current players IN THE SAME SCENE + const sameScenePlayers = []; + for (const [id, p] of players) { + if (p.scene === player.scene) { + sameScenePlayers.push({ id: p.id, name: p.name, x: p.x, y: p.y, skin_id: p.skin_id }); + } + } + send(ws, { type: 'login_ok', id: playerId, players: sameScenePlayers }); + + // Broadcast to others in the SAME SCENE that a new player joined + broadcastExcept(playerId, { + type: 'player_join', + id: playerId, + name: player.name, + x: player.x, + y: player.y, + skin_id: player.skin_id + }, player.scene); + + console.log(`Player ${playerId} (${player.name}) logged in to ${player.scene}`); + } + + function handleMove(msg) { + if (playerId === null) return; + const player = players.get(playerId); + // console.log(`Server: handleMove from PlayerID ${playerId}. Msg: ${JSON.stringify(msg)}`); + if (!player) return; + + player.x = msg.x; + player.y = msg.y; + + // Broadcast to all OTHER players IN THE SAME SCENE + broadcastExcept(playerId, { + type: 'player_move', + id: playerId, + x: msg.x, + y: msg.y, + flip_h: msg.flip_h, + frame: msg.frame + }, player.scene); + } + + function handleChangeScene(msg) { + if (playerId === null) return; + const player = players.get(playerId); + if (!player) return; + + const oldScene = player.scene; + const newScene = msg.scene; + + if (oldScene === newScene) return; + + // 1. Tell everyone in the OLD scene that this player LEFT + broadcastExcept(playerId, { type: 'player_leave', id: playerId }, oldScene); + + // 2. Update player scene AND position if provided + player.scene = newScene; + if (typeof msg.x === 'number' && typeof msg.y === 'number') { + player.x = msg.x; + player.y = msg.y; + } + console.log(`Player ${playerId} changed scene to ${newScene} at (${player.x}, ${player.y})`); + + // 3. Tell everyone in the NEW scene that this player JOINED + broadcastExcept(playerId, { + type: 'player_join', + id: playerId, + name: player.name, + x: player.x, + y: player.y, + skin_id: player.skin_id + }, newScene); + + // 4. Send the player the list of existing players in the NEW scene + const newScenePlayers = []; + for (const [id, p] of players) { + if (p.id !== playerId && p.scene === newScene) { + newScenePlayers.push({ id: p.id, name: p.name, x: p.x, y: p.y, skin_id: p.skin_id }); + } + } + // Use a special sync message or re-use login_ok? + // Re-using login_ok might confuse the client if it resets ID, but since ID matches, it might be fine. + // Better: custom 'scene_peers' message. + send(ws, { type: 'scene_peers', players: newScenePlayers }); + } + + function handleChat(msg) { + if (playerId === null) return; + const player = players.get(playerId); + // Broadcast to ALL players IN THE SAME SCENE + broadcast({ + type: 'chat', + id: playerId, + text: msg.text + }, player ? player.scene : 'world'); + } + + function handlePrivateChat(msg) { + if (playerId === null) return; + + const targetId = msg.target_id; + const targetPlayer = players.get(targetId); + + if (targetPlayer) { + // Send to Target + send(targetPlayer.ws, { + type: 'private_chat', + sender_id: playerId, + text: msg.text + }); + // No echo needed for outgoing, client handles it. + } + } +}); + +function send(ws, obj) { + if (ws.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify(obj)); + } +} + +function broadcast(obj, sceneFilter) { + const data = JSON.stringify(obj); + for (const [id, player] of players) { + if (player.ws.readyState === WebSocket.OPEN) { + if (!sceneFilter || player.scene === sceneFilter) { + player.ws.send(data); + } + } + } +} + +function broadcastExcept(excludeId, obj, sceneFilter) { + const data = JSON.stringify(obj); + for (const [id, player] of players) { + if (id !== excludeId && player.ws.readyState === WebSocket.OPEN) { + if (!sceneFilter || player.scene === sceneFilter) { + // console.log(`Server: Sending to ${id}: ${data}`); + player.ws.send(data); + } + } + } +} + +function handleGetNotices(ws) { + const response = { + type: 'notices_list', + data: NOTICES + }; + if (ws.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify(response)); + } +} diff --git a/server/node_modules/.package-lock.json b/server/node_modules/.package-lock.json new file mode 100644 index 0000000..6460726 --- /dev/null +++ b/server/node_modules/.package-lock.json @@ -0,0 +1,29 @@ +{ + "name": "pokeplaza-server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/server/node_modules/ws/LICENSE b/server/node_modules/ws/LICENSE new file mode 100644 index 0000000..1da5b96 --- /dev/null +++ b/server/node_modules/ws/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2011 Einar Otto Stangvik +Copyright (c) 2013 Arnout Kazemier and contributors +Copyright (c) 2016 Luigi Pinca and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/server/node_modules/ws/README.md b/server/node_modules/ws/README.md new file mode 100644 index 0000000..21f10df --- /dev/null +++ b/server/node_modules/ws/README.md @@ -0,0 +1,548 @@ +# ws: a Node.js WebSocket library + +[![Version npm](https://img.shields.io/npm/v/ws.svg?logo=npm)](https://www.npmjs.com/package/ws) +[![CI](https://img.shields.io/github/actions/workflow/status/websockets/ws/ci.yml?branch=master&label=CI&logo=github)](https://github.com/websockets/ws/actions?query=workflow%3ACI+branch%3Amaster) +[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg?logo=coveralls)](https://coveralls.io/github/websockets/ws) + +ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and +server implementation. + +Passes the quite extensive Autobahn test suite: [server][server-report], +[client][client-report]. + +**Note**: This module does not work in the browser. The client in the docs is a +reference to a backend with the role of a client in the WebSocket communication. +Browser clients must use the native +[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) +object. To make the same code work seamlessly on Node.js and the browser, you +can use one of the many wrappers available on npm, like +[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws). + +## Table of Contents + +- [Protocol support](#protocol-support) +- [Installing](#installing) + - [Opt-in for performance](#opt-in-for-performance) + - [Legacy opt-in for performance](#legacy-opt-in-for-performance) +- [API docs](#api-docs) +- [WebSocket compression](#websocket-compression) +- [Usage examples](#usage-examples) + - [Sending and receiving text data](#sending-and-receiving-text-data) + - [Sending binary data](#sending-binary-data) + - [Simple server](#simple-server) + - [External HTTP/S server](#external-https-server) + - [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server) + - [Client authentication](#client-authentication) + - [Server broadcast](#server-broadcast) + - [Round-trip time](#round-trip-time) + - [Use the Node.js streams API](#use-the-nodejs-streams-api) + - [Other examples](#other-examples) +- [FAQ](#faq) + - [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client) + - [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections) + - [How to connect via a proxy?](#how-to-connect-via-a-proxy) +- [Changelog](#changelog) +- [License](#license) + +## Protocol support + +- **HyBi drafts 07-12** (Use the option `protocolVersion: 8`) +- **HyBi drafts 13-17** (Current default, alternatively option + `protocolVersion: 13`) + +## Installing + +``` +npm install ws +``` + +### Opt-in for performance + +[bufferutil][] is an optional module that can be installed alongside the ws +module: + +``` +npm install --save-optional bufferutil +``` + +This is a binary addon that improves the performance of certain operations such +as masking and unmasking the data payload of the WebSocket frames. Prebuilt +binaries are available for the most popular platforms, so you don't necessarily +need to have a C++ compiler installed on your machine. + +To force ws to not use bufferutil, use the +[`WS_NO_BUFFER_UTIL`](./doc/ws.md#ws_no_buffer_util) environment variable. This +can be useful to enhance security in systems where a user can put a package in +the package search path of an application of another user, due to how the +Node.js resolver algorithm works. + +#### Legacy opt-in for performance + +If you are running on an old version of Node.js (prior to v18.14.0), ws also +supports the [utf-8-validate][] module: + +``` +npm install --save-optional utf-8-validate +``` + +This contains a binary polyfill for [`buffer.isUtf8()`][]. + +To force ws not to use utf-8-validate, use the +[`WS_NO_UTF_8_VALIDATE`](./doc/ws.md#ws_no_utf_8_validate) environment variable. + +## API docs + +See [`/doc/ws.md`](./doc/ws.md) for Node.js-like documentation of ws classes and +utility functions. + +## WebSocket compression + +ws supports the [permessage-deflate extension][permessage-deflate] which enables +the client and server to negotiate a compression algorithm and its parameters, +and then selectively apply it to the data payloads of each WebSocket message. + +The extension is disabled by default on the server and enabled by default on the +client. It adds a significant overhead in terms of performance and memory +consumption so we suggest to enable it only if it is really needed. + +Note that Node.js has a variety of issues with high-performance compression, +where increased concurrency, especially on Linux, can lead to [catastrophic +memory fragmentation][node-zlib-bug] and slow performance. If you intend to use +permessage-deflate in production, it is worthwhile to set up a test +representative of your workload and ensure Node.js/zlib will handle it with +acceptable performance and memory usage. + +Tuning of permessage-deflate can be done via the options defined below. You can +also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly +into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs]. + +See [the docs][ws-server-options] for more options. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ + port: 8080, + perMessageDeflate: { + zlibDeflateOptions: { + // See zlib defaults. + chunkSize: 1024, + memLevel: 7, + level: 3 + }, + zlibInflateOptions: { + chunkSize: 10 * 1024 + }, + // Other options settable: + clientNoContextTakeover: true, // Defaults to negotiated value. + serverNoContextTakeover: true, // Defaults to negotiated value. + serverMaxWindowBits: 10, // Defaults to negotiated value. + // Below options specified as default values. + concurrencyLimit: 10, // Limits zlib concurrency for perf. + threshold: 1024 // Size (in bytes) below which messages + // should not be compressed if context takeover is disabled. + } +}); +``` + +The client will only use the extension if it is supported and enabled on the +server. To always disable the extension on the client, set the +`perMessageDeflate` option to `false`. + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path', { + perMessageDeflate: false +}); +``` + +## Usage examples + +### Sending and receiving text data + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path'); + +ws.on('error', console.error); + +ws.on('open', function open() { + ws.send('something'); +}); + +ws.on('message', function message(data) { + console.log('received: %s', data); +}); +``` + +### Sending binary data + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path'); + +ws.on('error', console.error); + +ws.on('open', function open() { + const array = new Float32Array(5); + + for (var i = 0; i < array.length; ++i) { + array[i] = i / 2; + } + + ws.send(array); +}); +``` + +### Simple server + +```js +import { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log('received: %s', data); + }); + + ws.send('something'); +}); +``` + +### External HTTP/S server + +```js +import { createServer } from 'https'; +import { readFileSync } from 'fs'; +import { WebSocketServer } from 'ws'; + +const server = createServer({ + cert: readFileSync('/path/to/cert.pem'), + key: readFileSync('/path/to/key.pem') +}); +const wss = new WebSocketServer({ server }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log('received: %s', data); + }); + + ws.send('something'); +}); + +server.listen(8080); +``` + +### Multiple servers sharing a single HTTP/S server + +```js +import { createServer } from 'http'; +import { WebSocketServer } from 'ws'; + +const server = createServer(); +const wss1 = new WebSocketServer({ noServer: true }); +const wss2 = new WebSocketServer({ noServer: true }); + +wss1.on('connection', function connection(ws) { + ws.on('error', console.error); + + // ... +}); + +wss2.on('connection', function connection(ws) { + ws.on('error', console.error); + + // ... +}); + +server.on('upgrade', function upgrade(request, socket, head) { + const { pathname } = new URL(request.url, 'wss://base.url'); + + if (pathname === '/foo') { + wss1.handleUpgrade(request, socket, head, function done(ws) { + wss1.emit('connection', ws, request); + }); + } else if (pathname === '/bar') { + wss2.handleUpgrade(request, socket, head, function done(ws) { + wss2.emit('connection', ws, request); + }); + } else { + socket.destroy(); + } +}); + +server.listen(8080); +``` + +### Client authentication + +```js +import { createServer } from 'http'; +import { WebSocketServer } from 'ws'; + +function onSocketError(err) { + console.error(err); +} + +const server = createServer(); +const wss = new WebSocketServer({ noServer: true }); + +wss.on('connection', function connection(ws, request, client) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log(`Received message ${data} from user ${client}`); + }); +}); + +server.on('upgrade', function upgrade(request, socket, head) { + socket.on('error', onSocketError); + + // This function is not defined on purpose. Implement it with your own logic. + authenticate(request, function next(err, client) { + if (err || !client) { + socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n'); + socket.destroy(); + return; + } + + socket.removeListener('error', onSocketError); + + wss.handleUpgrade(request, socket, head, function done(ws) { + wss.emit('connection', ws, request, client); + }); + }); +}); + +server.listen(8080); +``` + +Also see the provided [example][session-parse-example] using `express-session`. + +### Server broadcast + +A client WebSocket broadcasting to all connected WebSocket clients, including +itself. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data, isBinary) { + wss.clients.forEach(function each(client) { + if (client.readyState === WebSocket.OPEN) { + client.send(data, { binary: isBinary }); + } + }); + }); +}); +``` + +A client WebSocket broadcasting to every other connected WebSocket clients, +excluding itself. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data, isBinary) { + wss.clients.forEach(function each(client) { + if (client !== ws && client.readyState === WebSocket.OPEN) { + client.send(data, { binary: isBinary }); + } + }); + }); +}); +``` + +### Round-trip time + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('wss://websocket-echo.com/'); + +ws.on('error', console.error); + +ws.on('open', function open() { + console.log('connected'); + ws.send(Date.now()); +}); + +ws.on('close', function close() { + console.log('disconnected'); +}); + +ws.on('message', function message(data) { + console.log(`Round-trip time: ${Date.now() - data} ms`); + + setTimeout(function timeout() { + ws.send(Date.now()); + }, 500); +}); +``` + +### Use the Node.js streams API + +```js +import WebSocket, { createWebSocketStream } from 'ws'; + +const ws = new WebSocket('wss://websocket-echo.com/'); + +const duplex = createWebSocketStream(ws, { encoding: 'utf8' }); + +duplex.on('error', console.error); + +duplex.pipe(process.stdout); +process.stdin.pipe(duplex); +``` + +### Other examples + +For a full example with a browser client communicating with a ws server, see the +examples folder. + +Otherwise, see the test cases. + +## FAQ + +### How to get the IP address of the client? + +The remote IP address can be obtained from the raw socket. + +```js +import { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws, req) { + const ip = req.socket.remoteAddress; + + ws.on('error', console.error); +}); +``` + +When the server runs behind a proxy like NGINX, the de-facto standard is to use +the `X-Forwarded-For` header. + +```js +wss.on('connection', function connection(ws, req) { + const ip = req.headers['x-forwarded-for'].split(',')[0].trim(); + + ws.on('error', console.error); +}); +``` + +### How to detect and close broken connections? + +Sometimes, the link between the server and the client can be interrupted in a +way that keeps both the server and the client unaware of the broken state of the +connection (e.g. when pulling the cord). + +In these cases, ping messages can be used as a means to verify that the remote +endpoint is still responsive. + +```js +import { WebSocketServer } from 'ws'; + +function heartbeat() { + this.isAlive = true; +} + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.isAlive = true; + ws.on('error', console.error); + ws.on('pong', heartbeat); +}); + +const interval = setInterval(function ping() { + wss.clients.forEach(function each(ws) { + if (ws.isAlive === false) return ws.terminate(); + + ws.isAlive = false; + ws.ping(); + }); +}, 30000); + +wss.on('close', function close() { + clearInterval(interval); +}); +``` + +Pong messages are automatically sent in response to ping messages as required by +the spec. + +Just like the server example above, your clients might as well lose connection +without knowing it. You might want to add a ping listener on your clients to +prevent that. A simple implementation would be: + +```js +import WebSocket from 'ws'; + +function heartbeat() { + clearTimeout(this.pingTimeout); + + // Use `WebSocket#terminate()`, which immediately destroys the connection, + // instead of `WebSocket#close()`, which waits for the close timer. + // Delay should be equal to the interval at which your server + // sends out pings plus a conservative assumption of the latency. + this.pingTimeout = setTimeout(() => { + this.terminate(); + }, 30000 + 1000); +} + +const client = new WebSocket('wss://websocket-echo.com/'); + +client.on('error', console.error); +client.on('open', heartbeat); +client.on('ping', heartbeat); +client.on('close', function clear() { + clearTimeout(this.pingTimeout); +}); +``` + +### How to connect via a proxy? + +Use a custom `http.Agent` implementation like [https-proxy-agent][] or +[socks-proxy-agent][]. + +## Changelog + +We're using the GitHub [releases][changelog] for changelog entries. + +## License + +[MIT](LICENSE) + +[`buffer.isutf8()`]: https://nodejs.org/api/buffer.html#bufferisutf8input +[bufferutil]: https://github.com/websockets/bufferutil +[changelog]: https://github.com/websockets/ws/releases +[client-report]: http://websockets.github.io/ws/autobahn/clients/ +[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent +[node-zlib-bug]: https://github.com/nodejs/node/issues/8871 +[node-zlib-deflaterawdocs]: + https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options +[permessage-deflate]: https://tools.ietf.org/html/rfc7692 +[server-report]: http://websockets.github.io/ws/autobahn/servers/ +[session-parse-example]: ./examples/express-session-parse +[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent +[utf-8-validate]: https://github.com/websockets/utf-8-validate +[ws-server-options]: ./doc/ws.md#new-websocketserveroptions-callback diff --git a/server/node_modules/ws/browser.js b/server/node_modules/ws/browser.js new file mode 100644 index 0000000..ca4f628 --- /dev/null +++ b/server/node_modules/ws/browser.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = function () { + throw new Error( + 'ws does not work in the browser. Browser clients must use the native ' + + 'WebSocket object' + ); +}; diff --git a/server/node_modules/ws/index.js b/server/node_modules/ws/index.js new file mode 100644 index 0000000..41edb3b --- /dev/null +++ b/server/node_modules/ws/index.js @@ -0,0 +1,13 @@ +'use strict'; + +const WebSocket = require('./lib/websocket'); + +WebSocket.createWebSocketStream = require('./lib/stream'); +WebSocket.Server = require('./lib/websocket-server'); +WebSocket.Receiver = require('./lib/receiver'); +WebSocket.Sender = require('./lib/sender'); + +WebSocket.WebSocket = WebSocket; +WebSocket.WebSocketServer = WebSocket.Server; + +module.exports = WebSocket; diff --git a/server/node_modules/ws/lib/buffer-util.js b/server/node_modules/ws/lib/buffer-util.js new file mode 100644 index 0000000..f7536e2 --- /dev/null +++ b/server/node_modules/ws/lib/buffer-util.js @@ -0,0 +1,131 @@ +'use strict'; + +const { EMPTY_BUFFER } = require('./constants'); + +const FastBuffer = Buffer[Symbol.species]; + +/** + * Merges an array of buffers into a new buffer. + * + * @param {Buffer[]} list The array of buffers to concat + * @param {Number} totalLength The total length of buffers in the list + * @return {Buffer} The resulting buffer + * @public + */ +function concat(list, totalLength) { + if (list.length === 0) return EMPTY_BUFFER; + if (list.length === 1) return list[0]; + + const target = Buffer.allocUnsafe(totalLength); + let offset = 0; + + for (let i = 0; i < list.length; i++) { + const buf = list[i]; + target.set(buf, offset); + offset += buf.length; + } + + if (offset < totalLength) { + return new FastBuffer(target.buffer, target.byteOffset, offset); + } + + return target; +} + +/** + * Masks a buffer using the given mask. + * + * @param {Buffer} source The buffer to mask + * @param {Buffer} mask The mask to use + * @param {Buffer} output The buffer where to store the result + * @param {Number} offset The offset at which to start writing + * @param {Number} length The number of bytes to mask. + * @public + */ +function _mask(source, mask, output, offset, length) { + for (let i = 0; i < length; i++) { + output[offset + i] = source[i] ^ mask[i & 3]; + } +} + +/** + * Unmasks a buffer using the given mask. + * + * @param {Buffer} buffer The buffer to unmask + * @param {Buffer} mask The mask to use + * @public + */ +function _unmask(buffer, mask) { + for (let i = 0; i < buffer.length; i++) { + buffer[i] ^= mask[i & 3]; + } +} + +/** + * Converts a buffer to an `ArrayBuffer`. + * + * @param {Buffer} buf The buffer to convert + * @return {ArrayBuffer} Converted buffer + * @public + */ +function toArrayBuffer(buf) { + if (buf.length === buf.buffer.byteLength) { + return buf.buffer; + } + + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length); +} + +/** + * Converts `data` to a `Buffer`. + * + * @param {*} data The data to convert + * @return {Buffer} The buffer + * @throws {TypeError} + * @public + */ +function toBuffer(data) { + toBuffer.readOnly = true; + + if (Buffer.isBuffer(data)) return data; + + let buf; + + if (data instanceof ArrayBuffer) { + buf = new FastBuffer(data); + } else if (ArrayBuffer.isView(data)) { + buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength); + } else { + buf = Buffer.from(data); + toBuffer.readOnly = false; + } + + return buf; +} + +module.exports = { + concat, + mask: _mask, + toArrayBuffer, + toBuffer, + unmask: _unmask +}; + +/* istanbul ignore else */ +if (!process.env.WS_NO_BUFFER_UTIL) { + try { + const bufferUtil = require('bufferutil'); + + module.exports.mask = function (source, mask, output, offset, length) { + if (length < 48) _mask(source, mask, output, offset, length); + else bufferUtil.mask(source, mask, output, offset, length); + }; + + module.exports.unmask = function (buffer, mask) { + if (buffer.length < 32) _unmask(buffer, mask); + else bufferUtil.unmask(buffer, mask); + }; + } catch (e) { + // Continue regardless of the error. + } +} diff --git a/server/node_modules/ws/lib/constants.js b/server/node_modules/ws/lib/constants.js new file mode 100644 index 0000000..74214d4 --- /dev/null +++ b/server/node_modules/ws/lib/constants.js @@ -0,0 +1,18 @@ +'use strict'; + +const BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments']; +const hasBlob = typeof Blob !== 'undefined'; + +if (hasBlob) BINARY_TYPES.push('blob'); + +module.exports = { + BINARY_TYPES, + EMPTY_BUFFER: Buffer.alloc(0), + GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', + hasBlob, + kForOnEventAttribute: Symbol('kIsForOnEventAttribute'), + kListener: Symbol('kListener'), + kStatusCode: Symbol('status-code'), + kWebSocket: Symbol('websocket'), + NOOP: () => {} +}; diff --git a/server/node_modules/ws/lib/event-target.js b/server/node_modules/ws/lib/event-target.js new file mode 100644 index 0000000..fea4cbc --- /dev/null +++ b/server/node_modules/ws/lib/event-target.js @@ -0,0 +1,292 @@ +'use strict'; + +const { kForOnEventAttribute, kListener } = require('./constants'); + +const kCode = Symbol('kCode'); +const kData = Symbol('kData'); +const kError = Symbol('kError'); +const kMessage = Symbol('kMessage'); +const kReason = Symbol('kReason'); +const kTarget = Symbol('kTarget'); +const kType = Symbol('kType'); +const kWasClean = Symbol('kWasClean'); + +/** + * Class representing an event. + */ +class Event { + /** + * Create a new `Event`. + * + * @param {String} type The name of the event + * @throws {TypeError} If the `type` argument is not specified + */ + constructor(type) { + this[kTarget] = null; + this[kType] = type; + } + + /** + * @type {*} + */ + get target() { + return this[kTarget]; + } + + /** + * @type {String} + */ + get type() { + return this[kType]; + } +} + +Object.defineProperty(Event.prototype, 'target', { enumerable: true }); +Object.defineProperty(Event.prototype, 'type', { enumerable: true }); + +/** + * Class representing a close event. + * + * @extends Event + */ +class CloseEvent extends Event { + /** + * Create a new `CloseEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {Number} [options.code=0] The status code explaining why the + * connection was closed + * @param {String} [options.reason=''] A human-readable string explaining why + * the connection was closed + * @param {Boolean} [options.wasClean=false] Indicates whether or not the + * connection was cleanly closed + */ + constructor(type, options = {}) { + super(type); + + this[kCode] = options.code === undefined ? 0 : options.code; + this[kReason] = options.reason === undefined ? '' : options.reason; + this[kWasClean] = options.wasClean === undefined ? false : options.wasClean; + } + + /** + * @type {Number} + */ + get code() { + return this[kCode]; + } + + /** + * @type {String} + */ + get reason() { + return this[kReason]; + } + + /** + * @type {Boolean} + */ + get wasClean() { + return this[kWasClean]; + } +} + +Object.defineProperty(CloseEvent.prototype, 'code', { enumerable: true }); +Object.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true }); +Object.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true }); + +/** + * Class representing an error event. + * + * @extends Event + */ +class ErrorEvent extends Event { + /** + * Create a new `ErrorEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {*} [options.error=null] The error that generated this event + * @param {String} [options.message=''] The error message + */ + constructor(type, options = {}) { + super(type); + + this[kError] = options.error === undefined ? null : options.error; + this[kMessage] = options.message === undefined ? '' : options.message; + } + + /** + * @type {*} + */ + get error() { + return this[kError]; + } + + /** + * @type {String} + */ + get message() { + return this[kMessage]; + } +} + +Object.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true }); +Object.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true }); + +/** + * Class representing a message event. + * + * @extends Event + */ +class MessageEvent extends Event { + /** + * Create a new `MessageEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {*} [options.data=null] The message content + */ + constructor(type, options = {}) { + super(type); + + this[kData] = options.data === undefined ? null : options.data; + } + + /** + * @type {*} + */ + get data() { + return this[kData]; + } +} + +Object.defineProperty(MessageEvent.prototype, 'data', { enumerable: true }); + +/** + * This provides methods for emulating the `EventTarget` interface. It's not + * meant to be used directly. + * + * @mixin + */ +const EventTarget = { + /** + * Register an event listener. + * + * @param {String} type A string representing the event type to listen for + * @param {(Function|Object)} handler The listener to add + * @param {Object} [options] An options object specifies characteristics about + * the event listener + * @param {Boolean} [options.once=false] A `Boolean` indicating that the + * listener should be invoked at most once after being added. If `true`, + * the listener would be automatically removed when invoked. + * @public + */ + addEventListener(type, handler, options = {}) { + for (const listener of this.listeners(type)) { + if ( + !options[kForOnEventAttribute] && + listener[kListener] === handler && + !listener[kForOnEventAttribute] + ) { + return; + } + } + + let wrapper; + + if (type === 'message') { + wrapper = function onMessage(data, isBinary) { + const event = new MessageEvent('message', { + data: isBinary ? data : data.toString() + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'close') { + wrapper = function onClose(code, message) { + const event = new CloseEvent('close', { + code, + reason: message.toString(), + wasClean: this._closeFrameReceived && this._closeFrameSent + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'error') { + wrapper = function onError(error) { + const event = new ErrorEvent('error', { + error, + message: error.message + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'open') { + wrapper = function onOpen() { + const event = new Event('open'); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else { + return; + } + + wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute]; + wrapper[kListener] = handler; + + if (options.once) { + this.once(type, wrapper); + } else { + this.on(type, wrapper); + } + }, + + /** + * Remove an event listener. + * + * @param {String} type A string representing the event type to remove + * @param {(Function|Object)} handler The listener to remove + * @public + */ + removeEventListener(type, handler) { + for (const listener of this.listeners(type)) { + if (listener[kListener] === handler && !listener[kForOnEventAttribute]) { + this.removeListener(type, listener); + break; + } + } + } +}; + +module.exports = { + CloseEvent, + ErrorEvent, + Event, + EventTarget, + MessageEvent +}; + +/** + * Call an event listener + * + * @param {(Function|Object)} listener The listener to call + * @param {*} thisArg The value to use as `this`` when calling the listener + * @param {Event} event The event to pass to the listener + * @private + */ +function callListener(listener, thisArg, event) { + if (typeof listener === 'object' && listener.handleEvent) { + listener.handleEvent.call(listener, event); + } else { + listener.call(thisArg, event); + } +} diff --git a/server/node_modules/ws/lib/extension.js b/server/node_modules/ws/lib/extension.js new file mode 100644 index 0000000..3d7895c --- /dev/null +++ b/server/node_modules/ws/lib/extension.js @@ -0,0 +1,203 @@ +'use strict'; + +const { tokenChars } = require('./validation'); + +/** + * Adds an offer to the map of extension offers or a parameter to the map of + * parameters. + * + * @param {Object} dest The map of extension offers or parameters + * @param {String} name The extension or parameter name + * @param {(Object|Boolean|String)} elem The extension parameters or the + * parameter value + * @private + */ +function push(dest, name, elem) { + if (dest[name] === undefined) dest[name] = [elem]; + else dest[name].push(elem); +} + +/** + * Parses the `Sec-WebSocket-Extensions` header into an object. + * + * @param {String} header The field value of the header + * @return {Object} The parsed object + * @public + */ +function parse(header) { + const offers = Object.create(null); + let params = Object.create(null); + let mustUnescape = false; + let isEscaping = false; + let inQuotes = false; + let extensionName; + let paramName; + let start = -1; + let code = -1; + let end = -1; + let i = 0; + + for (; i < header.length; i++) { + code = header.charCodeAt(i); + + if (extensionName === undefined) { + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if ( + i !== 0 && + (code === 0x20 /* ' ' */ || code === 0x09) /* '\t' */ + ) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + const name = header.slice(start, end); + if (code === 0x2c) { + push(offers, name, params); + params = Object.create(null); + } else { + extensionName = name; + } + + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else if (paramName === undefined) { + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (code === 0x20 || code === 0x09) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x3b || code === 0x2c) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + push(params, header.slice(start, end), true); + if (code === 0x2c) { + push(offers, extensionName, params); + params = Object.create(null); + extensionName = undefined; + } + + start = end = -1; + } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) { + paramName = header.slice(start, i); + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else { + // + // The value of a quoted-string after unescaping must conform to the + // token ABNF, so only token characters are valid. + // Ref: https://tools.ietf.org/html/rfc6455#section-9.1 + // + if (isEscaping) { + if (tokenChars[code] !== 1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + if (start === -1) start = i; + else if (!mustUnescape) mustUnescape = true; + isEscaping = false; + } else if (inQuotes) { + if (tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (code === 0x22 /* '"' */ && start !== -1) { + inQuotes = false; + end = i; + } else if (code === 0x5c /* '\' */) { + isEscaping = true; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) { + inQuotes = true; + } else if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (start !== -1 && (code === 0x20 || code === 0x09)) { + if (end === -1) end = i; + } else if (code === 0x3b || code === 0x2c) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + let value = header.slice(start, end); + if (mustUnescape) { + value = value.replace(/\\/g, ''); + mustUnescape = false; + } + push(params, paramName, value); + if (code === 0x2c) { + push(offers, extensionName, params); + params = Object.create(null); + extensionName = undefined; + } + + paramName = undefined; + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } + } + + if (start === -1 || inQuotes || code === 0x20 || code === 0x09) { + throw new SyntaxError('Unexpected end of input'); + } + + if (end === -1) end = i; + const token = header.slice(start, end); + if (extensionName === undefined) { + push(offers, token, params); + } else { + if (paramName === undefined) { + push(params, token, true); + } else if (mustUnescape) { + push(params, paramName, token.replace(/\\/g, '')); + } else { + push(params, paramName, token); + } + push(offers, extensionName, params); + } + + return offers; +} + +/** + * Builds the `Sec-WebSocket-Extensions` header field value. + * + * @param {Object} extensions The map of extensions and parameters to format + * @return {String} A string representing the given object + * @public + */ +function format(extensions) { + return Object.keys(extensions) + .map((extension) => { + let configurations = extensions[extension]; + if (!Array.isArray(configurations)) configurations = [configurations]; + return configurations + .map((params) => { + return [extension] + .concat( + Object.keys(params).map((k) => { + let values = params[k]; + if (!Array.isArray(values)) values = [values]; + return values + .map((v) => (v === true ? k : `${k}=${v}`)) + .join('; '); + }) + ) + .join('; '); + }) + .join(', '); + }) + .join(', '); +} + +module.exports = { format, parse }; diff --git a/server/node_modules/ws/lib/limiter.js b/server/node_modules/ws/lib/limiter.js new file mode 100644 index 0000000..3fd3578 --- /dev/null +++ b/server/node_modules/ws/lib/limiter.js @@ -0,0 +1,55 @@ +'use strict'; + +const kDone = Symbol('kDone'); +const kRun = Symbol('kRun'); + +/** + * A very simple job queue with adjustable concurrency. Adapted from + * https://github.com/STRML/async-limiter + */ +class Limiter { + /** + * Creates a new `Limiter`. + * + * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed + * to run concurrently + */ + constructor(concurrency) { + this[kDone] = () => { + this.pending--; + this[kRun](); + }; + this.concurrency = concurrency || Infinity; + this.jobs = []; + this.pending = 0; + } + + /** + * Adds a job to the queue. + * + * @param {Function} job The job to run + * @public + */ + add(job) { + this.jobs.push(job); + this[kRun](); + } + + /** + * Removes a job from the queue and runs it if possible. + * + * @private + */ + [kRun]() { + if (this.pending === this.concurrency) return; + + if (this.jobs.length) { + const job = this.jobs.shift(); + + this.pending++; + job(this[kDone]); + } + } +} + +module.exports = Limiter; diff --git a/server/node_modules/ws/lib/permessage-deflate.js b/server/node_modules/ws/lib/permessage-deflate.js new file mode 100644 index 0000000..41ff70e --- /dev/null +++ b/server/node_modules/ws/lib/permessage-deflate.js @@ -0,0 +1,528 @@ +'use strict'; + +const zlib = require('zlib'); + +const bufferUtil = require('./buffer-util'); +const Limiter = require('./limiter'); +const { kStatusCode } = require('./constants'); + +const FastBuffer = Buffer[Symbol.species]; +const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]); +const kPerMessageDeflate = Symbol('permessage-deflate'); +const kTotalLength = Symbol('total-length'); +const kCallback = Symbol('callback'); +const kBuffers = Symbol('buffers'); +const kError = Symbol('error'); + +// +// We limit zlib concurrency, which prevents severe memory fragmentation +// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913 +// and https://github.com/websockets/ws/issues/1202 +// +// Intentionally global; it's the global thread pool that's an issue. +// +let zlibLimiter; + +/** + * permessage-deflate implementation. + */ +class PerMessageDeflate { + /** + * Creates a PerMessageDeflate instance. + * + * @param {Object} [options] Configuration options + * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support + * for, or request, a custom client window size + * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/ + * acknowledge disabling of client context takeover + * @param {Number} [options.concurrencyLimit=10] The number of concurrent + * calls to zlib + * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the + * use of a custom server window size + * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept + * disabling of server context takeover + * @param {Number} [options.threshold=1024] Size (in bytes) below which + * messages should not be compressed if context takeover is disabled + * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on + * deflate + * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on + * inflate + * @param {Boolean} [isServer=false] Create the instance in either server or + * client mode + * @param {Number} [maxPayload=0] The maximum allowed message length + */ + constructor(options, isServer, maxPayload) { + this._maxPayload = maxPayload | 0; + this._options = options || {}; + this._threshold = + this._options.threshold !== undefined ? this._options.threshold : 1024; + this._isServer = !!isServer; + this._deflate = null; + this._inflate = null; + + this.params = null; + + if (!zlibLimiter) { + const concurrency = + this._options.concurrencyLimit !== undefined + ? this._options.concurrencyLimit + : 10; + zlibLimiter = new Limiter(concurrency); + } + } + + /** + * @type {String} + */ + static get extensionName() { + return 'permessage-deflate'; + } + + /** + * Create an extension negotiation offer. + * + * @return {Object} Extension parameters + * @public + */ + offer() { + const params = {}; + + if (this._options.serverNoContextTakeover) { + params.server_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover) { + params.client_no_context_takeover = true; + } + if (this._options.serverMaxWindowBits) { + params.server_max_window_bits = this._options.serverMaxWindowBits; + } + if (this._options.clientMaxWindowBits) { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } else if (this._options.clientMaxWindowBits == null) { + params.client_max_window_bits = true; + } + + return params; + } + + /** + * Accept an extension negotiation offer/response. + * + * @param {Array} configurations The extension negotiation offers/reponse + * @return {Object} Accepted configuration + * @public + */ + accept(configurations) { + configurations = this.normalizeParams(configurations); + + this.params = this._isServer + ? this.acceptAsServer(configurations) + : this.acceptAsClient(configurations); + + return this.params; + } + + /** + * Releases all resources used by the extension. + * + * @public + */ + cleanup() { + if (this._inflate) { + this._inflate.close(); + this._inflate = null; + } + + if (this._deflate) { + const callback = this._deflate[kCallback]; + + this._deflate.close(); + this._deflate = null; + + if (callback) { + callback( + new Error( + 'The deflate stream was closed while data was being processed' + ) + ); + } + } + } + + /** + * Accept an extension negotiation offer. + * + * @param {Array} offers The extension negotiation offers + * @return {Object} Accepted configuration + * @private + */ + acceptAsServer(offers) { + const opts = this._options; + const accepted = offers.find((params) => { + if ( + (opts.serverNoContextTakeover === false && + params.server_no_context_takeover) || + (params.server_max_window_bits && + (opts.serverMaxWindowBits === false || + (typeof opts.serverMaxWindowBits === 'number' && + opts.serverMaxWindowBits > params.server_max_window_bits))) || + (typeof opts.clientMaxWindowBits === 'number' && + !params.client_max_window_bits) + ) { + return false; + } + + return true; + }); + + if (!accepted) { + throw new Error('None of the extension offers can be accepted'); + } + + if (opts.serverNoContextTakeover) { + accepted.server_no_context_takeover = true; + } + if (opts.clientNoContextTakeover) { + accepted.client_no_context_takeover = true; + } + if (typeof opts.serverMaxWindowBits === 'number') { + accepted.server_max_window_bits = opts.serverMaxWindowBits; + } + if (typeof opts.clientMaxWindowBits === 'number') { + accepted.client_max_window_bits = opts.clientMaxWindowBits; + } else if ( + accepted.client_max_window_bits === true || + opts.clientMaxWindowBits === false + ) { + delete accepted.client_max_window_bits; + } + + return accepted; + } + + /** + * Accept the extension negotiation response. + * + * @param {Array} response The extension negotiation response + * @return {Object} Accepted configuration + * @private + */ + acceptAsClient(response) { + const params = response[0]; + + if ( + this._options.clientNoContextTakeover === false && + params.client_no_context_takeover + ) { + throw new Error('Unexpected parameter "client_no_context_takeover"'); + } + + if (!params.client_max_window_bits) { + if (typeof this._options.clientMaxWindowBits === 'number') { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } + } else if ( + this._options.clientMaxWindowBits === false || + (typeof this._options.clientMaxWindowBits === 'number' && + params.client_max_window_bits > this._options.clientMaxWindowBits) + ) { + throw new Error( + 'Unexpected or invalid parameter "client_max_window_bits"' + ); + } + + return params; + } + + /** + * Normalize parameters. + * + * @param {Array} configurations The extension negotiation offers/reponse + * @return {Array} The offers/response with normalized parameters + * @private + */ + normalizeParams(configurations) { + configurations.forEach((params) => { + Object.keys(params).forEach((key) => { + let value = params[key]; + + if (value.length > 1) { + throw new Error(`Parameter "${key}" must have only a single value`); + } + + value = value[0]; + + if (key === 'client_max_window_bits') { + if (value !== true) { + const num = +value; + if (!Number.isInteger(num) || num < 8 || num > 15) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + value = num; + } else if (!this._isServer) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + } else if (key === 'server_max_window_bits') { + const num = +value; + if (!Number.isInteger(num) || num < 8 || num > 15) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + value = num; + } else if ( + key === 'client_no_context_takeover' || + key === 'server_no_context_takeover' + ) { + if (value !== true) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + } else { + throw new Error(`Unknown parameter "${key}"`); + } + + params[key] = value; + }); + }); + + return configurations; + } + + /** + * Decompress data. Concurrency limited. + * + * @param {Buffer} data Compressed data + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @public + */ + decompress(data, fin, callback) { + zlibLimiter.add((done) => { + this._decompress(data, fin, (err, result) => { + done(); + callback(err, result); + }); + }); + } + + /** + * Compress data. Concurrency limited. + * + * @param {(Buffer|String)} data Data to compress + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @public + */ + compress(data, fin, callback) { + zlibLimiter.add((done) => { + this._compress(data, fin, (err, result) => { + done(); + callback(err, result); + }); + }); + } + + /** + * Decompress data. + * + * @param {Buffer} data Compressed data + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @private + */ + _decompress(data, fin, callback) { + const endpoint = this._isServer ? 'client' : 'server'; + + if (!this._inflate) { + const key = `${endpoint}_max_window_bits`; + const windowBits = + typeof this.params[key] !== 'number' + ? zlib.Z_DEFAULT_WINDOWBITS + : this.params[key]; + + this._inflate = zlib.createInflateRaw({ + ...this._options.zlibInflateOptions, + windowBits + }); + this._inflate[kPerMessageDeflate] = this; + this._inflate[kTotalLength] = 0; + this._inflate[kBuffers] = []; + this._inflate.on('error', inflateOnError); + this._inflate.on('data', inflateOnData); + } + + this._inflate[kCallback] = callback; + + this._inflate.write(data); + if (fin) this._inflate.write(TRAILER); + + this._inflate.flush(() => { + const err = this._inflate[kError]; + + if (err) { + this._inflate.close(); + this._inflate = null; + callback(err); + return; + } + + const data = bufferUtil.concat( + this._inflate[kBuffers], + this._inflate[kTotalLength] + ); + + if (this._inflate._readableState.endEmitted) { + this._inflate.close(); + this._inflate = null; + } else { + this._inflate[kTotalLength] = 0; + this._inflate[kBuffers] = []; + + if (fin && this.params[`${endpoint}_no_context_takeover`]) { + this._inflate.reset(); + } + } + + callback(null, data); + }); + } + + /** + * Compress data. + * + * @param {(Buffer|String)} data Data to compress + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @private + */ + _compress(data, fin, callback) { + const endpoint = this._isServer ? 'server' : 'client'; + + if (!this._deflate) { + const key = `${endpoint}_max_window_bits`; + const windowBits = + typeof this.params[key] !== 'number' + ? zlib.Z_DEFAULT_WINDOWBITS + : this.params[key]; + + this._deflate = zlib.createDeflateRaw({ + ...this._options.zlibDeflateOptions, + windowBits + }); + + this._deflate[kTotalLength] = 0; + this._deflate[kBuffers] = []; + + this._deflate.on('data', deflateOnData); + } + + this._deflate[kCallback] = callback; + + this._deflate.write(data); + this._deflate.flush(zlib.Z_SYNC_FLUSH, () => { + if (!this._deflate) { + // + // The deflate stream was closed while data was being processed. + // + return; + } + + let data = bufferUtil.concat( + this._deflate[kBuffers], + this._deflate[kTotalLength] + ); + + if (fin) { + data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4); + } + + // + // Ensure that the callback will not be called again in + // `PerMessageDeflate#cleanup()`. + // + this._deflate[kCallback] = null; + + this._deflate[kTotalLength] = 0; + this._deflate[kBuffers] = []; + + if (fin && this.params[`${endpoint}_no_context_takeover`]) { + this._deflate.reset(); + } + + callback(null, data); + }); + } +} + +module.exports = PerMessageDeflate; + +/** + * The listener of the `zlib.DeflateRaw` stream `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function deflateOnData(chunk) { + this[kBuffers].push(chunk); + this[kTotalLength] += chunk.length; +} + +/** + * The listener of the `zlib.InflateRaw` stream `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function inflateOnData(chunk) { + this[kTotalLength] += chunk.length; + + if ( + this[kPerMessageDeflate]._maxPayload < 1 || + this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload + ) { + this[kBuffers].push(chunk); + return; + } + + this[kError] = new RangeError('Max payload size exceeded'); + this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'; + this[kError][kStatusCode] = 1009; + this.removeListener('data', inflateOnData); + + // + // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the + // fact that in Node.js versions prior to 13.10.0, the callback for + // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing + // `zlib.reset()` ensures that either the callback is invoked or an error is + // emitted. + // + this.reset(); +} + +/** + * The listener of the `zlib.InflateRaw` stream `'error'` event. + * + * @param {Error} err The emitted error + * @private + */ +function inflateOnError(err) { + // + // There is no need to call `Zlib#close()` as the handle is automatically + // closed when an error is emitted. + // + this[kPerMessageDeflate]._inflate = null; + + if (this[kError]) { + this[kCallback](this[kError]); + return; + } + + err[kStatusCode] = 1007; + this[kCallback](err); +} diff --git a/server/node_modules/ws/lib/receiver.js b/server/node_modules/ws/lib/receiver.js new file mode 100644 index 0000000..54d9b4f --- /dev/null +++ b/server/node_modules/ws/lib/receiver.js @@ -0,0 +1,706 @@ +'use strict'; + +const { Writable } = require('stream'); + +const PerMessageDeflate = require('./permessage-deflate'); +const { + BINARY_TYPES, + EMPTY_BUFFER, + kStatusCode, + kWebSocket +} = require('./constants'); +const { concat, toArrayBuffer, unmask } = require('./buffer-util'); +const { isValidStatusCode, isValidUTF8 } = require('./validation'); + +const FastBuffer = Buffer[Symbol.species]; + +const GET_INFO = 0; +const GET_PAYLOAD_LENGTH_16 = 1; +const GET_PAYLOAD_LENGTH_64 = 2; +const GET_MASK = 3; +const GET_DATA = 4; +const INFLATING = 5; +const DEFER_EVENT = 6; + +/** + * HyBi Receiver implementation. + * + * @extends Writable + */ +class Receiver extends Writable { + /** + * Creates a Receiver instance. + * + * @param {Object} [options] Options object + * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether + * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted + * multiple times in the same tick + * @param {String} [options.binaryType=nodebuffer] The type for binary data + * @param {Object} [options.extensions] An object containing the negotiated + * extensions + * @param {Boolean} [options.isServer=false] Specifies whether to operate in + * client or server mode + * @param {Number} [options.maxPayload=0] The maximum allowed message length + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + */ + constructor(options = {}) { + super(); + + this._allowSynchronousEvents = + options.allowSynchronousEvents !== undefined + ? options.allowSynchronousEvents + : true; + this._binaryType = options.binaryType || BINARY_TYPES[0]; + this._extensions = options.extensions || {}; + this._isServer = !!options.isServer; + this._maxPayload = options.maxPayload | 0; + this._skipUTF8Validation = !!options.skipUTF8Validation; + this[kWebSocket] = undefined; + + this._bufferedBytes = 0; + this._buffers = []; + + this._compressed = false; + this._payloadLength = 0; + this._mask = undefined; + this._fragmented = 0; + this._masked = false; + this._fin = false; + this._opcode = 0; + + this._totalPayloadLength = 0; + this._messageLength = 0; + this._fragments = []; + + this._errored = false; + this._loop = false; + this._state = GET_INFO; + } + + /** + * Implements `Writable.prototype._write()`. + * + * @param {Buffer} chunk The chunk of data to write + * @param {String} encoding The character encoding of `chunk` + * @param {Function} cb Callback + * @private + */ + _write(chunk, encoding, cb) { + if (this._opcode === 0x08 && this._state == GET_INFO) return cb(); + + this._bufferedBytes += chunk.length; + this._buffers.push(chunk); + this.startLoop(cb); + } + + /** + * Consumes `n` bytes from the buffered data. + * + * @param {Number} n The number of bytes to consume + * @return {Buffer} The consumed bytes + * @private + */ + consume(n) { + this._bufferedBytes -= n; + + if (n === this._buffers[0].length) return this._buffers.shift(); + + if (n < this._buffers[0].length) { + const buf = this._buffers[0]; + this._buffers[0] = new FastBuffer( + buf.buffer, + buf.byteOffset + n, + buf.length - n + ); + + return new FastBuffer(buf.buffer, buf.byteOffset, n); + } + + const dst = Buffer.allocUnsafe(n); + + do { + const buf = this._buffers[0]; + const offset = dst.length - n; + + if (n >= buf.length) { + dst.set(this._buffers.shift(), offset); + } else { + dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset); + this._buffers[0] = new FastBuffer( + buf.buffer, + buf.byteOffset + n, + buf.length - n + ); + } + + n -= buf.length; + } while (n > 0); + + return dst; + } + + /** + * Starts the parsing loop. + * + * @param {Function} cb Callback + * @private + */ + startLoop(cb) { + this._loop = true; + + do { + switch (this._state) { + case GET_INFO: + this.getInfo(cb); + break; + case GET_PAYLOAD_LENGTH_16: + this.getPayloadLength16(cb); + break; + case GET_PAYLOAD_LENGTH_64: + this.getPayloadLength64(cb); + break; + case GET_MASK: + this.getMask(); + break; + case GET_DATA: + this.getData(cb); + break; + case INFLATING: + case DEFER_EVENT: + this._loop = false; + return; + } + } while (this._loop); + + if (!this._errored) cb(); + } + + /** + * Reads the first two bytes of a frame. + * + * @param {Function} cb Callback + * @private + */ + getInfo(cb) { + if (this._bufferedBytes < 2) { + this._loop = false; + return; + } + + const buf = this.consume(2); + + if ((buf[0] & 0x30) !== 0x00) { + const error = this.createError( + RangeError, + 'RSV2 and RSV3 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_2_3' + ); + + cb(error); + return; + } + + const compressed = (buf[0] & 0x40) === 0x40; + + if (compressed && !this._extensions[PerMessageDeflate.extensionName]) { + const error = this.createError( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + + cb(error); + return; + } + + this._fin = (buf[0] & 0x80) === 0x80; + this._opcode = buf[0] & 0x0f; + this._payloadLength = buf[1] & 0x7f; + + if (this._opcode === 0x00) { + if (compressed) { + const error = this.createError( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + + cb(error); + return; + } + + if (!this._fragmented) { + const error = this.createError( + RangeError, + 'invalid opcode 0', + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + + cb(error); + return; + } + + this._opcode = this._fragmented; + } else if (this._opcode === 0x01 || this._opcode === 0x02) { + if (this._fragmented) { + const error = this.createError( + RangeError, + `invalid opcode ${this._opcode}`, + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + + cb(error); + return; + } + + this._compressed = compressed; + } else if (this._opcode > 0x07 && this._opcode < 0x0b) { + if (!this._fin) { + const error = this.createError( + RangeError, + 'FIN must be set', + true, + 1002, + 'WS_ERR_EXPECTED_FIN' + ); + + cb(error); + return; + } + + if (compressed) { + const error = this.createError( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + + cb(error); + return; + } + + if ( + this._payloadLength > 0x7d || + (this._opcode === 0x08 && this._payloadLength === 1) + ) { + const error = this.createError( + RangeError, + `invalid payload length ${this._payloadLength}`, + true, + 1002, + 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH' + ); + + cb(error); + return; + } + } else { + const error = this.createError( + RangeError, + `invalid opcode ${this._opcode}`, + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + + cb(error); + return; + } + + if (!this._fin && !this._fragmented) this._fragmented = this._opcode; + this._masked = (buf[1] & 0x80) === 0x80; + + if (this._isServer) { + if (!this._masked) { + const error = this.createError( + RangeError, + 'MASK must be set', + true, + 1002, + 'WS_ERR_EXPECTED_MASK' + ); + + cb(error); + return; + } + } else if (this._masked) { + const error = this.createError( + RangeError, + 'MASK must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_MASK' + ); + + cb(error); + return; + } + + if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16; + else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64; + else this.haveLength(cb); + } + + /** + * Gets extended payload length (7+16). + * + * @param {Function} cb Callback + * @private + */ + getPayloadLength16(cb) { + if (this._bufferedBytes < 2) { + this._loop = false; + return; + } + + this._payloadLength = this.consume(2).readUInt16BE(0); + this.haveLength(cb); + } + + /** + * Gets extended payload length (7+64). + * + * @param {Function} cb Callback + * @private + */ + getPayloadLength64(cb) { + if (this._bufferedBytes < 8) { + this._loop = false; + return; + } + + const buf = this.consume(8); + const num = buf.readUInt32BE(0); + + // + // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned + // if payload length is greater than this number. + // + if (num > Math.pow(2, 53 - 32) - 1) { + const error = this.createError( + RangeError, + 'Unsupported WebSocket frame: payload length > 2^53 - 1', + false, + 1009, + 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH' + ); + + cb(error); + return; + } + + this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4); + this.haveLength(cb); + } + + /** + * Payload length has been read. + * + * @param {Function} cb Callback + * @private + */ + haveLength(cb) { + if (this._payloadLength && this._opcode < 0x08) { + this._totalPayloadLength += this._payloadLength; + if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) { + const error = this.createError( + RangeError, + 'Max payload size exceeded', + false, + 1009, + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' + ); + + cb(error); + return; + } + } + + if (this._masked) this._state = GET_MASK; + else this._state = GET_DATA; + } + + /** + * Reads mask bytes. + * + * @private + */ + getMask() { + if (this._bufferedBytes < 4) { + this._loop = false; + return; + } + + this._mask = this.consume(4); + this._state = GET_DATA; + } + + /** + * Reads data bytes. + * + * @param {Function} cb Callback + * @private + */ + getData(cb) { + let data = EMPTY_BUFFER; + + if (this._payloadLength) { + if (this._bufferedBytes < this._payloadLength) { + this._loop = false; + return; + } + + data = this.consume(this._payloadLength); + + if ( + this._masked && + (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0 + ) { + unmask(data, this._mask); + } + } + + if (this._opcode > 0x07) { + this.controlMessage(data, cb); + return; + } + + if (this._compressed) { + this._state = INFLATING; + this.decompress(data, cb); + return; + } + + if (data.length) { + // + // This message is not compressed so its length is the sum of the payload + // length of all fragments. + // + this._messageLength = this._totalPayloadLength; + this._fragments.push(data); + } + + this.dataMessage(cb); + } + + /** + * Decompresses data. + * + * @param {Buffer} data Compressed data + * @param {Function} cb Callback + * @private + */ + decompress(data, cb) { + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + + perMessageDeflate.decompress(data, this._fin, (err, buf) => { + if (err) return cb(err); + + if (buf.length) { + this._messageLength += buf.length; + if (this._messageLength > this._maxPayload && this._maxPayload > 0) { + const error = this.createError( + RangeError, + 'Max payload size exceeded', + false, + 1009, + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' + ); + + cb(error); + return; + } + + this._fragments.push(buf); + } + + this.dataMessage(cb); + if (this._state === GET_INFO) this.startLoop(cb); + }); + } + + /** + * Handles a data message. + * + * @param {Function} cb Callback + * @private + */ + dataMessage(cb) { + if (!this._fin) { + this._state = GET_INFO; + return; + } + + const messageLength = this._messageLength; + const fragments = this._fragments; + + this._totalPayloadLength = 0; + this._messageLength = 0; + this._fragmented = 0; + this._fragments = []; + + if (this._opcode === 2) { + let data; + + if (this._binaryType === 'nodebuffer') { + data = concat(fragments, messageLength); + } else if (this._binaryType === 'arraybuffer') { + data = toArrayBuffer(concat(fragments, messageLength)); + } else if (this._binaryType === 'blob') { + data = new Blob(fragments); + } else { + data = fragments; + } + + if (this._allowSynchronousEvents) { + this.emit('message', data, true); + this._state = GET_INFO; + } else { + this._state = DEFER_EVENT; + setImmediate(() => { + this.emit('message', data, true); + this._state = GET_INFO; + this.startLoop(cb); + }); + } + } else { + const buf = concat(fragments, messageLength); + + if (!this._skipUTF8Validation && !isValidUTF8(buf)) { + const error = this.createError( + Error, + 'invalid UTF-8 sequence', + true, + 1007, + 'WS_ERR_INVALID_UTF8' + ); + + cb(error); + return; + } + + if (this._state === INFLATING || this._allowSynchronousEvents) { + this.emit('message', buf, false); + this._state = GET_INFO; + } else { + this._state = DEFER_EVENT; + setImmediate(() => { + this.emit('message', buf, false); + this._state = GET_INFO; + this.startLoop(cb); + }); + } + } + } + + /** + * Handles a control message. + * + * @param {Buffer} data Data to handle + * @return {(Error|RangeError|undefined)} A possible error + * @private + */ + controlMessage(data, cb) { + if (this._opcode === 0x08) { + if (data.length === 0) { + this._loop = false; + this.emit('conclude', 1005, EMPTY_BUFFER); + this.end(); + } else { + const code = data.readUInt16BE(0); + + if (!isValidStatusCode(code)) { + const error = this.createError( + RangeError, + `invalid status code ${code}`, + true, + 1002, + 'WS_ERR_INVALID_CLOSE_CODE' + ); + + cb(error); + return; + } + + const buf = new FastBuffer( + data.buffer, + data.byteOffset + 2, + data.length - 2 + ); + + if (!this._skipUTF8Validation && !isValidUTF8(buf)) { + const error = this.createError( + Error, + 'invalid UTF-8 sequence', + true, + 1007, + 'WS_ERR_INVALID_UTF8' + ); + + cb(error); + return; + } + + this._loop = false; + this.emit('conclude', code, buf); + this.end(); + } + + this._state = GET_INFO; + return; + } + + if (this._allowSynchronousEvents) { + this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data); + this._state = GET_INFO; + } else { + this._state = DEFER_EVENT; + setImmediate(() => { + this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data); + this._state = GET_INFO; + this.startLoop(cb); + }); + } + } + + /** + * Builds an error object. + * + * @param {function(new:Error|RangeError)} ErrorCtor The error constructor + * @param {String} message The error message + * @param {Boolean} prefix Specifies whether or not to add a default prefix to + * `message` + * @param {Number} statusCode The status code + * @param {String} errorCode The exposed error code + * @return {(Error|RangeError)} The error + * @private + */ + createError(ErrorCtor, message, prefix, statusCode, errorCode) { + this._loop = false; + this._errored = true; + + const err = new ErrorCtor( + prefix ? `Invalid WebSocket frame: ${message}` : message + ); + + Error.captureStackTrace(err, this.createError); + err.code = errorCode; + err[kStatusCode] = statusCode; + return err; + } +} + +module.exports = Receiver; diff --git a/server/node_modules/ws/lib/sender.js b/server/node_modules/ws/lib/sender.js new file mode 100644 index 0000000..a8b1da3 --- /dev/null +++ b/server/node_modules/ws/lib/sender.js @@ -0,0 +1,602 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex" }] */ + +'use strict'; + +const { Duplex } = require('stream'); +const { randomFillSync } = require('crypto'); + +const PerMessageDeflate = require('./permessage-deflate'); +const { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants'); +const { isBlob, isValidStatusCode } = require('./validation'); +const { mask: applyMask, toBuffer } = require('./buffer-util'); + +const kByteLength = Symbol('kByteLength'); +const maskBuffer = Buffer.alloc(4); +const RANDOM_POOL_SIZE = 8 * 1024; +let randomPool; +let randomPoolPointer = RANDOM_POOL_SIZE; + +const DEFAULT = 0; +const DEFLATING = 1; +const GET_BLOB_DATA = 2; + +/** + * HyBi Sender implementation. + */ +class Sender { + /** + * Creates a Sender instance. + * + * @param {Duplex} socket The connection socket + * @param {Object} [extensions] An object containing the negotiated extensions + * @param {Function} [generateMask] The function used to generate the masking + * key + */ + constructor(socket, extensions, generateMask) { + this._extensions = extensions || {}; + + if (generateMask) { + this._generateMask = generateMask; + this._maskBuffer = Buffer.alloc(4); + } + + this._socket = socket; + + this._firstFragment = true; + this._compress = false; + + this._bufferedBytes = 0; + this._queue = []; + this._state = DEFAULT; + this.onerror = NOOP; + this[kWebSocket] = undefined; + } + + /** + * Frames a piece of data according to the HyBi WebSocket protocol. + * + * @param {(Buffer|String)} data The data to frame + * @param {Object} options Options object + * @param {Boolean} [options.fin=false] Specifies whether or not to set the + * FIN bit + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Buffer} [options.maskBuffer] The buffer used to store the masking + * key + * @param {Number} options.opcode The opcode + * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be + * modified + * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the + * RSV1 bit + * @return {(Buffer|String)[]} The framed data + * @public + */ + static frame(data, options) { + let mask; + let merge = false; + let offset = 2; + let skipMasking = false; + + if (options.mask) { + mask = options.maskBuffer || maskBuffer; + + if (options.generateMask) { + options.generateMask(mask); + } else { + if (randomPoolPointer === RANDOM_POOL_SIZE) { + /* istanbul ignore else */ + if (randomPool === undefined) { + // + // This is lazily initialized because server-sent frames must not + // be masked so it may never be used. + // + randomPool = Buffer.alloc(RANDOM_POOL_SIZE); + } + + randomFillSync(randomPool, 0, RANDOM_POOL_SIZE); + randomPoolPointer = 0; + } + + mask[0] = randomPool[randomPoolPointer++]; + mask[1] = randomPool[randomPoolPointer++]; + mask[2] = randomPool[randomPoolPointer++]; + mask[3] = randomPool[randomPoolPointer++]; + } + + skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0; + offset = 6; + } + + let dataLength; + + if (typeof data === 'string') { + if ( + (!options.mask || skipMasking) && + options[kByteLength] !== undefined + ) { + dataLength = options[kByteLength]; + } else { + data = Buffer.from(data); + dataLength = data.length; + } + } else { + dataLength = data.length; + merge = options.mask && options.readOnly && !skipMasking; + } + + let payloadLength = dataLength; + + if (dataLength >= 65536) { + offset += 8; + payloadLength = 127; + } else if (dataLength > 125) { + offset += 2; + payloadLength = 126; + } + + const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset); + + target[0] = options.fin ? options.opcode | 0x80 : options.opcode; + if (options.rsv1) target[0] |= 0x40; + + target[1] = payloadLength; + + if (payloadLength === 126) { + target.writeUInt16BE(dataLength, 2); + } else if (payloadLength === 127) { + target[2] = target[3] = 0; + target.writeUIntBE(dataLength, 4, 6); + } + + if (!options.mask) return [target, data]; + + target[1] |= 0x80; + target[offset - 4] = mask[0]; + target[offset - 3] = mask[1]; + target[offset - 2] = mask[2]; + target[offset - 1] = mask[3]; + + if (skipMasking) return [target, data]; + + if (merge) { + applyMask(data, mask, target, offset, dataLength); + return [target]; + } + + applyMask(data, mask, data, 0, dataLength); + return [target, data]; + } + + /** + * Sends a close message to the other peer. + * + * @param {Number} [code] The status code component of the body + * @param {(String|Buffer)} [data] The message component of the body + * @param {Boolean} [mask=false] Specifies whether or not to mask the message + * @param {Function} [cb] Callback + * @public + */ + close(code, data, mask, cb) { + let buf; + + if (code === undefined) { + buf = EMPTY_BUFFER; + } else if (typeof code !== 'number' || !isValidStatusCode(code)) { + throw new TypeError('First argument must be a valid error code number'); + } else if (data === undefined || !data.length) { + buf = Buffer.allocUnsafe(2); + buf.writeUInt16BE(code, 0); + } else { + const length = Buffer.byteLength(data); + + if (length > 123) { + throw new RangeError('The message must not be greater than 123 bytes'); + } + + buf = Buffer.allocUnsafe(2 + length); + buf.writeUInt16BE(code, 0); + + if (typeof data === 'string') { + buf.write(data, 2); + } else { + buf.set(data, 2); + } + } + + const options = { + [kByteLength]: buf.length, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x08, + readOnly: false, + rsv1: false + }; + + if (this._state !== DEFAULT) { + this.enqueue([this.dispatch, buf, false, options, cb]); + } else { + this.sendFrame(Sender.frame(buf, options), cb); + } + } + + /** + * Sends a ping message to the other peer. + * + * @param {*} data The message to send + * @param {Boolean} [mask=false] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback + * @public + */ + ping(data, mask, cb) { + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else if (isBlob(data)) { + byteLength = data.size; + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (byteLength > 125) { + throw new RangeError('The data size must not be greater than 125 bytes'); + } + + const options = { + [kByteLength]: byteLength, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x09, + readOnly, + rsv1: false + }; + + if (isBlob(data)) { + if (this._state !== DEFAULT) { + this.enqueue([this.getBlobData, data, false, options, cb]); + } else { + this.getBlobData(data, false, options, cb); + } + } else if (this._state !== DEFAULT) { + this.enqueue([this.dispatch, data, false, options, cb]); + } else { + this.sendFrame(Sender.frame(data, options), cb); + } + } + + /** + * Sends a pong message to the other peer. + * + * @param {*} data The message to send + * @param {Boolean} [mask=false] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback + * @public + */ + pong(data, mask, cb) { + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else if (isBlob(data)) { + byteLength = data.size; + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (byteLength > 125) { + throw new RangeError('The data size must not be greater than 125 bytes'); + } + + const options = { + [kByteLength]: byteLength, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x0a, + readOnly, + rsv1: false + }; + + if (isBlob(data)) { + if (this._state !== DEFAULT) { + this.enqueue([this.getBlobData, data, false, options, cb]); + } else { + this.getBlobData(data, false, options, cb); + } + } else if (this._state !== DEFAULT) { + this.enqueue([this.dispatch, data, false, options, cb]); + } else { + this.sendFrame(Sender.frame(data, options), cb); + } + } + + /** + * Sends a data message to the other peer. + * + * @param {*} data The message to send + * @param {Object} options Options object + * @param {Boolean} [options.binary=false] Specifies whether `data` is binary + * or text + * @param {Boolean} [options.compress=false] Specifies whether or not to + * compress `data` + * @param {Boolean} [options.fin=false] Specifies whether the fragment is the + * last one + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Function} [cb] Callback + * @public + */ + send(data, options, cb) { + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + let opcode = options.binary ? 2 : 1; + let rsv1 = options.compress; + + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else if (isBlob(data)) { + byteLength = data.size; + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (this._firstFragment) { + this._firstFragment = false; + if ( + rsv1 && + perMessageDeflate && + perMessageDeflate.params[ + perMessageDeflate._isServer + ? 'server_no_context_takeover' + : 'client_no_context_takeover' + ] + ) { + rsv1 = byteLength >= perMessageDeflate._threshold; + } + this._compress = rsv1; + } else { + rsv1 = false; + opcode = 0; + } + + if (options.fin) this._firstFragment = true; + + const opts = { + [kByteLength]: byteLength, + fin: options.fin, + generateMask: this._generateMask, + mask: options.mask, + maskBuffer: this._maskBuffer, + opcode, + readOnly, + rsv1 + }; + + if (isBlob(data)) { + if (this._state !== DEFAULT) { + this.enqueue([this.getBlobData, data, this._compress, opts, cb]); + } else { + this.getBlobData(data, this._compress, opts, cb); + } + } else if (this._state !== DEFAULT) { + this.enqueue([this.dispatch, data, this._compress, opts, cb]); + } else { + this.dispatch(data, this._compress, opts, cb); + } + } + + /** + * Gets the contents of a blob as binary data. + * + * @param {Blob} blob The blob + * @param {Boolean} [compress=false] Specifies whether or not to compress + * the data + * @param {Object} options Options object + * @param {Boolean} [options.fin=false] Specifies whether or not to set the + * FIN bit + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Buffer} [options.maskBuffer] The buffer used to store the masking + * key + * @param {Number} options.opcode The opcode + * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be + * modified + * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the + * RSV1 bit + * @param {Function} [cb] Callback + * @private + */ + getBlobData(blob, compress, options, cb) { + this._bufferedBytes += options[kByteLength]; + this._state = GET_BLOB_DATA; + + blob + .arrayBuffer() + .then((arrayBuffer) => { + if (this._socket.destroyed) { + const err = new Error( + 'The socket was closed while the blob was being read' + ); + + // + // `callCallbacks` is called in the next tick to ensure that errors + // that might be thrown in the callbacks behave like errors thrown + // outside the promise chain. + // + process.nextTick(callCallbacks, this, err, cb); + return; + } + + this._bufferedBytes -= options[kByteLength]; + const data = toBuffer(arrayBuffer); + + if (!compress) { + this._state = DEFAULT; + this.sendFrame(Sender.frame(data, options), cb); + this.dequeue(); + } else { + this.dispatch(data, compress, options, cb); + } + }) + .catch((err) => { + // + // `onError` is called in the next tick for the same reason that + // `callCallbacks` above is. + // + process.nextTick(onError, this, err, cb); + }); + } + + /** + * Dispatches a message. + * + * @param {(Buffer|String)} data The message to send + * @param {Boolean} [compress=false] Specifies whether or not to compress + * `data` + * @param {Object} options Options object + * @param {Boolean} [options.fin=false] Specifies whether or not to set the + * FIN bit + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Buffer} [options.maskBuffer] The buffer used to store the masking + * key + * @param {Number} options.opcode The opcode + * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be + * modified + * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the + * RSV1 bit + * @param {Function} [cb] Callback + * @private + */ + dispatch(data, compress, options, cb) { + if (!compress) { + this.sendFrame(Sender.frame(data, options), cb); + return; + } + + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + + this._bufferedBytes += options[kByteLength]; + this._state = DEFLATING; + perMessageDeflate.compress(data, options.fin, (_, buf) => { + if (this._socket.destroyed) { + const err = new Error( + 'The socket was closed while data was being compressed' + ); + + callCallbacks(this, err, cb); + return; + } + + this._bufferedBytes -= options[kByteLength]; + this._state = DEFAULT; + options.readOnly = false; + this.sendFrame(Sender.frame(buf, options), cb); + this.dequeue(); + }); + } + + /** + * Executes queued send operations. + * + * @private + */ + dequeue() { + while (this._state === DEFAULT && this._queue.length) { + const params = this._queue.shift(); + + this._bufferedBytes -= params[3][kByteLength]; + Reflect.apply(params[0], this, params.slice(1)); + } + } + + /** + * Enqueues a send operation. + * + * @param {Array} params Send operation parameters. + * @private + */ + enqueue(params) { + this._bufferedBytes += params[3][kByteLength]; + this._queue.push(params); + } + + /** + * Sends a frame. + * + * @param {(Buffer | String)[]} list The frame to send + * @param {Function} [cb] Callback + * @private + */ + sendFrame(list, cb) { + if (list.length === 2) { + this._socket.cork(); + this._socket.write(list[0]); + this._socket.write(list[1], cb); + this._socket.uncork(); + } else { + this._socket.write(list[0], cb); + } + } +} + +module.exports = Sender; + +/** + * Calls queued callbacks with an error. + * + * @param {Sender} sender The `Sender` instance + * @param {Error} err The error to call the callbacks with + * @param {Function} [cb] The first callback + * @private + */ +function callCallbacks(sender, err, cb) { + if (typeof cb === 'function') cb(err); + + for (let i = 0; i < sender._queue.length; i++) { + const params = sender._queue[i]; + const callback = params[params.length - 1]; + + if (typeof callback === 'function') callback(err); + } +} + +/** + * Handles a `Sender` error. + * + * @param {Sender} sender The `Sender` instance + * @param {Error} err The error + * @param {Function} [cb] The first pending callback + * @private + */ +function onError(sender, err, cb) { + callCallbacks(sender, err, cb); + sender.onerror(err); +} diff --git a/server/node_modules/ws/lib/stream.js b/server/node_modules/ws/lib/stream.js new file mode 100644 index 0000000..4c58c91 --- /dev/null +++ b/server/node_modules/ws/lib/stream.js @@ -0,0 +1,161 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^WebSocket$" }] */ +'use strict'; + +const WebSocket = require('./websocket'); +const { Duplex } = require('stream'); + +/** + * Emits the `'close'` event on a stream. + * + * @param {Duplex} stream The stream. + * @private + */ +function emitClose(stream) { + stream.emit('close'); +} + +/** + * The listener of the `'end'` event. + * + * @private + */ +function duplexOnEnd() { + if (!this.destroyed && this._writableState.finished) { + this.destroy(); + } +} + +/** + * The listener of the `'error'` event. + * + * @param {Error} err The error + * @private + */ +function duplexOnError(err) { + this.removeListener('error', duplexOnError); + this.destroy(); + if (this.listenerCount('error') === 0) { + // Do not suppress the throwing behavior. + this.emit('error', err); + } +} + +/** + * Wraps a `WebSocket` in a duplex stream. + * + * @param {WebSocket} ws The `WebSocket` to wrap + * @param {Object} [options] The options for the `Duplex` constructor + * @return {Duplex} The duplex stream + * @public + */ +function createWebSocketStream(ws, options) { + let terminateOnDestroy = true; + + const duplex = new Duplex({ + ...options, + autoDestroy: false, + emitClose: false, + objectMode: false, + writableObjectMode: false + }); + + ws.on('message', function message(msg, isBinary) { + const data = + !isBinary && duplex._readableState.objectMode ? msg.toString() : msg; + + if (!duplex.push(data)) ws.pause(); + }); + + ws.once('error', function error(err) { + if (duplex.destroyed) return; + + // Prevent `ws.terminate()` from being called by `duplex._destroy()`. + // + // - If the `'error'` event is emitted before the `'open'` event, then + // `ws.terminate()` is a noop as no socket is assigned. + // - Otherwise, the error is re-emitted by the listener of the `'error'` + // event of the `Receiver` object. The listener already closes the + // connection by calling `ws.close()`. This allows a close frame to be + // sent to the other peer. If `ws.terminate()` is called right after this, + // then the close frame might not be sent. + terminateOnDestroy = false; + duplex.destroy(err); + }); + + ws.once('close', function close() { + if (duplex.destroyed) return; + + duplex.push(null); + }); + + duplex._destroy = function (err, callback) { + if (ws.readyState === ws.CLOSED) { + callback(err); + process.nextTick(emitClose, duplex); + return; + } + + let called = false; + + ws.once('error', function error(err) { + called = true; + callback(err); + }); + + ws.once('close', function close() { + if (!called) callback(err); + process.nextTick(emitClose, duplex); + }); + + if (terminateOnDestroy) ws.terminate(); + }; + + duplex._final = function (callback) { + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + duplex._final(callback); + }); + return; + } + + // If the value of the `_socket` property is `null` it means that `ws` is a + // client websocket and the handshake failed. In fact, when this happens, a + // socket is never assigned to the websocket. Wait for the `'error'` event + // that will be emitted by the websocket. + if (ws._socket === null) return; + + if (ws._socket._writableState.finished) { + callback(); + if (duplex._readableState.endEmitted) duplex.destroy(); + } else { + ws._socket.once('finish', function finish() { + // `duplex` is not destroyed here because the `'end'` event will be + // emitted on `duplex` after this `'finish'` event. The EOF signaling + // `null` chunk is, in fact, pushed when the websocket emits `'close'`. + callback(); + }); + ws.close(); + } + }; + + duplex._read = function () { + if (ws.isPaused) ws.resume(); + }; + + duplex._write = function (chunk, encoding, callback) { + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + duplex._write(chunk, encoding, callback); + }); + return; + } + + ws.send(chunk, callback); + }; + + duplex.on('end', duplexOnEnd); + duplex.on('error', duplexOnError); + return duplex; +} + +module.exports = createWebSocketStream; diff --git a/server/node_modules/ws/lib/subprotocol.js b/server/node_modules/ws/lib/subprotocol.js new file mode 100644 index 0000000..d4381e8 --- /dev/null +++ b/server/node_modules/ws/lib/subprotocol.js @@ -0,0 +1,62 @@ +'use strict'; + +const { tokenChars } = require('./validation'); + +/** + * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names. + * + * @param {String} header The field value of the header + * @return {Set} The subprotocol names + * @public + */ +function parse(header) { + const protocols = new Set(); + let start = -1; + let end = -1; + let i = 0; + + for (i; i < header.length; i++) { + const code = header.charCodeAt(i); + + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if ( + i !== 0 && + (code === 0x20 /* ' ' */ || code === 0x09) /* '\t' */ + ) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x2c /* ',' */) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + + const protocol = header.slice(start, end); + + if (protocols.has(protocol)) { + throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); + } + + protocols.add(protocol); + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } + + if (start === -1 || end !== -1) { + throw new SyntaxError('Unexpected end of input'); + } + + const protocol = header.slice(start, i); + + if (protocols.has(protocol)) { + throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); + } + + protocols.add(protocol); + return protocols; +} + +module.exports = { parse }; diff --git a/server/node_modules/ws/lib/validation.js b/server/node_modules/ws/lib/validation.js new file mode 100644 index 0000000..4a2e68d --- /dev/null +++ b/server/node_modules/ws/lib/validation.js @@ -0,0 +1,152 @@ +'use strict'; + +const { isUtf8 } = require('buffer'); + +const { hasBlob } = require('./constants'); + +// +// Allowed token characters: +// +// '!', '#', '$', '%', '&', ''', '*', '+', '-', +// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~' +// +// tokenChars[32] === 0 // ' ' +// tokenChars[33] === 1 // '!' +// tokenChars[34] === 0 // '"' +// ... +// +// prettier-ignore +const tokenChars = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31 + 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63 + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127 +]; + +/** + * Checks if a status code is allowed in a close frame. + * + * @param {Number} code The status code + * @return {Boolean} `true` if the status code is valid, else `false` + * @public + */ +function isValidStatusCode(code) { + return ( + (code >= 1000 && + code <= 1014 && + code !== 1004 && + code !== 1005 && + code !== 1006) || + (code >= 3000 && code <= 4999) + ); +} + +/** + * Checks if a given buffer contains only correct UTF-8. + * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by + * Markus Kuhn. + * + * @param {Buffer} buf The buffer to check + * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false` + * @public + */ +function _isValidUTF8(buf) { + const len = buf.length; + let i = 0; + + while (i < len) { + if ((buf[i] & 0x80) === 0) { + // 0xxxxxxx + i++; + } else if ((buf[i] & 0xe0) === 0xc0) { + // 110xxxxx 10xxxxxx + if ( + i + 1 === len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i] & 0xfe) === 0xc0 // Overlong + ) { + return false; + } + + i += 2; + } else if ((buf[i] & 0xf0) === 0xe0) { + // 1110xxxx 10xxxxxx 10xxxxxx + if ( + i + 2 >= len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i + 2] & 0xc0) !== 0x80 || + (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong + (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF) + ) { + return false; + } + + i += 3; + } else if ((buf[i] & 0xf8) === 0xf0) { + // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + if ( + i + 3 >= len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i + 2] & 0xc0) !== 0x80 || + (buf[i + 3] & 0xc0) !== 0x80 || + (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong + (buf[i] === 0xf4 && buf[i + 1] > 0x8f) || + buf[i] > 0xf4 // > U+10FFFF + ) { + return false; + } + + i += 4; + } else { + return false; + } + } + + return true; +} + +/** + * Determines whether a value is a `Blob`. + * + * @param {*} value The value to be tested + * @return {Boolean} `true` if `value` is a `Blob`, else `false` + * @private + */ +function isBlob(value) { + return ( + hasBlob && + typeof value === 'object' && + typeof value.arrayBuffer === 'function' && + typeof value.type === 'string' && + typeof value.stream === 'function' && + (value[Symbol.toStringTag] === 'Blob' || + value[Symbol.toStringTag] === 'File') + ); +} + +module.exports = { + isBlob, + isValidStatusCode, + isValidUTF8: _isValidUTF8, + tokenChars +}; + +if (isUtf8) { + module.exports.isValidUTF8 = function (buf) { + return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf); + }; +} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) { + try { + const isValidUTF8 = require('utf-8-validate'); + + module.exports.isValidUTF8 = function (buf) { + return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf); + }; + } catch (e) { + // Continue regardless of the error. + } +} diff --git a/server/node_modules/ws/lib/websocket-server.js b/server/node_modules/ws/lib/websocket-server.js new file mode 100644 index 0000000..33e0985 --- /dev/null +++ b/server/node_modules/ws/lib/websocket-server.js @@ -0,0 +1,550 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex$", "caughtErrors": "none" }] */ + +'use strict'; + +const EventEmitter = require('events'); +const http = require('http'); +const { Duplex } = require('stream'); +const { createHash } = require('crypto'); + +const extension = require('./extension'); +const PerMessageDeflate = require('./permessage-deflate'); +const subprotocol = require('./subprotocol'); +const WebSocket = require('./websocket'); +const { GUID, kWebSocket } = require('./constants'); + +const keyRegex = /^[+/0-9A-Za-z]{22}==$/; + +const RUNNING = 0; +const CLOSING = 1; +const CLOSED = 2; + +/** + * Class representing a WebSocket server. + * + * @extends EventEmitter + */ +class WebSocketServer extends EventEmitter { + /** + * Create a `WebSocketServer` instance. + * + * @param {Object} options Configuration options + * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether + * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted + * multiple times in the same tick + * @param {Boolean} [options.autoPong=true] Specifies whether or not to + * automatically send a pong in response to a ping + * @param {Number} [options.backlog=511] The maximum length of the queue of + * pending connections + * @param {Boolean} [options.clientTracking=true] Specifies whether or not to + * track clients + * @param {Function} [options.handleProtocols] A hook to handle protocols + * @param {String} [options.host] The hostname where to bind the server + * @param {Number} [options.maxPayload=104857600] The maximum allowed message + * size + * @param {Boolean} [options.noServer=false] Enable no server mode + * @param {String} [options.path] Accept only connections matching this path + * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable + * permessage-deflate + * @param {Number} [options.port] The port where to bind the server + * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S + * server to use + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @param {Function} [options.verifyClient] A hook to reject connections + * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket` + * class to use. It must be the `WebSocket` class or class that extends it + * @param {Function} [callback] A listener for the `listening` event + */ + constructor(options, callback) { + super(); + + options = { + allowSynchronousEvents: true, + autoPong: true, + maxPayload: 100 * 1024 * 1024, + skipUTF8Validation: false, + perMessageDeflate: false, + handleProtocols: null, + clientTracking: true, + verifyClient: null, + noServer: false, + backlog: null, // use default (511 as implemented in net.js) + server: null, + host: null, + path: null, + port: null, + WebSocket, + ...options + }; + + if ( + (options.port == null && !options.server && !options.noServer) || + (options.port != null && (options.server || options.noServer)) || + (options.server && options.noServer) + ) { + throw new TypeError( + 'One and only one of the "port", "server", or "noServer" options ' + + 'must be specified' + ); + } + + if (options.port != null) { + this._server = http.createServer((req, res) => { + const body = http.STATUS_CODES[426]; + + res.writeHead(426, { + 'Content-Length': body.length, + 'Content-Type': 'text/plain' + }); + res.end(body); + }); + this._server.listen( + options.port, + options.host, + options.backlog, + callback + ); + } else if (options.server) { + this._server = options.server; + } + + if (this._server) { + const emitConnection = this.emit.bind(this, 'connection'); + + this._removeListeners = addListeners(this._server, { + listening: this.emit.bind(this, 'listening'), + error: this.emit.bind(this, 'error'), + upgrade: (req, socket, head) => { + this.handleUpgrade(req, socket, head, emitConnection); + } + }); + } + + if (options.perMessageDeflate === true) options.perMessageDeflate = {}; + if (options.clientTracking) { + this.clients = new Set(); + this._shouldEmitClose = false; + } + + this.options = options; + this._state = RUNNING; + } + + /** + * Returns the bound address, the address family name, and port of the server + * as reported by the operating system if listening on an IP socket. + * If the server is listening on a pipe or UNIX domain socket, the name is + * returned as a string. + * + * @return {(Object|String|null)} The address of the server + * @public + */ + address() { + if (this.options.noServer) { + throw new Error('The server is operating in "noServer" mode'); + } + + if (!this._server) return null; + return this._server.address(); + } + + /** + * Stop the server from accepting new connections and emit the `'close'` event + * when all existing connections are closed. + * + * @param {Function} [cb] A one-time listener for the `'close'` event + * @public + */ + close(cb) { + if (this._state === CLOSED) { + if (cb) { + this.once('close', () => { + cb(new Error('The server is not running')); + }); + } + + process.nextTick(emitClose, this); + return; + } + + if (cb) this.once('close', cb); + + if (this._state === CLOSING) return; + this._state = CLOSING; + + if (this.options.noServer || this.options.server) { + if (this._server) { + this._removeListeners(); + this._removeListeners = this._server = null; + } + + if (this.clients) { + if (!this.clients.size) { + process.nextTick(emitClose, this); + } else { + this._shouldEmitClose = true; + } + } else { + process.nextTick(emitClose, this); + } + } else { + const server = this._server; + + this._removeListeners(); + this._removeListeners = this._server = null; + + // + // The HTTP/S server was created internally. Close it, and rely on its + // `'close'` event. + // + server.close(() => { + emitClose(this); + }); + } + } + + /** + * See if a given request should be handled by this server instance. + * + * @param {http.IncomingMessage} req Request object to inspect + * @return {Boolean} `true` if the request is valid, else `false` + * @public + */ + shouldHandle(req) { + if (this.options.path) { + const index = req.url.indexOf('?'); + const pathname = index !== -1 ? req.url.slice(0, index) : req.url; + + if (pathname !== this.options.path) return false; + } + + return true; + } + + /** + * Handle a HTTP Upgrade request. + * + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Function} cb Callback + * @public + */ + handleUpgrade(req, socket, head, cb) { + socket.on('error', socketOnError); + + const key = req.headers['sec-websocket-key']; + const upgrade = req.headers.upgrade; + const version = +req.headers['sec-websocket-version']; + + if (req.method !== 'GET') { + const message = 'Invalid HTTP method'; + abortHandshakeOrEmitwsClientError(this, req, socket, 405, message); + return; + } + + if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') { + const message = 'Invalid Upgrade header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (key === undefined || !keyRegex.test(key)) { + const message = 'Missing or invalid Sec-WebSocket-Key header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (version !== 13 && version !== 8) { + const message = 'Missing or invalid Sec-WebSocket-Version header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, { + 'Sec-WebSocket-Version': '13, 8' + }); + return; + } + + if (!this.shouldHandle(req)) { + abortHandshake(socket, 400); + return; + } + + const secWebSocketProtocol = req.headers['sec-websocket-protocol']; + let protocols = new Set(); + + if (secWebSocketProtocol !== undefined) { + try { + protocols = subprotocol.parse(secWebSocketProtocol); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Protocol header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + } + + const secWebSocketExtensions = req.headers['sec-websocket-extensions']; + const extensions = {}; + + if ( + this.options.perMessageDeflate && + secWebSocketExtensions !== undefined + ) { + const perMessageDeflate = new PerMessageDeflate( + this.options.perMessageDeflate, + true, + this.options.maxPayload + ); + + try { + const offers = extension.parse(secWebSocketExtensions); + + if (offers[PerMessageDeflate.extensionName]) { + perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]); + extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + } catch (err) { + const message = + 'Invalid or unacceptable Sec-WebSocket-Extensions header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + } + + // + // Optionally call external client verification handler. + // + if (this.options.verifyClient) { + const info = { + origin: + req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`], + secure: !!(req.socket.authorized || req.socket.encrypted), + req + }; + + if (this.options.verifyClient.length === 2) { + this.options.verifyClient(info, (verified, code, message, headers) => { + if (!verified) { + return abortHandshake(socket, code || 401, message, headers); + } + + this.completeUpgrade( + extensions, + key, + protocols, + req, + socket, + head, + cb + ); + }); + return; + } + + if (!this.options.verifyClient(info)) return abortHandshake(socket, 401); + } + + this.completeUpgrade(extensions, key, protocols, req, socket, head, cb); + } + + /** + * Upgrade the connection to WebSocket. + * + * @param {Object} extensions The accepted extensions + * @param {String} key The value of the `Sec-WebSocket-Key` header + * @param {Set} protocols The subprotocols + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Function} cb Callback + * @throws {Error} If called more than once with the same socket + * @private + */ + completeUpgrade(extensions, key, protocols, req, socket, head, cb) { + // + // Destroy the socket if the client has already sent a FIN packet. + // + if (!socket.readable || !socket.writable) return socket.destroy(); + + if (socket[kWebSocket]) { + throw new Error( + 'server.handleUpgrade() was called more than once with the same ' + + 'socket, possibly due to a misconfiguration' + ); + } + + if (this._state > RUNNING) return abortHandshake(socket, 503); + + const digest = createHash('sha1') + .update(key + GUID) + .digest('base64'); + + const headers = [ + 'HTTP/1.1 101 Switching Protocols', + 'Upgrade: websocket', + 'Connection: Upgrade', + `Sec-WebSocket-Accept: ${digest}` + ]; + + const ws = new this.options.WebSocket(null, undefined, this.options); + + if (protocols.size) { + // + // Optionally call external protocol selection handler. + // + const protocol = this.options.handleProtocols + ? this.options.handleProtocols(protocols, req) + : protocols.values().next().value; + + if (protocol) { + headers.push(`Sec-WebSocket-Protocol: ${protocol}`); + ws._protocol = protocol; + } + } + + if (extensions[PerMessageDeflate.extensionName]) { + const params = extensions[PerMessageDeflate.extensionName].params; + const value = extension.format({ + [PerMessageDeflate.extensionName]: [params] + }); + headers.push(`Sec-WebSocket-Extensions: ${value}`); + ws._extensions = extensions; + } + + // + // Allow external modification/inspection of handshake headers. + // + this.emit('headers', headers, req); + + socket.write(headers.concat('\r\n').join('\r\n')); + socket.removeListener('error', socketOnError); + + ws.setSocket(socket, head, { + allowSynchronousEvents: this.options.allowSynchronousEvents, + maxPayload: this.options.maxPayload, + skipUTF8Validation: this.options.skipUTF8Validation + }); + + if (this.clients) { + this.clients.add(ws); + ws.on('close', () => { + this.clients.delete(ws); + + if (this._shouldEmitClose && !this.clients.size) { + process.nextTick(emitClose, this); + } + }); + } + + cb(ws, req); + } +} + +module.exports = WebSocketServer; + +/** + * Add event listeners on an `EventEmitter` using a map of + * pairs. + * + * @param {EventEmitter} server The event emitter + * @param {Object.} map The listeners to add + * @return {Function} A function that will remove the added listeners when + * called + * @private + */ +function addListeners(server, map) { + for (const event of Object.keys(map)) server.on(event, map[event]); + + return function removeListeners() { + for (const event of Object.keys(map)) { + server.removeListener(event, map[event]); + } + }; +} + +/** + * Emit a `'close'` event on an `EventEmitter`. + * + * @param {EventEmitter} server The event emitter + * @private + */ +function emitClose(server) { + server._state = CLOSED; + server.emit('close'); +} + +/** + * Handle socket errors. + * + * @private + */ +function socketOnError() { + this.destroy(); +} + +/** + * Close the connection when preconditions are not fulfilled. + * + * @param {Duplex} socket The socket of the upgrade request + * @param {Number} code The HTTP response status code + * @param {String} [message] The HTTP response body + * @param {Object} [headers] Additional HTTP response headers + * @private + */ +function abortHandshake(socket, code, message, headers) { + // + // The socket is writable unless the user destroyed or ended it before calling + // `server.handleUpgrade()` or in the `verifyClient` function, which is a user + // error. Handling this does not make much sense as the worst that can happen + // is that some of the data written by the user might be discarded due to the + // call to `socket.end()` below, which triggers an `'error'` event that in + // turn causes the socket to be destroyed. + // + message = message || http.STATUS_CODES[code]; + headers = { + Connection: 'close', + 'Content-Type': 'text/html', + 'Content-Length': Buffer.byteLength(message), + ...headers + }; + + socket.once('finish', socket.destroy); + + socket.end( + `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` + + Object.keys(headers) + .map((h) => `${h}: ${headers[h]}`) + .join('\r\n') + + '\r\n\r\n' + + message + ); +} + +/** + * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least + * one listener for it, otherwise call `abortHandshake()`. + * + * @param {WebSocketServer} server The WebSocket server + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The socket of the upgrade request + * @param {Number} code The HTTP response status code + * @param {String} message The HTTP response body + * @param {Object} [headers] The HTTP response headers + * @private + */ +function abortHandshakeOrEmitwsClientError( + server, + req, + socket, + code, + message, + headers +) { + if (server.listenerCount('wsClientError')) { + const err = new Error(message); + Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError); + + server.emit('wsClientError', err, socket, req); + } else { + abortHandshake(socket, code, message, headers); + } +} diff --git a/server/node_modules/ws/lib/websocket.js b/server/node_modules/ws/lib/websocket.js new file mode 100644 index 0000000..ad8764a --- /dev/null +++ b/server/node_modules/ws/lib/websocket.js @@ -0,0 +1,1388 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex|Readable$", "caughtErrors": "none" }] */ + +'use strict'; + +const EventEmitter = require('events'); +const https = require('https'); +const http = require('http'); +const net = require('net'); +const tls = require('tls'); +const { randomBytes, createHash } = require('crypto'); +const { Duplex, Readable } = require('stream'); +const { URL } = require('url'); + +const PerMessageDeflate = require('./permessage-deflate'); +const Receiver = require('./receiver'); +const Sender = require('./sender'); +const { isBlob } = require('./validation'); + +const { + BINARY_TYPES, + EMPTY_BUFFER, + GUID, + kForOnEventAttribute, + kListener, + kStatusCode, + kWebSocket, + NOOP +} = require('./constants'); +const { + EventTarget: { addEventListener, removeEventListener } +} = require('./event-target'); +const { format, parse } = require('./extension'); +const { toBuffer } = require('./buffer-util'); + +const closeTimeout = 30 * 1000; +const kAborted = Symbol('kAborted'); +const protocolVersions = [8, 13]; +const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED']; +const subprotocolRegex = /^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/; + +/** + * Class representing a WebSocket. + * + * @extends EventEmitter + */ +class WebSocket extends EventEmitter { + /** + * Create a new `WebSocket`. + * + * @param {(String|URL)} address The URL to which to connect + * @param {(String|String[])} [protocols] The subprotocols + * @param {Object} [options] Connection options + */ + constructor(address, protocols, options) { + super(); + + this._binaryType = BINARY_TYPES[0]; + this._closeCode = 1006; + this._closeFrameReceived = false; + this._closeFrameSent = false; + this._closeMessage = EMPTY_BUFFER; + this._closeTimer = null; + this._errorEmitted = false; + this._extensions = {}; + this._paused = false; + this._protocol = ''; + this._readyState = WebSocket.CONNECTING; + this._receiver = null; + this._sender = null; + this._socket = null; + + if (address !== null) { + this._bufferedAmount = 0; + this._isServer = false; + this._redirects = 0; + + if (protocols === undefined) { + protocols = []; + } else if (!Array.isArray(protocols)) { + if (typeof protocols === 'object' && protocols !== null) { + options = protocols; + protocols = []; + } else { + protocols = [protocols]; + } + } + + initAsClient(this, address, protocols, options); + } else { + this._autoPong = options.autoPong; + this._isServer = true; + } + } + + /** + * For historical reasons, the custom "nodebuffer" type is used by the default + * instead of "blob". + * + * @type {String} + */ + get binaryType() { + return this._binaryType; + } + + set binaryType(type) { + if (!BINARY_TYPES.includes(type)) return; + + this._binaryType = type; + + // + // Allow to change `binaryType` on the fly. + // + if (this._receiver) this._receiver._binaryType = type; + } + + /** + * @type {Number} + */ + get bufferedAmount() { + if (!this._socket) return this._bufferedAmount; + + return this._socket._writableState.length + this._sender._bufferedBytes; + } + + /** + * @type {String} + */ + get extensions() { + return Object.keys(this._extensions).join(); + } + + /** + * @type {Boolean} + */ + get isPaused() { + return this._paused; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onclose() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onerror() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onopen() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onmessage() { + return null; + } + + /** + * @type {String} + */ + get protocol() { + return this._protocol; + } + + /** + * @type {Number} + */ + get readyState() { + return this._readyState; + } + + /** + * @type {String} + */ + get url() { + return this._url; + } + + /** + * Set up the socket and the internal resources. + * + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Object} options Options object + * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether + * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted + * multiple times in the same tick + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Number} [options.maxPayload=0] The maximum allowed message size + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @private + */ + setSocket(socket, head, options) { + const receiver = new Receiver({ + allowSynchronousEvents: options.allowSynchronousEvents, + binaryType: this.binaryType, + extensions: this._extensions, + isServer: this._isServer, + maxPayload: options.maxPayload, + skipUTF8Validation: options.skipUTF8Validation + }); + + const sender = new Sender(socket, this._extensions, options.generateMask); + + this._receiver = receiver; + this._sender = sender; + this._socket = socket; + + receiver[kWebSocket] = this; + sender[kWebSocket] = this; + socket[kWebSocket] = this; + + receiver.on('conclude', receiverOnConclude); + receiver.on('drain', receiverOnDrain); + receiver.on('error', receiverOnError); + receiver.on('message', receiverOnMessage); + receiver.on('ping', receiverOnPing); + receiver.on('pong', receiverOnPong); + + sender.onerror = senderOnError; + + // + // These methods may not be available if `socket` is just a `Duplex`. + // + if (socket.setTimeout) socket.setTimeout(0); + if (socket.setNoDelay) socket.setNoDelay(); + + if (head.length > 0) socket.unshift(head); + + socket.on('close', socketOnClose); + socket.on('data', socketOnData); + socket.on('end', socketOnEnd); + socket.on('error', socketOnError); + + this._readyState = WebSocket.OPEN; + this.emit('open'); + } + + /** + * Emit the `'close'` event. + * + * @private + */ + emitClose() { + if (!this._socket) { + this._readyState = WebSocket.CLOSED; + this.emit('close', this._closeCode, this._closeMessage); + return; + } + + if (this._extensions[PerMessageDeflate.extensionName]) { + this._extensions[PerMessageDeflate.extensionName].cleanup(); + } + + this._receiver.removeAllListeners(); + this._readyState = WebSocket.CLOSED; + this.emit('close', this._closeCode, this._closeMessage); + } + + /** + * Start a closing handshake. + * + * +----------+ +-----------+ +----------+ + * - - -|ws.close()|-->|close frame|-->|ws.close()|- - - + * | +----------+ +-----------+ +----------+ | + * +----------+ +-----------+ | + * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING + * +----------+ +-----------+ | + * | | | +---+ | + * +------------------------+-->|fin| - - - - + * | +---+ | +---+ + * - - - - -|fin|<---------------------+ + * +---+ + * + * @param {Number} [code] Status code explaining why the connection is closing + * @param {(String|Buffer)} [data] The reason why the connection is + * closing + * @public + */ + close(code, data) { + if (this.readyState === WebSocket.CLOSED) return; + if (this.readyState === WebSocket.CONNECTING) { + const msg = 'WebSocket was closed before the connection was established'; + abortHandshake(this, this._req, msg); + return; + } + + if (this.readyState === WebSocket.CLOSING) { + if ( + this._closeFrameSent && + (this._closeFrameReceived || this._receiver._writableState.errorEmitted) + ) { + this._socket.end(); + } + + return; + } + + this._readyState = WebSocket.CLOSING; + this._sender.close(code, data, !this._isServer, (err) => { + // + // This error is handled by the `'error'` listener on the socket. We only + // want to know if the close frame has been sent here. + // + if (err) return; + + this._closeFrameSent = true; + + if ( + this._closeFrameReceived || + this._receiver._writableState.errorEmitted + ) { + this._socket.end(); + } + }); + + setCloseTimer(this); + } + + /** + * Pause the socket. + * + * @public + */ + pause() { + if ( + this.readyState === WebSocket.CONNECTING || + this.readyState === WebSocket.CLOSED + ) { + return; + } + + this._paused = true; + this._socket.pause(); + } + + /** + * Send a ping. + * + * @param {*} [data] The data to send + * @param {Boolean} [mask] Indicates whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when the ping is sent + * @public + */ + ping(data, mask, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof data === 'function') { + cb = data; + data = mask = undefined; + } else if (typeof mask === 'function') { + cb = mask; + mask = undefined; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + if (mask === undefined) mask = !this._isServer; + this._sender.ping(data || EMPTY_BUFFER, mask, cb); + } + + /** + * Send a pong. + * + * @param {*} [data] The data to send + * @param {Boolean} [mask] Indicates whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when the pong is sent + * @public + */ + pong(data, mask, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof data === 'function') { + cb = data; + data = mask = undefined; + } else if (typeof mask === 'function') { + cb = mask; + mask = undefined; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + if (mask === undefined) mask = !this._isServer; + this._sender.pong(data || EMPTY_BUFFER, mask, cb); + } + + /** + * Resume the socket. + * + * @public + */ + resume() { + if ( + this.readyState === WebSocket.CONNECTING || + this.readyState === WebSocket.CLOSED + ) { + return; + } + + this._paused = false; + if (!this._receiver._writableState.needDrain) this._socket.resume(); + } + + /** + * Send a data message. + * + * @param {*} data The message to send + * @param {Object} [options] Options object + * @param {Boolean} [options.binary] Specifies whether `data` is binary or + * text + * @param {Boolean} [options.compress] Specifies whether or not to compress + * `data` + * @param {Boolean} [options.fin=true] Specifies whether the fragment is the + * last one + * @param {Boolean} [options.mask] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when data is written out + * @public + */ + send(data, options, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof options === 'function') { + cb = options; + options = {}; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + const opts = { + binary: typeof data !== 'string', + mask: !this._isServer, + compress: true, + fin: true, + ...options + }; + + if (!this._extensions[PerMessageDeflate.extensionName]) { + opts.compress = false; + } + + this._sender.send(data || EMPTY_BUFFER, opts, cb); + } + + /** + * Forcibly close the connection. + * + * @public + */ + terminate() { + if (this.readyState === WebSocket.CLOSED) return; + if (this.readyState === WebSocket.CONNECTING) { + const msg = 'WebSocket was closed before the connection was established'; + abortHandshake(this, this._req, msg); + return; + } + + if (this._socket) { + this._readyState = WebSocket.CLOSING; + this._socket.destroy(); + } + } +} + +/** + * @constant {Number} CONNECTING + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CONNECTING', { + enumerable: true, + value: readyStates.indexOf('CONNECTING') +}); + +/** + * @constant {Number} CONNECTING + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CONNECTING', { + enumerable: true, + value: readyStates.indexOf('CONNECTING') +}); + +/** + * @constant {Number} OPEN + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'OPEN', { + enumerable: true, + value: readyStates.indexOf('OPEN') +}); + +/** + * @constant {Number} OPEN + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'OPEN', { + enumerable: true, + value: readyStates.indexOf('OPEN') +}); + +/** + * @constant {Number} CLOSING + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CLOSING', { + enumerable: true, + value: readyStates.indexOf('CLOSING') +}); + +/** + * @constant {Number} CLOSING + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CLOSING', { + enumerable: true, + value: readyStates.indexOf('CLOSING') +}); + +/** + * @constant {Number} CLOSED + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CLOSED', { + enumerable: true, + value: readyStates.indexOf('CLOSED') +}); + +/** + * @constant {Number} CLOSED + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CLOSED', { + enumerable: true, + value: readyStates.indexOf('CLOSED') +}); + +[ + 'binaryType', + 'bufferedAmount', + 'extensions', + 'isPaused', + 'protocol', + 'readyState', + 'url' +].forEach((property) => { + Object.defineProperty(WebSocket.prototype, property, { enumerable: true }); +}); + +// +// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes. +// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface +// +['open', 'error', 'close', 'message'].forEach((method) => { + Object.defineProperty(WebSocket.prototype, `on${method}`, { + enumerable: true, + get() { + for (const listener of this.listeners(method)) { + if (listener[kForOnEventAttribute]) return listener[kListener]; + } + + return null; + }, + set(handler) { + for (const listener of this.listeners(method)) { + if (listener[kForOnEventAttribute]) { + this.removeListener(method, listener); + break; + } + } + + if (typeof handler !== 'function') return; + + this.addEventListener(method, handler, { + [kForOnEventAttribute]: true + }); + } + }); +}); + +WebSocket.prototype.addEventListener = addEventListener; +WebSocket.prototype.removeEventListener = removeEventListener; + +module.exports = WebSocket; + +/** + * Initialize a WebSocket client. + * + * @param {WebSocket} websocket The client to initialize + * @param {(String|URL)} address The URL to which to connect + * @param {Array} protocols The subprotocols + * @param {Object} [options] Connection options + * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any + * of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple + * times in the same tick + * @param {Boolean} [options.autoPong=true] Specifies whether or not to + * automatically send a pong in response to a ping + * @param {Function} [options.finishRequest] A function which can be used to + * customize the headers of each http request before it is sent + * @param {Boolean} [options.followRedirects=false] Whether or not to follow + * redirects + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the + * handshake request + * @param {Number} [options.maxPayload=104857600] The maximum allowed message + * size + * @param {Number} [options.maxRedirects=10] The maximum number of redirects + * allowed + * @param {String} [options.origin] Value of the `Origin` or + * `Sec-WebSocket-Origin` header + * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable + * permessage-deflate + * @param {Number} [options.protocolVersion=13] Value of the + * `Sec-WebSocket-Version` header + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @private + */ +function initAsClient(websocket, address, protocols, options) { + const opts = { + allowSynchronousEvents: true, + autoPong: true, + protocolVersion: protocolVersions[1], + maxPayload: 100 * 1024 * 1024, + skipUTF8Validation: false, + perMessageDeflate: true, + followRedirects: false, + maxRedirects: 10, + ...options, + socketPath: undefined, + hostname: undefined, + protocol: undefined, + timeout: undefined, + method: 'GET', + host: undefined, + path: undefined, + port: undefined + }; + + websocket._autoPong = opts.autoPong; + + if (!protocolVersions.includes(opts.protocolVersion)) { + throw new RangeError( + `Unsupported protocol version: ${opts.protocolVersion} ` + + `(supported versions: ${protocolVersions.join(', ')})` + ); + } + + let parsedUrl; + + if (address instanceof URL) { + parsedUrl = address; + } else { + try { + parsedUrl = new URL(address); + } catch (e) { + throw new SyntaxError(`Invalid URL: ${address}`); + } + } + + if (parsedUrl.protocol === 'http:') { + parsedUrl.protocol = 'ws:'; + } else if (parsedUrl.protocol === 'https:') { + parsedUrl.protocol = 'wss:'; + } + + websocket._url = parsedUrl.href; + + const isSecure = parsedUrl.protocol === 'wss:'; + const isIpcUrl = parsedUrl.protocol === 'ws+unix:'; + let invalidUrlMessage; + + if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) { + invalidUrlMessage = + 'The URL\'s protocol must be one of "ws:", "wss:", ' + + '"http:", "https:", or "ws+unix:"'; + } else if (isIpcUrl && !parsedUrl.pathname) { + invalidUrlMessage = "The URL's pathname is empty"; + } else if (parsedUrl.hash) { + invalidUrlMessage = 'The URL contains a fragment identifier'; + } + + if (invalidUrlMessage) { + const err = new SyntaxError(invalidUrlMessage); + + if (websocket._redirects === 0) { + throw err; + } else { + emitErrorAndClose(websocket, err); + return; + } + } + + const defaultPort = isSecure ? 443 : 80; + const key = randomBytes(16).toString('base64'); + const request = isSecure ? https.request : http.request; + const protocolSet = new Set(); + let perMessageDeflate; + + opts.createConnection = + opts.createConnection || (isSecure ? tlsConnect : netConnect); + opts.defaultPort = opts.defaultPort || defaultPort; + opts.port = parsedUrl.port || defaultPort; + opts.host = parsedUrl.hostname.startsWith('[') + ? parsedUrl.hostname.slice(1, -1) + : parsedUrl.hostname; + opts.headers = { + ...opts.headers, + 'Sec-WebSocket-Version': opts.protocolVersion, + 'Sec-WebSocket-Key': key, + Connection: 'Upgrade', + Upgrade: 'websocket' + }; + opts.path = parsedUrl.pathname + parsedUrl.search; + opts.timeout = opts.handshakeTimeout; + + if (opts.perMessageDeflate) { + perMessageDeflate = new PerMessageDeflate( + opts.perMessageDeflate !== true ? opts.perMessageDeflate : {}, + false, + opts.maxPayload + ); + opts.headers['Sec-WebSocket-Extensions'] = format({ + [PerMessageDeflate.extensionName]: perMessageDeflate.offer() + }); + } + if (protocols.length) { + for (const protocol of protocols) { + if ( + typeof protocol !== 'string' || + !subprotocolRegex.test(protocol) || + protocolSet.has(protocol) + ) { + throw new SyntaxError( + 'An invalid or duplicated subprotocol was specified' + ); + } + + protocolSet.add(protocol); + } + + opts.headers['Sec-WebSocket-Protocol'] = protocols.join(','); + } + if (opts.origin) { + if (opts.protocolVersion < 13) { + opts.headers['Sec-WebSocket-Origin'] = opts.origin; + } else { + opts.headers.Origin = opts.origin; + } + } + if (parsedUrl.username || parsedUrl.password) { + opts.auth = `${parsedUrl.username}:${parsedUrl.password}`; + } + + if (isIpcUrl) { + const parts = opts.path.split(':'); + + opts.socketPath = parts[0]; + opts.path = parts[1]; + } + + let req; + + if (opts.followRedirects) { + if (websocket._redirects === 0) { + websocket._originalIpc = isIpcUrl; + websocket._originalSecure = isSecure; + websocket._originalHostOrSocketPath = isIpcUrl + ? opts.socketPath + : parsedUrl.host; + + const headers = options && options.headers; + + // + // Shallow copy the user provided options so that headers can be changed + // without mutating the original object. + // + options = { ...options, headers: {} }; + + if (headers) { + for (const [key, value] of Object.entries(headers)) { + options.headers[key.toLowerCase()] = value; + } + } + } else if (websocket.listenerCount('redirect') === 0) { + const isSameHost = isIpcUrl + ? websocket._originalIpc + ? opts.socketPath === websocket._originalHostOrSocketPath + : false + : websocket._originalIpc + ? false + : parsedUrl.host === websocket._originalHostOrSocketPath; + + if (!isSameHost || (websocket._originalSecure && !isSecure)) { + // + // Match curl 7.77.0 behavior and drop the following headers. These + // headers are also dropped when following a redirect to a subdomain. + // + delete opts.headers.authorization; + delete opts.headers.cookie; + + if (!isSameHost) delete opts.headers.host; + + opts.auth = undefined; + } + } + + // + // Match curl 7.77.0 behavior and make the first `Authorization` header win. + // If the `Authorization` header is set, then there is nothing to do as it + // will take precedence. + // + if (opts.auth && !options.headers.authorization) { + options.headers.authorization = + 'Basic ' + Buffer.from(opts.auth).toString('base64'); + } + + req = websocket._req = request(opts); + + if (websocket._redirects) { + // + // Unlike what is done for the `'upgrade'` event, no early exit is + // triggered here if the user calls `websocket.close()` or + // `websocket.terminate()` from a listener of the `'redirect'` event. This + // is because the user can also call `request.destroy()` with an error + // before calling `websocket.close()` or `websocket.terminate()` and this + // would result in an error being emitted on the `request` object with no + // `'error'` event listeners attached. + // + websocket.emit('redirect', websocket.url, req); + } + } else { + req = websocket._req = request(opts); + } + + if (opts.timeout) { + req.on('timeout', () => { + abortHandshake(websocket, req, 'Opening handshake has timed out'); + }); + } + + req.on('error', (err) => { + if (req === null || req[kAborted]) return; + + req = websocket._req = null; + emitErrorAndClose(websocket, err); + }); + + req.on('response', (res) => { + const location = res.headers.location; + const statusCode = res.statusCode; + + if ( + location && + opts.followRedirects && + statusCode >= 300 && + statusCode < 400 + ) { + if (++websocket._redirects > opts.maxRedirects) { + abortHandshake(websocket, req, 'Maximum redirects exceeded'); + return; + } + + req.abort(); + + let addr; + + try { + addr = new URL(location, address); + } catch (e) { + const err = new SyntaxError(`Invalid URL: ${location}`); + emitErrorAndClose(websocket, err); + return; + } + + initAsClient(websocket, addr, protocols, options); + } else if (!websocket.emit('unexpected-response', req, res)) { + abortHandshake( + websocket, + req, + `Unexpected server response: ${res.statusCode}` + ); + } + }); + + req.on('upgrade', (res, socket, head) => { + websocket.emit('upgrade', res); + + // + // The user may have closed the connection from a listener of the + // `'upgrade'` event. + // + if (websocket.readyState !== WebSocket.CONNECTING) return; + + req = websocket._req = null; + + const upgrade = res.headers.upgrade; + + if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') { + abortHandshake(websocket, socket, 'Invalid Upgrade header'); + return; + } + + const digest = createHash('sha1') + .update(key + GUID) + .digest('base64'); + + if (res.headers['sec-websocket-accept'] !== digest) { + abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header'); + return; + } + + const serverProt = res.headers['sec-websocket-protocol']; + let protError; + + if (serverProt !== undefined) { + if (!protocolSet.size) { + protError = 'Server sent a subprotocol but none was requested'; + } else if (!protocolSet.has(serverProt)) { + protError = 'Server sent an invalid subprotocol'; + } + } else if (protocolSet.size) { + protError = 'Server sent no subprotocol'; + } + + if (protError) { + abortHandshake(websocket, socket, protError); + return; + } + + if (serverProt) websocket._protocol = serverProt; + + const secWebSocketExtensions = res.headers['sec-websocket-extensions']; + + if (secWebSocketExtensions !== undefined) { + if (!perMessageDeflate) { + const message = + 'Server sent a Sec-WebSocket-Extensions header but no extension ' + + 'was requested'; + abortHandshake(websocket, socket, message); + return; + } + + let extensions; + + try { + extensions = parse(secWebSocketExtensions); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Extensions header'; + abortHandshake(websocket, socket, message); + return; + } + + const extensionNames = Object.keys(extensions); + + if ( + extensionNames.length !== 1 || + extensionNames[0] !== PerMessageDeflate.extensionName + ) { + const message = 'Server indicated an extension that was not requested'; + abortHandshake(websocket, socket, message); + return; + } + + try { + perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Extensions header'; + abortHandshake(websocket, socket, message); + return; + } + + websocket._extensions[PerMessageDeflate.extensionName] = + perMessageDeflate; + } + + websocket.setSocket(socket, head, { + allowSynchronousEvents: opts.allowSynchronousEvents, + generateMask: opts.generateMask, + maxPayload: opts.maxPayload, + skipUTF8Validation: opts.skipUTF8Validation + }); + }); + + if (opts.finishRequest) { + opts.finishRequest(req, websocket); + } else { + req.end(); + } +} + +/** + * Emit the `'error'` and `'close'` events. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {Error} The error to emit + * @private + */ +function emitErrorAndClose(websocket, err) { + websocket._readyState = WebSocket.CLOSING; + // + // The following assignment is practically useless and is done only for + // consistency. + // + websocket._errorEmitted = true; + websocket.emit('error', err); + websocket.emitClose(); +} + +/** + * Create a `net.Socket` and initiate a connection. + * + * @param {Object} options Connection options + * @return {net.Socket} The newly created socket used to start the connection + * @private + */ +function netConnect(options) { + options.path = options.socketPath; + return net.connect(options); +} + +/** + * Create a `tls.TLSSocket` and initiate a connection. + * + * @param {Object} options Connection options + * @return {tls.TLSSocket} The newly created socket used to start the connection + * @private + */ +function tlsConnect(options) { + options.path = undefined; + + if (!options.servername && options.servername !== '') { + options.servername = net.isIP(options.host) ? '' : options.host; + } + + return tls.connect(options); +} + +/** + * Abort the handshake and emit an error. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to + * abort or the socket to destroy + * @param {String} message The error message + * @private + */ +function abortHandshake(websocket, stream, message) { + websocket._readyState = WebSocket.CLOSING; + + const err = new Error(message); + Error.captureStackTrace(err, abortHandshake); + + if (stream.setHeader) { + stream[kAborted] = true; + stream.abort(); + + if (stream.socket && !stream.socket.destroyed) { + // + // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if + // called after the request completed. See + // https://github.com/websockets/ws/issues/1869. + // + stream.socket.destroy(); + } + + process.nextTick(emitErrorAndClose, websocket, err); + } else { + stream.destroy(err); + stream.once('error', websocket.emit.bind(websocket, 'error')); + stream.once('close', websocket.emitClose.bind(websocket)); + } +} + +/** + * Handle cases where the `ping()`, `pong()`, or `send()` methods are called + * when the `readyState` attribute is `CLOSING` or `CLOSED`. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {*} [data] The data to send + * @param {Function} [cb] Callback + * @private + */ +function sendAfterClose(websocket, data, cb) { + if (data) { + const length = isBlob(data) ? data.size : toBuffer(data).length; + + // + // The `_bufferedAmount` property is used only when the peer is a client and + // the opening handshake fails. Under these circumstances, in fact, the + // `setSocket()` method is not called, so the `_socket` and `_sender` + // properties are set to `null`. + // + if (websocket._socket) websocket._sender._bufferedBytes += length; + else websocket._bufferedAmount += length; + } + + if (cb) { + const err = new Error( + `WebSocket is not open: readyState ${websocket.readyState} ` + + `(${readyStates[websocket.readyState]})` + ); + process.nextTick(cb, err); + } +} + +/** + * The listener of the `Receiver` `'conclude'` event. + * + * @param {Number} code The status code + * @param {Buffer} reason The reason for closing + * @private + */ +function receiverOnConclude(code, reason) { + const websocket = this[kWebSocket]; + + websocket._closeFrameReceived = true; + websocket._closeMessage = reason; + websocket._closeCode = code; + + if (websocket._socket[kWebSocket] === undefined) return; + + websocket._socket.removeListener('data', socketOnData); + process.nextTick(resume, websocket._socket); + + if (code === 1005) websocket.close(); + else websocket.close(code, reason); +} + +/** + * The listener of the `Receiver` `'drain'` event. + * + * @private + */ +function receiverOnDrain() { + const websocket = this[kWebSocket]; + + if (!websocket.isPaused) websocket._socket.resume(); +} + +/** + * The listener of the `Receiver` `'error'` event. + * + * @param {(RangeError|Error)} err The emitted error + * @private + */ +function receiverOnError(err) { + const websocket = this[kWebSocket]; + + if (websocket._socket[kWebSocket] !== undefined) { + websocket._socket.removeListener('data', socketOnData); + + // + // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See + // https://github.com/websockets/ws/issues/1940. + // + process.nextTick(resume, websocket._socket); + + websocket.close(err[kStatusCode]); + } + + if (!websocket._errorEmitted) { + websocket._errorEmitted = true; + websocket.emit('error', err); + } +} + +/** + * The listener of the `Receiver` `'finish'` event. + * + * @private + */ +function receiverOnFinish() { + this[kWebSocket].emitClose(); +} + +/** + * The listener of the `Receiver` `'message'` event. + * + * @param {Buffer|ArrayBuffer|Buffer[])} data The message + * @param {Boolean} isBinary Specifies whether the message is binary or not + * @private + */ +function receiverOnMessage(data, isBinary) { + this[kWebSocket].emit('message', data, isBinary); +} + +/** + * The listener of the `Receiver` `'ping'` event. + * + * @param {Buffer} data The data included in the ping frame + * @private + */ +function receiverOnPing(data) { + const websocket = this[kWebSocket]; + + if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP); + websocket.emit('ping', data); +} + +/** + * The listener of the `Receiver` `'pong'` event. + * + * @param {Buffer} data The data included in the pong frame + * @private + */ +function receiverOnPong(data) { + this[kWebSocket].emit('pong', data); +} + +/** + * Resume a readable stream + * + * @param {Readable} stream The readable stream + * @private + */ +function resume(stream) { + stream.resume(); +} + +/** + * The `Sender` error event handler. + * + * @param {Error} The error + * @private + */ +function senderOnError(err) { + const websocket = this[kWebSocket]; + + if (websocket.readyState === WebSocket.CLOSED) return; + if (websocket.readyState === WebSocket.OPEN) { + websocket._readyState = WebSocket.CLOSING; + setCloseTimer(websocket); + } + + // + // `socket.end()` is used instead of `socket.destroy()` to allow the other + // peer to finish sending queued data. There is no need to set a timer here + // because `CLOSING` means that it is already set or not needed. + // + this._socket.end(); + + if (!websocket._errorEmitted) { + websocket._errorEmitted = true; + websocket.emit('error', err); + } +} + +/** + * Set a timer to destroy the underlying raw socket of a WebSocket. + * + * @param {WebSocket} websocket The WebSocket instance + * @private + */ +function setCloseTimer(websocket) { + websocket._closeTimer = setTimeout( + websocket._socket.destroy.bind(websocket._socket), + closeTimeout + ); +} + +/** + * The listener of the socket `'close'` event. + * + * @private + */ +function socketOnClose() { + const websocket = this[kWebSocket]; + + this.removeListener('close', socketOnClose); + this.removeListener('data', socketOnData); + this.removeListener('end', socketOnEnd); + + websocket._readyState = WebSocket.CLOSING; + + let chunk; + + // + // The close frame might not have been received or the `'end'` event emitted, + // for example, if the socket was destroyed due to an error. Ensure that the + // `receiver` stream is closed after writing any remaining buffered data to + // it. If the readable side of the socket is in flowing mode then there is no + // buffered data as everything has been already written and `readable.read()` + // will return `null`. If instead, the socket is paused, any possible buffered + // data will be read as a single chunk. + // + if ( + !this._readableState.endEmitted && + !websocket._closeFrameReceived && + !websocket._receiver._writableState.errorEmitted && + (chunk = websocket._socket.read()) !== null + ) { + websocket._receiver.write(chunk); + } + + websocket._receiver.end(); + + this[kWebSocket] = undefined; + + clearTimeout(websocket._closeTimer); + + if ( + websocket._receiver._writableState.finished || + websocket._receiver._writableState.errorEmitted + ) { + websocket.emitClose(); + } else { + websocket._receiver.on('error', receiverOnFinish); + websocket._receiver.on('finish', receiverOnFinish); + } +} + +/** + * The listener of the socket `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function socketOnData(chunk) { + if (!this[kWebSocket]._receiver.write(chunk)) { + this.pause(); + } +} + +/** + * The listener of the socket `'end'` event. + * + * @private + */ +function socketOnEnd() { + const websocket = this[kWebSocket]; + + websocket._readyState = WebSocket.CLOSING; + websocket._receiver.end(); + this.end(); +} + +/** + * The listener of the socket `'error'` event. + * + * @private + */ +function socketOnError() { + const websocket = this[kWebSocket]; + + this.removeListener('error', socketOnError); + this.on('error', NOOP); + + if (websocket) { + websocket._readyState = WebSocket.CLOSING; + this.destroy(); + } +} diff --git a/server/node_modules/ws/package.json b/server/node_modules/ws/package.json new file mode 100644 index 0000000..2004b1c --- /dev/null +++ b/server/node_modules/ws/package.json @@ -0,0 +1,69 @@ +{ + "name": "ws", + "version": "8.18.3", + "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js", + "keywords": [ + "HyBi", + "Push", + "RFC-6455", + "WebSocket", + "WebSockets", + "real-time" + ], + "homepage": "https://github.com/websockets/ws", + "bugs": "https://github.com/websockets/ws/issues", + "repository": { + "type": "git", + "url": "git+https://github.com/websockets/ws.git" + }, + "author": "Einar Otto Stangvik (http://2x.io)", + "license": "MIT", + "main": "index.js", + "exports": { + ".": { + "browser": "./browser.js", + "import": "./wrapper.mjs", + "require": "./index.js" + }, + "./package.json": "./package.json" + }, + "browser": "browser.js", + "engines": { + "node": ">=10.0.0" + }, + "files": [ + "browser.js", + "index.js", + "lib/*.js", + "wrapper.mjs" + ], + "scripts": { + "test": "nyc --reporter=lcov --reporter=text mocha --throw-deprecation test/*.test.js", + "integration": "mocha --throw-deprecation test/*.integration.js", + "lint": "eslint . && prettier --check --ignore-path .gitignore \"**/*.{json,md,yaml,yml}\"" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + }, + "devDependencies": { + "benchmark": "^2.1.4", + "bufferutil": "^4.0.1", + "eslint": "^9.0.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.0.0", + "globals": "^16.0.0", + "mocha": "^8.4.0", + "nyc": "^15.0.0", + "prettier": "^3.0.0", + "utf-8-validate": "^6.0.0" + } +} diff --git a/server/node_modules/ws/wrapper.mjs b/server/node_modules/ws/wrapper.mjs new file mode 100644 index 0000000..7245ad1 --- /dev/null +++ b/server/node_modules/ws/wrapper.mjs @@ -0,0 +1,8 @@ +import createWebSocketStream from './lib/stream.js'; +import Receiver from './lib/receiver.js'; +import Sender from './lib/sender.js'; +import WebSocket from './lib/websocket.js'; +import WebSocketServer from './lib/websocket-server.js'; + +export { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer }; +export default WebSocket; diff --git a/server/package-lock.json b/server/package-lock.json new file mode 100644 index 0000000..6074914 --- /dev/null +++ b/server/package-lock.json @@ -0,0 +1,36 @@ +{ + "name": "pokeplaza-server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pokeplaza-server", + "version": "1.0.0", + "dependencies": { + "ws": "^8.16.0" + } + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/server/package.json b/server/package.json new file mode 100644 index 0000000..5781a4a --- /dev/null +++ b/server/package.json @@ -0,0 +1,12 @@ +{ + "name": "pokeplaza-server", + "version": "1.0.0", + "description": "PokePlaza WebSocket Game Server", + "main": "index.js", + "scripts": { + "start": "node index.js" + }, + "dependencies": { + "ws": "^8.16.0" + } +} \ No newline at end of file