From f8d533465bfa92f4e4776bdb105fbdbbdf94ed9c Mon Sep 17 00:00:00 2001 From: David Kotnik Date: Sat, 27 Dec 2025 04:04:24 +0100 Subject: [PATCH] nalaganje tiled mape. ozadje ni OK. --- SESSION_LOG_2025_12_27.md | 45 +- assets/maps/NovaFarma.json | 577 ++++++-- assets/maps/kai_character.tsx | 4 + assets/maps/tree_blue.tsx | 4 + novafarma.tiled-session | 45 +- scripts/generate_128_map.py | 179 +++ src/entities/Player.js | 15 +- src/scenes/GameScene.js | 1955 +++++++++++++++------------- src/scenes/PreloadScene.js | 3 +- src/systems/Flat2DTerrainSystem.js | 85 ++ src/systems/PathfindingSystem.js | 60 +- 11 files changed, 1891 insertions(+), 1081 deletions(-) create mode 100644 assets/maps/kai_character.tsx create mode 100644 assets/maps/tree_blue.tsx create mode 100644 scripts/generate_128_map.py diff --git a/SESSION_LOG_2025_12_27.md b/SESSION_LOG_2025_12_27.md index 77a502b15..7744886ed 100644 --- a/SESSION_LOG_2025_12_27.md +++ b/SESSION_LOG_2025_12_27.md @@ -1,45 +1,52 @@ # Dnevnik Seje - 27. December 2025 (Zgodaj Zjutraj) ## 📌 Glavni Dosežki -Danes smo uspešno integrirali AI glasovni sistem (VibeVoice) v igro "Dolina Smrti" in pripravili teren za lasten level-design. +Danes smo uspešno integrirali AI glasovni sistem (VibeVoice) v igro "Dolina Smrti" in vzpostavili delujoč sistem za level-design s Tiled urejevalnikom. -### 1. VibeVoice (AI Glasovi) +### 1. VibeVoice (AI Glasovi) 🗣️ * **Integriran TTS Sistem:** Uspešno smo zagnali Microsoft VibeVoice na tvojem Macu (Apple Silicon/MPS). * **Batch Generator:** Ustvarili smo skripto `generate_game_dialogue.py`, ki: * Prebere dialoge iz JSON datoteke (`prologue.json`). * Generira `.wav` datoteke za vsak stavek. - * **NOVO:** Ima "Resume" funkcijo (preskoči že narejene) in interaktivni način ("Povozi? y/N"). + * **Pametno Generiranje:** Ima "Resume" funkcijo in interaktivni vprašalnik ("Regenerate? y/N"), da ne povoziš pomotoma že dobrih posnetkov. * **Prologue Integracija:** Igra zdaj bere dialoge iz JSON-a in predvaja generirane zvoke (Narrator, Ana, Kai) sinhronizirano s tekstom. -### 2. Tiled Map Editor -* **Reset Mape:** Resetirali smo `NovaFarma.tmx` na čisto 8x8 mapo (32x32 tiles). -* **Tiled Test Mode:** Konfigurirali smo igro, da se zažene direktno v `TiledTestScene`, da lahko hitro vidiš svoje spremembe. -* **Blue Screen Fix:** Rešili smo težavo z modrim ekranom z ustvarjanjem (placeholder) `NovaFarma.json` datoteke, ki jo Phaser potrebuje za zagon. +### 2. Tiled Map Editor 🗺️ +* **Reset Mape:** Pripravili smo čisto osnovo: `NovaFarma.tmx` (8x8, 32x32 tiles) z vsemi potrebnimi tileseti. +* **Popravek "Blue Screen" & Crash:** + * Ugotovili smo, da Phaser potrebuje **JSON** format (ne TMX). + * **Rešitev:** Tiled export mora imeti **"Embed Tilesets"** vklopljeno, da igra ne javlja napak pri nalaganju. + * Ustvaril sem delujočo `NovaFarma.json`, ki prepreči rušenje igre. +* **Game Flow:** Po testiranju smo vrnili igro v normalno stanje (Loading -> Main Menu -> Game), tako da vse deluje kot mora. -### 3. Git & Organizacija -* Vsi koraki so shranjeni v verzioniranje (git commit). -* Projekt je čist in pripravljen za naslednjo fazo: **Risanje tvoje kmetije!** +### 3. Git & Organizacija 💾 +* Vse spremembe (kode, skripte, zvoki, mape) so varno shranjene v git repozitorij. +* Projekt je čist in pripravljen na kreativno delo. ## 🛠️ Navodila za Delo -### Kako Generirati Zvoke? +### A) Kako Generirati Zvoke? 1. Uredi tekst v `assets/dialogue/prologue.json`. -2. Poženi skripto: +2. Poženi generator: ```bash cd ai_voice_gen/VibeVoice_Apple/VibeVoice python generate_game_dialogue.py --json_file ../../../assets/dialogue/prologue.json --output_dir ../../../assets/audio/voiceover/prologue ``` -3. Če datoteka že obstaja, te vpraša: "Regenerate? (y/N)". +3. Sledi navodilom na ekranu (y/N). -### Kako Urejati Mapo? +### B) Kako Urejati Mapo? 1. Odpri `assets/maps/NovaFarma.tmx` v **Tiledu**. 2. Riši s tileseti (Ground, Obstacles, Buildings...). -3. **POMEMBNO:** Vedno naredi **File > Export As... > JSON** (`NovaFarma.json`), da se spremembe vidijo v igri! +3. **KLJUČNO:** Za shranjevanje v igro uporabi **File > Export As...** + * Izberi format: **JSON map files (*.json)**. + * Ime: **`NovaFarma.json`**. + * Povozi obstoječo datoteko. + * Če vpraša za nastavitve: "Embed Tilesets" = **YES**. ### Kaj Naprej? -* Nariši svojo sanjsko kmetijo v Tiledu. -* Dodaj dialoge za druge scene (npr. srečanje z zombijem). -* Testiraj igro! +* Nariši svojo prvo pravo mapo v Tiledu. +* Dodaj nove dialoge (npr. srečanje z zombijem) v JSON. +* Uživaj v igranju! --- -*Zapisal: Antigravity AI, 27.12.2025 ob 02:12* +*Zapisal: Antigravity AI, 27.12.2025 ob 02:22* diff --git a/assets/maps/NovaFarma.json b/assets/maps/NovaFarma.json index 5d1340693..ae331eb74 100644 --- a/assets/maps/NovaFarma.json +++ b/assets/maps/NovaFarma.json @@ -1,109 +1,474 @@ -{ - "compressionlevel": -1, - "height": 8, - "infinite": false, - "layers": [ +{ "compressionlevel":-1, + "height":128, + "infinite":false, + "layers":[ { - "data": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ], - "height": 8, - "id": 1, - "name": "Ground", - "opacity": 1, - "type": "tilelayer", - "visible": true, - "width": 8, - "x": 0, - "y": 0 - } - ], - "nextlayerid": 2, - "nextobjectid": 1, - "orientation": "orthogonal", - "renderorder": "right-down", - "tiledversion": "1.11.2", - "tileheight": 32, - "tilesets": [ + "data":[8, 30, 14, 15, 31, 28, 31, 32, 16, 23, 7, 8, 30, 4, 4, 23, 12, 16, 31, 28, 24, 20, 31, 23, 14, 28, 13, 4, 28, 12, 23, 24, 15, 14, 8, 5, 20, 22, 22, 30, 23, 30, 12, 24, 28, 20, 15, 14, 30, 21, 21, 4, 20, 4, 29, 15, 29, 4, 15, 21, 6, 6, 20, 13, 15, 32, 30, 12, 20, 24, 22, 20, 23, 16, 31, 31, 31, 4, 4, 23, 28, 7, 32, 13, 4, 20, 15, 16, 23, 22, 12, 20, 32, 12, 16, 5, 8, 16, 22, 22, 32, 13, 8, 32, 6, 30, 15, 21, 4, 15, 5, 5, 32, 15, 29, 31, 30, 22, 32, 22, 20, 23, 29, 6, 21, 7, 13, 8, + 31, 4, 15, 23, 8, 6, 31, 20, 29, 30, 28, 6, 29, 13, 20, 13, 16, 8, 29, 22, 16, 16, 8, 32, 22, 14, 16, 8, 6, 21, 13, 16, 29, 32, 22, 13, 23, 12, 12, 6, 24, 8, 32, 28, 31, 20, 6, 13, 12, 6, 29, 14, 8, 22, 16, 21, 23, 14, 6, 5, 24, 28, 23, 20, 20, 15, 14, 22, 32, 22, 7, 30, 32, 23, 29, 12, 29, 13, 32, 30, 23, 24, 6, 7, 5, 13, 30, 5, 8, 28, 5, 29, 20, 7, 8, 12, 7, 4, 16, 15, 12, 8, 14, 4, 20, 20, 22, 22, 15, 21, 12, 29, 22, 31, 16, 22, 13, 28, 16, 7, 6, 15, 7, 16, 32, 31, 14, 28, + 7, 14, 28, 16, 23, 20, 23, 15, 31, 16, 4, 23, 28, 15, 5, 16, 21, 16, 29, 23, 22, 7, 30, 32, 4, 23, 6, 12, 15, 29, 28, 28, 14, 21, 14, 4, 30, 24, 6, 28, 29, 29, 14, 20, 15, 16, 6, 23, 12, 24, 31, 8, 31, 12, 8, 13, 14, 24, 31, 12, 5, 15, 15, 28, 30, 22, 7, 13, 8, 6, 22, 29, 7, 23, 21, 23, 6, 7, 21, 16, 31, 14, 14, 12, 8, 12, 20, 6, 24, 30, 8, 7, 21, 13, 6, 13, 6, 30, 31, 22, 23, 21, 15, 16, 21, 6, 29, 12, 21, 4, 8, 7, 23, 13, 21, 21, 13, 20, 28, 14, 6, 30, 20, 32, 32, 4, 32, 31, + 21, 30, 28, 22, 30, 30, 8, 24, 16, 5, 21, 21, 30, 14, 6, 24, 30, 7, 12, 4, 23, 4, 29, 22, 5, 24, 31, 31, 7, 20, 4, 23, 23, 13, 16, 8, 12, 12, 14, 6, 5, 16, 12, 8, 14, 23, 24, 6, 30, 5, 14, 5, 6, 20, 14, 20, 12, 16, 14, 23, 12, 20, 15, 15, 12, 4, 24, 5, 4, 20, 24, 32, 32, 7, 23, 30, 13, 28, 28, 28, 22, 13, 22, 15, 6, 30, 5, 20, 8, 23, 12, 16, 23, 30, 14, 16, 16, 30, 28, 31, 22, 15, 22, 14, 14, 5, 15, 7, 20, 30, 32, 7, 29, 7, 6, 22, 15, 28, 21, 12, 6, 7, 4, 12, 14, 30, 28, 23, + 5, 15, 23, 4, 23, 20, 8, 15, 7, 6, 22, 15, 20, 30, 28, 24, 32, 12, 12, 30, 29, 14, 29, 6, 30, 21, 20, 32, 6, 23, 7, 28, 6, 28, 5, 20, 13, 22, 29, 32, 15, 4, 14, 12, 12, 22, 6, 29, 5, 16, 32, 21, 24, 32, 22, 20, 31, 28, 30, 16, 29, 29, 24, 22, 6, 6, 29, 32, 15, 29, 32, 6, 22, 30, 28, 29, 16, 20, 30, 14, 7, 5, 21, 29, 16, 7, 14, 16, 15, 13, 29, 16, 14, 29, 13, 24, 31, 22, 4, 32, 13, 23, 8, 12, 5, 15, 20, 8, 32, 16, 28, 32, 5, 20, 21, 23, 21, 4, 20, 23, 24, 4, 15, 16, 7, 24, 6, 22, + 24, 24, 31, 6, 22, 12, 28, 30, 8, 29, 8, 21, 22, 12, 12, 24, 29, 30, 15, 13, 31, 30, 29, 13, 5, 20, 32, 5, 29, 28, 30, 24, 23, 21, 16, 24, 8, 14, 14, 30, 21, 20, 8, 5, 6, 6, 24, 31, 16, 32, 30, 28, 31, 7, 7, 14, 13, 7, 7, 13, 30, 7, 7, 5, 21, 5, 16, 7, 20, 31, 12, 5, 21, 29, 7, 28, 22, 21, 6, 24, 8, 12, 29, 15, 29, 6, 4, 5, 15, 7, 24, 12, 6, 22, 28, 23, 6, 13, 30, 32, 32, 30, 14, 30, 8, 8, 6, 5, 13, 16, 20, 30, 29, 31, 20, 29, 16, 8, 28, 29, 14, 28, 31, 29, 24, 5, 13, 8, + 5, 23, 8, 7, 5, 28, 22, 15, 30, 32, 8, 23, 22, 23, 23, 32, 23, 28, 12, 8, 5, 7, 12, 14, 6, 30, 13, 16, 5, 32, 31, 24, 14, 14, 7, 12, 4, 7, 14, 23, 12, 13, 29, 13, 29, 5, 22, 29, 31, 31, 12, 28, 15, 4, 21, 15, 22, 32, 8, 12, 30, 15, 4, 12, 22, 23, 14, 12, 12, 14, 31, 22, 22, 4, 20, 5, 16, 20, 6, 4, 28, 7, 20, 29, 20, 21, 16, 4, 22, 4, 29, 7, 14, 6, 32, 6, 24, 28, 12, 23, 8, 30, 12, 6, 16, 15, 15, 21, 6, 6, 5, 5, 23, 32, 4, 4, 32, 15, 31, 6, 31, 32, 4, 6, 13, 31, 23, 24, + 4, 15, 8, 6, 23, 20, 24, 6, 13, 8, 14, 24, 30, 31, 24, 22, 6, 28, 23, 32, 12, 5, 20, 14, 15, 15, 12, 29, 6, 4, 24, 30, 13, 6, 23, 24, 20, 22, 31, 24, 30, 8, 7, 8, 15, 14, 16, 21, 23, 12, 23, 15, 16, 4, 4, 21, 15, 30, 4, 32, 7, 23, 7, 30, 23, 16, 5, 31, 24, 4, 28, 15, 8, 21, 15, 29, 29, 16, 15, 15, 13, 15, 13, 15, 12, 4, 24, 7, 7, 13, 31, 21, 14, 31, 30, 12, 16, 20, 24, 16, 12, 8, 24, 12, 22, 14, 14, 22, 29, 21, 15, 24, 5, 20, 30, 24, 12, 14, 5, 16, 16, 6, 15, 14, 5, 32, 31, 31, + 29, 6, 29, 29, 31, 21, 6, 5, 6, 4, 15, 8, 4, 21, 22, 5, 23, 5, 30, 22, 23, 14, 31, 32, 4, 12, 15, 21, 21, 4, 4, 32, 22, 31, 14, 32, 13, 16, 12, 30, 20, 4, 5, 16, 16, 29, 28, 6, 31, 32, 22, 4, 30, 5, 21, 29, 16, 23, 8, 6, 30, 6, 16, 30, 20, 16, 28, 4, 31, 4, 30, 28, 28, 12, 14, 22, 15, 15, 5, 12, 13, 31, 21, 16, 20, 30, 21, 24, 15, 29, 13, 24, 28, 13, 16, 24, 16, 28, 12, 13, 13, 8, 16, 20, 4, 6, 15, 30, 6, 21, 31, 24, 16, 32, 13, 7, 6, 31, 5, 20, 29, 30, 12, 7, 16, 5, 24, 6, + 14, 6, 23, 13, 4, 15, 7, 5, 8, 13, 5, 8, 4, 8, 5, 15, 24, 32, 5, 21, 7, 24, 16, 28, 13, 21, 16, 24, 16, 13, 14, 22, 5, 12, 16, 5, 16, 12, 23, 29, 5, 23, 20, 23, 7, 23, 13, 22, 7, 32, 16, 30, 29, 30, 31, 4, 8, 6, 16, 14, 20, 22, 22, 4, 5, 30, 4, 23, 4, 15, 4, 14, 7, 7, 12, 14, 6, 8, 12, 14, 24, 14, 23, 32, 5, 6, 31, 20, 29, 24, 22, 20, 23, 24, 7, 14, 13, 13, 8, 31, 15, 6, 20, 13, 30, 22, 30, 31, 31, 13, 30, 24, 29, 7, 6, 22, 14, 12, 28, 31, 22, 30, 31, 31, 13, 7, 30, 7, + 5, 8, 16, 31, 6, 8, 24, 14, 28, 31, 24, 28, 21, 16, 15, 30, 12, 12, 4, 13, 4, 13, 23, 16, 13, 7, 28, 30, 4, 4, 28, 22, 20, 8, 6, 23, 21, 32, 24, 31, 8, 14, 4, 23, 4, 30, 32, 21, 8, 14, 30, 4, 20, 21, 12, 8, 30, 32, 4, 21, 14, 22, 21, 13, 8, 12, 30, 14, 31, 21, 32, 7, 30, 29, 29, 5, 24, 21, 20, 30, 15, 15, 16, 28, 8, 14, 21, 21, 24, 31, 15, 12, 23, 22, 15, 14, 29, 7, 24, 30, 14, 21, 15, 30, 13, 21, 4, 5, 32, 32, 16, 12, 23, 4, 13, 20, 14, 15, 30, 7, 15, 7, 32, 20, 23, 8, 15, 15, + 32, 30, 22, 21, 20, 7, 6, 4, 30, 28, 32, 12, 15, 15, 29, 13, 23, 21, 21, 29, 21, 16, 6, 14, 15, 23, 7, 8, 30, 16, 29, 14, 13, 20, 5, 7, 5, 31, 20, 16, 31, 31, 22, 28, 32, 6, 14, 5, 4, 5, 7, 4, 23, 14, 5, 32, 30, 6, 30, 14, 14, 32, 24, 31, 15, 31, 20, 4, 21, 23, 21, 15, 7, 22, 24, 15, 23, 4, 16, 6, 30, 29, 30, 21, 29, 6, 14, 32, 32, 7, 22, 4, 15, 30, 12, 20, 28, 14, 32, 16, 7, 16, 15, 14, 15, 31, 12, 21, 15, 24, 4, 29, 22, 16, 13, 7, 8, 13, 23, 30, 16, 14, 24, 8, 14, 8, 8, 13, + 6, 7, 24, 4, 30, 30, 32, 12, 7, 16, 20, 6, 23, 14, 13, 20, 15, 32, 30, 31, 23, 30, 8, 8, 31, 12, 24, 20, 29, 20, 15, 14, 13, 30, 7, 13, 5, 12, 6, 31, 13, 14, 16, 22, 21, 15, 21, 30, 32, 22, 30, 29, 14, 5, 8, 6, 21, 12, 7, 4, 22, 14, 13, 15, 23, 16, 4, 24, 32, 4, 5, 28, 29, 12, 28, 32, 21, 22, 4, 23, 13, 32, 32, 28, 15, 7, 16, 28, 8, 12, 29, 28, 5, 15, 20, 20, 16, 21, 13, 31, 16, 16, 28, 24, 15, 23, 24, 30, 8, 15, 16, 15, 29, 21, 31, 29, 7, 22, 4, 20, 23, 12, 23, 15, 8, 13, 5, 23, + 8, 22, 30, 16, 14, 14, 21, 29, 7, 7, 22, 31, 16, 5, 14, 8, 16, 15, 8, 20, 23, 20, 16, 16, 31, 23, 13, 13, 13, 21, 15, 5, 20, 22, 24, 21, 15, 12, 30, 8, 12, 20, 5, 32, 6, 28, 6, 24, 20, 4, 4, 15, 30, 29, 15, 31, 23, 32, 22, 5, 12, 23, 5, 8, 12, 12, 20, 23, 8, 32, 14, 7, 13, 7, 28, 29, 32, 13, 28, 6, 5, 30, 8, 21, 5, 8, 23, 8, 20, 24, 16, 14, 30, 21, 12, 30, 5, 4, 23, 21, 32, 22, 4, 13, 13, 21, 16, 15, 13, 21, 29, 15, 6, 12, 20, 5, 24, 6, 7, 31, 5, 24, 6, 6, 24, 15, 15, 23, + 4, 7, 22, 14, 21, 30, 7, 15, 21, 23, 32, 14, 22, 22, 21, 24, 24, 24, 24, 21, 5, 7, 13, 30, 28, 8, 5, 29, 20, 28, 13, 7, 30, 16, 7, 23, 29, 30, 22, 8, 23, 13, 14, 16, 29, 20, 15, 14, 13, 12, 13, 20, 22, 29, 12, 7, 29, 4, 13, 14, 24, 7, 15, 4, 6, 24, 23, 31, 28, 4, 20, 13, 22, 13, 21, 12, 13, 31, 29, 4, 6, 15, 30, 29, 31, 14, 13, 32, 6, 16, 21, 14, 30, 22, 5, 6, 23, 22, 20, 29, 8, 15, 7, 16, 12, 24, 5, 24, 8, 6, 13, 20, 20, 29, 24, 20, 24, 29, 7, 24, 7, 20, 6, 8, 12, 15, 5, 23, + 31, 7, 14, 7, 31, 13, 21, 16, 20, 28, 4, 8, 29, 16, 22, 21, 29, 32, 30, 31, 14, 30, 31, 5, 6, 20, 4, 6, 16, 15, 30, 32, 30, 31, 31, 20, 4, 28, 6, 16, 5, 12, 16, 21, 4, 28, 15, 23, 15, 12, 12, 24, 13, 28, 23, 8, 13, 22, 24, 30, 32, 31, 14, 24, 32, 22, 32, 23, 13, 23, 23, 4, 15, 13, 6, 21, 13, 32, 7, 13, 4, 13, 7, 5, 21, 5, 23, 28, 7, 13, 15, 24, 31, 20, 21, 4, 7, 31, 4, 30, 32, 29, 13, 12, 12, 21, 4, 13, 12, 7, 12, 23, 24, 32, 8, 31, 24, 12, 7, 31, 20, 6, 29, 4, 14, 16, 32, 12, + 31, 30, 28, 30, 6, 7, 14, 23, 16, 13, 31, 32, 23, 28, 7, 23, 15, 24, 29, 16, 5, 29, 13, 14, 13, 22, 5, 28, 30, 16, 20, 31, 32, 16, 28, 32, 21, 30, 28, 14, 20, 4, 30, 13, 28, 13, 8, 7, 28, 30, 7, 14, 15, 28, 7, 12, 7, 4, 32, 29, 15, 8, 15, 21, 32, 29, 6, 8, 6, 6, 6, 7, 15, 4, 22, 31, 21, 5, 29, 22, 12, 28, 22, 29, 21, 30, 16, 13, 6, 24, 22, 6, 7, 24, 32, 12, 6, 13, 4, 4, 6, 13, 16, 20, 16, 30, 24, 32, 8, 29, 22, 7, 13, 28, 23, 13, 13, 30, 29, 14, 14, 23, 4, 14, 14, 21, 30, 20, + 15, 32, 7, 30, 14, 12, 29, 31, 28, 13, 4, 16, 20, 22, 23, 23, 12, 30, 21, 21, 15, 13, 23, 29, 6, 14, 14, 6, 15, 12, 23, 14, 16, 8, 8, 21, 20, 13, 24, 8, 16, 4, 16, 23, 30, 15, 8, 32, 30, 14, 8, 16, 30, 16, 15, 20, 4, 6, 8, 6, 23, 22, 15, 8, 15, 24, 21, 31, 24, 20, 4, 31, 4, 22, 23, 21, 24, 16, 8, 4, 29, 4, 24, 22, 20, 21, 8, 24, 8, 31, 4, 7, 31, 32, 31, 7, 24, 21, 21, 5, 16, 7, 13, 28, 12, 12, 29, 30, 4, 20, 12, 21, 13, 6, 13, 30, 12, 21, 31, 28, 5, 12, 23, 22, 28, 29, 6, 28, + 15, 32, 12, 20, 20, 4, 7, 7, 14, 7, 15, 22, 20, 29, 23, 29, 22, 7, 7, 12, 14, 24, 29, 5, 31, 14, 5, 20, 8, 7, 5, 6, 12, 24, 22, 32, 20, 24, 15, 12, 24, 31, 14, 32, 22, 6, 7, 6, 12, 13, 31, 8, 15, 16, 24, 20, 6, 30, 16, 6, 20, 6, 16, 30, 16, 29, 32, 5, 7, 6, 24, 32, 7, 24, 13, 21, 12, 24, 30, 22, 12, 22, 28, 21, 20, 12, 30, 30, 22, 22, 13, 23, 16, 13, 7, 6, 7, 23, 8, 7, 15, 16, 13, 20, 31, 28, 5, 20, 6, 4, 23, 6, 32, 24, 24, 5, 28, 22, 8, 24, 24, 20, 23, 21, 21, 8, 22, 16, + 16, 7, 15, 20, 31, 20, 23, 13, 5, 6, 20, 6, 30, 22, 23, 21, 21, 16, 20, 12, 13, 32, 23, 23, 32, 23, 16, 7, 28, 5, 23, 13, 16, 22, 16, 23, 24, 24, 6, 31, 12, 12, 32, 6, 12, 22, 15, 16, 31, 23, 24, 8, 30, 5, 5, 20, 24, 31, 29, 8, 22, 5, 24, 24, 32, 23, 13, 29, 8, 32, 8, 8, 12, 31, 24, 4, 12, 30, 16, 8, 16, 22, 12, 29, 14, 30, 21, 24, 14, 31, 23, 8, 24, 28, 20, 23, 7, 24, 28, 13, 20, 15, 32, 22, 30, 21, 20, 7, 28, 4, 29, 22, 24, 22, 29, 12, 15, 15, 7, 30, 12, 30, 8, 8, 14, 14, 4, 6, + 24, 8, 16, 20, 12, 13, 21, 21, 8, 16, 15, 12, 12, 6, 14, 31, 6, 21, 12, 31, 20, 7, 20, 7, 16, 5, 4, 13, 22, 28, 16, 14, 21, 4, 28, 24, 22, 24, 30, 30, 16, 22, 14, 6, 23, 21, 5, 23, 8, 32, 29, 12, 8, 32, 29, 22, 13, 29, 8, 28, 5, 6, 6, 22, 30, 22, 22, 30, 15, 4, 24, 13, 16, 30, 16, 30, 12, 29, 14, 29, 6, 14, 22, 28, 29, 15, 28, 20, 32, 20, 16, 31, 14, 5, 4, 29, 32, 28, 31, 28, 16, 8, 23, 14, 20, 13, 15, 15, 14, 23, 23, 8, 21, 29, 16, 23, 21, 23, 4, 23, 23, 29, 21, 4, 4, 23, 21, 6, + 20, 31, 23, 28, 5, 12, 15, 24, 29, 7, 23, 8, 29, 24, 15, 8, 21, 31, 13, 15, 23, 21, 5, 24, 30, 16, 30, 32, 12, 16, 30, 22, 30, 24, 32, 21, 5, 29, 20, 13, 28, 32, 6, 21, 31, 29, 28, 15, 5, 12, 29, 15, 13, 7, 7, 24, 30, 5, 15, 29, 20, 31, 28, 20, 4, 22, 28, 30, 8, 28, 8, 31, 23, 29, 32, 28, 4, 28, 28, 13, 12, 13, 16, 4, 13, 30, 29, 6, 16, 32, 4, 28, 16, 24, 20, 29, 15, 23, 22, 22, 12, 24, 13, 20, 15, 4, 20, 15, 12, 31, 4, 15, 16, 5, 29, 4, 5, 30, 5, 22, 20, 21, 30, 7, 29, 32, 21, 13, + 31, 8, 24, 7, 8, 12, 31, 32, 22, 8, 23, 32, 4, 29, 8, 22, 12, 30, 13, 30, 23, 5, 23, 22, 8, 16, 21, 23, 28, 22, 12, 14, 29, 4, 22, 5, 12, 21, 20, 8, 7, 8, 5, 22, 13, 12, 14, 31, 16, 4, 6, 29, 6, 30, 23, 14, 15, 32, 30, 4, 31, 32, 15, 5, 28, 32, 24, 30, 22, 23, 29, 20, 16, 30, 28, 8, 4, 16, 12, 28, 32, 30, 6, 24, 16, 13, 31, 28, 30, 13, 29, 28, 29, 29, 20, 15, 31, 5, 30, 23, 7, 28, 4, 22, 14, 6, 30, 4, 24, 23, 29, 29, 15, 16, 23, 29, 20, 20, 20, 24, 31, 4, 30, 4, 15, 6, 16, 24, + 23, 13, 12, 28, 5, 12, 8, 5, 28, 32, 4, 15, 4, 4, 24, 21, 20, 21, 6, 8, 28, 4, 8, 13, 6, 30, 12, 22, 8, 31, 13, 29, 28, 12, 12, 15, 4, 29, 12, 12, 28, 32, 4, 24, 5, 7, 32, 7, 24, 28, 32, 24, 4, 29, 15, 30, 29, 30, 32, 32, 16, 12, 15, 32, 21, 21, 21, 28, 31, 4, 20, 4, 4, 15, 8, 16, 32, 4, 28, 16, 8, 13, 31, 4, 14, 32, 8, 28, 23, 12, 23, 16, 6, 20, 12, 30, 4, 15, 29, 23, 29, 30, 31, 8, 5, 12, 6, 16, 20, 24, 29, 4, 32, 31, 12, 14, 28, 14, 21, 21, 30, 22, 24, 24, 7, 6, 6, 31, + 6, 12, 20, 7, 24, 31, 32, 15, 4, 5, 6, 32, 12, 24, 29, 15, 32, 21, 12, 29, 8, 21, 13, 15, 29, 28, 30, 14, 22, 30, 30, 4, 28, 8, 16, 24, 5, 23, 7, 20, 6, 4, 8, 22, 15, 13, 13, 8, 14, 8, 8, 12, 12, 22, 6, 29, 8, 7, 16, 28, 31, 20, 6, 24, 29, 23, 22, 14, 30, 29, 28, 30, 22, 21, 15, 4, 32, 8, 6, 7, 24, 31, 6, 24, 24, 30, 20, 8, 29, 7, 21, 23, 8, 15, 20, 6, 16, 16, 14, 16, 5, 28, 20, 6, 23, 22, 15, 7, 16, 12, 29, 13, 12, 6, 8, 5, 4, 7, 29, 24, 29, 22, 31, 4, 14, 7, 8, 30, + 22, 15, 6, 29, 6, 32, 20, 23, 7, 14, 20, 29, 4, 28, 20, 22, 13, 14, 16, 20, 6, 13, 28, 29, 28, 23, 12, 5, 30, 6, 13, 28, 4, 23, 21, 31, 32, 12, 22, 20, 5, 6, 20, 32, 6, 29, 13, 4, 15, 23, 29, 23, 31, 4, 28, 6, 15, 12, 30, 24, 8, 8, 21, 5, 8, 16, 29, 7, 20, 31, 14, 6, 20, 31, 6, 29, 5, 6, 6, 21, 21, 29, 7, 32, 22, 16, 15, 14, 23, 6, 29, 28, 16, 6, 13, 6, 32, 22, 4, 30, 20, 14, 24, 22, 13, 23, 5, 30, 24, 14, 7, 29, 6, 15, 4, 31, 4, 13, 5, 31, 5, 29, 22, 16, 15, 6, 7, 31, + 30, 6, 6, 14, 14, 23, 4, 14, 4, 13, 14, 24, 30, 29, 16, 24, 20, 22, 16, 4, 22, 23, 23, 15, 5, 5, 7, 7, 20, 14, 31, 8, 23, 29, 13, 15, 29, 14, 13, 21, 24, 20, 7, 4, 21, 22, 13, 21, 29, 8, 6, 12, 22, 32, 32, 24, 5, 15, 32, 30, 24, 16, 23, 6, 30, 28, 28, 13, 4, 22, 8, 14, 12, 4, 6, 22, 7, 12, 8, 24, 24, 15, 5, 32, 4, 22, 22, 28, 14, 31, 30, 28, 29, 30, 12, 12, 23, 28, 12, 7, 15, 15, 7, 7, 5, 22, 14, 16, 5, 28, 14, 7, 30, 6, 21, 6, 30, 30, 23, 24, 29, 29, 5, 8, 29, 22, 16, 7, + 32, 12, 12, 15, 13, 16, 32, 28, 15, 14, 6, 16, 15, 31, 4, 21, 12, 21, 20, 20, 20, 6, 4, 31, 29, 24, 4, 16, 22, 8, 21, 28, 28, 28, 22, 20, 6, 31, 29, 5, 16, 22, 12, 6, 24, 8, 30, 30, 28, 32, 16, 13, 23, 6, 21, 13, 20, 20, 15, 13, 21, 23, 6, 22, 30, 15, 24, 7, 22, 4, 30, 15, 32, 22, 24, 28, 30, 28, 15, 30, 4, 22, 6, 15, 4, 5, 32, 8, 32, 23, 16, 6, 6, 7, 16, 24, 31, 28, 7, 30, 31, 22, 13, 21, 7, 20, 5, 24, 29, 31, 22, 28, 5, 15, 29, 30, 15, 14, 16, 29, 23, 20, 12, 23, 7, 24, 6, 28, + 7, 28, 13, 16, 4, 5, 20, 24, 15, 21, 8, 29, 6, 16, 31, 29, 24, 12, 4, 7, 14, 7, 22, 29, 20, 21, 8, 29, 21, 28, 5, 21, 16, 15, 28, 15, 4, 5, 8, 15, 29, 4, 30, 8, 24, 16, 29, 12, 23, 31, 29, 4, 28, 28, 23, 16, 20, 32, 29, 23, 12, 29, 14, 14, 12, 21, 20, 12, 28, 14, 15, 28, 30, 20, 31, 24, 5, 6, 4, 24, 29, 20, 23, 4, 32, 15, 32, 14, 6, 14, 31, 32, 22, 14, 31, 24, 24, 16, 16, 16, 31, 16, 14, 28, 13, 32, 23, 16, 14, 24, 22, 24, 29, 8, 32, 6, 20, 32, 24, 23, 13, 22, 12, 5, 31, 16, 5, 29, + 31, 12, 13, 20, 7, 23, 7, 23, 24, 21, 22, 6, 20, 20, 31, 16, 20, 7, 7, 16, 30, 14, 16, 16, 30, 24, 14, 5, 32, 13, 21, 30, 24, 20, 12, 21, 14, 30, 16, 8, 15, 28, 29, 28, 15, 4, 31, 15, 20, 14, 28, 5, 13, 28, 14, 4, 6, 5, 12, 5, 16, 15, 32, 21, 20, 16, 21, 20, 5, 14, 20, 15, 21, 30, 32, 7, 13, 8, 22, 31, 16, 8, 12, 24, 12, 15, 20, 23, 21, 30, 7, 21, 5, 6, 12, 5, 15, 28, 31, 29, 5, 24, 24, 21, 32, 15, 7, 21, 23, 29, 4, 23, 23, 15, 5, 30, 24, 31, 21, 20, 7, 21, 4, 22, 21, 31, 4, 14, + 31, 30, 32, 29, 31, 32, 7, 13, 7, 5, 31, 5, 5, 13, 21, 23, 13, 8, 16, 30, 20, 13, 29, 29, 8, 32, 12, 21, 7, 31, 12, 20, 12, 16, 4, 13, 32, 16, 31, 16, 15, 7, 20, 24, 20, 15, 6, 16, 13, 5, 15, 16, 31, 23, 28, 16, 24, 6, 7, 23, 5, 15, 15, 6, 24, 23, 22, 8, 13, 13, 32, 21, 23, 8, 24, 21, 31, 23, 16, 7, 7, 29, 28, 7, 16, 14, 4, 24, 16, 28, 8, 12, 6, 20, 22, 15, 16, 20, 22, 7, 28, 6, 16, 16, 29, 8, 8, 16, 20, 31, 31, 32, 12, 16, 14, 28, 14, 15, 23, 13, 7, 29, 12, 12, 24, 8, 7, 23, + 21, 28, 15, 28, 13, 8, 15, 21, 28, 12, 22, 8, 6, 6, 29, 4, 12, 16, 29, 7, 22, 7, 12, 28, 7, 4, 5, 22, 15, 16, 8, 29, 22, 22, 7, 13, 30, 15, 6, 16, 6, 21, 16, 12, 16, 4, 22, 28, 23, 14, 21, 29, 4, 6, 31, 22, 23, 14, 22, 23, 32, 8, 6, 29, 8, 7, 24, 16, 6, 23, 7, 32, 32, 21, 6, 29, 23, 7, 14, 7, 32, 28, 8, 16, 7, 32, 22, 30, 32, 20, 4, 29, 28, 23, 16, 31, 32, 20, 29, 22, 32, 28, 29, 31, 31, 6, 24, 20, 4, 8, 32, 12, 32, 13, 8, 13, 13, 4, 5, 24, 30, 14, 21, 28, 12, 8, 30, 7, + 30, 13, 23, 13, 32, 16, 21, 22, 4, 24, 16, 23, 5, 21, 28, 15, 28, 20, 21, 23, 22, 24, 20, 24, 20, 20, 5, 22, 21, 7, 30, 30, 23, 31, 30, 12, 4, 22, 30, 12, 31, 31, 13, 22, 31, 22, 13, 4, 22, 15, 12, 21, 15, 20, 12, 31, 12, 23, 23, 20, 29, 4, 15, 8, 5, 32, 7, 31, 24, 13, 12, 21, 32, 16, 24, 32, 31, 20, 5, 28, 20, 29, 13, 20, 20, 31, 13, 15, 5, 7, 32, 8, 29, 14, 5, 24, 21, 21, 16, 23, 15, 4, 31, 24, 4, 8, 23, 15, 15, 30, 15, 6, 16, 16, 23, 31, 32, 12, 8, 32, 15, 5, 31, 29, 15, 24, 28, 24, + 31, 12, 31, 13, 4, 21, 13, 7, 15, 7, 22, 16, 21, 7, 14, 31, 22, 15, 4, 24, 8, 21, 22, 5, 7, 23, 29, 21, 30, 20, 16, 22, 5, 24, 21, 15, 15, 30, 16, 15, 31, 21, 7, 32, 31, 16, 16, 4, 24, 28, 7, 4, 8, 5, 5, 32, 5, 24, 12, 31, 24, 6, 20, 16, 8, 14, 28, 22, 21, 13, 13, 22, 28, 6, 8, 6, 20, 7, 20, 7, 23, 29, 16, 29, 24, 22, 22, 13, 22, 14, 31, 28, 24, 30, 31, 16, 8, 15, 16, 7, 8, 21, 28, 6, 13, 5, 32, 20, 14, 22, 5, 31, 29, 6, 21, 6, 31, 15, 31, 12, 31, 23, 12, 28, 7, 32, 5, 8, + 23, 16, 12, 22, 8, 29, 4, 7, 24, 13, 4, 16, 12, 32, 20, 29, 6, 29, 22, 13, 16, 29, 31, 30, 12, 16, 20, 6, 21, 7, 28, 16, 21, 5, 15, 4, 13, 29, 13, 5, 28, 22, 15, 28, 16, 29, 22, 31, 24, 31, 13, 31, 16, 7, 13, 24, 24, 13, 15, 23, 13, 12, 29, 31, 13, 21, 23, 24, 21, 28, 14, 23, 16, 6, 14, 28, 31, 23, 16, 29, 29, 7, 29, 16, 23, 32, 22, 12, 13, 6, 4, 6, 16, 31, 21, 15, 16, 14, 22, 16, 31, 31, 29, 8, 32, 24, 12, 16, 13, 31, 32, 13, 31, 14, 8, 23, 16, 16, 14, 20, 32, 6, 8, 14, 7, 23, 30, 7, + 32, 29, 4, 28, 24, 13, 6, 5, 22, 13, 6, 16, 30, 15, 14, 23, 4, 15, 31, 29, 32, 16, 28, 12, 22, 14, 29, 5, 7, 32, 20, 6, 22, 12, 31, 4, 30, 15, 28, 31, 24, 20, 32, 6, 12, 20, 16, 24, 8, 7, 20, 24, 22, 23, 24, 8, 24, 14, 32, 21, 6, 24, 6, 13, 21, 16, 21, 6, 22, 22, 7, 29, 23, 32, 30, 31, 4, 15, 8, 6, 23, 24, 32, 22, 12, 7, 6, 20, 21, 15, 4, 5, 28, 23, 15, 24, 29, 20, 12, 29, 14, 29, 6, 29, 29, 16, 20, 28, 32, 8, 14, 31, 21, 7, 21, 16, 30, 16, 23, 31, 15, 4, 22, 24, 21, 7, 21, 16, + 21, 4, 14, 28, 20, 28, 14, 28, 29, 22, 14, 15, 8, 20, 4, 23, 7, 21, 7, 12, 30, 6, 14, 13, 29, 7, 8, 20, 20, 12, 32, 20, 5, 23, 15, 5, 16, 5, 24, 12, 24, 15, 14, 24, 16, 29, 24, 7, 13, 5, 4, 24, 23, 21, 8, 6, 24, 6, 32, 13, 23, 4, 14, 28, 13, 28, 22, 15, 24, 29, 30, 8, 12, 5, 5, 29, 28, 13, 29, 28, 7, 23, 29, 15, 20, 15, 20, 22, 29, 16, 8, 4, 30, 32, 16, 21, 24, 23, 28, 21, 31, 20, 6, 12, 14, 12, 20, 5, 5, 24, 28, 4, 16, 13, 12, 30, 21, 20, 4, 20, 15, 7, 14, 16, 5, 5, 29, 29, + 13, 22, 12, 14, 6, 20, 21, 22, 28, 31, 8, 28, 14, 13, 6, 31, 29, 22, 6, 14, 23, 28, 14, 31, 32, 28, 23, 20, 21, 16, 20, 24, 7, 13, 14, 30, 22, 8, 21, 30, 21, 7, 6, 4, 23, 5, 16, 23, 28, 13, 13, 23, 23, 12, 30, 13, 30, 29, 31, 28, 31, 28, 8, 28, 31, 13, 20, 24, 6, 22, 4, 30, 32, 30, 23, 30, 16, 28, 32, 4, 12, 30, 4, 21, 23, 30, 7, 13, 5, 16, 6, 28, 32, 13, 4, 4, 7, 31, 7, 22, 15, 21, 22, 31, 5, 32, 29, 12, 14, 20, 8, 28, 21, 4, 24, 23, 6, 8, 15, 7, 16, 22, 29, 14, 31, 21, 15, 6, + 31, 22, 13, 22, 31, 22, 15, 12, 8, 13, 24, 32, 24, 28, 28, 5, 21, 24, 20, 4, 32, 13, 29, 5, 32, 21, 29, 4, 12, 16, 6, 5, 23, 29, 4, 15, 14, 32, 12, 15, 14, 14, 4, 31, 28, 7, 30, 28, 22, 16, 6, 24, 28, 8, 15, 14, 29, 28, 28, 22, 21, 29, 22, 16, 28, 23, 16, 6, 20, 5, 30, 5, 23, 5, 31, 32, 4, 29, 32, 16, 24, 31, 8, 28, 12, 32, 5, 16, 7, 22, 20, 13, 5, 7, 29, 29, 23, 29, 7, 7, 6, 16, 29, 22, 14, 16, 14, 6, 16, 22, 22, 15, 21, 32, 32, 16, 14, 23, 24, 28, 24, 21, 16, 8, 23, 5, 16, 29, + 29, 20, 6, 29, 5, 21, 15, 13, 4, 29, 6, 29, 28, 24, 23, 7, 21, 31, 13, 13, 31, 24, 20, 7, 30, 4, 4, 15, 31, 23, 22, 12, 29, 6, 12, 7, 31, 6, 14, 31, 7, 13, 22, 8, 23, 31, 14, 32, 13, 14, 13, 6, 15, 22, 30, 30, 21, 7, 32, 7, 15, 12, 14, 6, 23, 16, 14, 30, 12, 23, 12, 21, 6, 28, 14, 24, 30, 6, 30, 15, 5, 5, 28, 32, 6, 8, 30, 29, 13, 30, 22, 24, 30, 24, 6, 4, 16, 8, 6, 29, 14, 28, 21, 22, 6, 28, 31, 16, 21, 22, 30, 32, 16, 24, 24, 21, 20, 6, 23, 12, 20, 20, 5, 21, 5, 20, 31, 16, + 23, 5, 7, 13, 22, 28, 28, 12, 24, 15, 28, 15, 8, 20, 15, 16, 28, 5, 14, 14, 8, 31, 8, 14, 6, 31, 6, 7, 7, 7, 16, 6, 22, 24, 6, 32, 7, 13, 24, 8, 20, 29, 5, 30, 13, 28, 21, 30, 5, 16, 7, 20, 15, 21, 5, 14, 14, 22, 6, 6, 20, 5, 4, 7, 24, 12, 7, 28, 24, 7, 24, 4, 20, 16, 15, 28, 14, 8, 23, 12, 29, 32, 32, 29, 28, 32, 29, 20, 14, 15, 13, 13, 4, 15, 22, 12, 20, 4, 4, 15, 13, 31, 29, 21, 30, 16, 7, 8, 29, 22, 28, 7, 20, 13, 29, 16, 21, 20, 4, 7, 15, 6, 24, 21, 7, 21, 7, 30, + 28, 8, 24, 5, 16, 13, 24, 28, 30, 20, 15, 31, 8, 31, 5, 12, 29, 13, 13, 28, 22, 22, 22, 8, 8, 30, 7, 7, 28, 7, 13, 22, 30, 6, 7, 7, 32, 16, 32, 22, 5, 7, 32, 32, 31, 21, 29, 28, 31, 8, 5, 4, 16, 20, 5, 28, 4, 13, 30, 31, 24, 32, 12, 8, 7, 15, 4, 31, 16, 24, 29, 30, 32, 14, 31, 13, 20, 13, 15, 6, 23, 21, 8, 21, 31, 15, 31, 16, 5, 29, 14, 15, 15, 16, 21, 12, 16, 30, 15, 14, 4, 4, 28, 29, 12, 23, 28, 23, 5, 29, 7, 32, 8, 6, 13, 32, 8, 12, 22, 28, 20, 4, 31, 21, 16, 30, 32, 7, + 22, 5, 23, 21, 31, 16, 13, 30, 20, 13, 13, 5, 29, 4, 13, 23, 22, 5, 23, 14, 20, 21, 23, 5, 16, 31, 21, 12, 23, 22, 12, 23, 29, 28, 16, 28, 13, 32, 15, 21, 23, 6, 13, 16, 13, 22, 32, 29, 32, 4, 12, 28, 6, 30, 21, 30, 4, 24, 5, 6, 6, 29, 31, 5, 12, 29, 29, 28, 13, 32, 30, 23, 28, 28, 4, 15, 24, 24, 20, 20, 8, 6, 4, 30, 14, 23, 14, 31, 6, 28, 24, 14, 8, 32, 23, 29, 6, 13, 22, 22, 32, 20, 15, 5, 8, 23, 31, 23, 22, 16, 4, 14, 20, 30, 30, 22, 21, 30, 30, 16, 30, 12, 8, 29, 28, 21, 13, 12, + 15, 28, 13, 6, 32, 4, 5, 15, 32, 6, 12, 15, 8, 14, 13, 29, 14, 22, 24, 22, 20, 28, 5, 31, 4, 12, 29, 8, 14, 15, 5, 13, 21, 24, 7, 15, 28, 12, 12, 15, 31, 28, 5, 31, 21, 4, 22, 12, 15, 7, 24, 21, 20, 29, 4, 4, 23, 5, 12, 30, 4, 14, 13, 13, 7, 8, 6, 21, 31, 22, 20, 28, 8, 12, 23, 14, 16, 4, 21, 21, 20, 6, 24, 20, 16, 30, 5, 5, 21, 16, 21, 21, 12, 8, 30, 29, 32, 4, 7, 5, 8, 20, 4, 14, 30, 31, 29, 4, 5, 24, 24, 23, 31, 8, 7, 30, 7, 31, 31, 6, 12, 28, 14, 20, 24, 22, 21, 5, + 32, 12, 8, 24, 13, 24, 32, 14, 8, 4, 13, 7, 22, 32, 31, 8, 30, 31, 12, 23, 32, 29, 13, 30, 32, 20, 8, 8, 4, 14, 29, 21, 20, 22, 24, 14, 29, 20, 29, 14, 24, 21, 22, 7, 23, 21, 32, 24, 29, 12, 8, 31, 32, 6, 29, 24, 28, 8, 4, 23, 15, 5, 5, 13, 30, 8, 12, 22, 7, 12, 6, 28, 7, 6, 13, 31, 31, 13, 12, 12, 23, 5, 28, 30, 24, 8, 32, 6, 13, 29, 31, 13, 29, 7, 21, 6, 5, 32, 23, 8, 6, 14, 15, 23, 8, 23, 22, 20, 5, 15, 7, 7, 20, 21, 5, 12, 4, 6, 12, 6, 31, 22, 21, 15, 21, 12, 22, 14, + 21, 7, 29, 6, 15, 7, 32, 32, 12, 22, 8, 12, 22, 8, 7, 24, 5, 23, 20, 30, 12, 21, 7, 13, 6, 30, 29, 29, 6, 7, 14, 5, 12, 13, 32, 7, 29, 32, 5, 21, 29, 14, 29, 15, 24, 21, 4, 32, 29, 29, 8, 20, 28, 23, 23, 28, 31, 7, 8, 6, 20, 13, 5, 30, 31, 5, 20, 7, 29, 28, 7, 30, 28, 13, 5, 5, 31, 12, 7, 4, 30, 32, 6, 15, 31, 20, 13, 4, 5, 5, 5, 32, 30, 6, 6, 31, 21, 24, 23, 5, 29, 29, 6, 13, 8, 12, 16, 21, 32, 6, 31, 31, 15, 12, 23, 14, 30, 6, 29, 4, 22, 30, 28, 12, 12, 22, 6, 16, + 8, 13, 29, 8, 32, 14, 4, 24, 6, 28, 30, 20, 4, 13, 15, 30, 12, 16, 16, 14, 13, 4, 21, 14, 23, 15, 13, 6, 14, 21, 29, 13, 21, 7, 6, 14, 7, 15, 7, 32, 21, 12, 21, 16, 4, 4, 32, 23, 8, 5, 8, 32, 13, 8, 16, 24, 32, 8, 16, 15, 32, 22, 21, 7, 6, 12, 8, 23, 16, 30, 23, 16, 30, 5, 12, 4, 14, 16, 4, 8, 23, 20, 4, 31, 6, 29, 8, 7, 8, 15, 23, 13, 6, 5, 31, 23, 13, 7, 5, 22, 22, 23, 8, 4, 21, 29, 21, 28, 24, 4, 15, 16, 14, 21, 21, 6, 21, 7, 31, 12, 12, 14, 15, 32, 21, 23, 4, 14, + 21, 23, 16, 15, 32, 12, 6, 7, 5, 4, 15, 29, 29, 24, 24, 8, 7, 15, 28, 14, 30, 21, 23, 32, 28, 5, 31, 32, 7, 13, 4, 8, 32, 8, 6, 31, 24, 14, 24, 23, 31, 13, 29, 14, 24, 7, 7, 31, 21, 4, 28, 4, 4, 22, 31, 31, 15, 12, 7, 7, 5, 12, 30, 21, 5, 8, 21, 30, 4, 20, 4, 22, 7, 21, 15, 24, 23, 6, 31, 5, 23, 14, 22, 7, 28, 16, 24, 32, 8, 6, 8, 24, 7, 5, 15, 20, 22, 14, 28, 23, 30, 24, 28, 31, 16, 14, 31, 31, 16, 7, 32, 31, 15, 29, 22, 7, 12, 7, 5, 23, 20, 8, 5, 29, 31, 22, 15, 22, + 6, 32, 12, 8, 32, 8, 4, 16, 16, 20, 14, 14, 15, 28, 6, 32, 32, 14, 28, 16, 24, 4, 20, 23, 24, 16, 12, 23, 20, 29, 32, 20, 28, 8, 24, 6, 29, 16, 7, 24, 8, 29, 5, 28, 16, 16, 8, 12, 7, 20, 21, 29, 8, 12, 28, 7, 12, 15, 15, 22, 32, 21, 16, 8, 5, 8, 23, 6, 23, 30, 12, 23, 7, 20, 24, 20, 16, 30, 24, 32, 4, 7, 7, 28, 16, 13, 30, 14, 14, 30, 14, 28, 13, 31, 4, 6, 24, 5, 22, 28, 30, 30, 24, 32, 32, 30, 22, 21, 21, 24, 12, 28, 13, 4, 7, 29, 12, 7, 28, 20, 8, 16, 4, 7, 28, 30, 13, 12, + 20, 8, 21, 30, 14, 15, 20, 5, 7, 32, 8, 6, 30, 6, 7, 4, 28, 22, 6, 14, 8, 7, 7, 21, 32, 6, 31, 20, 14, 8, 6, 13, 23, 24, 20, 30, 30, 6, 32, 14, 14, 28, 6, 12, 12, 5, 5, 21, 5, 14, 24, 16, 7, 29, 7, 8, 23, 15, 31, 13, 29, 29, 21, 24, 22, 4, 32, 14, 13, 22, 4, 28, 29, 22, 21, 14, 20, 23, 14, 7, 30, 30, 22, 32, 5, 31, 28, 15, 28, 6, 14, 28, 4, 23, 8, 15, 20, 16, 12, 5, 7, 4, 28, 15, 14, 5, 23, 5, 13, 23, 21, 31, 31, 5, 16, 4, 32, 22, 32, 15, 16, 24, 23, 12, 4, 24, 21, 4, + 4, 30, 28, 5, 20, 29, 21, 20, 13, 21, 14, 8, 8, 8, 16, 5, 24, 22, 32, 12, 6, 20, 13, 16, 8, 23, 21, 24, 7, 30, 8, 6, 29, 16, 13, 21, 30, 13, 12, 20, 22, 7, 30, 20, 32, 6, 20, 5, 23, 23, 16, 16, 8, 22, 4, 8, 4, 15, 20, 14, 12, 24, 21, 16, 16, 32, 7, 8, 5, 15, 31, 15, 21, 13, 15, 13, 4, 8, 32, 6, 22, 4, 28, 5, 12, 28, 13, 15, 5, 22, 24, 21, 13, 22, 22, 30, 15, 16, 30, 31, 23, 13, 16, 13, 21, 30, 16, 31, 7, 21, 31, 5, 12, 21, 23, 5, 16, 12, 14, 13, 15, 30, 22, 7, 7, 8, 22, 31, + 14, 20, 23, 30, 30, 12, 14, 28, 24, 7, 15, 8, 20, 30, 24, 7, 31, 6, 16, 12, 30, 7, 4, 8, 22, 8, 31, 31, 15, 7, 31, 20, 16, 4, 30, 24, 13, 16, 5, 16, 32, 30, 4, 29, 5, 32, 20, 22, 23, 22, 6, 8, 6, 8, 24, 12, 20, 23, 32, 14, 30, 22, 7, 23, 29, 23, 5, 15, 21, 12, 5, 12, 23, 12, 32, 28, 21, 15, 8, 6, 22, 29, 8, 14, 21, 16, 31, 24, 6, 23, 30, 24, 20, 5, 12, 7, 24, 13, 5, 28, 7, 23, 8, 6, 23, 31, 31, 7, 32, 7, 31, 22, 12, 28, 6, 32, 12, 6, 4, 13, 7, 23, 32, 13, 31, 30, 22, 22, + 23, 24, 24, 14, 32, 7, 14, 7, 24, 29, 7, 4, 24, 20, 4, 15, 31, 14, 16, 15, 24, 4, 22, 31, 31, 8, 23, 13, 31, 20, 29, 30, 8, 21, 13, 7, 6, 15, 6, 21, 5, 4, 23, 31, 23, 28, 14, 7, 28, 6, 29, 12, 14, 23, 22, 28, 12, 6, 5, 12, 6, 28, 7, 31, 15, 29, 6, 8, 31, 6, 30, 8, 5, 30, 13, 16, 15, 28, 13, 20, 24, 13, 31, 16, 5, 20, 14, 32, 23, 24, 29, 16, 8, 32, 20, 30, 16, 12, 14, 22, 22, 21, 8, 6, 13, 12, 29, 4, 13, 4, 16, 20, 29, 5, 16, 24, 20, 8, 30, 6, 5, 32, 15, 16, 23, 21, 16, 32, + 23, 24, 16, 4, 24, 29, 30, 12, 31, 5, 21, 29, 29, 6, 21, 22, 14, 7, 5, 7, 8, 15, 20, 30, 15, 21, 20, 22, 13, 8, 20, 21, 22, 20, 29, 23, 28, 8, 30, 28, 29, 24, 13, 21, 30, 5, 23, 21, 23, 16, 7, 6, 6, 12, 28, 20, 22, 31, 23, 14, 23, 30, 28, 8, 5, 7, 8, 29, 4, 7, 7, 8, 4, 5, 29, 23, 31, 12, 5, 5, 15, 6, 24, 16, 23, 22, 12, 12, 13, 5, 20, 31, 29, 7, 28, 14, 23, 31, 14, 6, 7, 6, 20, 15, 15, 14, 5, 22, 21, 22, 16, 29, 20, 22, 32, 23, 29, 5, 13, 32, 13, 15, 32, 20, 14, 8, 23, 24, + 31, 21, 5, 30, 30, 28, 13, 14, 7, 30, 32, 15, 28, 32, 8, 7, 30, 16, 14, 21, 29, 31, 23, 14, 24, 24, 16, 13, 30, 16, 7, 24, 14, 5, 12, 22, 24, 13, 12, 5, 6, 7, 7, 5, 29, 12, 16, 15, 29, 20, 5, 4, 15, 4, 7, 8, 32, 31, 16, 21, 30, 30, 32, 24, 21, 8, 23, 14, 16, 8, 5, 8, 20, 20, 29, 30, 14, 4, 20, 6, 14, 6, 7, 8, 22, 5, 12, 13, 23, 24, 29, 29, 32, 14, 5, 21, 32, 12, 23, 12, 28, 22, 7, 22, 22, 28, 8, 29, 8, 14, 24, 4, 14, 6, 7, 8, 4, 21, 23, 31, 21, 21, 23, 8, 28, 22, 21, 6, + 31, 6, 22, 5, 14, 31, 32, 16, 13, 4, 30, 28, 5, 24, 28, 20, 8, 4, 20, 29, 20, 13, 29, 16, 13, 16, 15, 7, 32, 21, 22, 13, 13, 20, 4, 30, 4, 4, 28, 29, 24, 16, 6, 30, 23, 31, 29, 20, 8, 13, 31, 12, 8, 13, 12, 4, 29, 15, 4, 4, 8, 12, 15, 24, 5, 16, 24, 24, 23, 21, 28, 29, 28, 32, 23, 13, 5, 8, 28, 24, 31, 22, 29, 23, 8, 22, 23, 31, 23, 29, 23, 32, 8, 6, 12, 16, 16, 12, 23, 24, 20, 12, 12, 23, 15, 24, 8, 31, 14, 24, 32, 31, 21, 8, 23, 30, 31, 5, 23, 24, 8, 21, 6, 29, 12, 31, 14, 8, + 28, 22, 20, 20, 8, 6, 23, 13, 21, 30, 7, 4, 24, 24, 6, 13, 30, 14, 29, 8, 21, 28, 16, 13, 21, 23, 5, 15, 12, 6, 20, 13, 8, 8, 5, 4, 32, 31, 14, 31, 16, 28, 20, 30, 21, 28, 23, 32, 13, 24, 23, 4, 12, 29, 15, 29, 15, 30, 20, 4, 22, 5, 12, 21, 14, 24, 13, 6, 8, 6, 28, 22, 32, 23, 4, 31, 8, 32, 29, 30, 8, 8, 32, 12, 22, 5, 12, 32, 24, 8, 4, 4, 24, 32, 4, 28, 28, 21, 29, 14, 6, 32, 24, 6, 24, 5, 6, 28, 6, 14, 6, 14, 22, 4, 8, 21, 4, 29, 23, 4, 21, 8, 31, 32, 24, 22, 31, 24, + 15, 16, 32, 22, 12, 21, 31, 6, 32, 12, 5, 6, 13, 6, 4, 6, 12, 6, 32, 30, 14, 8, 6, 30, 21, 28, 5, 12, 30, 20, 14, 31, 14, 22, 23, 7, 29, 6, 20, 14, 16, 20, 24, 15, 20, 6, 14, 15, 31, 28, 15, 16, 20, 14, 12, 30, 6, 13, 4, 6, 21, 12, 21, 20, 13, 20, 23, 23, 12, 29, 31, 6, 5, 23, 5, 31, 14, 16, 30, 29, 32, 4, 8, 5, 14, 15, 15, 23, 29, 4, 22, 4, 4, 13, 4, 13, 32, 5, 16, 31, 12, 24, 32, 8, 4, 28, 5, 12, 21, 20, 22, 29, 32, 15, 29, 16, 22, 5, 14, 15, 12, 30, 22, 23, 5, 21, 14, 7, + 5, 30, 23, 4, 13, 21, 21, 13, 7, 4, 31, 22, 7, 21, 7, 13, 32, 20, 14, 31, 21, 22, 6, 7, 15, 14, 6, 14, 32, 22, 31, 22, 13, 12, 21, 32, 12, 7, 22, 31, 4, 13, 8, 31, 15, 22, 13, 16, 12, 5, 5, 12, 6, 8, 16, 5, 4, 14, 20, 20, 31, 22, 28, 23, 6, 16, 32, 4, 22, 29, 16, 15, 30, 7, 6, 24, 22, 31, 28, 13, 15, 4, 14, 23, 22, 15, 32, 30, 30, 32, 5, 4, 32, 22, 22, 7, 12, 20, 4, 4, 12, 7, 15, 15, 28, 6, 13, 15, 22, 20, 24, 8, 30, 4, 4, 32, 6, 4, 12, 14, 8, 23, 21, 24, 21, 22, 30, 20, + 31, 24, 29, 28, 13, 8, 28, 15, 32, 28, 21, 14, 13, 6, 20, 22, 29, 31, 8, 6, 8, 6, 16, 29, 16, 29, 24, 30, 13, 22, 4, 22, 5, 4, 4, 22, 21, 15, 4, 4, 30, 31, 24, 6, 21, 16, 20, 16, 16, 31, 14, 28, 30, 14, 28, 22, 8, 29, 14, 20, 22, 32, 14, 30, 31, 32, 13, 13, 12, 6, 14, 23, 24, 13, 29, 8, 29, 31, 8, 14, 7, 7, 4, 24, 8, 22, 28, 15, 23, 20, 12, 30, 23, 4, 6, 15, 16, 14, 6, 16, 8, 23, 7, 12, 29, 14, 12, 32, 30, 29, 4, 16, 13, 7, 16, 28, 16, 20, 14, 8, 16, 5, 22, 13, 15, 5, 14, 5, + 32, 30, 20, 21, 5, 13, 23, 13, 20, 8, 22, 21, 13, 6, 5, 24, 13, 14, 5, 31, 28, 21, 8, 22, 4, 32, 32, 24, 23, 30, 29, 5, 15, 14, 22, 24, 23, 22, 6, 15, 7, 15, 15, 20, 21, 6, 13, 32, 32, 28, 4, 13, 20, 23, 15, 30, 13, 16, 20, 23, 28, 14, 7, 15, 12, 14, 32, 13, 24, 31, 23, 23, 31, 21, 32, 31, 8, 28, 14, 20, 29, 21, 7, 30, 15, 29, 12, 29, 32, 8, 32, 22, 23, 8, 29, 28, 6, 5, 21, 28, 31, 8, 29, 20, 6, 29, 15, 31, 13, 5, 6, 4, 6, 21, 32, 12, 30, 29, 21, 16, 28, 31, 29, 24, 8, 5, 14, 14, + 20, 13, 29, 32, 4, 20, 29, 28, 15, 30, 20, 24, 7, 8, 30, 21, 32, 16, 22, 4, 31, 7, 12, 13, 30, 6, 30, 15, 6, 30, 29, 4, 15, 30, 28, 12, 7, 7, 23, 32, 21, 7, 29, 32, 29, 8, 21, 30, 15, 32, 12, 5, 6, 4, 15, 20, 4, 5, 16, 21, 7, 16, 31, 7, 7, 13, 23, 13, 24, 29, 4, 23, 6, 4, 31, 13, 20, 14, 32, 20, 12, 23, 5, 4, 12, 31, 13, 31, 15, 4, 20, 8, 14, 22, 6, 8, 31, 7, 24, 12, 8, 20, 32, 31, 6, 4, 15, 30, 29, 20, 6, 24, 7, 31, 23, 28, 21, 30, 20, 8, 12, 4, 20, 13, 14, 32, 23, 6, + 5, 32, 21, 22, 23, 29, 23, 29, 29, 30, 30, 13, 23, 32, 8, 15, 28, 13, 5, 4, 6, 8, 21, 16, 6, 15, 15, 14, 20, 12, 7, 24, 7, 13, 20, 24, 4, 28, 7, 7, 13, 6, 5, 14, 7, 21, 30, 4, 4, 23, 15, 32, 6, 28, 24, 32, 8, 28, 30, 31, 28, 16, 30, 7, 6, 32, 21, 13, 12, 28, 30, 29, 20, 24, 16, 15, 5, 30, 21, 4, 28, 6, 7, 28, 12, 30, 20, 20, 32, 5, 22, 13, 22, 12, 16, 16, 20, 20, 23, 6, 21, 8, 12, 16, 30, 28, 30, 29, 12, 22, 7, 7, 24, 31, 22, 24, 31, 21, 29, 5, 20, 7, 12, 5, 20, 5, 5, 12, + 23, 30, 5, 4, 24, 15, 32, 7, 12, 32, 4, 7, 29, 6, 32, 8, 5, 8, 28, 29, 16, 22, 4, 21, 4, 12, 5, 5, 7, 28, 28, 31, 29, 13, 31, 12, 29, 32, 22, 29, 21, 31, 20, 21, 15, 8, 12, 20, 21, 30, 32, 15, 7, 7, 6, 8, 13, 7, 6, 28, 28, 22, 23, 32, 13, 24, 24, 8, 8, 12, 16, 22, 20, 20, 4, 13, 5, 13, 13, 6, 28, 28, 30, 16, 28, 29, 30, 15, 15, 8, 12, 21, 23, 5, 15, 7, 23, 8, 28, 29, 12, 4, 13, 31, 30, 8, 14, 24, 20, 14, 24, 15, 6, 20, 4, 6, 28, 7, 28, 23, 28, 28, 30, 24, 5, 24, 8, 12, + 5, 5, 14, 14, 8, 12, 22, 12, 32, 23, 29, 13, 5, 21, 31, 21, 23, 21, 24, 8, 28, 21, 29, 28, 13, 7, 22, 5, 15, 15, 20, 7, 28, 15, 12, 5, 28, 24, 7, 4, 20, 28, 13, 24, 8, 28, 24, 21, 5, 21, 6, 15, 31, 21, 30, 28, 24, 16, 5, 8, 5, 20, 6, 30, 28, 14, 15, 29, 12, 13, 5, 32, 5, 5, 20, 12, 31, 6, 28, 30, 32, 7, 8, 31, 30, 8, 7, 30, 30, 15, 14, 20, 31, 21, 23, 14, 31, 5, 6, 12, 22, 32, 6, 31, 4, 14, 4, 28, 8, 6, 28, 29, 22, 29, 24, 5, 23, 23, 29, 4, 15, 21, 30, 32, 30, 15, 28, 4, + 32, 29, 20, 32, 32, 15, 32, 20, 14, 29, 15, 6, 31, 20, 7, 29, 16, 14, 22, 6, 32, 30, 16, 28, 30, 16, 29, 5, 30, 8, 22, 7, 7, 7, 32, 30, 21, 21, 20, 4, 8, 16, 5, 14, 8, 32, 32, 6, 29, 16, 6, 4, 6, 31, 16, 23, 12, 29, 15, 28, 8, 22, 32, 8, 8, 4, 30, 29, 13, 30, 14, 32, 30, 21, 20, 30, 7, 23, 12, 15, 4, 24, 4, 32, 28, 22, 20, 31, 30, 13, 13, 32, 23, 30, 14, 6, 30, 16, 32, 32, 5, 8, 31, 14, 13, 32, 24, 24, 31, 14, 29, 7, 5, 16, 22, 13, 14, 5, 15, 21, 24, 24, 20, 7, 16, 24, 30, 7, + 4, 23, 23, 29, 7, 13, 4, 14, 24, 23, 8, 14, 4, 29, 29, 24, 20, 21, 24, 15, 24, 4, 5, 28, 16, 7, 21, 7, 30, 13, 20, 28, 5, 4, 12, 23, 21, 13, 12, 13, 5, 5, 16, 16, 21, 6, 16, 6, 16, 22, 24, 12, 6, 12, 21, 5, 14, 23, 32, 5, 21, 5, 28, 21, 29, 30, 15, 22, 8, 7, 13, 30, 20, 4, 31, 29, 15, 16, 8, 22, 20, 29, 6, 32, 24, 30, 29, 22, 4, 5, 29, 30, 21, 31, 7, 7, 29, 16, 13, 29, 14, 28, 31, 23, 16, 28, 12, 8, 13, 6, 28, 16, 31, 16, 22, 15, 14, 24, 4, 32, 23, 16, 28, 5, 28, 6, 12, 13, + 21, 32, 4, 13, 8, 16, 28, 13, 7, 20, 7, 13, 16, 16, 30, 13, 15, 24, 29, 15, 14, 21, 5, 12, 23, 32, 8, 24, 23, 4, 31, 28, 32, 13, 20, 32, 21, 20, 15, 31, 22, 16, 4, 15, 16, 32, 8, 4, 21, 31, 6, 24, 23, 21, 15, 7, 12, 23, 29, 21, 32, 32, 20, 5, 16, 13, 32, 28, 23, 8, 20, 21, 14, 8, 15, 20, 22, 6, 8, 29, 7, 32, 7, 6, 16, 23, 16, 23, 21, 16, 32, 14, 30, 30, 29, 23, 21, 28, 5, 22, 32, 7, 21, 12, 23, 7, 20, 13, 4, 31, 30, 31, 32, 28, 5, 8, 16, 23, 12, 13, 31, 28, 16, 21, 29, 16, 29, 31, + 32, 6, 4, 5, 21, 15, 22, 31, 31, 30, 15, 30, 30, 24, 6, 21, 24, 28, 24, 30, 30, 24, 21, 28, 4, 4, 15, 20, 21, 16, 16, 24, 30, 31, 6, 20, 30, 22, 12, 7, 7, 13, 14, 8, 24, 14, 30, 22, 12, 14, 30, 30, 22, 13, 20, 20, 13, 5, 7, 5, 32, 28, 32, 6, 22, 32, 16, 7, 15, 16, 15, 4, 30, 20, 13, 30, 7, 15, 8, 23, 22, 14, 6, 14, 24, 14, 13, 5, 32, 5, 24, 32, 14, 14, 5, 15, 29, 23, 20, 13, 5, 13, 13, 6, 31, 13, 16, 4, 20, 30, 15, 13, 5, 15, 5, 13, 14, 13, 31, 24, 20, 7, 4, 7, 5, 16, 31, 6, + 7, 8, 30, 16, 30, 5, 28, 5, 32, 32, 15, 13, 23, 8, 7, 14, 14, 22, 13, 13, 23, 24, 23, 23, 32, 13, 31, 24, 7, 8, 31, 12, 8, 4, 13, 30, 31, 29, 24, 31, 21, 23, 30, 6, 15, 32, 28, 32, 31, 22, 14, 23, 12, 7, 23, 24, 6, 21, 24, 8, 24, 20, 20, 32, 20, 30, 22, 12, 22, 12, 20, 29, 32, 5, 5, 6, 30, 12, 31, 16, 15, 31, 24, 30, 13, 22, 22, 29, 32, 28, 32, 4, 29, 20, 7, 7, 16, 12, 14, 23, 24, 6, 32, 28, 6, 16, 13, 7, 6, 22, 12, 8, 7, 7, 6, 20, 13, 30, 6, 30, 32, 31, 4, 28, 22, 22, 30, 31, + 5, 28, 5, 4, 28, 7, 16, 5, 20, 4, 7, 13, 30, 20, 20, 8, 7, 32, 21, 7, 20, 13, 22, 5, 4, 21, 23, 8, 24, 7, 32, 23, 13, 12, 16, 4, 29, 5, 23, 28, 4, 13, 6, 8, 4, 16, 15, 22, 12, 32, 6, 14, 14, 28, 15, 16, 24, 8, 13, 16, 23, 23, 16, 31, 23, 31, 14, 29, 24, 16, 32, 4, 14, 4, 4, 5, 23, 21, 29, 21, 23, 20, 30, 29, 28, 28, 23, 13, 5, 31, 16, 21, 12, 23, 32, 8, 12, 22, 8, 13, 28, 6, 16, 20, 21, 14, 13, 12, 16, 13, 32, 23, 6, 16, 16, 15, 22, 4, 30, 30, 8, 31, 14, 8, 15, 28, 4, 15, + 7, 23, 12, 8, 12, 31, 16, 29, 24, 29, 4, 31, 24, 23, 29, 12, 31, 6, 21, 32, 4, 5, 31, 12, 32, 13, 4, 8, 24, 29, 24, 16, 6, 5, 12, 15, 21, 6, 21, 8, 32, 30, 5, 7, 21, 20, 31, 21, 7, 20, 30, 24, 31, 4, 22, 21, 24, 23, 5, 29, 29, 6, 5, 29, 31, 4, 13, 4, 6, 5, 14, 13, 28, 32, 15, 28, 28, 6, 32, 23, 21, 29, 21, 23, 30, 31, 7, 31, 20, 16, 7, 23, 15, 13, 32, 30, 21, 20, 22, 22, 13, 21, 28, 20, 30, 7, 4, 8, 12, 32, 29, 14, 23, 12, 5, 20, 21, 28, 7, 30, 20, 7, 7, 30, 14, 13, 31, 6, + 5, 24, 32, 22, 31, 24, 31, 20, 5, 30, 13, 24, 28, 4, 24, 15, 6, 13, 4, 13, 5, 7, 30, 7, 13, 29, 16, 4, 21, 28, 14, 12, 14, 24, 30, 4, 22, 24, 15, 14, 28, 24, 31, 15, 15, 24, 16, 8, 28, 24, 12, 8, 13, 23, 12, 6, 15, 21, 12, 22, 22, 31, 23, 28, 20, 16, 30, 31, 16, 29, 13, 7, 31, 12, 5, 23, 24, 29, 24, 15, 8, 21, 22, 28, 28, 6, 5, 15, 16, 14, 13, 15, 15, 8, 8, 13, 20, 12, 28, 31, 28, 16, 8, 8, 12, 21, 16, 30, 23, 5, 12, 28, 23, 14, 23, 7, 5, 16, 16, 24, 23, 4, 15, 31, 13, 29, 28, 30, + 22, 12, 22, 6, 31, 31, 15, 20, 28, 12, 28, 13, 5, 31, 31, 30, 12, 23, 7, 8, 20, 12, 14, 22, 7, 8, 28, 7, 6, 20, 16, 31, 29, 5, 30, 31, 29, 15, 24, 12, 30, 23, 12, 6, 7, 8, 29, 31, 14, 12, 14, 12, 13, 7, 15, 16, 29, 16, 30, 32, 21, 22, 14, 15, 29, 15, 13, 15, 20, 21, 31, 30, 30, 32, 20, 16, 16, 21, 23, 20, 32, 20, 31, 14, 7, 21, 23, 13, 15, 7, 16, 32, 4, 22, 7, 14, 8, 7, 31, 20, 30, 6, 13, 7, 22, 5, 32, 8, 24, 22, 21, 22, 8, 12, 29, 16, 20, 31, 24, 4, 12, 20, 24, 22, 32, 21, 16, 30, + 8, 28, 12, 29, 12, 16, 21, 23, 7, 15, 13, 28, 30, 31, 24, 14, 24, 6, 31, 29, 22, 13, 21, 21, 5, 29, 7, 32, 7, 8, 13, 32, 31, 15, 30, 24, 6, 22, 30, 13, 12, 28, 5, 7, 6, 23, 6, 24, 8, 15, 4, 30, 21, 20, 20, 12, 28, 7, 16, 8, 32, 24, 29, 13, 32, 23, 22, 31, 7, 30, 8, 22, 12, 29, 32, 16, 28, 7, 13, 12, 8, 31, 31, 4, 23, 20, 4, 7, 13, 7, 15, 24, 15, 24, 23, 32, 15, 30, 12, 30, 21, 16, 29, 12, 4, 30, 4, 30, 29, 4, 16, 13, 23, 23, 16, 12, 29, 6, 8, 29, 12, 7, 15, 8, 32, 12, 12, 6, + 28, 24, 16, 7, 14, 14, 15, 30, 29, 7, 7, 30, 28, 14, 23, 22, 32, 24, 23, 29, 28, 16, 24, 6, 6, 12, 16, 16, 32, 24, 24, 23, 7, 8, 13, 12, 30, 20, 32, 15, 20, 24, 14, 30, 13, 13, 20, 30, 6, 12, 8, 23, 29, 14, 30, 6, 7, 32, 22, 30, 12, 14, 15, 31, 8, 22, 4, 13, 24, 24, 23, 22, 5, 30, 8, 21, 7, 12, 23, 21, 7, 23, 8, 30, 21, 8, 7, 21, 13, 6, 6, 31, 4, 24, 32, 13, 28, 6, 23, 30, 13, 16, 22, 30, 14, 15, 23, 31, 20, 22, 16, 8, 7, 12, 28, 7, 5, 12, 15, 32, 29, 5, 20, 7, 4, 6, 7, 31, + 22, 21, 21, 28, 23, 12, 22, 22, 21, 16, 16, 24, 28, 31, 24, 20, 21, 32, 32, 6, 6, 24, 12, 32, 31, 8, 23, 13, 30, 4, 20, 12, 21, 8, 23, 4, 13, 6, 8, 13, 5, 12, 21, 6, 22, 21, 4, 8, 8, 15, 30, 8, 12, 30, 32, 24, 14, 31, 23, 15, 15, 31, 20, 32, 15, 23, 31, 28, 24, 13, 5, 32, 21, 13, 5, 8, 13, 31, 8, 5, 4, 23, 32, 13, 21, 16, 20, 16, 29, 32, 15, 21, 28, 15, 24, 22, 16, 16, 16, 22, 7, 22, 24, 23, 16, 21, 16, 22, 7, 31, 13, 31, 32, 24, 16, 5, 28, 29, 7, 14, 29, 12, 23, 13, 23, 8, 30, 13, + 28, 28, 14, 31, 22, 31, 29, 4, 14, 31, 8, 15, 14, 22, 12, 23, 23, 20, 16, 16, 20, 4, 16, 7, 20, 32, 16, 20, 13, 14, 7, 28, 21, 16, 12, 6, 13, 8, 6, 4, 20, 8, 24, 14, 22, 14, 14, 30, 16, 23, 21, 5, 5, 15, 8, 23, 4, 8, 14, 24, 24, 13, 22, 7, 6, 30, 5, 14, 23, 30, 24, 16, 30, 30, 13, 13, 30, 21, 24, 8, 6, 5, 14, 8, 24, 5, 8, 15, 13, 31, 29, 12, 32, 32, 29, 14, 31, 22, 21, 29, 8, 12, 13, 32, 20, 12, 21, 21, 8, 23, 22, 14, 14, 8, 29, 24, 24, 30, 14, 30, 5, 12, 23, 4, 8, 31, 23, 28, + 14, 24, 15, 15, 30, 13, 14, 4, 13, 32, 23, 28, 24, 31, 8, 13, 6, 24, 24, 31, 30, 4, 28, 12, 20, 30, 28, 22, 15, 5, 4, 7, 22, 12, 23, 14, 16, 29, 8, 8, 29, 6, 28, 31, 29, 31, 30, 4, 23, 28, 15, 5, 29, 8, 14, 28, 13, 15, 24, 31, 15, 5, 13, 6, 5, 12, 32, 13, 32, 15, 21, 23, 20, 5, 22, 13, 21, 5, 16, 7, 16, 30, 8, 31, 32, 29, 32, 4, 29, 21, 16, 14, 7, 28, 29, 22, 6, 8, 15, 5, 20, 31, 30, 32, 16, 22, 22, 16, 12, 14, 29, 16, 6, 32, 32, 20, 16, 20, 29, 21, 22, 4, 16, 14, 32, 8, 6, 14, + 21, 32, 32, 24, 7, 24, 20, 4, 7, 13, 12, 13, 23, 8, 29, 20, 6, 28, 21, 28, 14, 8, 20, 12, 13, 15, 30, 15, 12, 8, 22, 21, 29, 15, 23, 30, 5, 14, 12, 22, 32, 4, 16, 6, 16, 5, 30, 30, 12, 24, 4, 4, 5, 12, 24, 31, 22, 7, 13, 16, 31, 21, 13, 13, 13, 4, 32, 14, 8, 28, 7, 15, 13, 28, 15, 15, 7, 29, 20, 22, 5, 29, 23, 32, 15, 28, 14, 22, 23, 20, 5, 30, 21, 6, 13, 4, 12, 13, 15, 32, 8, 32, 7, 15, 14, 16, 5, 20, 30, 21, 4, 13, 14, 4, 20, 7, 6, 29, 14, 7, 32, 21, 14, 32, 7, 22, 31, 8, + 28, 14, 6, 7, 31, 32, 20, 14, 8, 7, 24, 12, 14, 31, 28, 8, 24, 16, 28, 29, 4, 6, 24, 24, 30, 21, 30, 21, 32, 12, 24, 16, 8, 12, 30, 8, 12, 28, 7, 16, 8, 20, 20, 32, 8, 20, 6, 12, 21, 32, 28, 20, 22, 22, 4, 23, 32, 29, 16, 24, 6, 30, 20, 13, 32, 12, 21, 5, 22, 6, 21, 16, 15, 12, 20, 21, 5, 22, 29, 28, 6, 21, 14, 14, 20, 28, 7, 14, 7, 16, 30, 23, 16, 31, 28, 16, 12, 5, 31, 23, 8, 29, 4, 7, 8, 13, 30, 13, 28, 23, 15, 29, 14, 30, 21, 12, 29, 20, 30, 7, 8, 16, 15, 6, 8, 30, 32, 24, + 4, 8, 30, 24, 21, 22, 5, 15, 5, 28, 21, 30, 12, 24, 30, 5, 29, 21, 4, 20, 31, 28, 29, 8, 30, 20, 30, 30, 5, 15, 28, 7, 31, 22, 12, 7, 6, 23, 7, 5, 32, 7, 30, 22, 23, 4, 28, 7, 23, 4, 24, 16, 20, 21, 5, 4, 7, 7, 28, 32, 29, 6, 23, 7, 15, 32, 31, 7, 22, 31, 21, 24, 14, 4, 5, 16, 12, 24, 24, 29, 29, 32, 4, 8, 14, 20, 28, 31, 24, 22, 20, 16, 5, 32, 12, 7, 7, 16, 29, 21, 14, 31, 22, 14, 20, 8, 24, 4, 12, 13, 24, 31, 28, 31, 16, 30, 21, 13, 14, 7, 30, 24, 14, 13, 23, 24, 30, 28, + 24, 29, 22, 29, 23, 31, 28, 6, 8, 8, 6, 29, 14, 5, 6, 28, 5, 6, 30, 29, 4, 20, 5, 24, 23, 6, 8, 15, 5, 4, 28, 23, 30, 16, 13, 15, 7, 20, 15, 12, 29, 30, 14, 28, 5, 24, 31, 16, 14, 20, 30, 30, 12, 14, 12, 4, 5, 15, 24, 4, 31, 16, 5, 21, 31, 29, 14, 5, 31, 15, 20, 8, 8, 6, 14, 22, 5, 7, 6, 28, 31, 22, 4, 4, 13, 32, 24, 12, 5, 22, 28, 15, 14, 8, 31, 28, 31, 23, 24, 16, 21, 5, 13, 6, 15, 20, 14, 4, 14, 14, 14, 23, 24, 30, 13, 16, 8, 14, 16, 21, 29, 5, 32, 14, 23, 5, 31, 14, + 16, 12, 15, 7, 24, 5, 15, 6, 21, 28, 20, 7, 5, 8, 28, 32, 30, 21, 4, 4, 31, 8, 23, 14, 14, 31, 16, 21, 14, 23, 23, 24, 5, 28, 16, 32, 15, 8, 29, 30, 20, 22, 30, 13, 15, 32, 32, 23, 29, 7, 22, 8, 8, 32, 32, 28, 16, 13, 31, 15, 8, 28, 6, 28, 7, 8, 6, 22, 30, 21, 14, 14, 32, 13, 30, 21, 31, 28, 5, 4, 16, 16, 31, 29, 8, 5, 20, 5, 16, 21, 30, 7, 8, 5, 31, 29, 32, 7, 31, 22, 16, 24, 24, 5, 21, 13, 21, 8, 4, 12, 21, 21, 21, 7, 5, 24, 6, 8, 31, 7, 16, 16, 21, 28, 20, 15, 31, 24, + 21, 6, 5, 30, 16, 16, 20, 6, 8, 5, 29, 16, 5, 21, 28, 29, 4, 30, 8, 15, 20, 22, 12, 31, 31, 21, 21, 15, 15, 21, 4, 20, 31, 23, 28, 6, 22, 12, 7, 29, 23, 14, 21, 31, 21, 6, 7, 32, 5, 5, 5, 7, 32, 24, 31, 8, 6, 8, 32, 20, 14, 21, 7, 21, 8, 28, 12, 32, 6, 14, 8, 20, 24, 23, 8, 15, 16, 8, 30, 31, 21, 6, 30, 31, 5, 12, 13, 29, 32, 7, 13, 23, 24, 5, 5, 23, 20, 31, 7, 22, 29, 21, 24, 29, 32, 7, 12, 31, 23, 15, 7, 22, 20, 21, 32, 30, 31, 29, 16, 5, 23, 20, 4, 29, 15, 29, 5, 20, + 16, 23, 5, 15, 24, 28, 28, 22, 22, 15, 8, 29, 16, 29, 22, 13, 4, 20, 32, 5, 29, 5, 8, 13, 28, 32, 5, 23, 5, 5, 13, 24, 4, 12, 12, 6, 14, 13, 16, 8, 20, 20, 29, 8, 23, 14, 15, 23, 12, 20, 8, 14, 14, 16, 8, 6, 15, 5, 12, 7, 14, 12, 13, 6, 23, 12, 6, 5, 5, 8, 22, 28, 16, 6, 14, 15, 16, 14, 6, 14, 13, 14, 20, 12, 22, 12, 28, 6, 7, 24, 8, 22, 12, 12, 12, 6, 32, 5, 29, 8, 20, 21, 20, 7, 28, 23, 30, 5, 22, 15, 32, 4, 21, 20, 32, 22, 5, 23, 13, 23, 21, 6, 22, 14, 30, 20, 24, 32, + 32, 24, 30, 31, 22, 8, 30, 24, 14, 12, 24, 15, 29, 5, 28, 5, 28, 12, 5, 4, 13, 29, 16, 8, 29, 31, 24, 12, 21, 29, 24, 29, 7, 8, 32, 14, 31, 30, 32, 22, 7, 8, 7, 7, 22, 14, 23, 5, 22, 8, 14, 4, 22, 13, 22, 16, 4, 24, 32, 13, 12, 30, 7, 32, 15, 30, 24, 4, 28, 5, 21, 4, 29, 15, 31, 23, 6, 8, 31, 12, 12, 23, 29, 14, 12, 14, 29, 32, 5, 6, 4, 14, 29, 12, 28, 12, 13, 20, 7, 22, 6, 13, 8, 31, 28, 13, 8, 7, 28, 5, 30, 32, 12, 15, 14, 8, 6, 16, 20, 5, 13, 31, 24, 32, 15, 6, 14, 23, + 8, 32, 29, 14, 29, 20, 12, 28, 23, 12, 24, 22, 6, 28, 13, 22, 30, 31, 8, 21, 21, 24, 5, 15, 24, 15, 6, 21, 30, 6, 22, 21, 16, 4, 28, 7, 28, 15, 21, 12, 8, 4, 8, 29, 31, 14, 4, 6, 8, 20, 31, 31, 4, 24, 23, 29, 28, 31, 12, 30, 12, 4, 14, 6, 8, 21, 30, 16, 4, 4, 8, 32, 5, 30, 6, 6, 29, 16, 29, 21, 13, 24, 31, 6, 32, 8, 6, 5, 24, 7, 21, 22, 16, 21, 21, 15, 30, 7, 8, 6, 5, 20, 13, 5, 7, 20, 15, 6, 21, 23, 14, 32, 15, 8, 24, 31, 4, 30, 30, 20, 22, 20, 12, 14, 28, 7, 24, 24, + 29, 24, 15, 8, 24, 31, 31, 5, 6, 30, 24, 6, 32, 7, 8, 31, 30, 15, 21, 6, 23, 7, 15, 12, 20, 20, 22, 30, 13, 29, 32, 20, 31, 24, 32, 13, 28, 12, 29, 7, 22, 15, 24, 22, 28, 7, 31, 32, 32, 20, 28, 28, 8, 8, 32, 23, 31, 12, 29, 29, 8, 28, 20, 29, 15, 24, 22, 32, 14, 15, 5, 14, 30, 15, 20, 8, 29, 14, 6, 29, 20, 5, 6, 6, 15, 5, 14, 13, 23, 31, 20, 31, 24, 21, 16, 13, 12, 16, 32, 32, 32, 30, 23, 30, 6, 4, 15, 8, 21, 29, 24, 23, 7, 8, 5, 12, 29, 23, 15, 12, 24, 6, 30, 12, 7, 14, 22, 23, + 4, 4, 22, 8, 6, 4, 12, 13, 29, 20, 24, 5, 31, 8, 12, 4, 8, 4, 20, 31, 6, 6, 24, 21, 24, 28, 6, 21, 31, 24, 24, 31, 28, 30, 30, 16, 4, 31, 12, 24, 12, 12, 4, 12, 5, 7, 28, 30, 21, 30, 24, 20, 21, 14, 32, 23, 21, 5, 6, 5, 22, 31, 7, 30, 4, 8, 16, 16, 32, 20, 12, 5, 29, 7, 8, 23, 4, 16, 20, 8, 21, 13, 20, 23, 16, 29, 23, 8, 8, 15, 20, 23, 7, 29, 20, 16, 29, 8, 21, 12, 8, 20, 31, 22, 12, 7, 14, 16, 7, 22, 8, 28, 6, 8, 23, 6, 31, 13, 12, 23, 32, 5, 16, 15, 24, 8, 15, 28, + 29, 8, 31, 6, 23, 12, 21, 6, 6, 28, 15, 16, 21, 5, 16, 15, 24, 23, 4, 8, 14, 22, 24, 24, 20, 24, 28, 22, 29, 32, 29, 7, 32, 14, 29, 7, 21, 6, 21, 32, 29, 20, 4, 13, 23, 28, 7, 31, 12, 7, 6, 21, 7, 24, 28, 7, 20, 8, 29, 20, 6, 29, 6, 28, 4, 32, 12, 16, 8, 8, 6, 24, 28, 31, 23, 6, 6, 21, 32, 30, 6, 5, 7, 31, 32, 29, 21, 28, 7, 30, 15, 28, 12, 22, 21, 8, 6, 31, 15, 6, 32, 14, 8, 24, 14, 13, 24, 15, 28, 6, 23, 31, 4, 13, 21, 20, 16, 15, 28, 13, 20, 23, 21, 30, 6, 5, 7, 21, + 16, 30, 7, 32, 15, 22, 28, 28, 22, 6, 28, 12, 29, 30, 12, 32, 21, 20, 12, 8, 22, 28, 6, 23, 29, 14, 14, 12, 13, 6, 8, 31, 20, 28, 20, 4, 13, 12, 32, 28, 13, 15, 5, 6, 6, 29, 28, 24, 20, 28, 29, 30, 7, 16, 8, 31, 31, 20, 21, 31, 32, 15, 5, 28, 28, 28, 21, 5, 30, 30, 22, 4, 14, 22, 5, 5, 15, 15, 16, 32, 22, 16, 22, 28, 5, 30, 16, 24, 7, 7, 30, 20, 12, 16, 16, 22, 14, 31, 4, 13, 5, 21, 16, 13, 29, 23, 7, 28, 22, 30, 29, 24, 21, 30, 14, 13, 14, 8, 32, 20, 29, 32, 8, 30, 7, 16, 15, 29, + 30, 20, 4, 32, 23, 28, 22, 15, 32, 16, 13, 30, 23, 13, 31, 29, 29, 29, 22, 5, 15, 6, 29, 12, 22, 28, 30, 29, 30, 8, 8, 13, 29, 29, 21, 15, 6, 14, 8, 12, 32, 28, 28, 8, 16, 6, 13, 5, 7, 21, 14, 7, 21, 30, 14, 29, 8, 20, 14, 31, 23, 31, 24, 32, 28, 5, 32, 24, 23, 29, 23, 31, 20, 7, 12, 31, 12, 5, 14, 21, 23, 6, 12, 20, 8, 31, 13, 24, 31, 8, 32, 6, 14, 23, 28, 31, 21, 15, 6, 23, 24, 22, 20, 6, 15, 23, 28, 6, 30, 32, 32, 4, 20, 32, 20, 6, 21, 30, 22, 6, 4, 7, 31, 7, 12, 14, 4, 13, + 4, 20, 30, 28, 12, 28, 23, 4, 14, 24, 24, 22, 8, 6, 30, 13, 21, 15, 29, 12, 16, 24, 29, 20, 21, 21, 7, 28, 7, 21, 22, 29, 22, 4, 6, 15, 28, 5, 28, 8, 24, 31, 5, 13, 28, 4, 30, 5, 24, 31, 22, 20, 16, 24, 5, 29, 29, 32, 30, 21, 24, 31, 22, 30, 31, 20, 16, 28, 14, 30, 12, 5, 5, 4, 29, 6, 23, 13, 15, 22, 24, 24, 24, 5, 4, 4, 6, 7, 20, 12, 16, 21, 30, 28, 29, 15, 16, 32, 29, 5, 20, 32, 32, 32, 7, 15, 24, 5, 30, 13, 31, 15, 22, 12, 28, 7, 16, 8, 29, 5, 5, 8, 30, 29, 4, 21, 30, 24, + 30, 7, 20, 32, 5, 12, 6, 15, 22, 13, 7, 12, 13, 5, 29, 31, 14, 6, 7, 22, 15, 24, 29, 12, 4, 31, 6, 32, 14, 31, 15, 30, 5, 21, 20, 7, 13, 16, 5, 22, 15, 13, 5, 5, 6, 21, 13, 30, 21, 16, 6, 29, 15, 5, 13, 16, 16, 30, 5, 15, 31, 14, 31, 7, 22, 24, 28, 5, 5, 14, 30, 15, 22, 6, 32, 24, 31, 28, 23, 28, 23, 6, 30, 4, 14, 31, 31, 30, 31, 28, 28, 24, 4, 28, 23, 12, 24, 32, 21, 32, 20, 14, 24, 6, 24, 5, 32, 31, 28, 4, 22, 20, 32, 5, 5, 14, 28, 5, 15, 28, 31, 32, 5, 5, 20, 14, 29, 12, + 14, 20, 28, 6, 23, 7, 22, 20, 22, 12, 21, 5, 29, 32, 12, 31, 31, 21, 28, 6, 16, 12, 24, 16, 15, 22, 4, 4, 29, 28, 7, 8, 23, 5, 6, 22, 6, 8, 8, 31, 8, 29, 5, 31, 4, 23, 30, 21, 8, 12, 16, 30, 15, 5, 24, 12, 14, 23, 8, 6, 32, 12, 4, 16, 4, 31, 20, 21, 7, 31, 8, 16, 21, 5, 32, 14, 28, 31, 28, 5, 6, 8, 23, 7, 4, 21, 31, 28, 14, 20, 20, 4, 8, 16, 28, 15, 15, 28, 6, 31, 22, 8, 14, 31, 7, 32, 20, 32, 31, 30, 6, 22, 12, 32, 22, 5, 23, 12, 14, 30, 31, 30, 5, 22, 8, 15, 14, 13, + 5, 22, 5, 28, 20, 15, 6, 24, 32, 31, 32, 32, 15, 31, 23, 29, 32, 24, 32, 28, 16, 12, 32, 14, 23, 20, 29, 22, 7, 13, 4, 24, 30, 24, 22, 5, 20, 30, 22, 4, 15, 28, 6, 14, 31, 31, 29, 28, 16, 22, 23, 12, 15, 13, 28, 20, 15, 15, 8, 21, 12, 24, 32, 16, 22, 22, 5, 32, 8, 29, 28, 30, 28, 6, 7, 12, 8, 21, 13, 23, 24, 30, 31, 24, 31, 15, 20, 31, 24, 24, 20, 21, 29, 8, 21, 12, 7, 24, 15, 23, 12, 29, 23, 22, 29, 8, 16, 14, 13, 22, 13, 5, 6, 20, 16, 32, 30, 13, 22, 5, 31, 14, 7, 32, 28, 6, 28, 20, + 20, 23, 30, 15, 5, 32, 5, 6, 31, 32, 23, 31, 4, 22, 13, 32, 28, 30, 29, 31, 28, 20, 12, 20, 13, 24, 21, 13, 22, 16, 14, 32, 8, 31, 28, 7, 28, 8, 12, 22, 31, 15, 23, 24, 13, 5, 32, 29, 4, 29, 32, 28, 23, 29, 23, 12, 31, 16, 8, 30, 6, 28, 23, 13, 21, 5, 16, 32, 12, 14, 12, 32, 23, 14, 28, 8, 31, 8, 32, 5, 30, 15, 6, 28, 14, 28, 23, 29, 13, 24, 30, 8, 12, 29, 14, 29, 28, 29, 8, 24, 7, 5, 32, 24, 8, 16, 29, 12, 31, 15, 30, 20, 7, 6, 13, 4, 13, 23, 8, 16, 20, 4, 7, 31, 12, 16, 16, 15, + 29, 30, 16, 31, 5, 14, 12, 5, 20, 31, 23, 20, 14, 14, 31, 12, 21, 21, 24, 21, 23, 29, 6, 5, 5, 4, 13, 12, 20, 8, 32, 24, 6, 15, 16, 5, 21, 21, 24, 28, 13, 28, 7, 6, 6, 4, 15, 31, 22, 8, 5, 30, 4, 22, 15, 30, 21, 28, 20, 5, 16, 22, 32, 7, 7, 12, 28, 23, 32, 4, 13, 5, 32, 24, 32, 4, 13, 6, 20, 30, 32, 28, 16, 7, 28, 23, 8, 22, 21, 20, 13, 7, 32, 14, 30, 13, 4, 6, 32, 28, 24, 30, 32, 13, 23, 28, 20, 5, 32, 22, 23, 31, 29, 29, 32, 30, 28, 24, 15, 24, 14, 24, 29, 28, 8, 28, 22, 30, + 20, 16, 7, 6, 6, 22, 20, 28, 5, 22, 5, 31, 20, 6, 8, 12, 23, 21, 8, 4, 29, 21, 30, 31, 31, 24, 21, 32, 32, 22, 12, 15, 14, 6, 22, 8, 32, 4, 5, 5, 24, 5, 29, 30, 29, 29, 5, 8, 23, 29, 24, 5, 7, 12, 31, 24, 22, 15, 8, 5, 28, 5, 31, 13, 29, 23, 22, 29, 28, 14, 6, 14, 21, 32, 14, 29, 4, 14, 32, 23, 15, 28, 32, 4, 20, 6, 6, 29, 30, 28, 28, 5, 28, 21, 14, 14, 30, 13, 24, 4, 20, 21, 31, 30, 32, 4, 15, 16, 30, 29, 7, 14, 14, 13, 30, 16, 32, 22, 21, 15, 21, 8, 14, 20, 32, 7, 12, 22, + 31, 32, 14, 31, 6, 23, 31, 24, 30, 21, 28, 8, 12, 12, 4, 28, 12, 16, 12, 29, 31, 21, 23, 6, 23, 6, 28, 20, 13, 7, 31, 31, 12, 14, 29, 14, 12, 6, 5, 12, 13, 20, 20, 21, 20, 14, 23, 24, 6, 12, 5, 7, 28, 20, 12, 31, 22, 12, 21, 5, 8, 5, 15, 24, 16, 5, 14, 24, 14, 24, 29, 32, 22, 23, 15, 32, 4, 21, 4, 5, 29, 12, 30, 13, 7, 31, 12, 22, 31, 8, 32, 31, 7, 7, 24, 4, 12, 6, 29, 24, 6, 31, 30, 7, 4, 20, 30, 7, 6, 23, 21, 28, 16, 4, 20, 21, 14, 8, 23, 31, 30, 22, 21, 12, 4, 28, 4, 5, + 15, 28, 32, 12, 32, 15, 31, 28, 7, 30, 4, 29, 15, 20, 16, 22, 12, 22, 14, 31, 28, 21, 15, 22, 23, 7, 12, 21, 24, 22, 15, 12, 28, 16, 15, 31, 32, 16, 13, 29, 31, 13, 30, 12, 32, 15, 30, 16, 15, 24, 29, 8, 8, 21, 30, 13, 16, 5, 4, 5, 30, 8, 6, 8, 29, 29, 7, 30, 6, 31, 15, 4, 6, 5, 21, 4, 8, 7, 6, 12, 8, 8, 21, 20, 30, 32, 14, 5, 13, 32, 14, 20, 13, 6, 29, 21, 20, 22, 24, 4, 31, 12, 4, 4, 4, 16, 13, 16, 12, 15, 20, 5, 31, 21, 20, 32, 22, 23, 23, 12, 32, 31, 8, 22, 13, 14, 30, 32, + 31, 5, 4, 4, 20, 14, 4, 16, 12, 7, 28, 14, 31, 21, 12, 21, 22, 8, 24, 12, 5, 23, 7, 20, 21, 24, 4, 31, 4, 28, 30, 15, 31, 20, 31, 14, 22, 21, 29, 8, 32, 32, 21, 14, 4, 15, 15, 4, 16, 4, 16, 12, 22, 16, 5, 16, 8, 4, 32, 32, 21, 15, 15, 4, 28, 16, 6, 31, 21, 21, 28, 32, 30, 31, 28, 15, 29, 6, 24, 20, 20, 15, 22, 29, 29, 23, 23, 4, 28, 6, 6, 13, 20, 16, 6, 28, 14, 31, 16, 16, 29, 24, 14, 4, 12, 23, 30, 7, 24, 12, 30, 7, 12, 21, 31, 4, 23, 8, 21, 22, 15, 24, 6, 24, 21, 21, 16, 22, + 6, 31, 24, 8, 16, 16, 29, 21, 12, 12, 30, 31, 21, 28, 14, 6, 29, 8, 21, 20, 15, 29, 15, 5, 28, 6, 6, 13, 14, 7, 28, 16, 29, 6, 20, 28, 14, 21, 7, 21, 23, 22, 6, 12, 32, 8, 8, 23, 31, 12, 5, 7, 22, 28, 31, 30, 7, 15, 32, 31, 12, 24, 13, 6, 21, 6, 24, 15, 22, 22, 28, 8, 12, 32, 4, 22, 12, 30, 31, 28, 20, 8, 5, 13, 16, 32, 6, 16, 12, 6, 13, 16, 14, 24, 8, 32, 4, 12, 7, 8, 28, 15, 20, 20, 31, 24, 5, 14, 7, 22, 16, 6, 15, 32, 4, 5, 29, 7, 16, 21, 5, 7, 22, 7, 6, 5, 32, 16, + 21, 28, 6, 5, 23, 21, 5, 5, 32, 22, 15, 28, 12, 15, 28, 16, 13, 32, 12, 21, 20, 12, 4, 21, 14, 32, 24, 12, 29, 6, 23, 22, 8, 7, 30, 21, 6, 20, 20, 21, 6, 7, 16, 31, 12, 5, 28, 14, 7, 7, 5, 22, 30, 24, 16, 15, 8, 12, 24, 15, 5, 15, 30, 16, 14, 7, 12, 7, 12, 15, 23, 21, 30, 22, 24, 5, 29, 8, 13, 32, 16, 16, 6, 29, 32, 23, 32, 7, 16, 15, 5, 8, 5, 7, 23, 6, 23, 14, 14, 14, 4, 5, 29, 23, 6, 7, 20, 7, 16, 6, 22, 13, 28, 20, 14, 6, 32, 15, 14, 21, 32, 30, 7, 6, 24, 8, 8, 24, + 8, 15, 23, 20, 14, 21, 16, 32, 16, 32, 16, 28, 31, 23, 4, 23, 15, 23, 14, 16, 30, 20, 12, 24, 16, 13, 5, 8, 16, 15, 15, 5, 22, 30, 21, 30, 5, 32, 23, 16, 21, 7, 6, 30, 4, 5, 23, 12, 16, 23, 23, 7, 23, 15, 15, 22, 14, 16, 14, 4, 20, 12, 6, 32, 30, 20, 15, 13, 4, 15, 30, 16, 31, 8, 21, 7, 5, 29, 13, 20, 13, 13, 7, 14, 7, 6, 20, 4, 21, 16, 14, 15, 13, 30, 28, 4, 29, 8, 16, 5, 31, 13, 31, 16, 20, 32, 16, 31, 24, 13, 14, 20, 5, 29, 32, 4, 21, 30, 14, 4, 28, 20, 14, 32, 4, 13, 5, 4, + 14, 30, 13, 20, 4, 22, 4, 23, 15, 8, 21, 31, 21, 6, 24, 22, 16, 6, 12, 7, 14, 15, 30, 29, 5, 6, 22, 22, 13, 22, 6, 22, 5, 31, 22, 20, 23, 6, 16, 24, 30, 24, 13, 12, 20, 31, 32, 31, 14, 23, 28, 16, 15, 13, 30, 4, 22, 6, 30, 15, 28, 24, 14, 4, 12, 22, 5, 32, 22, 20, 8, 7, 21, 5, 7, 15, 24, 31, 22, 14, 14, 4, 13, 32, 5, 31, 7, 20, 5, 15, 7, 24, 29, 4, 8, 32, 4, 13, 28, 5, 28, 6, 16, 16, 28, 5, 32, 6, 29, 6, 6, 6, 13, 31, 16, 14, 14, 16, 16, 32, 31, 29, 8, 23, 16, 7, 4, 15, + 31, 31, 4, 12, 5, 16, 29, 14, 23, 7, 24, 15, 16, 21, 22, 32, 20, 5, 16, 8, 4, 30, 16, 20, 22, 20, 5, 28, 12, 29, 7, 12, 21, 29, 16, 22, 15, 29, 20, 4, 23, 22, 31, 31, 24, 21, 20, 6, 30, 23, 12, 13, 28, 24, 8, 32, 7, 28, 21, 15, 12, 30, 20, 29, 28, 21, 24, 24, 5, 22, 12, 23, 4, 30, 14, 4, 20, 22, 8, 13, 30, 32, 28, 21, 7, 16, 12, 15, 4, 23, 31, 29, 22, 15, 20, 15, 8, 31, 31, 24, 16, 4, 13, 30, 6, 12, 31, 15, 20, 14, 8, 32, 31, 32, 31, 32, 12, 24, 32, 15, 24, 14, 22, 31, 15, 12, 13, 7, + 7, 15, 29, 8, 13, 14, 15, 28, 13, 13, 32, 8, 6, 31, 15, 5, 21, 13, 12, 15, 13, 8, 30, 13, 5, 21, 16, 20, 6, 6, 31, 13, 5, 30, 4, 6, 24, 12, 16, 13, 6, 29, 5, 24, 8, 14, 15, 28, 15, 23, 8, 16, 13, 31, 23, 22, 16, 28, 28, 20, 13, 7, 23, 16, 21, 21, 13, 31, 6, 14, 32, 24, 30, 7, 13, 32, 7, 15, 20, 31, 7, 14, 30, 32, 14, 24, 6, 6, 28, 4, 21, 32, 20, 5, 5, 12, 6, 12, 23, 12, 4, 28, 14, 6, 14, 32, 24, 28, 20, 8, 21, 29, 28, 8, 12, 31, 4, 24, 32, 24, 20, 13, 13, 5, 15, 30, 20, 15, + 24, 8, 28, 12, 28, 13, 15, 31, 12, 23, 6, 5, 23, 5, 30, 28, 12, 12, 22, 7, 16, 12, 23, 15, 4, 14, 24, 32, 7, 24, 21, 32, 22, 14, 5, 22, 22, 8, 32, 24, 32, 4, 12, 21, 12, 6, 23, 32, 22, 30, 24, 16, 5, 32, 24, 24, 15, 14, 21, 4, 23, 16, 22, 8, 13, 20, 32, 15, 15, 30, 30, 6, 24, 20, 24, 12, 7, 5, 14, 28, 16, 5, 28, 12, 28, 13, 20, 7, 16, 14, 6, 20, 4, 7, 5, 4, 7, 32, 22, 5, 30, 14, 30, 31, 31, 30, 13, 24, 20, 32, 20, 24, 13, 13, 5, 14, 4, 21, 12, 12, 4, 7, 32, 16, 6, 16, 8, 29, + 31, 5, 6, 8, 28, 23, 12, 21, 12, 30, 31, 32, 22, 24, 14, 14, 28, 6, 32, 12, 14, 20, 13, 20, 22, 31, 32, 20, 5, 6, 23, 8, 29, 5, 12, 5, 22, 22, 16, 32, 5, 4, 32, 12, 15, 31, 28, 28, 30, 29, 7, 21, 12, 29, 5, 32, 6, 20, 14, 29, 5, 20, 31, 29, 31, 24, 8, 13, 8, 15, 21, 20, 5, 21, 21, 28, 24, 29, 4, 16, 30, 31, 13, 30, 28, 13, 30, 30, 23, 15, 23, 22, 21, 15, 32, 20, 23, 7, 30, 12, 29, 32, 29, 24, 32, 20, 12, 29, 4, 20, 7, 21, 22, 24, 30, 29, 28, 22, 28, 15, 31, 24, 16, 14, 31, 29, 31, 5, + 7, 16, 23, 23, 22, 4, 4, 20, 23, 21, 22, 13, 13, 8, 12, 7, 29, 7, 22, 15, 29, 28, 14, 22, 22, 20, 23, 23, 13, 24, 15, 21, 15, 13, 8, 29, 29, 29, 14, 6, 15, 12, 8, 13, 6, 6, 20, 16, 20, 23, 7, 22, 32, 14, 28, 23, 7, 28, 28, 23, 28, 22, 30, 22, 32, 31, 4, 14, 16, 15, 16, 5, 8, 30, 7, 30, 13, 22, 20, 28, 21, 12, 16, 7, 28, 32, 7, 23, 29, 7, 21, 22, 23, 20, 14, 6, 13, 20, 7, 12, 7, 23, 4, 28, 16, 20, 7, 31, 30, 22, 20, 21, 12, 5, 16, 15, 5, 21, 16, 8, 14, 4, 23, 22, 28, 5, 24, 20, + 4, 23, 13, 5, 12, 8, 13, 4, 21, 29, 8, 8, 20, 21, 21, 32, 24, 14, 12, 21, 28, 8, 8, 15, 8, 15, 29, 4, 23, 29, 12, 8, 13, 32, 20, 29, 31, 20, 20, 21, 15, 8, 14, 14, 31, 30, 23, 30, 32, 29, 4, 22, 14, 16, 24, 20, 30, 22, 6, 23, 16, 29, 5, 12, 16, 20, 20, 23, 32, 32, 20, 31, 28, 28, 28, 24, 6, 28, 5, 28, 22, 7, 30, 21, 7, 8, 24, 16, 29, 14, 32, 8, 6, 14, 7, 21, 14, 6, 31, 28, 6, 30, 31, 24, 22, 5, 30, 31, 7, 14, 22, 8, 22, 12, 12, 24, 16, 7, 12, 5, 16, 31, 6, 24, 13, 24, 8, 12, + 16, 31, 30, 5, 6, 16, 7, 24, 16, 7, 8, 8, 12, 23, 22, 30, 12, 5, 21, 16, 30, 14, 5, 16, 6, 30, 4, 31, 7, 12, 23, 20, 15, 20, 30, 23, 22, 32, 23, 8, 29, 8, 32, 28, 4, 16, 31, 32, 7, 20, 12, 32, 28, 12, 24, 8, 13, 14, 14, 23, 4, 8, 30, 7, 14, 24, 15, 21, 30, 32, 21, 20, 14, 15, 14, 20, 12, 21, 4, 30, 4, 7, 29, 20, 15, 28, 28, 13, 20, 29, 24, 4, 21, 21, 6, 21, 30, 21, 31, 32, 5, 12, 8, 22, 21, 28, 8, 5, 32, 16, 13, 12, 12, 21, 31, 4, 24, 31, 30, 16, 12, 21, 32, 15, 29, 24, 22, 22, + 7, 22, 28, 32, 21, 20, 22, 14, 8, 30, 21, 29, 14, 31, 7, 21, 21, 5, 13, 12, 7, 23, 23, 15, 32, 7, 8, 15, 6, 21, 23, 5, 14, 22, 8, 28, 22, 23, 32, 20, 13, 30, 14, 8, 16, 6, 20, 29, 31, 4, 23, 5, 31, 30, 5, 5, 29, 30, 13, 14, 24, 14, 24, 6, 4, 7, 28, 6, 15, 5, 13, 12, 16, 13, 22, 13, 23, 21, 6, 31, 6, 4, 21, 15, 28, 15, 4, 8, 14, 16, 7, 31, 32, 24, 31, 23, 28, 29, 7, 30, 31, 23, 13, 29, 13, 32, 31, 4, 22, 28, 29, 14, 21, 30, 13, 24, 32, 31, 22, 15, 8, 12, 30, 12, 30, 31, 4, 31, + 32, 24, 12, 4, 31, 13, 32, 7, 28, 20, 22, 16, 16, 14, 8, 20, 4, 30, 12, 20, 20, 31, 24, 12, 21, 6, 21, 20, 4, 31, 22, 5, 28, 21, 7, 15, 13, 23, 8, 8, 29, 12, 22, 24, 29, 13, 32, 23, 14, 31, 32, 21, 5, 31, 15, 29, 20, 12, 13, 14, 29, 15, 21, 7, 7, 14, 30, 14, 20, 31, 16, 32, 30, 21, 31, 6, 8, 4, 22, 6, 22, 15, 21, 32, 13, 28, 29, 13, 8, 22, 24, 29, 21, 21, 20, 20, 21, 24, 30, 13, 32, 4, 24, 7, 13, 31, 30, 7, 28, 8, 31, 8, 29, 8, 30, 4, 29, 23, 14, 6, 6, 31, 4, 29, 15, 4, 30, 30, + 16, 8, 23, 15, 23, 6, 6, 28, 5, 20, 30, 24, 32, 22, 4, 30, 22, 5, 21, 13, 13, 20, 12, 30, 8, 12, 21, 31, 24, 6, 7, 5, 23, 6, 16, 12, 28, 24, 31, 24, 12, 16, 12, 4, 6, 30, 13, 6, 29, 14, 23, 4, 13, 23, 12, 21, 31, 23, 23, 24, 31, 12, 13, 24, 16, 20, 13, 29, 12, 8, 24, 28, 15, 24, 5, 30, 20, 23, 13, 16, 30, 5, 21, 6, 13, 23, 7, 32, 15, 16, 22, 30, 5, 30, 5, 32, 20, 32, 12, 29, 16, 20, 23, 15, 15, 16, 14, 29, 8, 13, 6, 12, 4, 6, 5, 12, 32, 28, 8, 12, 8, 4, 12, 4, 16, 7, 4, 13, + 15, 12, 20, 30, 21, 12, 8, 32, 22, 21, 31, 24, 23, 23, 23, 28, 32, 5, 30, 15, 13, 6, 32, 24, 5, 23, 5, 29, 5, 6, 6, 14, 7, 8, 24, 16, 8, 14, 30, 32, 7, 29, 12, 31, 13, 5, 29, 22, 6, 24, 4, 15, 32, 23, 12, 15, 31, 22, 12, 32, 32, 13, 8, 12, 28, 5, 23, 8, 24, 16, 8, 13, 6, 23, 23, 23, 30, 13, 8, 30, 21, 29, 8, 4, 21, 31, 12, 32, 20, 28, 28, 23, 12, 31, 7, 31, 23, 5, 32, 22, 7, 6, 4, 6, 30, 13, 30, 21, 15, 24, 6, 23, 22, 21, 24, 4, 16, 14, 31, 8, 16, 12, 14, 23, 29, 32, 29, 32, + 31, 20, 14, 5, 6, 7, 8, 7, 8, 32, 28, 14, 21, 16, 7, 23, 13, 29, 20, 24, 4, 15, 16, 8, 14, 14, 12, 14, 13, 31, 16, 13, 24, 29, 24, 32, 23, 13, 6, 4, 22, 29, 4, 20, 29, 15, 7, 8, 12, 22, 14, 21, 24, 4, 8, 29, 24, 29, 20, 30, 8, 13, 24, 12, 24, 13, 30, 12, 22, 14, 16, 32, 32, 13, 15, 15, 8, 20, 16, 32, 23, 22, 13, 22, 24, 29, 13, 22, 22, 24, 13, 30, 23, 4, 6, 6, 21, 6, 8, 6, 4, 31, 5, 31, 21, 15, 30, 28, 29, 23, 32, 7, 7, 14, 14, 12, 31, 31, 4, 31, 7, 7, 8, 12, 23, 31, 20, 23, + 24, 16, 13, 14, 20, 28, 21, 14, 15, 7, 14, 24, 22, 5, 29, 29, 22, 4, 22, 15, 24, 13, 32, 16, 5, 24, 21, 20, 12, 14, 15, 31, 7, 23, 16, 15, 20, 28, 14, 21, 5, 13, 8, 22, 28, 14, 7, 12, 7, 13, 28, 21, 6, 24, 4, 24, 20, 23, 6, 22, 6, 6, 4, 29, 15, 8, 13, 20, 20, 31, 7, 22, 24, 12, 7, 22, 21, 24, 7, 5, 16, 23, 30, 15, 15, 24, 8, 6, 13, 22, 7, 4, 22, 6, 15, 29, 28, 23, 28, 21, 20, 16, 24, 4, 23, 23, 20, 28, 20, 7, 32, 4, 30, 14, 28, 28, 29, 31, 12, 21, 5, 32, 16, 20, 15, 23, 6, 21, + 23, 7, 32, 24, 24, 8, 12, 4, 14, 13, 8, 20, 4, 15, 28, 8, 23, 30, 24, 7, 31, 4, 32, 28, 32, 32, 13, 12, 13, 31, 22, 15, 14, 32, 28, 14, 28, 23, 20, 8, 32, 15, 8, 15, 13, 23, 24, 12, 5, 30, 14, 13, 16, 29, 31, 32, 12, 8, 21, 4, 12, 14, 5, 23, 16, 23, 24, 15, 4, 22, 30, 20, 6, 12, 7, 20, 23, 13, 13, 5, 4, 32, 7, 8, 15, 20, 6, 30, 23, 14, 5, 8, 15, 14, 6, 8, 31, 20, 22, 8, 28, 29, 23, 15, 31, 14, 32, 16, 5, 32, 23, 22, 31, 13, 12, 23, 12, 29, 8, 7, 21, 4, 21, 14, 7, 21, 16, 24, + 32, 24, 31, 20, 24, 8, 20, 31, 21, 8, 6, 7, 32, 20, 4, 13, 13, 16, 20, 29, 22, 12, 16, 20, 12, 29, 23, 8, 16, 32, 23, 23, 29, 5, 5, 21, 28, 31, 30, 21, 28, 13, 32, 30, 5, 16, 13, 5, 31, 15, 20, 8, 12, 4, 30, 6, 14, 8, 14, 15, 5, 22, 16, 24, 29, 24, 6, 14, 30, 8, 4, 32, 6, 4, 7, 4, 4, 6, 5, 21, 16, 13, 8, 6, 16, 23, 29, 13, 20, 31, 24, 31, 6, 32, 22, 13, 15, 21, 5, 32, 14, 4, 32, 24, 8, 13, 4, 14, 7, 7, 23, 32, 7, 20, 4, 30, 29, 32, 6, 12, 32, 13, 5, 22, 23, 28, 20, 29, + 32, 12, 15, 30, 5, 5, 16, 14, 6, 7, 13, 4, 7, 7, 4, 14, 5, 24, 24, 13, 13, 6, 4, 4, 13, 29, 32, 31, 30, 7, 21, 7, 23, 12, 20, 5, 13, 31, 7, 14, 22, 23, 30, 30, 29, 4, 23, 5, 22, 4, 31, 20, 13, 30, 23, 31, 20, 29, 24, 23, 6, 30, 13, 16, 14, 24, 24, 30, 28, 20, 6, 28, 24, 13, 20, 31, 4, 22, 16, 20, 7, 14, 15, 23, 32, 5, 21, 24, 15, 31, 8, 7, 6, 28, 15, 21, 22, 6, 23, 28, 13, 13, 22, 4, 23, 16, 30, 6, 29, 12, 31, 7, 14, 29, 5, 24, 22, 8, 30, 22, 7, 32, 15, 5, 13, 24, 31, 16, + 6, 14, 20, 15, 15, 12, 16, 13, 4, 14, 12, 12, 28, 12, 31, 28, 22, 4, 32, 15, 28, 28, 29, 5, 15, 14, 31, 21, 28, 23, 30, 31, 8, 15, 13, 16, 23, 30, 23, 28, 23, 4, 4, 28, 23, 14, 28, 21, 6, 4, 13, 6, 23, 29, 28, 4, 16, 32, 24, 13, 7, 13, 13, 23, 4, 21, 21, 28, 7, 29, 29, 14, 16, 30, 13, 28, 31, 6, 20, 5, 15, 29, 7, 7, 30, 28, 7, 24, 6, 28, 15, 24, 22, 32, 13, 32, 14, 28, 32, 5, 4, 16, 15, 15, 4, 22, 32, 28, 29, 7, 24, 20, 15, 28, 4, 31, 20, 12, 30, 31, 13, 15, 14, 28, 7, 31, 29, 4, + 32, 21, 16, 24, 28, 6, 20, 29, 22, 29, 5, 23, 16, 6, 8, 23, 14, 6, 31, 13, 20, 31, 20, 20, 30, 4, 5, 23, 29, 8, 6, 28, 4, 6, 32, 20, 16, 13, 8, 23, 30, 31, 12, 5, 32, 15, 5, 6, 29, 24, 20, 20, 32, 16, 16, 22, 13, 30, 24, 30, 20, 14, 13, 30, 6, 28, 32, 24, 16, 14, 14, 16, 23, 16, 22, 13, 28, 22, 20, 29, 24, 32, 8, 32, 16, 4, 15, 7, 6, 29, 8, 15, 15, 24, 4, 30, 8, 15, 23, 14, 14, 14, 6, 20, 7, 31, 28, 32, 32, 6, 30, 7, 12, 22, 4, 4, 7, 22, 7, 8, 29, 24, 12, 24, 29, 8, 5, 6, + 12, 20, 4, 8, 12, 24, 12, 4, 31, 8, 12, 7, 20, 29, 16, 30, 24, 8, 6, 20, 28, 15, 22, 29, 8, 12, 8, 14, 29, 16, 20, 4, 21, 6, 29, 24, 13, 14, 30, 13, 4, 29, 30, 32, 4, 13, 21, 7, 13, 7, 22, 12, 5, 5, 29, 16, 5, 14, 22, 7, 14, 16, 15, 20, 13, 14, 23, 21, 23, 29, 6, 28, 8, 30, 21, 23, 20, 8, 22, 7, 15, 13, 21, 32, 31, 22, 30, 13, 5, 22, 23, 20, 7, 7, 12, 14, 7, 24, 21, 4, 14, 20, 24, 22, 30, 6, 15, 6, 8, 31, 12, 5, 6, 29, 5, 8, 7, 20, 13, 31, 4, 28, 23, 23, 32, 24, 29, 23, + 8, 28, 28, 30, 7, 13, 16, 28, 22, 23, 24, 31, 20, 6, 16, 24, 20, 31, 16, 24, 4, 32, 8, 22, 22, 6, 14, 21, 20, 7, 24, 22, 6, 8, 30, 30, 30, 6, 31, 13, 13, 24, 6, 30, 12, 20, 4, 16, 31, 12, 4, 20, 14, 24, 32, 5, 28, 32, 14, 20, 20, 28, 16, 4, 32, 31, 4, 20, 28, 13, 12, 8, 21, 29, 7, 20, 7, 12, 5, 20, 31, 13, 30, 7, 22, 4, 7, 15, 30, 15, 32, 24, 15, 6, 30, 21, 23, 14, 24, 32, 16, 31, 20, 30, 29, 32, 4, 20, 22, 30, 20, 23, 12, 15, 30, 29, 28, 22, 21, 8, 4, 29, 28, 30, 13, 23, 30, 23, + 32, 23, 23, 28, 8, 15, 6, 32, 29, 4, 7, 32, 7, 22, 4, 24, 6, 29, 4, 4, 5, 24, 14, 7, 15, 16, 4, 22, 8, 15, 13, 21, 15, 4, 24, 14, 5, 14, 22, 13, 6, 21, 8, 22, 7, 6, 21, 21, 12, 24, 31, 12, 31, 15, 20, 22, 13, 6, 31, 24, 32, 31, 20, 4, 7, 13, 8, 21, 8, 22, 30, 8, 16, 30, 21, 12, 15, 21, 29, 4, 22, 24, 8, 7, 14, 7, 32, 23, 8, 31, 16, 21, 12, 24, 24, 20, 5, 32, 28, 24, 28, 31, 20, 16, 5, 31, 23, 20, 21, 15, 5, 12, 28, 29, 7, 16, 29, 7, 30, 12, 7, 20, 20, 21, 14, 29, 32, 23], + "height":128, + "id":1, + "locked":true, + "name":"Ground", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":128, + "x":0, + "y":0 + }, { - "columns": 16, - "firstgid": 1, - "image": "../narezano_in_majhno/krvava_zetev_sprites/grass_soil_tileset_1766171156780_obdelan.png", - "imageheight": 512, - "imagewidth": 512, - "margin": 0, - "name": "01_Ground", - "spacing": 0, - "tilecount": 256, - "tileheight": 32, - "tilewidth": 32 - } - ], - "tilewidth": 32, - "type": "map", - "version": "1.10", - "width": 8 + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 68, 69, 70, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 74, 75, 76, 77, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, 84, 85, 86, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, 108, 109, 110, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 117, 118, 119, 120, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 123, 124, 125, 126, 127, 128, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 68, 69, 70, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 74, 75, 76, 77, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, 84, 85, 86, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, 108, 109, 110, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 117, 118, 119, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 123, 124, 125, 126, 127, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 68, 69, 70, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 74, 75, 76, 77, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, 84, 85, 86, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 68, 69, 70, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 68, 69, 70, 71, 72, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, 108, 109, 110, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 74, 75, 76, 77, 78, 79, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 68, 69, 70, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 117, 118, 119, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, 84, 85, 86, 87, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 74, 75, 76, 77, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 123, 124, 125, 126, 127, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, 84, 85, 86, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, 108, 109, 110, 111, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 117, 118, 119, 120, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, 108, 109, 110, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 123, 124, 125, 126, 127, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 117, 118, 119, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 123, 124, 125, 126, 127, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 68, 69, 70, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 74, 75, 76, 77, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, 84, 85, 86, 87, 88, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 68, 69, 70, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 73, 74, 75, 76, 77, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, 84, 85, 86, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, 108, 109, 110, 111, 112, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 117, 118, 119, 120, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 123, 124, 125, 126, 127, 128, 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, 108, 109, 110, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 117, 118, 119, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 123, 124, 125, 126, 127, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":128, + "id":2, + "name":"Objects", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":128, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, 176, 177, 178, 179, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 207, 208, 209, 210, 211, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 238, 239, 240, 241, 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 270, 271, 272, 273, 274, 275, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, 304, 305, 306, 307, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 335, 336, 337, 338, 339, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 366, 367, 368, 369, 370, 371, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 398, 399, 400, 401, 402, 403, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 430, 431, 432, 433, 434, 435, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 462, 463, 464, 465, 466, 467, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 494, 495, 496, 497, 498, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 526, 527, 528, 529, 530, 531, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 558, 559, 560, 561, 562, 563, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 590, 591, 592, 593, 594, 595, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":128, + "id":3, + "locked":true, + "name":"Player", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":128, + "x":0, + "y":0 + }], + "nextlayerid":5, + "nextobjectid":1, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.11.2", + "tileheight":32, + "tilesets":[ + { + "columns":8, + "firstgid":1, + "image":"..\/ground_tiles.png", + "imageheight":256, + "imagewidth":256, + "margin":0, + "name":"ground_tiles", + "spacing":0, + "tilecount":64, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":8, + "firstgid":65, + "image":"..\/tree_blue.png", + "imageheight":299, + "imagewidth":260, + "margin":0, + "name":"tree_blue", + "spacing":0, + "tilecount":72, + "tileheight":32, + "tilewidth":32 + }, + { + "columns":32, + "firstgid":137, + "image":"..\/tilesets\/kai_character.png", + "imageheight":1024, + "imagewidth":1024, + "margin":0, + "name":"kai_character", + "spacing":0, + "tilecount":1024, + "tileheight":32, + "tilewidth":32 + }], + "tilewidth":32, + "type":"map", + "version":"1.11", + "width":128 } \ No newline at end of file diff --git a/assets/maps/kai_character.tsx b/assets/maps/kai_character.tsx new file mode 100644 index 000000000..c294450bb --- /dev/null +++ b/assets/maps/kai_character.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/assets/maps/tree_blue.tsx b/assets/maps/tree_blue.tsx new file mode 100644 index 000000000..018a6d100 --- /dev/null +++ b/assets/maps/tree_blue.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/novafarma.tiled-session b/novafarma.tiled-session index 8d46a8339..c6a8d5c4b 100644 --- a/novafarma.tiled-session +++ b/novafarma.tiled-session @@ -1,9 +1,13 @@ { - "activeFile": "assets/maps/NovaFarma.tmx", + "activeFile": "assets/maps/NovaFarma.json", "expandedProjectPaths": [ "assets/maps" ], + "file.lastUsedOpenFilter": "All Files (*)", "fileStates": { + "": { + "scaleInDock": 1 + }, "assets/maps/01_Ground.tsx": { "scaleInDock": 1 }, @@ -19,21 +23,54 @@ "assets/maps/05_Tools_Items.tsx": { "scaleInDock": 1 }, + "assets/maps/NovaFarma.json": { + "scale": 0.12779541015624998, + "selectedLayer": 0, + "viewCenter": { + "x": 1862.3517050339099, + "y": 1878.001719361926 + } + }, + "assets/maps/NovaFarma.json#01_Ground": { + "scaleInDock": 1 + }, + "assets/maps/NovaFarma.json#02_Obstacles": { + "scaleInDock": 1 + }, + "assets/maps/NovaFarma.json#03_Fences": { + "scaleInDock": 1 + }, + "assets/maps/NovaFarma.json#04_Buildings": { + "scaleInDock": 1 + }, + "assets/maps/NovaFarma.json#05_Tools_Items": { + "scaleInDock": 1 + }, "assets/maps/NovaFarma.tmx": { "scale": 1, "selectedLayer": 0, "viewCenter": { - "x": -16.5, - "y": 196 + "x": 157, + "y": 231 } + }, + "assets/maps/ground_tiles.tsx": { + "scaleInDock": 1 + }, + "assets/maps/kai_character.tsx": { + "scaleInDock": 1 + }, + "assets/maps/tree_blue.tsx": { + "scaleInDock": 1 } }, "last.externalTilesetPath": "/Users/davidkotnik/repos/novafarma/assets/maps", "openFiles": [ - "assets/maps/NovaFarma.tmx" + "assets/maps/NovaFarma.json" ], "project": "novafarma.tiled-project", "recentFiles": [ + "assets/maps/NovaFarma.json", "assets/maps/NovaFarma.tmx" ], "tileset.lastUsedFormat": "tsx" diff --git a/scripts/generate_128_map.py b/scripts/generate_128_map.py new file mode 100644 index 000000000..60d1a55f9 --- /dev/null +++ b/scripts/generate_128_map.py @@ -0,0 +1,179 @@ + +import json +import os + +# Configuration +WIDTH = 128 +HEIGHT = 128 +TILE_SIZE = 32 + +# Create the data array (128x128 filled with 1s for 'Ground' tile) +# 1 = Grass tile from firstgid:1 +ground_data = [1] * (WIDTH * HEIGHT) + +# Create Objects layer (mostly 0s, with some trees/rocks at center) +objects_data = [0] * (WIDTH * HEIGHT) + +# Create Player layer (mostly 0s, with Kai at center) +player_data = [0] * (WIDTH * HEIGHT) + +# Center coordinates +cx, cy = WIDTH // 2, HEIGHT // 2 + +# Helper to set tile at x,y +def set_tile(layer_data, x, y, gid): + index = y * WIDTH + x + if 0 <= index < len(layer_data): + layer_data[index] = gid + +# Place some test objects (from 02_Obstacles, firstgid=300) +set_tile(objects_data, cx, cy, 300) # Test Object 1 +set_tile(objects_data, cx+2, cy, 301) # Test Object 2 +set_tile(objects_data, cx-2, cy, 302) # Test Object 3 +set_tile(objects_data, cx, cy-2, 303) # Test Object 4 + +# Place Player (Kai) +# Assuming FirstGID 1500 for Kai characters +# Tile 41 corresponds to "Front View" typically in a standard grid (relative index starts at 0, so GID = firstgid + 41) +set_tile(player_data, cx, cy, 1541) + +map_structure = { + "compressionlevel": -1, + "height": HEIGHT, + "infinite": False, + "layers": [ + { + "data": ground_data, + "height": HEIGHT, + "id": 1, + "name": "Ground", + "opacity": 1, + "type": "tilelayer", + "visible": True, + "width": WIDTH, + "x": 0, + "y": 0 + }, + { + "data": objects_data, + "height": HEIGHT, + "id": 2, + "name": "Objects", + "opacity": 1, + "type": "tilelayer", + "visible": True, + "width": WIDTH, + "x": 0, + "y": 0 + }, + { + "data": player_data, + "height": HEIGHT, + "id": 3, + "name": "Player", + "opacity": 1, + "type": "tilelayer", + "visible": True, + "width": WIDTH, + "x": 0, + "y": 0 + } + ], + "nextlayerid": 4, + "nextobjectid": 1, + "orientation": "orthogonal", + "renderorder": "right-down", + "tiledversion": "1.11.2", + "tileheight": TILE_SIZE, + "tilesets": [ + { + "columns": 16, + "firstgid": 1, + "image": "../narezano_in_majhno/krvava_zetev_sprites/grass_soil_tileset_1766171156780_obdelan.png", + "imageheight": 512, + "imagewidth": 512, + "margin": 0, + "name": "01_Ground", + "spacing": 0, + "tilecount": 256, + "tileheight": 32, + "tilewidth": 32 + }, + { + "columns": 16, + "firstgid": 300, + "image": "../narezano_in_majhno/krvava_zetev_sprites/farm_obstacles_1766171194583_obdelan.png", + "imageheight": 512, + "imagewidth": 512, + "margin": 0, + "name": "02_Obstacles", + "spacing": 0, + "tilecount": 256, + "tileheight": 32, + "tilewidth": 32 + }, + { + "columns": 16, + "firstgid": 600, + "image": "../narezano_in_majhno/krvava_zetev_sprites/town_buildings_pack_1766099810580_obdelan.png", + "imageheight": 512, + "imagewidth": 512, + "margin": 0, + "name": "04_Buildings", + "spacing": 0, + "tilecount": 256, + "tileheight": 32, + "tilewidth": 32 + }, + { + "columns": 16, + "firstgid": 900, + "image": "../narezano_in_majhno/krvava_zetev_sprites/fence_tileset_1766171177275_obdelan.png", + "imageheight": 512, + "imagewidth": 512, + "margin": 0, + "name": "03_Fences", + "spacing": 0, + "tilecount": 256, + "tileheight": 32, + "tilewidth": 32 + }, + { + "columns": 16, + "firstgid": 1200, + "image": "../narezano_in_majhno/krvava_zetev_sprites/tools_items_pack_tiled_1766099926620_obdelan.png", + "imageheight": 512, + "imagewidth": 512, + "margin": 0, + "name": "05_Tools_Items", + "spacing": 0, + "tilecount": 256, + "tileheight": 32, + "tilewidth": 32 + }, + { + "columns": 10, + "firstgid": 1500, + "image": "../krvava_zetev_sprites/kai_character_2x2_grid_1766098341666.png", + "imageheight": 1024, + "imagewidth": 1024, + "margin": 0, + "name": "Kai_Character", + "spacing": 0, + "tilecount": 100, + "tileheight": 96, + "tilewidth": 96 + } + ], + "tilewidth": TILE_SIZE, + "type": "map", + "version": "1.10", + "width": WIDTH +} + +output_path = "assets/maps/NovaFarma.json" + +with open(output_path, "w") as f: + json.dump(map_structure, f, indent=4) + +print(f"✅ Generated 128x128 map with Kai: {output_path}") diff --git a/src/entities/Player.js b/src/entities/Player.js index 75d97feaa..42d5cfd6a 100644 --- a/src/entities/Player.js +++ b/src/entities/Player.js @@ -115,7 +115,12 @@ class Player { } // Kreira sprite - const screenPos = this.iso.toScreen(this.gridX, this.gridY); + // 🎨 FLAT 2D (NEW!) - Direct screen conversion + const tileSize = 48; + const screenPos = { + x: Math.round((this.gridX * tileSize) + (tileSize / 2)), + y: Math.round((this.gridY * tileSize) + (tileSize / 2)) + }; this.sprite = this.scene.add.sprite( screenPos.x + this.offsetX, screenPos.y + this.offsetY, @@ -268,9 +273,11 @@ class Player { // Update grid position from pixel position const screenPos = { x: this.sprite.x - this.offsetX, y: this.sprite.y - this.offsetY }; - const gridPos = this.iso.toGrid(screenPos.x, screenPos.y); - this.gridX = Math.floor(gridPos.x); - this.gridY = Math.floor(gridPos.y); + + // 🎨 FLAT 2D (NEW!) - Direct grid conversion + const tileSize = 48; + this.gridX = Math.floor(screenPos.x / tileSize); + this.gridY = Math.floor(screenPos.y / tileSize); // Check if moving const speed = Math.sqrt(this.velocity.x ** 2 + this.velocity.y ** 2); diff --git a/src/scenes/GameScene.js b/src/scenes/GameScene.js index e195680ca..204fcc749 100644 --- a/src/scenes/GameScene.js +++ b/src/scenes/GameScene.js @@ -74,956 +74,1067 @@ class GameScene extends Phaser.Scene { console.log('🎨 Initializing Flat 2D Terrain...'); this.terrainSystem = new Flat2DTerrainSystem(this); - // 🌍 PHASE 28: Initialize BiomeSystem and ChunkManager BEFORE terrain generation! - console.log('🌍 Initializing Biome System (500x500 world)...'); - this.biomeSystem = new BiomeSystem(this); - this.biomeSystem.generateBiomeMap(); // Generate biome layout - console.log('✅ Biome map generated!'); + // 🏗️ PHASE 28-29 SYSTEMS INITIALIZATION + try { + // 🌍 PHASE 28: Initialize BiomeSystem and ChunkManager BEFORE terrain generation! + console.log('🌍 Initializing Biome System (500x500 world)...'); + this.biomeSystem = new BiomeSystem(this); + this.biomeSystem.generateBiomeMap(); // Generate biome layout + console.log('✅ Biome map generated!'); - console.log('💾 Initializing Chunk Manager...'); - this.chunkManager = new ChunkManager(this, 50); // 50x50 chunks - this.chunkManager.biomeSystem = this.biomeSystem; // Connect biomeSystem! - console.log('✅ Chunk Manager ready!'); + console.log('💾 Initializing Chunk Manager...'); + this.chunkManager = new ChunkManager(this, 50); // 50x50 chunks + this.chunkManager.biomeSystem = this.biomeSystem; // Connect biomeSystem! + console.log('✅ Chunk Manager ready!'); - // 🌈 PHASE 28: TRANSITION SYSTEM - console.log('🌈 Initializing Transition System...'); - this.transitionSystem = new TransitionSystem(this, this.biomeSystem); - console.log('✅ Transition System ready!'); + // 🌈 PHASE 28: TRANSITION SYSTEM + console.log('🌈 Initializing Transition System...'); + this.transitionSystem = new TransitionSystem(this, this.biomeSystem); + console.log('✅ Transition System ready!'); - // 🌊 PHASE 28 SESSION 5: RIVER SYSTEM - console.log('🌊 Initializing River System...'); - this.riverSystem = new RiverSystem(500, 500, this.biomeSystem); - this.riverSystem.generateRivers(); - console.log('✅ River System ready!'); + // 🌊 PHASE 28 SESSION 5: RIVER SYSTEM + console.log('🌊 Initializing River System...'); + this.riverSystem = new RiverSystem(500, 500, this.biomeSystem); + this.riverSystem.generateRivers(); + console.log('✅ River System ready!'); - // 🏞️ PHASE 28 SESSION 5: LAKE SYSTEM - console.log('🏞️ Initializing Lake System...'); - this.lakeSystem = new LakeSystem(500, 500, this.biomeSystem); - this.lakeSystem.generateLakes(this.riverSystem); - console.log('✅ Lake System ready!'); + // 🏞️ PHASE 28 SESSION 5: LAKE SYSTEM + console.log('🏞️ Initializing Lake System...'); + this.lakeSystem = new LakeSystem(500, 500, this.biomeSystem); + this.lakeSystem.generateLakes(this.riverSystem); + console.log('✅ Lake System ready!'); - // 🏛️ PHASE 28 SESSION 6: STRUCTURE SYSTEM - console.log('🏛️ Initializing Structure System...'); - this.structureSystem = new StructureSystem(500, 500, this.biomeSystem, this.riverSystem, this.lakeSystem); - this.structureSystem.generateAll(); - const structStats = this.structureSystem.getStats(); - console.log(`✅ Structure System ready! (${structStats.structures} structures, ${structStats.landmarks} landmarks, ${structStats.roads.length} roads)`); + // 🏛️ PHASE 28 SESSION 6: STRUCTURE SYSTEM + console.log('🏛️ Initializing Structure System...'); + this.structureSystem = new StructureSystem(500, 500, this.biomeSystem, this.riverSystem, this.lakeSystem); + this.structureSystem.generateAll(); + const structStats = this.structureSystem.getStats(); + console.log(`✅ Structure System ready! (${structStats.structures} structures, ${structStats.landmarks} landmarks, ${structStats.roads.length} roads)`); - // Connect systems to terrainSystem - this.terrainSystem.biomeSystem = this.biomeSystem; - this.terrainSystem.chunkManager = this.chunkManager; - this.terrainSystem.transitionSystem = this.transitionSystem; - this.terrainSystem.riverSystem = this.riverSystem; - this.terrainSystem.lakeSystem = this.lakeSystem; - this.terrainSystem.structureSystem = this.structureSystem; // 🏛️ SESSION 6 - console.log('✅ BiomeSystem & ChunkManager connected to terrainSystem'); + // Connect systems to terrainSystem + this.terrainSystem.biomeSystem = this.biomeSystem; + this.terrainSystem.chunkManager = this.chunkManager; + this.terrainSystem.transitionSystem = this.transitionSystem; + this.terrainSystem.riverSystem = this.riverSystem; + this.terrainSystem.lakeSystem = this.lakeSystem; + this.terrainSystem.structureSystem = this.structureSystem; // 🏛️ SESSION 6 + console.log('✅ BiomeSystem & ChunkManager connected to terrainSystem'); - // 🎮 PHASE 29: GAMEPLAY SYSTEMS - console.log('🎮 Initializing Phase 29 Systems...'); + // 🎮 PHASE 29: GAMEPLAY SYSTEMS + console.log('🎮 Initializing Phase 29 Systems...'); - // Structure Interaction - this.structureInteraction = new StructureInteractionSystem(this); - this.structureInteraction.generateChestsForStructures(this.structureSystem); - console.log(`✅ Structure Interaction ready! (${this.structureInteraction.chests.size} chests)`); + // Structure Interaction + this.structureInteraction = new StructureInteractionSystem(this); + this.structureInteraction.generateChestsForStructures(this.structureSystem); + console.log(`✅ Structure Interaction ready! (${this.structureInteraction.chests.size} chests)`); - // NPC Population - this.npcPopulation = new NPCPopulationSystem(this); - this.npcPopulation.populateStructures(this.structureSystem); - const npcStats = this.npcPopulation.getStats(); - console.log(`✅ NPC Population ready! (${npcStats.totalNPCs} NPCs)`); + // NPC Population + this.npcPopulation = new NPCPopulationSystem(this); + this.npcPopulation.populateStructures(this.structureSystem); + const npcStats = this.npcPopulation.getStats(); + console.log(`✅ NPC Population ready! (${npcStats.totalNPCs} NPCs)`); - // Biome Enemies - this.biomeEnemies = new BiomeEnemySystem(this); - this.biomeEnemies.generateSpawns(this.biomeSystem); - const enemyStats = this.biomeEnemies.getStats(); - console.log(`✅ Biome Enemies ready! (${enemyStats.alive} enemies)`); + // Biome Enemies + this.biomeEnemies = new BiomeEnemySystem(this); + this.biomeEnemies.generateSpawns(this.biomeSystem); + const enemyStats = this.biomeEnemies.getStats(); + console.log(`✅ Biome Enemies ready! (${enemyStats.alive} enemies)`); - // Quest System - this.landmarkQuests = new LandmarkQuestSystem(this); - this.landmarkQuests.startMainQuest(); - this.landmarkQuests.startExplorationQuests(); - console.log(`✅ Quest System ready! (${this.landmarkQuests.activeQuests.length} active quests)`); + // Quest System + this.landmarkQuests = new LandmarkQuestSystem(this); + this.landmarkQuests.startMainQuest(); + this.landmarkQuests.startExplorationQuests(); + console.log(`✅ Quest System ready! (${this.landmarkQuests.activeQuests.length} active quests)`); - // Map Reveal - this.mapReveal = new MapRevealSystem(this); - console.log('✅ Map Reveal System ready!'); + // Map Reveal + this.mapReveal = new MapRevealSystem(this); + console.log('✅ Map Reveal System ready!'); - console.log('🎉 Phase 29 Systems: ALL READY!'); - - await this.terrainSystem.generate(); - console.log('✅ Flat 2D terrain ready!'); - - // Initialize Farming System - this.farmingSystem = new FarmingSystem(this); - console.log('🌾 Farming system initialized!'); - - // Initialize Build System - this.buildSystem = new BuildSystem(this); - console.log('🏗️ Build system initialized!'); - - // 🌱 Initialize Micro Farm System (PHASE 37!) - this.microFarmSystem = new MicroFarmSystem(this); - console.log('🌱 Micro Farm system initialized!'); - - - // ======================================================== - // 🏗️ TESTNI PRIMERI - Postavitev Ograj (ONEMOGOČENO) - // ======================================================== - // Odstrani // pred vrsticami, če želiš videti testne ograje! - // ALI pritisni B v igri za Build Mode in postavljaj ročno! - - // PRIMER 1: Ena sama ograja - // this.buildSystem.placeSingleFence(50, 50, 'fence_post', false); - - // PRIMER 2: Vodoravna linija ograj (10 ograj) - // for (let i = 0; i < 10; i++) { - // this.buildSystem.placeSingleFence(45 + i, 52, 'fence_horizontal', false); - // } - - // PRIMER 3: Navpična linija ograj (10 ograj) - // for (let i = 0; i < 10; i++) { - // this.buildSystem.placeSingleFence(43, 48 + i, 'fence_vertical', false); - // } - - // PRIMER 4: Majhen pravokotnik (8x6) - // this.buildSystem.placeFenceRectangle(60, 45, 8, 6, 'fence_post', false); - - // PRIMER 5: Diagonalna linija (Bresenham) - // this.buildSystem.placeFenceLine(30, 30, 40, 40, 'fence_corner', false); - - // PRIMER 6: Večji pravokotnik (20x15) - // this.buildSystem.placeFenceRectangle(20, 60, 20, 15, 'fence_horizontal', false); - - // PRIMER 7: Različni tipi ograj v vrsti - // this.buildSystem.placeSingleFence(70, 50, 'fence', false); - // this.buildSystem.placeSingleFence(71, 50, 'fence_post', false); - // this.buildSystem.placeSingleFence(72, 50, 'fence_horizontal', false); - // this.buildSystem.placeSingleFence(73, 50, 'fence_vertical', false); - // this.buildSystem.placeSingleFence(74, 50, 'fence_corner', false); - - // console.log('✅ Testne ograje postavljene! Preveri mapo.'); - // ======================================================== - - - // Terrain offset - this.terrainOffsetX = width / 2; - this.terrainOffsetY = 100; - - // Initialization for culling - this.terrainSystem.init(this.terrainOffsetX, this.terrainOffsetY); - - // Initial force update to render active tiles before first frame - this.terrainSystem.updateCulling(this.cameras.main); - - // 🎲 RANDOM SPAWN POINT + 8x8 FARM (Prvi login) - if (!spawnPoint) { - // PRVI LOGIN - Random spawn točka - const spawnX = Math.floor(Math.random() * 80) + 10; // 10-90 - const spawnY = Math.floor(Math.random() * 80) + 10; // 10-90 - - spawnPoint = `${spawnX},${spawnY}`; - localStorage.setItem('novafarma_spawn_point', spawnPoint); - - console.log(`🎲 First login - Random spawn at (${spawnX}, ${spawnY})`); - console.log(`🏡 Creating 8x8 starter farm at spawn location...`); - - // Ustvari 8x8 farmo na spawn točki - this.initializeFarmWorld(spawnX, spawnY); - } else { - // NI PRVI LOGIN - Naloži obstoječo spawn točko - const [spawnX, spawnY] = spawnPoint.split(',').map(Number); - console.log(`♻️ Returning player - spawn at (${spawnX}, ${spawnY})`); - - // Obnovi farmo (če je shranjena) - this.initializeFarmWorld(spawnX, spawnY); + console.log('🎉 Phase 29 Systems: ALL READY!'); + } catch (err) { + console.error('❌ ERROR initializing Phase 28/29 systems:', err); + console.warn('⚠️ Continuing with partial initialization...'); } - // 🍎 SADOVNJAK - Sadna Drevesa (ONEMOGOČENO) - // ======================================================== - // Odstrani // če želiš sadovnjak - /* - console.log('🍎 Ustvarjam sadovnjak...'); + // 🗺️ TRY TO LOAD USER'S TILED MAP FIRST + let tiledMapLoaded = false; + this.tiledSpawnPoint = null; - const orchardX = 35; // Lokacija sadovnjaka - const orchardY = 60; - const orchardSize = 10; // 10x10 območje + console.log('🔍 Checking for NovaFarma map...'); + try { + if (this.make.tilemap) { + const map = this.make.tilemap({ key: 'NovaFarma' }); - // 1. Očisti območje (odstrani obstoječe drevese) - for (let x = orchardX; x < orchardX + orchardSize; x++) { - for (let y = orchardY; y < orchardY + orchardSize; y++) { - if (x >= 0 && x < 100 && y >= 0 && y < 100) { - const key = `${x},${y}`; - if (this.terrainSystem.decorationsMap.has(key)) { - this.terrainSystem.removeDecoration(x, y); + // DEBUG LOGGING + console.log('🗺️ Map object created:', map); + if (map) { + console.log(`🗺️ Map dimensions: ${map.width}x${map.height} tiles, ${map.widthInPixels}x${map.heightInPixels} pixels`); + console.log('🗺️ Tilesets:', map.tilesets.map(t => t.name)); + console.log('🗺️ Layers:', map.layers.map(l => l.name)); + } + + if (map && map.width > 0) { + console.log('✅ FOUND VALID USER MAP: NovaFarma.json'); + this.terrainSystem.loadFromTiled(map); + tiledMapLoaded = true; + + // 🕵️ FIND SPAWN POINT IN MAP + const playerLayer = map.getLayer('Player'); + if (playerLayer) { + console.log('👤 Found Player layer, searching for spawn point...'); + // Find first tile in Player layer + map.layers.forEach(layer => { + if (layer.name === 'Player') { + for (let y = 0; y < layer.height; y++) { + for (let x = 0; x < layer.width; x++) { + if (layer.data[y][x].index !== -1) { + this.tiledSpawnPoint = { + x: x * map.tileWidth + map.tileWidth / 2, + y: y * map.tileHeight + map.tileHeight / 2 + }; + console.log(`📍 Found Player Spawn in Map at (${x}, ${y}) -> World: ${this.tiledSpawnPoint.x}, ${this.tiledSpawnPoint.y}`); + return; // Break loops + } + } + } + } + }); + + // 🕵️ DEBUG: Check what is under the player (Moved here for scope) + if (this.tiledSpawnPoint) { + const px = Math.floor(this.tiledSpawnPoint.x / map.tileWidth); + const py = Math.floor(this.tiledSpawnPoint.y / map.tileHeight); + const groundLayer = map.getLayer('Ground') || map.layers[0]; + if (groundLayer) { + const tile = map.getTileAt(px, py, true, groundLayer.name); + const originTile = map.getTileAt(0, 0, true, groundLayer.name); + console.log(`🕵️ Inspecting Ground at Player (${px}, ${py}):`, tile ? `Index ${tile.index}` : 'NULL'); + console.log(`🕵️ Inspecting Ground at Origin (0, 0):`, originTile ? `Index ${originTile.index}` : 'NULL'); + } + } + } else { + console.warn('⚠️ No "Player" layer found in map!'); } + } else { + console.error('❌ Map created but invalid width (0) or null!'); + } + } + } catch (e) { + console.error('⚠️ CRITICAL ERROR loading NovaFarma map:', e); + } - // Spremeni teren v travo - if (this.terrainSystem.tiles[y] && this.terrainSystem.tiles[y][x]) { - this.terrainSystem.tiles[y][x].type = 'grass'; - if (this.terrainSystem.tiles[y][x].sprite) { - this.terrainSystem.tiles[y][x].sprite.setTexture('grass'); - this.terrainSystem.tiles[y][x].sprite.clearTint(); + if (!tiledMapLoaded) { + console.warn('⚠️ FALLBACK: Generating procedural terrain...'); + await this.terrainSystem.generate(); + console.log('✅ Flat 2D terrain ready (Procedural)!'); + } else { + console.log('✅ Flat 2D terrain ready (Tiled)!'); + + + + // Initialize Farming System + this.farmingSystem = new FarmingSystem(this); + console.log('🌾 Farming system initialized!'); + + // Initialize Build System + this.buildSystem = new BuildSystem(this); + console.log('🏗️ Build system initialized!'); + + // 🌱 Initialize Micro Farm System (PHASE 37!) + this.microFarmSystem = new MicroFarmSystem(this); + console.log('🌱 Micro Farm system initialized!'); + + + // ======================================================== + // 🏗️ TESTNI PRIMERI - Postavitev Ograj (ONEMOGOČENO) + // ======================================================== + // Odstrani // pred vrsticami, če želiš videti testne ograje! + // ALI pritisni B v igri za Build Mode in postavljaj ročno! + + // PRIMER 1: Ena sama ograja + // this.buildSystem.placeSingleFence(50, 50, 'fence_post', false); + + // PRIMER 2: Vodoravna linija ograj (10 ograj) + // for (let i = 0; i < 10; i++) { + // this.buildSystem.placeSingleFence(45 + i, 52, 'fence_horizontal', false); + // } + + // PRIMER 3: Navpična linija ograj (10 ograj) + // for (let i = 0; i < 10; i++) { + // this.buildSystem.placeSingleFence(43, 48 + i, 'fence_vertical', false); + // } + + // PRIMER 4: Majhen pravokotnik (8x6) + // this.buildSystem.placeFenceRectangle(60, 45, 8, 6, 'fence_post', false); + + // PRIMER 5: Diagonalna linija (Bresenham) + // this.buildSystem.placeFenceLine(30, 30, 40, 40, 'fence_corner', false); + + // PRIMER 6: Večji pravokotnik (20x15) + // this.buildSystem.placeFenceRectangle(20, 60, 20, 15, 'fence_horizontal', false); + + // PRIMER 7: Različni tipi ograj v vrsti + // this.buildSystem.placeSingleFence(70, 50, 'fence', false); + // this.buildSystem.placeSingleFence(71, 50, 'fence_post', false); + // this.buildSystem.placeSingleFence(72, 50, 'fence_horizontal', false); + // this.buildSystem.placeSingleFence(73, 50, 'fence_vertical', false); + // this.buildSystem.placeSingleFence(74, 50, 'fence_corner', false); + + // console.log('✅ Testne ograje postavljene! Preveri mapo.'); + // ======================================================== + + + // Terrain offset + if (tiledMapLoaded) { + // For Tiled maps, we usually start at 0,0 or map center is handled by camera + this.terrainOffsetX = 0; + this.terrainOffsetY = 0; + } else { + // For procedural flat maps, we start at 0,0 + this.terrainOffsetX = 0; + this.terrainOffsetY = 0; + } + + + // 🎲 SPAWN POINT LOGIC + if (this.tiledSpawnPoint) { + // 📍 Uporabi spawn točko iz Tiled mape (PRIORITETA!) + const spawnX = Math.floor(this.tiledSpawnPoint.x / 48); // Convert back to grid for init logic if needed, or just use coords + const spawnY = Math.floor(this.tiledSpawnPoint.y / 48); + + spawnPoint = `${spawnX},${spawnY}`; + localStorage.setItem('novafarma_spawn_point', spawnPoint); + + console.log(`📍 Using Tiled Spawn Point: (${spawnX}, ${spawnY})`); + this.initializeFarmWorld(spawnX, spawnY); + + // Override player position directly if initializeFarmWorld doesn't do it precisely + // (initializeFarmWorld usually sets grid position, we might want pixel precision later) + } + else if (!spawnPoint) { + // PRVI LOGIN - Random spawn točka (Fallback) + const spawnX = Math.floor(Math.random() * 80) + 10; // 10-90 + const spawnY = Math.floor(Math.random() * 80) + 10; // 10-90 + + spawnPoint = `${spawnX},${spawnY}`; + localStorage.setItem('novafarma_spawn_point', spawnPoint); + + console.log(`🎲 First login - Random spawn at (${spawnX}, ${spawnY})`); + console.log(`🏡 Creating 8x8 starter farm at spawn location...`); + + // Ustvari 8x8 farmo na spawn točki + this.initializeFarmWorld(spawnX, spawnY); + } else { + // NI PRVI LOGIN - Naloži obstoječo spawn točko + const [spawnX, spawnY] = spawnPoint.split(',').map(Number); + console.log(`♻️ Returning player - spawn at (${spawnX}, ${spawnY})`); + + // Obnovi farmo (če je shranjena) + this.initializeFarmWorld(spawnX, spawnY); + } + + // 🍎 SADOVNJAK - Sadna Drevesa (ONEMOGOČENO) + // ======================================================== + // Odstrani // če želiš sadovnjak + /* + console.log('🍎 Ustvarjam sadovnjak...'); + + const orchardX = 35; // Lokacija sadovnjaka + const orchardY = 60; + const orchardSize = 10; // 10x10 območje + + // 1. Očisti območje (odstrani obstoječe drevese) + for (let x = orchardX; x < orchardX + orchardSize; x++) { + for (let y = orchardY; y < orchardY + orchardSize; y++) { + if (x >= 0 && x < 100 && y >= 0 && y < 100) { + const key = `${x},${y}`; + if (this.terrainSystem.decorationsMap.has(key)) { + this.terrainSystem.removeDecoration(x, y); + } + + // Spremeni teren v travo + if (this.terrainSystem.tiles[y] && this.terrainSystem.tiles[y][x]) { + this.terrainSystem.tiles[y][x].type = 'grass'; + if (this.terrainSystem.tiles[y][x].sprite) { + this.terrainSystem.tiles[y][x].sprite.setTexture('grass'); + this.terrainSystem.tiles[y][x].sprite.clearTint(); + } } } } } - } - - // 2. Dodaj SADIKE (tree_sapling) - bodo rasle v sadna drevesa! - const fruitTreeTypes = ['tree_apple', 'tree_orange', 'tree_cherry']; - let treeCount = 0; - const saplingPositions = []; // Shrani pozicije za ograje - - for (let x = orchardX + 1; x < orchardX + orchardSize - 1; x += 2) { - for (let y = orchardY + 1; y < orchardY + orchardSize - 1; y += 2) { - if (x >= 0 && x < 100 && y >= 0 && y < 100) { - // Dodaj SADIKO (bo rasla v sadno drevo) - this.terrainSystem.addDecoration(x, y, 'tree_sapling'); - saplingPositions.push({ x, y, type: fruitTreeTypes[treeCount % fruitTreeTypes.length] }); - treeCount++; - } - } - } - - // 3. Dodaj LESENO OGRAJO okoli vsakega drevesa (3x3 kvadrat) - saplingPositions.forEach(pos => { - // Ograja okoli drevesa (3x3) - const fencePositions = [ - // Zgornja vrstica - { x: pos.x - 1, y: pos.y - 1 }, - { x: pos.x, y: pos.y - 1 }, - { x: pos.x + 1, y: pos.y - 1 }, - // Spodnja vrstica - { x: pos.x - 1, y: pos.y + 1 }, - { x: pos.x, y: pos.y + 1 }, - { x: pos.x + 1, y: pos.y + 1 }, - // Leva stran - { x: pos.x - 1, y: pos.y }, - // Desna stran - { x: pos.x + 1, y: pos.y } - ]; - - fencePositions.forEach(fPos => { - if (fPos.x >= 0 && fPos.x < 100 && fPos.y >= 0 && fPos.y < 100) { - this.buildSystem.placeSingleFence(fPos.x, fPos.y, 'fence_horizontal', false); - } - }); - }); - - // 4. Dodaj ZUNANJO OGRAJO okoli celega sadovnjaka - this.buildSystem.placeFenceRectangle( - orchardX - 1, - orchardY - 1, - orchardSize + 2, - orchardSize + 2, - 'fence_post', - false - ); - - // 5. Dodaj cvetje med ograjami - for (let x = orchardX; x < orchardX + orchardSize; x++) { - for (let y = orchardY; y < orchardY + orchardSize; y++) { - if (x >= 0 && x < 100 && y >= 0 && y < 100) { - const key = `${x},${y}`; - if (!this.terrainSystem.decorationsMap.has(key) && Math.random() > 0.85) { - this.terrainSystem.addDecoration(x, y, 'flowers_new'); + + // 2. Dodaj SADIKE (tree_sapling) - bodo rasle v sadna drevesa! + const fruitTreeTypes = ['tree_apple', 'tree_orange', 'tree_cherry']; + let treeCount = 0; + const saplingPositions = []; // Shrani pozicije za ograje + + for (let x = orchardX + 1; x < orchardX + orchardSize - 1; x += 2) { + for (let y = orchardY + 1; y < orchardY + orchardSize - 1; y += 2) { + if (x >= 0 && x < 100 && y >= 0 && y < 100) { + // Dodaj SADIKO (bo rasla v sadno drevo) + this.terrainSystem.addDecoration(x, y, 'tree_sapling'); + saplingPositions.push({ x, y, type: fruitTreeTypes[treeCount % fruitTreeTypes.length] }); + treeCount++; } } } + + // 3. Dodaj LESENO OGRAJO okoli vsakega drevesa (3x3 kvadrat) + saplingPositions.forEach(pos => { + // Ograja okoli drevesa (3x3) + const fencePositions = [ + // Zgornja vrstica + { x: pos.x - 1, y: pos.y - 1 }, + { x: pos.x, y: pos.y - 1 }, + { x: pos.x + 1, y: pos.y - 1 }, + // Spodnja vrstica + { x: pos.x - 1, y: pos.y + 1 }, + { x: pos.x, y: pos.y + 1 }, + { x: pos.x + 1, y: pos.y + 1 }, + // Leva stran + { x: pos.x - 1, y: pos.y }, + // Desna stran + { x: pos.x + 1, y: pos.y } + ]; + + fencePositions.forEach(fPos => { + if (fPos.x >= 0 && fPos.x < 100 && fPos.y >= 0 && fPos.y < 100) { + this.buildSystem.placeSingleFence(fPos.x, fPos.y, 'fence_horizontal', false); + } + }); + }); + + // 4. Dodaj ZUNANJO OGRAJO okoli celega sadovnjaka + this.buildSystem.placeFenceRectangle( + orchardX - 1, + orchardY - 1, + orchardSize + 2, + orchardSize + 2, + 'fence_post', + false + ); + + // 5. Dodaj cvetje med ograjami + for (let x = orchardX; x < orchardX + orchardSize; x++) { + for (let y = orchardY; y < orchardY + orchardSize; y++) { + if (x >= 0 && x < 100 && y >= 0 && y < 100) { + const key = `${x},${y}`; + if (!this.terrainSystem.decorationsMap.has(key) && Math.random() > 0.85) { + this.terrainSystem.addDecoration(x, y, 'flowers_new'); + } + } + } + } + + // 6. RAST DREVES - Sadike bodo rasle v sadna drevesa! + // Nastavi timer za rast (vsako drevo raste po 30 sekundah) + saplingPositions.forEach((pos, index) => { + this.time.delayedCall(30000 + (index * 2000), () => { + const key = `${pos.x},${pos.y}`; + + // Odstrani sadiko + if (this.terrainSystem.decorationsMap.has(key)) { + this.terrainSystem.removeDecoration(pos.x, pos.y); + } + + // Dodaj SADNO DREVO + this.terrainSystem.addDecoration(pos.x, pos.y, pos.type); + + // Animacija rasti + if (this.terrainSystem.visibleDecorations.has(key)) { + const sprite = this.terrainSystem.visibleDecorations.get(key); + sprite.setScale(0.01); + this.tweens.add({ + targets: sprite, + scaleX: 0.04, + scaleY: 0.04, + duration: 2000, + ease: 'Bounce.out' + }); + } + + console.log(`🌳 Drevo zraslo: ${pos.type} na (${pos.x}, ${pos.y})`); + }); + }); + + console.log(`✅ Sadovnjak ustvarjen na (${orchardX}, ${orchardY}) - ${treeCount} sadik (bodo rasle v 30s)`); + */ + // ======================================================== + + + // CITY CONTENT: Ruins, Chests, Spawners + console.log('🏚️ Generating City Content...'); + + // DISABLED - City structures removed for cleaner gameplay + // Main Ruins + // this.terrainSystem.placeStructure(55, 55, 'ruin'); + // this.terrainSystem.placeStructure(65, 65, 'ruin'); + // this.terrainSystem.placeStructure(75, 75, 'ruin'); + // this.terrainSystem.placeStructure(60, 70, 'ruin'); + // this.terrainSystem.placeStructure(70, 60, 'ruin'); + + // Arena (Boss battle area) + // this.terrainSystem.placeStructure(75, 55, 'arena'); + + // Treasure Chests (scattered in ruins) + // this.terrainSystem.placeStructure(56, 56, 'chest'); + // this.terrainSystem.placeStructure(66, 66, 'chest'); + // this.terrainSystem.placeStructure(76, 76, 'chest'); + + // Zombie Spawners (in city) + // this.terrainSystem.placeStructure(58, 68, 'spawner'); + // this.terrainSystem.placeStructure(72, 62, 'spawner'); + + // CESTE (ROADS) - povezava med farmo (20,20) in mestom (65,65) + console.log('🛣️ Building Roads...'); + // Horizontalna cesta od farme + for (let x = 20; x <= 45; x++) { + if (this.terrainSystem.tiles[22] && this.terrainSystem.tiles[22][x]) { + this.terrainSystem.tiles[22][x].type = 'pavement'; + if (this.terrainSystem.tiles[22][x].sprite) { + this.terrainSystem.tiles[22][x].sprite.setTexture('dirt'); + this.terrainSystem.tiles[22][x].sprite.setTint(0x808080); + } + } + } + // Vertikalna cesta do mesta + for (let y = 22; y <= 65; y++) { + if (this.terrainSystem.tiles[y] && this.terrainSystem.tiles[y][45]) { + this.terrainSystem.tiles[y][45].type = 'pavement'; + if (this.terrainSystem.tiles[y][45].sprite) { + this.terrainSystem.tiles[y][45].sprite.setTexture('dirt'); + this.terrainSystem.tiles[y][45].sprite.setTint(0x808080); + } + } + } + // Horizontalna cesta do mesta + for (let x = 45; x <= 65; x++) { + if (this.terrainSystem.tiles[65] && this.terrainSystem.tiles[65][x]) { + this.terrainSystem.tiles[65][x].type = 'pavement'; + if (this.terrainSystem.tiles[65][x].sprite) { + this.terrainSystem.tiles[65][x].sprite.setTexture('dirt'); + this.terrainSystem.tiles[65][x].sprite.setTint(0x808080); + } + } + } + + // SIGNPOSTS - navigacijske table + // SIGNPOSTS - DISABLED (User request: clean world) + // console.log('🪧 Placing Signposts...'); + // this.terrainSystem.placeStructure(23, 22, 'signpost_city'); + // this.terrainSystem.placeStructure(65, 64, 'signpost_farm'); + // this.terrainSystem.placeStructure(45, 40, 'signpost_both'); + + // DAMAGED CITY WALLS - DISABLED (User request: clean world) + // console.log('🏚️ Placing Damaged City Walls...'); + // const wallPositions = [ + // [65, 65], [70, 65], [75, 65], + // [65, 79], [70, 79], [75, 79], + // [65, 70], [65, 75], + // [79, 70], [79, 75] + // ]; + // wallPositions.forEach(([wx, wy]) => { + // if (Math.random() < 0.7) { + // this.terrainSystem.placeStructure(wx, wy, 'wall_damaged'); + // } + // }); + + // Initialize Pathfinding (Worker) + console.log('🗺️ Initializing Pathfinding...'); + this.pathfinding = new PathfindingSystem(this); + this.pathfinding.updateGrid(); + } - // 6. RAST DREVES - Sadike bodo rasle v sadna drevesa! - // Nastavi timer za rast (vsako drevo raste po 30 sekundah) - saplingPositions.forEach((pos, index) => { - this.time.delayedCall(30000 + (index * 2000), () => { - const key = `${pos.x},${pos.y}`; + // Dodaj igralca NA SPAWN TOČKI + console.log('👤 Initializing player...'); + const savedSpawn = localStorage.getItem('novafarma_spawn_point'); - // Odstrani sadiko - if (this.terrainSystem.decorationsMap.has(key)) { - this.terrainSystem.removeDecoration(pos.x, pos.y); + // 🌍 PHASE 28: Center of 500x500 world + let playerSpawnX = 250, playerSpawnY = 250; // Default center + + if (this.tiledSpawnPoint) { + // Use Tiled spawn point (converted to grid) + // Note: Player class converts Grid -> Pixel (Grid * 48). + // Tiled map gives Pixels. + // We need to pass GRID coordinates that result in the correct Pixel. + // TargetPixel = Grid * 48 + // Grid = TargetPixel / 48 + playerSpawnX = Math.floor(this.tiledSpawnPoint.x / 48); + playerSpawnY = Math.floor(this.tiledSpawnPoint.y / 48); + console.log(`👤 Spawning player at Tiled location: Grid(${playerSpawnX}, ${playerSpawnY}) -> Pixel(${this.tiledSpawnPoint.x}, ${this.tiledSpawnPoint.y})`); + } else if (savedSpawn) { + [playerSpawnX, playerSpawnY] = savedSpawn.split(',').map(Number); + console.log(`👤 Spawning player at saved location: (${playerSpawnX}, ${playerSpawnY})`); + } else { + console.log(`👤 Spawning player at world center: (${playerSpawnX}, ${playerSpawnY})`); + } + + this.player = new Player(this, playerSpawnX, playerSpawnY, this.terrainOffsetX, this.terrainOffsetY); + + // 🌍 PHASE 28: Load initial chunks around player + if (this.chunkManager) { + console.log('💾 Loading initial chunks around player...'); + this.chunkManager.updateActiveChunks(playerSpawnX, playerSpawnY); + const stats = this.chunkManager.getStats(); + console.log(`✅ Loaded ${stats.activeChunks} chunks (${stats.totalTilesLoaded} tiles)`); + } + + // 🎯 SORTABLE OBJECTS GROUP - Za 2.5D Z-Sorting + console.log('🎯 Creating sortableObjects group for Z-sorting...'); + this.sortableObjects = this.add.group(); + + // Dodaj player sprite v sortableObjects + if (this.player && this.player.sprite) { + this.sortableObjects.add(this.player.sprite); + console.log('✅ Player added to sortableObjects'); + + // 🎥 CAMERA FOLLOW + console.log('🎥 Setting camera to follow player...'); + this.cameras.main.startFollow(this.player.sprite, true, 0.1, 0.1); + this.cameras.main.setZoom(1); // Ensure visible zoom + } + + // ALL NPCs REMOVED - Solo farming mode + console.log('🌾 Solo farming mode - no NPCs'); + + // FPS Monitor (Performance) + // FPS Monitor - DISABLED (Using UnifiedStatsPanel instead) + // console.log('📊 Initializing FPS Monitor...'); + // this.fpsMonitor = new FPSMonitor(this); + + // Unified Stats Panel (Performance + Debug in one) + console.log('📊 Initializing Unified Stats Panel...'); + this.unifiedStatsPanel = new UnifiedStatsPanel(this); + + // NPC Spawner - DISABLED (NPCs look like player duplicates) + console.log('🧟 NPC Spawner - DISABLED'); + this.npcSpawner = null; // new NPCSpawner(this); + // this.npcSpawner.spawnInitialNPCs(); + + // Easter Egg: Broken Scooter + console.log('🛵 Spawning Scooter Easter Egg...'); + this.vehicles = []; + // const scooter = new Scooter(this, 25, 25); + // this.vehicles.push(scooter); + + // ZOMBIE SPAWNERS (City area) + console.log('👹 Creating Zombie Spawners...'); + this.spawners = []; + + // DISABLED - Too many zombies for testing + // this.spawners.push(new ZombieSpawner(this, 55, 55, 5, 2, 25000)); // NW + // this.spawners.push(new ZombieSpawner(this, 75, 55, 5, 2, 25000)); // NE + // this.spawners.push(new ZombieSpawner(this, 65, 75, 5, 3, 20000)); // South + + // LOOT CHESTS + console.log('📦 Placing Loot Chests...'); + this.chests = []; + + // Farm Starter Chest ONLY (near spawn) + this.chests.push(new LootChest(this, 28, 28, 'farm_starter')); + + // DISABLED - City chests removed for cleaner gameplay + // this.chests.push(new LootChest(this, 60, 60, 'city')); + // this.chests.push(new LootChest(this, 70, 60, 'city')); + // this.chests.push(new LootChest(this, 65, 70, 'elite')); + + // SIGNPOSTS/NAVIGATION + console.log('🪧 Adding Signposts...'); + this.signposts = []; + + // Path markers (using fence sprites as signposts) + // ONLY if terrainSystem was successfully initialized + if (this.terrainSystem) { + const pathMarkers = [ + { x: 35, y: 35, label: '→ City' }, + { x: 50, y: 50, label: '← Farm' }, + ]; + + for (const marker of pathMarkers) { + this.terrainSystem.addDecoration(marker.x, marker.y, 'fence'); + this.signposts.push({ gridX: marker.x, gridY: marker.y, label: marker.label }); + } + } else { + console.warn('⚠️ TerrainSystem not initialized - skipping signposts'); + } + + // Kamera sledi igralcu z gladko interpolacijo (lerp 0.1) + this.cameras.main.startFollow(this.player.sprite, true, 0.1, 0.1); + + // Nastavi deadzone (100px border) + this.cameras.main.setDeadzone(100, 100); + + // Round pixels za crisp pixel art + this.cameras.main.roundPixels = true; + + // Zoom out za boljši pogled (85% zoom) + this.cameras.main.setZoom(0.85); + + // 🌍 PHASE 28: Camera bounds for 500x500 world (48px tiles) + const worldSize = 500 * 48; // 24000x24000 pixels + this.cameras.main.setBounds(0, 0, worldSize, worldSize); + this.physics.world.setBounds(0, 0, worldSize, worldSize); + console.log(`📷 Camera bounds set to ${worldSize}x${worldSize}`); + + // Parallax oblaki + this.createClouds(); + + // Kamera kontrole + this.setupCamera(); + + // Initialize Systems + console.log('🌦️ Initializing Unified Weather System...'); + this.weatherSystem = new WeatherSystem(this); + this.timeSystem = this.weatherSystem; // Alias + + // 💡 LIGHTING & SHADOW SYSTEM + console.log('💡 Initializing Lighting & Shadow System...'); + this.lightingSystem = new LightingSystem(this); + + // Create player shadow + if (this.player) { + this.lightingSystem.createShadow(this.player, 12, 30, 15); + this.lightingSystem.createPlayerTorch(this.player); // Auto-torch at night + } + + // 🌬️ WEATHER ENHANCEMENTS SYSTEM + console.log('🌬️ Initializing Weather Enhancements System...'); + this.weatherEnhancements = new WeatherEnhancementsSystem(this); + + // 🌍 PHASE 28: BiomeSystem & ChunkManager already initialized in create() before terrain generation! + // No need to initialize again here. + + // 🎨 UI POLISH SYSTEM + console.log('🎨 UI POLISH System...'); + this.uiPolish = new UIPolishSystem(this); + + this.statsSystem = new StatsSystem(this); + this.inventorySystem = new InventorySystem(this); + + // 🛠️ CRAFTING SYSTEM + this.craftingSystem = new CraftingSystem(this); + this.craftingSystem.loadRecipes().then(() => { + console.log('🛠️ Crafting system ready!'); + + // Create UI after recipes loaded + this.craftingUI = new CraftingUI(this); + + // Add C key to toggle crafting UI + this.input.keyboard.on('keydown-C', () => { + if (this.craftingUI) { + this.craftingUI.toggle(); } - - // Dodaj SADNO DREVO - this.terrainSystem.addDecoration(pos.x, pos.y, pos.type); - - // Animacija rasti - if (this.terrainSystem.visibleDecorations.has(key)) { - const sprite = this.terrainSystem.visibleDecorations.get(key); - sprite.setScale(0.01); - this.tweens.add({ - targets: sprite, - scaleX: 0.04, - scaleY: 0.04, - duration: 2000, - ease: 'Bounce.out' - }); - } - - console.log(`🌳 Drevo zraslo: ${pos.type} na (${pos.x}, ${pos.y})`); }); }); - console.log(`✅ Sadovnjak ustvarjen na (${orchardX}, ${orchardY}) - ${treeCount} sadik (bodo rasle v 30s)`); - */ + // ======================================================== + // 💎 NEOMEJENI VIRI - Les in Kamen + // ======================================================== + console.log('💎 Dodajam neomejene vire...'); + this.inventorySystem.addItem('wood', 999999); + this.inventorySystem.addItem('stone', 999999); + this.inventorySystem.gold = 999999; + console.log('✅ Neomejeni viri dodani: 999,999 lesa, kamna in zlata!'); // ======================================================== + this.lootSystem = new LootSystem(this); + this.interactionSystem = new InteractionSystem(this); + this.farmingSystem = new FarmingSystem(this); + this.buildingSystem = new BuildingSystem(this); + // this.pathfinding = new Pathfinding(this); // REMOVED: Using PathfindingSystem (Worker) instead + this.questSystem = new QuestSystem(this); + this.collectionSystem = new CollectionSystem(this); + this.multiplayerSystem = new MultiplayerSystem(this); + this.worldEventSystem = new WorldEventSystem(this); + this.hybridSkillSystem = new HybridSkillSystem(this); + this.oceanSystem = new OceanSystem(this); + + // Central Popup System (for quests, dialogs, etc.) + this.centralPopup = new CentralPopupSystem(this); + + // Tutorial System (shows keyboard shortcuts) + this.tutorialSystem = new TutorialSystem(this); + + // Full Inventory UI (24 slots, I key to open) + this.fullInventoryUI = new FullInventoryUI(this); + + this.legacySystem = new LegacySystem(this); + + // Initialize Sound Manager + console.log('🎵 Initializing Sound Manager...'); + this.soundManager = new SoundManager(this); + this.soundManager.startMusic(); + + // Initialize Parallax System + console.log('🌄 Initializing Parallax System...'); + this.parallaxSystem = new ParallaxSystem(this); + + // Initialize Particle Effects + console.log('✨ Initializing Particle Effects...'); + this.particleEffects = new ParticleEffects(this); + this.particleEffects.createFallingLeaves(); + + // ✨ PARTICLE ENHANCEMENTS SYSTEM + console.log('✨ Initializing Particle Enhancements System...'); + this.particleEnhancements = new ParticleEnhancementsSystem(this); + + // Initialize Accessibility System + console.log('♿ Initializing Accessibility System...'); + this.accessibilitySystem = new AccessibilitySystem(this); + + // Initialize Visual Sound Cue System (for deaf/hard-of-hearing players) + console.log('👁️ Initializing Visual Sound Cue System...'); + this.visualSoundCueSystem = new VisualSoundCueSystem(this); + + // Initialize Input Remapping System (for custom controls) + console.log('🎮 Initializing Input Remapping System...'); + this.inputRemapping = new InputRemappingSystem(this); + + // Initialize Screen Reader System (for blind/visually impaired players) + console.log('🔊 Initializing Screen Reader System...'); + this.screenReader = new ScreenReaderSystem(this); + + // Initialize Dyslexia Support System + console.log('📖 Initializing Dyslexia Support System...'); + this.dyslexiaSupport = new DyslexiaSupportSystem(this); + + // Initialize ADHD/Autism Support System + console.log('🧠 Initializing ADHD/Autism Support System...'); + this.adhdAutismSupport = new ADHDAutismSupportSystem(this); + + // Initialize Motor Accessibility System + console.log('🦾 Initializing Motor Accessibility System...'); + this.motorAccessibility = new MotorAccessibilitySystem(this); + + // Initialize Visual Enhancement System + console.log('✨ Initializing Visual Enhancement System...'); + this.visualEnhancements = new VisualEnhancementSystem(this); + + // Initialize Fog of War System + console.log('🌫️ Initializing Fog of War System...'); + this.fogOfWar = new FogOfWarSystem(this); + + // Initialize UI Graphics System + console.log('🎨 Initializing UI Graphics System...'); + this.uiGraphics = new UIGraphicsSystem(this); + + // Initialize Building Visuals System + console.log('🏭 Initializing Building Visuals System...'); + this.buildingVisuals = new BuildingVisualsSystem(this); + + // Initialize Skill Tree System + console.log('🌳 Initializing Skill Tree System...'); + this.skillTree = new SkillTreeSystem(this); + + // Initialize Crafting Tiers System + console.log('⚒️ Initializing Crafting Tiers System...'); + this.craftingTiers = new CraftingTiersSystem(this); + + // Initialize Farm Automation System + console.log('🤖 Initializing Farm Automation System...'); + this.farmAutomation = new FarmAutomationSystem(this); + + // Initialize Animal Breeding System + console.log('🐑 Initializing Animal Breeding System...'); + this.animalBreeding = new AnimalBreedingSystem(this); + + // Initialize Automation Tier System + console.log('🤖 Initializing Automation Tier System...'); + this.automationTiers = new AutomationTierSystem(this); + + // Initialize Breeding UI System + console.log('🌳 Initializing Breeding UI System...'); + this.breedingUI = new BreedingUISystem(this); - // CITY CONTENT: Ruins, Chests, Spawners - console.log('🏚️ Generating City Content...'); - - // DISABLED - City structures removed for cleaner gameplay - // Main Ruins - // this.terrainSystem.placeStructure(55, 55, 'ruin'); - // this.terrainSystem.placeStructure(65, 65, 'ruin'); - // this.terrainSystem.placeStructure(75, 75, 'ruin'); - // this.terrainSystem.placeStructure(60, 70, 'ruin'); - // this.terrainSystem.placeStructure(70, 60, 'ruin'); - - // Arena (Boss battle area) - // this.terrainSystem.placeStructure(75, 55, 'arena'); - - // Treasure Chests (scattered in ruins) - // this.terrainSystem.placeStructure(56, 56, 'chest'); - // this.terrainSystem.placeStructure(66, 66, 'chest'); - // this.terrainSystem.placeStructure(76, 76, 'chest'); - - // Zombie Spawners (in city) - // this.terrainSystem.placeStructure(58, 68, 'spawner'); - // this.terrainSystem.placeStructure(72, 62, 'spawner'); - - // CESTE (ROADS) - povezava med farmo (20,20) in mestom (65,65) - console.log('🛣️ Building Roads...'); - // Horizontalna cesta od farme - for (let x = 20; x <= 45; x++) { - if (this.terrainSystem.tiles[22] && this.terrainSystem.tiles[22][x]) { - this.terrainSystem.tiles[22][x].type = 'pavement'; - if (this.terrainSystem.tiles[22][x].sprite) { - this.terrainSystem.tiles[22][x].sprite.setTexture('dirt'); - this.terrainSystem.tiles[22][x].sprite.setTint(0x808080); - } - } - } - // Vertikalna cesta do mesta - for (let y = 22; y <= 65; y++) { - if (this.terrainSystem.tiles[y] && this.terrainSystem.tiles[y][45]) { - this.terrainSystem.tiles[y][45].type = 'pavement'; - if (this.terrainSystem.tiles[y][45].sprite) { - this.terrainSystem.tiles[y][45].sprite.setTexture('dirt'); - this.terrainSystem.tiles[y][45].sprite.setTint(0x808080); - } - } - } - // Horizontalna cesta do mesta - for (let x = 45; x <= 65; x++) { - if (this.terrainSystem.tiles[65] && this.terrainSystem.tiles[65][x]) { - this.terrainSystem.tiles[65][x].type = 'pavement'; - if (this.terrainSystem.tiles[65][x].sprite) { - this.terrainSystem.tiles[65][x].sprite.setTexture('dirt'); - this.terrainSystem.tiles[65][x].sprite.setTint(0x808080); - } - } - } - - // SIGNPOSTS - navigacijske table - // SIGNPOSTS - DISABLED (User request: clean world) - // console.log('🪧 Placing Signposts...'); - // this.terrainSystem.placeStructure(23, 22, 'signpost_city'); - // this.terrainSystem.placeStructure(65, 64, 'signpost_farm'); - // this.terrainSystem.placeStructure(45, 40, 'signpost_both'); - - // DAMAGED CITY WALLS - DISABLED (User request: clean world) - // console.log('🏚️ Placing Damaged City Walls...'); - // const wallPositions = [ - // [65, 65], [70, 65], [75, 65], - // [65, 79], [70, 79], [75, 79], - // [65, 70], [65, 75], - // [79, 70], [79, 75] - // ]; - // wallPositions.forEach(([wx, wy]) => { - // if (Math.random() < 0.7) { - // this.terrainSystem.placeStructure(wx, wy, 'wall_damaged'); - // } - // }); - - // Initialize Pathfinding (Worker) - console.log('🗺️ Initializing Pathfinding...'); - this.pathfinding = new PathfindingSystem(this); - this.pathfinding.updateGrid(); - - } catch (e) { - console.error("Terrain system failed:", e); - } - - // Dodaj igralca NA SPAWN TOČKI - console.log('👤 Initializing player...'); - const savedSpawn = localStorage.getItem('novafarma_spawn_point'); - - // 🌍 PHASE 28: Center of 500x500 world - let playerSpawnX = 250, playerSpawnY = 250; // Center of world! - - if (savedSpawn) { - [playerSpawnX, playerSpawnY] = savedSpawn.split(',').map(Number); - console.log(`👤 Spawning player at saved location: (${playerSpawnX}, ${playerSpawnY})`); - } else { - console.log(`👤 Spawning player at world center: (${playerSpawnX}, ${playerSpawnY})`); - } - - this.player = new Player(this, playerSpawnX, playerSpawnY, this.terrainOffsetX, this.terrainOffsetY); - - // 🌍 PHASE 28: Load initial chunks around player - if (this.chunkManager) { - console.log('💾 Loading initial chunks around player...'); - this.chunkManager.updateActiveChunks(playerSpawnX, playerSpawnY); - const stats = this.chunkManager.getStats(); - console.log(`✅ Loaded ${stats.activeChunks} chunks (${stats.totalTilesLoaded} tiles)`); - } - - // 🎯 SORTABLE OBJECTS GROUP - Za 2.5D Z-Sorting - console.log('🎯 Creating sortableObjects group for Z-sorting...'); - this.sortableObjects = this.add.group(); - - // Dodaj player sprite v sortableObjects - if (this.player && this.player.sprite) { - this.sortableObjects.add(this.player.sprite); - console.log('✅ Player added to sortableObjects'); - } - - // ALL NPCs REMOVED - Solo farming mode - console.log('🌾 Solo farming mode - no NPCs'); - - // FPS Monitor (Performance) - // FPS Monitor - DISABLED (Using UnifiedStatsPanel instead) - // console.log('📊 Initializing FPS Monitor...'); - // this.fpsMonitor = new FPSMonitor(this); - - // Unified Stats Panel (Performance + Debug in one) - console.log('📊 Initializing Unified Stats Panel...'); - this.unifiedStatsPanel = new UnifiedStatsPanel(this); - - // NPC Spawner - DISABLED (NPCs look like player duplicates) - console.log('🧟 NPC Spawner - DISABLED'); - this.npcSpawner = null; // new NPCSpawner(this); - // this.npcSpawner.spawnInitialNPCs(); - - // Easter Egg: Broken Scooter - console.log('🛵 Spawning Scooter Easter Egg...'); - this.vehicles = []; - // const scooter = new Scooter(this, 25, 25); - // this.vehicles.push(scooter); - - // ZOMBIE SPAWNERS (City area) - console.log('👹 Creating Zombie Spawners...'); - this.spawners = []; - - // DISABLED - Too many zombies for testing - // this.spawners.push(new ZombieSpawner(this, 55, 55, 5, 2, 25000)); // NW - // this.spawners.push(new ZombieSpawner(this, 75, 55, 5, 2, 25000)); // NE - // this.spawners.push(new ZombieSpawner(this, 65, 75, 5, 3, 20000)); // South - - // LOOT CHESTS - console.log('📦 Placing Loot Chests...'); - this.chests = []; - - // Farm Starter Chest ONLY (near spawn) - this.chests.push(new LootChest(this, 28, 28, 'farm_starter')); - - // DISABLED - City chests removed for cleaner gameplay - // this.chests.push(new LootChest(this, 60, 60, 'city')); - // this.chests.push(new LootChest(this, 70, 60, 'city')); - // this.chests.push(new LootChest(this, 65, 70, 'elite')); - - // SIGNPOSTS/NAVIGATION - console.log('🪧 Adding Signposts...'); - this.signposts = []; - - // Path markers (using fence sprites as signposts) - // ONLY if terrainSystem was successfully initialized - if (this.terrainSystem) { - const pathMarkers = [ - { x: 35, y: 35, label: '→ City' }, - { x: 50, y: 50, label: '← Farm' }, - ]; - - for (const marker of pathMarkers) { - this.terrainSystem.addDecoration(marker.x, marker.y, 'fence'); - this.signposts.push({ gridX: marker.x, gridY: marker.y, label: marker.label }); - } - } else { - console.warn('⚠️ TerrainSystem not initialized - skipping signposts'); - } - - // Kamera sledi igralcu z gladko interpolacijo (lerp 0.1) - this.cameras.main.startFollow(this.player.sprite, true, 0.1, 0.1); - - // Nastavi deadzone (100px border) - this.cameras.main.setDeadzone(100, 100); - - // Round pixels za crisp pixel art - this.cameras.main.roundPixels = true; - - // Zoom out za boljši pogled (85% zoom) - this.cameras.main.setZoom(0.85); - - // 🌍 PHASE 28: Camera bounds for 500x500 world (48px tiles) - const worldSize = 500 * 48; // 24000x24000 pixels - this.cameras.main.setBounds(0, 0, worldSize, worldSize); - this.physics.world.setBounds(0, 0, worldSize, worldSize); - console.log(`📷 Camera bounds set to ${worldSize}x${worldSize}`); - - // Parallax oblaki - this.createClouds(); - - // Kamera kontrole - this.setupCamera(); - - // Initialize Systems - console.log('🌦️ Initializing Unified Weather System...'); - this.weatherSystem = new WeatherSystem(this); - this.timeSystem = this.weatherSystem; // Alias - - // 💡 LIGHTING & SHADOW SYSTEM - console.log('💡 Initializing Lighting & Shadow System...'); - this.lightingSystem = new LightingSystem(this); - - // Create player shadow - if (this.player) { - this.lightingSystem.createShadow(this.player, 12, 30, 15); - this.lightingSystem.createPlayerTorch(this.player); // Auto-torch at night - } - - // 🌬️ WEATHER ENHANCEMENTS SYSTEM - console.log('🌬️ Initializing Weather Enhancements System...'); - this.weatherEnhancements = new WeatherEnhancementsSystem(this); - - // 🌍 PHASE 28: BiomeSystem & ChunkManager already initialized in create() before terrain generation! - // No need to initialize again here. - - // 🎨 UI POLISH SYSTEM - console.log('🎨 UI POLISH System...'); - this.uiPolish = new UIPolishSystem(this); - - this.statsSystem = new StatsSystem(this); - this.inventorySystem = new InventorySystem(this); - - // 🛠️ CRAFTING SYSTEM - this.craftingSystem = new CraftingSystem(this); - this.craftingSystem.loadRecipes().then(() => { - console.log('🛠️ Crafting system ready!'); - - // Create UI after recipes loaded - this.craftingUI = new CraftingUI(this); - - // Add C key to toggle crafting UI - this.input.keyboard.on('keydown-C', () => { - if (this.craftingUI) { - this.craftingUI.toggle(); - } - }); - }); - - // ======================================================== - // 💎 NEOMEJENI VIRI - Les in Kamen - // ======================================================== - console.log('💎 Dodajam neomejene vire...'); - this.inventorySystem.addItem('wood', 999999); - this.inventorySystem.addItem('stone', 999999); - this.inventorySystem.gold = 999999; - console.log('✅ Neomejeni viri dodani: 999,999 lesa, kamna in zlata!'); - // ======================================================== - - this.lootSystem = new LootSystem(this); - this.interactionSystem = new InteractionSystem(this); - this.farmingSystem = new FarmingSystem(this); - this.buildingSystem = new BuildingSystem(this); - // this.pathfinding = new Pathfinding(this); // REMOVED: Using PathfindingSystem (Worker) instead - this.questSystem = new QuestSystem(this); - this.collectionSystem = new CollectionSystem(this); - this.multiplayerSystem = new MultiplayerSystem(this); - this.worldEventSystem = new WorldEventSystem(this); - this.hybridSkillSystem = new HybridSkillSystem(this); - this.oceanSystem = new OceanSystem(this); - - // Central Popup System (for quests, dialogs, etc.) - this.centralPopup = new CentralPopupSystem(this); - - // Tutorial System (shows keyboard shortcuts) - this.tutorialSystem = new TutorialSystem(this); - - // Full Inventory UI (24 slots, I key to open) - this.fullInventoryUI = new FullInventoryUI(this); - - this.legacySystem = new LegacySystem(this); - - // Initialize Sound Manager - console.log('🎵 Initializing Sound Manager...'); - this.soundManager = new SoundManager(this); - this.soundManager.startMusic(); - - // Initialize Parallax System - console.log('🌄 Initializing Parallax System...'); - this.parallaxSystem = new ParallaxSystem(this); - - // Initialize Particle Effects - console.log('✨ Initializing Particle Effects...'); - this.particleEffects = new ParticleEffects(this); - this.particleEffects.createFallingLeaves(); - - // ✨ PARTICLE ENHANCEMENTS SYSTEM - console.log('✨ Initializing Particle Enhancements System...'); - this.particleEnhancements = new ParticleEnhancementsSystem(this); - - // Initialize Accessibility System - console.log('♿ Initializing Accessibility System...'); - this.accessibilitySystem = new AccessibilitySystem(this); - - // Initialize Visual Sound Cue System (for deaf/hard-of-hearing players) - console.log('👁️ Initializing Visual Sound Cue System...'); - this.visualSoundCueSystem = new VisualSoundCueSystem(this); - - // Initialize Input Remapping System (for custom controls) - console.log('🎮 Initializing Input Remapping System...'); - this.inputRemapping = new InputRemappingSystem(this); - - // Initialize Screen Reader System (for blind/visually impaired players) - console.log('🔊 Initializing Screen Reader System...'); - this.screenReader = new ScreenReaderSystem(this); - - // Initialize Dyslexia Support System - console.log('📖 Initializing Dyslexia Support System...'); - this.dyslexiaSupport = new DyslexiaSupportSystem(this); - - // Initialize ADHD/Autism Support System - console.log('🧠 Initializing ADHD/Autism Support System...'); - this.adhdAutismSupport = new ADHDAutismSupportSystem(this); - - // Initialize Motor Accessibility System - console.log('🦾 Initializing Motor Accessibility System...'); - this.motorAccessibility = new MotorAccessibilitySystem(this); - - // Initialize Visual Enhancement System - console.log('✨ Initializing Visual Enhancement System...'); - this.visualEnhancements = new VisualEnhancementSystem(this); - - // Initialize Fog of War System - console.log('🌫️ Initializing Fog of War System...'); - this.fogOfWar = new FogOfWarSystem(this); - - // Initialize UI Graphics System - console.log('🎨 Initializing UI Graphics System...'); - this.uiGraphics = new UIGraphicsSystem(this); - - // Initialize Building Visuals System - console.log('🏭 Initializing Building Visuals System...'); - this.buildingVisuals = new BuildingVisualsSystem(this); - - // Initialize Skill Tree System - console.log('🌳 Initializing Skill Tree System...'); - this.skillTree = new SkillTreeSystem(this); - - // Initialize Crafting Tiers System - console.log('⚒️ Initializing Crafting Tiers System...'); - this.craftingTiers = new CraftingTiersSystem(this); - - // Initialize Farm Automation System - console.log('🤖 Initializing Farm Automation System...'); - this.farmAutomation = new FarmAutomationSystem(this); - - // Initialize Animal Breeding System - console.log('🐑 Initializing Animal Breeding System...'); - this.animalBreeding = new AnimalBreedingSystem(this); - - // Initialize Automation Tier System - console.log('🤖 Initializing Automation Tier System...'); - this.automationTiers = new AutomationTierSystem(this); - - // Initialize Breeding UI System - console.log('🌳 Initializing Breeding UI System...'); - this.breedingUI = new BreedingUISystem(this); - - // Initialize Cooking System - console.log('🍳 Initializing Cooking System...'); - this.cooking = new CookingSystem(this); - - // Initialize Fishing System - console.log('🎣 Initializing Fishing System...'); - this.fishing = new FishingSystem(this); - - // Initialize Worker Creatures System - console.log('🦌 Initializing Worker Creatures System...'); - this.workerCreatures = new WorkerCreaturesSystem(this); - - // Initialize Mining & Dungeons System - console.log('⛏️ Initializing Mining & Dungeons System...'); - this.miningDungeons = new MiningDungeonsSystem(this); - - // Initialize Boss Battles System - console.log('👹 Initializing Boss Battles System...'); - this.bossBattles = new BossBattlesSystem(this); - - // Initialize Story & Quest System - console.log('📖 Initializing Story & Quest System...'); - this.storyQuest = new StoryQuestSystem(this); - - // Initialize Multiplayer & Social System - console.log('🌐 Initializing Multiplayer & Social System...'); - this.multiplayerSocial = new MultiplayerSocialSystem(this); - - // Initialize Technical & Performance System - console.log('⚡ Initializing Technical & Performance System...'); - this.technicalPerformance = new TechnicalPerformanceSystem(this); - - // Initialize Platform Support System - console.log('🎮 Initializing Platform Support System...'); - this.platformSupport = new PlatformSupportSystem(this); - - // Initialize Save System Expansion - console.log('💾 Initializing Save System Expansion...'); - this.saveSystemExpansion = new SaveSystemExpansion(this); - - // ======================================================== - // 🎬 ACT 1 STORY SYSTEMS (NEW - 23.12.2025) - // ======================================================== - console.log('🎬 Initializing Act 1 Story Systems...'); - - // Dialogue System - NPC conversations - console.log('💬 Initializing Dialogue System...'); - this.dialogueSystem = new DialogueSystem(this); - - // Twin Bond System - Kai ↔ Ana psychic connection - console.log('💞 Initializing Twin Bond System...'); - this.twinBondSystem = new TwinBondSystem(this); - - // Quest System Expanded - Main campaign quests - console.log('📖 Initializing Quest System Expanded...'); - this.questSystemExpanded = new QuestSystemExpanded(this); - - // Quest Tracker UI - Visual quest display - console.log('📋 Initializing Quest Tracker UI...'); - this.questTrackerUI = new QuestTrackerUI(this); - - // Load Grok dialogues - if (typeof GrokDialogues !== 'undefined') { - console.log('🧘 Loading Grok dialogues...'); - Object.keys(GrokDialogues).forEach(key => { - this.dialogueSystem.registerDialogue(key, GrokDialogues[key]); - }); - console.log(`✅ Loaded ${Object.keys(GrokDialogues).length} Grok dialogue trees`); - } - - // Auto-start Quest 1.1 after 2 seconds - this.time.delayedCall(2000, () => { - if (this.questSystemExpanded && !this.questSystemExpanded.isQuestComplete('quest_1_1_wake_up')) { - console.log('📖 Auto-starting Quest 1.1: A New Beginning'); - this.questSystemExpanded.startQuest('quest_1_1_wake_up'); - } - }); - - console.log('✅ Act 1 Story Systems ready!'); - // ======================================================== - - console.log('🎉🎉🎉 ALL 31 SYSTEMS INITIALIZED! 🎉🎉🎉'); // Updated from 27 to 31 - console.log('💀 MRTVA DOLINA - DEATH VALLEY 💀'); - - // Show epilepsy warning on first launch - const hasSeenWarning = localStorage.getItem('novafarma_epilepsy_warning'); - if (!hasSeenWarning) { - this.time.delayedCall(2000, () => { - this.accessibilitySystem.showEpilepsyWarning(() => { - localStorage.setItem('novafarma_epilepsy_warning', 'true'); + // Initialize Cooking System + console.log('🍳 Initializing Cooking System...'); + this.cooking = new CookingSystem(this); + + // Initialize Fishing System + console.log('🎣 Initializing Fishing System...'); + this.fishing = new FishingSystem(this); + + // Initialize Worker Creatures System + console.log('🦌 Initializing Worker Creatures System...'); + this.workerCreatures = new WorkerCreaturesSystem(this); + + // Initialize Mining & Dungeons System + console.log('⛏️ Initializing Mining & Dungeons System...'); + this.miningDungeons = new MiningDungeonsSystem(this); + + // Initialize Boss Battles System + console.log('👹 Initializing Boss Battles System...'); + this.bossBattles = new BossBattlesSystem(this); + + // Initialize Story & Quest System + console.log('📖 Initializing Story & Quest System...'); + this.storyQuest = new StoryQuestSystem(this); + + // Initialize Multiplayer & Social System + console.log('🌐 Initializing Multiplayer & Social System...'); + this.multiplayerSocial = new MultiplayerSocialSystem(this); + + // Initialize Technical & Performance System + console.log('⚡ Initializing Technical & Performance System...'); + this.technicalPerformance = new TechnicalPerformanceSystem(this); + + // Initialize Platform Support System + console.log('🎮 Initializing Platform Support System...'); + this.platformSupport = new PlatformSupportSystem(this); + + // Initialize Save System Expansion + console.log('💾 Initializing Save System Expansion...'); + this.saveSystemExpansion = new SaveSystemExpansion(this); + + // ======================================================== + // 🎬 ACT 1 STORY SYSTEMS (NEW - 23.12.2025) + // ======================================================== + console.log('🎬 Initializing Act 1 Story Systems...'); + + // Dialogue System - NPC conversations + console.log('💬 Initializing Dialogue System...'); + this.dialogueSystem = new DialogueSystem(this); + + // Twin Bond System - Kai ↔ Ana psychic connection + console.log('💞 Initializing Twin Bond System...'); + this.twinBondSystem = new TwinBondSystem(this); + + // Quest System Expanded - Main campaign quests + console.log('📖 Initializing Quest System Expanded...'); + this.questSystemExpanded = new QuestSystemExpanded(this); + + // Quest Tracker UI - Visual quest display + console.log('📋 Initializing Quest Tracker UI...'); + this.questTrackerUI = new QuestTrackerUI(this); + + // Load Grok dialogues + if (typeof GrokDialogues !== 'undefined') { + console.log('🧘 Loading Grok dialogues...'); + Object.keys(GrokDialogues).forEach(key => { + this.dialogueSystem.registerDialogue(key, GrokDialogues[key]); }); + console.log(`✅ Loaded ${Object.keys(GrokDialogues).length} Grok dialogue trees`); + } + + // Auto-start Quest 1.1 after 2 seconds + this.time.delayedCall(2000, () => { + if (this.questSystemExpanded && !this.questSystemExpanded.isQuestComplete('quest_1_1_wake_up')) { + console.log('📖 Auto-starting Quest 1.1: A New Beginning'); + this.questSystemExpanded.startQuest('quest_1_1_wake_up'); + } }); + + console.log('✅ Act 1 Story Systems ready!'); + // ======================================================== + + console.log('🎉🎉🎉 ALL 31 SYSTEMS INITIALIZED! 🎉🎉🎉'); // Updated from 27 to 31 + console.log('💀 MRTVA DOLINA - DEATH VALLEY 💀'); + + // Show epilepsy warning on first launch + const hasSeenWarning = localStorage.getItem('novafarma_epilepsy_warning'); + if (!hasSeenWarning) { + this.time.delayedCall(2000, () => { + this.accessibilitySystem.showEpilepsyWarning(() => { + localStorage.setItem('novafarma_epilepsy_warning', 'true'); + }); + }); + } + + + // Generate Item Sprites for UI + TextureGenerator.createItemSprites(this); + + // Launch UI Scene + console.log('🖥️ Launching UI Scene...'); + this.scene.launch('UIScene'); + + // Initialize Save System + this.saveSystem = new SaveSystem(this); + + // Auto-load if available (DISABLED in SaveSystem!) + this.saveSystem.loadGame(); // Vrne false - ne naloži save-a! + + // Debug Text - REMOVED (Version shown in UnifiedStatsPanel) + // this.add.text(10, 10, 'NovaFarma Alpha v0.6', { font: '16px monospace', fill: '#ffffff' }) + // .setScrollFactor(0).setDepth(10000); + + console.log('✅ GameScene ready - FAZA 20 (Full Features)!'); + + // 🎮 PHASE 29: KEY BINDINGS + console.log('🎮 Setting up Phase 29 key bindings...'); + + // E key - Interact with structures/chests + this.input.keyboard.on('keydown-E', () => { + if (this.structureInteraction) { + this.structureInteraction.interact(); + } + }); + + // T key - Talk to NPCs + this.input.keyboard.on('keydown-T', () => { + if (this.npcPopulation) { + this.npcPopulation.talkToNPC(); + } + }); + + // M key - Toggle full map + this.input.keyboard.on('keydown-M', () => { + if (this.mapReveal) { + this.mapReveal.toggleFullMap(); + } + }); + + console.log('✅ Phase 29 key bindings ready! (E: Interact, T: Talk, M: Map)'); + + // Global command: giveSeeds(amount) - daj seeds najbližjemu tamed zombiju + window.giveSeeds = (amount = 10) => { + if (!this.zombieWorkerSystem || !this.player) { + console.log('🚫 System not ready!'); + return; + } + + const workers = this.zombieWorkerSystem.workers; + if (workers.length === 0) { + console.log('🚫 No tamed zombies found!'); + return; + } + + // Find closest worker + const playerPos = this.player.getPosition(); + let closest = null; + let minDist = 999; + + for (const worker of workers) { + const dist = Phaser.Math.Distance.Between(playerPos.x, playerPos.y, worker.gridX, worker.gridY); + if (dist < minDist) { + minDist = dist; + closest = worker; + } + } + + if (closest && closest.workerData) { + closest.workerData.inventory.seeds += amount; + closest.showEmote(`📦+${amount}`); + console.log(`🧟📦 Gave ${amount} seeds to worker! (Total: ${closest.workerData.inventory.seeds})`); + } + }; + + console.log('💡 TIP: Use giveSeeds(20) to give 20 seeds to nearest zombie'); + + // Global command: placeGrave() - postavi grob pri playerju + window.placeGrave = () => { + if (!this.graveSystem || !this.player) { + console.log('🚫 System not ready!'); + return; + } + + const playerPos = this.player.getPosition(); + const result = this.graveSystem.placeGrave( + Math.floor(playerPos.x), + Math.floor(playerPos.y) + ); + + if (result) { + console.log('🪦 Grave placed successfully!'); + } + }; + + console.log('💡 TIP: Use placeGrave() to place grave at your location'); + + // Global command: giveAllParts() - daj vse scooter parts + window.giveAllParts = () => { + if (!this.scooterRepairSystem || !this.inventorySystem) { + console.log('🚫 System not ready!'); + return; + } + + const parts = this.scooterRepairSystem.requiredParts; + const tools = this.scooterRepairSystem.requiredTools; + + for (const [part, count] of Object.entries(parts)) { + this.inventorySystem.addItem(part, count); + } + + for (const [tool, count] of Object.entries(tools)) { + this.inventorySystem.addItem(tool, count); + } + + console.log('✅ All scooter parts and tools added!'); + this.scooterRepairSystem.listMissingParts(); + }; + + // Global command: checkScooter() - preveri kaj manjka + window.checkScooter = () => { + if (!this.scooterRepairSystem) { + console.log('🚫 System not ready!'); + return; + } + + this.scooterRepairSystem.listMissingParts(); + }; + + console.log('💡 TIP: Use checkScooter() to see repair requirements'); + console.log('💡 TIP: Use giveAllParts() to get all scooter parts (testing)'); + + // Global command: unlockZone(id) + window.unlockZone = (id) => { + if (this.expansionSystem) { + this.expansionSystem.unlockZone(id); + } + }; + // Global command: dropBlueprint() + window.dropBlueprint = () => { + if (this.blueprintSystem && this.player) { + const pos = this.player.getPosition(); + this.blueprintSystem.tryDropBlueprint(pos.x, pos.y, 'boss'); // 100% chance + } + }; + + // Global command: placeFurnace() + window.placeFurnace = () => { + if (this.terrainSystem && this.player) { + const pos = this.player.getPosition(); + const x = Math.floor(pos.x); + const y = Math.floor(pos.y); + this.terrainSystem.placeStructure(x, y, 'furnace'); + if (this.inventorySystem) { + this.inventorySystem.addItem('coal', 10); + this.inventorySystem.addItem('ore_iron', 10); + } + console.log(`🏭 Furnace placed at ${x},${y}`); + } + }; + + // Global command: placeMint() + window.placeMint = () => { + if (this.terrainSystem && this.player) { + const pos = this.player.getPosition(); + const x = Math.floor(pos.x); + const y = Math.floor(pos.y); + this.terrainSystem.placeStructure(x, y, 'mint'); + if (this.inventorySystem) { + this.inventorySystem.addItem('iron_bar', 10); + this.inventorySystem.addItem('coal', 10); + } + console.log(`💰 Mint placed at ${x},${y}`); + } + }; + + // TESTNA DREVESA IN KAMNI - Za testiranje + console.log('🌳 Adding test trees and rocks near player...'); + this.terrainSystem.addDecoration(52, 50, 'tree_green'); + this.terrainSystem.addDecoration(48, 50, 'rock'); + this.terrainSystem.addDecoration(50, 52, 'tree_oak'); + this.terrainSystem.addDecoration(50, 48, 'rock_large'); + console.log('✅ Test decorations added at (50±2, 50±2)'); + + // Start Engine + this.Antigravity_Start(); + } catch (err) { + console.error('❌ CRITICAL INITIALIZATION ERROR:', err); } - - - // Generate Item Sprites for UI - TextureGenerator.createItemSprites(this); - - // Launch UI Scene - console.log('🖥️ Launching UI Scene...'); - this.scene.launch('UIScene'); - - // Initialize Save System - this.saveSystem = new SaveSystem(this); - - // Auto-load if available (DISABLED in SaveSystem!) - this.saveSystem.loadGame(); // Vrne false - ne naloži save-a! - - // Debug Text - REMOVED (Version shown in UnifiedStatsPanel) - // this.add.text(10, 10, 'NovaFarma Alpha v0.6', { font: '16px monospace', fill: '#ffffff' }) - // .setScrollFactor(0).setDepth(10000); - - console.log('✅ GameScene ready - FAZA 20 (Full Features)!'); - - // 🎮 PHASE 29: KEY BINDINGS - console.log('🎮 Setting up Phase 29 key bindings...'); - - // E key - Interact with structures/chests - this.input.keyboard.on('keydown-E', () => { - if (this.structureInteraction) { - this.structureInteraction.interact(); - } - }); - - // T key - Talk to NPCs - this.input.keyboard.on('keydown-T', () => { - if (this.npcPopulation) { - this.npcPopulation.talkToNPC(); - } - }); - - // M key - Toggle full map - this.input.keyboard.on('keydown-M', () => { - if (this.mapReveal) { - this.mapReveal.toggleFullMap(); - } - }); - - console.log('✅ Phase 29 key bindings ready! (E: Interact, T: Talk, M: Map)'); - - // Global command: giveSeeds(amount) - daj seeds najbližjemu tamed zombiju - window.giveSeeds = (amount = 10) => { - if (!this.zombieWorkerSystem || !this.player) { - console.log('🚫 System not ready!'); - return; - } - - const workers = this.zombieWorkerSystem.workers; - if (workers.length === 0) { - console.log('🚫 No tamed zombies found!'); - return; - } - - // Find closest worker - const playerPos = this.player.getPosition(); - let closest = null; - let minDist = 999; - - for (const worker of workers) { - const dist = Phaser.Math.Distance.Between(playerPos.x, playerPos.y, worker.gridX, worker.gridY); - if (dist < minDist) { - minDist = dist; - closest = worker; - } - } - - if (closest && closest.workerData) { - closest.workerData.inventory.seeds += amount; - closest.showEmote(`📦+${amount}`); - console.log(`🧟📦 Gave ${amount} seeds to worker! (Total: ${closest.workerData.inventory.seeds})`); - } - }; - - console.log('💡 TIP: Use giveSeeds(20) to give 20 seeds to nearest zombie'); - - // Global command: placeGrave() - postavi grob pri playerju - window.placeGrave = () => { - if (!this.graveSystem || !this.player) { - console.log('🚫 System not ready!'); - return; - } - - const playerPos = this.player.getPosition(); - const result = this.graveSystem.placeGrave( - Math.floor(playerPos.x), - Math.floor(playerPos.y) - ); - - if (result) { - console.log('🪦 Grave placed successfully!'); - } - }; - - console.log('💡 TIP: Use placeGrave() to place grave at your location'); - - // Global command: giveAllParts() - daj vse scooter parts - window.giveAllParts = () => { - if (!this.scooterRepairSystem || !this.inventorySystem) { - console.log('🚫 System not ready!'); - return; - } - - const parts = this.scooterRepairSystem.requiredParts; - const tools = this.scooterRepairSystem.requiredTools; - - for (const [part, count] of Object.entries(parts)) { - this.inventorySystem.addItem(part, count); - } - - for (const [tool, count] of Object.entries(tools)) { - this.inventorySystem.addItem(tool, count); - } - - console.log('✅ All scooter parts and tools added!'); - this.scooterRepairSystem.listMissingParts(); - }; - - // Global command: checkScooter() - preveri kaj manjka - window.checkScooter = () => { - if (!this.scooterRepairSystem) { - console.log('🚫 System not ready!'); - return; - } - - this.scooterRepairSystem.listMissingParts(); - }; - - console.log('💡 TIP: Use checkScooter() to see repair requirements'); - console.log('💡 TIP: Use giveAllParts() to get all scooter parts (testing)'); - - // Global command: unlockZone(id) - window.unlockZone = (id) => { - if (this.expansionSystem) { - this.expansionSystem.unlockZone(id); - } - }; - // Global command: dropBlueprint() - window.dropBlueprint = () => { - if (this.blueprintSystem && this.player) { - const pos = this.player.getPosition(); - this.blueprintSystem.tryDropBlueprint(pos.x, pos.y, 'boss'); // 100% chance - } - }; - - // Global command: placeFurnace() - window.placeFurnace = () => { - if (this.terrainSystem && this.player) { - const pos = this.player.getPosition(); - const x = Math.floor(pos.x); - const y = Math.floor(pos.y); - this.terrainSystem.placeStructure(x, y, 'furnace'); - if (this.inventorySystem) { - this.inventorySystem.addItem('coal', 10); - this.inventorySystem.addItem('ore_iron', 10); - } - console.log(`🏭 Furnace placed at ${x},${y}`); - } - }; - - // Global command: placeMint() - window.placeMint = () => { - if (this.terrainSystem && this.player) { - const pos = this.player.getPosition(); - const x = Math.floor(pos.x); - const y = Math.floor(pos.y); - this.terrainSystem.placeStructure(x, y, 'mint'); - if (this.inventorySystem) { - this.inventorySystem.addItem('iron_bar', 10); - this.inventorySystem.addItem('coal', 10); - } - console.log(`💰 Mint placed at ${x},${y}`); - } - }; - - // TESTNA DREVESA IN KAMNI - Za testiranje - console.log('🌳 Adding test trees and rocks near player...'); - this.terrainSystem.addDecoration(52, 50, 'tree_green'); - this.terrainSystem.addDecoration(48, 50, 'rock'); - this.terrainSystem.addDecoration(50, 52, 'tree_oak'); - this.terrainSystem.addDecoration(50, 48, 'rock_large'); - console.log('✅ Test decorations added at (50±2, 50±2)'); - - // Start Engine - this.Antigravity_Start(); } setupCamera() { @@ -1835,12 +1946,6 @@ class GameScene extends Phaser.Scene { this.parallaxSystem.update(screenX, screenY); } - // Terrain Update - if (this.terrainSystem) { - // Note: Flat2D doesn't need culling (already optimized) - // this.terrainSystem.updateCulling(this.cameras.main); - this.terrainSystem.update(delta); - } // Clouds @@ -1940,17 +2045,17 @@ class GameScene extends Phaser.Scene { /* if (!this.player || this.npcs.length > 50) return; - + const playerPos = this.player.getPosition(); const angle = Math.random() * Math.PI * 2; const distance = Phaser.Math.Between(15, 25); - + const spawnX = Math.floor(playerPos.x + Math.cos(angle) * distance); const spawnY = Math.floor(playerPos.y + Math.sin(angle) * distance); - + if (spawnX < 0 || spawnX >= 100 || spawnY < 0 || spawnY >= 100) return; if (Phaser.Math.Distance.Between(spawnX, spawnY, 20, 20) < 15) return; - + const tile = this.terrainSystem.getTile(spawnX, spawnY); if (tile && tile.type !== 'water') { console.log(`🌑 Night Spawn: Zombie at ${spawnX},${spawnY}`); @@ -2104,12 +2209,6 @@ class GameScene extends Phaser.Scene { // Parallax background update this.updateParallax(delta); - // Terrain system update (za water animacijo) - if (this.terrainSystem && this.terrainSystem.update) { - this.terrainSystem.update(Date.now(), delta); - } else { - console.warn('⚠️ TerrainSystem.update not available!'); - } // 🎮 PHASE 29: SYSTEM UPDATES const playerGridX = this.player ? this.player.gridX : 250; @@ -2217,3 +2316,5 @@ class GameScene extends Phaser.Scene { }); } } + + diff --git a/src/scenes/PreloadScene.js b/src/scenes/PreloadScene.js index 74f32d295..e269804b0 100644 --- a/src/scenes/PreloadScene.js +++ b/src/scenes/PreloadScene.js @@ -36,7 +36,8 @@ class PreloadScene extends Phaser.Scene { // this.load.tilemapTiledJSON('micro_farm_128x128', 'assets/maps/micro_farm_128x128.json'); // 🌾 Testna farma // this.load.tilemapTiledJSON('micro_farm_8x8', 'assets/maps/micro_farm_8x8.json'); // 🏕️ Manjša test mapa // 🗺️ TILED MAP (User's NovaFarma) - this.load.tilemapTiledJSON('NovaFarma', 'assets/maps/NovaFarma.json'); + // Add cache busting to force reload of new exports + this.load.tilemapTiledJSON('NovaFarma', `assets/maps/NovaFarma.json?v=${Date.now()}`); // 🎨 TILED TILESETS (Manual Loading) const kzPath = 'assets/narezano_in_majhno/krvava_zetev_sprites/'; diff --git a/src/systems/Flat2DTerrainSystem.js b/src/systems/Flat2DTerrainSystem.js index 4b27ae2a6..dcbfbeea0 100644 --- a/src/systems/Flat2DTerrainSystem.js +++ b/src/systems/Flat2DTerrainSystem.js @@ -69,6 +69,91 @@ class Flat2DTerrainSystem { console.log('✅ Flat 2D map ready!'); } + // 🗺️ Load map directly from Tiled JSON (User Created) + loadFromTiled(map) { + this.tiledMap = map; + console.log('🗺️ Loading terrain from Tiled map:', map.key); + + // Update system dimensions + this.width = map.width; + this.height = map.height; + this.tileSize = map.tileWidth; + + // Prepare tilesets array + const tilesets = []; + + // Helper to map tileset names to Phaser keys (similar to TiledTestScene) + const getTilesetKey = (name) => { + const mapping = { + 'grass': 'tileset_grass', + 'dirt': 'tileset_dirt', + 'water': 'tileset_water', + 'decorations': 'tileset_decorations', + '01_Ground': 'tileset_01_Ground', + '02_Obstacles': 'tileset_02_Obstacles', + '03_Fences': 'tileset_03_Fences', + '04_Buildings': 'tileset_04_Buildings', + '05_Tools_Items': 'tileset_05_Tools_Items' + }; + return mapping[name] || `tileset_${name}`; + }; + + // Load tilesets + map.tilesets.forEach(tilesetData => { + let textureKey = getTilesetKey(tilesetData.name); + + // 🕵️ Try to find texture (Prefix matched OR Exact name) + if (!this.scene.textures.exists(textureKey)) { + // Fallback: Try the raw tileset name as key + if (this.scene.textures.exists(tilesetData.name)) { + textureKey = tilesetData.name; + } + } + + if (this.scene.textures.exists(textureKey)) { + try { + const tileset = map.addTilesetImage(tilesetData.name, textureKey); + if (tileset) { + tilesets.push(tileset); + console.log(` ✅ Tileset mapped: "${tilesetData.name}" -> Key: "${textureKey}"`); + } + } catch (e) { + console.error(` ❌ Failed to add tileset: ${tilesetData.name}`, e); + } + } else { + console.warn(` ⚠️ Texture not found for tileset: "${tilesetData.name}". Tried keys: "tileset_${tilesetData.name}", "${tilesetData.name}"`); + } + }); + + // Create layers + console.log(` Found ${map.layers.length} layers in map.`); + map.layers.forEach((layerData, index) => { + console.log(` Processing Layer ${index}: Name="${layerData.name}", Type="${layerData.type}", Visible=${layerData.visible}`); + + if (layerData.visible && layerData.type === 'tilelayer') { + const layer = map.createLayer(layerData.name, tilesets, 0, 0); + if (layer) { + console.log(` ✅ Layer created: ${layerData.name}`); + + // Depth sorting + if (layerData.name.toLowerCase().includes('ground')) layer.setDepth(1); + else if (layerData.name.toLowerCase().includes('path')) layer.setDepth(2); + else if (layerData.name.toLowerCase().includes('decor') || layerData.name.toLowerCase().includes('obstacle')) layer.setDepth(3); + else if (layerData.name.toLowerCase().includes('buidling') || layerData.name.toLowerCase().includes('fence') || layerData.name.toLowerCase().includes('player')) layer.setDepth(4); + else layer.setDepth(2); + + // Scale if needed (usually 1 for Tiled maps if assets match) + } + } + }); + + // Setup camera bounds + this.scene.cameras.main.setBounds(0, 0, map.widthInPixels, map.heightInPixels); + this.scene.cameras.main.centerOn(map.widthInPixels / 2, map.heightInPixels / 2); + + console.log('✅ Tiled map loaded and rendered!'); + } + // 🌍 PHASE 28: Create simple biome-aware background createBiomeBackground() { const size = this.tileSize; diff --git a/src/systems/PathfindingSystem.js b/src/systems/PathfindingSystem.js index fcaf424c6..25ab87d26 100644 --- a/src/systems/PathfindingSystem.js +++ b/src/systems/PathfindingSystem.js @@ -10,7 +10,7 @@ class PathfindingSystem { // Ustvarimo workerja this.worker = new Worker('src/workers/pathfinding.worker.js'); this.worker.onmessage = this.handleMessage.bind(this); - console.log('✅ PathfindingWorker initialized.'); + console.log('✅ PathfindingWorker initialized (v2.1 - Tiled Support Ready).'); this.initialized = true; } catch (err) { console.error('❌ Failed to init PathfindingWorker:', err); @@ -31,26 +31,46 @@ class PathfindingSystem { for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { let blocked = 0; - const tile = ts.tiles[y][x]; - // 1. Voda in void - if (!tile || tile.type === 'water' || tile.type === 'void') { - blocked = 1; - } else { - // 2. Dekoracije (Ovire) - // Uporabimo že obstoječo logiko v TerrainSystemu (če obstaja) ali preverimo dekoracije - const key = `${x},${y}`; - const decor = ts.decorationsMap.get(key); - if (decor) { - const solidTypes = [ - 'tree', 'tree_green', 'tree_blue', 'tree_dead', - 'tree_green_new', 'tree_blue_new', 'tree_dead_new', - 'rock', 'rock_asset', 'rock_new', 'rock_small', 'rock_1', 'rock_2', - 'wall', 'fence', 'house', 'gravestone' - ]; - // Preverimo substring za tipe (npr. 'tree' ujame 'tree_blue') - const isSolid = solidTypes.some(t => decor.type.includes(t)); - if (isSolid) blocked = 1; + // 🗺️ 1. TILED MAP SUPPORT + if (ts.tiledMap) { + // Check various obstacle layers + const obstacleLayers = ['Obstacles', 'Buildings', 'Fences', '02_Obstacles', '03_Fences', '04_Buildings']; + let isBlocked = false; + + for (const layerName of obstacleLayers) { + const tile = ts.tiledMap.getTileAt(x, y, true, layerName); + if (tile && tile.index !== -1) { + isBlocked = true; + break; + } + } + + if (isBlocked) { + blocked = 1; + } + } + // 📊 2. PROCEDURAL / FLAT TILES SUPPORT + else { + const tile = ts.tiles && ts.tiles[y] ? ts.tiles[y][x] : null; + + // 1. Voda in void + if (!tile || tile.type === 'water' || tile.type === 'void') { + blocked = 1; + } else { + // 2. Dekoracije (Ovire) + const key = `${x},${y}`; + const decor = ts.decorationsMap.get(key); + if (decor) { + const solidTypes = [ + 'tree', 'tree_green', 'tree_blue', 'tree_dead', + 'tree_green_new', 'tree_blue_new', 'tree_dead_new', + 'rock', 'rock_asset', 'rock_new', 'rock_small', 'rock_1', 'rock_2', + 'wall', 'fence', 'house', 'gravestone' + ]; + const isSolid = solidTypes.some(t => decor.type && decor.type.includes(t)); + if (isSolid) blocked = 1; + } } }