From 736300d505d72d1302392df2f474624c4087e440 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Fri, 8 Dec 2023 13:43:37 -0500 Subject: [PATCH 01/36] keybinds for opening bag/belt & context logic for opening storage window (#22238) * keybinds for opening bag/belt & context logic for opening storage window * no error por favor --- Content.Client/Input/ContentContexts.cs | 2 + .../Options/UI/Tabs/KeyRebindTab.xaml.cs | 2 + .../Storage/StorageBoundUserInterface.cs | 21 +++++---- .../Storage/Systems/StorageSystem.cs | 32 +++++++++++--- .../Storage/Controls/StorageContainer.cs | 12 ++++- .../Storage/EntitySystems/StorageSystem.cs | 44 +++++++++++++++++-- Content.Shared/Input/ContentKeyFunctions.cs | 2 + .../EntitySystems/SharedStorageSystem.cs | 8 ++-- Content.Shared/Storage/StorageComponent.cs | 9 ++++ .../en-US/escape-menu/ui/options-menu.ftl | 2 + Resources/keybinds.yml | 7 +++ 11 files changed, 117 insertions(+), 24 deletions(-) diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index 82388cb75b3..03f4f3f38b7 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -65,6 +65,8 @@ public static void SetupContexts(IInputContextContainer contexts) human.AddFunction(ContentKeyFunctions.OpenInventoryMenu); human.AddFunction(ContentKeyFunctions.SmartEquipBackpack); human.AddFunction(ContentKeyFunctions.SmartEquipBelt); + human.AddFunction(ContentKeyFunctions.OpenBackpack); + human.AddFunction(ContentKeyFunctions.OpenBelt); human.AddFunction(ContentKeyFunctions.MouseMiddle); human.AddFunction(ContentKeyFunctions.ArcadeUp); human.AddFunction(ContentKeyFunctions.ArcadeDown); diff --git a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs index 18872d16b5e..d8ca500486d 100644 --- a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs @@ -188,6 +188,8 @@ void AddCheckBox(string checkBoxName, bool currentState, Action(); } - protected override void Open() - { - base.Open(); - - if (_entManager.TryGetComponent(Owner, out var comp)) - _storage.OpenStorageUI(Owner, comp); - } - protected override void Dispose(bool disposing) { base.Dispose(disposing); if (!disposing) return; - _storage.CloseStorageUI(Owner); + _storage.CloseStorageWindow(Owner); + } + + protected override void ReceiveMessage(BoundUserInterfaceMessage message) + { + base.ReceiveMessage(message); + + if (message is StorageModifyWindowMessage) + { + if (_entManager.TryGetComponent(Owner, out var comp)) + _storage.OpenStorageWindow((Owner, comp)); + } } } diff --git a/Content.Client/Storage/Systems/StorageSystem.cs b/Content.Client/Storage/Systems/StorageSystem.cs index 56d0810dd5b..ce0a6bf1ca4 100644 --- a/Content.Client/Storage/Systems/StorageSystem.cs +++ b/Content.Client/Storage/Systems/StorageSystem.cs @@ -35,18 +35,38 @@ public override void UpdateUI(Entity entity) StorageUpdated?.Invoke((entity, entity.Comp)); } - public void OpenStorageUI(EntityUid uid, StorageComponent component) + public void OpenStorageWindow(Entity entity) { - if (_openStorages.Contains((uid, component))) + if (_openStorages.Contains(entity)) + { + if (_openStorages.LastOrDefault() == entity) + { + CloseStorageWindow((entity, entity.Comp)); + } + else + { + var storages = new ValueList>(_openStorages); + var reverseStorages = storages.Reverse(); + + foreach (var storageEnt in reverseStorages) + { + if (storageEnt == entity) + break; + + CloseStorageBoundUserInterface(storageEnt.Owner); + _openStorages.Remove(entity); + } + } return; + } - ClearNonParentStorages(uid); - _openStorages.Add((uid, component)); + ClearNonParentStorages(entity); + _openStorages.Add(entity); Entity? last = _openStorages.LastOrDefault(); StorageOrderChanged?.Invoke(last); } - public void CloseStorageUI(Entity entity) + public void CloseStorageWindow(Entity entity) { if (!Resolve(entity, ref entity.Comp)) return; @@ -99,7 +119,7 @@ private void CloseStorageBoundUserInterface(Entity enti private void OnShutdown(Entity ent, ref ComponentShutdown args) { - CloseStorageUI((ent, ent.Comp)); + CloseStorageWindow((ent, ent.Comp)); } /// diff --git a/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs b/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs index d79edb2e798..bc35c29cf50 100644 --- a/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs +++ b/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs @@ -12,7 +12,6 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.Timing; -using Robust.Shared.Utility; namespace Content.Client.UserInterface.Systems.Storage.Controls; @@ -156,6 +155,15 @@ private void BuildGridRepresentation() { Close(); }; + exitButton.OnKeyBindDown += args => + { + // it just makes sense... + if (!args.Handled && args.Function == ContentKeyFunctions.ActivateItemInWorld) + { + Close(); + args.Handle(); + } + }; var exitContainer = new BoxContainer { Children = @@ -448,6 +456,6 @@ public override void Close() if (StorageEntity == null) return; - _entity.System().CloseStorageUI(StorageEntity.Value); + _entity.System().CloseStorageWindow(StorageEntity.Value); } } diff --git a/Content.Server/Storage/EntitySystems/StorageSystem.cs b/Content.Server/Storage/EntitySystems/StorageSystem.cs index 2afd57ca1f6..3223cbf60c2 100644 --- a/Content.Server/Storage/EntitySystems/StorageSystem.cs +++ b/Content.Server/Storage/EntitySystems/StorageSystem.cs @@ -3,6 +3,8 @@ using Content.Shared.Explosion; using Content.Shared.Ghost; using Content.Shared.Hands; +using Content.Shared.Input; +using Content.Shared.Inventory; using Content.Shared.Lock; using Content.Shared.Storage; using Content.Shared.Storage.Components; @@ -10,6 +12,7 @@ using Content.Shared.Timing; using Content.Shared.Verbs; using Robust.Server.GameObjects; +using Robust.Shared.Input.Binding; using Robust.Shared.Map; using Robust.Shared.Player; using Robust.Shared.Prototypes; @@ -21,6 +24,7 @@ public sealed partial class StorageSystem : SharedStorageSystem { [Dependency] private readonly IAdminManager _admin = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; public override void Initialize() @@ -31,6 +35,11 @@ public override void Initialize() SubscribeLocalEvent(OnExploded); SubscribeLocalEvent(OnStorageFillMapInit); + + CommandBinds.Builder + .Bind(ContentKeyFunctions.OpenBackpack, InputCmdHandler.FromDelegate(HandleOpenBackpack)) + .Bind(ContentKeyFunctions.OpenBelt, InputCmdHandler.FromDelegate(HandleOpenBelt)) + .Register(); } private void AddUiVerb(EntityUid uid, StorageComponent component, GetVerbsEvent args) @@ -110,7 +119,7 @@ private void OnExploded(Entity ent, ref BeforeExplodeEvent arg /// The entity to open the UI for public override void OpenStorageUI(EntityUid uid, EntityUid entity, StorageComponent? storageComp = null, bool silent = false) { - if (!Resolve(uid, ref storageComp) || !TryComp(entity, out ActorComponent? player)) + if (!Resolve(uid, ref storageComp, false) || !TryComp(entity, out ActorComponent? player)) return; // prevent spamming bag open / honkerton honk sound @@ -125,8 +134,10 @@ public override void OpenStorageUI(EntityUid uid, EntityUid entity, StorageCompo Log.Debug($"Storage (UID {uid}) \"used\" by player session (UID {player.PlayerSession.AttachedEntity})."); var bui = _uiSystem.GetUiOrNull(uid, StorageComponent.StorageUiKey.Key); - if (bui != null) - _uiSystem.OpenUi(bui, player.PlayerSession); + if (bui == null) + return; + _uiSystem.OpenUi(bui, player.PlayerSession); + _uiSystem.SendUiMessage(bui, new StorageModifyWindowMessage()); } /// @@ -162,4 +173,31 @@ public void CloseNestedInterfaces(EntityUid uid, ICommonSession session, Storage } } } + + private void HandleOpenBackpack(ICommonSession? session) + { + HandleOpenSlotUI(session, "back"); + } + + private void HandleOpenBelt(ICommonSession? session) + { + HandleOpenSlotUI(session, "belt"); + } + + private void HandleOpenSlotUI(ICommonSession? session, string slot) + { + if (session is not { } playerSession) + return; + + if (playerSession.AttachedEntity is not {Valid: true} playerEnt || !Exists(playerEnt)) + return; + + if (!_inventory.TryGetSlotEntity(playerEnt, slot, out var storageEnt)) + return; + + if (!ActionBlocker.CanInteract(playerEnt, storageEnt)) + return; + + OpenStorageUI(storageEnt.Value, playerEnt); + } } diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index 7a5a6e82d82..ee4a4e9023b 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -30,6 +30,8 @@ public static class ContentKeyFunctions public static readonly BoundKeyFunction OpenInventoryMenu = "OpenInventoryMenu"; public static readonly BoundKeyFunction SmartEquipBackpack = "SmartEquipBackpack"; public static readonly BoundKeyFunction SmartEquipBelt = "SmartEquipBelt"; + public static readonly BoundKeyFunction OpenBackpack = "OpenBackpack"; + public static readonly BoundKeyFunction OpenBelt = "OpenBelt"; public static readonly BoundKeyFunction OpenAHelp = "OpenAHelp"; public static readonly BoundKeyFunction SwapHands = "SwapHands"; public static readonly BoundKeyFunction MoveStoredItem = "MoveStoredItem"; diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index 32ce24a9715..0b93b9b7629 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -37,7 +37,7 @@ public abstract class SharedStorageSystem : EntitySystem [Dependency] protected readonly SharedItemSystem ItemSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedHandsSystem _sharedHandsSystem = default!; - [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!; + [Dependency] protected readonly ActionBlockerSystem ActionBlocker = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] protected readonly SharedAudioSystem Audio = default!; [Dependency] private readonly SharedCombatModeSystem _combatMode = default!; @@ -334,7 +334,7 @@ private void OnInteractWithItem(StorageInteractWithItemEvent msg, EntitySessionE return; } - if (!_actionBlockerSystem.CanInteract(player, entity) || !storageComp.Container.Contains(entity)) + if (!ActionBlocker.CanInteract(player, entity) || !storageComp.Container.Contains(entity)) return; // Does the player have hands? @@ -377,7 +377,7 @@ private void OnSetItemLocation(StorageSetItemLocationEvent msg, EntitySessionEve return; } - if (!_actionBlockerSystem.CanInteract(player, itemEnt)) + if (!ActionBlocker.CanInteract(player, itemEnt)) return; TrySetItemStorageLocation((itemEnt, null), (storageEnt, storageComp), msg.Location); @@ -404,7 +404,7 @@ private void OnInsertItemIntoLocation(StorageInsertItemIntoLocationEvent msg, En return; } - if (!_actionBlockerSystem.CanInteract(player, itemEnt) || !_sharedHandsSystem.IsHolding(player, itemEnt, out _)) + if (!ActionBlocker.CanInteract(player, itemEnt) || !_sharedHandsSystem.IsHolding(player, itemEnt, out _)) return; InsertAt((storageEnt, storageComp), (itemEnt, null), msg.Location, out _, player, stackAutomatically: false); diff --git a/Content.Shared/Storage/StorageComponent.cs b/Content.Shared/Storage/StorageComponent.cs index 99677cc6c17..f150a3e8fb5 100644 --- a/Content.Shared/Storage/StorageComponent.cs +++ b/Content.Shared/Storage/StorageComponent.cs @@ -170,6 +170,15 @@ public AnimateInsertingEntitiesEvent(NetEntity storage, List storedEn } } + /// + /// An extra BUI message that either opens, closes, or focuses the storage window based on context. + /// + [Serializable, NetSerializable] + public sealed class StorageModifyWindowMessage : BoundUserInterfaceMessage + { + + } + [NetSerializable] [Serializable] public enum StorageVisuals : byte diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index 535e52d295d..bcfa5a16a41 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -118,6 +118,8 @@ ui-options-static-storage-ui = Static storage UI ui-options-function-smart-equip-backpack = Smart-equip to backpack ui-options-function-smart-equip-belt = Smart-equip to belt +ui-options-function-open-backpack = Open backpack +ui-options-function-open-belt = Open belt ui-options-function-throw-item-in-hand = Throw item ui-options-function-try-pull-object = Pull object ui-options-function-move-pulled-object = Move pulled object diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index 28bbb9f3d0c..897506623c6 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -244,6 +244,13 @@ binds: type: State key: E mod1: Shift +- function: OpenBackpack + type: State + key: V +- function: OpenBelt + type: State + key: V + mod1: Shift - function: ShowDebugConsole type: State key: Tilde From 8112f84c3303601f01cfc493c2447f6dc682cb38 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Fri, 8 Dec 2023 13:43:57 -0500 Subject: [PATCH 02/36] Mark the last item stored in storage for smart-equip (#22236) * mark the last item stored in grid inventory * shift --- .../Systems/Storage/Controls/ItemGridPiece.cs | 19 ++++++++++++++++++ .../Storage/Controls/StorageContainer.cs | 2 ++ .../Systems/Storage/StorageUIController.cs | 4 ++-- .../Interface/Default/Storage/marked.png | Bin 0 -> 134 bytes 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 Resources/Textures/Interface/Default/Storage/marked.png diff --git a/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs b/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs index ece668c9454..a7298213e86 100644 --- a/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs +++ b/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs @@ -6,6 +6,7 @@ using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.CustomControls; +using YamlDotNet.Core; namespace Content.Client.UserInterface.Systems.Storage.Controls; @@ -18,6 +19,7 @@ public sealed class ItemGridPiece : Control public readonly EntityUid Entity; public ItemStorageLocation Location; + public bool Marked = false; public event Action? OnPiecePressed; public event Action? OnPieceUnpressed; @@ -41,6 +43,8 @@ public sealed class ItemGridPiece : Control private Texture? _bottomLeftTexture; private readonly string _bottomRightTexturePath = "Storage/piece_bottomRight"; private Texture? _bottomRightTexture; + private readonly string _markedTexturePath = "Storage/marked"; + private Texture? _markedTexture; #endregion public ItemGridPiece(Entity entity, ItemStorageLocation location, IEntityManager entityManager) @@ -85,6 +89,7 @@ protected override void OnThemeUpdated() _topRightTexture = Theme.ResolveTextureOrNull(_topRightTexturePath)?.Texture; _bottomLeftTexture = Theme.ResolveTextureOrNull(_bottomLeftTexturePath)?.Texture; _bottomRightTexture = Theme.ResolveTextureOrNull(_bottomRightTexturePath)?.Texture; + _markedTexture = Theme.ResolveTextureOrNull(_markedTexturePath)?.Texture; } protected override void Draw(DrawingHandleScreen handle) @@ -109,6 +114,9 @@ protected override void Draw(DrawingHandleScreen handle) //yeah, this coloring is kinda hardcoded. deal with it. B) Color? colorModulate = hovering ? null : Color.FromHex("#a8a8a8"); + var marked = Marked; + Vector2i? maybeMarkedPos = null; + _texturesPositions.Clear(); for (var y = boundingGrid.Bottom; y <= boundingGrid.Top; y++) { @@ -129,6 +137,12 @@ protected override void Draw(DrawingHandleScreen handle) { _texturesPositions.Add((nwTexture, Position + offset / UIScale)); handle.DrawTextureRect(nwTexture, new UIBox2(topLeft, topLeft + size), colorModulate); + + if (marked && nwTexture == _topLeftTexture) + { + maybeMarkedPos = topLeft; + marked = false; + } } if (GetTexture(adjustedShape, new Vector2i(x, y), Direction.SouthEast) is {} seTexture) { @@ -175,6 +189,11 @@ protected override void Draw(DrawingHandleScreen handle) eyeRotation: iconRotation, overrideDirection: Direction.South); } + + if (maybeMarkedPos is {} markedPos && _markedTexture != null) + { + handle.DrawTextureRect(_markedTexture, new UIBox2(markedPos, markedPos + size)); + } } protected override bool HasPoint(Vector2 point) diff --git a/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs b/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs index bc35c29cf50..f40a20f2d29 100644 --- a/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs +++ b/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs @@ -249,6 +249,7 @@ public void BuildItemPieces() var boundingGrid = storageComp.Grid.GetBoundingBox(); var size = _emptyTexture!.Size * 2; + var lastEntity = storageComp.Container.ContainedEntities.LastOrDefault(); //todo. at some point, we may want to only rebuild the pieces that have actually received new data. @@ -278,6 +279,7 @@ public void BuildItemPieces() var gridPiece = new ItemGridPiece((itemEnt, itemEntComponent), item.Value, _entity) { MinSize = size, + Marked = itemEnt == lastEntity }; gridPiece.OnPiecePressed += OnPiecePressed; gridPiece.OnPieceUnpressed += OnPieceUnpressed; diff --git a/Content.Client/UserInterface/Systems/Storage/StorageUIController.cs b/Content.Client/UserInterface/Systems/Storage/StorageUIController.cs index a08dae1dd7b..85631f1aa82 100644 --- a/Content.Client/UserInterface/Systems/Storage/StorageUIController.cs +++ b/Content.Client/UserInterface/Systems/Storage/StorageUIController.cs @@ -75,11 +75,11 @@ private void OnStorageOrderChanged(Entity? nullEnt) if (_container == null) return; - _container.UpdateContainer(nullEnt); - if (IsDragging) _menuDragHelper.EndDrag(); + _container.UpdateContainer(nullEnt); + if (nullEnt is not null) { // center it if we knock it off screen somehow. diff --git a/Resources/Textures/Interface/Default/Storage/marked.png b/Resources/Textures/Interface/Default/Storage/marked.png new file mode 100644 index 0000000000000000000000000000000000000000..2739b7e248d1ffab94c4c5f070e6b335bdd3bfe2 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|96VhdLnNjq zCn$)n(G>XCAO7jL?92Zrx*`f*Hg#@1z_O>B=;eP7n8>vS`nXPWNk6={K~mi4 gq3&ZTww64G4@qVhC6{uo1DeI)>FVdQ&MBb@04bj>Bme*a literal 0 HcmV?d00001 From c4092234693b875374113c08c75592a6991dcd5c Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 8 Dec 2023 13:45:06 -0500 Subject: [PATCH 03/36] Automatic changelog update --- Resources/Changelog/Changelog.yml | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3cf2ed3ebf2..d9da36a6785 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,15 +1,4 @@ Entries: -- author: deltanedas - changes: - - {message: Monkeys can now bump doors open and strip mobs like people can., type: Tweak} - id: 4789 - time: '2023-09-10T02:51:51.0000000+00:00' -- author: deltanedas - changes: - - {message: 'Ian/Old Ian/Lisa yield corgi hide when butchered, which can be worn - as a hat or crafted into an ian suit.', type: Add} - id: 4790 - time: '2023-09-10T03:04:33.0000000+00:00' - author: Flareguy changes: - {message: Added cobweb decorations for mappers to utilize., type: Add} @@ -2897,3 +2886,17 @@ Entries: - {message: Chemical explosions are powerful again., type: Tweak} id: 5288 time: '2023-12-08T10:58:25.0000000+00:00' +- author: EmoGarbage404 + changes: + - {message: 'V and shift-V can now be used to open the bag and belt, respectively.', + type: Add} + - {message: Interacting with a storage item now has context-sensitive logic based + on whether or not the window is open or focused., type: Fix} + id: 5289 + time: '2023-12-08T18:43:37.0000000+00:00' +- author: EmoGarbage404 + changes: + - {message: 'When viewing a storage container, the item that will be removed via + smart-equip is now marked with a small star icon.', type: Add} + id: 5290 + time: '2023-12-08T18:43:58.0000000+00:00' From 8fa47b87fb7f27983c1e73e6c6975d5873c0505f Mon Sep 17 00:00:00 2001 From: Whisper <121047731+QuietlyWhisper@users.noreply.github.com> Date: Fri, 8 Dec 2023 13:46:28 -0500 Subject: [PATCH 04/36] Rat king fixes + buffs (#22247) * fix minor typo * add doafter range * increase miasma release --- Content.Shared/RatKing/RatKingComponent.cs | 2 +- Content.Shared/RatKing/SharedRatKingSystem.cs | 3 ++- Resources/Prototypes/Reagents/gases.yml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Content.Shared/RatKing/RatKingComponent.cs b/Content.Shared/RatKing/RatKingComponent.cs index 43c2858de81..f2b06344c15 100644 --- a/Content.Shared/RatKing/RatKingComponent.cs +++ b/Content.Shared/RatKing/RatKingComponent.cs @@ -49,7 +49,7 @@ public sealed partial class RatKingComponent : Component /// How many moles of Miasma are released after one us of Domain /// [DataField("molesMiasmaPerDomain"), ViewVariables(VVAccess.ReadWrite)] - public float MolesMiasmaPerDomain = 100f; + public float MolesMiasmaPerDomain = 200f; /// /// The current order that the Rat King assigned. diff --git a/Content.Shared/RatKing/SharedRatKingSystem.cs b/Content.Shared/RatKing/SharedRatKingSystem.cs index 5ae01ebb987..d7a8ee5460d 100644 --- a/Content.Shared/RatKing/SharedRatKingSystem.cs +++ b/Content.Shared/RatKing/SharedRatKingSystem.cs @@ -119,7 +119,8 @@ private void OnGetVerb(EntityUid uid, RatKingRummageableComponent component, Get { BlockDuplicate = true, BreakOnDamage = true, - BreakOnUserMove = true + BreakOnUserMove = true, + DistanceThreshold = 2f }); } }); diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml index 50e744a8aca..7f765f6d238 100644 --- a/Resources/Prototypes/Reagents/gases.yml +++ b/Resources/Prototypes/Reagents/gases.yml @@ -240,7 +240,7 @@ scaleByQuantity: true ignoreResistances: true damage: - Groups: + groups: Brute: -5 Burn: -5 From baf522d2876df80445d788ec6b27d3e59af719e0 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 8 Dec 2023 13:47:32 -0500 Subject: [PATCH 05/36] Automatic changelog update --- Resources/Changelog/Changelog.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d9da36a6785..fce755b04ff 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,9 +1,4 @@ Entries: -- author: Flareguy - changes: - - {message: Added cobweb decorations for mappers to utilize., type: Add} - id: 4791 - time: '2023-09-10T03:37:56.0000000+00:00' - author: arimah changes: - {message: Particle Accelerators can now be constructed again, type: Fix} @@ -2900,3 +2895,10 @@ Entries: smart-equip is now marked with a small star icon.', type: Add} id: 5290 time: '2023-12-08T18:43:58.0000000+00:00' +- author: Whisper + changes: + - {message: Rat king and his servants properly heal from miasma., type: Fix} + - {message: Rat king no longer rummages from an infinite distance., type: Fix} + - {message: Rat king generates more miasma to fill larger rooms., type: Tweak} + id: 5291 + time: '2023-12-08T18:46:28.0000000+00:00' From ae1a1b9e074d7f45c1cb8d107492ec5776511dd0 Mon Sep 17 00:00:00 2001 From: Flareguy <78941145+Flareguy@users.noreply.github.com> Date: Fri, 8 Dec 2023 12:49:07 -0600 Subject: [PATCH 06/36] adds lime tiles (#22235) --- Resources/Locale/en-US/tiles/tiles.ftl | 3 ++- .../Entities/Objects/Misc/tiles.yml | 16 ++++++++++++++++ .../Prototypes/Stacks/floor_tile_stacks.yml | 7 +++++++ Resources/Prototypes/Tiles/floors.yml | 18 ++++++++++++++++++ .../Textures/Objects/Tiles/tile.rsi/lime.png | Bin 0 -> 500 bytes .../Textures/Objects/Tiles/tile.rsi/meta.json | 3 +++ Resources/Textures/Tiles/attributions.yml | 2 +- Resources/Textures/Tiles/lime.png | Bin 0 -> 952 bytes 8 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/lime.png create mode 100644 Resources/Textures/Tiles/lime.png diff --git a/Resources/Locale/en-US/tiles/tiles.ftl b/Resources/Locale/en-US/tiles/tiles.ftl index 89a446e6784..6aa2ebc9067 100644 --- a/Resources/Locale/en-US/tiles/tiles.ftl +++ b/Resources/Locale/en-US/tiles/tiles.ftl @@ -48,7 +48,8 @@ tiles-mining-tile = mining tile tiles-mining-dark-tile = dark mining tile tiles-mining-light-tile = light mining tile tiles-freezer = freezer -tiles-showroom-floor = showroom floor +tiles-showroom-floor = showroom +tiles-lime-floor = lime floor tiles-hydro-floor = hydro floor tiles-bar-floor = bar floor tiles-clown-floor = clown floor diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 56185874f42..3a13ac239c4 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -290,6 +290,22 @@ - type: Stack stackType: FloorTileBlue +- type: entity + name: lime tile + parent: FloorTileItemBase + id: FloorTileItemLime + components: + - type: Sprite + state: lime + - type: Item + heldPrefix: steel + - type: FloorTile + outputs: + - Plating + - FloorSteelLime + - type: Stack + stackType: FloorTileLime + - type: entity name: mining tile parent: FloorTileItemBase diff --git a/Resources/Prototypes/Stacks/floor_tile_stacks.yml b/Resources/Prototypes/Stacks/floor_tile_stacks.yml index f66da3f88cc..eb423b0aa54 100644 --- a/Resources/Prototypes/Stacks/floor_tile_stacks.yml +++ b/Resources/Prototypes/Stacks/floor_tile_stacks.yml @@ -96,6 +96,13 @@ maxCount: 30 itemSize: 5 +- type: stack + id: FloorTileLime + name: lime tile + spawn: FloorTileItemLime + maxCount: 30 + itemSize: 5 + - type: stack id: FloorTileDirty name: dirty tile diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml index def0bd1108e..0e150f5bc3f 100644 --- a/Resources/Prototypes/Tiles/floors.yml +++ b/Resources/Prototypes/Tiles/floors.yml @@ -684,6 +684,24 @@ itemDrop: FloorTileItemBlue heatCapacity: 10000 +- type: tile + id: FloorSteelLime + name: tiles-lime-floor + sprite: /Textures/Tiles/lime.png + variants: 4 + placementVariants: + - 1.0 + - 1.0 + - 1.0 + - 1.0 + baseTurf: Plating + isSubfloor: false + canCrowbar: true + footstepSounds: + collection: FootstepFloor + itemDrop: FloorTileItemLime + heatCapacity: 10000 + - type: tile id: FloorMining name: tiles-mining-tile diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/lime.png b/Resources/Textures/Objects/Tiles/tile.rsi/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ad764ade07c07535c09e0f57acf919f1a78551 GIT binary patch literal 500 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T8L`Eh!PFpjmpfj$`tSCo+*8$3TIEKWXHj zoz1+NvCT4>%)f`*F-WssYdcNmv271H=dX6@WmW)!UtJuVd8d2U_q~}DxA)KN^8Com zOD>ELjdfMA>zgOmZZ@+qgdKzM;?o5mu8NWgA&e1IQ2@S5c6K#SRDf1r1K{H@m%Xwy zLTMirSV~j?Rlvm!fC|X28->Cjf_CZ`E8vOrY#BI|YNfkg4Uke21#sK+GeL_UN zkP(bBL}}gfB2%;g1|RZYO7t4qsh9oLioI>OcI78_4U^u1Zpe~A=6DCrP7lqxC<-&W zy}x^S`T0A5!04;#{cyU;=>8*cUDxA21i*angO8{H_b|}`^c^ra^Ax`KuK^0Elrp26 z@zU%;Q~;g+5NJV4z$sAy({hs_3hJvsN;?)+fZhSzf82z3xf_Gv07@y1;Wx6SB4)3M q)|#I*O|ZVPcOZ5JGnvdEfUyrOipc-SBr^Q~00004Tx04UFukv&VpP#A?zTcx6v4myZ9WT@iMLQxP$sbH7t&{nYOlB7v1Bxy)e zq__$$4h09%#jnACpsV1jAP9;e;^YtTYmpL9nnH`{;2UnV0o_lo`!))McYsFSb-#{Ww{Z-F9)Sy^?XNJW=@07lwiY`8 zqMN|kWm}VWf%7e3=)n{%u_=YPf~pFpK~+^%O-xLkm3E<-d83+opp|xwOHGh*@P<5o99Wz>KF+92d@(cDmpOpJgXl< zDc8#t7{`PJH%D+b-&6CJ+Cm|b@_t^&9P<0Wyq$9d_IYmjz`Ld>hlvf#vaC!rXb!EM z+mcHpu4oFRlu~eW2-qlCrd+9PSl3XIzN!N+$A;ieWnKh4q60H84fk^zcOiGJ1UDZ9 z&Jl%FUOI4atWt5FOA;0dOpgxCd=nUL6D-d`aPwHDkv|1D9|SIv#}L7N>cGJ{L^OCg zYLzZLA$EeBLjc4ZnzKS2mO8Ewb>QU~A_>BrBOcbt^#eB_gX=P%GS9E?=Xot}`SAaN aT7LoJPE~zkEmZmd0000 Date: Fri, 8 Dec 2023 11:50:06 -0700 Subject: [PATCH 07/36] give command staff brig access (#22230) * lort * webedit ops * pro * Update research_director.yml --- Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml | 1 + Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml | 1 + .../Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml | 1 + Resources/Prototypes/Roles/Jobs/Science/research_director.yml | 1 + 4 files changed, 4 insertions(+) diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml index 951919edd66..95fdf2b6744 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml @@ -26,6 +26,7 @@ - Quartermaster - Maintenance - Command + - Brig special: - !type:AddImplantSpecial implants: [ MindShieldImplant ] diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml index c539e142bb6..24f96207e7a 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml @@ -28,6 +28,7 @@ - External - ChiefEngineer - Atmospherics + - Brig special: - !type:AddImplantSpecial implants: [ MindShieldImplant ] diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml index 809d7cd24e6..4635bbcc390 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml @@ -29,6 +29,7 @@ - Maintenance - Chemistry - ChiefMedicalOfficer + - Brig special: - !type:AddImplantSpecial implants: [ MindShieldImplant ] diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml index 6060ed4d1a3..15a0dfcedaf 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml @@ -20,6 +20,7 @@ - Command - Maintenance - ResearchDirector + - Brig special: - !type:AddImplantSpecial implants: [ MindShieldImplant ] From e7e7974a24d03e3da788cd55ff4987d278148927 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Fri, 8 Dec 2023 13:50:41 -0500 Subject: [PATCH 08/36] Experimental Anomaly Vessel (#22233) * experimental anomaly vessel * sprote changes --- .../Anomaly/AnomalySystem.Vessel.cs | 9 +---- Content.Server/Anomaly/AnomalySystem.cs | 3 +- .../Components/AnomalyVesselComponent.cs | 17 +-------- .../Systems/RadiationSystem.GridCast.cs | 3 ++ .../Radiation/Systems/RadiationSystem.cs | 9 +++++ .../Components/RadiationSourceComponent.cs | 3 ++ .../Circuitboards/Machine/production.yml | 19 +++++++++- .../Structures/Machines/anomaly_equipment.yml | 34 +++++++++++++---- .../Entities/Structures/Machines/lathe.yml | 1 + .../Prototypes/Recipes/Lathes/electronics.yml | 11 +++++- .../Prototypes/Research/experimental.yml | 1 + .../adv_anomaly_vessel.rsi/anomaly-1.png | Bin 0 -> 273 bytes .../adv_anomaly_vessel.rsi/anomaly-2.png | Bin 0 -> 259 bytes .../adv_anomaly_vessel.rsi/anomaly-3.png | Bin 0 -> 250 bytes .../Anomaly/adv_anomaly_vessel.rsi/base.png | Bin 0 -> 1075 bytes .../Anomaly/adv_anomaly_vessel.rsi/meta.json | 35 ++++++++++++++++++ .../Anomaly/adv_anomaly_vessel.rsi/panel.png | Bin 0 -> 223 bytes .../adv_anomaly_vessel.rsi/powered-1.png | Bin 0 -> 159 bytes .../adv_anomaly_vessel.rsi/powered-2.png | Bin 0 -> 176 bytes .../adv_anomaly_vessel.rsi/powered-3.png | Bin 0 -> 177 bytes 20 files changed, 112 insertions(+), 33 deletions(-) create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-1.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-2.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-3.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/base.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/panel.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-1.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-2.png create mode 100644 Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-3.png diff --git a/Content.Server/Anomaly/AnomalySystem.Vessel.cs b/Content.Server/Anomaly/AnomalySystem.Vessel.cs index 02c435d2425..e1394ec4487 100644 --- a/Content.Server/Anomaly/AnomalySystem.Vessel.cs +++ b/Content.Server/Anomaly/AnomalySystem.Vessel.cs @@ -20,7 +20,6 @@ private void InitializeVessel() { SubscribeLocalEvent(OnVesselShutdown); SubscribeLocalEvent(OnVesselMapInit); - SubscribeLocalEvent(OnRefreshParts); SubscribeLocalEvent(OnUpgradeExamine); SubscribeLocalEvent(OnVesselInteractUsing); SubscribeLocalEvent(OnExamined); @@ -68,12 +67,6 @@ private void OnVesselMapInit(EntityUid uid, AnomalyVesselComponent component, Ma UpdateVesselAppearance(uid, component); } - private void OnRefreshParts(EntityUid uid, AnomalyVesselComponent component, RefreshPartsEvent args) - { - var modifierRating = args.PartRatings[component.MachinePartPointModifier] - 1; - component.PointMultiplier = MathF.Pow(component.PartRatingPointModifier, modifierRating); - } - private void OnUpgradeExamine(EntityUid uid, AnomalyVesselComponent component, UpgradeExamineEvent args) { args.AddPercentageUpgrade("anomaly-vessel-component-upgrade-output", component.PointMultiplier); @@ -93,6 +86,7 @@ private void OnVesselInteractUsing(EntityUid uid, AnomalyVesselComponent compone component.Anomaly = scanner.ScannedAnomaly; anomalyComponent.ConnectedVessel = uid; + _radiation.SetSourceEnabled(uid, true); UpdateVesselAppearance(uid, component); Popup.PopupEntity(Loc.GetString("anomaly-vessel-component-anomaly-assigned"), uid); } @@ -120,6 +114,7 @@ private void OnVesselAnomalyShutdown(ref AnomalyShutdownEvent args) component.Anomaly = null; UpdateVesselAppearance(ent, component); + _radiation.SetSourceEnabled(ent, false); if (!args.Supercritical) continue; diff --git a/Content.Server/Anomaly/AnomalySystem.cs b/Content.Server/Anomaly/AnomalySystem.cs index bb7a7304d9b..c3f19aa1777 100644 --- a/Content.Server/Anomaly/AnomalySystem.cs +++ b/Content.Server/Anomaly/AnomalySystem.cs @@ -3,13 +3,13 @@ using Content.Server.Audio; using Content.Server.Explosion.EntitySystems; using Content.Server.Materials; +using Content.Server.Radiation.Systems; using Content.Server.Radio.EntitySystems; using Content.Server.Station.Systems; using Content.Shared.Anomaly; using Content.Shared.Anomaly.Components; using Content.Shared.DoAfter; using Robust.Server.GameObjects; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Physics.Events; @@ -33,6 +33,7 @@ public sealed partial class AnomalySystem : SharedAnomalySystem [Dependency] private readonly SharedPointLightSystem _pointLight = default!; [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly RadioSystem _radio = default!; + [Dependency] private readonly RadiationSystem _radiation = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!; diff --git a/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs b/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs index 426e1d97d55..74c5e3e9ed2 100644 --- a/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs +++ b/Content.Server/Anomaly/Components/AnomalyVesselComponent.cs @@ -1,8 +1,6 @@ using Content.Shared.Anomaly; -using Content.Shared.Construction.Prototypes; using Robust.Shared.Audio; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Anomaly.Components; @@ -25,22 +23,9 @@ public sealed partial class AnomalyVesselComponent : Component /// /// A multiplier applied to the amount of points generated. /// - [ViewVariables(VVAccess.ReadWrite)] + [DataField, ViewVariables(VVAccess.ReadWrite)] public float PointMultiplier = 1; - /// - /// The machine part that affects the point multiplier of the vessel - /// - [DataField("machinePartPointModifier", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string MachinePartPointModifier = "Capacitor"; - - /// - /// A value used to scale the point multiplier - /// with the corresponding part rating. - /// - [DataField("partRatingPointModifier")] - public float PartRatingPointModifier = 1.25f; - /// /// The maximum time between each beep /// diff --git a/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs b/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs index 1be8f0fb040..b8193c4d2f3 100644 --- a/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs +++ b/Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs @@ -44,6 +44,9 @@ private void UpdateGridcast() var sourcesData = new ValueList<(EntityUid, RadiationSourceComponent, TransformComponent, Vector2)>(); while (sources.MoveNext(out var uid, out var source, out var sourceTrs)) { + if (!source.Enabled) + continue; + var worldPos = _transform.GetWorldPosition(sourceTrs, transformQuery); var data = (uid, source, sourceTrs, worldPos); sourcesData.Add(data); diff --git a/Content.Server/Radiation/Systems/RadiationSystem.cs b/Content.Server/Radiation/Systems/RadiationSystem.cs index 8e774c788df..ffb7ab1a11f 100644 --- a/Content.Server/Radiation/Systems/RadiationSystem.cs +++ b/Content.Server/Radiation/Systems/RadiationSystem.cs @@ -1,4 +1,5 @@ using Content.Server.Radiation.Components; +using Content.Shared.Radiation.Components; using Content.Shared.Radiation.Events; using Robust.Shared.Configuration; using Robust.Shared.Map; @@ -45,6 +46,14 @@ public void IrradiateEntity(EntityUid uid, float radsPerSecond, float time) RaiseLocalEvent(uid, msg); } + public void SetSourceEnabled(Entity entity, bool val) + { + if (!Resolve(entity, ref entity.Comp, false)) + return; + + entity.Comp.Enabled = val; + } + /// /// Marks entity to receive/ignore radiation rays. /// diff --git a/Content.Shared/Radiation/Components/RadiationSourceComponent.cs b/Content.Shared/Radiation/Components/RadiationSourceComponent.cs index 9d2106f9936..fa6b8399352 100644 --- a/Content.Shared/Radiation/Components/RadiationSourceComponent.cs +++ b/Content.Shared/Radiation/Components/RadiationSourceComponent.cs @@ -23,4 +23,7 @@ public sealed partial class RadiationSourceComponent : Component [ViewVariables(VVAccess.ReadWrite)] [DataField("slope")] public float Slope = 0.5f; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public bool Enabled; } diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index 8e7c3aeb274..b47e286bda0 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -228,11 +228,28 @@ - type: MachineBoard prototype: MachineAnomalyVessel requirements: - Capacitor: 5 + Capacitor: 3 materialRequirements: Cable: 1 PlasmaGlass: 10 +- type: entity + parent: BaseMachineCircuitboard + id: AnomalyVesselExperimentalCircuitboard + name: experimental anomaly vessel machine board + description: A machine printed circuit board for an experimental anomaly vessel. + components: + - type: Sprite + state: science + - type: MachineBoard + prototype: MachineAnomalyVesselExperimental + requirements: + Capacitor: 3 + materialRequirements: + Cable: 5 + PlasmaGlass: 15 + MetalRod: 4 + - type: entity parent: BaseMachineCircuitboard id: AnomalySynchronizerCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index dc2b5c66781..3fad77648f3 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -2,7 +2,7 @@ id: MachineAnomalyVessel parent: [ BaseMachinePowered, ConstructibleMachine ] name: anomaly vessel - description: A container able to harness a scan of an anomaly and turn it into research points. + description: A container able to harness a scan of an anomaly and turn it into research data. components: - type: Sprite noRot: true @@ -77,12 +77,6 @@ canCreateVacuum: false - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 300 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - trigger: !type:DamageTrigger damage: 150 @@ -97,6 +91,32 @@ guides: - ScannersAndVessels +- type: entity + id: MachineAnomalyVesselExperimental + parent: MachineAnomalyVessel + name: experimental anomaly vessel + description: An advanced anomaly vessel capable of greater research potential at the cost of increased volatility and low-level radioactive decay into the environment. + components: + - type: Sprite + sprite: Structures/Machines/Anomaly/adv_anomaly_vessel.rsi + offset: 0,0.5 + drawdepth: Mobs + - type: SpriteFade + - type: AnomalyVessel + pointMultiplier: 2 + - type: RadiationSource + intensity: 0.75 + slope: 0.1 + enabled: false + - type: Machine + board: AnomalyVesselExperimentalCircuitboard + - type: Explosive + explosionType: Default + maxIntensity: 50 + intensitySlope: 7.5 + totalIntensity: 500 + canCreateVacuum: true + - type: entity id: MachineAPE parent: [ BaseMachinePowered, ConstructibleMachine ] diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 57de6f9a574..73c094bcb7f 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -370,6 +370,7 @@ - AnalysisComputerCircuitboard - ExosuitFabricatorMachineCircuitboard - AnomalyVesselCircuitboard + - AnomalyVesselExperimentalCircuitboard - AnomalySynchronizerCircuitboard - APECircuitboard - ArtifactAnalyzerMachineCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 88b655644fe..df031864cf1 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -248,6 +248,15 @@ Steel: 100 Glass: 900 +- type: latheRecipe + id: AnomalyVesselExperimentalCircuitboard + result: AnomalyVesselExperimentalCircuitboard + completetime: 4 + materials: + Steel: 100 + Glass: 900 + Gold: 100 + - type: latheRecipe id: AnomalySynchronizerCircuitboard result: AnomalySynchronizerCircuitboard @@ -695,4 +704,4 @@ materials: Steel: 100 Glass: 900 - Gold: 100 + Gold: 100 diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml index 363dee815e3..9eed5e59942 100644 --- a/Resources/Prototypes/Research/experimental.yml +++ b/Resources/Prototypes/Research/experimental.yml @@ -110,6 +110,7 @@ recipeUnlocks: - WeaponPistolCHIMP - AnomalySynchronizerCircuitboard + - AnomalyVesselExperimentalCircuitboard technologyPrerequisites: - BasicAnomalousResearch diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-1.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-1.png new file mode 100644 index 0000000000000000000000000000000000000000..75b33a1d8d29cc15cd8f5368175dff89f11b8327 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2Ij22c978f1 z-(E4~JES1d_RzmxJSWNdlCfo_Fn>T_1N#eKt4a=kCntkU>%=(*zRR0-z4(6S!X5`k z1tlo>RX+O;XY%#!3A&XBWs+Oj z`W37b>bNhRntGzJ;NPq~N6!;lFL^7<&&0g*ulRjo#v=xxQ-0a{Ge3&|eEYICGtgTM Mp00i_>zopr0E^^j-~a#s literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-2.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-2.png new file mode 100644 index 0000000000000000000000000000000000000000..ffa6efd144ff3c0c4aa0e48b9e0e94a9200f1a12 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2IeR@_978f1 z-(IojI%FWi_QC(YUR}$4UlZsN22WQ%mvv4FO#qsj BXYv35 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-3.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/anomaly-3.png new file mode 100644 index 0000000000000000000000000000000000000000..4f17e843d53fd34954c5ce5a28d531319336d517 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2Ia@qk978f1 z-(E4~I^-bG`fz#2(+t67f|s6Z#3gP&b5qAW{Da0zrc5V+xtFwh4=w85EyZ0MKQ+nh z=gme27Z~`TH?eBL`nk*u(mEYndFKU0`5AUQUp^yt;rh9o2@h*_E?UEt-^|J&AbNjm z@{PP}0;2PUHhOV(*xqqCQR`pSu%hDP^Zsd}5BCdwIK`F5+u^*UDTDR*I@x|pZI7b= r?0c+*qt(pj*qKb0bpYD9Kb=YNe&qfuZ;EaL-Ou3Z>gTe~DWM4fp|xPP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/base.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..a69b856d65426a81cbc60d3d5fcbc4bf33b3bb8f GIT binary patch literal 1075 zcmV-31kC%1P)Px&?MXyIRA_qx$gQyjX5fW%}=$D}iCB;J#JO)Af3rc^2 z2SMl$sCX#!kV4y|DG~gDT1dd0RO}@b2?Vj3t>&5@(phJA=WAnZd+>pns0eET%()3cMFfh# zRlrI>GL>rfbVuRTsnOP{Q}lF4t)pNRz??5EW^MQY01Jy*YY|2PJ>5}cW;52#88WjO z^mIp!c3J^!1d&L8U;(U;DGEvfEcES+o`FR{CqgNJIgdp8QLCK%3Mw!Fi)%bb8*X2u@8Rx>Ps#8UTRuUKwYN2An#@ z=x`FF!%5$ia_SUkjRwklWyB_9E{{%xQ~>Y1yjK?PnI6kaORrtQ01%suxgx9u@S|p+ z)bZU{38&NnAz_z;kA_wN%b(0KBeVe_VWA%%4R0L@Mac5UJ0~P8bhCV1Q0?n-PFYOydkKoAbpSwmY7WIxUf_{IS%l{V8uztvW1OPmI^uS}U=lP)$5Htd+6#TUas8VpH5n%ItWo6fA2ehVP z;0Rnqn!B zUrt3BEpMX&?<>%YNns-=gm7$R42MUDoG2=+f;I@W5T&Q)-1An5!$`!VzWb&Z?;C#cR%96Y2EVAG2~GT0WPjzcS;^)?iBrx!ai$EF3VSXwu7NCoiw zdfg~(|FE#-2m!5U!PDuq6>+EVC11eW>T;+H01ozdtX{P`iG%$e0Dn?&T&+qsmsbh) t-6;eBxBB`5f9>i7ex9C&{)JxwzX4oxO#q(RC4v9|002ovPDHLkV1i#M>2Lr5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json new file mode 100644 index 00000000000..e7fe21e79a8 --- /dev/null +++ b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Created by EmoGarbage404 (github)", + "size": { + "x": 32, + "y": 64 + }, + "states": [ + { + "name": "anomaly-1" + }, + { + "name": "anomaly-2" + }, + { + "name": "anomaly-3" + }, + { + "name": "base" + }, + { + "name": "panel" + }, + { + "name": "powered-1" + }, + { + "name": "powered-2" + }, + { + "name": "powered-3" + } + ] +} diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/panel.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/panel.png new file mode 100644 index 0000000000000000000000000000000000000000..5c11431bd78217437ebb1f9cff6e5e824f703f68 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2IWs+7978f1 z-(Jz?YjzN6eHa}S{EeZsH1tg~%W16$t|r|Jr`EMEIjCT0!J?8N=sWWvpW}!6ym`-O zND2aV1HpqgdfV7PJ^1=_`#jUkP0@{ye(KeqZU4JCw(oKNl$rNl-V`z5++X=Gp*Swo zL3*9m1Erc`#_)%;xpwe~3+}v?Be(nH`lY+FnL@AqW4LVV{VIJ$X$2z#L%|NoeczQn Tr5=dL0$Jke>gTe~DWM4f?kHD4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-1.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-1.png new file mode 100644 index 0000000000000000000000000000000000000000..504857312a4e86fcddfad61fb7e946e76765ee35 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2Igy?&jv*P1 zZ!a72HW&!BU1Xb*(6mI`$e_`TM}a}uLo;|XpU#s8gFV~tl-&QeoCT&HVZ?E3}?GsG)9Cw<_4AcY$1{#)L zvFaO3dZrb4+`GCqQmf%V@2w3_H2$`KFODnw`floO*;i8YniYSl=kLG9_&}Il#95Pf SPqy=ZkZw;`KbLh*2~7aE%{z7g literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-3.png b/Resources/Textures/Structures/Machines/Anomaly/adv_anomaly_vessel.rsi/powered-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2c93f720c9bfba36dee1cf2c549685d0365c9c1d GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPEB*=VV?2IoX~rjv*P1 zZ!d4;ZBP(seR#P^QX`*7`1`^lrSFOSQo`vA4t5=z)A_8&?Em!%F%|u7!i+#&U{G+v zaBFVVtmVmHT0)zr1lfun_|KL-BRT7D`}g8|;h*14-7Wh}YF_iIhbM2ZFJ<^~gt3iT UBZlXcRyIhtr>mdKI;Vst0Gf9}FaQ7m literal 0 HcmV?d00001 From 52c6fa5e5abdde76a2a02af81615f956dcd31771 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 8 Dec 2023 13:51:45 -0500 Subject: [PATCH 09/36] Automatic changelog update --- Resources/Changelog/Changelog.yml | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fce755b04ff..b530fc93171 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: arimah - changes: - - {message: Particle Accelerators can now be constructed again, type: Fix} - id: 4792 - time: '2023-09-10T03:42:42.0000000+00:00' -- author: metalgearsloth - changes: - - {message: Revert a PR causing container issues., type: Fix} - id: 4793 - time: '2023-09-10T11:46:36.0000000+00:00' - author: ElectroJr changes: - {message: Replays now record ghost chat., type: Fix} @@ -2902,3 +2892,15 @@ Entries: - {message: Rat king generates more miasma to fill larger rooms., type: Tweak} id: 5291 time: '2023-12-08T18:46:28.0000000+00:00' +- author: Emisse + changes: + - {message: Command staff has brig access., type: Tweak} + id: 5292 + time: '2023-12-08T18:50:07.0000000+00:00' +- author: EmoGarbage404 + changes: + - {message: Removed upgrades from the anomaly vessel., type: Remove} + - {message: 'Added the experimental anomaly vessel, which researches twice as fast + at the cost of being radioactive.', type: Add} + id: 5293 + time: '2023-12-08T18:50:41.0000000+00:00' From 8902591fb1441e90e01ee34b4c3195587bb9b3e9 Mon Sep 17 00:00:00 2001 From: Flareguy <78941145+Flareguy@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:29:54 -0600 Subject: [PATCH 10/36] Fixes reptilian "full" sprite + adds reptilian template to the raw sprites folder (#22112) * lizard "full" sprite + adds lizard template to raw sprites folder * remove the dammned tail * fix tests --- .../Mobs/Species/Reptilian/parts.rsi/full.png | Bin 486 -> 394 bytes .../Humanoid/human.png | Bin .../Textures/Template/Humanoid/reptilian.png | Bin 0 -> 765 bytes .../{Raw Sprites => Template}/softsuits.png | Bin 4 files changed, 0 insertions(+), 0 deletions(-) rename Resources/Textures/{Raw Sprites => Template}/Humanoid/human.png (100%) create mode 100644 Resources/Textures/Template/Humanoid/reptilian.png rename Resources/Textures/{Raw Sprites => Template}/softsuits.png (100%) diff --git a/Resources/Textures/Mobs/Species/Reptilian/parts.rsi/full.png b/Resources/Textures/Mobs/Species/Reptilian/parts.rsi/full.png index 39d9a69915014156aaf0d6de2126f433af24277f..11c6100a6d9831d70d791dca43c2ed9f16bdd9dd 100644 GIT binary patch delta 378 zcmaFH+{HXWvYwfNfx%@-*D)Z)SRCZ;#IWw1%u67LCEd~2k%3`jKlh(RRv=#@z$e7D zs;X++wrx|UO!@!+|B@w3TwPtYw6uVdZ!-Sx2T~j*L4LtNDG*?|*St3pD8^af5n0T@ zz;_sg8IR|$NC65y_jGX#vG89zDX?DXumXomaYT>9Sy zx}VmH{dlW5>Saf?;ezFRE-}3Ll++RTs)RveQHQFtl=8=GGM%c;iEkN>e&FGFmQ=B? zxaq)Ih7ZyQZYIo-%aOSAhK+eM-}7mSiQ4*!r~5M*lEkh~n}3OsPvMz?C-Vh6p5M>a zq&6jYe35v*tnH1hbv z%|G-rGDhk*^gkHsU*rS2A-PgkrcOi|afBkFgf6`Z2O7=}QB^5#0h{CQaqrGHzzu(l zf$fWVG^^--yhyD5+}Q^A#k@8~WlO@jG&lhGVy zz<7}i%5c%c-2L73XwKRTxF;gAG5J$s|C*gUXq4#^CD+jjz5!Az)?knqFw6h| N002ovPDHLkV1lG$-w*%* diff --git a/Resources/Textures/Raw Sprites/Humanoid/human.png b/Resources/Textures/Template/Humanoid/human.png similarity index 100% rename from Resources/Textures/Raw Sprites/Humanoid/human.png rename to Resources/Textures/Template/Humanoid/human.png diff --git a/Resources/Textures/Template/Humanoid/reptilian.png b/Resources/Textures/Template/Humanoid/reptilian.png new file mode 100644 index 0000000000000000000000000000000000000000..b70dbc51b61deca44e9a19571dc3f0297015f990 GIT binary patch literal 765 zcmVPx#1ZP1_K>z@;j|==^1poj5Ay7d(e}8{PMMXb9KPoCJ zWMpIj001A!|NQ^}01I?dPE-H?|NsC0|NsC007_2*@&Et;32;bRa{vGi!2kdb!2!6D zYwZ940!~RpK~z{r&6R;}!ypVq31wZ=|Nr3K8F#_PhE0{GUA2LG=EWf-8@p^k-1z|9Dv)>BE!?FwO+}Oz6XKT^*5t zJ?<6oS?ITy#K#U{x$$2!G+`<5P=QQ5L48(d{R>c@rAh@Avj9L}DzLrzTH|C->=T15ruRR&)4uRXZ@F%$PG z&v{`hZD4%>2z(4Becv&4Wd*Fiv8TGqS^2Vkw!?&W;U+Lcg z?ETG}eH-$?qFGY$x52fEiDZ4=iJ|WRe52ix*PBH;QUu@^zLlz9I8|1FlobFuy9%&} z82|*NtUHl-yGBP58)dbg1m9>jo#$;0SRbap08FQK0&Mnx4@&1<6JS%p`R*2^>$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Raw Sprites/softsuits.png b/Resources/Textures/Template/softsuits.png similarity index 100% rename from Resources/Textures/Raw Sprites/softsuits.png rename to Resources/Textures/Template/softsuits.png From 995f506aafd770dd6572dfc9e7bf9e18186e485a Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sat, 9 Dec 2023 03:15:06 +0100 Subject: [PATCH 11/36] Fix being unable to open chat channel drop-down. (#22255) --- .../Chat/Controls/ChannelSelectorButton.cs | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs index 96a7594ff6f..2431b575ef2 100644 --- a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs +++ b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs @@ -2,16 +2,14 @@ using Content.Shared.Chat; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Input; +using Robust.Shared.Timing; namespace Content.Client.UserInterface.Systems.Chat.Controls; -/// -/// Only needed to avoid the issue where right click on the button closes the popup -/// but leaves the button highlighted. -/// public sealed class ChannelSelectorButton : Button { + private readonly IGameTiming _gameTiming; + private readonly ChannelSelectorPopup _channelSelectorPopup; public event Action? OnChannelSelect; @@ -19,15 +17,16 @@ public sealed class ChannelSelectorButton : Button private const int SelectorDropdownOffset = 38; + private uint _frameLastPopupChanged; + public ChannelSelectorButton() { - // needed so the popup is untoggled regardless of which key is pressed when hovering this button. - // If we don't have this, then right clicking the button while it's toggled on will hide - // the popup but keep the button toggled on + _gameTiming = IoCManager.Resolve(); + Name = "ChannelSelector"; - Mode = ActionMode.Press; - EnableAllKeybinds = true; + ToggleMode = true; + OnToggled += OnSelectorButtonToggled; _channelSelectorPopup = UserInterfaceManager.CreatePopup(); _channelSelectorPopup.Selected += OnChannelSelected; @@ -46,13 +45,25 @@ private void OnChannelSelected(ChatSelectChannel channel) private void OnPopupVisibilityChanged(Control control) { + // If the popup gets closed (e.g. by clicking anywhere else on the screen) + // We clear the button pressed state. + Pressed = control.Visible; + _frameLastPopupChanged = _gameTiming.CurFrame; } protected override void KeyBindDown(GUIBoundKeyEventArgs args) { - // needed since we need EnableAllKeybinds - don't double-send both UI click and Use - if (args.Function == EngineKeyFunctions.Use) return; + // If you try to close the popup by clicking on the button again the following would happen: + // The UI system would see that you clicked outside a popup, and would close it. + // Because of the above logic, that sets the button to UNPRESSED. + // THEN, it would propagate the keyboard event to us, the chat selector... + // And we would become pressed again. + // As a workaround, we check the frame the popup was last dismissed (above) + // and don't allow changing it again this frame. + if (_frameLastPopupChanged == _gameTiming.CurFrame) + return; + base.KeyBindDown(args); } From d4490f7035092f96e6c31a52ba5906e1e0631122 Mon Sep 17 00:00:00 2001 From: Vasilis Date: Sat, 9 Dec 2023 03:15:38 +0100 Subject: [PATCH 12/36] Fixed credits action failing (#21733) --- .github/workflows/update-credits.yml | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/.github/workflows/update-credits.yml b/.github/workflows/update-credits.yml index 09844f4c19d..e35d4def7d8 100644 --- a/.github/workflows/update-credits.yml +++ b/.github/workflows/update-credits.yml @@ -24,9 +24,29 @@ jobs: # TODO #- name: Get this week's Patreons # run: Tools/script2dumppatreons > Resources/Credits/Patrons.yml + + # MAKE SURE YOU ENABLED "Allow GitHub Actions to create and approve pull requests" IN YOUR ACTIONS, OTHERWISE IT WILL MOST LIKELY FAIL + + + # For this you can use a pat token of an account with direct push access to the repo if you have protected branches. + # Uncomment this and comment the other line if you do this. + # https://github.com/stefanzweifel/git-auto-commit-action#push-to-protected-branches + + #- name: Commit new credit files + # uses: stefanzweifel/git-auto-commit-action@v4 + # with: + # commit_message: Update Credits + # commit_author: PJBot + + # This will make a PR + - name: Set current date as env variable + run: echo "NOW=$(date +'%Y-%m-%dT%H-%M-%S')" >> $GITHUB_ENV - - name: Commit new credit files - uses: stefanzweifel/git-auto-commit-action@v4 + - name: Create Pull Request + uses: peter-evans/create-pull-request@v5 with: - commit_message: Update Credits - commit_author: PJBot + commit-message: Update Credits + title: Update Credits + body: This is an automated Pull Request. This PR updates the github contributors in the credits section. + author: PJBot + branch: automated/credits-${{env.NOW}} From 2843f143f4bf1b9991a598c8c2405e71dacedf73 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 8 Dec 2023 21:16:12 -0500 Subject: [PATCH 13/36] Automatic changelog update --- Resources/Changelog/Changelog.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b530fc93171..9eabc0a2e1e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,9 +1,4 @@ Entries: -- author: ElectroJr - changes: - - {message: Replays now record ghost chat., type: Fix} - id: 4794 - time: '2023-09-10T11:49:45.0000000+00:00' - author: Interrobang01 changes: - {message: Cognizine now works on monkeys., type: Fix} @@ -2904,3 +2899,8 @@ Entries: at the cost of being radioactive.', type: Add} id: 5293 time: '2023-12-08T18:50:41.0000000+00:00' +- author: PJB3005 + changes: + - {message: Opening the chat channel selector works again., type: Fix} + id: 5294 + time: '2023-12-09T02:15:07.0000000+00:00' From fc0ed73c5a193ea43da423cbfba98ba3796417be Mon Sep 17 00:00:00 2001 From: JoeHammad1844 <130668733+JoeHammad1844@users.noreply.github.com> Date: Sat, 9 Dec 2023 13:16:31 +1100 Subject: [PATCH 14/36] knives get throwing damage (#22248) --- .../Prototypes/Entities/Objects/Weapons/Melee/knife.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index ec813c1a40a..5ab16c67124 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -89,6 +89,12 @@ damage: types: Slash: 10 + - type: EmbeddableProjectile + sound: /Audio/Weapons/star_hit.ogg + - type: DamageOtherOnHit + damage: + types: + Slash: 10 - type: Item sprite: Objects/Weapons/Melee/combat_knife.rsi - type: DisarmMalus From c797c2b89d71584de3365b5727828b47efc89848 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 8 Dec 2023 21:17:35 -0500 Subject: [PATCH 15/36] Automatic changelog update --- Resources/Changelog/Changelog.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 9eabc0a2e1e..3ba3399cf06 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,10 +1,4 @@ Entries: -- author: Interrobang01 - changes: - - {message: Cognizine now works on monkeys., type: Fix} - - {message: Fixed Cognizine not working on player-controlled animals., type: Fix} - id: 4795 - time: '2023-09-10T20:21:54.0000000+00:00' - author: Vasilis changes: - {message: All pda's with built in medical scanners now take one second to scan., @@ -2904,3 +2898,8 @@ Entries: - {message: Opening the chat channel selector works again., type: Fix} id: 5294 time: '2023-12-09T02:15:07.0000000+00:00' +- author: JoeHammad + changes: + - {message: Some knives now deal some damage when thrown, type: Add} + id: 5295 + time: '2023-12-09T02:16:31.0000000+00:00' From bd79fff15f53890dc3fd70f405005c7468a0cb0b Mon Sep 17 00:00:00 2001 From: Flareguy <78941145+Flareguy@users.noreply.github.com> Date: Fri, 8 Dec 2023 20:29:59 -0600 Subject: [PATCH 16/36] fixes a few common gridinv sprite rotations (#22256) --- Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml | 1 + .../Prototypes/Entities/Objects/Misc/identification_cards.yml | 1 + .../Prototypes/Entities/Objects/Specific/Janitorial/soap.yml | 2 +- .../Prototypes/Entities/Objects/Specific/Research/anomaly.yml | 2 ++ 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml index 569dddb47a3..a0c010352f4 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml @@ -6,6 +6,7 @@ components: - type: Item size: Small + storedRotation: 90 - type: Handcuff cuffedRSI: Objects/Misc/handcuffs.rsi bodyIconState: body-overlay diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index 9fc273d7096..2e662966537 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -14,6 +14,7 @@ - type: Item size: Small heldPrefix: default + storedRotation: -90 - type: Access - type: IdCard - type: StationRecordKeyStorage diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml index 3cf2b7f7953..09f48b258e9 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml @@ -19,6 +19,7 @@ - type: Appearance - type: Item sprite: Objects/Specific/Janitorial/soap.rsi + storedRotation: -90 - type: Slippery paralyzeTime: 2 launchForwardsMultiplier: 1.5 @@ -68,7 +69,6 @@ solution: soap - type: BadFood - - type: entity name: soap id: SoapNT diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml index 69a81f9f46a..a5a592cf780 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml @@ -19,6 +19,8 @@ - type: GuideHelp guides: - ScannersAndVessels + - type: Item + storedRotation: -90 - type: entity id: AnomalyLocatorUnpowered From 98d5f9f56bb14170835aff3bdce070c5f097e017 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 9 Dec 2023 14:03:08 +1100 Subject: [PATCH 17/36] Make audio sliders use gain not volume (#21984) --- Content.Client/Audio/AmbientSoundSystem.cs | 8 +-- Content.Client/Audio/BackgroundAudioSystem.cs | 2 +- .../Audio/ContentAudioSystem.AmbientMusic.cs | 2 +- Content.Client/Audio/ContentAudioSystem.cs | 2 + .../Options/UI/Tabs/AudioTab.xaml.cs | 57 +++++++++---------- Content.Shared/CCVar/CCVars.cs | 15 +---- 6 files changed, 37 insertions(+), 49 deletions(-) diff --git a/Content.Client/Audio/AmbientSoundSystem.cs b/Content.Client/Audio/AmbientSoundSystem.cs index 10065b6583e..d66ee434a29 100644 --- a/Content.Client/Audio/AmbientSoundSystem.cs +++ b/Content.Client/Audio/AmbientSoundSystem.cs @@ -101,7 +101,7 @@ public override void Initialize() _cfg.OnValueChanged(CCVars.AmbientCooldown, SetCooldown, true); _cfg.OnValueChanged(CCVars.MaxAmbientSources, SetAmbientCount, true); _cfg.OnValueChanged(CCVars.AmbientRange, SetAmbientRange, true); - _cfg.OnValueChanged(CCVars.AmbienceVolume, SetAmbienceVolume, true); + _cfg.OnValueChanged(CCVars.AmbienceVolume, SetAmbienceGain, true); SubscribeLocalEvent(OnShutdown); } @@ -116,9 +116,9 @@ private void OnShutdown(EntityUid uid, AmbientSoundComponent component, Componen _playingCount.Remove(sound.Path); } - private void SetAmbienceVolume(float value) + private void SetAmbienceGain(float value) { - _ambienceVolume = value; + _ambienceVolume = SharedAudioSystem.GainToVolume(value); foreach (var (comp, values) in _playingSounds) { @@ -141,7 +141,7 @@ public override void Shutdown() _cfg.UnsubValueChanged(CCVars.AmbientCooldown, SetCooldown); _cfg.UnsubValueChanged(CCVars.MaxAmbientSources, SetAmbientCount); _cfg.UnsubValueChanged(CCVars.AmbientRange, SetAmbientRange); - _cfg.UnsubValueChanged(CCVars.AmbienceVolume, SetAmbienceVolume); + _cfg.UnsubValueChanged(CCVars.AmbienceVolume, SetAmbienceGain); } private int PlayingCount(string countSound) diff --git a/Content.Client/Audio/BackgroundAudioSystem.cs b/Content.Client/Audio/BackgroundAudioSystem.cs index a26603bf746..3206cfde299 100644 --- a/Content.Client/Audio/BackgroundAudioSystem.cs +++ b/Content.Client/Audio/BackgroundAudioSystem.cs @@ -119,7 +119,7 @@ public void StartLobbyMusic() } _lobbyStream = _audio.PlayGlobal(file, Filter.Local(), false, - _lobbyParams.WithVolume(_lobbyParams.Volume + _configManager.GetCVar(CCVars.LobbyMusicVolume)))?.Entity; + _lobbyParams.WithVolume(_lobbyParams.Volume + SharedAudioSystem.GainToVolume(_configManager.GetCVar(CCVars.LobbyMusicVolume))))?.Entity; } private void EndLobbyMusic() diff --git a/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs b/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs index 1860d81118c..6eb25aec1e7 100644 --- a/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs +++ b/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs @@ -75,7 +75,7 @@ private void InitializeAmbientMusic() private void AmbienceCVarChanged(float obj) { - _volumeSlider = obj; + _volumeSlider = SharedAudioSystem.GainToVolume(obj); if (_ambientMusicStream != null && _musicProto != null) { diff --git a/Content.Client/Audio/ContentAudioSystem.cs b/Content.Client/Audio/ContentAudioSystem.cs index 726493fdab1..3bba6864a45 100644 --- a/Content.Client/Audio/ContentAudioSystem.cs +++ b/Content.Client/Audio/ContentAudioSystem.cs @@ -1,5 +1,7 @@ using Content.Shared.Audio; +using Content.Shared.CCVar; using Robust.Client.GameObjects; +using Robust.Shared; using Robust.Shared.Audio; using AudioComponent = Robust.Shared.Audio.Components.AudioComponent; diff --git a/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs b/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs index 6a9928b8bdd..bb7c10c696f 100644 --- a/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs @@ -7,6 +7,7 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; using Robust.Shared; +using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Range = Robust.Client.UserInterface.Controls.Range; @@ -16,14 +17,14 @@ namespace Content.Client.Options.UI.Tabs public sealed partial class AudioTab : Control { [Dependency] private readonly IConfigurationManager _cfg = default!; - private readonly AudioSystem _audio; + private readonly IAudioManager _audio; public AudioTab() { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); - _audio = IoCManager.Resolve().System(); + _audio = IoCManager.Resolve(); LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled); RestartSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.RestartSoundsEnabled); EventMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.EventMusicEnabled); @@ -82,7 +83,7 @@ private void OnAmbienceSoundsSliderChanged(Range obj) private void OnMasterVolumeSliderChanged(Range range) { - _audio.SetMasterVolume(MasterVolumeSlider.Value / 100); + _audio.SetMasterGain(MasterVolumeSlider.Value / 100f); UpdateChanges(); } @@ -111,15 +112,16 @@ private void OnAdminSoundsCheckToggled(BaseButton.ButtonEventArgs args) private void OnApplyButtonPressed(BaseButton.ButtonEventArgs args) { - _cfg.SetCVar(CVars.AudioMasterVolume, LV100ToDB(MasterVolumeSlider.Value, CCVars.MasterMultiplier)); + _cfg.SetCVar(CVars.AudioMasterVolume, MasterVolumeSlider.Value / 100f); // Want the CVar updated values to have the multiplier applied // For the UI we just display 0-100 still elsewhere - _cfg.SetCVar(CVars.MidiVolume, LV100ToDB(MidiVolumeSlider.Value, CCVars.MidiMultiplier)); - _cfg.SetCVar(CCVars.AmbienceVolume, LV100ToDB(AmbienceVolumeSlider.Value, CCVars.AmbienceMultiplier)); - _cfg.SetCVar(CCVars.AmbientMusicVolume, LV100ToDB(AmbientMusicVolumeSlider.Value, CCVars.AmbientMusicMultiplier)); + _cfg.SetCVar(CVars.MidiVolume, MidiVolumeSlider.Value / 100f); + _cfg.SetCVar(CCVars.AmbienceVolume, AmbienceVolumeSlider.Value / 100f); + _cfg.SetCVar(CCVars.AmbientMusicVolume, AmbientMusicVolumeSlider.Value / 100f); + _cfg.SetCVar(CCVars.LobbyMusicVolume, LobbyVolumeSlider.Value / 100f); - _cfg.SetCVar(CCVars.LobbyMusicVolume, LV100ToDB(LobbyVolumeSlider.Value)); _cfg.SetCVar(CCVars.MaxAmbientSources, (int)AmbienceSoundsSlider.Value); + _cfg.SetCVar(CCVars.LobbyMusicEnabled, LobbyMusicCheckBox.Pressed); _cfg.SetCVar(CCVars.RestartSoundsEnabled, RestartSoundsCheckBox.Pressed); _cfg.SetCVar(CCVars.EventMusicEnabled, EventMusicCheckBox.Pressed); @@ -135,13 +137,14 @@ private void OnResetButtonPressed(BaseButton.ButtonEventArgs args) private void Reset() { - MasterVolumeSlider.Value = DBToLV100(_cfg.GetCVar(CVars.AudioMasterVolume), CCVars.MasterMultiplier); - MidiVolumeSlider.Value = DBToLV100(_cfg.GetCVar(CVars.MidiVolume), CCVars.MidiMultiplier); - AmbienceVolumeSlider.Value = DBToLV100(_cfg.GetCVar(CCVars.AmbienceVolume), CCVars.AmbienceMultiplier); - AmbientMusicVolumeSlider.Value = - DBToLV100(_cfg.GetCVar(CCVars.AmbientMusicVolume), CCVars.AmbientMusicMultiplier); - LobbyVolumeSlider.Value = DBToLV100(_cfg.GetCVar(CCVars.LobbyMusicVolume)); + MasterVolumeSlider.Value = _cfg.GetCVar(CVars.AudioMasterVolume) * 100f; + MidiVolumeSlider.Value = _cfg.GetCVar(CVars.MidiVolume) * 100f; + AmbienceVolumeSlider.Value = _cfg.GetCVar(CCVars.AmbienceVolume) * 100f; + AmbientMusicVolumeSlider.Value = _cfg.GetCVar(CCVars.AmbientMusicVolume) * 100f; + LobbyVolumeSlider.Value = _cfg.GetCVar(CCVars.LobbyMusicVolume) * 100f; + AmbienceSoundsSlider.Value = _cfg.GetCVar(CCVars.MaxAmbientSources); + LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled); RestartSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.RestartSoundsEnabled); EventMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.EventMusicEnabled); @@ -149,33 +152,25 @@ private void Reset() UpdateChanges(); } - // Note: Rather than moving these functions somewhere, instead switch MidiManager to using linear units rather than dB - // Do be sure to rename the setting though - private float DBToLV100(float db, float multiplier = 1f) + private float GetGain(float value) { - var beri = (float) (Math.Pow(10, db / 10) * 100 / multiplier); - return beri; - } - - private float LV100ToDB(float lv100, float multiplier = 1f) - { - // Saving negative infinity doesn't work, so use -10000000 instead (MidiManager does it) - var weh = MathF.Max(-10000000, (float) (Math.Log(lv100 * multiplier / 100, 10) * 10)); - return weh; + return value; } private void UpdateChanges() { + // y'all need jesus. var isMasterVolumeSame = - Math.Abs(MasterVolumeSlider.Value - DBToLV100(_cfg.GetCVar(CVars.AudioMasterVolume), CCVars.MasterMultiplier)) < 0.01f; + Math.Abs(MasterVolumeSlider.Value - _cfg.GetCVar(CVars.AudioMasterVolume) * 100f) < 0.01f; var isMidiVolumeSame = - Math.Abs(MidiVolumeSlider.Value - DBToLV100(_cfg.GetCVar(CVars.MidiVolume), CCVars.MidiMultiplier)) < 0.01f; + Math.Abs(MidiVolumeSlider.Value - _cfg.GetCVar(CVars.MidiVolume) * 100f) < 0.01f; var isAmbientVolumeSame = - Math.Abs(AmbienceVolumeSlider.Value - DBToLV100(_cfg.GetCVar(CCVars.AmbienceVolume), CCVars.AmbienceMultiplier)) < 0.01f; + Math.Abs(AmbienceVolumeSlider.Value - _cfg.GetCVar(CCVars.AmbienceVolume) * 100f) < 0.01f; var isAmbientMusicVolumeSame = - Math.Abs(AmbientMusicVolumeSlider.Value - DBToLV100(_cfg.GetCVar(CCVars.AmbientMusicVolume), CCVars.AmbientMusicMultiplier)) < 0.01f; + Math.Abs(AmbientMusicVolumeSlider.Value - _cfg.GetCVar(CCVars.AmbientMusicVolume) * 100f) < 0.01f; var isLobbyVolumeSame = - Math.Abs(LobbyVolumeSlider.Value - DBToLV100(_cfg.GetCVar(CCVars.LobbyMusicVolume))) < 0.01f; + Math.Abs(LobbyVolumeSlider.Value - _cfg.GetCVar(CCVars.LobbyMusicVolume) * 100f) < 0.01f; + var isAmbientSoundsSame = (int)AmbienceSoundsSlider.Value == _cfg.GetCVar(CCVars.MaxAmbientSources); var isLobbySame = LobbyMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.LobbyMusicEnabled); var isRestartSoundsSame = RestartSoundsCheckBox.Pressed == _cfg.GetCVar(CCVars.RestartSoundsEnabled); diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 561ed7dd26a..f2ee22e0ead 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -67,28 +67,19 @@ public sealed class CCVars : CVars /// Ambience volume. /// public static readonly CVarDef AmbienceVolume = - CVarDef.Create("ambience.volume", 0.0f, CVar.ARCHIVE | CVar.CLIENTONLY); - - public const float MasterMultiplier = 2f; - - // Midi is on engine so deal - public const float MidiMultiplier = 3f; - - public const float AmbienceMultiplier = 2f; + CVarDef.Create("ambience.volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY); /// /// Ambience music volume. /// public static readonly CVarDef AmbientMusicVolume = - CVarDef.Create("ambience.music_volume", 0.0f, CVar.ARCHIVE | CVar.CLIENTONLY); - - public const float AmbientMusicMultiplier = 2f; + CVarDef.Create("ambience.music_volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY); /// /// Lobby / round end music volume. /// public static readonly CVarDef LobbyMusicVolume = - CVarDef.Create("ambience.lobby_music_volume", 0.0f, CVar.ARCHIVE | CVar.CLIENTONLY); + CVarDef.Create("ambience.lobby_music_volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY); /* * Status From 2436728fd8cb15442900230263b59a5534083b6a Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 8 Dec 2023 22:04:12 -0500 Subject: [PATCH 18/36] Automatic changelog update --- Resources/Changelog/Changelog.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3ba3399cf06..85cfb1a5dab 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,10 +1,4 @@ Entries: -- author: Vasilis - changes: - - {message: All pda's with built in medical scanners now take one second to scan., - type: Tweak} - id: 4796 - time: '2023-09-10T23:01:05.0000000+00:00' - author: metalgearsloth changes: - {message: Made tooltips open faster and anchor bottom-left to mouse cursor instead @@ -2903,3 +2897,10 @@ Entries: - {message: Some knives now deal some damage when thrown, type: Add} id: 5295 time: '2023-12-09T02:16:31.0000000+00:00' +- author: metalgearsloth + changes: + - {message: Fixed a bug where the audio slider can get saved at 50% audio with no + sound. Unfortunately this means your audio sliders will reset., type: Fix} + - {message: Fix crash on options menu while game sim not running., type: Fix} + id: 5296 + time: '2023-12-09T03:03:08.0000000+00:00' From d8644e0543da1a60e897441d3ef5367d2c172aa6 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Fri, 8 Dec 2023 23:10:00 -0500 Subject: [PATCH 19/36] Set enabled on RadiationSourceComponent to true by default (#22259) --- Content.Shared/Radiation/Components/RadiationSourceComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Radiation/Components/RadiationSourceComponent.cs b/Content.Shared/Radiation/Components/RadiationSourceComponent.cs index fa6b8399352..874024a9059 100644 --- a/Content.Shared/Radiation/Components/RadiationSourceComponent.cs +++ b/Content.Shared/Radiation/Components/RadiationSourceComponent.cs @@ -25,5 +25,5 @@ public sealed partial class RadiationSourceComponent : Component public float Slope = 0.5f; [DataField, ViewVariables(VVAccess.ReadWrite)] - public bool Enabled; + public bool Enabled = true; } From 6fabc74f9402976e9023ee3668c8df4442266400 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 8 Dec 2023 23:11:04 -0500 Subject: [PATCH 20/36] Automatic changelog update --- Resources/Changelog/Changelog.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 85cfb1a5dab..eab95b09c9f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,10 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - {message: Made tooltips open faster and anchor bottom-left to mouse cursor instead - of top-left., type: Tweak} - id: 4797 - time: '2023-09-11T03:53:36.0000000+00:00' - author: ElectroJr changes: - {message: Fix handheld crew monitor., type: Fix} @@ -2904,3 +2898,8 @@ Entries: - {message: Fix crash on options menu while game sim not running., type: Fix} id: 5296 time: '2023-12-09T03:03:08.0000000+00:00' +- author: EmoGarbage404 + changes: + - {message: Radiation now works again., type: Fix} + id: 5297 + time: '2023-12-09T04:10:01.0000000+00:00' From b72c8553d87dcbe1ba68ec64cf204943697f1c43 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 9 Dec 2023 15:18:15 +1100 Subject: [PATCH 21/36] Add audio multipliers back (#22260) --- Content.Client/Audio/ContentAudioSystem.cs | 12 ++++++ .../Options/UI/Tabs/AudioTab.xaml.cs | 38 +++++++++---------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/Content.Client/Audio/ContentAudioSystem.cs b/Content.Client/Audio/ContentAudioSystem.cs index 3bba6864a45..2dc950ee265 100644 --- a/Content.Client/Audio/ContentAudioSystem.cs +++ b/Content.Client/Audio/ContentAudioSystem.cs @@ -20,6 +20,18 @@ public sealed partial class ContentAudioSystem : SharedContentAudioSystem private const float MinVolume = -32f; private const float DefaultDuration = 2f; + /* + * Gain multipliers for specific audio sliders. + * The float value will get multiplied by this when setting + * i.e. a gain of 0.5f x 3 will equal 1.5f which is supported in OpenAL. + */ + + public const float MasterVolumeMultiplier = 3f; + public const float MidiVolumeMultiplier = 0.25f; + public const float AmbienceMultiplier = 3f; + public const float AmbientMusicMultiplier = 3f; + public const float LobbyMultiplier = 3f; + public override void Initialize() { base.Initialize(); diff --git a/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs b/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs index bb7c10c696f..80e13d4a43e 100644 --- a/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs @@ -1,3 +1,4 @@ +using Content.Client.Audio; using Content.Shared.CCVar; using Robust.Client.Audio; using Robust.Client.AutoGenerated; @@ -83,7 +84,7 @@ private void OnAmbienceSoundsSliderChanged(Range obj) private void OnMasterVolumeSliderChanged(Range range) { - _audio.SetMasterGain(MasterVolumeSlider.Value / 100f); + _audio.SetMasterGain(MasterVolumeSlider.Value / 100f * ContentAudioSystem.MasterVolumeMultiplier); UpdateChanges(); } @@ -112,13 +113,13 @@ private void OnAdminSoundsCheckToggled(BaseButton.ButtonEventArgs args) private void OnApplyButtonPressed(BaseButton.ButtonEventArgs args) { - _cfg.SetCVar(CVars.AudioMasterVolume, MasterVolumeSlider.Value / 100f); + _cfg.SetCVar(CVars.AudioMasterVolume, MasterVolumeSlider.Value / 100f * ContentAudioSystem.MasterVolumeMultiplier); // Want the CVar updated values to have the multiplier applied // For the UI we just display 0-100 still elsewhere - _cfg.SetCVar(CVars.MidiVolume, MidiVolumeSlider.Value / 100f); - _cfg.SetCVar(CCVars.AmbienceVolume, AmbienceVolumeSlider.Value / 100f); - _cfg.SetCVar(CCVars.AmbientMusicVolume, AmbientMusicVolumeSlider.Value / 100f); - _cfg.SetCVar(CCVars.LobbyMusicVolume, LobbyVolumeSlider.Value / 100f); + _cfg.SetCVar(CVars.MidiVolume, MidiVolumeSlider.Value / 100f * ContentAudioSystem.MidiVolumeMultiplier); + _cfg.SetCVar(CCVars.AmbienceVolume, AmbienceVolumeSlider.Value / 100f * ContentAudioSystem.AmbienceMultiplier); + _cfg.SetCVar(CCVars.AmbientMusicVolume, AmbientMusicVolumeSlider.Value / 100f * ContentAudioSystem.AmbientMusicMultiplier); + _cfg.SetCVar(CCVars.LobbyMusicVolume, LobbyVolumeSlider.Value / 100f * ContentAudioSystem.LobbyMultiplier); _cfg.SetCVar(CCVars.MaxAmbientSources, (int)AmbienceSoundsSlider.Value); @@ -137,11 +138,11 @@ private void OnResetButtonPressed(BaseButton.ButtonEventArgs args) private void Reset() { - MasterVolumeSlider.Value = _cfg.GetCVar(CVars.AudioMasterVolume) * 100f; - MidiVolumeSlider.Value = _cfg.GetCVar(CVars.MidiVolume) * 100f; - AmbienceVolumeSlider.Value = _cfg.GetCVar(CCVars.AmbienceVolume) * 100f; - AmbientMusicVolumeSlider.Value = _cfg.GetCVar(CCVars.AmbientMusicVolume) * 100f; - LobbyVolumeSlider.Value = _cfg.GetCVar(CCVars.LobbyMusicVolume) * 100f; + MasterVolumeSlider.Value = _cfg.GetCVar(CVars.AudioMasterVolume) * 100f / ContentAudioSystem.MasterVolumeMultiplier; + MidiVolumeSlider.Value = _cfg.GetCVar(CVars.MidiVolume) * 100f / ContentAudioSystem.MidiVolumeMultiplier; + AmbienceVolumeSlider.Value = _cfg.GetCVar(CCVars.AmbienceVolume) * 100f / ContentAudioSystem.AmbienceMultiplier; + AmbientMusicVolumeSlider.Value = _cfg.GetCVar(CCVars.AmbientMusicVolume) * 100f / ContentAudioSystem.AmbientMusicMultiplier; + LobbyVolumeSlider.Value = _cfg.GetCVar(CCVars.LobbyMusicVolume) * 100f / ContentAudioSystem.LobbyMultiplier; AmbienceSoundsSlider.Value = _cfg.GetCVar(CCVars.MaxAmbientSources); @@ -152,24 +153,19 @@ private void Reset() UpdateChanges(); } - private float GetGain(float value) - { - return value; - } - private void UpdateChanges() { // y'all need jesus. var isMasterVolumeSame = - Math.Abs(MasterVolumeSlider.Value - _cfg.GetCVar(CVars.AudioMasterVolume) * 100f) < 0.01f; + Math.Abs(MasterVolumeSlider.Value - _cfg.GetCVar(CVars.AudioMasterVolume) * 100f / ContentAudioSystem.MasterVolumeMultiplier) < 0.01f; var isMidiVolumeSame = - Math.Abs(MidiVolumeSlider.Value - _cfg.GetCVar(CVars.MidiVolume) * 100f) < 0.01f; + Math.Abs(MidiVolumeSlider.Value - _cfg.GetCVar(CVars.MidiVolume) * 100f / ContentAudioSystem.MidiVolumeMultiplier) < 0.01f; var isAmbientVolumeSame = - Math.Abs(AmbienceVolumeSlider.Value - _cfg.GetCVar(CCVars.AmbienceVolume) * 100f) < 0.01f; + Math.Abs(AmbienceVolumeSlider.Value - _cfg.GetCVar(CCVars.AmbienceVolume) * 100f / ContentAudioSystem.AmbienceMultiplier) < 0.01f; var isAmbientMusicVolumeSame = - Math.Abs(AmbientMusicVolumeSlider.Value - _cfg.GetCVar(CCVars.AmbientMusicVolume) * 100f) < 0.01f; + Math.Abs(AmbientMusicVolumeSlider.Value - _cfg.GetCVar(CCVars.AmbientMusicVolume) * 100f / ContentAudioSystem.AmbientMusicMultiplier) < 0.01f; var isLobbyVolumeSame = - Math.Abs(LobbyVolumeSlider.Value - _cfg.GetCVar(CCVars.LobbyMusicVolume) * 100f) < 0.01f; + Math.Abs(LobbyVolumeSlider.Value - _cfg.GetCVar(CCVars.LobbyMusicVolume) * 100f / ContentAudioSystem.LobbyMultiplier) < 0.01f; var isAmbientSoundsSame = (int)AmbienceSoundsSlider.Value == _cfg.GetCVar(CCVars.MaxAmbientSources); var isLobbySame = LobbyMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.LobbyMusicEnabled); From 0f3dc6baa2547e49fa336d6fd9977d201cc75ec8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 8 Dec 2023 23:19:18 -0500 Subject: [PATCH 22/36] Automatic changelog update --- Resources/Changelog/Changelog.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index eab95b09c9f..861c21314b6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,9 +1,4 @@ Entries: -- author: ElectroJr - changes: - - {message: Fix handheld crew monitor., type: Fix} - id: 4798 - time: '2023-09-11T05:01:54.0000000+00:00' - author: metalgearsloth changes: - {message: Fix ghost warps., type: Fix} @@ -2903,3 +2898,9 @@ Entries: - {message: Radiation now works again., type: Fix} id: 5297 time: '2023-12-09T04:10:01.0000000+00:00' +- author: metalgearsloth + changes: + - {message: Reduced MIDI audio range so it's easier to reduce the volume to a comfortable + level., type: Tweak} + id: 5298 + time: '2023-12-09T04:18:15.0000000+00:00' From f0d7272f8d69e5641aa26be6fd227ffc14fb8a04 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 9 Dec 2023 15:35:22 +1100 Subject: [PATCH 23/36] Update submodule to 188.0.0 (#22262) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 525815427e7..3fe30bc00f1 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 525815427e791b9c3f907961b98d3587496ba285 +Subproject commit 3fe30bc00f11db837c519f238e6de0aa03aa2d3c From b64715bfc3440af7b699ee272d4b47e6cdb50ecd Mon Sep 17 00:00:00 2001 From: Vigers Ray <60344369+VigersRay@users.noreply.github.com> Date: Sat, 9 Dec 2023 07:39:00 +0300 Subject: [PATCH 24/36] Fix entity logs verb (#22231) --- Content.Server/Administration/Systems/AdminVerbSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.cs b/Content.Server/Administration/Systems/AdminVerbSystem.cs index 2664913c9a7..26370045652 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.cs @@ -238,7 +238,7 @@ private void AddAdminVerbs(GetVerbsEvent args) { var ui = new AdminLogsEui(); _eui.OpenEui(ui, player); - ui.SetLogFilter(search:args.Target.GetHashCode().ToString()); + ui.SetLogFilter(search:args.Target.Id.ToString()); }, Impact = LogImpact.Low }; From 83aa30c7f2323763f10ade28127fa682e1a7aca8 Mon Sep 17 00:00:00 2001 From: OliverOtter <153337321+OliverOtter@users.noreply.github.com> Date: Sat, 9 Dec 2023 15:01:31 -0600 Subject: [PATCH 25/36] Cluster minor QOL update (#22261) * Update cluster.yml * Update cluster.yml --- Resources/Maps/cluster.yml | 2945 ++++++++++++++++++++---------------- 1 file changed, 1629 insertions(+), 1316 deletions(-) diff --git a/Resources/Maps/cluster.yml b/Resources/Maps/cluster.yml index c080cf6d304..493e63a6d24 100644 --- a/Resources/Maps/cluster.yml +++ b/Resources/Maps/cluster.yml @@ -27,17 +27,18 @@ tilemap: 78: FloorShowroom 87: FloorSteel 92: FloorSteelDiagonal + 94: FloorSteelDirty 95: FloorSteelHerringbone - 97: FloorSteelMono - 101: FloorTechMaint - 105: FloorWhite - 106: FloorWhiteDiagonal - 108: FloorWhiteHerringbone - 109: FloorWhiteMini - 110: FloorWhiteMono - 115: FloorWood - 117: Lattice - 118: Plating + 98: FloorSteelMono + 102: FloorTechMaint + 106: FloorWhite + 107: FloorWhiteDiagonal + 109: FloorWhiteHerringbone + 110: FloorWhiteMini + 111: FloorWhiteMono + 116: FloorWood + 118: Lattice + 119: Plating entities: - proto: "" entities: @@ -50,183 +51,183 @@ entities: - chunks: 0,0: ind: 0,0 - tiles: aQAAAAAAaQAAAAABaQAAAAABaQAAAAABaQAAAAAAaQAAAAADdgAAAAAAVwAAAAACVwAAAAABVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAAAGwAAAAACaQAAAAACagAAAAABagAAAAAAagAAAAADagAAAAACaQAAAAACdgAAAAAAVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAACVwAAAAACaQAAAAADagAAAAADagAAAAAAagAAAAACagAAAAADaQAAAAADaQAAAAADVwAAAAADSgAAAAAAVwAAAAADVwAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAADVwAAAAAAaQAAAAADaQAAAAADaQAAAAADaQAAAAACaQAAAAACaQAAAAABdgAAAAAAVwAAAAADVwAAAAACVwAAAAACVwAAAAADVwAAAAADVwAAAAAAVwAAAAABVwAAAAADVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAaQAAAAABaQAAAAACdgAAAAAAdgAAAAAAVwAAAAADVwAAAAAAVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAcwAAAAACcwAAAAACcwAAAAACcwAAAAABcwAAAAAAcwAAAAAAdgAAAAAAVwAAAAAAVwAAAAACVwAAAAAAdgAAAAAAVwAAAAADVwAAAAACdgAAAAAAVwAAAAACVwAAAAACcwAAAAAAcwAAAAADcwAAAAADcwAAAAACcwAAAAACcwAAAAADdgAAAAAAVwAAAAADSgAAAAAAVwAAAAAAdgAAAAAAVwAAAAABVwAAAAADdgAAAAAAVwAAAAADVwAAAAADcwAAAAAAcwAAAAABcwAAAAABcwAAAAABcwAAAAABcwAAAAACdgAAAAAAVwAAAAACVwAAAAADVwAAAAACdgAAAAAAdgAAAAAAVwAAAAACdgAAAAAAdgAAAAAAVwAAAAABDAAAAAACDAAAAAADDAAAAAAADAAAAAACDAAAAAACDAAAAAAADAAAAAACVwAAAAAAVwAAAAACVwAAAAABdgAAAAAAVwAAAAADVwAAAAACVwAAAAABVwAAAAAAVwAAAAAAcwAAAAABcwAAAAABcwAAAAAADAAAAAAADAAAAAABDAAAAAADDAAAAAABVwAAAAADSgAAAAAAVwAAAAADdgAAAAAAVwAAAAAAVwAAAAADVwAAAAACVwAAAAABVwAAAAACcwAAAAAAcwAAAAABcwAAAAACDAAAAAABcwAAAAACcwAAAAACdgAAAAAAVwAAAAACVwAAAAADVwAAAAADdgAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAADVwAAAAABcwAAAAAAcwAAAAADcwAAAAAADAAAAAAAcwAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAABdgAAAAAAVwAAAAACVwAAAAADdgAAAAAAdgAAAAAAGwAAAAACDAAAAAACDAAAAAAADAAAAAACDAAAAAABdgAAAAAAdgAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAABdgAAAAAAVwAAAAADVwAAAAABdgAAAAAAGwAAAAACGwAAAAABDAAAAAABDAAAAAACDAAAAAACdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAACVwAAAAADSgAAAAAAVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAGwAAAAACGwAAAAADGwAAAAACVwAAAAADVwAAAAADVwAAAAABVwAAAAADVwAAAAACVwAAAAABVwAAAAACVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAAAVwAAAAACGwAAAAABGwAAAAACGwAAAAAAVwAAAAAASgAAAAAAVwAAAAACVwAAAAADVwAAAAABSgAAAAAAVwAAAAADVwAAAAAAVwAAAAABVwAAAAACdgAAAAAAVwAAAAAAVwAAAAADdgAAAAAAGwAAAAAAGwAAAAAC + tiles: agAAAAAAagAAAAABagAAAAABagAAAAABagAAAAAAagAAAAADdwAAAAAAVwAAAAACVwAAAAABVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAAAGwAAAAACagAAAAACawAAAAABawAAAAAAawAAAAADawAAAAACagAAAAACdwAAAAAAVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAXgAAAAAAVwAAAAABVwAAAAAAXgAAAAAAVwAAAAACagAAAAADawAAAAADawAAAAAAawAAAAACawAAAAADagAAAAADagAAAAADVwAAAAADSgAAAAAAVwAAAAADVwAAAAAAVwAAAAABVwAAAAACXgAAAAAAVwAAAAADVwAAAAAAagAAAAADagAAAAADagAAAAADagAAAAACagAAAAACagAAAAABdwAAAAAAXgAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAADXgAAAAAAVwAAAAABVwAAAAADXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAagAAAAABagAAAAACdwAAAAAAdwAAAAAAVwAAAAADVwAAAAAAVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdAAAAAACdAAAAAACdAAAAAACdAAAAAABdAAAAAAAdAAAAAAAdwAAAAAAVwAAAAAAXgAAAAAAXgAAAAAAdwAAAAAAXgAAAAAAXgAAAAAAdwAAAAAAXgAAAAAAXgAAAAAAdAAAAAAAdAAAAAADdAAAAAADdAAAAAACdAAAAAACdAAAAAADdwAAAAAAVwAAAAADSgAAAAAAVwAAAAAAdwAAAAAAXgAAAAAAXgAAAAAAdwAAAAAAXgAAAAAAXgAAAAAAdAAAAAAAdAAAAAABdAAAAAABdAAAAAABdAAAAAABdAAAAAACdwAAAAAAVwAAAAACXgAAAAAAVwAAAAACdwAAAAAAdwAAAAAAVwAAAAACdwAAAAAAdwAAAAAAVwAAAAABDAAAAAACDAAAAAADDAAAAAAADAAAAAACDAAAAAACDAAAAAAADAAAAAACVwAAAAAAVwAAAAACVwAAAAABdwAAAAAAVwAAAAADXgAAAAAAVwAAAAABVwAAAAAAVwAAAAAAdAAAAAABdAAAAAABdAAAAAAADAAAAAAADAAAAAABDAAAAAADDAAAAAABXgAAAAAASgAAAAAAVwAAAAADdwAAAAAAVwAAAAAAVwAAAAADVwAAAAACVwAAAAABVwAAAAACdAAAAAAAdAAAAAABdAAAAAACDAAAAAABdAAAAAACdAAAAAACdwAAAAAAVwAAAAACVwAAAAADXgAAAAAAdwAAAAAAVwAAAAACVwAAAAADVwAAAAAAXgAAAAAAVwAAAAABdAAAAAAAdAAAAAADdAAAAAAADAAAAAAAdAAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAAAVwAAAAABdwAAAAAAVwAAAAACVwAAAAADdwAAAAAAdwAAAAAAGwAAAAACDAAAAAACDAAAAAAADAAAAAACDAAAAAABdwAAAAAAdwAAAAAAVwAAAAACXgAAAAAAVwAAAAADVwAAAAABdwAAAAAAVwAAAAADVwAAAAABdwAAAAAAGwAAAAACGwAAAAABDAAAAAABDAAAAAACDAAAAAACdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAACVwAAAAADSgAAAAAAVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAGwAAAAACGwAAAAADGwAAAAACVwAAAAADVwAAAAADVwAAAAABVwAAAAADVwAAAAACVwAAAAABXgAAAAAAVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAAAVwAAAAACGwAAAAABGwAAAAACGwAAAAAAVwAAAAAASgAAAAAAXgAAAAAAVwAAAAADVwAAAAABSgAAAAAAVwAAAAADVwAAAAAAXgAAAAAAVwAAAAACdwAAAAAAVwAAAAAAVwAAAAADdwAAAAAAGwAAAAAAGwAAAAAC version: 6 -1,0: ind: -1,0 - tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAABVwAAAAADVwAAAAACVwAAAAADVwAAAAADVwAAAAACVwAAAAADVwAAAAABVwAAAAACdgAAAAAAKgAAAAAAKgAAAAAAdgAAAAAAVwAAAAACVwAAAAACVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAABSgAAAAAAVwAAAAADKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAACVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAVwAAAAABVwAAAAADVwAAAAABVwAAAAABdgAAAAAAKgAAAAAAKgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAACVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAagAAAAABagAAAAADdgAAAAAAaQAAAAAAaQAAAAADbgAAAAADagAAAAACagAAAAADdgAAAAAAVwAAAAAAVwAAAAAAVwAAAAACdgAAAAAAcwAAAAACcwAAAAADcwAAAAACagAAAAACagAAAAACdgAAAAAAaQAAAAACaQAAAAACbgAAAAADagAAAAABagAAAAACdgAAAAAAVwAAAAAASgAAAAAAVwAAAAABdgAAAAAAcwAAAAACcwAAAAABcwAAAAACbgAAAAADbgAAAAADdgAAAAAAaQAAAAACaQAAAAABdgAAAAAAbgAAAAABbgAAAAAAdgAAAAAAVwAAAAAAVwAAAAACVwAAAAABdgAAAAAAcwAAAAADcwAAAAADcwAAAAACaQAAAAADaQAAAAAAaQAAAAADaQAAAAABaQAAAAACdgAAAAAAaQAAAAABaQAAAAABaQAAAAACVwAAAAACVwAAAAABVwAAAAADDAAAAAADDAAAAAADDAAAAAABDAAAAAABaQAAAAAAaQAAAAACaQAAAAAAaQAAAAABaQAAAAABbgAAAAABaQAAAAACaQAAAAAAaQAAAAAAVwAAAAACSgAAAAAAVwAAAAACDAAAAAABDAAAAAABDAAAAAADDAAAAAAAaQAAAAACaQAAAAAAaQAAAAACaQAAAAADaQAAAAAAbgAAAAACaQAAAAABaQAAAAABaQAAAAAAVwAAAAABVwAAAAAAVwAAAAADdgAAAAAAcwAAAAACcwAAAAACDAAAAAAAaQAAAAADaQAAAAADaQAAAAADaQAAAAABaQAAAAACdgAAAAAAaQAAAAAAaQAAAAAAaQAAAAABVwAAAAADVwAAAAAAVwAAAAABdgAAAAAAdgAAAAAAcwAAAAACDAAAAAAAaQAAAAABdgAAAAAAdgAAAAAAbgAAAAACdgAAAAAAdgAAAAAAbgAAAAAAbgAAAAABdgAAAAAAVwAAAAABVwAAAAABVwAAAAABVwAAAAAAdgAAAAAAdgAAAAAADAAAAAADaQAAAAACdgAAAAAAbQAAAAADbQAAAAABbQAAAAABbQAAAAABbQAAAAACbQAAAAADdgAAAAAAVwAAAAABSgAAAAAAVwAAAAADVwAAAAAAVwAAAAAAdgAAAAAAdgAAAAAAaQAAAAAAdgAAAAAAbQAAAAAAbQAAAAACbQAAAAAAbQAAAAADbQAAAAAAbQAAAAACdgAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAACVwAAAAAAVwAAAAACVwAAAAAAaQAAAAAAbgAAAAACbQAAAAABbQAAAAABbQAAAAAAbQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAABVwAAAAADSgAAAAAAVwAAAAACVwAAAAAB + tiles: dwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAAAVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAAAXgAAAAAAVwAAAAABVwAAAAADVwAAAAACVwAAAAADVwAAAAADVwAAAAACVwAAAAADXgAAAAAAVwAAAAACdwAAAAAAKgAAAAAAKgAAAAAAdwAAAAAAVwAAAAACVwAAAAACVwAAAAABXgAAAAAAVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAABSgAAAAAAVwAAAAADKgAAAAAAKgAAAAAAKgAAAAAAKgAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAACVwAAAAABVwAAAAAAXgAAAAAAVwAAAAAAVwAAAAABVwAAAAADXgAAAAAAVwAAAAABdwAAAAAAKgAAAAAAKgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAACXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAawAAAAABawAAAAADdwAAAAAAagAAAAAAagAAAAADbwAAAAADawAAAAACawAAAAADdwAAAAAAVwAAAAAAVwAAAAAAVwAAAAACdwAAAAAAdAAAAAACdAAAAAADdAAAAAACawAAAAACawAAAAACdwAAAAAAagAAAAACagAAAAACbwAAAAADawAAAAABawAAAAACdwAAAAAAXgAAAAAASgAAAAAAVwAAAAABdwAAAAAAdAAAAAACdAAAAAABdAAAAAACbwAAAAADbwAAAAADdwAAAAAAagAAAAACagAAAAABdwAAAAAAbwAAAAABbwAAAAAAdwAAAAAAVwAAAAAAVwAAAAACVwAAAAABdwAAAAAAdAAAAAADdAAAAAADdAAAAAACagAAAAADagAAAAAAagAAAAADagAAAAABagAAAAACdwAAAAAAagAAAAABagAAAAABagAAAAACVwAAAAACXgAAAAAAVwAAAAADDAAAAAADDAAAAAADDAAAAAABDAAAAAABagAAAAAAagAAAAACagAAAAAAagAAAAABagAAAAABbwAAAAABagAAAAACagAAAAAAagAAAAAAVwAAAAACSgAAAAAAVwAAAAACDAAAAAABDAAAAAABDAAAAAADDAAAAAAAagAAAAACagAAAAAAagAAAAACagAAAAADagAAAAAAbwAAAAACagAAAAABagAAAAABagAAAAAAXgAAAAAAVwAAAAAAVwAAAAADdwAAAAAAdAAAAAACdAAAAAACDAAAAAAAagAAAAADagAAAAADagAAAAADagAAAAABagAAAAACdwAAAAAAagAAAAAAagAAAAAAagAAAAABVwAAAAADVwAAAAAAXgAAAAAAdwAAAAAAdwAAAAAAdAAAAAACDAAAAAAAagAAAAABdwAAAAAAdwAAAAAAbwAAAAACdwAAAAAAdwAAAAAAbwAAAAAAbwAAAAABdwAAAAAAVwAAAAABVwAAAAABXgAAAAAAVwAAAAAAdwAAAAAAdwAAAAAADAAAAAADagAAAAACdwAAAAAAbgAAAAADbgAAAAABbgAAAAABbgAAAAABbgAAAAACbgAAAAADdwAAAAAAVwAAAAABSgAAAAAAVwAAAAADVwAAAAAAVwAAAAAAdwAAAAAAdwAAAAAAagAAAAAAdwAAAAAAbgAAAAAAbgAAAAACbgAAAAAAbgAAAAADbgAAAAAAbgAAAAACdwAAAAAAVwAAAAABVwAAAAACXgAAAAAAVwAAAAACXgAAAAAAXgAAAAAAVwAAAAAAagAAAAAAbwAAAAACbgAAAAABbgAAAAABbgAAAAAAbgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAABVwAAAAADSgAAAAAAVwAAAAACVwAAAAAB version: 6 -1,-1: ind: -1,-1 - tiles: YQAAAAACVwAAAAABdgAAAAAAVwAAAAABVwAAAAAAGwAAAAADGwAAAAADHAAAAAABHAAAAAAAHAAAAAABHAAAAAACHAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAXwAAAAADXwAAAAADdgAAAAAAVwAAAAAAVwAAAAADGwAAAAACGwAAAAACHAAAAAADHAAAAAABHAAAAAAAHAAAAAAAHAAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAXwAAAAAAXwAAAAACdgAAAAAAVwAAAAABVwAAAAACGwAAAAAAGwAAAAADDwAAAAAAHwAAAAABDwAAAAAAHAAAAAACHAAAAAADdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAXwAAAAADXwAAAAADdgAAAAAAVwAAAAABVwAAAAABGwAAAAACGwAAAAABDwAAAAAAHwAAAAADDwAAAAAAHAAAAAADHAAAAAADdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAYQAAAAABVwAAAAAAdgAAAAAAVwAAAAACVwAAAAADGwAAAAABGwAAAAABDwAAAAAAHwAAAAABDwAAAAAAHAAAAAABHAAAAAABdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAXwAAAAAAXwAAAAABdgAAAAAAVwAAAAADVwAAAAAAdgAAAAAAdgAAAAAAIAAAAAACIAAAAAAAIAAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAXwAAAAAAXwAAAAADdgAAAAAAVwAAAAADVwAAAAACdgAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAABVwAAAAABVwAAAAACVwAAAAABVwAAAAADVwAAAAABVwAAAAAAXwAAAAAAXwAAAAADdgAAAAAAVwAAAAACVwAAAAABdgAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAADSgAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAAASgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAADdgAAAAAAVwAAAAADVwAAAAAAVwAAAAABVwAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAADVwAAAAADVwAAAAACVwAAAAACVwAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAABVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAABVwAAAAACVwAAAAACVwAAAAAAVwAAAAACVwAAAAABVwAAAAAAVwAAAAADVwAAAAADVwAAAAACVwAAAAADdgAAAAAAIgAAAAACIgAAAAADOAAAAAAAVwAAAAADVwAAAAADdgAAAAAAIAAAAAABIAAAAAAAdgAAAAAAIAAAAAACIAAAAAADdgAAAAAAVwAAAAABVwAAAAAAVwAAAAADdgAAAAAAIgAAAAABIgAAAAACOAAAAAAAVwAAAAABVwAAAAACdgAAAAAAGwAAAAADGwAAAAABGwAAAAABGwAAAAACGwAAAAABdgAAAAAAVwAAAAACSgAAAAAAVwAAAAAAdgAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAVwAAAAAAVwAAAAABdgAAAAAAGwAAAAACKwAAAAAAKwAAAAAAKwAAAAAAGwAAAAACdgAAAAAAVwAAAAADVwAAAAAAVwAAAAACIAAAAAABIgAAAAACIgAAAAADIgAAAAADVwAAAAABVwAAAAADdgAAAAAAGwAAAAACGwAAAAABGwAAAAAAGwAAAAABGwAAAAACdgAAAAAAVwAAAAADVwAAAAAAVwAAAAAAdgAAAAAAIgAAAAACIgAAAAADIgAAAAABVwAAAAABVwAAAAAAdgAAAAAAGwAAAAACGwAAAAACDwAAAAAADwAAAAAADwAAAAAAdgAAAAAAVwAAAAABVwAAAAACVwAAAAADdgAAAAAAIgAAAAADIgAAAAAAdgAAAAAA + tiles: YgAAAAACVwAAAAABdwAAAAAAVwAAAAABVwAAAAAAGwAAAAADGwAAAAADHAAAAAABHAAAAAAAHAAAAAABHAAAAAACHAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXwAAAAADXwAAAAADdwAAAAAAVwAAAAAAXgAAAAAAGwAAAAACGwAAAAACHAAAAAAAHAAAAAABHAAAAAAAHAAAAAAAHAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXwAAAAAAXwAAAAACdwAAAAAAVwAAAAABVwAAAAACGwAAAAAAGwAAAAADDwAAAAAAHwAAAAABDwAAAAAAHAAAAAACHAAAAAADdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAXwAAAAADXwAAAAADdwAAAAAAVwAAAAABVwAAAAABGwAAAAACGwAAAAABDwAAAAAAHwAAAAADDwAAAAAAHAAAAAADHAAAAAADdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAYgAAAAABVwAAAAAAdwAAAAAAVwAAAAACXgAAAAAAGwAAAAABGwAAAAABDwAAAAAAHwAAAAABDwAAAAAAHAAAAAABHAAAAAABdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAXwAAAAAAXwAAAAABdwAAAAAAVwAAAAADVwAAAAAAdwAAAAAAdwAAAAAAIAAAAAACIAAAAAAAIAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXwAAAAAAXwAAAAADdwAAAAAAVwAAAAADVwAAAAACdwAAAAAAVwAAAAADVwAAAAAAVwAAAAACXgAAAAAAVwAAAAABXgAAAAAAVwAAAAABVwAAAAADVwAAAAABXgAAAAAAXwAAAAAAXwAAAAADdwAAAAAAXgAAAAAAVwAAAAABdwAAAAAAVwAAAAAAVwAAAAABXgAAAAAAVwAAAAADSgAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAAASgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAADdwAAAAAAVwAAAAADVwAAAAAAVwAAAAABVwAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAADVwAAAAADVwAAAAACVwAAAAACVwAAAAAAVwAAAAABVwAAAAACXgAAAAAAVwAAAAAAXgAAAAAAXgAAAAAAVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAABVwAAAAACVwAAAAACXgAAAAAAVwAAAAACVwAAAAABVwAAAAAAVwAAAAADVwAAAAADXgAAAAAAVwAAAAADdwAAAAAAIgAAAAACIgAAAAADOAAAAAAAVwAAAAADVwAAAAADdwAAAAAAIAAAAAABIAAAAAAAdwAAAAAAIAAAAAACIAAAAAADdwAAAAAAVwAAAAABVwAAAAAAVwAAAAADdwAAAAAAIgAAAAABIgAAAAACOAAAAAAAXgAAAAAAVwAAAAACdwAAAAAAGwAAAAADGwAAAAABGwAAAAABGwAAAAACGwAAAAAAdwAAAAAAXgAAAAAASgAAAAAAVwAAAAAAdwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAVwAAAAAAVwAAAAABdwAAAAAAGwAAAAACKwAAAAAAKwAAAAAAKwAAAAAAGwAAAAACdwAAAAAAVwAAAAADXgAAAAAAVwAAAAACIAAAAAABIgAAAAACIgAAAAADIgAAAAADVwAAAAABVwAAAAADdwAAAAAAGwAAAAACGwAAAAABGwAAAAAAGwAAAAABGwAAAAACdwAAAAAAVwAAAAADXgAAAAAAVwAAAAAAdwAAAAAAIgAAAAACIgAAAAADIgAAAAABVwAAAAABVwAAAAAAdwAAAAAAGwAAAAACGwAAAAACDwAAAAAADwAAAAAADwAAAAAAdwAAAAAAVwAAAAABVwAAAAACVwAAAAADdwAAAAAAIgAAAAADIgAAAAAAdwAAAAAA version: 6 0,-1: ind: 0,-1 - tiles: VwAAAAACVwAAAAACVwAAAAABdgAAAAAAcwAAAAADcwAAAAADcwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAADVwAAAAABdgAAAAAAcwAAAAACcwAAAAABcwAAAAADdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAABVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAAAVwAAAAADVwAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAABVwAAAAACVwAAAAABdgAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAAAVwAAAAABVwAAAAADVwAAAAADVwAAAAADVwAAAAAAVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAACVwAAAAAAVwAAAAABVwAAAAABVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAAAVwAAAAABVwAAAAABVwAAAAABdgAAAAAAdgAAAAAAYQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAADVwAAAAAASgAAAAAAVwAAAAAAVwAAAAADVwAAAAACVwAAAAABSgAAAAAAVwAAAAABVwAAAAACVwAAAAADVwAAAAABVwAAAAADdgAAAAAAVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAABVwAAAAADVwAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAAAYQAAAAAAVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAOAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAAAVwAAAAABYQAAAAAAVwAAAAABIgAAAAACIgAAAAAAIgAAAAADOAAAAAAAIgAAAAAAIgAAAAADdgAAAAAAVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAADVwAAAAADVwAAAAADdgAAAAAAYQAAAAABIgAAAAABIgAAAAADIgAAAAABOAAAAAAAIgAAAAABIgAAAAABdgAAAAAAVwAAAAABVwAAAAADVwAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAABdgAAAAAAVwAAAAABOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAVwAAAAABSgAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAADwAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAOAAAAAAAIgAAAAAAIgAAAAADdgAAAAAAVwAAAAABVwAAAAACVwAAAAADdgAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAdgAAAAAAdgAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAdgAAAAAAVwAAAAACVwAAAAABVwAAAAACOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAGwAAAAADGwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAOAAAAAAAOAAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAAAVwAAAAAAdgAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAGwAAAAABGwAAAAAC + tiles: VwAAAAACVwAAAAACVwAAAAABdwAAAAAAdAAAAAADdAAAAAADdAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAADVwAAAAABdwAAAAAAdAAAAAACdAAAAAABdAAAAAADdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAABVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADXgAAAAAAVwAAAAADVwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAABVwAAAAACVwAAAAABdwAAAAAAVwAAAAAAVwAAAAACVwAAAAACXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAVwAAAAACXgAAAAAAVwAAAAABVwAAAAADVwAAAAADVwAAAAADVwAAAAAAVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAAAVwAAAAACXgAAAAAAVwAAAAABVwAAAAABVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAAAXgAAAAAAVwAAAAABVwAAAAABdwAAAAAAdwAAAAAAYgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAADVwAAAAAASgAAAAAAVwAAAAAAVwAAAAADVwAAAAACVwAAAAABSgAAAAAAVwAAAAABVwAAAAACVwAAAAADXgAAAAAAVwAAAAADdwAAAAAAVwAAAAAAVwAAAAACXgAAAAAAVwAAAAAAVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAABVwAAAAADVwAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAAAYgAAAAAAVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAOAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABXgAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAAAVwAAAAABYgAAAAAAVwAAAAABIgAAAAACIgAAAAAAIgAAAAADOAAAAAAAIgAAAAAAIgAAAAADdwAAAAAAVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAADXgAAAAAAVwAAAAADdwAAAAAAYgAAAAABIgAAAAABIgAAAAADIgAAAAABOAAAAAAAIgAAAAABIgAAAAABdwAAAAAAXgAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAABdwAAAAAAVwAAAAABOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAVwAAAAABSgAAAAAAVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAADwAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAOAAAAAAAIgAAAAAAIgAAAAADdwAAAAAAVwAAAAABXgAAAAAAVwAAAAADdwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAdwAAAAAAdwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAdwAAAAAAVwAAAAACVwAAAAABVwAAAAACOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAGwAAAAADGwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAOAAAAAAAOAAAAAAAdwAAAAAAdwAAAAAAVwAAAAADXgAAAAAAVwAAAAAAdwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAGwAAAAABGwAAAAAC version: 6 -1,1: ind: -1,1 - tiles: aQAAAAAAdgAAAAAAbQAAAAACbQAAAAACbQAAAAADbQAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAABVwAAAAAAVwAAAAADbgAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAACdgAAAAAAVwAAAAAAVwAAAAADVwAAAAABaQAAAAAAaQAAAAACaQAAAAAAaQAAAAACagAAAAADagAAAAABdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAaQAAAAACaQAAAAADaQAAAAAAaQAAAAADagAAAAAAagAAAAABdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAcwAAAAACcwAAAAAAdgAAAAAAcwAAAAADcwAAAAABcwAAAAADaQAAAAABaQAAAAABaQAAAAADaQAAAAABagAAAAACagAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAcwAAAAABcwAAAAAAcwAAAAADcwAAAAACcwAAAAACcwAAAAADaQAAAAABaQAAAAACaQAAAAADaQAAAAABagAAAAAAagAAAAACdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAcwAAAAACcwAAAAABdgAAAAAAcwAAAAACcwAAAAAAcwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAADGwAAAAACGwAAAAAASwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAADwAAAAAAGwAAAAACGwAAAAADSwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAAAVwAAAAADVwAAAAACVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAdgAAAAAAVwAAAAADVwAAAAADVwAAAAABVwAAAAABVwAAAAACVwAAAAABdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAABVwAAAAABVwAAAAAAdgAAAAAAVwAAAAACVwAAAAABVwAAAAACVwAAAAACVwAAAAADVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAADVwAAAAADVwAAAAADVwAAAAACVwAAAAABVwAAAAAAVwAAAAADVwAAAAACVwAAAAACVwAAAAACVwAAAAACVwAAAAADVwAAAAACVwAAAAABVwAAAAACVwAAAAAAVwAAAAADVwAAAAADVwAAAAABVwAAAAACdgAAAAAAVwAAAAADVwAAAAABVwAAAAABVwAAAAADVwAAAAABVwAAAAABdgAAAAAAVwAAAAAAVwAAAAADdgAAAAAAVwAAAAADVwAAAAABVwAAAAABVwAAAAABVwAAAAABdgAAAAAAVwAAAAABVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAAD + tiles: agAAAAAAdwAAAAAAbgAAAAACbgAAAAACbgAAAAADbgAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACXgAAAAAAVwAAAAADVwAAAAABVwAAAAAAVwAAAAADbwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAACdwAAAAAAVwAAAAAAVwAAAAADVwAAAAABagAAAAAAagAAAAACagAAAAAAagAAAAACawAAAAADawAAAAABdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAagAAAAACagAAAAADagAAAAAAagAAAAADawAAAAAAawAAAAABdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdAAAAAACdAAAAAAAdwAAAAAAdAAAAAADdAAAAAABdAAAAAADagAAAAABagAAAAABagAAAAADagAAAAABawAAAAACawAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdAAAAAABdAAAAAAAdAAAAAADdAAAAAACdAAAAAACdAAAAAADagAAAAABagAAAAACagAAAAADagAAAAABawAAAAAAawAAAAACdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdAAAAAACdAAAAAABdwAAAAAAdAAAAAACdAAAAAAAdAAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAASwAAAAAASwAAAAAASwAAAAAASwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAADGwAAAAACGwAAAAAASwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAADwAAAAAAGwAAAAACGwAAAAADSwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAAAVwAAAAADVwAAAAACVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAdwAAAAAAVwAAAAADVwAAAAADVwAAAAABVwAAAAABVwAAAAACVwAAAAABdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAAAVwAAAAABVwAAAAABVwAAAAAAdwAAAAAAVwAAAAACVwAAAAABVwAAAAACVwAAAAACVwAAAAADVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAADVwAAAAADVwAAAAADVwAAAAACVwAAAAABVwAAAAAAVwAAAAADVwAAAAACVwAAAAACVwAAAAACVwAAAAACVwAAAAADVwAAAAACVwAAAAABVwAAAAACVwAAAAAAVwAAAAADVwAAAAADVwAAAAABVwAAAAACdwAAAAAAVwAAAAADVwAAAAABVwAAAAABVwAAAAADVwAAAAABVwAAAAABdwAAAAAAVwAAAAAAVwAAAAADdwAAAAAAVwAAAAADVwAAAAABVwAAAAABVwAAAAABVwAAAAABdwAAAAAAVwAAAAABVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAAD version: 6 0,1: ind: 0,1 - tiles: VwAAAAACVwAAAAADVwAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAACVwAAAAABVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAABdgAAAAAAdgAAAAAAVwAAAAADdgAAAAAAdgAAAAAAVwAAAAABVwAAAAACdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAcwAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAABVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAcwAAAAACcwAAAAAAdgAAAAAAVwAAAAACVwAAAAACVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAcwAAAAAAcwAAAAABdgAAAAAAdgAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAABdgAAAAAAGwAAAAADGwAAAAAAcwAAAAADcwAAAAAAcwAAAAAAVwAAAAABVwAAAAABVwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAAAGwAAAAACdgAAAAAAGwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAABVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAADVwAAAAABVwAAAAAAVwAAAAAAVwAAAAABVwAAAAACVwAAAAADdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAGwAAAAACGwAAAAAAGwAAAAABGwAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAABVwAAAAACdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAGwAAAAABGwAAAAACGwAAAAACGwAAAAADdgAAAAAAdgAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAACVwAAAAAAVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAADGwAAAAAAGwAAAAACdgAAAAAAGwAAAAAAVwAAAAADVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAGwAAAAADGwAAAAABGwAAAAACdgAAAAAAdgAAAAAAVwAAAAACVwAAAAADdgAAAAAAcwAAAAABcwAAAAADcwAAAAABdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAGwAAAAACGwAAAAAAGwAAAAABdgAAAAAAGwAAAAADVwAAAAAAVwAAAAABGwAAAAADcwAAAAABcwAAAAACcwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAAAdgAAAAAAcwAAAAABcwAAAAAAcwAAAAABdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAVwAAAAABVwAAAAABdgAAAAAAcwAAAAADcwAAAAAAcwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAVwAAAAABVwAAAAADdgAAAAAAcwAAAAAAcwAAAAAAcwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAA + tiles: VwAAAAACVwAAAAADVwAAAAAAXgAAAAAAXgAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAABdwAAAAAAdwAAAAAAVwAAAAADdwAAAAAAdwAAAAAAVwAAAAABVwAAAAACdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdAAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAABVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdAAAAAACdAAAAAAAdwAAAAAAVwAAAAACVwAAAAACVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdAAAAAAAdAAAAAABdwAAAAAAdwAAAAAAVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAABdwAAAAAAGwAAAAADGwAAAAAAdAAAAAADdAAAAAAAdAAAAAAAVwAAAAABVwAAAAABVwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAAAGwAAAAACdwAAAAAAGwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAABVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAADVwAAAAABVwAAAAAAVwAAAAAAVwAAAAABVwAAAAACVwAAAAADdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAGwAAAAACGwAAAAAAGwAAAAABGwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAABVwAAAAACdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAGwAAAAABGwAAAAACGwAAAAACGwAAAAADdwAAAAAAdwAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAACVwAAAAAAVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAADGwAAAAAAGwAAAAACdwAAAAAAGwAAAAAAVwAAAAADVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAGwAAAAADGwAAAAABGwAAAAACdwAAAAAAdwAAAAAAVwAAAAACVwAAAAADdwAAAAAAdAAAAAABdAAAAAADdAAAAAABdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAGwAAAAACGwAAAAAAGwAAAAABdwAAAAAAGwAAAAADVwAAAAAAVwAAAAABGwAAAAADdAAAAAABdAAAAAACdAAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAAAdwAAAAAAdAAAAAABdAAAAAAAdAAAAAABdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAZgAAAAAAVwAAAAABVwAAAAABdwAAAAAAdAAAAAADdAAAAAAAdAAAAAADdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAVwAAAAABVwAAAAADdwAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAA version: 6 -2,0: ind: -2,0 - tiles: VwAAAAACVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAACVwAAAAADVwAAAAADVwAAAAACVwAAAAACVwAAAAACVwAAAAABVwAAAAAAVwAAAAACVwAAAAADVwAAAAABVwAAAAABVwAAAAAAVwAAAAADVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAADVwAAAAABVwAAAAACVwAAAAABVwAAAAABVwAAAAACVwAAAAACVwAAAAAAVwAAAAADVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAADVwAAAAADVwAAAAABVwAAAAADVwAAAAABVwAAAAABVwAAAAABVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAACdgAAAAAAdgAAAAAAVwAAAAABVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAcwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAbAAAAAAAbAAAAAADbAAAAAABbAAAAAADdgAAAAAAagAAAAADagAAAAACdgAAAAAAagAAAAAAagAAAAADdgAAAAAAcwAAAAABdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAbAAAAAACbAAAAAABbAAAAAAAbAAAAAAAdgAAAAAAagAAAAABagAAAAACdgAAAAAAagAAAAADagAAAAADdgAAAAAAcwAAAAABdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAbAAAAAABbAAAAAADbAAAAAAAbAAAAAAAdgAAAAAAbgAAAAADbgAAAAAAdgAAAAAAbgAAAAABbgAAAAABdgAAAAAAcwAAAAADdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAbgAAAAADdgAAAAAAdgAAAAAAaQAAAAAAaQAAAAACaQAAAAADaQAAAAACaQAAAAADaQAAAAACcwAAAAABdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAaQAAAAADaQAAAAACaQAAAAADaQAAAAACaQAAAAAAaQAAAAADaQAAAAADaQAAAAABaQAAAAADaQAAAAADaQAAAAABcwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAaQAAAAACaQAAAAABaQAAAAADaQAAAAADaQAAAAACaQAAAAADaQAAAAADaQAAAAAAaQAAAAADaQAAAAADaQAAAAAAcwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAaQAAAAAAaQAAAAABaQAAAAAAaQAAAAADaQAAAAABaQAAAAABaQAAAAABaQAAAAADaQAAAAAAaQAAAAABaQAAAAACdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAIAAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAaQAAAAAAPAAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAHAAAAAABHAAAAAACHAAAAAACHAAAAAACHAAAAAADdgAAAAAAGwAAAAACGwAAAAABGwAAAAABdgAAAAAAaQAAAAADPAAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAHAAAAAABHAAAAAAAHAAAAAAAHAAAAAAAHAAAAAADdgAAAAAAGwAAAAADGwAAAAACGwAAAAAAdgAAAAAAaQAAAAACPAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAHAAAAAAAHAAAAAADHAAAAAAAHAAAAAADHAAAAAAAdgAAAAAAGwAAAAADGwAAAAADGwAAAAACIAAAAAAAaQAAAAAC + tiles: XgAAAAAAVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAACVwAAAAADXgAAAAAAVwAAAAACVwAAAAACVwAAAAACVwAAAAABVwAAAAAAXgAAAAAAVwAAAAADVwAAAAABVwAAAAABVwAAAAAAVwAAAAADVwAAAAABVwAAAAAAXgAAAAAAVwAAAAACVwAAAAABVwAAAAADVwAAAAABVwAAAAACVwAAAAABXgAAAAAAVwAAAAACVwAAAAACVwAAAAAAXgAAAAAAVwAAAAABXgAAAAAAVwAAAAADVwAAAAAAXgAAAAAAVwAAAAADVwAAAAADVwAAAAABVwAAAAADXgAAAAAAVwAAAAABVwAAAAABVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAXgAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAbQAAAAAAbQAAAAADbQAAAAABbQAAAAADdwAAAAAAawAAAAADawAAAAACdwAAAAAAawAAAAAAawAAAAADdwAAAAAAdAAAAAABdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAbQAAAAACbQAAAAABbQAAAAAAbQAAAAAAdwAAAAAAawAAAAABawAAAAACdwAAAAAAawAAAAADawAAAAADdwAAAAAAdAAAAAABdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAbQAAAAABbQAAAAADbQAAAAAAbQAAAAAAdwAAAAAAbwAAAAADbwAAAAAAdwAAAAAAbwAAAAABbwAAAAABdwAAAAAAdAAAAAADdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAbwAAAAADdwAAAAAAdwAAAAAAagAAAAAAagAAAAACagAAAAADagAAAAACagAAAAADagAAAAACdAAAAAABdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAagAAAAADagAAAAACagAAAAADagAAAAACagAAAAAAagAAAAADagAAAAADagAAAAABagAAAAADagAAAAADagAAAAABdAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAagAAAAACagAAAAABagAAAAADagAAAAADagAAAAACagAAAAADagAAAAADagAAAAAAagAAAAADagAAAAADagAAAAAAdAAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAagAAAAAAagAAAAABagAAAAAAagAAAAADagAAAAABagAAAAABagAAAAABagAAAAADagAAAAAAagAAAAABagAAAAACdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAIAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAagAAAAAAPAAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAHAAAAAABHAAAAAACHAAAAAACHAAAAAACHAAAAAADdwAAAAAAGwAAAAACGwAAAAABGwAAAAABdwAAAAAAagAAAAADPAAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAHAAAAAABHAAAAAAAHAAAAAAAHAAAAAAAHAAAAAADdwAAAAAAGwAAAAADGwAAAAACGwAAAAAAdwAAAAAAagAAAAACPAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAHAAAAAAAHAAAAAADHAAAAAAAHAAAAAADHAAAAAAAdwAAAAAAGwAAAAADGwAAAAADGwAAAAACIAAAAAAAagAAAAAC version: 6 1,0: ind: 1,0 - tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAVwAAAAADVwAAAAADVwAAAAABdgAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAAAVwAAAAABVwAAAAADVwAAAAACVwAAAAADVwAAAAADVwAAAAABVwAAAAADVwAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAABVwAAAAAAVwAAAAABVwAAAAAAVwAAAAACVwAAAAAAVwAAAAABVwAAAAACVwAAAAADVwAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAABVwAAAAABVwAAAAACVwAAAAADVwAAAAABVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAADVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAADdgAAAAAAVwAAAAACVwAAAAABVwAAAAADVwAAAAACdgAAAAAAcwAAAAABcwAAAAABcwAAAAAAcwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAABdgAAAAAAVwAAAAAAVwAAAAAAVwAAAAABVwAAAAADdgAAAAAAcwAAAAADcwAAAAACcwAAAAAAcwAAAAABdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADdgAAAAAAVwAAAAADVwAAAAABVwAAAAABVwAAAAACdgAAAAAAdgAAAAAAcwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAABVwAAAAADVwAAAAACVwAAAAABVwAAAAAAVwAAAAACVwAAAAAAVwAAAAADVwAAAAADVwAAAAABVwAAAAAAVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAACVwAAAAACVwAAAAABVwAAAAADVwAAAAAAVwAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAADVwAAAAABVwAAAAABVwAAAAADVwAAAAAAVwAAAAABVwAAAAACVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAAAVwAAAAABVwAAAAABVwAAAAABVwAAAAAAVwAAAAABVwAAAAADVwAAAAACVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAGwAAAAADdgAAAAAAVwAAAAADVwAAAAAAVwAAAAAAVwAAAAACVwAAAAADVwAAAAACdgAAAAAAGwAAAAADGwAAAAADGwAAAAABGwAAAAACGwAAAAACdgAAAAAAVwAAAAABGwAAAAADdgAAAAAAVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAAAdgAAAAAAGwAAAAACGwAAAAADGwAAAAABGwAAAAAAGwAAAAAAGwAAAAACVwAAAAADGwAAAAAAdgAAAAAAVwAAAAACVwAAAAACVwAAAAABVwAAAAABVwAAAAADVwAAAAABdgAAAAAAGwAAAAAAGwAAAAAAGwAAAAABGwAAAAABGwAAAAACdgAAAAAAVwAAAAAAGwAAAAADdgAAAAAAVwAAAAACVwAAAAADVwAAAAADVwAAAAABVwAAAAAAVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAC + tiles: dwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAADXgAAAAAAVwAAAAADXgAAAAAAVwAAAAABdwAAAAAAVwAAAAAAVwAAAAABVwAAAAAAXgAAAAAAVwAAAAABVwAAAAADVwAAAAACVwAAAAADVwAAAAADVwAAAAABVwAAAAADVwAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAABVwAAAAAAVwAAAAABVwAAAAAAVwAAAAACVwAAAAAAVwAAAAABVwAAAAACVwAAAAADXgAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAABXgAAAAAAVwAAAAACVwAAAAADXgAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAXgAAAAAAXgAAAAAAVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAXgAAAAAAdwAAAAAAVwAAAAACVwAAAAABVwAAAAADVwAAAAACdwAAAAAAdAAAAAABdAAAAAABdAAAAAAAdAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAXgAAAAAAdwAAAAAAVwAAAAAAVwAAAAAAVwAAAAABVwAAAAADdwAAAAAAdAAAAAADdAAAAAACdAAAAAAAdAAAAAABdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADdwAAAAAAVwAAAAADVwAAAAABVwAAAAABVwAAAAACdwAAAAAAdwAAAAAAdAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAABVwAAAAADVwAAAAACVwAAAAABVwAAAAAAXgAAAAAAVwAAAAAAVwAAAAADVwAAAAADVwAAAAABXgAAAAAAVwAAAAABVwAAAAAAXgAAAAAAVwAAAAAAVwAAAAABVwAAAAACXgAAAAAAVwAAAAACVwAAAAACVwAAAAABVwAAAAADVwAAAAAAVwAAAAAAXgAAAAAAVwAAAAACVwAAAAAAVwAAAAADVwAAAAABVwAAAAABVwAAAAADVwAAAAAAVwAAAAABVwAAAAACVwAAAAABXgAAAAAAVwAAAAAAVwAAAAACVwAAAAAAVwAAAAABVwAAAAABVwAAAAABVwAAAAAAVwAAAAABXgAAAAAAVwAAAAACVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAGwAAAAADdwAAAAAAVwAAAAADVwAAAAAAVwAAAAAAVwAAAAACVwAAAAADVwAAAAACdwAAAAAAGwAAAAADGwAAAAADGwAAAAABGwAAAAACGwAAAAACdwAAAAAAXgAAAAAAGwAAAAADdwAAAAAAVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAAAdwAAAAAAGwAAAAACGwAAAAADGwAAAAABGwAAAAAAGwAAAAAAGwAAAAACVwAAAAADGwAAAAAAdwAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAABVwAAAAADVwAAAAABdwAAAAAAGwAAAAAAGwAAAAAAGwAAAAABGwAAAAABGwAAAAACdwAAAAAAVwAAAAAAGwAAAAADdwAAAAAAVwAAAAACVwAAAAADVwAAAAADVwAAAAABVwAAAAAAVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAC version: 6 0,-2: ind: 0,-2 - tiles: VwAAAAADVwAAAAACVwAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAABVwAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAACdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAADVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAAAVwAAAAACdgAAAAAAVwAAAAAAVwAAAAACVwAAAAABdgAAAAAAVwAAAAABVwAAAAACVwAAAAACVwAAAAABVwAAAAABVwAAAAAAVwAAAAABVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAdgAAAAAAVwAAAAAAVwAAAAABVwAAAAACYQAAAAADVwAAAAADVwAAAAAAVwAAAAAAVwAAAAABVwAAAAABVwAAAAAAVwAAAAADVwAAAAADVwAAAAAAVwAAAAACVwAAAAABdgAAAAAAVwAAAAACVwAAAAACVwAAAAADdgAAAAAAVwAAAAACVwAAAAAAVwAAAAAAVwAAAAABVwAAAAABVwAAAAAAVwAAAAAAVwAAAAABVwAAAAABVwAAAAACVwAAAAABdgAAAAAAdgAAAAAAYQAAAAADdgAAAAAAdgAAAAAAdgAAAAAAYQAAAAACYQAAAAACdgAAAAAAdgAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAABVwAAAAACVwAAAAACVwAAAAACVwAAAAADVwAAAAACVwAAAAADYQAAAAADVwAAAAAAVwAAAAABVwAAAAABVwAAAAABdgAAAAAAVwAAAAAAVwAAAAADVwAAAAACVwAAAAADVwAAAAABVwAAAAADVwAAAAAAVwAAAAACVwAAAAABVwAAAAACdgAAAAAAVwAAAAADVwAAAAABVwAAAAADVwAAAAAAYQAAAAABVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAADVwAAAAACVwAAAAABVwAAAAADYQAAAAADVwAAAAAAVwAAAAADVwAAAAACVwAAAAAAYQAAAAADVwAAAAABVwAAAAABVwAAAAAAVwAAAAADVwAAAAACVwAAAAACVwAAAAABVwAAAAABVwAAAAADVwAAAAAAYQAAAAAAVwAAAAADVwAAAAACVwAAAAADVwAAAAADdgAAAAAAVwAAAAADVwAAAAABVwAAAAABVwAAAAACVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAABdgAAAAAAVwAAAAABVwAAAAABVwAAAAADVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAACVwAAAAADVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAVwAAAAABVwAAAAABVwAAAAAAdgAAAAAAcwAAAAAAcwAAAAADcwAAAAABcwAAAAAAVwAAAAAAVwAAAAABVwAAAAACVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAVwAAAAACVwAAAAAAVwAAAAABdgAAAAAAcwAAAAAAcwAAAAABcwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAA + tiles: XgAAAAAAVwAAAAACVwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABXgAAAAAAVwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAAAXgAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAADVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAAAVwAAAAACdwAAAAAAVwAAAAAAVwAAAAACVwAAAAABdwAAAAAAVwAAAAABVwAAAAACVwAAAAACVwAAAAABVwAAAAABVwAAAAAAVwAAAAABVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAdwAAAAAAVwAAAAAAVwAAAAABVwAAAAACYgAAAAADVwAAAAADVwAAAAAAVwAAAAAAVwAAAAABXgAAAAAAVwAAAAAAVwAAAAADVwAAAAADVwAAAAAAVwAAAAACXgAAAAAAdwAAAAAAVwAAAAACVwAAAAACVwAAAAADdwAAAAAAVwAAAAACVwAAAAAAXgAAAAAAVwAAAAABVwAAAAABVwAAAAAAXgAAAAAAVwAAAAABVwAAAAABVwAAAAACVwAAAAABdwAAAAAAdwAAAAAAYgAAAAADdwAAAAAAdwAAAAAAdwAAAAAAYgAAAAACYgAAAAACdwAAAAAAdwAAAAAAVwAAAAACXgAAAAAAVwAAAAAAVwAAAAABXgAAAAAAVwAAAAACVwAAAAACXgAAAAAAVwAAAAACVwAAAAADYgAAAAADVwAAAAAAXgAAAAAAVwAAAAABVwAAAAABdwAAAAAAVwAAAAAAVwAAAAADXgAAAAAAVwAAAAADVwAAAAABVwAAAAADVwAAAAAAVwAAAAACVwAAAAABXgAAAAAAdwAAAAAAVwAAAAADVwAAAAABXgAAAAAAVwAAAAAAYgAAAAABVwAAAAABXgAAAAAAXgAAAAAAVwAAAAACVwAAAAACVwAAAAAAXgAAAAAAVwAAAAACVwAAAAABVwAAAAADYgAAAAADVwAAAAAAVwAAAAADVwAAAAACVwAAAAAAYgAAAAADXgAAAAAAVwAAAAABVwAAAAAAVwAAAAADVwAAAAACVwAAAAACVwAAAAABXgAAAAAAVwAAAAADXgAAAAAAYgAAAAAAVwAAAAADXgAAAAAAVwAAAAADVwAAAAADdwAAAAAAVwAAAAADVwAAAAABVwAAAAABXgAAAAAAVwAAAAABVwAAAAABVwAAAAABVwAAAAABVwAAAAABXgAAAAAAdwAAAAAAVwAAAAABVwAAAAABVwAAAAADVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAAAVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABXgAAAAAAVwAAAAADXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAVwAAAAABVwAAAAABXgAAAAAAdwAAAAAAdAAAAAAAdAAAAAADdAAAAAABdAAAAAAAVwAAAAAAVwAAAAABVwAAAAACVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAVwAAAAACVwAAAAAAVwAAAAABdwAAAAAAdAAAAAAAdAAAAAABdAAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAA version: 6 -2,1: ind: -2,1 - tiles: PAAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAHAAAAAAAHAAAAAACHAAAAAABHAAAAAADHAAAAAAAdgAAAAAAGwAAAAAAGwAAAAABGwAAAAABdgAAAAAAaQAAAAABdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAbgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAaQAAAAADaQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAaQAAAAADaQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAaQAAAAAALgAAAAADaQAAAAACaQAAAAAALgAAAAABdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAaQAAAAACaQAAAAABZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAaQAAAAACdgAAAAAALgAAAAACdgAAAAAAaQAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAaQAAAAACaQAAAAACdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAALgAAAAABaQAAAAABaQAAAAACLgAAAAAALgAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAALgAAAAADaQAAAAABdgAAAAAAaQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAaQAAAAAALgAAAAADLgAAAAADdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAA + tiles: PAAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAHAAAAAAAHAAAAAACHAAAAAABHAAAAAADHAAAAAAAdwAAAAAAGwAAAAAAGwAAAAABGwAAAAABdwAAAAAAagAAAAABdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAbwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAagAAAAADagAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAagAAAAADagAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAagAAAAAALgAAAAADagAAAAACagAAAAAALgAAAAABdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAagAAAAACagAAAAABZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAagAAAAACdwAAAAAALgAAAAACdwAAAAAAagAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAagAAAAACagAAAAACdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAALgAAAAABagAAAAABagAAAAACLgAAAAAALgAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAALgAAAAADagAAAAABdwAAAAAAagAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAagAAAAAALgAAAAADLgAAAAADdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAA version: 6 0,2: ind: 0,2 - tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: dwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,2: ind: -1,2 - tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAACAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAABVwAAAAACdgAAAAAAGwAAAAACGwAAAAACGwAAAAABZQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAAAVwAAAAABGwAAAAABGwAAAAACGwAAAAAAGwAAAAADZQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAAAVwAAAAADdgAAAAAAGwAAAAADGwAAAAADGwAAAAABZQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAA + tiles: dwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAACAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAABVwAAAAACdwAAAAAAGwAAAAACGwAAAAACGwAAAAABZgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAAAVwAAAAABGwAAAAABGwAAAAACGwAAAAAAGwAAAAADZgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAAAVwAAAAADdwAAAAAAGwAAAAADGwAAAAADGwAAAAABZgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAA version: 6 -2,2: ind: -2,2 - tiles: dQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -2,-1: ind: -2,-1 - tiles: cwAAAAAAcwAAAAAAcwAAAAAAcwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAYQAAAAACYQAAAAABdgAAAAAAGwAAAAADGwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdQAAAAAAdgAAAAAASwAAAAAASwAAAAAAdgAAAAAAXwAAAAAAYQAAAAAAGwAAAAADGwAAAAABGwAAAAABdgAAAAAAGwAAAAADdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAASwAAAAAASwAAAAAASwAAAAAAXwAAAAACXwAAAAACGwAAAAAAdgAAAAAAGwAAAAABGwAAAAACGwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAASwAAAAAASwAAAAAAdgAAAAAAXwAAAAAAYQAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAYQAAAAADYQAAAAADZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAASwAAAAAASwAAAAAAdgAAAAAAXwAAAAABYQAAAAABdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdQAAAAAAdgAAAAAASwAAAAAASwAAAAAASwAAAAAAXwAAAAAAXwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAASwAAAAAASwAAAAAAdgAAAAAAXwAAAAACYQAAAAADHAAAAAADHAAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAADVwAAAAACVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAHAAAAAACHAAAAAADHAAAAAABVwAAAAABVwAAAAADVwAAAAAAVwAAAAAAVwAAAAACVwAAAAAAVwAAAAAAVwAAAAABVwAAAAABVwAAAAADVwAAAAABVwAAAAABVwAAAAADHAAAAAAAHAAAAAADdgAAAAAAVwAAAAAAVwAAAAABVwAAAAADVwAAAAABVwAAAAABVwAAAAADVwAAAAABVwAAAAADVwAAAAAAVwAAAAAAVwAAAAADVwAAAAAAVwAAAAAAHAAAAAACHAAAAAABdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAABVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAADGwAAAAADGwAAAAADGwAAAAABGwAAAAAAdgAAAAAAcwAAAAADcwAAAAABcwAAAAAAdgAAAAAAVwAAAAADVwAAAAAAVwAAAAACZQAAAAAAZQAAAAAAdgAAAAAAGwAAAAABDwAAAAAAIAAAAAADDwAAAAAAGwAAAAABdgAAAAAAcwAAAAADcwAAAAAAcwAAAAABcwAAAAADVwAAAAABVwAAAAADVwAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAGwAAAAABIAAAAAADDwAAAAAAIAAAAAACGwAAAAAAdgAAAAAAcwAAAAABcwAAAAABcwAAAAACdgAAAAAAVwAAAAACVwAAAAADVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAAADwAAAAAAIAAAAAACDwAAAAAAGwAAAAADdgAAAAAAcwAAAAACcwAAAAADcwAAAAABdgAAAAAAVwAAAAABVwAAAAAAVwAAAAAD + tiles: dAAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAYgAAAAACYgAAAAABdwAAAAAAGwAAAAADGwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdgAAAAAAdwAAAAAASwAAAAAASwAAAAAAdwAAAAAAXwAAAAAAYgAAAAAAGwAAAAADGwAAAAABGwAAAAABdwAAAAAAGwAAAAADdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAASwAAAAAASwAAAAAASwAAAAAAXwAAAAACXwAAAAACGwAAAAAAdwAAAAAAGwAAAAABGwAAAAACGwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAASwAAAAAASwAAAAAAdwAAAAAAXwAAAAAAYgAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAYgAAAAADYgAAAAADZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAASwAAAAAASwAAAAAAdwAAAAAAXwAAAAABYgAAAAABdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdgAAAAAAdwAAAAAASwAAAAAASwAAAAAASwAAAAAAXwAAAAAAXwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAASwAAAAAASwAAAAAAdwAAAAAAXwAAAAACYgAAAAADHAAAAAADHAAAAAAAdwAAAAAAXgAAAAAAVwAAAAAAVwAAAAADVwAAAAACVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAHAAAAAACHAAAAAADHAAAAAABVwAAAAABVwAAAAADVwAAAAAAXgAAAAAAVwAAAAACVwAAAAAAVwAAAAAAVwAAAAABXgAAAAAAVwAAAAADXgAAAAAAVwAAAAABVwAAAAADHAAAAAAAHAAAAAADdwAAAAAAVwAAAAAAXgAAAAAAVwAAAAADVwAAAAABXgAAAAAAVwAAAAADVwAAAAABXgAAAAAAVwAAAAAAVwAAAAAAVwAAAAADVwAAAAAAXgAAAAAAHAAAAAACHAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAABVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAADGwAAAAADGwAAAAADGwAAAAABGwAAAAAAdwAAAAAAdAAAAAADdAAAAAABdAAAAAAAdwAAAAAAVwAAAAADXgAAAAAAVwAAAAACZgAAAAAAZgAAAAAAdwAAAAAAGwAAAAABDwAAAAAAIAAAAAADDwAAAAAAGwAAAAABdwAAAAAAdAAAAAADdAAAAAAAdAAAAAABdAAAAAADXgAAAAAAVwAAAAADXgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAGwAAAAABIAAAAAADDwAAAAAAIAAAAAACGwAAAAAAdwAAAAAAdAAAAAABdAAAAAABdAAAAAACdwAAAAAAVwAAAAACVwAAAAADVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAAADwAAAAAAIAAAAAACDwAAAAAAGwAAAAADdwAAAAAAdAAAAAACdAAAAAADdAAAAAABdwAAAAAAVwAAAAABVwAAAAAAVwAAAAAD version: 6 -1,-2: ind: -1,-2 - tiles: AAAAAAAAdgAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAEgAAAAAAEgAAAAAAdgAAAAAAIAAAAAACGwAAAAAAdgAAAAAAVwAAAAAAVwAAAAABVwAAAAADVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAEgAAAAAAEgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAEgAAAAAAEgAAAAAAdgAAAAAAcwAAAAAAcwAAAAACcwAAAAADdgAAAAAAcwAAAAACcwAAAAABcwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAEgAAAAAAEgAAAAAAdgAAAAAAcwAAAAABcwAAAAACcwAAAAACdgAAAAAAcwAAAAADcwAAAAABcwAAAAAAdgAAAAAATgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAcwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAcwAAAAAAdgAAAAAAdgAAAAAATgAAAAAAdgAAAAAAVwAAAAACVwAAAAABVwAAAAAAVwAAAAABVwAAAAADVwAAAAADVwAAAAABVwAAAAADVwAAAAABVwAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAAATgAAAAAATgAAAAAAVwAAAAAAVwAAAAADVwAAAAADVwAAAAABVwAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAABVwAAAAADVwAAAAABVwAAAAACVwAAAAABVwAAAAADTgAAAAAAdgAAAAAAVwAAAAACVwAAAAADVwAAAAACVwAAAAABVwAAAAACVwAAAAABVwAAAAACVwAAAAACVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAVwAAAAABVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAOwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAXAAAAAABXAAAAAADdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAXAAAAAADXAAAAAACdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAXAAAAAADXAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAA + tiles: AAAAAAAAdwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAEgAAAAAAEgAAAAAAdwAAAAAAIAAAAAACGwAAAAAAdwAAAAAAVwAAAAAAVwAAAAABVwAAAAADVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAEgAAAAAAEgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAEgAAAAAAEgAAAAAAdwAAAAAAdAAAAAAAdAAAAAACdAAAAAADdwAAAAAAdAAAAAACdAAAAAABdAAAAAACdwAAAAAAdwAAAAAAdwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAEgAAAAAAEgAAAAAAdwAAAAAAdAAAAAABdAAAAAACdAAAAAACdwAAAAAAdAAAAAADdAAAAAABdAAAAAAAdwAAAAAATgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdAAAAAAAdwAAAAAAdwAAAAAATgAAAAAAdwAAAAAAVwAAAAACVwAAAAABVwAAAAAAVwAAAAABXgAAAAAAVwAAAAADVwAAAAABVwAAAAADVwAAAAABVwAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAAATgAAAAAATgAAAAAAVwAAAAAAVwAAAAADXgAAAAAAVwAAAAABVwAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAABVwAAAAADVwAAAAABXgAAAAAAVwAAAAABVwAAAAADTgAAAAAAdwAAAAAAVwAAAAACVwAAAAADXgAAAAAAVwAAAAABVwAAAAACVwAAAAABVwAAAAACXgAAAAAAVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAXgAAAAAAVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAOwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXAAAAAABXAAAAAADdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAXAAAAAADXAAAAAACdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXAAAAAADXAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAA version: 6 -2,-2: ind: -2,-2 - tiles: dQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAATgAAAAAAdgAAAAAATgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAATgAAAAAAdgAAAAAATgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAXAAAAAACXAAAAAAAXAAAAAACXAAAAAAAXAAAAAABcwAAAAABcwAAAAABdgAAAAAAcwAAAAABdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAXAAAAAAAXAAAAAADXAAAAAADXAAAAAACXAAAAAADdgAAAAAAcwAAAAADdgAAAAAAcwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAXAAAAAADXAAAAAAAXAAAAAABXAAAAAAAXAAAAAAC + tiles: dgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAATgAAAAAAdwAAAAAATgAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAATgAAAAAAdwAAAAAATgAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAXAAAAAACXAAAAAAAXAAAAAACXAAAAAAAXAAAAAABdAAAAAABdAAAAAABdwAAAAAAdAAAAAABdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXAAAAAAAXAAAAAADXAAAAAADXAAAAAACXAAAAAADdwAAAAAAdAAAAAADdwAAAAAAdAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXAAAAAADXAAAAAAAXAAAAAABXAAAAAAAXAAAAAAC version: 6 -3,-1: ind: -3,-1 - tiles: AAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAXAAAAAADXAAAAAACXAAAAAACXAAAAAABdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAcwAAAAACdgAAAAAAcwAAAAACAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAXAAAAAABXAAAAAABXAAAAAADXAAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAPAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAcwAAAAAAcwAAAAADcwAAAAADcwAAAAAAcwAAAAAAcwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAcwAAAAADcwAAAAABcwAAAAADcwAAAAABcwAAAAAAcwAAAAACdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAcwAAAAADcwAAAAACcwAAAAADcwAAAAACcwAAAAABcwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAcwAAAAAAcwAAAAADcwAAAAABcwAAAAACcwAAAAAAcwAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAcwAAAAAAcwAAAAABcwAAAAACcwAAAAADcwAAAAADcwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAcwAAAAAAcwAAAAABcwAAAAAAcwAAAAABcwAAAAABcwAAAAADdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAcwAAAAABcwAAAAABcwAAAAADcwAAAAAAcwAAAAACcwAAAAACdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAcwAAAAACcwAAAAADcwAAAAACcwAAAAACcwAAAAABcwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAA + tiles: AAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAXAAAAAADXAAAAAACXAAAAAACXAAAAAABdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdAAAAAACdwAAAAAAdAAAAAACAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAXAAAAAABXAAAAAABXAAAAAADXAAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAPAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdAAAAAAAdAAAAAADdAAAAAADdAAAAAAAdAAAAAAAdAAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdAAAAAADdAAAAAABdAAAAAADdAAAAAABdAAAAAAAdAAAAAACdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdAAAAAADdAAAAAACdAAAAAADdAAAAAACdAAAAAABdAAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdAAAAAAAdAAAAAADdAAAAAABdAAAAAACdAAAAAAAdAAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdAAAAAAAdAAAAAABdAAAAAACdAAAAAADdAAAAAADdAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdAAAAAAAdAAAAAABdAAAAAAAdAAAAAABdAAAAAABdAAAAAADdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdAAAAAABdAAAAAABdAAAAAADdAAAAAAAdAAAAAACdAAAAAACdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdAAAAAACdAAAAAADdAAAAAACdAAAAAACdAAAAAABdAAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAA version: 6 1,1: ind: 1,1 - tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAADGwAAAAABGwAAAAAAdgAAAAAAVwAAAAACdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAADGwAAAAABGwAAAAABGwAAAAADVwAAAAADdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAACGwAAAAABGwAAAAABdgAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACdgAAAAAAGwAAAAADdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAVwAAAAACGwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAACdgAAAAAAVwAAAAABVwAAAAADVwAAAAACVwAAAAABdgAAAAAAdgAAAAAAGwAAAAACGwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAADVwAAAAAAVwAAAAAAVwAAAAADVwAAAAADGwAAAAACdgAAAAAAGwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAABVwAAAAAAVwAAAAADVwAAAAADGwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAADVwAAAAADVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAABdgAAAAAAVwAAAAADVwAAAAADVwAAAAACVwAAAAACVwAAAAABdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAA + tiles: dwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAADGwAAAAABGwAAAAAAdwAAAAAAXgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAADGwAAAAABGwAAAAABGwAAAAADVwAAAAADdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAACGwAAAAABGwAAAAABdwAAAAAAVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAdwAAAAAAGwAAAAADdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAXgAAAAAAGwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAACdwAAAAAAVwAAAAABVwAAAAADXgAAAAAAXgAAAAAAdwAAAAAAdwAAAAAAGwAAAAACGwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAADXgAAAAAAVwAAAAAAVwAAAAADXgAAAAAAGwAAAAACdwAAAAAAGwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAVwAAAAADVwAAAAADGwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAADVwAAAAADVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAABdwAAAAAAXgAAAAAAVwAAAAADVwAAAAACXgAAAAAAVwAAAAABdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAA version: 6 2,0: ind: 2,0 - tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAADVwAAAAAAVwAAAAAAVwAAAAABVwAAAAADVwAAAAABVwAAAAAAVwAAAAACVwAAAAAAVwAAAAABVwAAAAADVwAAAAADVwAAAAACVwAAAAACdgAAAAAAVwAAAAADVwAAAAADVwAAAAACVwAAAAADVwAAAAADVwAAAAACVwAAAAABVwAAAAABVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAABdgAAAAAAVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAACVwAAAAADVwAAAAACVwAAAAAAVwAAAAABVwAAAAAAVwAAAAABVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAABVwAAAAAAdgAAAAAAVwAAAAABVwAAAAABVwAAAAACdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAACVwAAAAADdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAVwAAAAACVwAAAAABVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAACVwAAAAADdgAAAAAAVwAAAAAAVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAAAVwAAAAABdgAAAAAAVwAAAAADVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAADVwAAAAAAdgAAAAAAVwAAAAAAVwAAAAABdgAAAAAAdgAAAAAAGwAAAAABGwAAAAABGwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAACVwAAAAACdgAAAAAAVwAAAAACVwAAAAACGwAAAAADGwAAAAABGwAAAAAAGwAAAAADGwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAVwAAAAAAVwAAAAADVwAAAAADdgAAAAAAVwAAAAAAVwAAAAADdgAAAAAAdgAAAAAAGwAAAAADGwAAAAADGwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAABdgAAAAAAVwAAAAADVwAAAAABdgAAAAAAdgAAAAAAGwAAAAAAGwAAAAADGwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAVwAAAAABVwAAAAABVwAAAAAAdgAAAAAAVwAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAABVwAAAAAAdgAAAAAAVwAAAAABVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAACdgAAAAAA + tiles: dwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAADXgAAAAAAVwAAAAAAVwAAAAABVwAAAAADXgAAAAAAVwAAAAAAVwAAAAACVwAAAAAAXgAAAAAAVwAAAAADVwAAAAADXgAAAAAAVwAAAAACdwAAAAAAVwAAAAADXgAAAAAAVwAAAAACVwAAAAADVwAAAAADVwAAAAACXgAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAXgAAAAAAVwAAAAABVwAAAAABdwAAAAAAVwAAAAABVwAAAAAAVwAAAAADXgAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAACVwAAAAADVwAAAAACVwAAAAAAVwAAAAABVwAAAAAAXgAAAAAAXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAACXgAAAAAAVwAAAAABVwAAAAAAdwAAAAAAVwAAAAABVwAAAAABXgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAACVwAAAAADdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAVwAAAAACXgAAAAAAVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAACVwAAAAADdwAAAAAAVwAAAAAAXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAAAXgAAAAAAdwAAAAAAVwAAAAADVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAADVwAAAAAAdwAAAAAAXgAAAAAAVwAAAAABdwAAAAAAdwAAAAAAGwAAAAABGwAAAAABGwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAACVwAAAAACdwAAAAAAVwAAAAACVwAAAAACGwAAAAADGwAAAAABGwAAAAAAGwAAAAADGwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAVwAAAAAAVwAAAAADVwAAAAADdwAAAAAAVwAAAAAAXgAAAAAAdwAAAAAAdwAAAAAAGwAAAAADGwAAAAADGwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAVwAAAAABXgAAAAAAXgAAAAAAdwAAAAAAVwAAAAADVwAAAAABdwAAAAAAdwAAAAAAGwAAAAAAGwAAAAADGwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAVwAAAAABVwAAAAABVwAAAAAAdwAAAAAAXgAAAAAAVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAABVwAAAAAAdwAAAAAAVwAAAAABVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAAAXgAAAAAAdwAAAAAA version: 6 2,1: ind: 2,1 - tiles: VwAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAACVwAAAAABdgAAAAAAVwAAAAAAVwAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAVwAAAAAAVwAAAAAAVwAAAAABdgAAAAAAVwAAAAACVwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAABVwAAAAACdgAAAAAAVwAAAAACVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAdgAAAAAAVwAAAAABVwAAAAADVwAAAAADdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAAAVwAAAAADdgAAAAAAVwAAAAABVwAAAAAAVwAAAAADdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAADVwAAAAACVwAAAAABdgAAAAAAVwAAAAAAVwAAAAACVwAAAAABdgAAAAAAVwAAAAAAVwAAAAACdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAVwAAAAAAVwAAAAADVwAAAAAAVwAAAAADVwAAAAADVwAAAAAAVwAAAAADVwAAAAAAdgAAAAAAVwAAAAAAVwAAAAADYQAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAABdgAAAAAAVwAAAAACVwAAAAAAVwAAAAADdgAAAAAAVwAAAAACVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADdgAAAAAAdgAAAAAAVwAAAAADVwAAAAADdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAABVwAAAAAAVwAAAAACVwAAAAABVwAAAAAAdgAAAAAAVwAAAAADVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAADKwAAAAAAKwAAAAAAVwAAAAADVwAAAAACVwAAAAACdgAAAAAAVwAAAAADVwAAAAABdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAACVwAAAAACKwAAAAAAKwAAAAAAVwAAAAAAVwAAAAADVwAAAAADdgAAAAAAVwAAAAABVwAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAABVwAAAAAAVwAAAAABVwAAAAACVwAAAAACVwAAAAADVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAIAAAAAACIAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAcwAAAAADcwAAAAADcwAAAAADGwAAAAADGwAAAAADcwAAAAABcwAAAAADcwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAcwAAAAACcwAAAAACcwAAAAACGwAAAAABGwAAAAACcwAAAAACcwAAAAAAcwAAAAACdgAAAAAA + tiles: VwAAAAAAVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAACVwAAAAABdwAAAAAAVwAAAAAAXgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAXgAAAAAAVwAAAAAAVwAAAAABdwAAAAAAVwAAAAACVwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAABVwAAAAACdwAAAAAAVwAAAAACVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAdwAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAXgAAAAAAVwAAAAADdwAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAVwAAAAACXgAAAAAAXgAAAAAAVwAAAAABdwAAAAAAXgAAAAAAVwAAAAACXgAAAAAAdwAAAAAAVwAAAAAAVwAAAAACdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAVwAAAAAAVwAAAAADVwAAAAAAVwAAAAADVwAAAAADVwAAAAAAXgAAAAAAVwAAAAAAdwAAAAAAVwAAAAAAVwAAAAADYgAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAXgAAAAAAVwAAAAACXgAAAAAAdwAAAAAAVwAAAAACVwAAAAAAVwAAAAADdwAAAAAAVwAAAAACVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAADdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAACXgAAAAAAVwAAAAABVwAAAAAAVwAAAAACVwAAAAABVwAAAAAAdwAAAAAAXgAAAAAAXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAAAVwAAAAADKwAAAAAAKwAAAAAAVwAAAAADVwAAAAACVwAAAAACdwAAAAAAVwAAAAADVwAAAAABdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAACVwAAAAACKwAAAAAAKwAAAAAAVwAAAAAAVwAAAAADXgAAAAAAdwAAAAAAVwAAAAABVwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAABXgAAAAAAVwAAAAABVwAAAAACVwAAAAACXgAAAAAAVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAIAAAAAACIAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdAAAAAADdAAAAAADdAAAAAADGwAAAAADGwAAAAADdAAAAAABdAAAAAADdAAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdAAAAAACdAAAAAACdAAAAAACGwAAAAABGwAAAAACdAAAAAACdAAAAAAAdAAAAAACdwAAAAAA version: 6 2,2: ind: 2,2 - tiles: LgAAAAABdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAADdgAAAAAAGwAAAAACGwAAAAABGwAAAAAAGwAAAAABGwAAAAABGwAAAAAAGwAAAAABGwAAAAAAdgAAAAAAVwAAAAACLgAAAAACdgAAAAAAVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAGwAAAAABGwAAAAADcwAAAAAAcwAAAAADcwAAAAADcwAAAAADGwAAAAABGwAAAAACdgAAAAAAdgAAAAAALgAAAAAALgAAAAADLgAAAAABVwAAAAAALgAAAAABdgAAAAAAGwAAAAACGwAAAAADcwAAAAACcwAAAAAAcwAAAAAAcwAAAAAAGwAAAAAAGwAAAAADdgAAAAAALgAAAAACLgAAAAADdgAAAAAALgAAAAACVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: LgAAAAABdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAADdwAAAAAAGwAAAAACGwAAAAABGwAAAAAAGwAAAAABGwAAAAABGwAAAAAAGwAAAAABGwAAAAAAdwAAAAAAXgAAAAAALgAAAAACdwAAAAAAVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAGwAAAAABGwAAAAADdAAAAAAAdAAAAAADdAAAAAADdAAAAAADGwAAAAABGwAAAAACdwAAAAAAdwAAAAAALgAAAAAALgAAAAADLgAAAAABVwAAAAAALgAAAAABdwAAAAAAGwAAAAACGwAAAAADdAAAAAACdAAAAAAAdAAAAAAAdAAAAAAAGwAAAAAAGwAAAAADdwAAAAAALgAAAAACLgAAAAADdwAAAAAALgAAAAACXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 1,2: ind: 1,2 - tiles: ZQAAAAAAdgAAAAAAdgAAAAAAVwAAAAACdgAAAAAAdgAAAAAALgAAAAABdgAAAAAALgAAAAADdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAAAdgAAAAAALgAAAAAAdgAAAAAALgAAAAACVwAAAAAALgAAAAADdgAAAAAALgAAAAACLgAAAAADVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACLgAAAAACdgAAAAAAVwAAAAABLgAAAAAALgAAAAADLgAAAAABVwAAAAADdgAAAAAALgAAAAADVwAAAAABdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAdgAAAAAALgAAAAADVwAAAAACdgAAAAAALgAAAAACdgAAAAAAdgAAAAAAVwAAAAAALgAAAAACdgAAAAAALgAAAAAAdgAAAAAAVwAAAAACVwAAAAADdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: ZgAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAdwAAAAAAdwAAAAAALgAAAAABdwAAAAAALgAAAAADdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAAAdwAAAAAALgAAAAAAdwAAAAAALgAAAAACXgAAAAAALgAAAAADdwAAAAAALgAAAAACLgAAAAADVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAALgAAAAACdwAAAAAAXgAAAAAALgAAAAAALgAAAAADLgAAAAABXgAAAAAAdwAAAAAALgAAAAADXgAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAdwAAAAAALgAAAAADVwAAAAACdwAAAAAALgAAAAACdwAAAAAAdwAAAAAAXgAAAAAALgAAAAACdwAAAAAALgAAAAAAdwAAAAAAXgAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 1,-1: ind: 1,-1 - tiles: VwAAAAACVwAAAAADVwAAAAAAVwAAAAACVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAADVwAAAAABKwAAAAAAVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAVwAAAAACVwAAAAACVwAAAAACVwAAAAADVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAYQAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAYQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADYQAAAAABVwAAAAABVwAAAAAAVwAAAAADVwAAAAAAVwAAAAADVwAAAAACVwAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAADVwAAAAAAYQAAAAAAVwAAAAABVwAAAAACYQAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAABVwAAAAACVwAAAAAAVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAACYQAAAAACVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAYQAAAAADYQAAAAADdgAAAAAAdgAAAAAAdgAAAAAAYQAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAdgAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAADVwAAAAADVwAAAAACdgAAAAAAVwAAAAACVwAAAAABVwAAAAABVwAAAAAAVwAAAAADdgAAAAAAdgAAAAAAVwAAAAAAdgAAAAAAVwAAAAACVwAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAADYQAAAAAAVwAAAAAAVwAAAAACdgAAAAAAVwAAAAACVwAAAAACdgAAAAAAZQAAAAAAVwAAAAADdgAAAAAAVwAAAAADVwAAAAAAKwAAAAAAKwAAAAAAVwAAAAABVwAAAAAAdgAAAAAAVwAAAAADVwAAAAACVwAAAAACVwAAAAADVwAAAAACdgAAAAAAdgAAAAAAYQAAAAAAdgAAAAAAVwAAAAABVwAAAAABKwAAAAAAKwAAAAAAVwAAAAAAVwAAAAACdgAAAAAAVwAAAAACVwAAAAAAVwAAAAADVwAAAAACVwAAAAADdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAABVwAAAAACVwAAAAACVwAAAAACVwAAAAACVwAAAAADVwAAAAABdgAAAAAAVwAAAAAAVwAAAAACVwAAAAAAVwAAAAACVwAAAAACdgAAAAAAdgAAAAAADwAAAAAADwAAAAAAVwAAAAADVwAAAAADVwAAAAABVwAAAAACVwAAAAABVwAAAAAAdgAAAAAAVwAAAAAAVwAAAAADVwAAAAABVwAAAAADVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAA + tiles: VwAAAAACVwAAAAADVwAAAAAAVwAAAAACVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAADVwAAAAABKwAAAAAAVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAVwAAAAACVwAAAAACVwAAAAACVwAAAAADVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAYgAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAYgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADYgAAAAABVwAAAAABVwAAAAAAVwAAAAADXgAAAAAAVwAAAAADVwAAAAACVwAAAAAAVwAAAAACVwAAAAADXgAAAAAAVwAAAAADVwAAAAAAYgAAAAAAVwAAAAABVwAAAAACYgAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAABVwAAAAACVwAAAAAAVwAAAAABXgAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAACYgAAAAACVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAYgAAAAADYgAAAAADdwAAAAAAdwAAAAAAdwAAAAAAYgAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAdwAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAADXgAAAAAAVwAAAAACdwAAAAAAVwAAAAACXgAAAAAAVwAAAAABVwAAAAAAVwAAAAADdwAAAAAAdwAAAAAAXgAAAAAAdwAAAAAAVwAAAAACVwAAAAAAXgAAAAAAVwAAAAAAVwAAAAACXgAAAAAAYgAAAAAAVwAAAAAAVwAAAAACdwAAAAAAVwAAAAACXgAAAAAAdwAAAAAAZgAAAAAAVwAAAAADdwAAAAAAVwAAAAADVwAAAAAAKwAAAAAAKwAAAAAAVwAAAAABVwAAAAAAdwAAAAAAVwAAAAADVwAAAAACVwAAAAACVwAAAAADVwAAAAACdwAAAAAAdwAAAAAAYgAAAAAAdwAAAAAAVwAAAAABVwAAAAABKwAAAAAAKwAAAAAAVwAAAAAAVwAAAAACdwAAAAAAVwAAAAACXgAAAAAAVwAAAAADVwAAAAACVwAAAAADdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAABVwAAAAACXgAAAAAAVwAAAAACVwAAAAACXgAAAAAAVwAAAAABdwAAAAAAVwAAAAAAVwAAAAACVwAAAAAAXgAAAAAAVwAAAAACdwAAAAAAdwAAAAAADwAAAAAADwAAAAAAVwAAAAADVwAAAAADVwAAAAABVwAAAAACVwAAAAABVwAAAAAAdwAAAAAAVwAAAAAAVwAAAAADVwAAAAABVwAAAAADVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAA version: 6 2,-1: ind: 2,-1 - tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAA + tiles: dwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAA version: 6 1,-2: ind: 1,-2 - tiles: AAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAVwAAAAACVwAAAAACVwAAAAADVwAAAAADVwAAAAABVwAAAAACVwAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAVwAAAAACVwAAAAADVwAAAAACVwAAAAACVwAAAAACVwAAAAAAVwAAAAABdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAVwAAAAADVwAAAAACVwAAAAACVwAAAAACVwAAAAACVwAAAAAAVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAYQAAAAADYQAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAVwAAAAACdgAAAAAAVwAAAAADVwAAAAAAVwAAAAABVwAAAAAAVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAVwAAAAADYQAAAAADVwAAAAACVwAAAAAAVwAAAAADVwAAAAACVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAVwAAAAADYQAAAAABVwAAAAAAVwAAAAAAVwAAAAABVwAAAAABVwAAAAADdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAVwAAAAABdgAAAAAAVwAAAAADVwAAAAAAVwAAAAABVwAAAAABVwAAAAACdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAVwAAAAAB + tiles: AAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAVwAAAAACXgAAAAAAVwAAAAADVwAAAAADVwAAAAABXgAAAAAAVwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAXgAAAAAAVwAAAAADVwAAAAACVwAAAAACVwAAAAACXgAAAAAAVwAAAAABdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAVwAAAAADVwAAAAACXgAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAYgAAAAADYgAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAVwAAAAACdwAAAAAAXgAAAAAAVwAAAAAAVwAAAAABXgAAAAAAVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAVwAAAAADYgAAAAADVwAAAAACXgAAAAAAVwAAAAADVwAAAAACVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAVwAAAAADYgAAAAABXgAAAAAAVwAAAAAAXgAAAAAAVwAAAAABXgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAXgAAAAAAdwAAAAAAVwAAAAADVwAAAAAAXgAAAAAAVwAAAAABVwAAAAACdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAXgAAAAAA version: 6 2,-2: ind: 2,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAVwAAAAABVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAVwAAAAAAVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAVwAAAAACVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAVwAAAAAAXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAVwAAAAACVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAA version: 6 0,-3: ind: 0,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVwAAAAACVwAAAAAAVwAAAAACdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVwAAAAABVwAAAAABVwAAAAADdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVwAAAAACVwAAAAAAXgAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVwAAAAABXgAAAAAAVwAAAAADdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,-3: ind: -1,-3 - tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAYQAAAAAAYQAAAAADYQAAAAACYQAAAAABdgAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAIAAAAAACGwAAAAACdgAAAAAAVwAAAAACVwAAAAACVwAAAAACVwAAAAABdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAIAAAAAACGwAAAAACGwAAAAABVwAAAAABVwAAAAABVwAAAAAAVwAAAAADVwAAAAAB + tiles: dwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAYgAAAAAAYgAAAAADYgAAAAACYgAAAAABdwAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAIAAAAAACGwAAAAACdwAAAAAAXgAAAAAAVwAAAAACVwAAAAACXgAAAAAAdwAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAIAAAAAACGwAAAAACGwAAAAABXgAAAAAAVwAAAAABXgAAAAAAVwAAAAADVwAAAAAB version: 6 3,-1: ind: 3,-1 - tiles: AAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,-2: ind: 3,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -3,0: ind: -3,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAcwAAAAABcwAAAAACdgAAAAAAVwAAAAACVwAAAAAAVwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAVwAAAAACVwAAAAADVwAAAAACVwAAAAADVwAAAAACVwAAAAABVwAAAAACVwAAAAAAVwAAAAADVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAADVwAAAAACVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAADVwAAAAABVwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAADVwAAAAAAVwAAAAADVwAAAAADVwAAAAAAVwAAAAAAVwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAADVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAcwAAAAADcwAAAAADcwAAAAABdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAADVwAAAAADdgAAAAAAcwAAAAACcwAAAAAAcwAAAAADcwAAAAABcwAAAAAAcwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAACVwAAAAACdgAAAAAAcwAAAAACcwAAAAACcwAAAAAAcwAAAAABcwAAAAABcwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAVwAAAAADVwAAAAADVwAAAAACdgAAAAAAcwAAAAABcwAAAAADcwAAAAABcwAAAAACcwAAAAADcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAVwAAAAADVwAAAAABVwAAAAADdgAAAAAAcwAAAAADcwAAAAACcwAAAAADcwAAAAACcwAAAAACcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdgAAAAAAVwAAAAAAVwAAAAAAVwAAAAACdgAAAAAAcwAAAAAAcwAAAAACcwAAAAABcwAAAAADcwAAAAADcwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAAAVwAAAAADdgAAAAAAcwAAAAAAcwAAAAADcwAAAAADcwAAAAABcwAAAAACcwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAADVwAAAAABdgAAAAAAcwAAAAABcwAAAAACcwAAAAABcwAAAAABcwAAAAADcwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAADVwAAAAAAdgAAAAAAcwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAdgAAAAAAcwAAAAACdgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAADVwAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAPAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAVwAAAAADVwAAAAADVwAAAAABdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAIAAAAAABGwAAAAACPAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdAAAAAABdAAAAAACdwAAAAAAVwAAAAACVwAAAAAAVwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAVwAAAAACVwAAAAADVwAAAAACVwAAAAADVwAAAAACXgAAAAAAVwAAAAACVwAAAAAAVwAAAAADVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADXgAAAAAAVwAAAAACVwAAAAACVwAAAAAAVwAAAAAAVwAAAAAAVwAAAAADXgAAAAAAVwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAADVwAAAAAAVwAAAAADVwAAAAAAVwAAAAADVwAAAAADXgAAAAAAVwAAAAAAVwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAADVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdAAAAAADdAAAAAADdAAAAAABdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAADVwAAAAADdwAAAAAAdAAAAAACdAAAAAAAdAAAAAADdAAAAAABdAAAAAAAdAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABXgAAAAAAVwAAAAACdwAAAAAAdAAAAAACdAAAAAACdAAAAAAAdAAAAAABdAAAAAABdAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAVwAAAAADVwAAAAADXgAAAAAAdwAAAAAAdAAAAAABdAAAAAADdAAAAAABdAAAAAACdAAAAAADdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAVwAAAAADVwAAAAABVwAAAAADdwAAAAAAdAAAAAADdAAAAAACdAAAAAADdAAAAAACdAAAAAACdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdwAAAAAAVwAAAAAAVwAAAAAAVwAAAAACdwAAAAAAdAAAAAAAdAAAAAACdAAAAAABdAAAAAADdAAAAAADdAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAAAVwAAAAADdwAAAAAAdAAAAAAAdAAAAAADdAAAAAADdAAAAAABdAAAAAACdAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAADVwAAAAABdwAAAAAAdAAAAAABdAAAAAACdAAAAAABdAAAAAABdAAAAAADdAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAXgAAAAAAVwAAAAADVwAAAAAAdwAAAAAAdAAAAAACdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAdwAAAAAAdAAAAAACdwAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAADXgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAPAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAXgAAAAAAVwAAAAADVwAAAAABdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAIAAAAAABGwAAAAACPAAAAAAA version: 6 -3,1: ind: -3,1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAVwAAAAACVwAAAAADVwAAAAADdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAIAAAAAADGwAAAAABPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAVwAAAAABdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAVwAAAAABVwAAAAACVwAAAAACdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAVwAAAAADVwAAAAABVwAAAAACdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAVwAAAAABVwAAAAACVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAVwAAAAADVwAAAAACVwAAAAABIAAAAAADIAAAAAAAIAAAAAADdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAVwAAAAABVwAAAAACVwAAAAABIAAAAAACIAAAAAABIAAAAAACdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAVwAAAAABIAAAAAABIAAAAAABIAAAAAABdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAVwAAAAACVwAAAAADVwAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAIAAAAAADGwAAAAABPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAVwAAAAABdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAVwAAAAABVwAAAAACXgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAVwAAAAADVwAAAAABXgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAVwAAAAABXgAAAAAAVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAVwAAAAADVwAAAAACVwAAAAABIAAAAAADIAAAAAAAIAAAAAADdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAVwAAAAABXgAAAAAAVwAAAAABIAAAAAACIAAAAAABIAAAAAACdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAVwAAAAABIAAAAAABIAAAAAABIAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAA version: 6 -3,-2: ind: -3,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAKAAAAAAAdgAAAAAAAgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAKAAAAAAAKAAAAAAAAgAAAAAAdgAAAAAAdgAAAAAAAgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAKAAAAAAAdgAAAAAAKAAAAAAAAgAAAAAAAgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAEAAAAAADEAAAAAABdgAAAAAAEAAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAEAAAAAAAdgAAAAAAdgAAAAAAEAAAAAABdgAAAAAAdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAZQAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAEAAAAAACEAAAAAACEAAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAEAAAAAAAEAAAAAAAdgAAAAAAEAAAAAACdgAAAAAAZQAAAAAAZQAAAAAAdgAAAAAAcwAAAAACdgAAAAAAdgAAAAAAcwAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAXAAAAAAAXAAAAAABXAAAAAACXAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAcwAAAAABcwAAAAADcwAAAAAAcwAAAAAD + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAKAAAAAAAdwAAAAAAAgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAKAAAAAAAKAAAAAAAAgAAAAAAdwAAAAAAdwAAAAAAAgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAKAAAAAAAdwAAAAAAKAAAAAAAAgAAAAAAAgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAEAAAAAADEAAAAAABdwAAAAAAEAAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAEAAAAAAAdwAAAAAAdwAAAAAAEAAAAAABdwAAAAAAdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAZgAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAEAAAAAACEAAAAAACEAAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAEAAAAAAAEAAAAAAAdwAAAAAAEAAAAAACdwAAAAAAZgAAAAAAZgAAAAAAdwAAAAAAdAAAAAACdwAAAAAAdwAAAAAAdAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAXAAAAAAAXAAAAAABXAAAAAACXAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdAAAAAABdAAAAAADdAAAAAAAdAAAAAAD version: 6 -3,-3: ind: -3,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAA version: 6 -2,-3: ind: -2,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAA version: 6 -3,2: ind: -3,2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,3: ind: 0,3 - tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAACGwAAAAABGwAAAAADGwAAAAABdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAABGwAAAAABGwAAAAADGwAAAAACdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAAAGwAAAAABGwAAAAABGwAAAAABdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAACGwAAAAAAGwAAAAAAGwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAACGwAAAAACGwAAAAABGwAAAAADdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAABGwAAAAADGwAAAAABGwAAAAACdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAACGwAAAAADGwAAAAABGwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: dwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAACGwAAAAABGwAAAAADGwAAAAABdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAABGwAAAAABGwAAAAADGwAAAAACdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAAAGwAAAAABGwAAAAABGwAAAAABdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAACGwAAAAAAGwAAAAAAGwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAACGwAAAAACGwAAAAABGwAAAAADdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAABGwAAAAADGwAAAAABGwAAAAACdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAACGwAAAAADGwAAAAABGwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,3: ind: -1,3 - tiles: AAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAADVwAAAAABVwAAAAAAVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAACVwAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAACVwAAAAABVwAAAAABdgAAAAAAGwAAAAACAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAADVwAAAAABdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAdgAAAAAAGwAAAAACAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAVwAAAAADVwAAAAACVwAAAAABdgAAAAAAVwAAAAACdgAAAAAAVwAAAAAAVwAAAAACVwAAAAADdgAAAAAAGwAAAAACAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAVwAAAAACVwAAAAABVwAAAAACVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAAAVwAAAAADGwAAAAADGwAAAAABAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAABVwAAAAACdgAAAAAAVwAAAAABdgAAAAAAVwAAAAABVwAAAAADVwAAAAACdgAAAAAAGwAAAAACAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAABVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAACVwAAAAAAdgAAAAAAGwAAAAACAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAACVwAAAAAAVwAAAAAAVwAAAAABdgAAAAAAGwAAAAABAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAABVwAAAAADVwAAAAADVwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAA + tiles: AAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAAAVwAAAAACVwAAAAADVwAAAAABVwAAAAAAVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAACVwAAAAAAVwAAAAABVwAAAAACVwAAAAAAVwAAAAACVwAAAAABVwAAAAABdwAAAAAAGwAAAAACAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAADVwAAAAABdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAAAVwAAAAAAdwAAAAAAGwAAAAACAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAVwAAAAADVwAAAAACVwAAAAABdwAAAAAAVwAAAAACdwAAAAAAVwAAAAAAVwAAAAACVwAAAAADdwAAAAAAGwAAAAACAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAVwAAAAACVwAAAAABVwAAAAACVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAAAVwAAAAADGwAAAAADGwAAAAABAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAABVwAAAAACdwAAAAAAVwAAAAABdwAAAAAAVwAAAAABVwAAAAADVwAAAAACdwAAAAAAGwAAAAACAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAABVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAACVwAAAAAAdwAAAAAAGwAAAAACAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAVwAAAAABVwAAAAAAVwAAAAAAVwAAAAACVwAAAAABVwAAAAACVwAAAAAAVwAAAAAAVwAAAAABdwAAAAAAGwAAAAABAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAVwAAAAAAVwAAAAACVwAAAAACVwAAAAABVwAAAAADVwAAAAADVwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAA version: 6 -2,-4: ind: -2,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAcwAAAAACcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAcwAAAAABcwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAcwAAAAACcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAcwAAAAADcwAAAAADcwAAAAABcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAcwAAAAADcwAAAAABcwAAAAACcwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAcwAAAAADcwAAAAACcwAAAAACcwAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdAAAAAACdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdAAAAAABdAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdAAAAAACdAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdAAAAAADdAAAAAADdAAAAAABdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdAAAAAADdAAAAAABdAAAAAACdAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdAAAAAADdAAAAAACdAAAAAACdAAAAAAA version: 6 -1,-4: ind: -1,-4 - tiles: dQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcwAAAAADcwAAAAACcwAAAAADcwAAAAAAZQAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcwAAAAADcwAAAAAAcwAAAAAAcwAAAAACZQAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAcwAAAAADZQAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAcwAAAAADcwAAAAACdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcwAAAAABcwAAAAACcwAAAAADcwAAAAADcwAAAAABdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcwAAAAABcwAAAAADcwAAAAABcwAAAAAAcwAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: dgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAAADdAAAAAACdAAAAAADdAAAAAAAZgAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAAADdAAAAAAAdAAAAAAAdAAAAAACZgAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAdAAAAAADZgAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAdAAAAAADdAAAAAACdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAAABdAAAAAACdAAAAAADdAAAAAADdAAAAAABdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAAABdAAAAAADdAAAAAABdAAAAAAAdAAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,2: ind: 3,2 - tiles: AAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,1: ind: 3,1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,0: ind: 3,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,4: ind: -1,4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,4: ind: 0,4 - tiles: dgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: dwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAdwAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 type: MapGrid - type: Broadphase @@ -250,83 +251,83 @@ entities: color: '#FFFFFFFF' id: Basalt1 decals: - 1358: 25.881918,34.192333 - 1361: 36.05116,32.59352 - 1386: -23.029747,20.063555 + 1355: 25.881918,34.192333 + 1358: 36.05116,32.59352 + 1383: -23.029747,20.063555 - node: color: '#FFFFFFFF' id: Basalt5 decals: - 1359: 31.894993,33.661083 - 1371: 25.780825,32.109146 - 1392: -27.154747,21.001055 + 1356: 31.894993,33.661083 + 1368: 25.780825,32.109146 + 1389: -27.154747,21.001055 - node: color: '#FFFFFFFF' id: Basalt8 decals: - 1360: 33.992474,34.93727 - 1391: -26.029747,22.04793 + 1357: 33.992474,34.93727 + 1388: -26.029747,22.04793 - node: color: '#A46106FF' id: BotLeft decals: - 1112: 22,-28 - 1113: 21,-28 - 1114: 20,-28 - 1115: 20,-27 - 1116: 21,-27 - 1117: 22,-27 - 1118: 15,-22 - 1119: 15,-23 - 1120: 15,-24 - 1121: 15,-25 - 1122: 14,-25 - 1123: 14,-24 - 1124: 14,-23 - 1125: 14,-22 - 1126: 18,-28 - 1127: 18,-27 - 1128: 17,-27 - 1129: 17,-28 - 1130: 16,-27 - 1131: 16,-28 + 1109: 22,-28 + 1110: 21,-28 + 1111: 20,-28 + 1112: 20,-27 + 1113: 21,-27 + 1114: 22,-27 + 1115: 15,-22 + 1116: 15,-23 + 1117: 15,-24 + 1118: 15,-25 + 1119: 14,-25 + 1120: 14,-24 + 1121: 14,-23 + 1122: 14,-22 + 1123: 18,-28 + 1124: 18,-27 + 1125: 17,-27 + 1126: 17,-28 + 1127: 16,-27 + 1128: 16,-28 - node: color: '#FFFFFFFF' id: BotLeft decals: - 1449: 6,-22 - 1450: 6,-21 - 1451: 6,-20 - 1452: 5,-20 - 1453: 4,-20 - 1454: -3,17 - 1455: -2,17 - 1456: -1,17 - 1457: 0,17 + 1446: 6,-22 + 1447: 6,-21 + 1448: 6,-20 + 1449: 5,-20 + 1450: 4,-20 + 1451: -3,17 + 1452: -2,17 + 1453: -1,17 + 1454: 0,17 - node: color: '#EFB341FF' id: BotRight decals: - 1035: 26,-7 - 1036: 26,-6 - 1037: 26,-5 - 1038: 26,-4 - 1039: 27,-4 - 1040: 27,-5 - 1041: 27,-6 - 1042: 27,-7 - 1043: 28,-7 - 1044: 28,-6 - 1045: 28,-5 - 1046: 28,-4 + 1032: 26,-7 + 1033: 26,-6 + 1034: 26,-5 + 1035: 26,-4 + 1036: 27,-4 + 1037: 27,-5 + 1038: 27,-6 + 1039: 27,-7 + 1040: 28,-7 + 1041: 28,-6 + 1042: 28,-5 + 1043: 28,-4 - node: color: '#FFFFFFFF' id: BrickTileDarkBox decals: - 958: -17,-9 - 973: -17,-13 - 974: -17,-11 - 975: -17,-15 + 955: -17,-9 + 970: -17,-13 + 971: -17,-11 + 972: -17,-15 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerNe @@ -359,12 +360,12 @@ entities: color: '#FFFFFFFF' id: BrickTileDarkEndE decals: - 838: -10,-3 + 836: -10,-3 - node: color: '#FFFFFFFF' id: BrickTileDarkEndW decals: - 835: -12,-3 + 833: -12,-3 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerNe @@ -406,7 +407,7 @@ entities: 96: -5,56 97: -6,56 128: -7,46 - 837: -11,-3 + 835: -11,-3 - node: color: '#FFFFFFFF' id: BrickTileDarkLineS @@ -417,7 +418,7 @@ entities: 107: -6,48 108: -5,48 127: -7,44 - 836: -11,-3 + 834: -11,-3 - node: color: '#FFFFFFFF' id: BrickTileDarkLineW @@ -482,424 +483,424 @@ entities: color: '#52B4E9FF' id: BrickTileSteelCornerNe decals: - 748: -19,16 - 749: -23,16 + 746: -19,16 + 747: -23,16 - node: color: '#D381C9FF' id: BrickTileSteelCornerNe decals: - 896: -21,-1 + 894: -21,-1 - node: color: '#DE3A3AFF' id: BrickTileSteelCornerNe decals: - 492: 29,14 + 490: 29,14 - node: color: '#FFFFFFFF' id: BrickTileSteelCornerNe decals: - 813: 2,-5 - 814: -2,-5 - 1244: -14,-51 - 1251: -41,-18 + 811: 2,-5 + 812: -2,-5 + 1241: -14,-51 + 1248: -41,-18 - node: color: '#52B4E9FF' id: BrickTileSteelCornerNw decals: - 746: -27,16 - 747: -21,16 + 744: -27,16 + 745: -21,16 - node: color: '#D381C9FF' id: BrickTileSteelCornerNw decals: - 897: -23,-1 + 895: -23,-1 - node: color: '#DE3A3AFF' id: BrickTileSteelCornerNw decals: - 491: 25,14 + 489: 25,14 - node: color: '#FFFFFFFF' id: BrickTileSteelCornerNw decals: - 815: 0,-5 - 816: 4,-5 - 1245: -16,-51 - 1250: -44,-18 + 813: 0,-5 + 814: 4,-5 + 1242: -16,-51 + 1247: -44,-18 - node: color: '#52B4E9FF' id: BrickTileSteelCornerSe decals: - 744: -19,13 - 745: -23,13 + 742: -19,13 + 743: -23,13 - node: color: '#D381C9FF' id: BrickTileSteelCornerSe decals: - 899: -21,-4 - 969: -15,-19 + 897: -21,-4 + 966: -15,-19 - node: color: '#DE3A3AFF' id: BrickTileSteelCornerSe decals: - 494: 29,12 + 492: 29,12 - node: color: '#FFFFFFFF' id: BrickTileSteelCornerSe decals: - 1249: -14,-52 - 1253: -41,-21 + 1246: -14,-52 + 1250: -41,-21 - node: color: '#52B4E9FF' id: BrickTileSteelCornerSw decals: - 750: -27,13 - 751: -21,13 + 748: -27,13 + 749: -21,13 - node: color: '#D381C9FF' id: BrickTileSteelCornerSw decals: - 898: -23,-4 - 968: -21,-19 + 896: -23,-4 + 965: -21,-19 - node: color: '#DE3A3AFF' id: BrickTileSteelCornerSw decals: - 493: 25,12 + 491: 25,12 - node: color: '#FFFFFFFF' id: BrickTileSteelCornerSw decals: - 1248: -16,-52 - 1252: -44,-21 + 1245: -16,-52 + 1249: -44,-21 - node: color: '#FFFFFFFF' id: BrickTileSteelEndE decals: - 824: 2,-3 + 822: 2,-3 - node: color: '#FFFFFFFF' id: BrickTileSteelEndW decals: - 825: 4,-3 - 826: 0,-3 + 823: 4,-3 + 824: 0,-3 - node: color: '#52B4E9FF' id: BrickTileSteelLineE decals: - 728: -19,14 - 729: -19,15 - 733: -23,15 - 734: -23,14 + 726: -19,14 + 727: -19,15 + 731: -23,15 + 732: -23,14 - node: color: '#D381C9FF' id: BrickTileSteelLineE decals: - 890: -21,-2 - 891: -21,-3 - 959: -15,-17 - 960: -15,-18 - 1413: -15,-15 - 1414: -15,-14 - 1415: -15,-13 - 1416: -15,-11 - 1417: -15,-10 - 1418: -15,-9 + 888: -21,-2 + 889: -21,-3 + 956: -15,-17 + 957: -15,-18 + 1410: -15,-15 + 1411: -15,-14 + 1412: -15,-13 + 1413: -15,-11 + 1414: -15,-10 + 1415: -15,-9 - node: color: '#DE3A3AFF' id: BrickTileSteelLineE decals: - 486: 29,13 + 484: 29,13 - node: color: '#FFFFFFFF' id: BrickTileSteelLineE decals: - 822: -2,-6 - 823: 2,-6 - 1256: -41,-19 - 1257: -41,-20 + 820: -2,-6 + 821: 2,-6 + 1253: -41,-19 + 1254: -41,-20 - node: color: '#52B4E9FF' id: BrickTileSteelLineN decals: - 730: -24,16 - 731: -25,16 - 732: -26,16 - 743: -20,16 + 728: -24,16 + 729: -25,16 + 730: -26,16 + 741: -20,16 - node: color: '#D381C9FF' id: BrickTileSteelLineN decals: - 892: -22,-1 + 890: -22,-1 - node: color: '#DE3A3AFF' id: BrickTileSteelLineN decals: - 487: 28,14 - 488: 27,14 - 489: 26,14 + 485: 28,14 + 486: 27,14 + 487: 26,14 - node: color: '#FFFFFFFF' id: BrickTileSteelLineN decals: 215: -4,26 - 817: -3,-5 - 818: 1,-5 - 819: 5,-5 - 827: 1,-3 - 830: 5,-3 - 1246: -15,-51 - 1254: -43,-18 - 1255: -42,-18 + 815: -3,-5 + 816: 1,-5 + 817: 5,-5 + 825: 1,-3 + 828: 5,-3 + 1243: -15,-51 + 1251: -43,-18 + 1252: -42,-18 - node: color: '#52B4E9FF' id: BrickTileSteelLineS decals: - 739: -26,13 - 740: -25,13 - 741: -24,13 - 742: -20,13 + 737: -26,13 + 738: -25,13 + 739: -24,13 + 740: -20,13 - node: color: '#D381C9FF' id: BrickTileSteelLineS decals: - 893: -22,-4 - 961: -17,-19 - 962: -16,-19 - 963: -18,-19 - 964: -19,-19 - 965: -20,-19 + 891: -22,-4 + 958: -17,-19 + 959: -16,-19 + 960: -18,-19 + 961: -19,-19 + 962: -20,-19 - node: color: '#DE3A3AFF' id: BrickTileSteelLineS decals: - 483: 28,12 - 484: 27,12 - 485: 26,12 + 481: 28,12 + 482: 27,12 + 483: 26,12 - node: color: '#FFFFFFFF' id: BrickTileSteelLineS decals: - 828: 1,-3 - 829: 5,-3 - 1247: -15,-52 - 1260: -43,-21 - 1261: -42,-21 - 1460: -3,-3 - 1461: -2,-3 - 1462: -1,-3 + 826: 1,-3 + 827: 5,-3 + 1244: -15,-52 + 1257: -43,-21 + 1258: -42,-21 + 1457: -3,-3 + 1458: -2,-3 + 1459: -1,-3 - node: color: '#52B4E9FF' id: BrickTileSteelLineW decals: - 735: -27,15 - 736: -27,14 - 737: -21,15 - 738: -21,14 + 733: -27,15 + 734: -27,14 + 735: -21,15 + 736: -21,14 - node: color: '#D381C9FF' id: BrickTileSteelLineW decals: - 894: -23,-3 - 895: -23,-2 - 966: -21,-18 - 967: -21,-17 - 1419: -18,-15 - 1420: -18,-14 - 1421: -18,-13 - 1422: -18,-11 - 1423: -18,-10 - 1424: -18,-9 - 1426: -18,-12 - 1427: -18,-16 + 892: -23,-3 + 893: -23,-2 + 963: -21,-18 + 964: -21,-17 + 1416: -18,-15 + 1417: -18,-14 + 1418: -18,-13 + 1419: -18,-11 + 1420: -18,-10 + 1421: -18,-9 + 1423: -18,-12 + 1424: -18,-16 - node: color: '#DE3A3AFF' id: BrickTileSteelLineW decals: - 490: 25,13 + 488: 25,13 - node: color: '#FFFFFFFF' id: BrickTileSteelLineW decals: 214: 2,28 - 820: 4,-6 - 821: 0,-6 - 1258: -44,-19 - 1259: -44,-20 + 818: 4,-6 + 819: 0,-6 + 1255: -44,-19 + 1256: -44,-20 - node: color: '#EFB341FF' id: BrickTileWhiteBox decals: - 1107: 19,-15 + 1104: 19,-15 - node: color: '#52B4E9FF' id: BrickTileWhiteCornerNe decals: - 631: -21,6 - 632: -18,6 - 633: -15,6 - 777: -9,6 + 629: -21,6 + 630: -18,6 + 631: -15,6 + 775: -9,6 - node: color: '#9D9D97FF' id: BrickTileWhiteCornerNe decals: - 1305: 46,28 - 1328: 43,27 + 1302: 46,28 + 1325: 43,27 - node: color: '#9FED58FF' id: BrickTileWhiteCornerNe decals: - 707: -11,21 - 710: -11,19 + 705: -11,21 + 708: -11,19 - node: color: '#A46106FF' id: BrickTileWhiteCornerNe decals: - 1164: 11,-18 + 1161: 11,-18 - node: color: '#DE3A3A96' id: BrickTileWhiteCornerNe decals: - 496: 29,18 + 494: 29,18 - node: color: '#EFB341FF' id: BrickTileWhiteCornerNe decals: - 1095: 20,-14 - 1111: 21,-6 + 1092: 20,-14 + 1108: 21,-6 - node: color: '#FFFFFFFF' id: BrickTileWhiteCornerNe decals: - 808: 4,2 + 806: 4,2 - node: color: '#52B4E9FF' id: BrickTileWhiteCornerNw decals: - 628: -22,6 - 629: -19,6 - 630: -16,6 - 774: -10,6 + 626: -22,6 + 627: -19,6 + 628: -16,6 + 772: -10,6 - node: color: '#9D9D97FF' id: BrickTileWhiteCornerNw decals: - 1306: 39,28 - 1327: 42,27 + 1303: 39,28 + 1324: 42,27 - node: color: '#9FED58FF' id: BrickTileWhiteCornerNw decals: - 705: -12,21 - 709: -12,19 + 703: -12,21 + 707: -12,19 - node: color: '#A46106FF' id: BrickTileWhiteCornerNw decals: - 1229: 8,-18 + 1226: 8,-18 - node: color: '#DE3A3A96' id: BrickTileWhiteCornerNw decals: - 495: 27,18 + 493: 27,18 - node: color: '#EFB341FF' id: BrickTileWhiteCornerNw decals: - 1096: 16,-14 - 1110: 20,-6 + 1093: 16,-14 + 1107: 20,-6 - node: color: '#FFFFFFFF' id: BrickTileWhiteCornerNw decals: - 805: 1,2 + 803: 1,2 - node: color: '#334E6DFF' id: BrickTileWhiteCornerSe decals: - 1301: 44,33 + 1298: 44,33 - node: color: '#52B4E9FF' id: BrickTileWhiteCornerSe decals: - 634: -21,5 - 635: -18,5 - 636: -15,5 - 775: -9,5 + 632: -21,5 + 633: -18,5 + 634: -15,5 + 773: -9,5 - node: color: '#9D9D97FF' id: BrickTileWhiteCornerSe decals: - 1323: 46,25 - 1326: 43,26 + 1320: 46,25 + 1323: 43,26 - node: color: '#9FED58FF' id: BrickTileWhiteCornerSe decals: - 706: -11,18 - 708: -11,20 + 704: -11,18 + 706: -11,20 - node: color: '#A46106FF' id: BrickTileWhiteCornerSe decals: - 1163: 11,-24 + 1160: 11,-24 - node: color: '#DE3A3A96' id: BrickTileWhiteCornerSe decals: - 497: 29,16 + 495: 29,16 - node: color: '#EFB341FF' id: BrickTileWhiteCornerSe decals: - 1097: 20,-16 - 1108: 21,-7 + 1094: 20,-16 + 1105: 21,-7 - node: color: '#FFFFFFFF' id: BrickTileWhiteCornerSe decals: - 806: 4,1 + 804: 4,1 - node: color: '#334E6DFF' id: BrickTileWhiteCornerSw decals: - 1302: 41,33 + 1299: 41,33 - node: color: '#52B4E9FF' id: BrickTileWhiteCornerSw decals: - 637: -22,5 - 638: -19,5 - 639: -16,5 - 776: -10,5 + 635: -22,5 + 636: -19,5 + 637: -16,5 + 774: -10,5 - node: color: '#9D9D97FF' id: BrickTileWhiteCornerSw decals: - 1324: 39,25 - 1325: 42,26 + 1321: 39,25 + 1322: 42,26 - node: color: '#9FED58FF' id: BrickTileWhiteCornerSw decals: - 704: -12,18 - 711: -12,20 + 702: -12,18 + 709: -12,20 - node: color: '#DE3A3A96' id: BrickTileWhiteCornerSw decals: - 498: 27,16 + 496: 27,16 - node: color: '#EFB341FF' id: BrickTileWhiteCornerSw decals: - 1098: 16,-16 - 1109: 20,-7 + 1095: 16,-16 + 1106: 20,-7 - node: color: '#FFFFFFFF' id: BrickTileWhiteCornerSw decals: - 807: 1,1 + 805: 1,1 - node: color: '#9FED5896' id: BrickTileWhiteInnerNe @@ -924,7 +925,7 @@ entities: color: '#FFFFFFFF' id: BrickTileWhiteInnerNe decals: - 1237: -5,-25 + 1234: -5,-25 - node: color: '#9FED5896' id: BrickTileWhiteInnerNw @@ -935,7 +936,7 @@ entities: id: BrickTileWhiteInnerNw decals: 180: 1,54 - 1228: 8,-19 + 1225: 8,-19 - node: color: '#D381C9FF' id: BrickTileWhiteInnerNw @@ -945,7 +946,7 @@ entities: color: '#FFFFFFFF' id: BrickTileWhiteInnerNw decals: - 1398: -3,-25 + 1395: -3,-25 - node: color: '#D381C9FF' id: BrickTileWhiteInnerSe @@ -975,28 +976,28 @@ entities: color: '#334E6DFF' id: BrickTileWhiteLineE decals: - 1300: 44,34 + 1297: 44,34 - node: color: '#7C5C98FF' id: BrickTileWhiteLineE decals: - 1399: 9,-2 + 1396: 9,-2 - node: color: '#9D9D97FF' id: BrickTileWhiteLineE decals: - 1313: 46,27 - 1314: 46,26 + 1310: 46,27 + 1311: 46,26 - node: color: '#A46106FF' id: BrickTileWhiteLineE decals: - 1155: 11,-19 - 1156: 11,-20 - 1157: 11,-21 - 1158: 11,-22 - 1159: 11,-23 - 1227: 7,-18 + 1152: 11,-19 + 1153: 11,-20 + 1154: 11,-21 + 1155: 11,-22 + 1156: 11,-23 + 1224: 7,-18 - node: color: '#BDFF8593' id: BrickTileWhiteLineE @@ -1007,23 +1008,23 @@ entities: id: BrickTileWhiteLineE decals: 147: 1,51 - 501: 29,17 + 499: 29,17 - node: color: '#EFB341FF' id: BrickTileWhiteLineE decals: 166: 1,53 - 1105: 20,-15 + 1102: 20,-15 - node: color: '#9D9D97FF' id: BrickTileWhiteLineN decals: - 1307: 40,28 - 1308: 41,28 - 1309: 42,28 - 1310: 43,28 - 1311: 44,28 - 1312: 45,28 + 1304: 40,28 + 1305: 41,28 + 1306: 42,28 + 1307: 43,28 + 1308: 44,28 + 1309: 45,28 - node: color: '#9FED5896' id: BrickTileWhiteLineN @@ -1036,8 +1037,8 @@ entities: decals: 177: -1,54 178: 0,54 - 1153: 9,-18 - 1154: 10,-18 + 1150: 9,-18 + 1151: 10,-18 - node: color: '#BDFF8593' id: BrickTileWhiteLineN @@ -1056,33 +1057,33 @@ entities: decals: 143: 2,50 144: 3,50 - 500: 28,18 + 498: 28,18 - node: color: '#EFB341FF' id: BrickTileWhiteLineN decals: 169: 2,52 170: 3,52 - 1099: 17,-14 - 1100: 18,-14 - 1101: 19,-14 + 1096: 17,-14 + 1097: 18,-14 + 1098: 19,-14 - node: color: '#FFFFFFFF' id: BrickTileWhiteLineN decals: - 809: 2,2 - 810: 3,2 - 831: 3,-1 - 832: 4,-1 - 1236: -4,-25 + 807: 2,2 + 808: 3,2 + 829: 3,-1 + 830: 4,-1 + 1233: -4,-25 - node: color: '#334E6DFF' id: BrickTileWhiteLineS decals: 141: 2,50 142: 3,50 - 1297: 42,33 - 1298: 43,33 + 1294: 42,33 + 1295: 43,33 - node: color: '#52B4E9FF' id: BrickTileWhiteLineS @@ -1090,23 +1091,23 @@ entities: 138: -1,50 139: 0,50 140: 1,50 - 1333: -4,-34 + 1330: -4,-34 - node: color: '#7C5C98FF' id: BrickTileWhiteLineS decals: - 1404: 14,1 - 1405: 15,1 + 1401: 14,1 + 1402: 15,1 - node: color: '#9D9D97FF' id: BrickTileWhiteLineS decals: - 1315: 45,25 - 1316: 44,25 - 1317: 43,25 - 1318: 42,25 - 1319: 41,25 - 1320: 40,25 + 1312: 45,25 + 1313: 44,25 + 1314: 43,25 + 1315: 42,25 + 1316: 41,25 + 1317: 40,25 - node: color: '#9FED5896' id: BrickTileWhiteLineS @@ -1117,61 +1118,61 @@ entities: color: '#A46106FF' id: BrickTileWhiteLineS decals: - 1160: 8,-24 - 1161: 9,-24 - 1162: 10,-24 - 1334: -3,-34 + 1157: 8,-24 + 1158: 9,-24 + 1159: 10,-24 + 1331: -3,-34 - node: color: '#D381C9FF' id: BrickTileWhiteLineS decals: 152: -1,52 153: 0,52 - 1335: -5,-34 + 1332: -5,-34 - node: color: '#DE3A3A96' id: BrickTileWhiteLineS decals: 145: 2,52 146: 3,52 - 499: 28,16 + 497: 28,16 - node: color: '#EFB341FF' id: BrickTileWhiteLineS decals: 167: 2,54 168: 3,54 - 1102: 17,-16 - 1103: 18,-16 - 1104: 19,-16 - 1332: -2,-34 + 1099: 17,-16 + 1100: 18,-16 + 1101: 19,-16 + 1329: -2,-34 - node: color: '#FFFFFFFF' id: BrickTileWhiteLineS decals: - 811: 2,1 - 812: 3,1 + 809: 2,1 + 810: 3,1 - node: color: '#334E6DC8' id: BrickTileWhiteLineW decals: - 1329: -7,-32 + 1326: -7,-32 - node: color: '#334E6DFF' id: BrickTileWhiteLineW decals: - 1299: 41,34 + 1296: 41,34 - node: color: '#70707093' id: BrickTileWhiteLineW decals: - 1331: -7,-34 + 1328: -7,-34 - node: color: '#9D9D97FF' id: BrickTileWhiteLineW decals: - 1321: 39,26 - 1322: 39,27 + 1318: 39,26 + 1319: 39,27 - node: color: '#9FED5896' id: BrickTileWhiteLineW @@ -1186,7 +1187,7 @@ entities: color: '#C78B1993' id: BrickTileWhiteLineW decals: - 1330: -7,-33 + 1327: -7,-33 - node: color: '#D381C9FF' id: BrickTileWhiteLineW @@ -1196,359 +1197,359 @@ entities: color: '#DE3A3A96' id: BrickTileWhiteLineW decals: - 502: 27,17 + 500: 27,17 - node: color: '#EFB341FF' id: BrickTileWhiteLineW decals: - 1106: 16,-15 + 1103: 16,-15 - node: color: '#FFFFFFFF' id: Busha1 decals: - 1354: 28.377537,33.036083 - 1384: -25.060997,23.98543 + 1351: 28.377537,33.036083 + 1381: -25.060997,23.98543 - node: color: '#FFFFFFFF' id: Bushb2 decals: - 1349: 22.922419,33.036083 - 1350: 19.880083,33.942333 + 1346: 22.922419,33.036083 + 1347: 19.880083,33.942333 - node: color: '#FFFFFFFF' id: Bushb3 decals: - 1383: -23.045372,22.032305 + 1380: -23.045372,22.032305 - node: color: '#FFFFFFFF' id: Bushc1 decals: - 1351: 18.98016,34.92671 - 1352: 19.38641,32.098583 - 1353: 24.355186,34.536083 + 1348: 18.98016,34.92671 + 1349: 19.38641,32.098583 + 1350: 24.355186,34.536083 - node: color: '#FFFFFFFF' id: Bushc2 decals: - 1375: 34.975742,34.972504 - 1393: -22.967247,20.969805 + 1372: 34.975742,34.972504 + 1390: -22.967247,20.969805 - node: color: '#FFFFFFFF' id: Bushi1 decals: - 1373: 28.499575,31.984146 - 1374: 36.95945,33.952896 - 1385: -26.967247,21.92293 - 1387: -23.998497,23.938555 + 1370: 28.499575,31.984146 + 1371: 36.95945,33.952896 + 1382: -26.967247,21.92293 + 1384: -23.998497,23.938555 - node: color: '#FFFFFFFF' id: Bushi2 decals: - 1390: -26.014122,20.92293 + 1387: -26.014122,20.92293 - node: color: '#FFFFFFFF' id: Bushi3 decals: - 1372: 27.04645,31.937271 + 1369: 27.04645,31.937271 - node: color: '#FFFFFFFF' id: Bushi4 decals: - 1355: 31.565037,34.80171 - 1356: 32.45566,32.92671 - 1357: 29.877537,34.89546 + 1352: 31.565037,34.80171 + 1353: 32.45566,32.92671 + 1354: 29.877537,34.89546 - node: color: '#FFFFFFFF' id: Caution decals: - 981: -27,-6 - 1134: 11,-28 - 1135: 13,-28 - 1235: -41,16 + 978: -27,-6 + 1131: 11,-28 + 1132: 13,-28 + 1232: -41,16 - node: color: '#000000FF' id: CheckerNESW decals: - 778: 0,3 - 779: 1,3 - 780: 2,3 - 781: 3,3 - 782: 4,3 - 783: 5,3 - 784: 5,2 - 785: 0,2 - 786: 0,1 - 787: 5,1 - 788: 5,0 - 789: 4,0 - 790: 3,0 - 791: 2,0 - 792: 1,0 - 793: 0,0 - 794: 4,4 - 795: 3,4 - 796: 6,2 + 776: 0,3 + 777: 1,3 + 778: 2,3 + 779: 3,3 + 780: 4,3 + 781: 5,3 + 782: 5,2 + 783: 0,2 + 784: 0,1 + 785: 5,1 + 786: 5,0 + 787: 4,0 + 788: 3,0 + 789: 2,0 + 790: 1,0 + 791: 0,0 + 792: 4,4 + 793: 3,4 + 794: 6,2 - node: color: '#52B4E996' id: CheckerNESW decals: - 640: -17,12 - 641: -16,12 - 642: -17,13 - 643: -16,13 - 644: -17,14 - 645: -16,14 - 646: -17,15 - 647: -16,15 - 648: -16,16 - 649: -17,16 + 638: -17,12 + 639: -16,12 + 640: -17,13 + 641: -16,13 + 642: -17,14 + 643: -16,14 + 644: -17,15 + 645: -16,15 + 646: -16,16 + 647: -17,16 - node: color: '#A4610696' id: CheckerNESW decals: - 1218: 6,-28 - 1219: 6,-27 - 1220: 6,-26 - 1221: 5,-26 - 1222: 5,-27 - 1223: 5,-28 - 1224: 4,-28 - 1225: 4,-27 - 1226: 4,-26 + 1215: 6,-28 + 1216: 6,-27 + 1217: 6,-26 + 1218: 5,-26 + 1219: 5,-27 + 1220: 5,-28 + 1221: 4,-28 + 1222: 4,-27 + 1223: 4,-26 - node: color: '#D381C996' id: CheckerNESW decals: - 940: -13,-7 - 941: -13,-6 - 942: -12,-6 - 943: -12,-7 + 937: -13,-7 + 938: -13,-6 + 939: -12,-6 + 940: -12,-7 - node: color: '#DE3A3A96' id: CheckerNESW decals: - 381: 18,12 - 382: 18,13 - 383: 18,14 - 384: 18,15 - 385: 19,15 - 386: 19,14 - 387: 19,13 - 388: 19,12 - 389: 20,12 - 390: 20,13 - 391: 20,14 - 392: 20,15 - 393: 21,15 - 394: 21,14 - 395: 21,13 - 396: 21,12 - 397: 22,12 - 398: 22,13 - 399: 22,15 - 400: 22,14 - 401: 23,15 - 402: 23,14 - 403: 23,13 - 404: 23,12 - 405: 20,11 - 406: 21,11 - 563: 15,11 - 564: 14,12 - 565: 15,12 - 566: 16,12 - 567: 16,13 - 568: 15,13 - 569: 14,13 - 570: 14,14 - 571: 15,14 - 572: 16,14 - 573: 16,15 - 574: 15,15 - 575: 14,15 - 576: 13,14 - 577: 13,13 - 582: 10,13 - 583: 10,14 + 379: 18,12 + 380: 18,13 + 381: 18,14 + 382: 18,15 + 383: 19,15 + 384: 19,14 + 385: 19,13 + 386: 19,12 + 387: 20,12 + 388: 20,13 + 389: 20,14 + 390: 20,15 + 391: 21,15 + 392: 21,14 + 393: 21,13 + 394: 21,12 + 395: 22,12 + 396: 22,13 + 397: 22,15 + 398: 22,14 + 399: 23,15 + 400: 23,14 + 401: 23,13 + 402: 23,12 + 403: 20,11 + 404: 21,11 + 561: 15,11 + 562: 14,12 + 563: 15,12 + 564: 16,12 + 565: 16,13 + 566: 15,13 + 567: 14,13 + 568: 14,14 + 569: 15,14 + 570: 16,14 + 571: 16,15 + 572: 15,15 + 573: 14,15 + 574: 13,14 + 575: 13,13 + 580: 10,13 + 581: 10,14 - node: color: '#52B4E996' id: CheckerNWSE decals: - 692: -8,8 - 693: -9,8 - 694: -10,8 - 695: -10,9 - 696: -9,9 - 697: -8,9 - 698: -8,10 - 699: -9,10 - 700: -10,10 - 701: -10,11 - 702: -9,11 - 703: -8,11 + 690: -8,8 + 691: -9,8 + 692: -10,8 + 693: -10,9 + 694: -9,9 + 695: -8,9 + 696: -8,10 + 697: -9,10 + 698: -10,10 + 699: -10,11 + 700: -9,11 + 701: -8,11 - node: color: '#DE3A3A96' id: CheckerNWSE decals: - 561: 34,11 - 562: 35,11 - 600: 15,7 - 601: 18,7 - 602: 12,7 + 559: 34,11 + 560: 35,11 + 598: 15,7 + 599: 18,7 + 600: 12,7 - node: color: '#EF5C1F93' id: CheckerNWSE decals: - 519: 32,23 - 520: 33,23 + 517: 32,23 + 518: 33,23 - node: color: '#EFB34196' id: CheckerNWSE decals: - 1008: 17,-5 - 1009: 16,-5 - 1010: 15,-5 + 1005: 17,-5 + 1006: 16,-5 + 1007: 15,-5 - node: color: '#FFFFFFFF' id: Delivery decals: - 979: -21,-14 - 980: -21,-10 - 1262: -6,52 - 1263: -7,53 - 1264: -8,52 - 1265: -7,51 - 1395: 11,27 - 1396: 12,27 - 1397: 13,27 + 976: -21,-14 + 977: -21,-10 + 1259: -6,52 + 1260: -7,53 + 1261: -8,52 + 1262: -7,51 + 1392: 11,27 + 1393: 12,27 + 1394: 13,27 - node: color: '#000000FF' id: DiagonalCheckerAOverlay decals: - 797: 2,2 - 798: 3,1 - 799: 1,1 - 800: 4,2 - 801: 2,1 - 802: 1,2 - 803: 3,2 - 804: 4,1 + 795: 2,2 + 796: 3,1 + 797: 1,1 + 798: 4,2 + 799: 2,1 + 800: 1,2 + 801: 3,2 + 802: 4,1 - node: color: '#334E6DC8' id: FullTileOverlayGreyscale decals: - 308: -7,29 - 309: -13,30 - 310: -16,30 - 321: 4,20 - 322: 4,17 + 306: -7,29 + 307: -13,30 + 308: -16,30 + 319: 4,20 + 320: 4,17 - node: color: '#52B4E996' id: FullTileOverlayGreyscale decals: - 482: 22,4 + 480: 22,4 - node: color: '#DE3A3A96' id: FullTileOverlayGreyscale decals: - 503: 30,13 - 504: 30,17 - 509: 32,19 - 510: 33,19 + 501: 30,13 + 502: 30,17 + 507: 32,19 + 508: 33,19 - node: color: '#EF5C1F93' id: FullTileOverlayGreyscale decals: - 513: 32,22 - 514: 33,22 - 515: 32,24 - 516: 33,24 - 535: 26,25 - 536: 26,27 + 511: 32,22 + 512: 33,22 + 513: 32,24 + 514: 33,24 + 533: 26,25 + 534: 26,27 - node: color: '#FFFFFFFF' id: Grassa3 decals: - 1344: 25.518755,33.161083 - 1345: 28.102278,34.536083 - 1346: 30.90701,33.067333 - 1388: -24.060997,21.969805 + 1341: 25.518755,33.161083 + 1342: 28.102278,34.536083 + 1343: 30.90701,33.067333 + 1385: -24.060997,21.969805 - node: color: '#FFFFFFFF' id: Grassc1 decals: - 1347: 33.051407,34.442333 - 1348: 35.00453,33.848583 + 1344: 33.051407,34.442333 + 1345: 35.00453,33.848583 - node: color: '#FFFFFFFF' id: Grassd1 decals: - 1343: 22.28438,34.23921 + 1340: 22.28438,34.23921 - node: color: '#FFFFFFFF' id: Grassd3 decals: - 1369: 28.9527,33.984146 - 1370: 26.85895,32.952896 + 1366: 28.9527,33.984146 + 1367: 26.85895,32.952896 - node: color: '#FFFFFFFF' id: Grasse1 decals: - 1368: 21.980526,32.077896 + 1365: 21.980526,32.077896 - node: color: '#FFFFFFFF' id: Grasse2 decals: - 1365: 23.027401,35.28102 - 1366: 24.996151,35.327896 - 1367: 23.902401,32.12477 + 1362: 23.027401,35.28102 + 1363: 24.996151,35.327896 + 1364: 23.902401,32.12477 - node: color: '#FFFFFFFF' id: Grasse3 decals: - 1362: 20.983843,34.62477 - 1363: 19.968218,33.077896 - 1364: 23.34307,34.234146 - 1389: -25.998497,19.938555 + 1359: 20.983843,34.62477 + 1360: 19.968218,33.077896 + 1361: 23.34307,34.234146 + 1386: -25.998497,19.938555 - node: color: '#2BAF9D93' id: HalfTileOverlayGreyscale decals: - 1433: 32,-17 + 1430: 32,-17 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale decals: - 305: -11,31 - 306: -10,31 - 307: -9,31 - 319: 4,19 - 323: 4,16 - 324: 3,16 - 325: 5,16 - 342: 2,25 - 343: 3,25 - 344: 4,25 - 345: -2,32 - 346: -3,32 - 347: 0,31 - 348: -5,31 - 372: -3,17 - 373: -2,17 - 374: -1,17 - 375: 0,17 - 376: 1,17 + 303: -11,31 + 304: -10,31 + 305: -9,31 + 317: 4,19 + 321: 4,16 + 322: 3,16 + 323: 5,16 + 340: 2,25 + 341: 3,25 + 342: 4,25 + 343: -2,32 + 344: -3,32 + 345: 0,31 + 346: -5,31 + 370: -3,17 + 371: -2,17 + 372: -1,17 + 373: 0,17 + 374: 1,17 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale decals: - 469: 21,7 - 470: 22,7 - 473: 22,3 - 716: -17,21 - 717: -16,21 - 718: -15,21 - 719: -14,21 + 467: 21,7 + 468: 22,7 + 471: 22,3 + 714: -17,21 + 715: -16,21 + 716: -15,21 + 717: -14,21 - node: color: '#9FED5896' id: HalfTileOverlayGreyscale @@ -1558,67 +1559,67 @@ entities: color: '#D381C996' id: HalfTileOverlayGreyscale decals: - 845: -11,-2 - 846: -10,-2 - 900: -18,-1 - 901: -17,-1 - 902: -16,-1 + 843: -11,-2 + 844: -10,-2 + 898: -18,-1 + 899: -17,-1 + 900: -16,-1 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale decals: - 468: 32,18 - 556: 37,13 + 466: 32,18 + 554: 37,13 - node: color: '#EF5C1F93' id: HalfTileOverlayGreyscale decals: - 511: 32,21 - 512: 33,21 - 525: 28,28 - 526: 29,28 - 527: 30,28 - 528: 31,28 - 529: 32,28 + 509: 32,21 + 510: 33,21 + 523: 28,28 + 524: 29,28 + 525: 30,28 + 526: 31,28 + 527: 32,28 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale decals: - 1080: 12,-11 - 1081: 13,-11 - 1082: 14,-11 - 1083: 15,-11 + 1077: 12,-11 + 1078: 13,-11 + 1079: 14,-11 + 1080: 15,-11 - node: color: '#2BAF9D93' id: HalfTileOverlayGreyscale180 decals: - 1434: 32,-19 + 1431: 32,-19 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale180 decals: - 294: -11,26 - 295: -9,26 - 296: -10,26 - 320: 4,18 - 349: 4,21 - 350: 2,23 - 351: 1,23 - 352: -1,27 - 353: -2,27 - 354: -5,27 - 355: -4,27 - 356: -3,27 + 292: -11,26 + 293: -9,26 + 294: -10,26 + 318: 4,18 + 347: 4,21 + 348: 2,23 + 349: 1,23 + 350: -1,27 + 351: -2,27 + 352: -5,27 + 353: -4,27 + 354: -3,27 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale180 decals: - 471: 21,5 - 472: 22,5 - 712: -17,18 - 713: -16,18 - 714: -15,18 - 715: -14,18 + 469: 21,5 + 470: 22,5 + 710: -17,18 + 711: -16,18 + 712: -15,18 + 713: -14,18 - node: color: '#707070FF' id: HalfTileOverlayGreyscale180 @@ -1631,67 +1632,67 @@ entities: color: '#79150096' id: HalfTileOverlayGreyscale180 decals: - 286: 1,14 + 284: 1,14 - node: color: '#D381C996' id: HalfTileOverlayGreyscale180 decals: - 847: -12,-4 - 848: -11,-4 - 849: -10,-4 - 907: -16,-7 - 908: -17,-7 - 909: -18,-7 + 845: -12,-4 + 846: -11,-4 + 847: -10,-4 + 905: -16,-7 + 906: -17,-7 + 907: -18,-7 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale180 decals: - 507: 32,20 - 508: 33,20 - 555: 37,10 + 505: 32,20 + 506: 33,20 + 553: 37,10 - node: color: '#EF5C1F93' id: HalfTileOverlayGreyscale180 decals: - 521: 32,25 - 522: 31,25 - 523: 29,24 - 524: 28,24 + 519: 32,25 + 520: 31,25 + 521: 29,24 + 522: 28,24 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale180 decals: - 1077: 15,-12 - 1078: 12,-13 - 1079: 13,-13 + 1074: 15,-12 + 1075: 12,-13 + 1076: 13,-13 - node: color: '#2BAF9D93' id: HalfTileOverlayGreyscale270 decals: - 1436: 31,-18 + 1433: 31,-18 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale270 decals: - 301: -12,27 - 302: -12,28 - 303: -12,29 - 304: -12,30 - 365: -6,28 - 366: -6,29 - 367: -6,30 - 368: 0,26 - 369: 0,25 - 370: 0,24 - 371: 3,22 + 299: -12,27 + 300: -12,28 + 301: -12,29 + 302: -12,30 + 363: -6,28 + 364: -6,29 + 365: -6,30 + 366: 0,26 + 367: 0,25 + 368: 0,24 + 369: 3,22 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale270 decals: - 475: 20,6 - 671: -27,10 - 722: -18,20 - 727: -18,19 + 473: 20,6 + 669: -27,10 + 720: -18,20 + 725: -18,19 - node: color: '#9FED5896' id: HalfTileOverlayGreyscale270 @@ -1701,69 +1702,68 @@ entities: color: '#A4610696' id: HalfTileOverlayGreyscale270 decals: - 1203: 8,-27 + 1200: 8,-27 - node: color: '#D381C996' id: HalfTileOverlayGreyscale270 decals: - 851: -13,-3 - 852: -13,-2 - 910: -19,-6 - 911: -19,-5 - 912: -19,-4 - 913: -19,-3 - 914: -19,-2 + 849: -13,-3 + 850: -13,-2 + 908: -19,-6 + 909: -19,-5 + 910: -19,-4 + 911: -19,-2 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale270 decals: - 559: 36,11 - 560: 36,12 - 586: 11,13 - 587: 11,14 + 557: 36,11 + 558: 36,12 + 584: 11,13 + 585: 11,14 - node: color: '#EF5C1F93' id: HalfTileOverlayGreyscale270 decals: - 532: 27,25 - 533: 27,26 - 534: 27,27 + 530: 27,25 + 531: 27,26 + 532: 27,27 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale270 decals: - 1021: 15,-8 - 1084: 11,-12 + 1018: 15,-8 + 1081: 11,-12 - node: color: '#2BAF9D93' id: HalfTileOverlayGreyscale90 decals: - 1435: 33,-18 + 1432: 33,-18 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale90 decals: - 297: -8,27 - 298: -8,28 - 299: -8,29 - 300: -8,30 - 357: 5,22 - 358: 5,23 - 359: 5,24 - 360: 1,26 - 361: 1,27 - 362: 1,28 - 363: 1,29 - 364: 1,30 + 295: -8,27 + 296: -8,28 + 297: -8,29 + 298: -8,30 + 355: 5,22 + 356: 5,23 + 357: 5,24 + 358: 1,26 + 359: 1,27 + 360: 1,28 + 361: 1,29 + 362: 1,30 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale90 decals: - 474: 23,6 - 669: -12,10 - 670: -12,9 - 720: -13,20 - 721: -13,19 + 472: 23,6 + 667: -12,10 + 668: -12,9 + 718: -13,20 + 719: -13,19 - node: color: '#707070FF' id: HalfTileOverlayGreyscale90 @@ -1777,388 +1777,388 @@ entities: color: '#9FED5896' id: HalfTileOverlayGreyscale90 decals: - 287: -5,2 + 285: -5,2 - node: color: '#A4610696' id: HalfTileOverlayGreyscale90 decals: - 1144: 6,-23 - 1145: 6,-22 - 1146: 6,-21 + 1141: 6,-23 + 1142: 6,-22 + 1143: 6,-21 - node: color: '#D381C996' id: HalfTileOverlayGreyscale90 decals: - 850: -9,-3 - 903: -15,-2 - 904: -15,-4 - 905: -15,-5 - 906: -15,-6 + 848: -9,-3 + 901: -15,-2 + 902: -15,-4 + 903: -15,-5 + 904: -15,-6 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale90 decals: - 557: 38,11 - 558: 38,12 - 584: 12,13 - 585: 12,14 + 555: 38,11 + 556: 38,12 + 582: 12,13 + 583: 12,14 - node: color: '#EF5C1F93' id: HalfTileOverlayGreyscale90 decals: - 530: 33,26 - 531: 33,27 + 528: 33,26 + 529: 33,27 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale90 decals: - 985: 13,-8 - 986: 13,-7 - 987: 13,-6 - 1020: 16,-8 + 982: 13,-8 + 983: 13,-7 + 984: 13,-6 + 1017: 16,-8 - node: color: '#FFFFFFFF' id: LoadingArea decals: - 1458: 1,17 + 1455: 1,17 - node: angle: 4.71238898038469 rad color: '#FFFFFFFF' id: LoadingArea decals: - 1459: 6,-23 + 1456: 6,-23 - node: color: '#D381C9FF' id: MiniTileSteelCornerNe decals: - 885: -32,-7 + 883: -32,-7 - node: color: '#D381C9FF' id: MiniTileSteelCornerNw decals: - 887: -31,-7 + 885: -31,-7 - node: color: '#D381C9FF' id: MiniTileSteelCornerSe decals: - 880: -25,-4 + 878: -25,-4 - node: color: '#D381C9FF' id: MiniTileSteelCornerSw decals: - 881: -29,-4 + 879: -29,-4 - node: color: '#D381C9FF' id: MiniTileSteelInnerNw decals: - 886: -30,-7 + 884: -30,-7 - node: color: '#D381C9FF' id: MiniTileSteelLineE decals: - 877: -25,-3 - 878: -25,-2 - 879: -25,-1 - 889: -32,-8 + 875: -25,-3 + 876: -25,-2 + 877: -25,-1 + 887: -32,-8 - node: color: '#D381C9FF' id: MiniTileSteelLineS decals: - 874: -28,-4 - 875: -27,-4 - 876: -26,-4 - 883: -32,-6 - 884: -31,-6 + 872: -28,-4 + 873: -27,-4 + 874: -26,-4 + 881: -32,-6 + 882: -31,-6 - node: color: '#D381C9FF' id: MiniTileSteelLineW decals: - 871: -29,-1 - 872: -29,-2 - 873: -29,-3 - 888: -31,-8 + 869: -29,-1 + 870: -29,-2 + 871: -29,-3 + 886: -31,-8 - node: color: '#52B4E9FF' id: MiniTileWhiteCornerNe decals: - 613: -24,7 + 611: -24,7 - node: color: '#EF7241FF' id: MiniTileWhiteCornerNe decals: - 752: -11,16 - 753: -9,14 + 750: -11,16 + 751: -9,14 - node: color: '#52B4E9FF' id: MiniTileWhiteCornerNw decals: - 612: -27,7 + 610: -27,7 - node: color: '#EF7241FF' id: MiniTileWhiteCornerNw decals: - 756: -14,16 + 754: -14,16 - node: color: '#52B4E9FF' id: MiniTileWhiteCornerSe decals: - 614: -24,5 + 612: -24,5 - node: color: '#D381C9FF' id: MiniTileWhiteCornerSe decals: - 926: -25,-8 + 923: -25,-8 - node: color: '#EF7241FF' id: MiniTileWhiteCornerSe decals: - 754: -9,13 + 752: -9,13 - node: color: '#52B4E9FF' id: MiniTileWhiteCornerSw decals: - 615: -27,5 + 613: -27,5 - node: color: '#D381C9FF' id: MiniTileWhiteCornerSw decals: - 927: -29,-8 + 924: -29,-8 - node: color: '#EF7241FF' id: MiniTileWhiteCornerSw decals: - 755: -14,13 + 753: -14,13 - node: color: '#7C5C98FF' id: MiniTileWhiteInnerNe decals: - 1402: 9,-3 + 1399: 9,-3 - node: color: '#EF7241FF' id: MiniTileWhiteInnerNe decals: - 766: -11,14 + 764: -11,14 - node: color: '#7C5C98FF' id: MiniTileWhiteInnerSe decals: - 1400: 13,1 - 1401: 9,-1 + 1397: 13,1 + 1398: 9,-1 - node: color: '#7C5C98FF' id: MiniTileWhiteInnerSw decals: - 1403: 16,1 + 1400: 16,1 - node: color: '#52B4E9FF' id: MiniTileWhiteLineE decals: - 604: -24,6 + 602: -24,6 - node: color: '#D381C9FF' id: MiniTileWhiteLineE decals: - 919: -25,-6 - 920: -25,-7 + 916: -25,-6 + 917: -25,-7 - node: color: '#EF7241FF' id: MiniTileWhiteLineE decals: - 761: -11,15 + 759: -11,15 - node: color: '#52B4E9FF' id: MiniTileWhiteLineN decals: - 609: -26,7 - 610: -25,7 + 607: -26,7 + 608: -25,7 - node: color: '#D381C9FF' id: MiniTileWhiteLineN decals: - 928: -21,-6 - 929: -22,-6 - 930: -23,-6 + 925: -21,-6 + 926: -22,-6 + 927: -23,-6 - node: color: '#EF7241FF' id: MiniTileWhiteLineN decals: - 764: -13,16 - 765: -12,16 - 767: -10,14 + 762: -13,16 + 763: -12,16 + 765: -10,14 - node: color: '#52B4E9FF' id: MiniTileWhiteLineS decals: - 605: -26,5 - 606: -26,5 - 607: -25,5 + 603: -26,5 + 604: -26,5 + 605: -25,5 - node: color: '#D381C9FF' id: MiniTileWhiteLineS decals: - 921: -26,-8 - 922: -27,-8 - 923: -28,-8 - 931: -23,-7 - 932: -22,-7 - 933: -21,-7 + 918: -26,-8 + 919: -27,-8 + 920: -28,-8 + 928: -23,-7 + 929: -22,-7 + 930: -21,-7 - node: color: '#EF7241FF' id: MiniTileWhiteLineS decals: - 757: -13,13 - 758: -12,13 - 759: -11,13 - 760: -10,13 + 755: -13,13 + 756: -12,13 + 757: -11,13 + 758: -10,13 - node: color: '#52B4E9FF' id: MiniTileWhiteLineW decals: - 608: -27,6 + 606: -27,6 - node: color: '#D381C9FF' id: MiniTileWhiteLineW decals: - 924: -29,-7 - 925: -29,-6 + 921: -29,-7 + 922: -29,-6 - node: color: '#EF7241FF' id: MiniTileWhiteLineW decals: - 762: -14,14 - 763: -14,15 + 760: -14,14 + 761: -14,15 - node: color: '#334E6DC8' id: MonoOverlay decals: - 1338: -8,-32 + 1335: -8,-32 - node: color: '#52B4E996' id: MonoOverlay decals: - 624: -11,10 - 625: -11,9 - 626: -11,6 - 627: -11,5 - 768: -10,7 - 769: -9,7 - 770: -13,12 - 771: -10,12 - 772: -9,12 - 773: -15,15 - 1337: -4,-35 + 622: -11,10 + 623: -11,9 + 624: -11,6 + 625: -11,5 + 766: -10,7 + 767: -9,7 + 768: -13,12 + 769: -10,12 + 770: -9,12 + 771: -15,15 + 1334: -4,-35 - node: color: '#52B4E9FF' id: MonoOverlay decals: - 611: -25,8 + 609: -25,8 - node: color: '#70707093' id: MonoOverlay decals: - 1340: -8,-34 + 1337: -8,-34 - node: color: '#A14F9793' id: MonoOverlay decals: - 867: -27,-3 - 868: -28,-2 - 869: -27,-1 - 870: -26,-2 - 882: -27,-5 + 865: -27,-3 + 866: -28,-2 + 867: -27,-1 + 868: -26,-2 + 880: -27,-5 - node: color: '#A4610696' id: MonoOverlay decals: - 1165: 5,-25 - 1166: 7,-27 - 1167: 9,-25 - 1168: 10,-25 - 1169: 12,-23 - 1170: 12,-22 - 1171: 7,-22 - 1172: 7,-21 - 1173: 7,-24 - 1176: 17,-22 - 1177: 17,-23 - 1342: -3,-35 + 1162: 5,-25 + 1163: 7,-27 + 1164: 9,-25 + 1165: 10,-25 + 1166: 12,-23 + 1167: 12,-22 + 1168: 7,-22 + 1169: 7,-21 + 1170: 7,-24 + 1173: 17,-22 + 1174: 17,-23 + 1339: -3,-35 - node: color: '#A46106FF' id: MonoOverlay decals: - 1174: 20,-25 - 1175: 21,-25 + 1171: 20,-25 + 1172: 21,-25 - node: color: '#C78B1993' id: MonoOverlay decals: - 1339: -8,-33 + 1336: -8,-33 - node: color: '#D381C996' id: MonoOverlay decals: - 944: -13,-8 - 945: -12,-8 - 946: -11,-7 - 947: -11,-6 - 948: -12,-5 - 949: -13,-5 - 950: -17,-8 - 1336: -5,-35 + 941: -13,-8 + 942: -12,-8 + 943: -11,-7 + 944: -11,-6 + 945: -12,-5 + 946: -13,-5 + 947: -17,-8 + 1333: -5,-35 - node: color: '#D381C9FF' id: MonoOverlay decals: - 934: -24,-6 - 935: -24,-7 - 936: -20,-6 - 937: -20,-7 - 938: -14,-7 - 939: -14,-6 + 931: -24,-6 + 932: -24,-7 + 933: -20,-6 + 934: -20,-7 + 935: -14,-7 + 936: -14,-6 - node: color: '#EF663193' id: MonoOverlay decals: - 1378: 34,23 + 1375: 34,23 - node: color: '#EFB34196' id: MonoOverlay decals: - 1022: 14,-8 - 1023: 14,-7 - 1024: 15,-6 - 1025: 16,-6 - 1026: 22,-10 - 1027: 23,-10 - 1028: 24,-8 - 1029: 27,-10 - 1030: 17,-11 - 1031: 17,-12 - 1032: 25,-13 - 1033: 30,-12 - 1034: 30,-11 - 1341: -2,-35 + 1019: 14,-8 + 1020: 14,-7 + 1021: 15,-6 + 1022: 16,-6 + 1023: 22,-10 + 1024: 23,-10 + 1025: 24,-8 + 1026: 27,-10 + 1027: 17,-11 + 1028: 17,-12 + 1029: 25,-13 + 1030: 30,-12 + 1031: 30,-11 + 1338: -2,-35 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale decals: - 327: 6,16 - 328: -4,31 + 325: 6,16 + 326: -4,31 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale decals: - 477: 23,3 - 616: -7,7 - 617: -7,8 - 618: -7,9 - 619: -7,10 - 620: -7,11 - 621: -7,12 - 622: -7,13 - 623: -7,14 - 687: -13,7 - 688: -13,6 + 475: 23,3 + 614: -7,7 + 615: -7,8 + 616: -7,9 + 617: -7,10 + 618: -7,11 + 619: -7,12 + 620: -7,13 + 621: -7,14 + 685: -13,7 + 686: -13,6 - node: color: '#79150096' id: QuarterTileOverlayGreyscale @@ -2188,25 +2188,25 @@ entities: color: '#A4610696' id: QuarterTileOverlayGreyscale decals: - 1150: 5,-20 - 1151: 4,-20 - 1152: 3,-20 - 1192: 13,-21 - 1193: 13,-22 - 1194: 13,-24 - 1195: 13,-23 - 1196: 13,-25 - 1197: 13,-26 - 1198: 12,-26 - 1199: 11,-26 - 1200: 10,-26 - 1201: 9,-26 - 1202: 8,-26 + 1147: 5,-20 + 1148: 4,-20 + 1149: 3,-20 + 1189: 13,-21 + 1190: 13,-22 + 1191: 13,-24 + 1192: 13,-23 + 1193: 13,-25 + 1194: 13,-26 + 1195: 12,-26 + 1196: 11,-26 + 1197: 10,-26 + 1198: 9,-26 + 1199: 8,-26 - node: color: '#B02E26FF' id: QuarterTileOverlayGreyscale decals: - 1303: 42,29 + 1300: 42,29 - node: color: '#D381C996' id: QuarterTileOverlayGreyscale @@ -2222,72 +2222,72 @@ entities: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale decals: - 463: 31,10 - 1465: 10,-5 - 1466: 11,-5 + 461: 31,10 + 1462: 10,-5 + 1463: 11,-5 - node: color: '#EF5C1F93' id: QuarterTileOverlayGreyscale decals: - 518: 34,21 + 516: 34,21 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale decals: - 988: 12,-5 - 990: 18,-5 - 991: 18,-4 - 992: 19,-4 - 993: 20,-4 - 994: 21,-4 - 995: 22,-4 - 1005: 18,-8 - 1006: 18,-7 - 1007: 18,-6 - 1057: 28,-11 - 1058: 27,-11 - 1059: 26,-11 - 1060: 25,-11 - 1061: 24,-11 - 1086: 25,-8 - 1087: 25,-7 - 1088: 25,-6 - 1089: 25,-5 - 1090: 25,-4 + 985: 12,-5 + 987: 18,-5 + 988: 18,-4 + 989: 19,-4 + 990: 20,-4 + 991: 21,-4 + 992: 22,-4 + 1002: 18,-8 + 1003: 18,-7 + 1004: 18,-6 + 1054: 28,-11 + 1055: 27,-11 + 1056: 26,-11 + 1057: 25,-11 + 1058: 24,-11 + 1083: 25,-8 + 1084: 25,-7 + 1085: 25,-6 + 1086: 25,-5 + 1087: 25,-4 - node: color: '#F9801DFF' id: QuarterTileOverlayGreyscale decals: - 1292: 45,34 + 1289: 45,34 - node: color: '#3C44AAFF' id: QuarterTileOverlayGreyscale180 decals: - 1285: 43,30 - 1286: 43,31 - 1287: 43,32 - 1288: 44,32 - 1289: 45,32 - 1290: 46,32 + 1282: 43,30 + 1283: 43,31 + 1284: 43,32 + 1285: 44,32 + 1286: 45,32 + 1287: 46,32 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale180 decals: - 672: -26,9 - 673: -25,9 - 674: -24,9 - 675: -23,9 - 678: -21,8 - 679: -20,8 - 680: -19,8 - 681: -18,8 - 682: -17,8 - 683: -15,8 - 684: -16,8 - 685: -14,8 - 689: -12,8 - 690: -12,7 - 691: -12,6 + 670: -26,9 + 671: -25,9 + 672: -24,9 + 673: -23,9 + 676: -21,8 + 677: -20,8 + 678: -19,8 + 679: -18,8 + 680: -17,8 + 681: -15,8 + 682: -16,8 + 683: -14,8 + 687: -12,8 + 688: -12,7 + 689: -12,6 - node: color: '#707070FF' id: QuarterTileOverlayGreyscale180 @@ -2300,9 +2300,8 @@ entities: decals: 276: -4,12 277: -3,13 - 283: -2,14 - 284: -1,14 - 285: 0,14 + 282: -2,14 + 283: -1,14 - node: color: '#9FED5896' id: QuarterTileOverlayGreyscale180 @@ -2314,96 +2313,96 @@ entities: 45: -5,-3 46: -5,-2 47: -5,-1 - 289: -5,3 + 287: -5,3 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale180 decals: - 426: 13,8 - 427: 14,8 - 428: 15,8 - 429: 16,8 - 430: 17,8 - 431: 18,8 - 432: 20,8 - 433: 19,8 - 434: 21,8 - 435: 22,8 - 436: 23,8 - 437: 24,8 - 438: 25,8 - 439: 26,8 - 440: 27,8 - 441: 28,8 - 442: 29,8 - 443: 30,8 - 444: 31,8 - 445: 32,8 - 446: 33,8 - 447: 33,9 - 448: 33,10 - 449: 33,11 - 450: 33,12 - 451: 33,13 - 452: 33,14 - 453: 33,15 - 454: 33,17 - 455: 33,16 - 505: 31,20 - 603: 12,8 + 424: 13,8 + 425: 14,8 + 426: 15,8 + 427: 16,8 + 428: 17,8 + 429: 18,8 + 430: 20,8 + 431: 19,8 + 432: 21,8 + 433: 22,8 + 434: 23,8 + 435: 24,8 + 436: 25,8 + 437: 26,8 + 438: 27,8 + 439: 28,8 + 440: 29,8 + 441: 30,8 + 442: 31,8 + 443: 32,8 + 444: 33,8 + 445: 33,9 + 446: 33,10 + 447: 33,11 + 448: 33,12 + 449: 33,13 + 450: 33,14 + 451: 33,15 + 452: 33,17 + 453: 33,16 + 503: 31,20 + 601: 12,8 - node: color: '#EF5C1F93' id: QuarterTileOverlayGreyscale180 decals: - 550: 30,25 + 548: 30,25 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale180 decals: - 996: 23,-5 - 997: 23,-6 - 998: 23,-7 - 999: 23,-8 - 1000: 23,-9 - 1001: 22,-9 - 1002: 21,-9 - 1003: 20,-9 - 1004: 19,-9 - 1051: 23,-12 - 1052: 22,-12 - 1053: 21,-12 - 1054: 20,-12 - 1055: 19,-12 - 1075: 14,-12 - 1091: 26,-9 - 1092: 27,-9 - 1093: 28,-9 - 1094: 29,-9 + 993: 23,-5 + 994: 23,-6 + 995: 23,-7 + 996: 23,-8 + 997: 23,-9 + 998: 22,-9 + 999: 21,-9 + 1000: 20,-9 + 1001: 19,-9 + 1048: 23,-12 + 1049: 22,-12 + 1050: 21,-12 + 1051: 20,-12 + 1052: 19,-12 + 1072: 14,-12 + 1088: 26,-9 + 1089: 27,-9 + 1090: 28,-9 + 1091: 29,-9 - node: color: '#F9801DFF' id: QuarterTileOverlayGreyscale180 decals: - 1291: 46,33 + 1288: 46,33 - node: color: '#2BAF9D93' id: QuarterTileOverlayGreyscale270 decals: - 1447: 32,-12 - 1448: 31,-12 + 1444: 32,-12 + 1445: 31,-12 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale270 decals: - 330: 0,27 - 331: 3,23 + 328: 0,27 + 329: 3,23 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale270 decals: - 676: -22,9 - 686: -13,8 - 1463: 10,-9 - 1464: 11,-9 + 674: -22,9 + 684: -13,8 + 1460: 10,-9 + 1461: 11,-9 - node: color: '#707070FF' id: QuarterTileOverlayGreyscale270 @@ -2417,12 +2416,11 @@ entities: 279: 5,13 280: 4,14 281: 3,14 - 282: 2,14 - node: color: '#9D9D97FF' id: QuarterTileOverlayGreyscale270 decals: - 1295: 39,33 + 1292: 39,33 - node: color: '#9FED5896' id: QuarterTileOverlayGreyscale270 @@ -2439,90 +2437,90 @@ entities: color: '#A4610696' id: QuarterTileOverlayGreyscale270 decals: - 1147: 5,-24 - 1148: 4,-24 - 1149: 3,-24 - 1178: 8,-28 - 1179: 9,-28 - 1210: 18,-22 - 1211: 18,-23 - 1212: 18,-24 - 1213: 19,-24 - 1214: 20,-24 - 1215: 21,-24 + 1144: 5,-24 + 1145: 4,-24 + 1146: 3,-24 + 1175: 8,-28 + 1176: 9,-28 + 1207: 18,-22 + 1208: 18,-23 + 1209: 18,-24 + 1210: 19,-24 + 1211: 20,-24 + 1212: 21,-24 - node: color: '#B02E26FF' id: QuarterTileOverlayGreyscale270 decals: - 1279: 39,32 - 1280: 40,32 - 1281: 41,32 - 1282: 42,32 - 1283: 42,31 - 1284: 42,30 + 1276: 39,32 + 1277: 40,32 + 1278: 41,32 + 1279: 42,32 + 1280: 42,31 + 1281: 42,30 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale270 decals: - 456: 31,17 - 457: 31,16 - 458: 31,15 - 459: 31,14 - 460: 31,13 - 461: 31,12 - 462: 31,11 - 506: 34,20 + 454: 31,17 + 455: 31,16 + 456: 31,15 + 457: 31,14 + 458: 31,13 + 459: 31,12 + 460: 31,11 + 504: 34,20 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale270 decals: - 989: 12,-9 - 1047: 28,-12 - 1048: 27,-12 - 1049: 26,-12 - 1050: 25,-12 - 1056: 24,-12 - 1442: 31,-11 - 1443: 32,-11 + 986: 12,-9 + 1044: 28,-12 + 1045: 27,-12 + 1046: 26,-12 + 1047: 25,-12 + 1053: 24,-12 + 1439: 31,-11 + 1440: 32,-11 - node: color: '#2BAF9D93' id: QuarterTileOverlayGreyscale90 decals: - 1441: 31,-11 - 1445: 32,-12 - 1446: 32,-11 + 1438: 31,-11 + 1442: 32,-12 + 1443: 32,-11 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale90 decals: - 326: 2,16 - 329: -1,31 - 341: 1,25 + 324: 2,16 + 327: -1,31 + 339: 1,25 - node: color: '#3C44AAFF' id: QuarterTileOverlayGreyscale90 decals: - 1304: 43,29 + 1301: 43,29 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale90 decals: - 476: 21,3 - 650: -12,11 - 651: -13,11 - 652: -15,11 - 653: -14,11 - 654: -16,11 - 655: -17,11 - 656: -18,11 - 657: -19,11 - 658: -20,11 - 659: -21,11 - 660: -22,11 - 661: -23,11 - 662: -24,11 - 663: -25,11 - 664: -26,11 + 474: 21,3 + 648: -12,11 + 649: -13,11 + 650: -15,11 + 651: -14,11 + 652: -16,11 + 653: -17,11 + 654: -18,11 + 655: -19,11 + 656: -20,11 + 657: -21,11 + 658: -22,11 + 659: -23,11 + 660: -24,11 + 661: -25,11 + 662: -26,11 - node: color: '#79150096' id: QuarterTileOverlayGreyscale90 @@ -2539,7 +2537,7 @@ entities: color: '#9D9D97FF' id: QuarterTileOverlayGreyscale90 decals: - 1296: 40,34 + 1293: 40,34 - node: color: '#9FED5896' id: QuarterTileOverlayGreyscale90 @@ -2548,380 +2546,390 @@ entities: 36: 5,-8 38: 4,-8 40: -5,-8 - 288: -5,1 + 286: -5,1 - node: color: '#A4610696' id: QuarterTileOverlayGreyscale90 decals: - 1180: 22,-26 - 1181: 21,-26 - 1182: 20,-26 - 1183: 19,-26 - 1184: 18,-26 - 1185: 16,-26 - 1186: 17,-26 - 1187: 16,-25 - 1188: 16,-24 - 1189: 16,-23 - 1190: 16,-22 - 1191: 16,-21 - 1205: 22,-21 - 1206: 21,-21 - 1207: 20,-21 - 1208: 19,-21 - 1209: 22,-22 - 1469: 22,-23 + 1177: 22,-26 + 1178: 21,-26 + 1179: 20,-26 + 1180: 19,-26 + 1181: 18,-26 + 1182: 16,-26 + 1183: 17,-26 + 1184: 16,-25 + 1185: 16,-24 + 1186: 16,-23 + 1187: 16,-22 + 1188: 16,-21 + 1202: 22,-21 + 1203: 21,-21 + 1204: 20,-21 + 1205: 19,-21 + 1206: 22,-22 + 1466: 22,-23 - node: color: '#D381C996' id: QuarterTileOverlayGreyscale90 decals: - 844: -12,-2 + 842: -12,-2 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale90 decals: - 377: 9,15 - 378: 9,14 - 379: 9,13 - 380: 9,12 - 407: 30,10 - 408: 29,10 - 409: 27,10 - 410: 28,10 - 411: 26,10 - 412: 24,10 - 413: 25,10 - 414: 23,10 - 415: 22,10 - 416: 21,10 - 417: 20,10 - 418: 19,10 - 419: 18,10 - 420: 17,10 - 421: 16,10 - 422: 15,10 - 423: 14,10 - 424: 13,10 - 425: 12,10 + 375: 9,15 + 376: 9,14 + 377: 9,13 + 378: 9,12 + 405: 30,10 + 406: 29,10 + 407: 27,10 + 408: 28,10 + 409: 26,10 + 410: 24,10 + 411: 25,10 + 412: 23,10 + 413: 22,10 + 414: 21,10 + 415: 20,10 + 416: 19,10 + 417: 18,10 + 418: 17,10 + 419: 16,10 + 420: 15,10 + 421: 14,10 + 422: 13,10 + 423: 12,10 - node: color: '#EF5C1F93' id: QuarterTileOverlayGreyscale90 decals: - 517: 31,21 + 515: 31,21 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale90 decals: - 1062: 23,-11 - 1063: 22,-11 - 1064: 21,-11 - 1065: 20,-11 - 1066: 19,-11 - 1444: 31,-12 + 1059: 23,-11 + 1060: 22,-11 + 1061: 21,-11 + 1062: 20,-11 + 1063: 19,-11 + 1441: 31,-12 - node: color: '#FFFFFFFF' id: Rock01 decals: - 1379: -27.060997,22.876055 + 1376: -27.060997,22.876055 - node: color: '#FFFFFFFF' id: Rock05 decals: - 1380: -25.107872,21.001055 + 1377: -25.107872,21.001055 - node: color: '#FFFFFFFF' id: Rock06 decals: - 1381: -25.060997,22.89168 + 1378: -25.060997,22.89168 - node: color: '#FFFFFFFF' id: Rock07 decals: - 1382: -23.045372,24.001055 + 1379: -23.045372,24.001055 + - node: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Rust + decals: + 1473: 16,22 + 1474: 15,20 + 1475: 12,20 + 1476: 17,20 + 1477: 14,21 - node: color: '#FFFFFFFF' id: StandClear decals: - 976: -17,-7 - 977: -8,-10 - 978: -8,-15 - 982: -27,-4 - 1132: 10,-27 - 1133: 14,-27 - 1394: 12,26 + 973: -17,-7 + 974: -8,-10 + 975: -8,-15 + 979: -27,-4 + 1129: 10,-27 + 1130: 14,-27 + 1391: 12,26 - node: angle: 4.71238898038469 rad color: '#FFFFFFFF' id: StandClear decals: - 1234: -40,22 + 1231: -40,22 - node: color: '#2BAF9D93' id: ThreeQuarterTileOverlayGreyscale decals: - 1438: 31,-17 + 1435: 31,-17 - node: color: '#334E6DC8' id: ThreeQuarterTileOverlayGreyscale decals: - 291: -12,31 - 311: -15,31 - 317: 3,19 - 336: -4,32 - 337: -6,31 + 289: -12,31 + 309: -15,31 + 315: 3,19 + 334: -4,32 + 335: -6,31 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale decals: - 478: 20,7 - 666: -27,11 - 723: -18,21 + 476: 20,7 + 664: -27,11 + 721: -18,21 - node: color: '#A4610696' id: ThreeQuarterTileOverlayGreyscale decals: - 1216: 18,-21 + 1213: 18,-21 - node: color: '#D381C996' id: ThreeQuarterTileOverlayGreyscale decals: - 843: -13,-1 - 915: -19,-1 + 841: -13,-1 + 912: -19,-1 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale decals: - 465: 11,10 - 467: 31,18 - 551: 36,13 - 579: 11,15 + 463: 11,10 + 465: 31,18 + 549: 36,13 + 577: 11,15 - node: color: '#EF5C1F93' id: ThreeQuarterTileOverlayGreyscale decals: - 537: 27,28 - 544: 24,28 - 545: 24,25 + 535: 27,28 + 542: 24,28 + 543: 24,25 - node: color: '#EF791B93' id: ThreeQuarterTileOverlayGreyscale decals: - 591: 11,6 - 592: 14,6 - 593: 17,6 + 589: 11,6 + 590: 14,6 + 591: 17,6 - node: color: '#EFB34196' id: ThreeQuarterTileOverlayGreyscale decals: - 1017: 15,-7 - 1068: 18,-11 - 1073: 11,-11 + 1014: 15,-7 + 1065: 18,-11 + 1070: 11,-11 - node: color: '#2BAF9D93' id: ThreeQuarterTileOverlayGreyscale180 decals: - 1440: 33,-19 + 1437: 33,-19 - node: color: '#334E6DC8' id: ThreeQuarterTileOverlayGreyscale180 decals: - 293: -8,26 - 314: -14,30 - 315: 5,18 - 340: 5,21 + 291: -8,26 + 312: -14,30 + 313: 5,18 + 338: 5,21 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale180 decals: - 481: 23,5 - 668: -12,5 - 726: -13,18 + 479: 23,5 + 666: -12,5 + 724: -13,18 - node: color: '#9D9D97FF' id: ThreeQuarterTileOverlayGreyscale180 decals: - 1294: 40,33 + 1291: 40,33 - node: color: '#A4610696' id: ThreeQuarterTileOverlayGreyscale180 decals: - 1143: 6,-24 - 1217: 22,-24 + 1140: 6,-24 + 1214: 22,-24 - node: color: '#D381C996' id: ThreeQuarterTileOverlayGreyscale180 decals: - 840: -9,-4 - 918: -15,-7 + 838: -9,-4 + 915: -15,-7 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale180 decals: - 554: 38,10 - 581: 12,12 + 552: 38,10 + 579: 12,12 - node: color: '#EF5C1F93' id: ThreeQuarterTileOverlayGreyscale180 decals: - 540: 30,24 - 541: 33,25 - 542: 25,24 - 543: 25,27 + 538: 30,24 + 539: 33,25 + 540: 25,24 + 541: 25,27 - node: color: '#EF791B93' id: ThreeQuarterTileOverlayGreyscale180 decals: - 597: 12,5 - 598: 15,5 - 599: 18,5 + 595: 12,5 + 596: 15,5 + 597: 18,5 - node: color: '#EFB34196' id: ThreeQuarterTileOverlayGreyscale180 decals: - 984: 13,-9 - 1019: 16,-9 - 1070: 29,-12 - 1071: 16,-12 - 1076: 14,-13 + 981: 13,-9 + 1016: 16,-9 + 1067: 29,-12 + 1068: 16,-12 + 1073: 14,-13 - node: color: '#2BAF9D93' id: ThreeQuarterTileOverlayGreyscale270 decals: - 1439: 31,-19 + 1436: 31,-19 - node: color: '#334E6DC8' id: ThreeQuarterTileOverlayGreyscale270 decals: - 292: -12,26 - 313: -15,30 - 318: 3,18 - 332: 3,21 - 338: 0,23 - 339: -6,27 + 290: -12,26 + 311: -15,30 + 316: 3,18 + 330: 3,21 + 336: 0,23 + 337: -6,27 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale270 decals: - 480: 20,5 - 665: -27,9 - 667: -13,5 - 677: -22,8 - 725: -18,18 + 478: 20,5 + 663: -27,9 + 665: -13,5 + 675: -22,8 + 723: -18,18 - node: color: '#D381C996' id: ThreeQuarterTileOverlayGreyscale270 decals: - 839: -13,-4 - 917: -19,-7 + 837: -13,-4 + 914: -19,-7 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale270 decals: - 464: 11,8 - 553: 36,10 - 578: 11,12 + 462: 11,8 + 551: 36,10 + 576: 11,12 - node: color: '#EF5C1F93' id: ThreeQuarterTileOverlayGreyscale270 decals: - 539: 27,24 - 548: 24,24 - 549: 24,27 + 537: 27,24 + 546: 24,24 + 547: 24,27 - node: color: '#EF791B93' id: ThreeQuarterTileOverlayGreyscale270 decals: - 594: 11,5 - 595: 14,5 - 596: 17,5 + 592: 11,5 + 593: 14,5 + 594: 17,5 - node: color: '#EFB34196' id: ThreeQuarterTileOverlayGreyscale270 decals: - 1011: 18,-9 - 1018: 15,-9 - 1069: 18,-12 - 1074: 11,-13 - 1085: 25,-9 + 1008: 18,-9 + 1015: 15,-9 + 1066: 18,-12 + 1071: 11,-13 + 1082: 25,-9 - node: color: '#F9801DFF' id: ThreeQuarterTileOverlayGreyscale270 decals: - 1293: 45,33 + 1290: 45,33 - node: color: '#2BAF9D93' id: ThreeQuarterTileOverlayGreyscale90 decals: - 1437: 33,-17 + 1434: 33,-17 - node: color: '#334E6DC8' id: ThreeQuarterTileOverlayGreyscale90 decals: - 290: -8,31 - 312: -14,31 - 316: 5,19 - 333: 5,25 - 334: 1,31 - 335: -1,32 + 288: -8,31 + 310: -14,31 + 314: 5,19 + 331: 5,25 + 332: 1,31 + 333: -1,32 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale90 decals: - 479: 23,7 - 724: -13,21 + 477: 23,7 + 722: -13,21 - node: color: '#A4610696' id: ThreeQuarterTileOverlayGreyscale90 decals: - 1142: 6,-20 + 1139: 6,-20 - node: color: '#D381C996' id: ThreeQuarterTileOverlayGreyscale90 decals: - 841: -9,-2 - 842: -12,-1 - 916: -15,-1 + 839: -9,-2 + 840: -12,-1 + 913: -15,-1 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale90 decals: - 466: 33,18 - 552: 38,13 - 580: 12,15 + 464: 33,18 + 550: 38,13 + 578: 12,15 - node: color: '#EF5C1F93' id: ThreeQuarterTileOverlayGreyscale90 decals: - 538: 33,28 - 546: 25,28 - 547: 25,25 + 536: 33,28 + 544: 25,28 + 545: 25,25 - node: color: '#EF791B93' id: ThreeQuarterTileOverlayGreyscale90 decals: - 588: 12,6 - 589: 15,6 - 590: 18,6 + 586: 12,6 + 587: 15,6 + 588: 18,6 - node: color: '#EFB34196' id: ThreeQuarterTileOverlayGreyscale90 decals: - 983: 13,-5 - 1012: 23,-4 - 1016: 16,-7 - 1067: 29,-11 - 1072: 16,-11 + 980: 13,-5 + 1009: 23,-4 + 1013: 16,-7 + 1064: 29,-11 + 1069: 16,-11 - node: color: '#FFFFFFFF' id: VentSmall decals: - 972: -21,-18 + 969: -21,-18 - node: color: '#FFFFFFFF' id: WarnBox decals: 129: -1,46 - 1270: -7,52 + 1267: -7,52 - node: color: '#FFFFFFFF' id: WarnCornerNE @@ -2933,20 +2941,20 @@ entities: decals: 5: -9,-15 133: -1,45 - 1406: -12,-52 + 1403: -12,-52 - node: color: '#FFFFFFFF' id: WarnCornerSE decals: 209: -2,23 - 1013: 17,-4 - 1376: -41,23 - 1467: 18,-1 + 1010: 17,-4 + 1373: -41,23 + 1464: 18,-1 - node: color: '#FFFFFFFF' id: WarnCornerSW decals: - 853: -11,-1 + 851: -11,-1 - node: color: '#FFFFFFFF' id: WarnCornerSmallNE @@ -2954,8 +2962,8 @@ entities: 81: -8,49 82: -9,50 135: -3,46 - 866: -29,-4 - 1233: -40,20 + 864: -29,-4 + 1230: -40,20 - node: color: '#FFFFFFFF' id: WarnCornerSmallNW @@ -2965,14 +2973,14 @@ entities: 80: -5,50 198: -2,23 213: -4,24 - 865: -25,-4 + 863: -25,-4 - node: color: '#FFFFFFFF' id: WarnCornerSmallSE decals: 83: -9,54 84: -8,55 - 1140: 9,-28 + 1137: 9,-28 - node: color: '#FFFFFFFF' id: WarnCornerSmallSW @@ -2980,7 +2988,7 @@ entities: 85: -6,55 86: -5,54 210: -4,26 - 1141: 15,-28 + 1138: 15,-28 - node: color: '#FFFFFFFF' id: WarnLineE @@ -2997,13 +3005,13 @@ entities: 137: -2,44 207: -2,24 208: -2,25 - 862: -29,-3 - 863: -29,-2 - 864: -29,-1 - 1230: -40,21 - 1231: -40,22 - 1232: -40,23 - 1269: -6,52 + 860: -29,-3 + 861: -29,-2 + 862: -29,-1 + 1227: -40,21 + 1228: -40,22 + 1229: -40,23 + 1266: -6,52 - node: color: '#FFFFFFFF' id: WarnLineN @@ -3016,24 +3024,24 @@ entities: 204: -5,23 205: -4,23 206: -3,23 - 854: -10,-1 - 855: -9,-1 - 1014: 16,-4 - 1015: 15,-4 - 1136: 11,-28 - 1137: 13,-28 - 1138: 14,-28 - 1139: 12,-28 - 1204: 10,-28 - 1266: -7,51 - 1377: -42,23 - 1409: -17,-12 - 1410: -16,-12 - 1428: -18,-16 - 1429: -17,-16 - 1430: -16,-16 - 1431: -18,-12 - 1468: 17,-1 + 852: -10,-1 + 853: -9,-1 + 1011: 16,-4 + 1012: 15,-4 + 1133: 11,-28 + 1134: 13,-28 + 1135: 14,-28 + 1136: 12,-28 + 1201: 10,-28 + 1263: -7,51 + 1374: -42,23 + 1406: -17,-12 + 1407: -16,-12 + 1425: -18,-16 + 1426: -17,-16 + 1427: -16,-16 + 1428: -18,-12 + 1465: 17,-1 - node: color: '#FFFFFFFF' id: WarnLineS @@ -3054,12 +3062,12 @@ entities: 199: -2,25 200: -2,24 211: -4,25 - 856: -25,-1 - 857: -25,-2 - 858: -25,-3 - 1267: -8,52 - 1407: -12,-53 - 1408: -12,-54 + 854: -25,-1 + 855: -25,-2 + 856: -25,-3 + 1264: -8,52 + 1404: -12,-53 + 1405: -12,-54 - node: color: '#FFFFFFFF' id: WarnLineW @@ -3073,33 +3081,33 @@ entities: 202: -4,23 203: -3,23 212: -5,24 - 859: -28,-4 - 860: -27,-4 - 861: -26,-4 - 951: -17,-9 - 952: -16,-9 - 953: -18,-17 - 954: -17,-17 - 955: -16,-17 - 956: -19,-17 - 957: -20,-17 - 970: -21,-17 - 971: -15,-17 - 1268: -7,53 - 1411: -17,-12 - 1412: -16,-12 - 1425: -18,-9 - 1432: -18,-12 + 857: -28,-4 + 858: -27,-4 + 859: -26,-4 + 948: -17,-9 + 949: -16,-9 + 950: -18,-17 + 951: -17,-17 + 952: -16,-17 + 953: -19,-17 + 954: -20,-17 + 967: -21,-17 + 968: -15,-17 + 1265: -7,53 + 1408: -17,-12 + 1409: -16,-12 + 1422: -18,-9 + 1429: -18,-12 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerNe decals: - 1272: 41,31 + 1269: 41,31 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerNw decals: - 1271: 44,31 + 1268: 44,31 - node: color: '#FFFFFFFF' id: WoodTrimThinInnerNe @@ -3121,8 +3129,8 @@ entities: 251: -1,12 252: -4,8 253: 3,12 - 1242: -8,-27 - 1243: -4,-27 + 1239: -8,-27 + 1240: -4,-27 - node: color: '#FFFFFFFF' id: WoodTrimThinInnerSw @@ -3130,8 +3138,8 @@ entities: 248: 6,8 249: -1,12 250: 3,12 - 1240: -6,-27 - 1241: -2,-27 + 1237: -6,-27 + 1238: -2,-27 - node: color: '#FFFFFFFF' id: WoodTrimThinLineE @@ -3141,7 +3149,7 @@ entities: 245: -1,9 246: 3,10 247: 3,11 - 1274: 41,30 + 1271: 41,30 - node: color: '#FFFFFFFF' id: WoodTrimThinLineN @@ -3153,12 +3161,12 @@ entities: 238: -2,9 239: 4,9 240: 5,9 - 833: 3,4 - 834: 4,4 - 1275: 40,31 - 1276: 39,31 - 1277: 45,31 - 1278: 46,31 + 831: 3,4 + 832: 4,4 + 1272: 40,31 + 1273: 39,31 + 1274: 45,31 + 1275: 46,31 - node: color: '#FFFFFFFF' id: WoodTrimThinLineS @@ -3177,8 +3185,8 @@ entities: 227: 0,12 228: 1,12 229: 2,12 - 1238: -7,-27 - 1239: -3,-27 + 1235: -7,-27 + 1236: -3,-27 - node: color: '#FFFFFFFF' id: WoodTrimThinLineW @@ -3189,7 +3197,22 @@ entities: 233: 3,10 241: -1,10 242: -1,11 - 1273: 44,30 + 1270: 44,30 + - node: + angle: 4.71238898038469 rad + color: '#69150079' + id: footprint + decals: + 1468: 12.797138,20.095083 + 1469: 13.359638,19.751333 + 1470: 13.890888,20.079458 + 1471: 14.422138,19.766958 + 1472: 12.219013,19.751333 + - node: + color: '#691500FF' + id: splatter + decals: + 1467: 12.062763,20.798208 type: DecalGrid - version: 2 data: @@ -3639,7 +3662,8 @@ entities: 9,1: 0: 65535 9,2: - 0: 65535 + 0: 65023 + 2: 512 9,3: 0: 65535 10,0: @@ -3937,7 +3961,8 @@ entities: -7,-7: 0: 65530 -6,-8: - 0: 65529 + 0: 61433 + 7: 4096 -6,-7: 0: 65535 -5,-8: @@ -4359,6 +4384,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.6852 + - 81.57766 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 chunkSize: 4 type: GridAtmosphere - type: GasTileOverlay @@ -4385,6 +4425,24 @@ entities: - pos: 3.5402613,7.6028175 parent: 1 type: Transform +- proto: ActionToggleLight + entities: + - uid: 9312 + components: + - flags: InContainer + type: MetaData + - parent: 12532 + type: Transform + - container: 12532 + type: InstantAction + - uid: 9313 + components: + - flags: InContainer + type: MetaData + - parent: 12533 + type: Transform + - container: 12533 + type: InstantAction - proto: AdvancedCapacitorStockPart entities: - uid: 9498 @@ -5528,12 +5586,6 @@ entities: pos: -15.5,30.5 parent: 1 type: Transform - - uid: 3609 - components: - - rot: 3.141592653589793 rad - pos: -9.5,44.5 - parent: 1 - type: Transform - uid: 4906 components: - rot: 3.141592653589793 rad @@ -5788,9 +5840,19 @@ entities: entities: - uid: 1523 components: - - pos: 23.5,-23.5 + - rot: -1.5707963267948966 rad + pos: 23.5,-23.5 parent: 1 type: Transform + - links: + - 1752 + type: DeviceLinkSink + - linkedPorts: + 1752: + - DoorStatus: DoorBolt + - DoorStatus: Close + - DoorStatus: AutoClose + type: DeviceLinkSource - uid: 1717 components: - rot: 1.5707963267948966 rad @@ -5805,9 +5867,19 @@ entities: type: Transform - uid: 1752 components: - - pos: 25.5,-25.5 + - rot: -1.5707963267948966 rad + pos: 25.5,-25.5 parent: 1 type: Transform + - links: + - 1523 + type: DeviceLinkSink + - linkedPorts: + 1523: + - DoorStatus: Close + - DoorStatus: DoorBolt + - DoorStatus: AutoClose + type: DeviceLinkSource - proto: AirlockExternalGlassEngineeringLocked entities: - uid: 3571 @@ -8423,7 +8495,7 @@ entities: entities: - uid: 9318 components: - - pos: 13.474606,21.591854 + - pos: 17.503937,22.695023 parent: 1 type: Transform - proto: BoxHandcuff @@ -25872,12 +25944,6 @@ entities: - pos: 29.5,35.5 parent: 1 type: Transform - - uid: 9316 - components: - - rot: 1.5707963267948966 rad - pos: 15.5,23.5 - parent: 1 - type: Transform - uid: 9361 components: - rot: 3.141592653589793 rad @@ -25941,6 +26007,12 @@ entities: pos: -28.5,11.5 parent: 1 type: Transform + - uid: 11796 + components: + - rot: 1.5707963267948966 rad + pos: 12.5,21.5 + parent: 1 + type: Transform - proto: ChairCursed entities: - uid: 8763 @@ -26432,10 +26504,10 @@ entities: pos: -26.5,-16.5 parent: 1 type: Transform - - uid: 9317 + - uid: 9315 components: - rot: -1.5707963267948966 rad - pos: 17.5,23.5 + pos: 14.5,21.5 parent: 1 type: Transform - uid: 9385 @@ -26680,6 +26752,13 @@ entities: - pos: -8.5,13.5 parent: 1 type: Transform +- proto: ChemDispenserMachineCircuitboard + entities: + - uid: 12610 + components: + - pos: -3.5024533,-34.563156 + parent: 1 + type: Transform - proto: ChemistryHotplate entities: - uid: 5871 @@ -26722,6 +26801,14 @@ entities: - pos: -9.5,-0.5 parent: 1 type: Transform +- proto: CleanerDispenser + entities: + - uid: 12616 + components: + - rot: -1.5707963267948966 rad + pos: 16.5,-0.5 + parent: 1 + type: Transform - proto: ClosetBase entities: - uid: 12521 @@ -26734,8 +26821,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.7459903 - - 6.568249 + - 1.8856695 + - 7.0937095 - 0 - 0 - 0 @@ -27422,7 +27509,7 @@ entities: entities: - uid: 9319 components: - - pos: 12.551676,20.51373 + - pos: 17.503937,23.273148 parent: 1 type: Transform - proto: ClothingHandsGlovesColorPurple @@ -27607,7 +27694,7 @@ entities: entities: - uid: 9321 components: - - pos: 12.497511,21.52373 + - pos: 17.53083,23.601284 parent: 1 type: Transform - proto: ClothingMaskSterile @@ -27860,12 +27947,12 @@ entities: entities: - uid: 9320 components: - - pos: 14.338758,21.725782 + - pos: 15.556145,23.521154 parent: 1 type: Transform - uid: 9497 components: - - pos: 14.573133,21.522657 + - pos: 15.337395,23.69303 parent: 1 type: Transform - proto: ClothingShoesBootsMag @@ -28661,7 +28748,7 @@ entities: - -0.4,0.29 mask: - Impassable - - MidImpassable + - TableLayer - HighImpassable - LowImpassable layer: @@ -28773,6 +28860,13 @@ entities: - pos: -21.430874,-29.30484 parent: 1 type: Transform +- proto: CryoPodMachineCircuitboard + entities: + - uid: 12611 + components: + - pos: -3.3774533,-34.32878 + parent: 1 + type: Transform - proto: CultAltarSpawner entities: - uid: 8760 @@ -28889,6 +28983,28 @@ entities: pos: -21.5,23.5 parent: 1 type: Transform + - uid: 12625 + components: + - pos: 18.5,-2.5 + parent: 1 + type: Transform + - uid: 12626 + components: + - rot: 1.5707963267948966 rad + pos: 7.5,-18.5 + parent: 1 + type: Transform + - uid: 12627 + components: + - rot: 1.5707963267948966 rad + pos: -19.5,-0.5 + parent: 1 + type: Transform + - uid: 12628 + components: + - pos: 27.5,11.5 + parent: 1 + type: Transform - proto: DeployableBarrier entities: - uid: 760 @@ -32316,6 +32432,23 @@ entities: ReagentId: LongIslandIcedTea Quantity: 30 type: SolutionContainerManager +- proto: DrinkWaterCup + entities: + - uid: 12619 + components: + - pos: 16.35999,13.763724 + parent: 1 + type: Transform + - uid: 12620 + components: + - pos: 16.469364,13.701224 + parent: 1 + type: Transform + - uid: 12621 + components: + - pos: 16.625614,13.763724 + parent: 1 + type: Transform - proto: DrinkWhiskeyBottleFull entities: - uid: 5357 @@ -32464,6 +32597,29 @@ entities: - enabled: True type: PointLight - type: ActiveEmergencyLight + - uid: 9503 + components: + - rot: 3.141592653589793 rad + pos: -7.5,48.5 + parent: 1 + type: Transform + - uid: 9504 + components: + - pos: -5.5,56.5 + parent: 1 + type: Transform + - uid: 9505 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,54.5 + parent: 1 + type: Transform + - uid: 9506 + components: + - rot: -1.5707963267948966 rad + pos: 3.5,50.5 + parent: 1 + type: Transform - uid: 12362 components: - rot: 1.5707963267948966 rad @@ -32815,6 +32971,11 @@ entities: - enabled: True type: PointLight - type: ActiveEmergencyLight + - uid: 12609 + components: + - pos: -1.5,47.5 + parent: 1 + type: Transform - proto: EmergencyMedipen entities: - uid: 1925 @@ -35660,14 +35821,42 @@ entities: type: Transform - uid: 12532 components: - - pos: 12.504955,21.180922 + - pos: 16.59333,23.726284 parent: 1 type: Transform + - toggleActionEntity: 9312 + type: HandheldLight + - containers: + cell_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + actions: !type:Container + showEnts: False + occludes: True + ents: + - 9312 + type: ContainerContainer + - type: ActionsContainer - uid: 12533 components: - - pos: 12.504955,20.899672 + - pos: 16.59333,23.476284 parent: 1 type: Transform + - toggleActionEntity: 9313 + type: HandheldLight + - containers: + cell_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + actions: !type:Container + showEnts: False + occludes: True + ents: + - 9313 + type: ContainerContainer + - type: ActionsContainer - proto: Floodlight entities: - uid: 7307 @@ -55435,6 +55624,16 @@ entities: - pos: -27.397102,-5.3872204 parent: 1 type: Transform +- proto: LightBulbBroken + entities: + - uid: 12623 + components: + - flags: InContainer + type: MetaData + - parent: 12622 + type: Transform + - canCollide: False + type: Physics - proto: LightReplacer entities: - uid: 7668 @@ -56169,6 +56368,11 @@ entities: type: Transform - proto: MaintenanceFluffSpawner entities: + - uid: 5408 + components: + - pos: 13.5,21.5 + parent: 1 + type: Transform - uid: 8830 components: - pos: -25.5,-24.5 @@ -56249,11 +56453,6 @@ entities: - pos: -13.5,27.5 parent: 1 type: Transform - - uid: 9330 - components: - - pos: 16.5,23.5 - parent: 1 - type: Transform - uid: 9471 components: - pos: 14.5,30.5 @@ -60226,12 +60425,6 @@ entities: type: Transform - powerLoad: 0 type: ApcPowerReceiver - - uid: 9331 - components: - - rot: 1.5707963267948966 rad - pos: 15.5,22.5 - parent: 1 - type: Transform - uid: 9649 components: - rot: 1.5707963267948966 rad @@ -60278,6 +60471,20 @@ entities: pos: -42.5,-23.5 parent: 1 type: Transform + - uid: 12622 + components: + - rot: 3.141592653589793 rad + pos: 15.5,20.5 + parent: 1 + type: Transform + - containers: + light_bulb: !type:ContainerSlot + showEnts: False + occludes: True + ent: 12623 + type: ContainerContainer + - powerLoad: 0 + type: ApcPowerReceiver - proto: Protolathe entities: - uid: 3806 @@ -60500,9 +60707,9 @@ entities: - pos: 20.5,-18.5 parent: 1 type: Transform - - uid: 9314 + - uid: 9316 components: - - pos: 14.5,21.5 + - pos: 15.5,23.5 parent: 1 type: Transform - uid: 9323 @@ -61505,11 +61712,6 @@ entities: - pos: 20.5,26.5 parent: 1 type: Transform - - uid: 11796 - components: - - pos: 15.5,21.5 - parent: 1 - type: Transform - uid: 11799 components: - pos: 17.5,26.5 @@ -62065,6 +62267,12 @@ entities: - pos: -22.5,-28.5 parent: 1 type: Transform + - uid: 12617 + components: + - rot: -1.5707963267948966 rad + pos: 16.5,20.5 + parent: 1 + type: Transform - proto: RandomVending entities: - uid: 7525 @@ -64378,6 +64586,14 @@ entities: - pos: 5.5,-4.5 parent: 1 type: Transform +- proto: ShardGlass + entities: + - uid: 9317 + components: + - rot: -1.5707963267948966 rad + pos: 14.797138,20.579458 + parent: 1 + type: Transform - proto: SheetGlass entities: - uid: 5600 @@ -64504,7 +64720,7 @@ entities: entities: - uid: 5419 components: - - pos: 38.4375,10.569345 + - pos: 37.26254,10.609375 parent: 1 type: Transform - uid: 5599 @@ -64558,7 +64774,7 @@ entities: type: Transform - uid: 5420 components: - - pos: 38.59375,10.569345 + - pos: 37.653164,10.59375 parent: 1 type: Transform - uid: 6018 @@ -66753,6 +66969,13 @@ entities: - pos: 25.5,13.5 parent: 1 type: Transform +- proto: SpawnMobSmile + entities: + - uid: 12624 + components: + - pos: -18.5,-3.5 + parent: 1 + type: Transform - proto: SpawnMobWalter entities: - uid: 5922 @@ -67612,14 +67835,14 @@ entities: type: Transform - proto: SuitStorageSec entities: - - uid: 4917 + - uid: 4932 components: - - pos: 37.5,10.5 + - pos: 23.5,13.5 parent: 1 type: Transform - - uid: 4932 + - uid: 9331 components: - - pos: 23.5,13.5 + - pos: 38.5,10.5 parent: 1 type: Transform - proto: SuitStorageWarden @@ -68556,11 +68779,6 @@ entities: - pos: 38.5,12.5 parent: 1 type: Transform - - uid: 5408 - components: - - pos: 38.5,10.5 - parent: 1 - type: Transform - uid: 5409 components: - pos: 38.5,11.5 @@ -69062,25 +69280,10 @@ entities: parent: 1 type: Transform - uid: 9311 - components: - - pos: 16.5,23.5 - parent: 1 - type: Transform - - uid: 9312 - components: - - pos: 12.5,21.5 - parent: 1 - type: Transform - - uid: 9313 components: - pos: 13.5,21.5 parent: 1 type: Transform - - uid: 9315 - components: - - pos: 12.5,20.5 - parent: 1 - type: Transform - uid: 9324 components: - pos: -14.5,27.5 @@ -69091,6 +69294,11 @@ entities: - pos: -13.5,27.5 parent: 1 type: Transform + - uid: 9330 + components: + - pos: 37.5,10.5 + parent: 1 + type: Transform - uid: 9350 components: - pos: 12.5,17.5 @@ -69411,6 +69619,21 @@ entities: - pos: -14.5,-10.5 parent: 1 type: Transform + - uid: 12613 + components: + - pos: 17.5,23.5 + parent: 1 + type: Transform + - uid: 12614 + components: + - pos: 16.5,23.5 + parent: 1 + type: Transform + - uid: 12615 + components: + - pos: 17.5,22.5 + parent: 1 + type: Transform - proto: TableWood entities: - uid: 165 @@ -79630,6 +79853,9 @@ entities: type: Transform - location: bar type: WarpPoint + - color: '#9DED58FF' + text: Service + type: NavMapBeacon - uid: 12046 components: - rot: 1.5707963267948966 rad @@ -79638,6 +79864,9 @@ entities: type: Transform - location: bridge type: WarpPoint + - color: '#FFFF00FF' + text: Command + type: NavMapBeacon - uid: 12047 components: - rot: 1.5707963267948966 rad @@ -79654,6 +79883,9 @@ entities: type: Transform - location: med type: WarpPoint + - color: '#52B4E9FF' + text: Medical + type: NavMapBeacon - uid: 12049 components: - rot: 1.5707963267948966 rad @@ -79662,6 +79894,9 @@ entities: type: Transform - location: sci type: WarpPoint + - color: '#D381C9FF' + text: Science + type: NavMapBeacon - uid: 12050 components: - rot: 1.5707963267948966 rad @@ -79670,6 +79905,9 @@ entities: type: Transform - location: engi type: WarpPoint + - color: '#ED8B41FF' + text: Engineering + type: NavMapBeacon - uid: 12051 components: - rot: 1.5707963267948966 rad @@ -79692,8 +79930,11 @@ entities: pos: 21.5,13.5 parent: 1 type: Transform - - location: sec + - location: Security type: WarpPoint + - color: '#DE3A3AFF' + text: Security + type: NavMapBeacon - uid: 12054 components: - rot: 1.5707963267948966 rad @@ -79718,6 +79959,9 @@ entities: type: Transform - location: cargo type: WarpPoint + - color: '#A46106FF' + text: Cargo + type: NavMapBeacon - uid: 12057 components: - rot: 1.5707963267948966 rad @@ -79734,6 +79978,52 @@ entities: type: Transform - location: evac type: WarpPoint +- proto: WarpPointBombing + entities: + - uid: 9507 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,45.5 + parent: 1 + type: Transform + - location: AI power generators + type: WarpPoint + - uid: 11742 + components: + - pos: -1.5,30.5 + parent: 1 + type: Transform + - location: Command Bridge + type: WarpPoint + - uid: 11851 + components: + - pos: 24.5,-14.5 + parent: 1 + type: Transform + - location: Engineering SMES room + type: WarpPoint + - uid: 12291 + components: + - pos: -10.5,-1.5 + parent: 1 + type: Transform + - location: Science Front Desk + type: WarpPoint + - uid: 12357 + components: + - rot: -1.5707963267948966 rad + pos: 34.5,11.5 + parent: 1 + type: Transform + - location: Armory + type: WarpPoint + - uid: 12612 + components: + - pos: -11.5,-29.5 + parent: 1 + type: Transform + - location: Clowns room + type: WarpPoint - proto: WaterCooler entities: - uid: 4856 @@ -79746,6 +80036,11 @@ entities: - pos: -12.5,-18.5 parent: 1 type: Transform + - uid: 12618 + components: + - pos: 16.5,14.5 + parent: 1 + type: Transform - proto: WaterTankFull entities: - uid: 4948 @@ -80168,6 +80463,11 @@ entities: type: Transform - proto: WindoorSecureCommandLocked entities: + - uid: 3609 + components: + - pos: -9.5,44.5 + parent: 1 + type: Transform - uid: 3614 components: - rot: -1.5707963267948966 rad @@ -80566,6 +80866,12 @@ entities: pos: -11.5,20.5 parent: 1 type: Transform + - uid: 4917 + components: + - rot: -1.5707963267948966 rad + pos: 15.5,21.5 + parent: 1 + type: Transform - proto: WindowFrostedDirectional entities: - uid: 312 @@ -80762,4 +81068,11 @@ entities: - pos: -28.423817,12.547613 parent: 1 type: Transform +- proto: ZiptiesBroken + entities: + - uid: 9314 + components: + - pos: 12.522411,21.40144 + parent: 1 + type: Transform ... From 8bc4d2ab7a48becb1488f23eacc2504502cdf659 Mon Sep 17 00:00:00 2001 From: noctis <99278536+noctyrnal@users.noreply.github.com> Date: Sat, 9 Dec 2023 21:03:07 +0000 Subject: [PATCH 26/36] Familiar Garbs (#22253) * update time * removing maps and adding petah for pr * removed shitbox --------- Co-authored-by: camrynz <99278536+camrynz@users.noreply.github.com> --- .../Entities/Clothing/Uniforms/jumpsuits.yml | 11 +++++++ .../equipped-INNERCLOTHING-monkey.png | Bin 0 -> 1616 bytes .../equipped-INNERCLOTHING.png | Bin 0 -> 1701 bytes .../Jumpsuit/familiar_garbs.rsi/icon.png | Bin 0 -> 660 bytes .../familiar_garbs.rsi/inhand-left.png | Bin 0 -> 781 bytes .../familiar_garbs.rsi/inhand-right.png | Bin 0 -> 690 bytes .../Jumpsuit/familiar_garbs.rsi/meta.json | 30 ++++++++++++++++++ 7 files changed, 41 insertions(+) create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/equipped-INNERCLOTHING-monkey.png create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/equipped-INNERCLOTHING.png create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/meta.json diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml index ce8170a7b55..da5c620c596 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml @@ -1426,3 +1426,14 @@ - state: equipped-INNERCLOTHING-jumpsuit - state: equipped-INNERCLOTHING-shirt color: "#b30000" + +- type: entity + parent: ClothingUniformBase + id: ClothingUniformJumpsuitFamilyGuy + name: familiar garbs + description: Makes you remember the time you did something funny. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi \ No newline at end of file diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/equipped-INNERCLOTHING-monkey.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/equipped-INNERCLOTHING-monkey.png new file mode 100644 index 0000000000000000000000000000000000000000..50ad9b716fe90fe499e4778b444453b690b650c5 GIT binary patch literal 1616 zcmV-W2Cw;vP)A24X|2()u`3eNRlJ~WLXyL*RKbludh$ij)y`a0r2qQL;CysrRDlq4V3dc zoz7DI?CdO0^6OpU>M}qh_xt?-T)K3L^XJbmgu~(X-rn9nQ>he(4js~(ib|MJ&VS{~ z6(%Pq$>nl5ole|tHwO+JFvYLS09lp+=;-JGVDH|&T)%$3_UhHE|6IIyk$wC2m5yoc z`}_O#YB0>-)6+v+TO0T8-J`v|olGV}OH0dB?R7y2@xo1(<(7Cn{^{W0pb$ccd_FJo z`Mek%9WDJALWse^K@pF~kIAwu84~e=!5=$zY)d>I?2%HjKlpsU z!y120O$`7wH8mPPKA-PRVA$bs%<1i0(i1EcMcD)tfXzSx5W!%O8#ivSXU`rKMSHIsN&x?V90VXFW>Fn&}^y$;sY&L0n zdU~_N;jr87_Sxgdk5B92&>IBrF9o34Xf!Iq;V|KFnDNkUcJA~7(A(Q90Lkz7&jLiF zQ4>Rc8l$75Y~8vwzQq3^8jXsB2M>}+B(T|RBoYbs@88eJ$cSiaYLc`-sT+Fc$&n*R zfZ`e19_SL!+F(v&iU$2W$g<4PuNQ=;tH_^@C8=w%<8E@3jwM<5yG^=%`!=9|9bm|S z?SZb+;L{Vy((%XYDrmx%k2^%i?oI#_w8#iu5%sUMCY0Q8nc)Z0kJ~fs^Rn<~CJzn{#Ff}#B z!omWJi;Dncvsr958w(2y6bc10nT(i>62KDvzWPi_~sw%NqjIOROvcnnb>guSS zhghs~cL6B!1Es+>H#bvPS4Vw)J%vKSaDQw5eSm2LYHLl+p8p+Qxhr6Pe%?_1i(vRP zE=Q!QDypiQ5?}<&@vM~F&`R)CLPb}CuM?^USS`S6R1L6NfYqoPV6_0NQ8mD70al}G zfYk!5#+o<4)IPh6Znp%+(s70jkY!l} z0s*Zknwy(Bb?THP%d!BZ)l7>&2ZG`&SOIY2#0dZ*k%(5W8-@%hPjz`b9?qUU3qW6A zp9qCQM!GVMTrQ{m6(>)gEY+veX;b|fiUHfUZ4-e&0FTG>SiQ&N!R2z95?~ZAmkXE6 zwXBAvE7MSBz;qB)6y-73gTWv!mrJbHhY`<#2nK_tLOPw+((|TZI0i%_k;lp_AvcS1 zPAwjp)nU{CNpoLO6cLF;2#3Qs-`&9M%?FH!ikaC;hQZ)F{p{@XmN+$x%w3Z{Y52%+ zf2MAO?|=J2X`XF5Se%RY&IWc2Epq2@WfLPihPv>SagNMg(+-KDu?vQ8%Z6e=E|+6R zPxrDx=4EAwU%+KJHM=U=jr2qkPj{;X(ESBKMXv&BiF4TxHH^a06)-$J3_SaLfR}j{ zJcHZt6ws9yc%8B4ABL(1SS`S6R1L6NfYqoPV6_0NQ8mD70ajzp8}J|8Q4DJC2aO^C O0000dwot}8)(D#|%4Ahx6f^cP z7+m(SE`2Cegr#rxp^%4?f8gpn7sGCrhKcIaX(xg;UrX3h*cgeL-dlTmxW9&3B z_qPXguStx#_axEVVm=U(d(S=R`@KKU`FZZSha(~!WsaF`z-(#(Fx!CH)B<3(0kf$E zz-$9%QwxCE2F#|uR3XQ4dB=hvP;+xL0AP4{SS$4Td;|c=WD+AIBl(popiuwTty{Fc zy^TyJgPxuq?R+Q{LVbNb>~=eD-@ct!NpGfGG61;g0qR`gXR#AN;0WgvT+sDSn6!k!oB-m^= z*ladDefm`UElHAAA$$F4!`-knAB~NTY287RBv>pKa2y9B0>^Q%TCIip1mKL3#!Ci3 z5QKW3=MzLU==b}7DJ(yA>eQY(e!u^BB69LPzdAZP+GfN=34I&S^UFl^o!{?YH&Vy% z_bWv7HP7?^0QgYvdc7Wy2?PQJK;(ITxUg_}dAaaZbYx`YdjPKkfj}LA1|z0RkPZX_ z9Dqfh=k0nIXEGT8sLSeG0W|5=DH#A!6zwjTD=muRX}{mUr@TlH;Ij4pb-7$`MNv%Y z8PL%`;c~gQL{U6bOura6Z{CC`irrVQUR@VO@ju-PdPykvSP%r7ot@PZO&}1^64dPM zY}K;A5&dK`Ns&l|wzs$Q^jYqYh>XtzRNC9yv9z=V0I*mrkR%C9OG`L=_AF~tWs$2N zi^Tw-B7IJcbkV|Wrd4q`9CYH#R&0hg@NE1qp#2K4@*6&Pe};yhCagb>BODG_btbr< zes;WTH1*oC{y2`s#l?e}2?D@&H()z=9JX`EF)(u(wDuZY%Vo6uuv7jf6=!LVnOuDU zpfv?t%WfKblZpe2Y;BhPFhpw#qOWAonxcPkm1(SRL}Ps;wl+4k-{r!b1AyI|2Y~1+ z87I+^_m?gV{Wgkc|c!Z9{^x-auTW3 z&K7|1!os2TfbhZs03el0VRCXZ&l4+5IlyYQ0svN4R&edwHSN4C%W!md!s&Fv>-Cmp z#3)Xu6OPVKZM>^KR#sN>JQ{_$2jt$kiaPcVGY1qK@5Q|7!L%%X?#J_F`IAF)Zwr!7 z*0l4@y)D?7O<;aJ49iz^ptHmD9~^bL9ccQ(zQ;rI$r{oZ34i~(yGNj^`vU+VeUV^o zZ@>rN?(To$?8jjH_&6Ls1wjsdn%&^o~)4i+f?# z_TPD!dq80jD530IcF^Q%mrF$pB9u__^1)#feI-{Mgo*-CF#b%TQV(UV2muA}`_ vQw2Bxq$b0%8##nW_;(uf`>@Fz`2hS6q95gvW+~b-00000NkvXXu0mjfH*qD> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d0d58dedc812ed3516ad1a281e0cc709d12b791d GIT binary patch literal 660 zcmV;F0&D$=P)yT+PEJlHoTh0`*y{BGyy`j8vi}gph`T71kA70c!e*)f19z46x%EMK@9i5_Y zZ{U?%0w9;mO$C^`5&h1Nj@##_7&|79-{$DKpNJ-N+}i2;+vleM93LMCKQI@->rQ3D zW^DB*UeEo7-|>kNBbwAgzdsYezoK*@@K9eqjxIgF<3s1K-tt=4a~QpQ{sv||>B7ju u?*mJKCBVV~LNCL+Pw!m|z``rAaDYDvE7U5-`vofi00007aP^>4BJi|xr*h8D=F)WS=b80_I zT0B3xk|BYCAvwo>Th!Ws9(Koq(A8(k=1=0%(6jTsJlXP?gvIkvb2-*zo*qM`6gNrE8h3`!1vmRzyDpVh~4|KqQ*i+=J?9B<${VWR}NZ=vsTXQ*64B( zaqU>-@uYI!eC=q~=U*OKtXmp>Z2u-Mj>7`WG7oLb-4dmnc-ze9vWrC9r7DIcU-cCC za=a6>U}RW)@kNTAr;v(g6BqZwhn4s2zix=;NDT~PJbHBP_1B9(J}R8L`v8--&W1g! zwja0@kq~+PouC)fi;w#@=x`rcd@^tQZu9I&v8p}#ReR!HKdq7zxyQO>KNG9`zFMbg zsV_>bBzV|57IDlz%l5fl;_Ys;o%d9yure^j-(T|Mb8_qX_xm6G`)V5%D|}*J-#yC^ z)&vHD{hQ`9Fnpfc`S!i;gk1jTnqT!6tzo)Vo~vAcVrl8LgNrOe%O+koNV)y^Xny1N z_cyLSul>JcQq_E`DLc(l8Estiz9p|Xi94RqVzl((obH=BWt$!cZWX+Jf+3`A@zlKT z`$E@C4djXrFcLmI62ib ZE^_XCqYxgw9+1%O literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/inhand-right.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6a936d7c38122cf0c8b04d2c2fdbdbccff3de3e0 GIT binary patch literal 690 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wk0|Qfv zr;B4q#hkY@71!SikZ7B)m%Ml8%pII315`Ltjvgs^Du2a9!X?(Xoeggu_;g9*DeuNcq8UyLr!Te+eEh{7}1J?D4LTwerUcA3W@1eo%SO^?tCm z!`oa@)(5-RO-z+se37H#hL@v&Nvimheb)Q^mOD>NtrU1(!(Hwm(KcgQXYOr=Q`>TV zF01eyp7ri(EwQql)w8HWqica=x%|8r)glMN_c2Q3S1!I}vh@D@=f#<` z-tD_QrMrGp{zbun=7S3HORm3u+MRoRc9?qX+vqP6PyY7vt9UwXzny9$w>d&5V*T}+ zf1g`-PcPqk>-xd1`&t1&YW=NU7YmwA7ZQt46n*RaWi~w zJ^AcC+oZGqY9{Zvb^XHI551%W_ncbIU5j&j3q`$HH!KCxnp(1r+f0w8YDgbQOkNXn z{b=DF_g=%Z**$tene1EE8tOUU{NDgnuvAmj;kMLctq@D5-0U9jz^8^cb{*TnGnJ{~ po9VIXD}+FjK`+W8V6pw5;q4?XrcOb<^}s~P;OXk;vd$@?2>{0sGQa=; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/meta.json new file mode 100644 index 00000000000..a02f7be81bc --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/familiar_garbs.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from bartender outfit in SS14, edited by noctyrnal.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-INNERCLOTHING-monkey", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From 5da332f75ec6f0f762b5d8fc05598019fa6ed63c Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Sat, 9 Dec 2023 20:00:53 -0500 Subject: [PATCH 27/36] Stop terminating entities from being removed from containers (#22232) --- .../Hands/EntitySystems/SharedHandsSystem.Drop.cs | 3 +++ Content.Shared/Inventory/InventorySystem.Equip.cs | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs index 42909201328..15b07cb62f8 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs @@ -177,6 +177,9 @@ public virtual void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = tr var entity = hand.Container.ContainedEntity.Value; + if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(entity)) + return; + if (!hand.Container.Remove(entity, EntityManager)) { Log.Error($"Failed to remove {ToPrettyString(entity)} from users hand container when dropping. User: {ToPrettyString(uid)}. Hand: {hand.Name}."); diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs index a6c818ca7e8..456c8373df5 100644 --- a/Content.Shared/Inventory/InventorySystem.Equip.cs +++ b/Content.Shared/Inventory/InventorySystem.Equip.cs @@ -331,6 +331,10 @@ public bool TryUnequip(EntityUid actor, EntityUid target, string slot, [NotNullW bool force = false, bool predicted = false, InventoryComponent? inventory = null, ClothingComponent? clothing = null) { removedItem = null; + + if (TerminatingOrDeleted(target)) + return false; + if (!Resolve(target, ref inventory, false)) { if(!silent && _gameTiming.IsFirstTimePredicted) @@ -347,7 +351,7 @@ public bool TryUnequip(EntityUid actor, EntityUid target, string slot, [NotNullW removedItem = slotContainer.ContainedEntity; - if (!removedItem.HasValue) + if (!removedItem.HasValue || TerminatingOrDeleted(removedItem.Value)) return false; if (!force && !CanUnequip(actor, target, slot, out var reason, slotContainer, slotDefinition, inventory)) From 174a73808f2a40788bcfb41f84a3993869a65adc Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 10 Dec 2023 12:59:29 +1100 Subject: [PATCH 28/36] Update submodule to 189.0.0 (#22281) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 3fe30bc00f1..5069b0ccf94 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 3fe30bc00f11db837c519f238e6de0aa03aa2d3c +Subproject commit 5069b0ccf9430654f5d80a47d9070f779ffac4e1 From e5fb3552a7e6d5bbdbcafe3db525b69b9da8fab4 Mon Sep 17 00:00:00 2001 From: KP <13428215+nok-ko@users.noreply.github.com> Date: Sat, 9 Dec 2023 19:12:59 -0800 Subject: [PATCH 29/36] Prevent entities who do not have hands from setting off bombs. (#22250) --- Content.Server/Defusable/Systems/DefusableSystem.cs | 2 +- Content.Server/Explosion/EntitySystems/TriggerSystem.OnUse.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Server/Defusable/Systems/DefusableSystem.cs b/Content.Server/Defusable/Systems/DefusableSystem.cs index e9b074268f1..c450fd04fb1 100644 --- a/Content.Server/Defusable/Systems/DefusableSystem.cs +++ b/Content.Server/Defusable/Systems/DefusableSystem.cs @@ -46,7 +46,7 @@ public override void Initialize() /// private void OnGetAltVerbs(EntityUid uid, DefusableComponent comp, GetVerbsEvent args) { - if (!args.CanInteract || !args.CanAccess) + if (!args.CanInteract || !args.CanAccess || args.Hands == null) return; args.Verbs.Add(new AlternativeVerb diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.OnUse.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.OnUse.cs index c4b0d9c9ba1..7edca9b803a 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.OnUse.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.OnUse.cs @@ -45,7 +45,7 @@ private void OnExamined(EntityUid uid, OnUseTimerTriggerComponent component, Exa /// private void OnGetAltVerbs(EntityUid uid, OnUseTimerTriggerComponent component, GetVerbsEvent args) { - if (!args.CanInteract || !args.CanAccess) + if (!args.CanInteract || !args.CanAccess || args.Hands == null) return; if (component.UseVerbInstead) From f3d6540e6bd0f96120c0a956d9920e4da8caac8a Mon Sep 17 00:00:00 2001 From: Tunguso4ka <71643624+Tunguso4ka@users.noreply.github.com> Date: Sun, 10 Dec 2023 05:14:06 +0200 Subject: [PATCH 30/36] Adds placement mode to the wall dispensers (#22211) --- .../Entities/Structures/Wallmounts/walldispenser.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/walldispenser.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/walldispenser.yml index 26416c0ea6e..3a1e0d3d98a 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/walldispenser.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/walldispenser.yml @@ -2,6 +2,10 @@ id: CleanerDispenser name: space cleaner dispenser description: Wallmount reagent dispenser. + placement: + mode: SnapgridCenter + snap: + - Wallmount components: - type: WallMount arc: 180 From ffb9112dc5f054e67cbd53750caf75ecdc611557 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 9 Dec 2023 22:14:13 -0500 Subject: [PATCH 31/36] Automatic changelog update --- Resources/Changelog/Changelog.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 861c21314b6..a368305c4cd 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,9 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - {message: Fix ghost warps., type: Fix} - id: 4799 - time: '2023-09-11T05:43:25.0000000+00:00' - author: metalgearsloth changes: - {message: Make the role timer tooltip look much nicer., type: Tweak} @@ -2904,3 +2899,9 @@ Entries: level., type: Tweak} id: 5298 time: '2023-12-09T04:18:15.0000000+00:00' +- author: nok-ko + changes: + - {message: 'Entities without hands (like mice and mothroaches) are now forbidden + from operating Syndicate Bombs, C4, and other timed explosives.', type: Fix} + id: 5299 + time: '2023-12-10T03:13:00.0000000+00:00' From b70c0845d0adfb22f915a6868954031f9a9653f8 Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Sat, 9 Dec 2023 23:38:50 -0600 Subject: [PATCH 32/36] Crew monitor revisit (#22240) --- .../CrewMonitoringBoundUserInterface.cs | 71 +- .../CrewMonitoringNavMapControl.cs | 79 +++ .../CrewMonitoring/CrewMonitoringWindow.xaml | 76 +- .../CrewMonitoringWindow.xaml.cs | 562 +++++++++------ Content.Client/Pinpointer/UI/NavMapControl.cs | 535 ++++++++++---- .../Pinpointer/UI/StationMapWindow.xaml.cs | 2 + .../Components/PresetIdCardComponent.cs | 17 +- Content.Server/Access/Systems/IdCardSystem.cs | 322 +++++---- .../Access/Systems/PresetIdCardSystem.cs | 116 +-- .../CrewMonitoringConsoleComponent.cs | 42 +- .../CrewMonitoringConsoleSystem.cs | 115 +-- .../SuitSensors/SuitSensorComponent.cs | 119 ++-- .../Medical/SuitSensors/SuitSensorSystem.cs | 664 +++++++++--------- .../Access/Components/IdCardComponent.cs | 47 +- .../CrewMonitoring/CrewMonitoringShared.cs | 32 +- .../Medical/SuitSensor/SharedSuitSensor.cs | 109 +-- .../components/crew-monitoring-component.ftl | 7 +- Resources/Locale/en-US/ui/navmap.ftl | 3 + .../human_crew_monitoring.rsi/alive.png | Bin 0 -> 615 bytes .../human_crew_monitoring.rsi/critical.png | Bin 0 -> 659 bytes .../Alerts/human_crew_monitoring.rsi/dead.png | Bin 0 -> 615 bytes .../human_crew_monitoring.rsi/health0.png | Bin 0 -> 614 bytes .../human_crew_monitoring.rsi/health1.png | Bin 0 -> 623 bytes .../human_crew_monitoring.rsi/health2.png | Bin 0 -> 611 bytes .../human_crew_monitoring.rsi/health3.png | Bin 0 -> 617 bytes .../human_crew_monitoring.rsi/health4.png | Bin 0 -> 617 bytes .../human_crew_monitoring.rsi/meta.json | 41 ++ .../Interface/NavMap/beveled_circle.png | Bin 0 -> 1365 bytes 28 files changed, 1764 insertions(+), 1195 deletions(-) create mode 100644 Content.Client/Medical/CrewMonitoring/CrewMonitoringNavMapControl.cs create mode 100644 Resources/Locale/en-US/ui/navmap.ftl create mode 100644 Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/alive.png create mode 100644 Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/critical.png create mode 100644 Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/dead.png create mode 100644 Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health0.png create mode 100644 Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health1.png create mode 100644 Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health2.png create mode 100644 Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health3.png create mode 100644 Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health4.png create mode 100644 Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/meta.json create mode 100644 Resources/Textures/Interface/NavMap/beveled_circle.png diff --git a/Content.Client/Medical/CrewMonitoring/CrewMonitoringBoundUserInterface.cs b/Content.Client/Medical/CrewMonitoring/CrewMonitoringBoundUserInterface.cs index fc632575c73..39788809871 100644 --- a/Content.Client/Medical/CrewMonitoring/CrewMonitoringBoundUserInterface.cs +++ b/Content.Client/Medical/CrewMonitoring/CrewMonitoringBoundUserInterface.cs @@ -1,53 +1,56 @@ using Content.Shared.Medical.CrewMonitoring; -using Robust.Client.GameObjects; -namespace Content.Client.Medical.CrewMonitoring +namespace Content.Client.Medical.CrewMonitoring; + +public sealed class CrewMonitoringBoundUserInterface : BoundUserInterface { - public sealed class CrewMonitoringBoundUserInterface : BoundUserInterface + [ViewVariables] + private CrewMonitoringWindow? _menu; + + public CrewMonitoringBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { - [ViewVariables] - private CrewMonitoringWindow? _menu; + } - public CrewMonitoringBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) - { - } + protected override void Open() + { + EntityUid? gridUid = null; + string stationName = string.Empty; - protected override void Open() + if (EntMan.TryGetComponent(Owner, out var xform)) { - EntityUid? gridUid = null; + gridUid = xform.GridUid; - if (EntMan.TryGetComponent(Owner, out var xform)) + if (EntMan.TryGetComponent(gridUid, out var metaData)) { - gridUid = xform.GridUid; + stationName = metaData.EntityName; } - - _menu = new CrewMonitoringWindow(gridUid); - - _menu.OpenCentered(); - _menu.OnClose += Close; } - protected override void UpdateState(BoundUserInterfaceState state) - { - base.UpdateState(state); + _menu = new CrewMonitoringWindow(stationName, gridUid); - switch (state) - { - case CrewMonitoringState st: - EntMan.TryGetComponent(Owner, out var xform); + _menu.OpenCentered(); + _menu.OnClose += Close; + } - _menu?.ShowSensors(st.Sensors, xform?.Coordinates, st.Snap, st.Precision); - break; - } - } + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); - protected override void Dispose(bool disposing) + switch (state) { - base.Dispose(disposing); - if (!disposing) - return; - - _menu?.Dispose(); + case CrewMonitoringState st: + EntMan.TryGetComponent(Owner, out var xform); + _menu?.ShowSensors(st.Sensors, Owner, xform?.Coordinates); + break; } } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) + return; + + _menu?.Dispose(); + } } diff --git a/Content.Client/Medical/CrewMonitoring/CrewMonitoringNavMapControl.cs b/Content.Client/Medical/CrewMonitoring/CrewMonitoringNavMapControl.cs new file mode 100644 index 00000000000..f4ae82970c2 --- /dev/null +++ b/Content.Client/Medical/CrewMonitoring/CrewMonitoringNavMapControl.cs @@ -0,0 +1,79 @@ +using Content.Client.Pinpointer.UI; +using Robust.Client.Graphics; +using Robust.Client.UserInterface.Controls; + +namespace Content.Client.Medical.CrewMonitoring; + +public sealed partial class CrewMonitoringNavMapControl : NavMapControl +{ + public NetEntity? Focus; + public Dictionary LocalizedNames = new(); + + private Color _backgroundColor; + private Label _trackedEntityLabel; + private PanelContainer _trackedEntityPanel; + + public CrewMonitoringNavMapControl() : base() + { + WallColor = new Color(250, 146, 255); + TileColor = new(71, 42, 72); + + _backgroundColor = Color.FromSrgb(TileColor.WithAlpha(0.8f)); + + _trackedEntityLabel = new Label + { + Margin = new Thickness(10f, 8f), + HorizontalAlignment = HAlignment.Center, + VerticalAlignment = VAlignment.Center, + Modulate = Color.White, + }; + + _trackedEntityPanel = new PanelContainer + { + PanelOverride = new StyleBoxFlat + { + BackgroundColor = _backgroundColor, + }, + + Margin = new Thickness(5f, 10f), + HorizontalAlignment = HAlignment.Left, + VerticalAlignment = VAlignment.Bottom, + Visible = false, + }; + + _trackedEntityPanel.AddChild(_trackedEntityLabel); + this.AddChild(_trackedEntityPanel); + } + + protected override void Draw(DrawingHandleScreen handle) + { + base.Draw(handle); + + if (Focus == null) + { + _trackedEntityLabel.Text = string.Empty; + _trackedEntityPanel.Visible = false; + + return; + } + + foreach ((var netEntity, var blip) in TrackedEntities) + { + if (netEntity != Focus) + continue; + + if (!LocalizedNames.TryGetValue(netEntity, out var name)) + name = "Unknown"; + + var message = name + "\nLocation: [x = " + MathF.Round(blip.Coordinates.X) + ", y = " + MathF.Round(blip.Coordinates.Y) + "]"; + + _trackedEntityLabel.Text = message; + _trackedEntityPanel.Visible = true; + + return; + } + + _trackedEntityLabel.Text = string.Empty; + _trackedEntityPanel.Visible = false; + } +} diff --git a/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml b/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml index 559a12d63bc..80bf5a3f8b9 100644 --- a/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml +++ b/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml @@ -1,39 +1,49 @@ - - - - - - - + + + + + + diff --git a/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml.cs b/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml.cs index ff08af6bb6b..d8c87899db4 100644 --- a/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml.cs +++ b/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml.cs @@ -1,275 +1,437 @@ +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Numerics; +using Content.Client.Pinpointer.UI; using Content.Client.Stylesheets; using Content.Client.UserInterface.Controls; using Content.Shared.Medical.SuitSensor; +using Content.Shared.StatusIcon; using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; using Robust.Shared.Map; +using Robust.Shared.Prototypes; using Robust.Shared.Timing; +using Robust.Shared.Utility; using static Robust.Client.UserInterface.Controls.BoxContainer; -namespace Content.Client.Medical.CrewMonitoring +namespace Content.Client.Medical.CrewMonitoring; + +[GenerateTypedNameReferences] +public sealed partial class CrewMonitoringWindow : FancyWindow { - [GenerateTypedNameReferences] - public sealed partial class CrewMonitoringWindow : FancyWindow + private List _rowsContent = new(); + private readonly IEntityManager _entManager; + private readonly IPrototypeManager _prototypeManager; + private readonly SpriteSystem _spriteSystem; + + private NetEntity? _trackedEntity; + private bool _tryToScrollToListFocus; + private Texture? _blipTexture; + + public CrewMonitoringWindow(string stationName, EntityUid? mapUid) + { + RobustXamlLoader.Load(this); + + _entManager = IoCManager.Resolve(); + _prototypeManager = IoCManager.Resolve(); + _spriteSystem = _entManager.System(); + + _blipTexture = _spriteSystem.Frame0(new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png"))); + + if (_entManager.TryGetComponent(mapUid, out var xform)) + NavMap.MapUid = xform.GridUid; + + else + NavMap.Visible = false; + + StationName.AddStyleClass("LabelBig"); + StationName.Text = stationName; + + NavMap.TrackedEntitySelectedAction += SetTrackedEntityFromNavMap; + NavMap.ForceNavMapUpdate(); + } + + protected override void FrameUpdate(FrameEventArgs args) { - private List _rowsContent = new(); - private List<(DirectionIcon Icon, Vector2 Position)> _directionIcons = new(); - private readonly IEntityManager _entManager; - private readonly IEyeManager _eye; - private EntityUid? _stationUid; - private CrewMonitoringButton? _trackedButton; + base.FrameUpdate(args); - public static int IconSize = 16; // XAML has a `VSeparationOverride` of 20 for each row. + if (_tryToScrollToListFocus) + TryToScrollToFocus(); + } - public CrewMonitoringWindow(EntityUid? mapUid) + public void ShowSensors(List sensors, EntityUid monitor, EntityCoordinates? monitorCoords) + { + ClearOutDatedData(); + + // No server label + if (sensors.Count == 0) { - RobustXamlLoader.Load(this); - _eye = IoCManager.Resolve(); - _entManager = IoCManager.Resolve(); - _stationUid = mapUid; + NoServerLabel.Visible = true; + return; + } + + NoServerLabel.Visible = false; + + // Order sensor data + var orderedSensors = sensors.OrderBy(n => n.Name).OrderBy(j => j.Job); + var assignedSensors = new HashSet(); + var departments = sensors.SelectMany(d => d.JobDepartments).Distinct().OrderBy(n => n); - if (_entManager.TryGetComponent(mapUid, out var xform)) + // Create department labels and populate lists + foreach (var department in departments) + { + var departmentSensors = orderedSensors.Where(d => d.JobDepartments.Contains(department)); + + if (departmentSensors == null || !departmentSensors.Any()) + continue; + + foreach (var sensor in departmentSensors) + assignedSensors.Add(sensor); + + if (SensorsTable.ChildCount > 0) { - NavMap.MapUid = xform.GridUid; + var spacer = new Control() + { + SetHeight = 20, + }; + + SensorsTable.AddChild(spacer); + _rowsContent.Add(spacer); } - else + + var deparmentLabel = new RichTextLabel() { - NavMap.Visible = false; - SetSize = new Vector2(775, 400); - MinSize = SetSize; - } + Margin = new Thickness(10, 0), + HorizontalExpand = true, + }; + + deparmentLabel.SetMessage(department); + deparmentLabel.StyleClasses.Add(StyleNano.StyleClassTooltipActionDescription); + + SensorsTable.AddChild(deparmentLabel); + _rowsContent.Add(deparmentLabel); + + PopulateDepartmentList(departmentSensors); } - public void ShowSensors(List stSensors, EntityCoordinates? monitorCoords, bool snap, float precision) + // Account for any non-station users + var remainingSensors = orderedSensors.Except(assignedSensors); + + if (remainingSensors.Any()) { - ClearAllSensors(); + var spacer = new Control() + { + SetHeight = 20, + }; - var monitorCoordsInStationSpace = _stationUid != null ? monitorCoords?.WithEntityId(_stationUid.Value, _entManager).Position : null; + SensorsTable.AddChild(spacer); + _rowsContent.Add(spacer); - // TODO scroll container - // TODO filter by name & occupation - // TODO make each row a xaml-control. Get rid of some of this c# control creation. - if (stSensors.Count == 0) + var deparmentLabel = new RichTextLabel() { - NoServerLabel.Visible = true; - return; - } - NoServerLabel.Visible = false; + Margin = new Thickness(10, 0), + HorizontalExpand = true, + }; + + deparmentLabel.SetMessage(Loc.GetString("crew-monitoring-user-interface-no-department")); + deparmentLabel.StyleClasses.Add(StyleNano.StyleClassTooltipActionDescription); - // add a row for each sensor - foreach (var sensor in stSensors.OrderBy(a => a.Name)) + SensorsTable.AddChild(deparmentLabel); + _rowsContent.Add(deparmentLabel); + + PopulateDepartmentList(remainingSensors); + } + + // Show monitor on nav map + if (monitorCoords != null && _blipTexture != null) + { + NavMap.TrackedEntities[_entManager.GetNetEntity(monitor)] = new NavMapBlip(monitorCoords.Value, _blipTexture, Color.Cyan, true, false); + } + } + + private void PopulateDepartmentList(IEnumerable departmentSensors) + { + // Populate departments + foreach (var sensor in departmentSensors) + { + var coordinates = _entManager.GetCoordinates(sensor.Coordinates); + + // Add a button that will hold a username and other details + NavMap.LocalizedNames.TryAdd(sensor.SuitSensorUid, sensor.Name + ", " + sensor.Job); + + var sensorButton = new CrewMonitoringButton() { - var sensorEntity = _entManager.GetEntity(sensor.SuitSensorUid); - var coordinates = _entManager.GetCoordinates(sensor.Coordinates); + SuitSensorUid = sensor.SuitSensorUid, + Coordinates = coordinates, + Disabled = (coordinates == null), + HorizontalExpand = true, + }; - // add button with username - var nameButton = new CrewMonitoringButton() - { - SuitSensorUid = sensorEntity, - Coordinates = coordinates, - Text = sensor.Name, - Margin = new Thickness(5f, 5f), - }; - if (sensorEntity == _trackedButton?.SuitSensorUid) - nameButton.AddStyleClass(StyleNano.StyleClassButtonColorGreen); - SetColorLabel(nameButton.Label, sensor.TotalDamage, sensor.IsAlive); - SensorsTable.AddChild(nameButton); - _rowsContent.Add(nameButton); - - // add users job - // format: JobName - var jobLabel = new Label() - { - Text = sensor.Job, - HorizontalExpand = true - }; - SetColorLabel(jobLabel, sensor.TotalDamage, sensor.IsAlive); - SensorsTable.AddChild(jobLabel); - _rowsContent.Add(jobLabel); - - // add users status and damage - // format: IsAlive (TotalDamage) - var statusText = Loc.GetString(sensor.IsAlive ? - "crew-monitoring-user-interface-alive" : - "crew-monitoring-user-interface-dead"); - if (sensor.TotalDamage != null) - { - statusText += $" ({sensor.TotalDamage})"; - } - var statusLabel = new Label() - { - Text = statusText - }; - SetColorLabel(statusLabel, sensor.TotalDamage, sensor.IsAlive); - SensorsTable.AddChild(statusLabel); - _rowsContent.Add(statusLabel); + if (sensor.SuitSensorUid == _trackedEntity) + sensorButton.AddStyleClass(StyleNano.StyleClassButtonColorGreen); - // add users positions - // format: (x, y) - var box = GetPositionBox(sensor, monitorCoordsInStationSpace ?? Vector2.Zero, snap, precision); + SensorsTable.AddChild(sensorButton); + _rowsContent.Add(sensorButton); - SensorsTable.AddChild(box); - _rowsContent.Add(box); + // Primary container to hold the button UI elements + var mainContainer = new BoxContainer() + { + Orientation = LayoutOrientation.Horizontal, + HorizontalExpand = true, + }; - if (coordinates != null && NavMap.Visible) - { - NavMap.TrackedCoordinates.TryAdd(coordinates.Value, - (true, sensorEntity == _trackedButton?.SuitSensorUid ? StyleNano.PointGreen : StyleNano.PointRed)); + sensorButton.AddChild(mainContainer); - nameButton.OnButtonUp += args => - { - if (_trackedButton != null && _trackedButton?.Coordinates != null) - //Make previous point red - NavMap.TrackedCoordinates[_trackedButton.Coordinates.Value] = (true, StyleNano.PointRed); + // User status container + var statusContainer = new BoxContainer() + { + SizeFlagsStretchRatio = 1.25f, + Orientation = LayoutOrientation.Horizontal, + HorizontalExpand = true, + }; - NavMap.TrackedCoordinates[coordinates.Value] = (true, StyleNano.PointGreen); - NavMap.CenterToCoordinates(coordinates.Value); + mainContainer.AddChild(statusContainer); - nameButton.AddStyleClass(StyleNano.StyleClassButtonColorGreen); - if (_trackedButton != null) - { //Make previous button default - var previosButton = SensorsTable.GetChild(_trackedButton.IndexInTable); - previosButton.RemoveStyleClass(StyleNano.StyleClassButtonColorGreen); - } - _trackedButton = nameButton; - _trackedButton.IndexInTable = nameButton.GetPositionInParent(); - }; - } - } - // Show monitor point - if (monitorCoords != null) - NavMap.TrackedCoordinates.Add(monitorCoords.Value, (true, StyleNano.PointMagenta)); - } + // Suit coords indicator + var suitCoordsIndicator = new TextureRect() + { + Texture = _blipTexture, + TextureScale = new Vector2(0.25f, 0.25f), + Modulate = coordinates != null ? Color.LimeGreen : Color.DarkRed, + HorizontalAlignment = HAlignment.Center, + VerticalAlignment = VAlignment.Center, + }; - private BoxContainer GetPositionBox(SuitSensorStatus sensor, Vector2 monitorCoordsInStationSpace, bool snap, float precision) - { - EntityCoordinates? coordinates = _entManager.GetCoordinates(sensor.Coordinates); - var box = new BoxContainer() { Orientation = LayoutOrientation.Horizontal }; + statusContainer.AddChild(suitCoordsIndicator); + + // Specify texture for the user status icon + var specifier = new SpriteSpecifier.Rsi(new ResPath("Interface/Alerts/human_crew_monitoring.rsi"), "alive"); - if (coordinates == null || _stationUid == null) + if (!sensor.IsAlive) { - var dirIcon = new DirectionIcon() - { - SetSize = new Vector2(IconSize, IconSize), - Margin = new(0, 0, 4, 0) - }; - box.AddChild(dirIcon); - box.AddChild(new Label() { Text = Loc.GetString("crew-monitoring-user-interface-no-info") }); + specifier = new SpriteSpecifier.Rsi(new ResPath("Interface/Alerts/human_crew_monitoring.rsi"), "dead"); } - else + + else if (sensor.TotalDamage != null) { - var local = coordinates.Value.WithEntityId(_stationUid.Value, _entManager).Position; + var index = MathF.Round(4f * (sensor.TotalDamage.Value / 100f)); - var displayPos = local.Floored(); - var dirIcon = new DirectionIcon(snap, precision) - { - SetSize = new Vector2(IconSize, IconSize), - Margin = new(0, 0, 4, 0) - }; - box.AddChild(dirIcon); - Label label = new Label() { Text = displayPos.ToString() }; - SetColorLabel(label, sensor.TotalDamage, sensor.IsAlive); - box.AddChild(label); - _directionIcons.Add((dirIcon, local - monitorCoordsInStationSpace)); + if (index >= 5) + specifier = new SpriteSpecifier.Rsi(new ResPath("Interface/Alerts/human_crew_monitoring.rsi"), "critical"); + + else + specifier = new SpriteSpecifier.Rsi(new ResPath("Interface/Alerts/human_crew_monitoring.rsi"), "health" + index); } - return box; - } + // Status icon + var statusIcon = new AnimatedTextureRect + { + HorizontalAlignment = HAlignment.Center, + VerticalAlignment = VAlignment.Center, + Margin = new Thickness(0, 1, 3, 0), + }; - protected override void FrameUpdate(FrameEventArgs args) - { - // the window is separate from any specific viewport, so there is no real way to get an eye-rotation without - // using IEyeManager. Eventually this will have to be reworked for a station AI with multi-viewports. - // (From the future: Or alternatively, just disable the angular offset for station AIs?) - - // An offsetAngle of zero here perfectly aligns directions to the station map. - // Note that the "relative angle" does this weird inverse-inverse thing. - // Could recalculate it all in world coordinates and then pass in eye directly... or do this. - var offsetAngle = Angle.Zero; - if (_entManager.TryGetComponent(_stationUid, out var xform)) + statusIcon.SetFromSpriteSpecifier(specifier); + statusIcon.DisplayRect.TextureScale = new Vector2(2f, 2f); + + statusContainer.AddChild(statusIcon); + + // User name + var nameLabel = new Label() + { + Text = sensor.Name, + HorizontalExpand = true, + ClipText = true, + }; + + statusContainer.AddChild(nameLabel); + + // User job container + var jobContainer = new BoxContainer() + { + Orientation = LayoutOrientation.Horizontal, + HorizontalExpand = true, + }; + + mainContainer.AddChild(jobContainer); + + // Job icon + if (_prototypeManager.TryIndex(sensor.JobIcon, out var proto)) { - // Apply the offset relative to the eye. - // For a station at 45 degrees rotation, the current eye rotation is -45 degrees. - // TODO: This feels sketchy. Is there something underlying wrong with eye rotation? - offsetAngle = -(_eye.CurrentEye.Rotation + xform.WorldRotation); + var jobIcon = new TextureRect() + { + TextureScale = new Vector2(2f, 2f), + Stretch = TextureRect.StretchMode.KeepCentered, + Texture = _spriteSystem.Frame0(proto.Icon), + Margin = new Thickness(5, 0, 5, 0), + }; + + jobContainer.AddChild(jobIcon); } - foreach (var (icon, pos) in _directionIcons) + // Job name + var jobLabel = new Label() { - icon.UpdateDirection(pos, offsetAngle); + Text = sensor.Job, + HorizontalExpand = true, + ClipText = true, + }; + + jobContainer.AddChild(jobLabel); + + // Add user coordinates to the navmap + if (coordinates != null && NavMap.Visible && _blipTexture != null) + { + NavMap.TrackedEntities.TryAdd(sensor.SuitSensorUid, + new NavMapBlip + (coordinates.Value, + _blipTexture, + (_trackedEntity == null || sensor.SuitSensorUid == _trackedEntity) ? Color.LimeGreen : Color.LimeGreen * Color.DimGray, + sensor.SuitSensorUid == _trackedEntity)); + + NavMap.Focus = _trackedEntity; + + // On button up + sensorButton.OnButtonUp += args => + { + var prevTrackedEntity = _trackedEntity; + + if (_trackedEntity == sensor.SuitSensorUid) + { + _trackedEntity = null; + } + + else + { + _trackedEntity = sensor.SuitSensorUid; + NavMap.CenterToCoordinates(coordinates.Value); + } + + NavMap.Focus = _trackedEntity; + + UpdateSensorsTable(_trackedEntity, prevTrackedEntity); + }; } } + } + + private void SetTrackedEntityFromNavMap(NetEntity? netEntity) + { + var prevTrackedEntity = _trackedEntity; + _trackedEntity = netEntity; + + if (_trackedEntity == prevTrackedEntity) + prevTrackedEntity = null; + + NavMap.Focus = _trackedEntity; + _tryToScrollToListFocus = true; + + UpdateSensorsTable(_trackedEntity, prevTrackedEntity); + } - private void ClearAllSensors() + private void UpdateSensorsTable(NetEntity? currTrackedEntity, NetEntity? prevTrackedEntity) + { + foreach (var sensor in SensorsTable.Children) { - foreach (var child in _rowsContent) + if (sensor is not CrewMonitoringButton) + continue; + + var castSensor = (CrewMonitoringButton) sensor; + + if (castSensor.SuitSensorUid == prevTrackedEntity) + castSensor.RemoveStyleClass(StyleNano.StyleClassButtonColorGreen); + + else if (castSensor.SuitSensorUid == currTrackedEntity) + castSensor.AddStyleClass(StyleNano.StyleClassButtonColorGreen); + + if (castSensor?.Coordinates == null) + continue; + + if (NavMap.TrackedEntities.TryGetValue(castSensor.SuitSensorUid, out var data)) { - SensorsTable.RemoveChild(child); + data = new NavMapBlip + (data.Coordinates, + data.Texture, + (currTrackedEntity == null || castSensor.SuitSensorUid == currTrackedEntity) ? Color.LimeGreen : Color.LimeGreen * Color.DimGray, + castSensor.SuitSensorUid == currTrackedEntity); + + NavMap.TrackedEntities[castSensor.SuitSensorUid] = data; } - _rowsContent.Clear(); - _directionIcons.Clear(); - NavMap.TrackedCoordinates.Clear(); } + } - private void SetColorLabel(Label label, int? totalDamage, bool isAlive) + private void TryToScrollToFocus() + { + if (!_tryToScrollToListFocus) + return; + + if (!TryGetVerticalScrollbar(SensorScroller, out var vScrollbar)) + return; + + if (TryGetNextScrollPosition(out float? nextScrollPosition)) { - var startColor = Color.White; - var critColor = Color.Yellow; - var endColor = Color.Red; + vScrollbar.ValueTarget = nextScrollPosition.Value; - if (!isAlive) + if (MathHelper.CloseToPercent(vScrollbar.Value, vScrollbar.ValueTarget)) { - label.FontColorOverride = endColor; + _tryToScrollToListFocus = false; return; } + } + } - //Convert from null to regular int - int damage; - if (totalDamage == null) return; - else damage = (int) totalDamage; + private bool TryGetVerticalScrollbar(ScrollContainer scroll, [NotNullWhen(true)] out VScrollBar? vScrollBar) + { + vScrollBar = null; - if (damage <= 0) - { - label.FontColorOverride = startColor; - } - else if (damage >= 200) - { - label.FontColorOverride = endColor; - } - else if (damage >= 0 && damage <= 100) - { - label.FontColorOverride = GetColorLerp(startColor, critColor, damage); - } - else if (damage >= 100 && damage <= 200) - { - //We need a number from 0 to 100. Divide the number from 100 to 200 by 2 - damage /= 2; - label.FontColorOverride = GetColorLerp(critColor, endColor, damage); - } + foreach (var child in scroll.Children) + { + if (child is not VScrollBar) + continue; + + vScrollBar = (VScrollBar) child; + return true; } - private Color GetColorLerp(Color startColor, Color endColor, int damage) + return false; + } + + private bool TryGetNextScrollPosition([NotNullWhen(true)] out float? nextScrollPosition) + { + nextScrollPosition = 0; + + foreach (var sensor in SensorsTable.Children) { - //Smooth transition from one color to another depending on the percentage - var t = damage / 100f; - var r = MathHelper.Lerp(startColor.R, endColor.R, t); - var g = MathHelper.Lerp(startColor.G, endColor.G, t); - var b = MathHelper.Lerp(startColor.B, endColor.B, t); - var a = MathHelper.Lerp(startColor.A, endColor.A, t); - - return new Color(r, g, b, a); + if (sensor is CrewMonitoringButton && + ((CrewMonitoringButton) sensor).SuitSensorUid == _trackedEntity) + return true; + + nextScrollPosition += sensor.Height; } + + // Failed to find control + nextScrollPosition = null; + + return false; } - public sealed class CrewMonitoringButton : Button + private void ClearOutDatedData() { - public int IndexInTable; - public EntityUid? SuitSensorUid; - public EntityCoordinates? Coordinates; + SensorsTable.RemoveAllChildren(); + _rowsContent.Clear(); + NavMap.TrackedCoordinates.Clear(); + NavMap.TrackedEntities.Clear(); + NavMap.LocalizedNames.Clear(); } } + +public sealed class CrewMonitoringButton : Button +{ + public int IndexInTable; + public NetEntity SuitSensorUid; + public EntityCoordinates? Coordinates; +} diff --git a/Content.Client/Pinpointer/UI/NavMapControl.cs b/Content.Client/Pinpointer/UI/NavMapControl.cs index 04d8cc76f9b..cae5e15037d 100644 --- a/Content.Client/Pinpointer/UI/NavMapControl.cs +++ b/Content.Client/Pinpointer/UI/NavMapControl.cs @@ -1,40 +1,66 @@ -using System.Numerics; using Content.Client.Stylesheets; using Content.Client.UserInterface.Controls; using Content.Shared.Pinpointer; -using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; +using Robust.Shared.Collections; using Robust.Shared.Input; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Physics; using Robust.Shared.Physics.Collision.Shapes; using Robust.Shared.Physics.Components; +using Robust.Shared.Timing; +using System.Numerics; +using JetBrains.Annotations; namespace Content.Client.Pinpointer.UI; /// /// Displays the nav map data of the specified grid. /// -public sealed class NavMapControl : MapGridControl +[UsedImplicitly, Virtual] +public partial class NavMapControl : MapGridControl { [Dependency] private readonly IEntityManager _entManager = default!; - private SharedTransformSystem _transform; + private readonly SharedTransformSystem _transformSystem = default!; public EntityUid? MapUid; + // Actions + public event Action? TrackedEntitySelectedAction; + + // Tracked data public Dictionary TrackedCoordinates = new(); + public Dictionary TrackedEntities = new(); + public Dictionary> TileGrid = default!; + + // Default colors + public Color WallColor = new(102, 217, 102); + public Color TileColor = new(30, 67, 30); + + // Constants + protected float UpdateTime = 1.0f; + protected float MaxSelectableDistance = 10f; + protected float RecenterMinimum = 0.05f; + // Local variables private Vector2 _offset; private bool _draggin; private bool _recentering = false; - private readonly float _recenterMinimum = 0.05f; private readonly Font _font; - private static readonly Color TileColor = new(30, 67, 30); - private static readonly Color BeaconColor = Color.FromSrgb(TileColor.WithAlpha(0.8f)); + private float _updateTimer = 0.25f; + private Dictionary _sRGBLookUp = new Dictionary(); + private Color _beaconColor; + + // Components + private NavMapComponent? _navMap; + private MapGridComponent? _grid; + private TransformComponent? _xform; + private PhysicsComponent? _physics; + private FixturesComponent? _fixtures; // TODO: https://github.com/space-wizards/RobustToolbox/issues/3818 private readonly Label _zoom = new() @@ -45,20 +71,30 @@ public sealed class NavMapControl : MapGridControl private readonly Button _recenter = new() { - Text = "Recentre", + Text = Loc.GetString("navmap-recenter"), VerticalAlignment = VAlignment.Top, HorizontalAlignment = HAlignment.Right, Margin = new Thickness(8f, 4f), Disabled = true, }; + private readonly CheckBox _beacons = new() + { + Text = Loc.GetString("navmap-toggle-beacons"), + Margin = new Thickness(4f, 0f), + VerticalAlignment = VAlignment.Center, + HorizontalAlignment = HAlignment.Center, + Pressed = false, + }; + public NavMapControl() : base(8f, 128f, 48f) { IoCManager.InjectDependencies(this); - - _transform = _entManager.System(); var cache = IoCManager.Resolve(); - _font = new VectorFont(cache.GetResource("/EngineFonts/NotoSans/NotoSans-Regular.ttf"), 16); + + _transformSystem = _entManager.System(); + _font = new VectorFont(cache.GetResource("/EngineFonts/NotoSans/NotoSans-Regular.ttf"), 12); + _beaconColor = Color.FromSrgb(TileColor.WithAlpha(0.8f)); RectClipContent = true; HorizontalExpand = true; @@ -75,6 +111,7 @@ public NavMapControl() : base(8f, 128f, 48f) Children = { _zoom, + _beacons, _recenter, } }; @@ -101,14 +138,28 @@ public NavMapControl() : base(8f, 128f, 48f) { _recentering = true; }; + + ForceNavMapUpdate(); + } + + public void ForceRecenter() + { + _recentering = true; + } + + public void ForceNavMapUpdate() + { + _entManager.TryGetComponent(MapUid, out _navMap); + _entManager.TryGetComponent(MapUid, out _grid); + + UpdateNavMap(); } public void CenterToCoordinates(EntityCoordinates coordinates) { - if (_entManager.TryGetComponent(MapUid, out var physics)) - { - _offset = new Vector2(coordinates.X, coordinates.Y) - physics.LocalCenter; - } + if (_physics != null) + _offset = new Vector2(coordinates.X, coordinates.Y) - _physics.LocalCenter; + _recenter.Disabled = false; } @@ -117,18 +168,62 @@ protected override void KeyBindDown(GUIBoundKeyEventArgs args) base.KeyBindDown(args); if (args.Function == EngineKeyFunctions.Use) - { _draggin = true; - } } protected override void KeyBindUp(GUIBoundKeyEventArgs args) { base.KeyBindUp(args); + if (TrackedEntitySelectedAction == null) + return; + if (args.Function == EngineKeyFunctions.Use) { _draggin = false; + + if (_xform == null || _physics == null || TrackedEntities.Count == 0) + return; + + // Get the clicked position + var offset = _offset + _physics.LocalCenter; + var localPosition = args.PointerLocation.Position - GlobalPixelPosition; + + // Convert to a world position + var unscaledPosition = (localPosition - MidpointVector) / MinimapScale; + var worldPosition = _transformSystem.GetWorldMatrix(_xform).Transform(new Vector2(unscaledPosition.X, -unscaledPosition.Y) + offset); + + // Find closest tracked entity in range + var closestEntity = NetEntity.Invalid; + var closestCoords = new EntityCoordinates(); + var closestDistance = float.PositiveInfinity; + + foreach ((var currentEntity, var blip) in TrackedEntities) + { + if (!blip.Selectable) + continue; + + var currentDistance = (blip.Coordinates.ToMapPos(_entManager, _transformSystem) - worldPosition).Length(); + + if (closestDistance < currentDistance || currentDistance * MinimapScale > MaxSelectableDistance) + continue; + + closestEntity = currentEntity; + closestCoords = blip.Coordinates; + closestDistance = currentDistance; + } + + if (closestDistance > MaxSelectableDistance || !closestEntity.IsValid()) + return; + + TrackedEntitySelectedAction.Invoke(closestEntity); + } + + else if (args.Function == EngineKeyFunctions.UIRightClick) + { + // Clear current selection with right click + if (TrackedEntitySelectedAction != null) + TrackedEntitySelectedAction.Invoke(null); } } @@ -143,25 +238,30 @@ protected override void MouseMove(GUIMouseMoveEventArgs args) _offset -= new Vector2(args.Relative.X, -args.Relative.Y) / MidPoint * WorldRange; if (_offset != Vector2.Zero) - { _recenter.Disabled = false; - } + else - { _recenter.Disabled = true; - } } protected override void Draw(DrawingHandleScreen handle) { base.Draw(handle); + // Get the components necessary for drawing the navmap + _entManager.TryGetComponent(MapUid, out _navMap); + _entManager.TryGetComponent(MapUid, out _grid); + _entManager.TryGetComponent(MapUid, out _xform); + _entManager.TryGetComponent(MapUid, out _physics); + _entManager.TryGetComponent(MapUid, out _fixtures); + + // Map re-centering if (_recentering) { var frameTime = Timing.FrameTime; var diff = _offset * (float) frameTime.TotalSeconds; - if (_offset.LengthSquared() < _recenterMinimum) + if (_offset.LengthSquared() < RecenterMinimum) { _offset = Vector2.Zero; _recentering = false; @@ -173,29 +273,22 @@ protected override void Draw(DrawingHandleScreen handle) } } - _zoom.Text = $"Zoom: {(WorldRange / WorldMaxRange * 100f):0.00}%"; + _zoom.Text = Loc.GetString("navmap-zoom", ("value", $"{(WorldRange / WorldMaxRange * 100f):0.00}")); - if (!_entManager.TryGetComponent(MapUid, out var navMap) || - !_entManager.TryGetComponent(MapUid, out var xform) || - !_entManager.TryGetComponent(MapUid, out var grid)) - { + if (_navMap == null || _xform == null) return; - } var offset = _offset; - var lineColor = new Color(102, 217, 102); - if (_entManager.TryGetComponent(MapUid, out var physics)) - { - offset += physics.LocalCenter; - } + if (_physics != null) + offset += _physics.LocalCenter; // Draw tiles - if (_entManager.TryGetComponent(MapUid, out var manager)) + if (_fixtures != null) { Span verts = new Vector2[8]; - foreach (var fixture in manager.Fixtures.Values) + foreach (var fixture in _fixtures.Fixtures.Values) { if (fixture.Shape is not PolygonShape poly) continue; @@ -211,157 +304,305 @@ protected override void Draw(DrawingHandleScreen handle) } } - // Draw the wall data var area = new Box2(-WorldRange, -WorldRange, WorldRange + 1f, WorldRange + 1f).Translated(offset); - var tileSize = new Vector2(grid.TileSize, -grid.TileSize); - for (var x = Math.Floor(area.Left); x <= Math.Ceiling(area.Right); x += SharedNavMapSystem.ChunkSize * grid.TileSize) + // Drawing lines can be rather expensive due to the number of neighbors that need to be checked in order + // to figure out where they should be drawn. However, we don't *need* to do check these every frame. + // Instead, lets periodically update where to draw each line and then store these points in a list. + // Then we can just run through the list each frame and draw the lines without any extra computation. + + // Draw walls + if (TileGrid != null && TileGrid.Count > 0) { - for (var y = Math.Floor(area.Bottom); y <= Math.Ceiling(area.Top); y += SharedNavMapSystem.ChunkSize * grid.TileSize) + var walls = new ValueList(); + + foreach ((var chunk, var chunkedLines) in TileGrid) { - var floored = new Vector2i((int) x, (int) y); + var offsetChunk = new Vector2(chunk.X, chunk.Y) * SharedNavMapSystem.ChunkSize; - var chunkOrigin = SharedMapSystem.GetChunkIndices(floored, SharedNavMapSystem.ChunkSize); + if (offsetChunk.X < area.Left - SharedNavMapSystem.ChunkSize || offsetChunk.X > area.Right) + continue; - if (!navMap.Chunks.TryGetValue(chunkOrigin, out var chunk)) + if (offsetChunk.Y < area.Bottom - SharedNavMapSystem.ChunkSize || offsetChunk.Y > area.Top) continue; - // TODO: Okay maybe I should just use ushorts lmao... - for (var i = 0; i < SharedNavMapSystem.ChunkSize * SharedNavMapSystem.ChunkSize; i++) + foreach (var chunkedLine in chunkedLines) { - var value = (int) Math.Pow(2, i); - - var mask = chunk.TileData & value; - - if (mask == 0x0) - continue; - - // Alright now we'll work out our edges - var relativeTile = SharedNavMapSystem.GetTile(mask); - var tile = (chunk.Origin * SharedNavMapSystem.ChunkSize + relativeTile) * grid.TileSize - offset; - var position = new Vector2(tile.X, -tile.Y); - NavMapChunk? neighborChunk; - bool neighbor; - - // North edge - if (relativeTile.Y == SharedNavMapSystem.ChunkSize - 1) - { - neighbor = navMap.Chunks.TryGetValue(chunkOrigin + new Vector2i(0, 1), out neighborChunk) && - (neighborChunk.TileData & - SharedNavMapSystem.GetFlag(new Vector2i(relativeTile.X, 0))) != 0x0; - } - else - { - var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(0, 1)); - neighbor = (chunk.TileData & flag) != 0x0; - } - - if (!neighbor) - { - handle.DrawLine(Scale(position + new Vector2(0f, -grid.TileSize)), Scale(position + tileSize), lineColor); - } - - // East edge - if (relativeTile.X == SharedNavMapSystem.ChunkSize - 1) - { - neighbor = navMap.Chunks.TryGetValue(chunkOrigin + new Vector2i(1, 0), out neighborChunk) && - (neighborChunk.TileData & - SharedNavMapSystem.GetFlag(new Vector2i(0, relativeTile.Y))) != 0x0; - } - else - { - var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(1, 0)); - neighbor = (chunk.TileData & flag) != 0x0; - } - - if (!neighbor) - { - handle.DrawLine(Scale(position + tileSize), Scale(position + new Vector2(grid.TileSize, 0f)), lineColor); - } - - // South edge - if (relativeTile.Y == 0) - { - neighbor = navMap.Chunks.TryGetValue(chunkOrigin + new Vector2i(0, -1), out neighborChunk) && - (neighborChunk.TileData & - SharedNavMapSystem.GetFlag(new Vector2i(relativeTile.X, SharedNavMapSystem.ChunkSize - 1))) != 0x0; - } - else - { - var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(0, -1)); - neighbor = (chunk.TileData & flag) != 0x0; - } - - if (!neighbor) - { - handle.DrawLine(Scale(position + new Vector2(grid.TileSize, 0f)), Scale(position), lineColor); - } - - // West edge - if (relativeTile.X == 0) - { - neighbor = navMap.Chunks.TryGetValue(chunkOrigin + new Vector2i(-1, 0), out neighborChunk) && - (neighborChunk.TileData & - SharedNavMapSystem.GetFlag(new Vector2i(SharedNavMapSystem.ChunkSize - 1, relativeTile.Y))) != 0x0; - } - else - { - var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(-1, 0)); - neighbor = (chunk.TileData & flag) != 0x0; - } - - if (!neighbor) - { - handle.DrawLine(Scale(position), Scale(position + new Vector2(0f, -grid.TileSize)), lineColor); - } - - // Draw a diagonal line for interiors. - handle.DrawLine(Scale(position + new Vector2(0f, -grid.TileSize)), Scale(position + new Vector2(grid.TileSize, 0f)), lineColor); + var start = Scale(chunkedLine.Origin - new Vector2(offset.X, -offset.Y)); + var end = Scale(chunkedLine.Terminus - new Vector2(offset.X, -offset.Y)); + + walls.Add(start); + walls.Add(end); } } + + if (walls.Count > 0) + { + if (!_sRGBLookUp.TryGetValue(WallColor, out var sRGB)) + { + sRGB = Color.ToSrgb(WallColor); + _sRGBLookUp[WallColor] = sRGB; + } + + handle.DrawPrimitives(DrawPrimitiveTopology.LineList, walls.Span, sRGB); + } + } + + // Beacons + if (_beacons.Pressed) + { + var rectBuffer = new Vector2(5f, 3f); + + foreach (var beacon in _navMap.Beacons) + { + var position = beacon.Position - offset; + position = Scale(position with { Y = -position.Y }); + + var textDimensions = handle.GetDimensions(_font, beacon.Text, 1f); + handle.DrawRect(new UIBox2(position - textDimensions / 2 - rectBuffer, position + textDimensions / 2 + rectBuffer), _beaconColor); + handle.DrawString(_font, position - textDimensions / 2, beacon.Text, beacon.Color); + } } var curTime = Timing.RealTime; var blinkFrequency = 1f / 1f; var lit = curTime.TotalSeconds % blinkFrequency > blinkFrequency / 2f; + // Tracked coordinates (simple dot, legacy) foreach (var (coord, value) in TrackedCoordinates) { if (lit && value.Visible) { - var mapPos = coord.ToMap(_entManager); + var mapPos = coord.ToMap(_entManager, _transformSystem); if (mapPos.MapId != MapId.Nullspace) { - var position = xform.InvWorldMatrix.Transform(mapPos.Position) - offset; + var position = _transformSystem.GetInvWorldMatrix(_xform).Transform(mapPos.Position) - offset; position = Scale(new Vector2(position.X, -position.Y)); - handle.DrawCircle(position, MinimapScale / 2f, value.Color); + handle.DrawCircle(position, float.Sqrt(MinimapScale) * 2f, value.Color); } } } - // Beacons - var labelOffset = new Vector2(0.5f, 0.5f) * MinimapScale; - var rectBuffer = new Vector2(5f, 3f); + // Tracked entities (can use a supplied sprite as a marker instead; should probably just replace TrackedCoordinates with this eventually) + var iconVertexUVs = new Dictionary<(Texture, Color), ValueList>(); - foreach (var beacon in navMap.Beacons) + foreach (var blip in TrackedEntities.Values) { - var position = beacon.Position - offset; + if (blip.Blinks && !lit) + continue; + + if (blip.Texture == null) + continue; - position = Scale(position with { Y = -position.Y }); + if (!iconVertexUVs.TryGetValue((blip.Texture, blip.Color), out var vertexUVs)) + vertexUVs = new(); - handle.DrawCircle(position, MinimapScale / 2f, beacon.Color); - var textDimensions = handle.GetDimensions(_font, beacon.Text, 1f); + var mapPos = blip.Coordinates.ToMap(_entManager, _transformSystem); - var labelPosition = position + labelOffset; - handle.DrawRect(new UIBox2(labelPosition, labelPosition + textDimensions + rectBuffer * 2), BeaconColor); - handle.DrawString(_font, labelPosition + rectBuffer, beacon.Text, beacon.Color); + if (mapPos.MapId != MapId.Nullspace) + { + var position = _transformSystem.GetInvWorldMatrix(_xform).Transform(mapPos.Position) - offset; + position = Scale(new Vector2(position.X, -position.Y)); + + var scalingCoefficient = 2.5f; + var positionOffset = scalingCoefficient * float.Sqrt(MinimapScale); + + vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X - positionOffset, position.Y - positionOffset), new Vector2(1f, 1f))); + vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X - positionOffset, position.Y + positionOffset), new Vector2(1f, 0f))); + vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X + positionOffset, position.Y - positionOffset), new Vector2(0f, 1f))); + vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X - positionOffset, position.Y + positionOffset), new Vector2(1f, 0f))); + vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X + positionOffset, position.Y - positionOffset), new Vector2(0f, 1f))); + vertexUVs.Add(new DrawVertexUV2D(new Vector2(position.X + positionOffset, position.Y + positionOffset), new Vector2(0f, 0f))); + } + + iconVertexUVs[(blip.Texture, blip.Color)] = vertexUVs; } + + foreach ((var (texture, color), var vertexUVs) in iconVertexUVs) + { + if (!_sRGBLookUp.TryGetValue(color, out var sRGB)) + { + sRGB = Color.ToSrgb(color); + _sRGBLookUp[color] = sRGB; + } + + handle.DrawPrimitives(DrawPrimitiveTopology.TriangleList, texture, vertexUVs.Span, sRGB); + } + } + + protected override void FrameUpdate(FrameEventArgs args) + { + // Update the timer + _updateTimer += args.DeltaSeconds; + + if (_updateTimer >= UpdateTime) + { + _updateTimer -= UpdateTime; + + UpdateNavMap(); + } + } + + private void UpdateNavMap() + { + if (_navMap == null || _grid == null) + return; + + TileGrid = GetDecodedWallChunks(_navMap.Chunks, _grid); + } + + public Dictionary> GetDecodedWallChunks + (Dictionary chunks, + MapGridComponent grid) + { + var decodedOutput = new Dictionary>(); + + foreach ((var chunkOrigin, var chunk) in chunks) + { + var list = new List(); + + // TODO: Okay maybe I should just use ushorts lmao... + for (var i = 0; i < SharedNavMapSystem.ChunkSize * SharedNavMapSystem.ChunkSize; i++) + { + var value = (int) Math.Pow(2, i); + + var mask = chunk.TileData & value; + + if (mask == 0x0) + continue; + + // Alright now we'll work out our edges + var relativeTile = SharedNavMapSystem.GetTile(mask); + var tile = (chunk.Origin * SharedNavMapSystem.ChunkSize + relativeTile) * grid.TileSize; + var position = new Vector2(tile.X, -tile.Y); + NavMapChunk? neighborChunk; + bool neighbor; + + // North edge + if (relativeTile.Y == SharedNavMapSystem.ChunkSize - 1) + { + neighbor = chunks.TryGetValue(chunkOrigin + new Vector2i(0, 1), out neighborChunk) && + (neighborChunk.TileData & + SharedNavMapSystem.GetFlag(new Vector2i(relativeTile.X, 0))) != 0x0; + } + else + { + var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(0, 1)); + neighbor = (chunk.TileData & flag) != 0x0; + } + + if (!neighbor) + { + // Add points + list.Add(new NavMapLine(position + new Vector2(0f, -grid.TileSize), position + new Vector2(grid.TileSize, -grid.TileSize))); + } + + // East edge + if (relativeTile.X == SharedNavMapSystem.ChunkSize - 1) + { + neighbor = chunks.TryGetValue(chunkOrigin + new Vector2i(1, 0), out neighborChunk) && + (neighborChunk.TileData & + SharedNavMapSystem.GetFlag(new Vector2i(0, relativeTile.Y))) != 0x0; + } + else + { + var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(1, 0)); + neighbor = (chunk.TileData & flag) != 0x0; + } + + if (!neighbor) + { + // Add points + list.Add(new NavMapLine(position + new Vector2(grid.TileSize, -grid.TileSize), position + new Vector2(grid.TileSize, 0f))); + } + + // South edge + if (relativeTile.Y == 0) + { + neighbor = chunks.TryGetValue(chunkOrigin + new Vector2i(0, -1), out neighborChunk) && + (neighborChunk.TileData & + SharedNavMapSystem.GetFlag(new Vector2i(relativeTile.X, SharedNavMapSystem.ChunkSize - 1))) != 0x0; + } + else + { + var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(0, -1)); + neighbor = (chunk.TileData & flag) != 0x0; + } + + if (!neighbor) + { + // Add points + list.Add(new NavMapLine(position + new Vector2(grid.TileSize, 0f), position)); + } + + // West edge + if (relativeTile.X == 0) + { + neighbor = chunks.TryGetValue(chunkOrigin + new Vector2i(-1, 0), out neighborChunk) && + (neighborChunk.TileData & + SharedNavMapSystem.GetFlag(new Vector2i(SharedNavMapSystem.ChunkSize - 1, relativeTile.Y))) != 0x0; + } + else + { + var flag = SharedNavMapSystem.GetFlag(relativeTile + new Vector2i(-1, 0)); + neighbor = (chunk.TileData & flag) != 0x0; + } + + if (!neighbor) + { + // Add point + list.Add(new NavMapLine(position, position + new Vector2(0f, -grid.TileSize))); + } + + // Draw a diagonal line for interiors. + list.Add(new NavMapLine(position + new Vector2(0f, -grid.TileSize), position + new Vector2(grid.TileSize, 0f))); + } + + decodedOutput.Add(chunkOrigin, list); + } + + return decodedOutput; } - private Vector2 Scale(Vector2 position) + protected Vector2 Scale(Vector2 position) { return position * MinimapScale + MidpointVector; } + + protected Vector2 GetOffset() + { + return _offset + (_physics != null ? _physics.LocalCenter : new Vector2()); + } +} + +public struct NavMapBlip +{ + public EntityCoordinates Coordinates; + public Texture Texture; + public Color Color; + public bool Blinks; + public bool Selectable; + + public NavMapBlip(EntityCoordinates coordinates, Texture texture, Color color, bool blinks, bool selectable = true) + { + Coordinates = coordinates; + Texture = texture; + Color = color; + Blinks = blinks; + Selectable = selectable; + } +} + +public struct NavMapLine +{ + public readonly Vector2 Origin; + public readonly Vector2 Terminus; + + public NavMapLine(Vector2 origin, Vector2 terminus) + { + Origin = origin; + Terminus = terminus; + } } diff --git a/Content.Client/Pinpointer/UI/StationMapWindow.xaml.cs b/Content.Client/Pinpointer/UI/StationMapWindow.xaml.cs index 1fa12fa9e7c..f52f5367753 100644 --- a/Content.Client/Pinpointer/UI/StationMapWindow.xaml.cs +++ b/Content.Client/Pinpointer/UI/StationMapWindow.xaml.cs @@ -21,5 +21,7 @@ public StationMapWindow(EntityUid? mapUid, EntityUid? trackedEntity) { Title = metadata.EntityName; } + + NavMapScreen.ForceNavMapUpdate(); } } diff --git a/Content.Server/Access/Components/PresetIdCardComponent.cs b/Content.Server/Access/Components/PresetIdCardComponent.cs index 5badbca311d..94aef2e6ca0 100644 --- a/Content.Server/Access/Components/PresetIdCardComponent.cs +++ b/Content.Server/Access/Components/PresetIdCardComponent.cs @@ -1,15 +1,14 @@ using Content.Shared.Roles; using Robust.Shared.Prototypes; -namespace Content.Server.Access.Components +namespace Content.Server.Access.Components; + +[RegisterComponent] +public sealed partial class PresetIdCardComponent : Component { - [RegisterComponent] - public sealed partial class PresetIdCardComponent : Component - { - [DataField("job")] - public ProtoId? JobName; + [DataField("job")] + public ProtoId? JobName; - [DataField("name")] - public string? IdName; - } + [DataField("name")] + public string? IdName; } diff --git a/Content.Server/Access/Systems/IdCardSystem.cs b/Content.Server/Access/Systems/IdCardSystem.cs index 3bf00d34c73..1c1e6874172 100644 --- a/Content.Server/Access/Systems/IdCardSystem.cs +++ b/Content.Server/Access/Systems/IdCardSystem.cs @@ -7,200 +7,216 @@ using Content.Shared.Access.Systems; using Content.Shared.Database; using Content.Shared.Popups; +using Content.Shared.Roles; using Content.Shared.StatusIcon; using Robust.Shared.Prototypes; using Robust.Shared.Random; -namespace Content.Server.Access.Systems +namespace Content.Server.Access.Systems; + +public sealed class IdCardSystem : SharedIdCardSystem { - public sealed class IdCardSystem : SharedIdCardSystem - { - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly MetaDataSystem _metaSystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly MetaDataSystem _metaSystem = default!; - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnMicrowaved); - } + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnMicrowaved); + } - private void OnMapInit(EntityUid uid, IdCardComponent id, MapInitEvent args) - { - UpdateEntityName(uid, id); - } + private void OnMapInit(EntityUid uid, IdCardComponent id, MapInitEvent args) + { + UpdateEntityName(uid, id); + } - private void OnMicrowaved(EntityUid uid, IdCardComponent component, BeingMicrowavedEvent args) + private void OnMicrowaved(EntityUid uid, IdCardComponent component, BeingMicrowavedEvent args) + { + if (TryComp(uid, out var access)) { - if (TryComp(uid, out var access)) + float randomPick = _random.NextFloat(); + // if really unlucky, burn card + if (randomPick <= 0.15f) { - float randomPick = _random.NextFloat(); - // if really unlucky, burn card - if (randomPick <= 0.15f) + TryComp(uid, out TransformComponent? transformComponent); + if (transformComponent != null) { - TryComp(uid, out TransformComponent? transformComponent); - if (transformComponent != null) - { - _popupSystem.PopupCoordinates(Loc.GetString("id-card-component-microwave-burnt", ("id", uid)), - transformComponent.Coordinates, PopupType.Medium); - EntityManager.SpawnEntity("FoodBadRecipe", - transformComponent.Coordinates); - } - _adminLogger.Add(LogType.Action, LogImpact.Medium, - $"{ToPrettyString(args.Microwave)} burnt {ToPrettyString(uid):entity}"); - EntityManager.QueueDeleteEntity(uid); - return; + _popupSystem.PopupCoordinates(Loc.GetString("id-card-component-microwave-burnt", ("id", uid)), + transformComponent.Coordinates, PopupType.Medium); + EntityManager.SpawnEntity("FoodBadRecipe", + transformComponent.Coordinates); } - // If they're unlucky, brick their ID - if (randomPick <= 0.25f) - { - _popupSystem.PopupEntity(Loc.GetString("id-card-component-microwave-bricked", ("id", uid)), uid); - - access.Tags.Clear(); - Dirty(access); - - _adminLogger.Add(LogType.Action, LogImpact.Medium, - $"{ToPrettyString(args.Microwave)} cleared access on {ToPrettyString(uid):entity}"); - } - else - { - _popupSystem.PopupEntity(Loc.GetString("id-card-component-microwave-safe", ("id", uid)), uid, PopupType.Medium); - } - - // Give them a wonderful new access to compensate for everything - var random = _random.Pick(_prototypeManager.EnumeratePrototypes().ToArray()); - - access.Tags.Add(random.ID); - Dirty(access); - _adminLogger.Add(LogType.Action, LogImpact.Medium, - $"{ToPrettyString(args.Microwave)} added {random.ID} access to {ToPrettyString(uid):entity}"); + $"{ToPrettyString(args.Microwave)} burnt {ToPrettyString(uid):entity}"); + EntityManager.QueueDeleteEntity(uid); + return; } - } - - /// - /// Attempts to change the job title of a card. - /// Returns true/false. - /// - /// - /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. - /// - public bool TryChangeJobTitle(EntityUid uid, string? jobTitle, IdCardComponent? id = null, EntityUid? player = null) - { - if (!Resolve(uid, ref id)) - return false; - - if (!string.IsNullOrWhiteSpace(jobTitle)) + // If they're unlucky, brick their ID + if (randomPick <= 0.25f) { - jobTitle = jobTitle.Trim(); + _popupSystem.PopupEntity(Loc.GetString("id-card-component-microwave-bricked", ("id", uid)), uid); - if (jobTitle.Length > IdCardConsoleComponent.MaxJobTitleLength) - jobTitle = jobTitle[..IdCardConsoleComponent.MaxJobTitleLength]; + access.Tags.Clear(); + Dirty(access); + + _adminLogger.Add(LogType.Action, LogImpact.Medium, + $"{ToPrettyString(args.Microwave)} cleared access on {ToPrettyString(uid):entity}"); } else { - jobTitle = null; + _popupSystem.PopupEntity(Loc.GetString("id-card-component-microwave-safe", ("id", uid)), uid, PopupType.Medium); } - if (id.JobTitle == jobTitle) - return true; - id.JobTitle = jobTitle; - Dirty(id); - UpdateEntityName(uid, id); + // Give them a wonderful new access to compensate for everything + var random = _random.Pick(_prototypeManager.EnumeratePrototypes().ToArray()); - if (player != null) - { - _adminLogger.Add(LogType.Identity, LogImpact.Low, - $"{ToPrettyString(player.Value):player} has changed the job title of {ToPrettyString(uid):entity} to {jobTitle} "); - } - return true; + access.Tags.Add(random.ID); + Dirty(access); + + _adminLogger.Add(LogType.Action, LogImpact.Medium, + $"{ToPrettyString(args.Microwave)} added {random.ID} access to {ToPrettyString(uid):entity}"); } + } + + /// + /// Attempts to change the job title of a card. + /// Returns true/false. + /// + /// + /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. + /// + public bool TryChangeJobTitle(EntityUid uid, string? jobTitle, IdCardComponent? id = null, EntityUid? player = null) + { + if (!Resolve(uid, ref id)) + return false; - public bool TryChangeJobIcon(EntityUid uid, StatusIconPrototype jobIcon, IdCardComponent? id = null, EntityUid? player = null) + if (!string.IsNullOrWhiteSpace(jobTitle)) { - if (!Resolve(uid, ref id)) - { - return false; - } + jobTitle = jobTitle.Trim(); - if (id.JobIcon == jobIcon.ID) - { - return true; - } + if (jobTitle.Length > IdCardConsoleComponent.MaxJobTitleLength) + jobTitle = jobTitle[..IdCardConsoleComponent.MaxJobTitleLength]; + } + else + { + jobTitle = null; + } - id.JobIcon = jobIcon.ID; - Dirty(uid, id); + if (id.JobTitle == jobTitle) + return true; + id.JobTitle = jobTitle; + Dirty(id); + UpdateEntityName(uid, id); - if (player != null) - { - _adminLogger.Add(LogType.Identity, LogImpact.Low, - $"{ToPrettyString(player.Value):player} has changed the job icon of {ToPrettyString(uid):entity} to {jobIcon} "); - } + if (player != null) + { + _adminLogger.Add(LogType.Identity, LogImpact.Low, + $"{ToPrettyString(player.Value):player} has changed the job title of {ToPrettyString(uid):entity} to {jobTitle} "); + } + return true; + } + + public bool TryChangeJobIcon(EntityUid uid, StatusIconPrototype jobIcon, IdCardComponent? id = null, EntityUid? player = null) + { + if (!Resolve(uid, ref id)) + { + return false; + } + if (id.JobIcon == jobIcon.ID) + { return true; } - /// - /// Attempts to change the full name of a card. - /// Returns true/false. - /// - /// - /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. - /// - public bool TryChangeFullName(EntityUid uid, string? fullName, IdCardComponent? id = null, EntityUid? player = null) + id.JobIcon = jobIcon.ID; + Dirty(uid, id); + + if (player != null) { - if (!Resolve(uid, ref id)) - return false; + _adminLogger.Add(LogType.Identity, LogImpact.Low, + $"{ToPrettyString(player.Value):player} has changed the job icon of {ToPrettyString(uid):entity} to {jobIcon} "); + } - if (!string.IsNullOrWhiteSpace(fullName)) - { - fullName = fullName.Trim(); - if (fullName.Length > IdCardConsoleComponent.MaxFullNameLength) - fullName = fullName[..IdCardConsoleComponent.MaxFullNameLength]; - } - else - { - fullName = null; - } + return true; + } - if (id.FullName == fullName) - return true; - id.FullName = fullName; - Dirty(id); - UpdateEntityName(uid, id); + public bool TryChangeJobDepartment(EntityUid uid, JobPrototype job, IdCardComponent? id = null) + { + if (!Resolve(uid, ref id)) + return false; - if (player != null) - { - _adminLogger.Add(LogType.Identity, LogImpact.Low, - $"{ToPrettyString(player.Value):player} has changed the name of {ToPrettyString(uid):entity} to {fullName} "); - } - return true; + foreach (var department in _prototypeManager.EnumeratePrototypes()) + { + if (department.Roles.Contains(job.ID)) + id.JobDepartments.Add("department-" + department.ID); } - /// - /// Changes the name of the id's owner. - /// - /// - /// If either or is empty, it's replaced by placeholders. - /// If both are empty, the original entity's name is restored. - /// - private void UpdateEntityName(EntityUid uid, IdCardComponent? id = null) + Dirty(uid, id); + + return true; + } + + /// + /// Attempts to change the full name of a card. + /// Returns true/false. + /// + /// + /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. + /// + public bool TryChangeFullName(EntityUid uid, string? fullName, IdCardComponent? id = null, EntityUid? player = null) + { + if (!Resolve(uid, ref id)) + return false; + + if (!string.IsNullOrWhiteSpace(fullName)) { - if (!Resolve(uid, ref id)) - return; + fullName = fullName.Trim(); + if (fullName.Length > IdCardConsoleComponent.MaxFullNameLength) + fullName = fullName[..IdCardConsoleComponent.MaxFullNameLength]; + } + else + { + fullName = null; + } - var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; + if (id.FullName == fullName) + return true; + id.FullName = fullName; + Dirty(id); + UpdateEntityName(uid, id); - var val = string.IsNullOrWhiteSpace(id.FullName) - ? Loc.GetString("access-id-card-component-owner-name-job-title-text", - ("jobSuffix", jobSuffix)) - : Loc.GetString("access-id-card-component-owner-full-name-job-title-text", - ("fullName", id.FullName), - ("jobSuffix", jobSuffix)); - _metaSystem.SetEntityName(uid, val); + if (player != null) + { + _adminLogger.Add(LogType.Identity, LogImpact.Low, + $"{ToPrettyString(player.Value):player} has changed the name of {ToPrettyString(uid):entity} to {fullName} "); } + return true; + } + + /// + /// Changes the name of the id's owner. + /// + /// + /// If either or is empty, it's replaced by placeholders. + /// If both are empty, the original entity's name is restored. + /// + private void UpdateEntityName(EntityUid uid, IdCardComponent? id = null) + { + if (!Resolve(uid, ref id)) + return; + + var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; + + var val = string.IsNullOrWhiteSpace(id.FullName) + ? Loc.GetString("access-id-card-component-owner-name-job-title-text", + ("jobSuffix", jobSuffix)) + : Loc.GetString("access-id-card-component-owner-full-name-job-title-text", + ("fullName", id.FullName), + ("jobSuffix", jobSuffix)); + _metaSystem.SetEntityName(uid, val); } } diff --git a/Content.Server/Access/Systems/PresetIdCardSystem.cs b/Content.Server/Access/Systems/PresetIdCardSystem.cs index 96a38278b5b..4073b4baa28 100644 --- a/Content.Server/Access/Systems/PresetIdCardSystem.cs +++ b/Content.Server/Access/Systems/PresetIdCardSystem.cs @@ -7,82 +7,82 @@ using Content.Shared.StatusIcon; using Robust.Shared.Prototypes; -namespace Content.Server.Access.Systems +namespace Content.Server.Access.Systems; + +public sealed class PresetIdCardSystem : EntitySystem { - public sealed class PresetIdCardSystem : EntitySystem + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IdCardSystem _cardSystem = default!; + [Dependency] private readonly SharedAccessSystem _accessSystem = default!; + [Dependency] private readonly StationSystem _stationSystem = default!; + + public override void Initialize() { - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IdCardSystem _cardSystem = default!; - [Dependency] private readonly SharedAccessSystem _accessSystem = default!; - [Dependency] private readonly StationSystem _stationSystem = default!; + SubscribeLocalEvent(OnMapInit); - public override void Initialize() - { - SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(PlayerJobsAssigned); + } - SubscribeLocalEvent(PlayerJobsAssigned); - } + private void PlayerJobsAssigned(RulePlayerJobsAssignedEvent ev) + { + // Go over all ID cards and make sure they're correctly configured for extended access. - private void PlayerJobsAssigned(RulePlayerJobsAssignedEvent ev) + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var card)) { - // Go over all ID cards and make sure they're correctly configured for extended access. - - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var card)) - { - var station = _stationSystem.GetOwningStation(uid); + var station = _stationSystem.GetOwningStation(uid); - // If we're not on an extended access station, the ID is already configured correctly from MapInit. - if (station == null || !Comp(station.Value).ExtendedAccess) - return; + // If we're not on an extended access station, the ID is already configured correctly from MapInit. + if (station == null || !Comp(station.Value).ExtendedAccess) + return; - SetupIdAccess(uid, card, true); - SetupIdName(uid, card); - } + SetupIdAccess(uid, card, true); + SetupIdName(uid, card); } + } - private void OnMapInit(EntityUid uid, PresetIdCardComponent id, MapInitEvent args) - { - // If a preset ID card is spawned on a station at setup time, - // the station may not exist, - // or may not yet know whether it is on extended access (players not spawned yet). - // PlayerJobsAssigned makes sure extended access is configured correctly in that case. + private void OnMapInit(EntityUid uid, PresetIdCardComponent id, MapInitEvent args) + { + // If a preset ID card is spawned on a station at setup time, + // the station may not exist, + // or may not yet know whether it is on extended access (players not spawned yet). + // PlayerJobsAssigned makes sure extended access is configured correctly in that case. + + var station = _stationSystem.GetOwningStation(uid); + var extended = false; + if (station != null) + extended = Comp(station.Value).ExtendedAccess; + + SetupIdAccess(uid, id, extended); + SetupIdName(uid, id); + } - var station = _stationSystem.GetOwningStation(uid); - var extended = false; - if (station != null) - extended = Comp(station.Value).ExtendedAccess; + private void SetupIdName(EntityUid uid, PresetIdCardComponent id) + { + if (id.IdName == null) + return; + _cardSystem.TryChangeFullName(uid, id.IdName); + } - SetupIdAccess(uid, id, extended); - SetupIdName(uid, id); - } + private void SetupIdAccess(EntityUid uid, PresetIdCardComponent id, bool extended) + { + if (id.JobName == null) + return; - private void SetupIdName(EntityUid uid, PresetIdCardComponent id) + if (!_prototypeManager.TryIndex(id.JobName, out JobPrototype? job)) { - if (id.IdName == null) - return; - _cardSystem.TryChangeFullName(uid, id.IdName); + Log.Error($"Invalid job id ({id.JobName}) for preset card"); + return; } - private void SetupIdAccess(EntityUid uid, PresetIdCardComponent id, bool extended) - { - if (id.JobName == null) - return; - - if (!_prototypeManager.TryIndex(id.JobName, out JobPrototype? job)) - { - Log.Error($"Invalid job id ({id.JobName}) for preset card"); - return; - } - - _accessSystem.SetAccessToJob(uid, job, extended); + _accessSystem.SetAccessToJob(uid, job, extended); - _cardSystem.TryChangeJobTitle(uid, job.LocalizedName); + _cardSystem.TryChangeJobTitle(uid, job.LocalizedName); + _cardSystem.TryChangeJobDepartment(uid, job); - if (_prototypeManager.TryIndex(job.Icon, out var jobIcon)) - { - _cardSystem.TryChangeJobIcon(uid, jobIcon); - } + if (_prototypeManager.TryIndex(job.Icon, out var jobIcon)) + { + _cardSystem.TryChangeJobIcon(uid, jobIcon); } } } diff --git a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleComponent.cs b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleComponent.cs index 7aaa2ef368f..c2d7124194f 100644 --- a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleComponent.cs +++ b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleComponent.cs @@ -1,33 +1,19 @@ using Content.Shared.Medical.SuitSensor; -namespace Content.Server.Medical.CrewMonitoring -{ - [RegisterComponent] - [Access(typeof(CrewMonitoringConsoleSystem))] - public sealed partial class CrewMonitoringConsoleComponent : Component - { - /// - /// List of all currently connected sensors to this console. - /// - public Dictionary ConnectedSensors = new(); - - /// - /// After what time sensor consider to be lost. - /// - [DataField("sensorTimeout"), ViewVariables(VVAccess.ReadWrite)] - public float SensorTimeout = 10f; +namespace Content.Server.Medical.CrewMonitoring; - /// - /// Whether the direction arrows in the monitor UI should snap the nearest diagonal or cardinal direction, or whether they should point exactly towards the target. - /// - [DataField("snap"), ViewVariables(VVAccess.ReadWrite)] - public bool Snap = true; +[RegisterComponent] +[Access(typeof(CrewMonitoringConsoleSystem))] +public sealed partial class CrewMonitoringConsoleComponent : Component +{ + /// + /// List of all currently connected sensors to this console. + /// + public Dictionary ConnectedSensors = new(); - /// - /// Minimum distance before the monitor direction indicator stops pointing towards the target and instead - /// shows an icon indicating that the target is "here". Does not affect the displayed coordinates. - /// - [DataField("precision"), ViewVariables(VVAccess.ReadWrite)] - public float Precision = 10f; - } + /// + /// After what time sensor consider to be lost. + /// + [DataField("sensorTimeout"), ViewVariables(VVAccess.ReadWrite)] + public float SensorTimeout = 10f; } diff --git a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs index ed650704361..ff02b9cbdfe 100644 --- a/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs +++ b/Content.Server/Medical/CrewMonitoring/CrewMonitoringConsoleSystem.cs @@ -4,62 +4,71 @@ using Content.Server.PowerCell; using Content.Shared.Medical.CrewMonitoring; using Content.Shared.Medical.SuitSensor; +using Content.Shared.Pinpointer; using Robust.Server.GameObjects; -namespace Content.Server.Medical.CrewMonitoring +namespace Content.Server.Medical.CrewMonitoring; + +public sealed class CrewMonitoringConsoleSystem : EntitySystem { - public sealed class CrewMonitoringConsoleSystem : EntitySystem + [Dependency] private readonly PowerCellSystem _cell = default!; + [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnRemove); + SubscribeLocalEvent(OnPacketReceived); + SubscribeLocalEvent(OnUIOpened); + } + + private void OnRemove(EntityUid uid, CrewMonitoringConsoleComponent component, ComponentRemove args) + { + component.ConnectedSensors.Clear(); + } + + private void OnPacketReceived(EntityUid uid, CrewMonitoringConsoleComponent component, DeviceNetworkPacketEvent args) { - [Dependency] private readonly PowerCellSystem _cell = default!; - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnRemove); - SubscribeLocalEvent(OnPacketReceived); - SubscribeLocalEvent(OnUIOpened); - } - - private void OnRemove(EntityUid uid, CrewMonitoringConsoleComponent component, ComponentRemove args) - { - component.ConnectedSensors.Clear(); - } - - private void OnPacketReceived(EntityUid uid, CrewMonitoringConsoleComponent component, DeviceNetworkPacketEvent args) - { - var payload = args.Data; - // check command - if (!payload.TryGetValue(DeviceNetworkConstants.Command, out string? command)) - return; - if (command != DeviceNetworkConstants.CmdUpdatedState) - return; - if (!payload.TryGetValue(SuitSensorConstants.NET_STATUS_COLLECTION, out Dictionary? sensorStatus)) - return; - - component.ConnectedSensors = sensorStatus; - UpdateUserInterface(uid, component); - } - - private void OnUIOpened(EntityUid uid, CrewMonitoringConsoleComponent component, BoundUIOpenedEvent args) - { - if (!_cell.TryUseActivatableCharge(uid)) - return; - - UpdateUserInterface(uid, component); - } - - private void UpdateUserInterface(EntityUid uid, CrewMonitoringConsoleComponent? component = null) - { - if (!Resolve(uid, ref component)) - return; - - if (!_uiSystem.TryGetUi(uid, CrewMonitoringUIKey.Key, out var bui)) - return; - - // update all sensors info - var allSensors = component.ConnectedSensors.Values.ToList(); - _uiSystem.SetUiState(bui, new CrewMonitoringState(allSensors, component.Snap, component.Precision)); - } + var payload = args.Data; + + // Check command + if (!payload.TryGetValue(DeviceNetworkConstants.Command, out string? command)) + return; + + if (command != DeviceNetworkConstants.CmdUpdatedState) + return; + + if (!payload.TryGetValue(SuitSensorConstants.NET_STATUS_COLLECTION, out Dictionary? sensorStatus)) + return; + + component.ConnectedSensors = sensorStatus; + UpdateUserInterface(uid, component); + } + + private void OnUIOpened(EntityUid uid, CrewMonitoringConsoleComponent component, BoundUIOpenedEvent args) + { + if (!_cell.TryUseActivatableCharge(uid)) + return; + + UpdateUserInterface(uid, component); + } + + private void UpdateUserInterface(EntityUid uid, CrewMonitoringConsoleComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + if (!_uiSystem.TryGetUi(uid, CrewMonitoringUIKey.Key, out var bui)) + return; + + // The grid must have a NavMapComponent to visualize the map in the UI + var xform = Transform(uid); + + if (xform.GridUid != null) + EnsureComp(xform.GridUid.Value); + + // Update all sensors info + var allSensors = component.ConnectedSensors.Values.ToList(); + _uiSystem.SetUiState(bui, new CrewMonitoringState(allSensors)); } } diff --git a/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs b/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs index 294be8c7e1d..32b81e2921a 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs @@ -1,76 +1,75 @@ using Content.Shared.Medical.SuitSensor; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -namespace Content.Server.Medical.SuitSensors +namespace Content.Server.Medical.SuitSensors; + +/// +/// Tracking device, embedded in almost all uniforms and jumpsuits. +/// If enabled, will report to crew monitoring console owners position and status. +/// +[RegisterComponent] +[Access(typeof(SuitSensorSystem))] +public sealed partial class SuitSensorComponent : Component { /// - /// Tracking device, embedded in almost all uniforms and jumpsuits. - /// If enabled, will report to crew monitoring console owners position and status. + /// Choose a random sensor mode when item is spawned. /// - [RegisterComponent] - [Access(typeof(SuitSensorSystem))] - public sealed partial class SuitSensorComponent : Component - { - /// - /// Choose a random sensor mode when item is spawned. - /// - [DataField("randomMode")] - public bool RandomMode = true; + [DataField("randomMode")] + public bool RandomMode = true; - /// - /// If true user can't change suit sensor mode - /// - [DataField("controlsLocked")] - public bool ControlsLocked = false; + /// + /// If true user can't change suit sensor mode + /// + [DataField("controlsLocked")] + public bool ControlsLocked = false; - /// - /// Current sensor mode. Can be switched by user verbs. - /// - [DataField("mode")] - public SuitSensorMode Mode = SuitSensorMode.SensorOff; + /// + /// Current sensor mode. Can be switched by user verbs. + /// + [DataField("mode")] + public SuitSensorMode Mode = SuitSensorMode.SensorOff; - /// - /// Activate sensor if user wear it in this slot. - /// - [DataField("activationSlot")] - public string ActivationSlot = "jumpsuit"; + /// + /// Activate sensor if user wear it in this slot. + /// + [DataField("activationSlot")] + public string ActivationSlot = "jumpsuit"; - /// - /// Activate sensor if user has this in a sensor-compatible container. - /// - [DataField("activationContainer")] - public string? ActivationContainer; + /// + /// Activate sensor if user has this in a sensor-compatible container. + /// + [DataField("activationContainer")] + public string? ActivationContainer; - /// - /// How often does sensor update its owners status (in seconds). Limited by the system update rate. - /// - [DataField("updateRate")] - public TimeSpan UpdateRate = TimeSpan.FromSeconds(2f); + /// + /// How often does sensor update its owners status (in seconds). Limited by the system update rate. + /// + [DataField("updateRate")] + public TimeSpan UpdateRate = TimeSpan.FromSeconds(2f); - /// - /// Current user that wears suit sensor. Null if nobody wearing it. - /// - [ViewVariables] - public EntityUid? User = null; + /// + /// Current user that wears suit sensor. Null if nobody wearing it. + /// + [ViewVariables] + public EntityUid? User = null; - /// - /// Next time when sensor updated owners status - /// - [DataField("nextUpdate", customTypeSerializer:typeof(TimeOffsetSerializer))] - public TimeSpan NextUpdate = TimeSpan.Zero; + /// + /// Next time when sensor updated owners status + /// + [DataField("nextUpdate", customTypeSerializer:typeof(TimeOffsetSerializer))] + public TimeSpan NextUpdate = TimeSpan.Zero; - /// - /// The station this suit sensor belongs to. If it's null the suit didn't spawn on a station and the sensor doesn't work. - /// - [DataField("station")] - public EntityUid? StationId = null; + /// + /// The station this suit sensor belongs to. If it's null the suit didn't spawn on a station and the sensor doesn't work. + /// + [DataField("station")] + public EntityUid? StationId = null; - /// - /// The server the suit sensor sends it state to. - /// The suit sensor will try connecting to a new server when no server is connected. - /// It does this by calling the servers entity system for performance reasons. - /// - [DataField("server")] - public string? ConnectedServer = null; - } + /// + /// The server the suit sensor sends it state to. + /// The suit sensor will try connecting to a new server when no server is connected. + /// It does this by calling the servers entity system for performance reasons. + /// + [DataField("server")] + public string? ConnectedServer = null; } diff --git a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs index f382d520ffe..4629a1bf551 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs @@ -18,399 +18,409 @@ using Robust.Shared.Random; using Robust.Shared.Timing; -namespace Content.Server.Medical.SuitSensors +namespace Content.Server.Medical.SuitSensors; + +public sealed class SuitSensorSystem : EntitySystem { - public sealed class SuitSensorSystem : EntitySystem + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly CrewMonitoringServerSystem _monitoringServerSystem = default!; + [Dependency] private readonly DeviceNetworkSystem _deviceNetworkSystem = default!; + [Dependency] private readonly IdCardSystem _idCardSystem = default!; + [Dependency] private readonly MobStateSystem _mobStateSystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly StationSystem _stationSystem = default!; + + public override void Initialize() { - [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly CrewMonitoringServerSystem _monitoringServerSystem = default!; - [Dependency] private readonly DeviceNetworkSystem _deviceNetworkSystem = default!; - [Dependency] private readonly IdCardSystem _idCardSystem = default!; - [Dependency] private readonly MobStateSystem _mobStateSystem = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly SharedTransformSystem _transform = default!; - [Dependency] private readonly StationSystem _stationSystem = default!; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnPlayerSpawn); - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnUnpaused); - SubscribeLocalEvent(OnEquipped); - SubscribeLocalEvent(OnUnequipped); - SubscribeLocalEvent(OnExamine); - SubscribeLocalEvent>(OnVerb); - SubscribeLocalEvent(OnInsert); - SubscribeLocalEvent(OnRemove); - } - - private void OnUnpaused(EntityUid uid, SuitSensorComponent component, ref EntityUnpausedEvent args) - { - component.NextUpdate += args.PausedTime; - } - - public override void Update(float frameTime) - { - base.Update(frameTime); - - var curTime = _gameTiming.CurTime; - var sensors = EntityManager.EntityQueryEnumerator(); + base.Initialize(); + SubscribeLocalEvent(OnPlayerSpawn); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnUnpaused); + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnequipped); + SubscribeLocalEvent(OnExamine); + SubscribeLocalEvent>(OnVerb); + SubscribeLocalEvent(OnInsert); + SubscribeLocalEvent(OnRemove); + } - while (sensors.MoveNext(out var uid, out var sensor, out var device)) - { - if (device.TransmitFrequency is null) - continue; + private void OnUnpaused(EntityUid uid, SuitSensorComponent component, ref EntityUnpausedEvent args) + { + component.NextUpdate += args.PausedTime; + } - // check if sensor is ready to update - if (curTime < sensor.NextUpdate) - continue; + public override void Update(float frameTime) + { + base.Update(frameTime); - if (!CheckSensorAssignedStation(uid, sensor)) - continue; + var curTime = _gameTiming.CurTime; + var sensors = EntityManager.EntityQueryEnumerator(); - // TODO: This would cause imprecision at different tick rates. - sensor.NextUpdate = curTime + sensor.UpdateRate; + while (sensors.MoveNext(out var uid, out var sensor, out var device)) + { + if (device.TransmitFrequency is null) + continue; - // get sensor status - var status = GetSensorState(uid, sensor); - if (status == null) - continue; + // check if sensor is ready to update + if (curTime < sensor.NextUpdate) + continue; - //Retrieve active server address if the sensor isn't connected to a server - if (sensor.ConnectedServer == null) - { - if (!_monitoringServerSystem.TryGetActiveServerAddress(sensor.StationId!.Value, out var address)) - continue; + if (!CheckSensorAssignedStation(uid, sensor)) + continue; - sensor.ConnectedServer = address; - } + // TODO: This would cause imprecision at different tick rates. + sensor.NextUpdate = curTime + sensor.UpdateRate; - // Send it to the connected server - var payload = SuitSensorToPacket(status); + // get sensor status + var status = GetSensorState(uid, sensor); + if (status == null) + continue; - // Clear the connected server if its address isn't on the network - if (!_deviceNetworkSystem.IsAddressPresent(device.DeviceNetId, sensor.ConnectedServer)) - { - sensor.ConnectedServer = null; + //Retrieve active server address if the sensor isn't connected to a server + if (sensor.ConnectedServer == null) + { + if (!_monitoringServerSystem.TryGetActiveServerAddress(sensor.StationId!.Value, out var address)) continue; - } - _deviceNetworkSystem.QueuePacket(uid, sensor.ConnectedServer, payload, device: device); + sensor.ConnectedServer = address; } - } - /// - /// Checks whether the sensor is assigned to a station or not - /// and tries to assign an unassigned sensor to a station if it's currently on a grid - /// - /// True if the sensor is assigned to a station or assigning it was successful. False otherwise. - private bool CheckSensorAssignedStation(EntityUid uid, SuitSensorComponent sensor) - { - if (!sensor.StationId.HasValue && Transform(uid).GridUid == null) - return false; + // Send it to the connected server + var payload = SuitSensorToPacket(status); - sensor.StationId = _stationSystem.GetOwningStation(uid); - return sensor.StationId.HasValue; - } + // Clear the connected server if its address isn't on the network + if (!_deviceNetworkSystem.IsAddressPresent(device.DeviceNetId, sensor.ConnectedServer)) + { + sensor.ConnectedServer = null; + continue; + } - private void OnPlayerSpawn(PlayerSpawnCompleteEvent ev) - { - // If the player spawns in arrivals then the grid underneath them may not be appropriate. - // in which case we'll just use the station spawn code told us they are attached to and set all of their - // sensors. - var sensorQuery = GetEntityQuery(); - var xformQuery = GetEntityQuery(); - RecursiveSensor(ev.Mob, ev.Station, sensorQuery, xformQuery); + _deviceNetworkSystem.QueuePacket(uid, sensor.ConnectedServer, payload, device: device); } + } - private void RecursiveSensor(EntityUid uid, EntityUid stationUid, EntityQuery sensorQuery, EntityQuery xformQuery) - { - var xform = xformQuery.GetComponent(uid); - var enumerator = xform.ChildEnumerator; + /// + /// Checks whether the sensor is assigned to a station or not + /// and tries to assign an unassigned sensor to a station if it's currently on a grid + /// + /// True if the sensor is assigned to a station or assigning it was successful. False otherwise. + private bool CheckSensorAssignedStation(EntityUid uid, SuitSensorComponent sensor) + { + if (!sensor.StationId.HasValue && Transform(uid).GridUid == null) + return false; - while (enumerator.MoveNext(out var child)) - { - if (sensorQuery.TryGetComponent(child, out var sensor)) - { - sensor.StationId = stationUid; - } + sensor.StationId = _stationSystem.GetOwningStation(uid); + return sensor.StationId.HasValue; + } - RecursiveSensor(child.Value, stationUid, sensorQuery, xformQuery); - } - } + private void OnPlayerSpawn(PlayerSpawnCompleteEvent ev) + { + // If the player spawns in arrivals then the grid underneath them may not be appropriate. + // in which case we'll just use the station spawn code told us they are attached to and set all of their + // sensors. + var sensorQuery = GetEntityQuery(); + var xformQuery = GetEntityQuery(); + RecursiveSensor(ev.Mob, ev.Station, sensorQuery, xformQuery); + } - private void OnMapInit(EntityUid uid, SuitSensorComponent component, MapInitEvent args) - { - // Fallback - component.StationId ??= _stationSystem.GetOwningStation(uid); + private void RecursiveSensor(EntityUid uid, EntityUid stationUid, EntityQuery sensorQuery, EntityQuery xformQuery) + { + var xform = xformQuery.GetComponent(uid); + var enumerator = xform.ChildEnumerator; - // generate random mode - if (component.RandomMode) + while (enumerator.MoveNext(out var child)) + { + if (sensorQuery.TryGetComponent(child, out var sensor)) { - //make the sensor mode favor higher levels, except coords. - var modesDist = new[] - { - SuitSensorMode.SensorOff, - SuitSensorMode.SensorBinary, SuitSensorMode.SensorBinary, - SuitSensorMode.SensorVitals, SuitSensorMode.SensorVitals, SuitSensorMode.SensorVitals, - SuitSensorMode.SensorCords, SuitSensorMode.SensorCords - }; - component.Mode = _random.Pick(modesDist); + sensor.StationId = stationUid; } + + RecursiveSensor(child.Value, stationUid, sensorQuery, xformQuery); } + } - private void OnEquipped(EntityUid uid, SuitSensorComponent component, GotEquippedEvent args) - { - if (args.Slot != component.ActivationSlot) - return; + private void OnMapInit(EntityUid uid, SuitSensorComponent component, MapInitEvent args) + { + // Fallback + component.StationId ??= _stationSystem.GetOwningStation(uid); - component.User = args.Equipee; + // generate random mode + if (component.RandomMode) + { + //make the sensor mode favor higher levels, except coords. + var modesDist = new[] + { + SuitSensorMode.SensorOff, + SuitSensorMode.SensorBinary, SuitSensorMode.SensorBinary, + SuitSensorMode.SensorVitals, SuitSensorMode.SensorVitals, SuitSensorMode.SensorVitals, + SuitSensorMode.SensorCords, SuitSensorMode.SensorCords + }; + component.Mode = _random.Pick(modesDist); } + } - private void OnUnequipped(EntityUid uid, SuitSensorComponent component, GotUnequippedEvent args) - { - if (args.Slot != component.ActivationSlot) - return; + private void OnEquipped(EntityUid uid, SuitSensorComponent component, GotEquippedEvent args) + { + if (args.Slot != component.ActivationSlot) + return; - component.User = null; - } + component.User = args.Equipee; + } - private void OnExamine(EntityUid uid, SuitSensorComponent component, ExaminedEvent args) - { - if (!args.IsInDetailsRange) - return; + private void OnUnequipped(EntityUid uid, SuitSensorComponent component, GotUnequippedEvent args) + { + if (args.Slot != component.ActivationSlot) + return; - string msg; - switch (component.Mode) - { - case SuitSensorMode.SensorOff: - msg = "suit-sensor-examine-off"; - break; - case SuitSensorMode.SensorBinary: - msg = "suit-sensor-examine-binary"; - break; - case SuitSensorMode.SensorVitals: - msg = "suit-sensor-examine-vitals"; - break; - case SuitSensorMode.SensorCords: - msg = "suit-sensor-examine-cords"; - break; - default: - return; - } + component.User = null; + } - args.PushMarkup(Loc.GetString(msg)); - } + private void OnExamine(EntityUid uid, SuitSensorComponent component, ExaminedEvent args) + { + if (!args.IsInDetailsRange) + return; - private void OnVerb(EntityUid uid, SuitSensorComponent component, GetVerbsEvent args) + string msg; + switch (component.Mode) { - // check if user can change sensor - if (component.ControlsLocked) + case SuitSensorMode.SensorOff: + msg = "suit-sensor-examine-off"; + break; + case SuitSensorMode.SensorBinary: + msg = "suit-sensor-examine-binary"; + break; + case SuitSensorMode.SensorVitals: + msg = "suit-sensor-examine-vitals"; + break; + case SuitSensorMode.SensorCords: + msg = "suit-sensor-examine-cords"; + break; + default: return; + } - // standard interaction checks - if (!args.CanAccess || !args.CanInteract || args.Hands == null) - return; + args.PushMarkup(Loc.GetString(msg)); + } - args.Verbs.UnionWith(new[] - { - CreateVerb(uid, component, args.User, SuitSensorMode.SensorOff), - CreateVerb(uid, component, args.User, SuitSensorMode.SensorBinary), - CreateVerb(uid, component, args.User, SuitSensorMode.SensorVitals), - CreateVerb(uid, component, args.User, SuitSensorMode.SensorCords) - }); - } + private void OnVerb(EntityUid uid, SuitSensorComponent component, GetVerbsEvent args) + { + // check if user can change sensor + if (component.ControlsLocked) + return; - private void OnInsert(EntityUid uid, SuitSensorComponent component, EntGotInsertedIntoContainerMessage args) + // standard interaction checks + if (!args.CanAccess || !args.CanInteract || args.Hands == null) + return; + + args.Verbs.UnionWith(new[] { - if (args.Container.ID != component.ActivationContainer) - return; + CreateVerb(uid, component, args.User, SuitSensorMode.SensorOff), + CreateVerb(uid, component, args.User, SuitSensorMode.SensorBinary), + CreateVerb(uid, component, args.User, SuitSensorMode.SensorVitals), + CreateVerb(uid, component, args.User, SuitSensorMode.SensorCords) + }); + } - component.User = args.Container.Owner; - } + private void OnInsert(EntityUid uid, SuitSensorComponent component, EntGotInsertedIntoContainerMessage args) + { + if (args.Container.ID != component.ActivationContainer) + return; - private void OnRemove(EntityUid uid, SuitSensorComponent component, EntGotRemovedFromContainerMessage args) - { - if (args.Container.ID != component.ActivationContainer) - return; + component.User = args.Container.Owner; + } - component.User = null; - } + private void OnRemove(EntityUid uid, SuitSensorComponent component, EntGotRemovedFromContainerMessage args) + { + if (args.Container.ID != component.ActivationContainer) + return; - private Verb CreateVerb(EntityUid uid, SuitSensorComponent component, EntityUid userUid, SuitSensorMode mode) - { - return new Verb() - { - Text = GetModeName(mode), - Disabled = component.Mode == mode, - Priority = -(int) mode, // sort them in descending order - Category = VerbCategory.SetSensor, - Act = () => SetSensor(uid, mode, userUid, component) - }; - } + component.User = null; + } - private string GetModeName(SuitSensorMode mode) + private Verb CreateVerb(EntityUid uid, SuitSensorComponent component, EntityUid userUid, SuitSensorMode mode) + { + return new Verb() { - string name; - switch (mode) - { - case SuitSensorMode.SensorOff: - name = "suit-sensor-mode-off"; - break; - case SuitSensorMode.SensorBinary: - name = "suit-sensor-mode-binary"; - break; - case SuitSensorMode.SensorVitals: - name = "suit-sensor-mode-vitals"; - break; - case SuitSensorMode.SensorCords: - name = "suit-sensor-mode-cords"; - break; - default: - return ""; - } + Text = GetModeName(mode), + Disabled = component.Mode == mode, + Priority = -(int) mode, // sort them in descending order + Category = VerbCategory.SetSensor, + Act = () => SetSensor(uid, mode, userUid, component) + }; + } - return Loc.GetString(name); + private string GetModeName(SuitSensorMode mode) + { + string name; + switch (mode) + { + case SuitSensorMode.SensorOff: + name = "suit-sensor-mode-off"; + break; + case SuitSensorMode.SensorBinary: + name = "suit-sensor-mode-binary"; + break; + case SuitSensorMode.SensorVitals: + name = "suit-sensor-mode-vitals"; + break; + case SuitSensorMode.SensorCords: + name = "suit-sensor-mode-cords"; + break; + default: + return ""; } - public void SetSensor(EntityUid uid, SuitSensorMode mode, EntityUid? userUid = null, - SuitSensorComponent? component = null) - { - if (!Resolve(uid, ref component)) - return; + return Loc.GetString(name); + } - component.Mode = mode; + public void SetSensor(EntityUid uid, SuitSensorMode mode, EntityUid? userUid = null, + SuitSensorComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; - if (userUid != null) - { - var msg = Loc.GetString("suit-sensor-mode-state", ("mode", GetModeName(mode))); - _popupSystem.PopupEntity(msg, uid, userUid.Value); - } - } + component.Mode = mode; - public SuitSensorStatus? GetSensorState(EntityUid uid, SuitSensorComponent? sensor = null, TransformComponent? transform = null) + if (userUid != null) { - if (!Resolve(uid, ref sensor, ref transform)) - return null; + var msg = Loc.GetString("suit-sensor-mode-state", ("mode", GetModeName(mode))); + _popupSystem.PopupEntity(msg, uid, userUid.Value); + } + } - // check if sensor is enabled and worn by user - if (sensor.Mode == SuitSensorMode.SensorOff || sensor.User == null || transform.GridUid == null) - return null; + public SuitSensorStatus? GetSensorState(EntityUid uid, SuitSensorComponent? sensor = null, TransformComponent? transform = null) + { + if (!Resolve(uid, ref sensor, ref transform)) + return null; - // try to get mobs id from ID slot - var userName = Loc.GetString("suit-sensor-component-unknown-name"); - var userJob = Loc.GetString("suit-sensor-component-unknown-job"); - if (_idCardSystem.TryFindIdCard(sensor.User.Value, out var card)) - { - if (card.Comp.FullName != null) - userName = card.Comp.FullName; - if (card.Comp.JobTitle != null) - userJob = card.Comp.JobTitle; - } + // check if sensor is enabled and worn by user + if (sensor.Mode == SuitSensorMode.SensorOff || sensor.User == null || transform.GridUid == null) + return null; - // get health mob state - var isAlive = false; - if (EntityManager.TryGetComponent(sensor.User.Value, out MobStateComponent? mobState)) - isAlive = !_mobStateSystem.IsDead(sensor.User.Value, mobState); + // try to get mobs id from ID slot + var userName = Loc.GetString("suit-sensor-component-unknown-name"); + var userJob = Loc.GetString("suit-sensor-component-unknown-job"); + var userJobIcon = "JobIconNoId"; + var userJobDepartments = new List(); - // get mob total damage - var totalDamage = 0; - if (TryComp(sensor.User.Value, out var damageable)) - totalDamage = damageable.TotalDamage.Int(); + if (_idCardSystem.TryFindIdCard(sensor.User.Value, out var card)) + { + if (card.Comp.FullName != null) + userName = card.Comp.FullName; + if (card.Comp.JobTitle != null) + userJob = card.Comp.JobTitle; + if (card.Comp.JobIcon != null) + userJobIcon = card.Comp.JobIcon; + + foreach (var department in card.Comp.JobDepartments) + userJobDepartments.Add(Loc.GetString(department)); + } - // finally, form suit sensor status - var status = new SuitSensorStatus(GetNetEntity(uid), userName, userJob); - switch (sensor.Mode) - { - case SuitSensorMode.SensorBinary: - status.IsAlive = isAlive; - break; - case SuitSensorMode.SensorVitals: - status.IsAlive = isAlive; - status.TotalDamage = totalDamage; - break; - case SuitSensorMode.SensorCords: - status.IsAlive = isAlive; - status.TotalDamage = totalDamage; - EntityCoordinates coordinates; - var xformQuery = GetEntityQuery(); - - if (transform.GridUid != null) - { - coordinates = new EntityCoordinates(transform.GridUid.Value, - _transform.GetInvWorldMatrix(xformQuery.GetComponent(transform.GridUid.Value), xformQuery) - .Transform(_transform.GetWorldPosition(transform, xformQuery))); - } - else if (transform.MapUid != null) - { - coordinates = new EntityCoordinates(transform.MapUid.Value, - _transform.GetWorldPosition(transform, xformQuery)); - } - else - { - coordinates = EntityCoordinates.Invalid; - } - - status.Coordinates = GetNetCoordinates(coordinates); - break; - } + // get health mob state + var isAlive = false; + if (EntityManager.TryGetComponent(sensor.User.Value, out MobStateComponent? mobState)) + isAlive = !_mobStateSystem.IsDead(sensor.User.Value, mobState); - return status; - } + // get mob total damage + var totalDamage = 0; + if (TryComp(sensor.User.Value, out var damageable)) + totalDamage = damageable.TotalDamage.Int(); - /// - /// Serialize create a device network package from the suit sensors status. - /// - public NetworkPayload SuitSensorToPacket(SuitSensorStatus status) + // finally, form suit sensor status + var status = new SuitSensorStatus(GetNetEntity(uid), userName, userJob, userJobIcon, userJobDepartments); + switch (sensor.Mode) { - var payload = new NetworkPayload() - { - [DeviceNetworkConstants.Command] = DeviceNetworkConstants.CmdUpdatedState, - [SuitSensorConstants.NET_NAME] = status.Name, - [SuitSensorConstants.NET_JOB] = status.Job, - [SuitSensorConstants.NET_IS_ALIVE] = status.IsAlive, - [SuitSensorConstants.NET_SUIT_SENSOR_UID] = status.SuitSensorUid, - }; + case SuitSensorMode.SensorBinary: + status.IsAlive = isAlive; + break; + case SuitSensorMode.SensorVitals: + status.IsAlive = isAlive; + status.TotalDamage = totalDamage; + break; + case SuitSensorMode.SensorCords: + status.IsAlive = isAlive; + status.TotalDamage = totalDamage; + EntityCoordinates coordinates; + var xformQuery = GetEntityQuery(); + + if (transform.GridUid != null) + { + coordinates = new EntityCoordinates(transform.GridUid.Value, + _transform.GetInvWorldMatrix(xformQuery.GetComponent(transform.GridUid.Value), xformQuery) + .Transform(_transform.GetWorldPosition(transform, xformQuery))); + } + else if (transform.MapUid != null) + { + coordinates = new EntityCoordinates(transform.MapUid.Value, + _transform.GetWorldPosition(transform, xformQuery)); + } + else + { + coordinates = EntityCoordinates.Invalid; + } - if (status.TotalDamage != null) - payload.Add(SuitSensorConstants.NET_TOTAL_DAMAGE, status.TotalDamage); - if (status.Coordinates != null) - payload.Add(SuitSensorConstants.NET_COORDINATES, status.Coordinates); + status.Coordinates = GetNetCoordinates(coordinates); + break; + } + return status; + } - return payload; - } + /// + /// Serialize create a device network package from the suit sensors status. + /// + public NetworkPayload SuitSensorToPacket(SuitSensorStatus status) + { + var payload = new NetworkPayload() + { + [DeviceNetworkConstants.Command] = DeviceNetworkConstants.CmdUpdatedState, + [SuitSensorConstants.NET_NAME] = status.Name, + [SuitSensorConstants.NET_JOB] = status.Job, + [SuitSensorConstants.NET_JOB_ICON] = status.JobIcon, + [SuitSensorConstants.NET_JOB_DEPARTMENTS] = status.JobDepartments, + [SuitSensorConstants.NET_IS_ALIVE] = status.IsAlive, + [SuitSensorConstants.NET_SUIT_SENSOR_UID] = status.SuitSensorUid, + }; + + if (status.TotalDamage != null) + payload.Add(SuitSensorConstants.NET_TOTAL_DAMAGE, status.TotalDamage); + if (status.Coordinates != null) + payload.Add(SuitSensorConstants.NET_COORDINATES, status.Coordinates); + + return payload; + } - /// - /// Try to create the suit sensors status from the device network message - /// - public SuitSensorStatus? PacketToSuitSensor(NetworkPayload payload) + /// + /// Try to create the suit sensors status from the device network message + /// + public SuitSensorStatus? PacketToSuitSensor(NetworkPayload payload) + { + // check command + if (!payload.TryGetValue(DeviceNetworkConstants.Command, out string? command)) + return null; + if (command != DeviceNetworkConstants.CmdUpdatedState) + return null; + + // check name, job and alive + if (!payload.TryGetValue(SuitSensorConstants.NET_NAME, out string? name)) return null; + if (!payload.TryGetValue(SuitSensorConstants.NET_JOB, out string? job)) return null; + if (!payload.TryGetValue(SuitSensorConstants.NET_JOB_ICON, out string? jobIcon)) return null; + if (!payload.TryGetValue(SuitSensorConstants.NET_JOB_DEPARTMENTS, out List? jobDepartments)) return null; + if (!payload.TryGetValue(SuitSensorConstants.NET_IS_ALIVE, out bool? isAlive)) return null; + if (!payload.TryGetValue(SuitSensorConstants.NET_SUIT_SENSOR_UID, out NetEntity suitSensorUid)) return null; + + // try get total damage and cords (optionals) + payload.TryGetValue(SuitSensorConstants.NET_TOTAL_DAMAGE, out int? totalDamage); + payload.TryGetValue(SuitSensorConstants.NET_COORDINATES, out NetCoordinates? coords); + + var status = new SuitSensorStatus(suitSensorUid, name, job, jobIcon, jobDepartments) { - // check command - if (!payload.TryGetValue(DeviceNetworkConstants.Command, out string? command)) - return null; - if (command != DeviceNetworkConstants.CmdUpdatedState) - return null; - - // check name, job and alive - if (!payload.TryGetValue(SuitSensorConstants.NET_NAME, out string? name)) return null; - if (!payload.TryGetValue(SuitSensorConstants.NET_JOB, out string? job)) return null; - if (!payload.TryGetValue(SuitSensorConstants.NET_IS_ALIVE, out bool? isAlive)) return null; - if (!payload.TryGetValue(SuitSensorConstants.NET_SUIT_SENSOR_UID, out NetEntity suitSensorUid)) return null; - - // try get total damage and cords (optionals) - payload.TryGetValue(SuitSensorConstants.NET_TOTAL_DAMAGE, out int? totalDamage); - payload.TryGetValue(SuitSensorConstants.NET_COORDINATES, out NetCoordinates? coords); - - var status = new SuitSensorStatus(suitSensorUid, name, job) - { - IsAlive = isAlive.Value, - TotalDamage = totalDamage, - Coordinates = coords, - }; - return status; - } + IsAlive = isAlive.Value, + TotalDamage = totalDamage, + Coordinates = coords, + }; + return status; } } diff --git a/Content.Shared/Access/Components/IdCardComponent.cs b/Content.Shared/Access/Components/IdCardComponent.cs index 975f0e6b51e..7635716d26a 100644 --- a/Content.Shared/Access/Components/IdCardComponent.cs +++ b/Content.Shared/Access/Components/IdCardComponent.cs @@ -4,29 +4,34 @@ using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; -namespace Content.Shared.Access.Components +namespace Content.Shared.Access.Components; + +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentState] +[Access(typeof(SharedIdCardSystem), typeof(SharedPdaSystem), typeof(SharedAgentIdCardSystem), Other = AccessPermissions.ReadWrite)] +public sealed partial class IdCardComponent : Component { - [RegisterComponent, NetworkedComponent] - [AutoGenerateComponentState] - [Access(typeof(SharedIdCardSystem), typeof(SharedPdaSystem), typeof(SharedAgentIdCardSystem), Other = AccessPermissions.ReadWrite)] - public sealed partial class IdCardComponent : Component - { - [DataField("fullName"), ViewVariables(VVAccess.ReadWrite)] - [AutoNetworkedField] - // FIXME Friends - public string? FullName; + [DataField("fullName"), ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + // FIXME Friends + public string? FullName; - [DataField("jobTitle")] - [AutoNetworkedField] - [Access(typeof(SharedIdCardSystem), typeof(SharedPdaSystem), typeof(SharedAgentIdCardSystem), Other = AccessPermissions.ReadWrite), ViewVariables(VVAccess.ReadWrite)] - public string? JobTitle; + [DataField("jobTitle")] + [AutoNetworkedField] + [Access(typeof(SharedIdCardSystem), typeof(SharedPdaSystem), typeof(SharedAgentIdCardSystem), Other = AccessPermissions.ReadWrite), ViewVariables(VVAccess.ReadWrite)] + public string? JobTitle; - /// - /// The state of the job icon rsi. - /// - [DataField("jobIcon", customTypeSerializer: typeof(PrototypeIdSerializer))] - [AutoNetworkedField] - public string JobIcon = "JobIconUnknown"; + /// + /// The state of the job icon rsi. + /// + [DataField("jobIcon", customTypeSerializer: typeof(PrototypeIdSerializer))] + [AutoNetworkedField] + public string JobIcon = "JobIconUnknown"; - } + /// + /// The unlocalized names of the departments associated with the job + /// + [DataField("jobDepartments")] + [AutoNetworkedField] + public List JobDepartments = new(); } diff --git a/Content.Shared/Medical/CrewMonitoring/CrewMonitoringShared.cs b/Content.Shared/Medical/CrewMonitoring/CrewMonitoringShared.cs index 7e5c00558b0..5b788396787 100644 --- a/Content.Shared/Medical/CrewMonitoring/CrewMonitoringShared.cs +++ b/Content.Shared/Medical/CrewMonitoring/CrewMonitoringShared.cs @@ -1,27 +1,21 @@ using Content.Shared.Medical.SuitSensor; using Robust.Shared.Serialization; -namespace Content.Shared.Medical.CrewMonitoring +namespace Content.Shared.Medical.CrewMonitoring; + +[Serializable, NetSerializable] +public enum CrewMonitoringUIKey { - [Serializable, NetSerializable] - public enum CrewMonitoringUIKey - { - Key - } + Key +} - [Serializable, NetSerializable] - public sealed class CrewMonitoringState : BoundUserInterfaceState - { - public List Sensors; - public readonly bool Snap; - public readonly float Precision; +[Serializable, NetSerializable] +public sealed class CrewMonitoringState : BoundUserInterfaceState +{ + public List Sensors; - public CrewMonitoringState(List sensors, bool snap, float precision) - { - Sensors = sensors; - Snap = snap; - Precision = precision; - } + public CrewMonitoringState(List sensors) + { + Sensors = sensors; } - } diff --git a/Content.Shared/Medical/SuitSensor/SharedSuitSensor.cs b/Content.Shared/Medical/SuitSensor/SharedSuitSensor.cs index 4e27959f897..07e0eca33bd 100644 --- a/Content.Shared/Medical/SuitSensor/SharedSuitSensor.cs +++ b/Content.Shared/Medical/SuitSensor/SharedSuitSensor.cs @@ -1,61 +1,66 @@ using Robust.Shared.Map; using Robust.Shared.Serialization; -namespace Content.Shared.Medical.SuitSensor +namespace Content.Shared.Medical.SuitSensor; + +[Serializable, NetSerializable] +public sealed class SuitSensorStatus { - [Serializable, NetSerializable] - public sealed class SuitSensorStatus + public SuitSensorStatus(NetEntity suitSensorUid, string name, string job, string jobIcon, List jobDepartments) { - public SuitSensorStatus(NetEntity suitSensorUid, string name, string job) - { - SuitSensorUid = suitSensorUid; - Name = name; - Job = job; - } - - public TimeSpan Timestamp; - public NetEntity SuitSensorUid; - public string Name; - public string Job; - public bool IsAlive; - public int? TotalDamage; - public NetCoordinates? Coordinates; + SuitSensorUid = suitSensorUid; + Name = name; + Job = job; + JobIcon = jobIcon; + JobDepartments = jobDepartments; } - [Serializable, NetSerializable] - public enum SuitSensorMode : byte - { - /// - /// Sensor doesn't send any information about owner - /// - SensorOff = 0, - - /// - /// Sensor sends only binary status (alive/dead) - /// - SensorBinary = 1, - - /// - /// Sensor sends health vitals status - /// - SensorVitals = 2, - - /// - /// Sensor sends vitals status and GPS position - /// - SensorCords = 3 - } + public TimeSpan Timestamp; + public NetEntity SuitSensorUid; + public string Name; + public string Job; + public string JobIcon; + public List JobDepartments; + public bool IsAlive; + public int? TotalDamage; + public NetCoordinates? Coordinates; +} - public static class SuitSensorConstants - { - public const string NET_NAME = "name"; - public const string NET_JOB = "job"; - public const string NET_IS_ALIVE = "alive"; - public const string NET_TOTAL_DAMAGE = "vitals"; - public const string NET_COORDINATES = "coords"; - public const string NET_SUIT_SENSOR_UID = "uid"; - - ///Used by the CrewMonitoringServerSystem to send the status of all connected suit sensors to each crew monitor - public const string NET_STATUS_COLLECTION = "suit-status-collection"; - } +[Serializable, NetSerializable] +public enum SuitSensorMode : byte +{ + /// + /// Sensor doesn't send any information about owner + /// + SensorOff = 0, + + /// + /// Sensor sends only binary status (alive/dead) + /// + SensorBinary = 1, + + /// + /// Sensor sends health vitals status + /// + SensorVitals = 2, + + /// + /// Sensor sends vitals status and GPS position + /// + SensorCords = 3 +} + +public static class SuitSensorConstants +{ + public const string NET_NAME = "name"; + public const string NET_JOB = "job"; + public const string NET_JOB_ICON = "jobIcon"; + public const string NET_JOB_DEPARTMENTS = "jobDepartments"; + public const string NET_IS_ALIVE = "alive"; + public const string NET_TOTAL_DAMAGE = "vitals"; + public const string NET_COORDINATES = "coords"; + public const string NET_SUIT_SENSOR_UID = "uid"; + + ///Used by the CrewMonitoringServerSystem to send the status of all connected suit sensors to each crew monitor + public const string NET_STATUS_COLLECTION = "suit-status-collection"; } diff --git a/Resources/Locale/en-US/medical/components/crew-monitoring-component.ftl b/Resources/Locale/en-US/medical/components/crew-monitoring-component.ftl index e089b092346..f77f334c7e2 100644 --- a/Resources/Locale/en-US/medical/components/crew-monitoring-component.ftl +++ b/Resources/Locale/en-US/medical/components/crew-monitoring-component.ftl @@ -1,6 +1,6 @@ ## UI -crew-monitoring-user-interface-title = Crew Monitoring +crew-monitoring-user-interface-title = Crew Monitoring Console crew-monitoring-user-interface-name = Name crew-monitoring-user-interface-job = Job @@ -12,3 +12,8 @@ crew-monitoring-user-interface-dead = Dead crew-monitoring-user-interface-no-info = N/A crew-monitoring-user-interface-no-server = Server not found + +crew-monitoring-user-interface-no-department = Unknown + +crew-monitoring-user-interface-flavor-left = In case of an emergancy, contact station medical staff immediately +crew-monitoring-user-interface-flavor-right = v1.7 \ No newline at end of file diff --git a/Resources/Locale/en-US/ui/navmap.ftl b/Resources/Locale/en-US/ui/navmap.ftl new file mode 100644 index 00000000000..e600e7a1f22 --- /dev/null +++ b/Resources/Locale/en-US/ui/navmap.ftl @@ -0,0 +1,3 @@ +navmap-zoom = Zoom: {$value}% +navmap-recenter = Recenter +navmap-toggle-beacons = Show departments \ No newline at end of file diff --git a/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/alive.png b/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/alive.png new file mode 100644 index 0000000000000000000000000000000000000000..69351e41b8cc2c4ad37b1ce6a13b96781f8e13d8 GIT binary patch literal 615 zcmV-t0+{`YP)EX>4Tx04R}tkv&MmKpe$iTSX}q2P23mWT;LSL`8IyDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR+@w$x=zOv5j}f427iiRM`}^3o8z(^E8Mx9~{z@H~`6Rv8 z(!xhT?>2C8-O}Ve;Bp5Tc+w?9a-;xFe?AYqpV2pEfxcTHxaRiO+{ftykfyGdZ-9eC zV6;Hl>mKj!Ztv~iGtK^f0O$a6){{2HBLDyZ24YJ`L;zC&Qvg#MXr99W000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>bD78@IBri4cT003i2L_t(2&tqgj1F4)n{~0I* zv%i-xVwFhc?D@Zf@74bme6Rk)0E~?+j*Et|ksZl|&7$y+q6{nfUz6-|YP)EX>4Tx04R}tkv&MmKpe$iTSX}q2P23mWT;LSL`8IyDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR+@w$x=zOv5j}f427iiRM`}^3o8z(^E8Mx9~{z@H~`6Rv8 z(!xhT?>2C8-O}Ve;Bp5Tc+w?9a-;xFe?AYqpV2pEfxcTHxaRiO+{ftykfyGdZ-9eC zV6;Hl>mKj!Ztv~iGtK^f0O$a6){{2HBLDyZ24YJ`L;zC&Qvg#MXr99W000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>bD79S!~&&f*w0056kL_t(I%hi;@4#Xe`L?3=R ze?EI?Z77Qy+q#ENLJ&y68Hq-QOFV^}jY@JJ_cv$I-zC^gI-heK^RWifNCY{Ob|alB zY7{l0C_*a-3CuQsuugH$ML#bgpxqxsQ`~dW7id4{*f*)AP(kV<+O%lJ3oIvNiwXSo t!rZ&?6oIbx)s>khteY!iGpUz-qaVxXimI3o`QQKm002ovPDHLkV1m_}7773W literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/dead.png b/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..c3dfe488d6c9beaf2e2fe6c6ec7f9d359a7306f5 GIT binary patch literal 615 zcmV-t0+{`YP)EX>4Tx04R}tkv&MmKpe$iTSX}q2P23mWT;LSL`8IyDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR+@w$x=zOv5j}f427iiRM`}^3o8z(^E8Mx9~{z@H~`6Rv8 z(!xhT?>2C8-O}Ve;Bp5Tc+w?9a-;xFe?AYqpV2pEfxcTHxaRiO+{ftykfyGdZ-9eC zV6;Hl>mKj!Ztv~iGtK^f0O$a6){{2HBLDyZ24YJ`L;zC&Qvg#MXr99W000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>bD78?hBr`QMp003i2L_t(2&$W`#4Zt7>L=Q)l z9o)(8U{}0;kys)rwdwofa^Ml7z@b`+4~%h2XsT9rfJO&G9eIAi5``TiXyi=;KqHsl ztWyD==z%B7&d{5%bby`6*V_Sh>&(`^cSipHrWX{AP@5sLvGD)^002ovPDHLkV1nU? B1?T_( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health0.png b/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health0.png new file mode 100644 index 0000000000000000000000000000000000000000..755c74eba5755f1b90572c005ac99f574e47d2ce GIT binary patch literal 614 zcmV-s0-61ZP)EX>4Tx04R}tkv&MmKpe$iTSX}q2P23mWT;LSL`8IyDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR+@w$x=zOv5j}f427iiRM`}^3o8z(^E8Mx9~{z@H~`6Rv8 z(!xhT?>2C8-O}Ve;Bp5Tc+w?9a-;xFe?AYqpV2pEfxcTHxaRiO+{ftykfyGdZ-9eC zV6;Hl>mKj!Ztv~iGtK^f0O$a6){{2HBLDyZ24YJ`L;zC&Qvg#MXr99W000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>bD791xDh;9b}003f1L_t(2&$W`l4S+BV1J4Z8 z6|x#5bhKs#mI*JUQX)Wt-Y@dQaU3yVwFDpWbyF%>EkPq_#KD_+)cPft%qT373%O47 zsQ1W4*fspZWNrEX>4Tx04R}tkv&MmKpe$iTSX}q2P23mWT;LSL`8IyDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR+@w$x=zOv5j}f427iiRM`}^3o8z(^E8Mx9~{z@H~`6Rv8 z(!xhT?>2C8-O}Ve;Bp5Tc+w?9a-;xFe?AYqpV2pEfxcTHxaRiO+{ftykfyGdZ-9eC zV6;Hl>mKj!Ztv~iGtK^f0O$a6){{2HBLDyZ24YJ`L;zC&Qvg#MXr99W000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>bD791K;;35_P003)AL_t(2&tqgj0zZEIU`R-{ z{?9-mSh4slBUXusSmXZ%3mE))?+cCTte<$Ny(2T*!#ig@ojh z0TTm_0nrwqyShLAKXolAT*!!GD6(ZRIc&kkM2&F92N-FcOaXfDT2*rGbpHSV002ov JPDHLkV1j?P0{Q>| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health2.png b/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health2.png new file mode 100644 index 0000000000000000000000000000000000000000..cfe54411275e856872b8f772340f079087170af7 GIT binary patch literal 611 zcmV-p0-XJcP)EX>4Tx04R}tkv&MmKpe$iTSX}q2P23mWT;LSL`8IyDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR+@w$x=zOv5j}f427iiRM`}^3o8z(^E8Mx9~{z@H~`6Rv8 z(!xhT?>2C8-O}Ve;Bp5Tc+w?9a-;xFe?AYqpV2pEfxcTHxaRiO+{ftykfyGdZ-9eC zV6;Hl>mKj!Ztv~iGtK^f0O$a6){{2HBLDyZ24YJ`L;zC&Qvg#MXr99W000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>bD790iK=r7{{003V}L_t(2&tqgj0~HYr{~0I* z9V-|ZVQfZp!!;Bb7~vQJV02&gv%Ak8spplV_1gFM^}#wm>6gb xa9V)PmG}TI^>~Ab6hLth5fcyC03)rFDFCtoGbvgAgAxD$002ovPDHLkV1m&h`Pcve literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health3.png b/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health3.png new file mode 100644 index 0000000000000000000000000000000000000000..b82f46e453c1927041be85502333822d15d914aa GIT binary patch literal 617 zcmV-v0+#)WP)EX>4Tx04R}tkv&MmKpe$iTSX}q2P23mWT;LSL`8IyDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR+@w$x=zOv5j}f427iiRM`}^3o8z(^E8Mx9~{z@H~`6Rv8 z(!xhT?>2C8-O}Ve;Bp5Tc+w?9a-;xFe?AYqpV2pEfxcTHxaRiO+{ftykfyGdZ-9eC zV6;Hl>mKj!Ztv~iGtK^f0O$a6){{2HBLDyZ24YJ`L;zC&Qvg#MXr99W000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>bD78^HPe(0nC003o4L_t(2&tqgj13fyN{~0I* zC0D*P!q|-HhMNd5!}<1yKQk~eFfbgn<;5z7O`d^)f#J-Dzi>;K2)PE?Ap66gF$_bN z#|8*mfXz@+07*VT4kD^qfXzaxT0kg>2+1?jI++3h%eXKOcu79j00000NkvXXu0mjf D_qG3@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health4.png b/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/health4.png new file mode 100644 index 0000000000000000000000000000000000000000..d371bb2a14b65963734b65d9dc1ba87a5ae42748 GIT binary patch literal 617 zcmV-v0+#)WP)EX>4Tx04R}tkv&MmKpe$iTSX}q2P23mWT;LSL`8IyDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR+@w$x=zOv5j}f427iiRM`}^3o8z(^E8Mx9~{z@H~`6Rv8 z(!xhT?>2C8-O}Ve;Bp5Tc+w?9a-;xFe?AYqpV2pEfxcTHxaRiO+{ftykfyGdZ-9eC zV6;Hl>mKj!Ztv~iGtK^f0O$a6){{2HBLDyZ24YJ`L;zC&Qvg#MXr99W000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>bD78@&1f3)iW003o4L_t(2&$W`#3BVu>1HKLlh>+~qDnLa zAevEBr+&sVVD#uNuP3O1p9YKqciqv7T0fgE{QXTI14B{4XT$3200000NkvXXu0mjf D@-qdQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/meta.json b/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/meta.json new file mode 100644 index 00000000000..e95420f02c3 --- /dev/null +++ b/Resources/Textures/Interface/Alerts/human_crew_monitoring.rsi/meta.json @@ -0,0 +1,41 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by chromiumboy, derived from https://github.com/tgstation/tgstation/commits/50689f89a40e5e7a2732a0c5fb38c787b69f7d28/icons/hud/screen_gen.dmi, ", + "size": { + "x": 24, + "y": 8 + }, + "states": [ + { + "name": "alive" + }, + { + "name": "dead" + }, + { + "name": "health0" + }, + { + "name": "health1" + }, + { + "name": "health2" + }, + { + "name": "health3" + }, + { + "name": "health4" + }, + { + "name": "critical", + "delays": [ + [ + 0.35, + 0.35 + ] + ] + } + ] +} diff --git a/Resources/Textures/Interface/NavMap/beveled_circle.png b/Resources/Textures/Interface/NavMap/beveled_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..a54a9d6221296ceee4f540a231ae712e4481d5b1 GIT binary patch literal 1365 zcmV-b1*-aqP)EX>4Tx04R}tkv&MmKpe$i(@Iq;3U(0bkfAzRC@SJ8RV;#q(pG5I!Q|2}Xws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;tBaGOirkx9)H2Z_aE2g@DIN`^{2O&nHKjq-)8 z%L?Z$&T6H`TKD8H4CJ+yG}mc{5XTY{NJ4~+8p^1^LWEY06cZ`hk9F~nI{qZNWO9|k z$gzMbR7j2={11M2YZj&^-K0Pa=y|d2k1@c%3pDGt{e5iP%@e@;3|wh#f3*S3ev)2q zYvChca2vR|Zfo)$aJd7FJn51lIg*#AP$&TJXY@@uVE7j3UvqnF?c?+T$WT|yH^9Lm zFkYnW^)B!3?dXiU0t5;G000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2j>YK1Qa(xP|->N000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0009lNkl^8 zC6{N5lxzbMX()0;g|ZD#fM{sp1)!ikAf%H}I0=r8m$bNMAW3OQ&TCm{vPudeX+7EYx%yvJ_|sT=A^-3(3~aabJK7* zq^GB+iJaiYYzI)ESG^MvIOnKTD)qa&yNzD}09XLF=h<{P=g>55yId|?698{bW`7Z# zk8=(o#QxRQl_;LT9)Qh-v|h%*7~3=qW3LFXyFhbr&QYyacZ&c!i!x`7K?ng|*LR8l zTMLXogb*O2ts=nMqC&tq2N5AjlC|kFT!`{KN0w!X<9MPEIEyq-k_2%aJ4JxUd7Bdv zlu}5N1YsB=j^oE7!0jRcvMfUsMF@fbVHn;P0j}q5E~P}0B#5F2!{HE~=Uo>8F2gWv z=XpN2*r#cVAPC_5K78MA_xt_JF#uysMp1O0rYVRBL^LKJJ%83b48zgR;d$Qq;o+g2 zC_^E{Sr7yd!{HD~k|0e}D5X9HQ8f2F4}-w~j^jMowte=?b-c2&(g}j##C6?KmLkhC zNGYL|!h6H>cjobzn0itQz_+pthmQs!rZnX1W zuLs+<|7^G0M>9=EH#axy0RE`eYTqiA3PvE)CnAIZV+?toLn(zcO%ccOINJw<0bX8S zVB7ZhPN#Epe0==!uF>q`;=)>8U9DHE)$LNLgi@(Ah8O`c#-Nl!9LEU55K$Dt_kFmo z3&(LDdcEFBywKkTQm#w9xrG3LNHb)?(QVE)-K`Ax9T#9w>y6$R;%q+tJNLO`IeM&Ez2^bY3gKI_877 literal 0 HcmV?d00001 From 975942e7eed2cbc807ce1a81fe5fce4bb6241cae Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 10 Dec 2023 00:39:55 -0500 Subject: [PATCH 33/36] Automatic changelog update --- Resources/Changelog/Changelog.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a368305c4cd..2893361a9d8 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,9 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - {message: Make the role timer tooltip look much nicer., type: Tweak} - id: 4800 - time: '2023-09-11T05:44:22.0000000+00:00' - author: Morb0 changes: - {message: Added indicator near SSD players, type: Add} @@ -2905,3 +2900,8 @@ Entries: from operating Syndicate Bombs, C4, and other timed explosives.', type: Fix} id: 5299 time: '2023-12-10T03:13:00.0000000+00:00' +- author: chromiumboy + changes: + - {message: Updated the crew monitoring console user interface, type: Tweak} + id: 5300 + time: '2023-12-10T05:38:51.0000000+00:00' From 7650a269cb509775cd01983df3035796825e2231 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 10 Dec 2023 16:49:44 +1100 Subject: [PATCH 34/36] Update Credits (#22279) Co-authored-by: PJBot --- Resources/Credits/GitHub.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index 43e7254163f..78fadae44f8 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -08A, 0x6273, 13spacemen, 20kdc, 4dplanner, 612git, 778b, aaronmell, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, adamsong, aeosynth, Aerocrux, Aexxie, Ahion, AJCM-git, AjexRose, aklos, Alainx277, AlbertSnows, Alekshhh, AlexMorgan3817, Alithsko, AlmondFlour, ALMv1, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, areitpog, Arendian, arimah, artak10t, Arteben, ArthurMousatov, AruMoon, as334, AsikKEsel, asperger-sind, astriloqua, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, benev0, BGare, bhespiritu, BingoJohnson-zz, BismarckShuffle, Bixkitts, BobdaBiscuit, BobTheSleder, brainfood1183, Bright0, brndd, BubblegumBlue, c4llv07e, CakeQ, Capnsockless, CaptainSqrBeard, Carbonhell, Carou02, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, ChilbroBaggins, chromiumboy, civilCornball, clement-or, Clyybber, ColdAutumnRain, collinlunn, ComicIronic, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, DamianX, daniel-cr, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepy, Delete69, DelleVelleD, deltanedas, DerbyX, Dezandor, DjfjdfofdjfjD, DmitriyMX, DmitriyZodiak, DocNITE, DoctorBeard, DogZeroX, dontbetank, Doru991, drongood12, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, DukeVanity, Dynexust, Easypoller, eclips_e, EEASAS, Efruit, efzapa, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, eoineoineoin, Equivocateur, Errant-4, estacaoespacialpirata, exp111, FacePluslll, Fahasor, ficcialfaint, Fiftyllama, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, Flareguy, FluffiestFloof, FluidRock, Fogapod, FoLoKe, fooberticus, forthbridge, Fortune117, freeman2651, Fromoriss, GalacticChimp, Gaxeer, gbasood, Geekyhobo, Genkail, Git-Nivrak, gituhabu, GoodWheatley, Gotimanga, greenrock64, GTRsound, gusxyz, h3half, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, HoidC, HoofedEar, hord-brayden, hsagerer, hubismal, Hugal31, Hyenh, iczero, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, Injazz, InquisitivePenguin, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, j-giebel, Jackal298, Jackrost, jacksonzck, Jackw2As, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, JoeHammad1844, joelhed, JohnGinnane, johnku1, jproads, juliangiebel, JupiterFive, JustArt1m, JustCone14, JustinTether, JustinTrotter, KaiShibaa, kalane15, kalanosh, KEEYNy, Keikiru, keronshb, KIBORG04, Kimpes, KingFroozy, kira-er, Kirillcas, Kistras, Kit0vras, Klaypexx, Kmc2000, kognise, komunre, kxvvv, lajolico, Lamrr, LankLTE, lapatison, Leander-0, Level10Cybermancer, lever1209, LightVillet, liltenhead, LittleBuilderJane, Lomcastar, LordEclipse, LudwigVonChesterfield, lvvova1, lzimann, lzk228, Macoron, MagnusCrowe, ManelNavola, matthst, Matz05, McFck, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, minism, Mirino97, mirrorcult, MishaUnity, MisterMecky, Mith-randalf, ModeratelyAware, Moneyl, moony, Morb0, Mr0maks, Myakot, Myctai, N3X15, Nails-n-Tape, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, nullarmo, Nylux, och-och, OctoRocket, OldDanceJacket, onoira, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, Phill101, PixelTheKermit, PJB3005, pofitlo, pointer-to-null, potato1234x, ProfanedBane, ProPandaBear, PrPleGoo, Psychpsyo, psykzz, PuroSlavKing, Putnam3145, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Raitononai, Rane, Ranger6012, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, remove32, RemTim, rene-descartes2021, renodubois, RiceMar1244, RIKELOLDABOSS, Rinkashikachi, Rinzii, Rockdtben, rok-povsic, rolfero, Saakra, SadAways, Samsterious, SamV522, SaphireLattice, ScalyChimp, scrato, Scribbles0, ScumbagDog, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, shaeone, SignalWalker, SirDragooon, siyengar04, Skarletto, Skrauz, Skyedra, Slava0135, Snowni, SonicHDC, SoulSloth, Soupstraw, SpaceManiac, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, SweptWasTaken, Szunti, TaralGit, TekuNut, Telyonok, TemporalOroboros, tentekal, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, ThunderBear2006, timothyteakettle, TimrodDX, Titian3, TK-A369, tkdrg, tmtmtl30, tom-leys, tomasalves8, Tomeno, tosatur, TsjipTsjip, Tunguso4ka, Tyler-IN, Tyzemol, UbaserB, UKNOWH, UnderscoreX5, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Verslebas, VigersRay, Visne, volundr-, Vordenburg, vulppine, weaversam8, Willhelm53, Wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, WTCWR68, xRiriq, Ygg01, YotaXP, youarereadingthis, zach-hill, Zandario, ZelteHonor, zerorulez, ZeWaka, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zth--, Zumorica, Zymem +08A, 0x6273, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 27alaing, 4dplanner, 612git, 778b, aaronmell, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, adamsong, Adrian16199, Aerocrux, Aexxie, Ahion, AJCM-git, AjexRose, aklos, Alainx277, AlbertSnows, Alekshhh, AlexMorgan3817, Alithsko, AlmondFlour, ALMv1, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, areitpog, Arendian, arimah, artak10t, Arteben, ArthurMousatov, AruMoon, as334, AsikKEsel, asperger-sind, astriloqua, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, benev0, BGare, bhespiritu, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Bloody2372, Boaz1111, BobdaBiscuit, BobTheSleder, brainfood1183, Brandon-Huu, Bright0, brndd, BubblegumBlue, c0rigin, c4llv07e, CakeQ, CaptainSqrBeard, Carbonhell, Carou02, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, ChrisThirtle, chromiumboy, Chronophylos, Chubbygummibear, civilCornball, clement-or, Clyybber, CMDR-Piboy314, Cohnway, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, DamianX, DangerRevolution, daniel-cr, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepy, Delete69, DelleVelleD, deltanedas, DerbyX, Dezandor, DmitriyMX, DoctorBeard, DogZeroX, dontbetank, Doru991, DoubleRiceEddiedd, drongood12, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Easypoller, eclips_e, EEASAS, Efruit, efzapa, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, Errant-4, estacaoespacialpirata, exp111, Fahasor, ficcialfaint, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, forthbridge, Fortune117, freeman2651, Fromoriss, GalacticChimp, gbasood, Geekyhobo, Genkail, Git-Nivrak, gituhabu, GoodWheatley, Gotimanga, graevy, gusxyz, h3half, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, HoofedEar, hord-brayden, hubismal, Hugal31, Hyenh, iacore, IamVelcroboy, iczero, igorsaux, ike709, illersaver, Illiux, Ilya246, Injazz, InquisitivePenguin, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, j-giebel, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, joelhed, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTether, JustinTrotter, KaiShibaa, kalane15, kalanosh, KEEYNy, Keikiru, Kelrak, kerisargit, keronshb, KIBORG04, KingFroozy, kira-er, Kit0vras, Klaypexx, Kmc2000, komunre, kxvvv, lajolico, Lamrr, LankLTE, laok233, lapatison, Leander-0, Level10Cybermancer, lever1209, LightVillet, liltenhead, LittleBuilderJane, Lomcastar, LordEclipse, LudwigVonChesterfield, Lukasz825700516, luringens, lvvova1, lzimann, lzk228, M3739, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, matthst, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Mirino97, mirrorcult, MishaUnity, MisterMecky, Mith-randalf, ModeratelyAware, Moneyl, moony, Morb0, Mr0maks, Myakot, Myctai, N3X15, Nails-n-Tape, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, Nylux, och-och, OctoRocket, OldDanceJacket, onoira, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, pewter-wiz, Phantom-Lily, Phill101, PixelTheKermit, PJB3005, pofitlo, pointer-to-null, potato1234x, ProfanedBane, ProPandaBear, PrPleGoo, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, Putnam3145, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainfey, Rane, Ranger6012, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, remove32, RemTim, rene-descartes2021, renodubois, RiceMar1244, RieBi, RIKELOLDABOSS, Rinkashikachi, Rockdtben, rok-povsic, rolfero, Saakra, SadAways, Samsterious, SamV522, SaphireLattice, ScalyChimp, scrato, Scribbles0, ScumbagDog, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, shaeone, SignalWalker, Simyon264, SirDragooon, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, Slava0135, Snowni, SonicHDC, SoulSloth, SpaceManiac, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, Subversionary, SweptWasTaken, Szunti, TaralGit, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, ThunderBear2006, timothyteakettle, TimrodDX, Titian3, TK-A369, tkdrg, tmtmtl30, tom-leys, tomasalves8, Tomeno, tosatur, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, UnderscoreX5, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Verslebas, VigersRay, Visne, volundr-, Vordenburg, vulppine, waylon531, weaversam8, Willhelm53, Wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, WTCWR68, xRiriq, Ygg01, YotaXP, youarereadingthis, zach-hill, Zandario, ZelteHonor, zerorulez, ZeWaka, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zth--, Zumorica, Zymem From 32b4c8510507fa7ebc2afcdb4e6a757e9fa9362a Mon Sep 17 00:00:00 2001 From: Morb0 <14136326+Morb0@users.noreply.github.com> Date: Sun, 10 Dec 2023 10:54:29 +0300 Subject: [PATCH 35/36] Add tts multiplier value --- Content.Client/Audio/ContentAudioSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Client/Audio/ContentAudioSystem.cs b/Content.Client/Audio/ContentAudioSystem.cs index 2dc950ee265..b9af3ca465e 100644 --- a/Content.Client/Audio/ContentAudioSystem.cs +++ b/Content.Client/Audio/ContentAudioSystem.cs @@ -31,6 +31,7 @@ public sealed partial class ContentAudioSystem : SharedContentAudioSystem public const float AmbienceMultiplier = 3f; public const float AmbientMusicMultiplier = 3f; public const float LobbyMultiplier = 3f; + public const float TtsMultiplier = 3f; // Corvax-TTS public override void Initialize() { From 5ecee65206417a414c6b55056a4b80f1bc2af42b Mon Sep 17 00:00:00 2001 From: Morb0 <14136326+Morb0@users.noreply.github.com> Date: Sun, 10 Dec 2023 11:33:31 +0300 Subject: [PATCH 36/36] Update locale --- .../prototypes/entities/clothing/uniforms/jumpsuits.ftl | 2 ++ .../objects/devices/circuitboards/machine/production.ftl | 2 ++ .../en-US/ss14-ru/prototypes/entities/objects/misc/tiles.ftl | 2 ++ .../entities/structures/machines/anomaly_equipment.ftl | 4 +++- Resources/Locale/ru-RU/escape-menu/ui/options-menu.ftl | 2 ++ .../ru-RU/medical/components/crew-monitoring-component.ftl | 3 +++ .../prototypes/entities/clothing/uniforms/jumpsuits.ftl | 2 ++ .../ru-RU/ss14-ru/prototypes/entities/mobs/player/narsie.ftl | 2 +- .../objects/devices/circuitboards/machine/production.ftl | 2 ++ .../ru-RU/ss14-ru/prototypes/entities/objects/misc/tiles.ftl | 2 ++ .../entities/structures/machines/anomaly_equipment.ftl | 2 ++ Resources/Locale/ru-RU/tiles/tiles.ftl | 1 + Resources/Locale/ru-RU/ui/navmap.ftl | 3 +++ 13 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 Resources/Locale/ru-RU/ui/navmap.ftl diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/uniforms/jumpsuits.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/uniforms/jumpsuits.ftl index a755fc377ec..69e7a8d38e8 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/uniforms/jumpsuits.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/uniforms/jumpsuits.ftl @@ -239,3 +239,5 @@ ent-ClothingUniformJumpsuitCasualPurple = casual purple jumpsuit .desc = A loose worn purple shirt with a grey pants, perfect for someone looking to relax. ent-ClothingUniformJumpsuitCasualRed = casual red jumpsuit .desc = A loose worn red shirt with a grey pants, perfect for someone looking to relax. +ent-ClothingUniformJumpsuitFamilyGuy = familiar garbs + .desc = Makes you remember the time you did something funny. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl index e1d20f4d7a4..ccf8f80e41a 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl @@ -26,6 +26,8 @@ ent-TraversalDistorterMachineCircuitboard = traversal distorter machine board .desc = A machine printed circuit board for a traversal distorter. ent-AnomalyVesselCircuitboard = anomaly vessel machine board .desc = A machine printed circuit board for an anomaly vessel. +ent-AnomalyVesselExperimentalCircuitboard = experimental anomaly vessel machine board + .desc = A machine printed circuit board for an experimental anomaly vessel. ent-AnomalySynchronizerCircuitboard = anomaly synchronizer machine board .desc = A machine printed circuit board for an anomaly synchronizer. ent-APECircuitboard = A.P.E. machine board diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/misc/tiles.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/misc/tiles.ftl index 5f3597f4d2f..31ed561975b 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/misc/tiles.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/misc/tiles.ftl @@ -30,6 +30,8 @@ ent-FloorTileItemRockVault = rock vault tile .desc = { ent-FloorTileItemBase.desc } ent-FloorTileItemBlue = blue tile .desc = { ent-FloorTileItemBase.desc } +ent-FloorTileItemLime = lime tile + .desc = { ent-FloorTileItemBase.desc } ent-FloorTileItemMining = mining tile .desc = { ent-FloorTileItemBase.desc } ent-FloorTileItemMiningDark = dark mining tile diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/machines/anomaly_equipment.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/machines/anomaly_equipment.ftl index 60576addbba..c3d58c26866 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/machines/anomaly_equipment.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/machines/anomaly_equipment.ftl @@ -1,5 +1,7 @@ ent-MachineAnomalyVessel = anomaly vessel - .desc = A container able to harness a scan of an anomaly and turn it into research points. + .desc = A container able to harness a scan of an anomaly and turn it into research data. +ent-MachineAnomalyVesselExperimental = experimental anomaly vessel + .desc = An advanced anomaly vessel capable of greater research potential at the cost of increased volatility and low-level radioactive decay into the environment. ent-MachineAPE = A.P.E. .desc = An Anomalous Particle Emitter, capable of shooting out unstable particles which can interface with anomalies. ent-MachineAnomalyGenerator = anomaly generator diff --git a/Resources/Locale/ru-RU/escape-menu/ui/options-menu.ftl b/Resources/Locale/ru-RU/escape-menu/ui/options-menu.ftl index 1982ed05344..53b01e591b6 100644 --- a/Resources/Locale/ru-RU/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/ru-RU/escape-menu/ui/options-menu.ftl @@ -112,6 +112,8 @@ ui-options-function-rotate-stored-item = Повернуть хранящийся ui-options-static-storage-ui = Статичный интерфейс хранилища ui-options-function-smart-equip-backpack = Умная экипировка в рюкзак ui-options-function-smart-equip-belt = Умная экипировка на пояс +ui-options-function-open-backpack = Open backpack +ui-options-function-open-belt = Open belt ui-options-function-throw-item-in-hand = Бросить предмет ui-options-function-try-pull-object = Тянуть объект ui-options-function-move-pulled-object = Тянуть объект в сторону diff --git a/Resources/Locale/ru-RU/medical/components/crew-monitoring-component.ftl b/Resources/Locale/ru-RU/medical/components/crew-monitoring-component.ftl index 275253b800a..dbbb4a4a92f 100644 --- a/Resources/Locale/ru-RU/medical/components/crew-monitoring-component.ftl +++ b/Resources/Locale/ru-RU/medical/components/crew-monitoring-component.ftl @@ -9,3 +9,6 @@ crew-monitoring-user-interface-alive = Жив crew-monitoring-user-interface-dead = Мёртв crew-monitoring-user-interface-no-info = Н/Д crew-monitoring-user-interface-no-server = Сервер не найден +crew-monitoring-user-interface-no-department = Unknown +crew-monitoring-user-interface-flavor-left = In case of an emergancy, contact station medical staff immediately +crew-monitoring-user-interface-flavor-right = v1.7 diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/uniforms/jumpsuits.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/uniforms/jumpsuits.ftl index b815352326a..469cbc4dbb2 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/uniforms/jumpsuits.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/uniforms/jumpsuits.ftl @@ -239,3 +239,5 @@ ent-ClothingUniformJumpsuitCasualPurple = повседневный фиолет .desc = Свободная потёртая фиолетовая рубашка с серыми штанами - идеальный вариант для тех, кто хочет расслабиться. ent-ClothingUniformJumpsuitCasualRed = повседневный красный комбинезон .desc = Свободная потёртая красная рубашка с серыми штанами - идеальный вариант для тех, кто хочет расслабиться. +ent-ClothingUniformJumpsuitFamilyGuy = familiar garbs + .desc = Makes you remember the time you did something funny. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/player/narsie.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/player/narsie.ftl index e64a4da2bc7..9a832013657 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/player/narsie.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/player/narsie.ftl @@ -4,4 +4,4 @@ ent-MobNarsieSpawn = { ent-MobNarsieBase } .suffix = Спавн .desc = { ent-MobNarsieBase.desc } ent-MobNarsie = { ent-MobNarsieBase } - .desc = { ent-MobNarsieBase.desc } + .desc = { ent-MobNarsieBase.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl index acbfc026713..53aad5e7d2e 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/circuitboards/machine/production.ftl @@ -26,6 +26,8 @@ ent-TraversalDistorterMachineCircuitboard = исказитель обхода ( .desc = Печатная плата для исказителя обхода. ent-AnomalyVesselCircuitboard = сосуд аномалии (машинная плата) .desc = Печатная плата для сосуда аномалии. +ent-AnomalyVesselExperimentalCircuitboard = experimental anomaly vessel machine board + .desc = A machine printed circuit board for an experimental anomaly vessel. ent-AnomalySynchronizerCircuitboard = синхронизатор аномалий (машинная плата) .desc = Печатная плата для синхронизатора аномалий. ent-APECircuitboard = М.А.К.А.К. (машинная плата) diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/misc/tiles.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/misc/tiles.ftl index df4fe21baf3..f29d07df720 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/misc/tiles.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/misc/tiles.ftl @@ -30,6 +30,8 @@ ent-FloorTileItemRockVault = каменная плитка хранилища .desc = { ent-FloorTileItemBase.desc } ent-FloorTileItemBlue = голубая плитка .desc = { ent-FloorTileItemBase.desc } +ent-FloorTileItemLime = lime tile + .desc = { ent-FloorTileItemBase.desc } ent-FloorTileItemMining = шахтёрская плитка .desc = { ent-FloorTileItemBase.desc } ent-FloorTileItemMiningDark = тёмная шахтёрская плитка diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/anomaly_equipment.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/anomaly_equipment.ftl index ff99f83380d..fffdfaa72ca 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/anomaly_equipment.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/anomaly_equipment.ftl @@ -1,5 +1,7 @@ ent-MachineAnomalyVessel = сосуд аномалии .desc = Контейнер, способный проводить сканирование аномалии и превращать её в очки исследований. +ent-MachineAnomalyVesselExperimental = experimental anomaly vessel + .desc = An advanced anomaly vessel capable of greater research potential at the cost of increased volatility and low-level radioactive decay into the environment. ent-MachineAPE = М.А.К.А.К. .desc = Мобильный Аномальный Кинетический Акселератор - эмиттер, способный излучать нестабильные частицы, которые взаимодействуют с аномалиями. ent-MachineAnomalyGenerator = генератор аномалий diff --git a/Resources/Locale/ru-RU/tiles/tiles.ftl b/Resources/Locale/ru-RU/tiles/tiles.ftl index 7c04574d41d..3e27ceb0bd3 100644 --- a/Resources/Locale/ru-RU/tiles/tiles.ftl +++ b/Resources/Locale/ru-RU/tiles/tiles.ftl @@ -49,6 +49,7 @@ tiles-mining-dark-tile = тёмная шахтёрская плитка tiles-mining-light-tile = светлая шахтёрская плитка tiles-freezer = морозильник tiles-showroom-floor = пол выставочного зала +tiles-lime-floor = lime floor tiles-hydro-floor = гидро пол tiles-bar-floor = барный пол tiles-clown-floor = клоунский пол diff --git a/Resources/Locale/ru-RU/ui/navmap.ftl b/Resources/Locale/ru-RU/ui/navmap.ftl new file mode 100644 index 00000000000..af1d84a95fb --- /dev/null +++ b/Resources/Locale/ru-RU/ui/navmap.ftl @@ -0,0 +1,3 @@ +navmap-zoom = Zoom: { $value }% +navmap-recenter = Recenter +navmap-toggle-beacons = Show departments