diff --git a/app/net/packets/download.js b/app/net/packets/download.js new file mode 100644 index 0000000..e823db4 --- /dev/null +++ b/app/net/packets/download.js @@ -0,0 +1,3 @@ +import Packet from '@/net/packet.js'; + +export default class Download extends Packet {} diff --git a/app/routes/_main-menu.play.$.$/route.jsx b/app/routes/_main-menu.play.$.$/route.jsx index 3bf682e..0457eb1 100644 --- a/app/routes/_main-menu.play.$.$/route.jsx +++ b/app/routes/_main-menu.play.$.$/route.jsx @@ -98,6 +98,25 @@ export default function PlaySpecific() { client.removePacketListener('ConnectionStatus', onConnectionStatus); }; }, [client]); + useEffect(() => { + if (!client) { + return; + } + function onDownload({data, filename}) { + var blob = new Blob( + [(new TextEncoder()).encode(JSON.stringify(data))], + {type: 'application/json'}, + ); + var link = document.createElement('a'); + link.href = window.URL.createObjectURL(blob); + link.download = filename; + link.click(); + } + client.addPacketListener('Download', onDownload); + return () => { + client.removePacketListener('Download', onDownload); + }; + }, [client]); useEffect(() => { if (!client || !disconnected) { return; diff --git a/app/server/create/homestead.js b/app/server/create/homestead.js index ef8510b..66838a0 100644 --- a/app/server/create/homestead.js +++ b/app/server/create/homestead.js @@ -1,3 +1,5 @@ +import data from '../../../public/assets/dev/homestead.json'; + export default async function createHomestead(id) { const area = {x: 100, y: 60}; const entities = []; @@ -8,7 +10,7 @@ export default async function createHomestead(id) { layers: [ { area, - data: Array(area.x * area.y).fill(0).map(() => 1 + Math.floor(Math.random() * 4)), + data, source: '/assets/tileset.json', tileSize: {x: 16, y: 16}, }, @@ -152,5 +154,33 @@ export default async function createHomestead(id) { for (let i = 0; i < 30; ++i) { entities.push(kitty); } + entities.push({ + Collider: { + bodies: [ + { + points: [ + {x: -8, y: -16}, + {x: 7, y: -16}, + {x: 7, y: 15}, + {x: -8, y: 15}, + ], + }, + ], + collisionStartScript: ` + ecs.switchEcs( + other, + ['houses', ${id}].join('/'), + { + Position: { + x: 72, + y: 304, + }, + }, + ); + `, + }, + Position: {x: 8, y: 432}, + Ticking: {}, + }); return entities; } diff --git a/app/server/create/player.js b/app/server/create/player.js index a5432dc..504a60c 100644 --- a/app/server/create/player.js +++ b/app/server/create/player.js @@ -48,7 +48,7 @@ export default async function createPlayer(id) { Light: {}, Magnet: {strength: 24}, Player: {}, - Position: {x: 128, y: 128}, + Position: {x: 128, y: 448}, Speed: {speed: 100}, Sound: {}, Sprite: { diff --git a/app/server/engine.js b/app/server/engine.js index 5872446..42dba2e 100644 --- a/app/server/engine.js +++ b/app/server/engine.js @@ -127,9 +127,35 @@ export default class Engine { Inventory, Wielder, } = entity; + const ecs = this.ecses[Ecs.path]; for (const payload of payloads) { switch (payload.type) { case 'chat': { + if (payload.value.startsWith('/')) { + const [command, ...args] = payload.value.slice(1).split(' '); + switch (command) { + case 'dump': { + switch (args[0]) { + case 'tiles': { + const {TileLayers} = ecs.get(1); + this.server.send( + connection, + { + type: 'Download', + payload: { + data: TileLayers.layer(0).data, + filename: 'tiles.json', + }, + }, + ); + break; + } + } + break; + } + } + break; + } Interlocutor.dialogue({ body: payload.value, linger: 5, @@ -140,7 +166,6 @@ export default class Engine { break; } case 'paint': { - const ecs = this.ecses[Ecs.path]; const {TileLayers} = ecs.get(1); const {brush, layer: paintLayer, stamp} = payload.value; const layer = TileLayers.layer(paintLayer); @@ -181,7 +206,6 @@ export default class Engine { if (!Controlled.locked) { if (payload.value) { if (Interacts.willInteractWith) { - const ecs = this.ecses[Ecs.path]; const subject = ecs.get(Interacts.willInteractWith); subject.Interactive.interact(entity); } diff --git a/public/assets/dev/homestead.json b/public/assets/dev/homestead.json new file mode 100644 index 0000000..ca78440 --- /dev/null +++ b/public/assets/dev/homestead.json @@ -0,0 +1 @@ +[27,28,29,30,3,2,2,3,3,4,2,1,2,3,4,4,1,1,2,3,2,3,3,2,1,3,4,1,4,2,1,3,1,3,3,4,4,4,1,4,1,3,1,1,3,4,1,3,2,3,2,3,3,3,2,3,2,4,3,3,2,2,3,2,4,3,2,2,4,2,4,3,4,1,3,1,4,3,1,3,2,1,4,2,4,4,4,4,3,4,4,3,3,1,2,2,1,1,1,2,43,44,45,46,2,3,2,4,2,1,1,4,4,1,2,2,3,2,1,2,1,2,1,3,4,4,4,1,1,3,4,2,4,4,3,4,4,2,4,1,3,4,2,2,2,1,2,1,2,1,2,1,2,4,3,2,4,2,2,4,2,2,2,2,4,4,3,1,4,1,2,4,4,2,4,4,2,4,4,1,2,2,4,1,4,1,1,1,3,1,2,3,3,4,2,2,4,2,2,3,59,60,61,62,1,2,2,1,2,2,4,1,2,3,1,2,2,3,1,3,3,3,2,2,3,2,2,1,3,4,2,2,4,3,2,2,3,4,3,4,1,1,3,1,3,2,3,2,2,4,4,1,3,1,4,4,4,1,1,1,1,3,1,2,4,2,4,4,4,2,1,2,2,4,1,1,3,3,2,2,3,1,1,2,1,4,1,4,1,3,4,2,1,3,3,2,1,2,2,3,1,4,1,4,3,1,4,4,4,2,2,4,2,4,2,2,4,2,3,4,1,4,4,2,4,4,4,1,3,1,4,1,1,3,1,4,2,3,1,3,3,1,4,1,1,4,2,3,1,1,2,1,1,1,3,4,4,3,1,3,1,1,3,4,1,3,3,3,2,4,4,3,4,1,4,1,1,2,1,1,2,3,1,3,3,2,1,2,3,1,1,1,2,4,4,2,4,3,3,1,3,2,3,4,4,3,1,1,1,2,1,4,3,3,3,2,2,1,1,4,2,3,4,1,3,3,1,1,3,2,3,3,2,1,1,4,4,2,4,4,1,3,1,3,1,4,1,1,1,4,4,3,2,3,2,3,3,4,4,2,3,4,1,2,3,3,3,1,1,2,2,2,1,1,4,3,2,4,3,2,4,3,1,2,3,3,1,4,2,4,2,4,4,3,1,3,3,3,1,2,2,2,1,4,4,4,1,1,3,3,1,4,2,2,4,28,28,28,29,3,1,2,4,2,2,2,1,1,4,2,2,3,1,2,3,1,2,2,1,4,4,2,4,3,3,2,3,2,1,3,4,3,2,2,1,2,4,4,3,1,2,3,3,3,3,2,1,1,3,1,3,4,3,1,1,3,4,1,3,2,3,4,1,4,3,4,4,4,2,1,3,2,2,4,2,1,4,2,1,1,1,3,2,2,2,1,1,2,4,4,1,2,1,4,1,44,44,44,45,1,4,4,4,1,4,2,1,3,3,1,1,1,4,4,2,3,4,4,1,3,3,4,1,3,3,1,1,1,2,1,4,1,2,2,4,4,4,2,1,4,4,2,4,1,3,1,4,1,4,1,2,2,4,3,1,4,3,1,2,4,1,3,3,2,4,3,2,1,1,2,4,2,2,3,4,4,3,2,2,3,2,3,2,3,3,1,2,3,3,2,4,1,2,2,3,3,2,3,4,2,1,2,1,1,3,1,4,3,4,3,4,2,2,2,4,3,2,2,3,2,3,3,3,4,2,1,1,1,1,1,1,2,2,1,1,2,3,1,3,2,3,3,2,2,1,1,1,1,2,2,3,1,2,4,4,3,1,4,4,1,2,1,4,4,4,4,4,3,3,2,1,3,3,1,2,1,2,4,1,3,4,3,1,1,2,4,3,3,1,1,3,1,3,1,3,1,2,2,3,4,3,1,2,2,4,1,1,1,3,3,3,3,2,2,4,3,2,1,1,2,4,3,3,3,1,3,2,2,3,4,3,2,4,2,2,4,4,2,2,4,2,1,2,3,3,4,4,1,3,1,4,1,4,3,2,1,2,2,3,2,1,1,1,3,1,4,2,4,2,1,4,4,1,1,1,3,4,1,1,3,1,2,3,1,4,2,2,3,3,3,4,3,3,2,1,3,4,2,4,3,3,2,4,4,3,2,1,1,2,1,1,4,3,1,3,2,1,4,4,1,4,2,1,4,2,4,4,2,1,3,4,4,3,4,3,2,3,4,4,2,3,2,2,4,2,3,1,3,4,3,3,3,1,1,2,2,1,4,4,2,1,4,2,1,2,4,4,1,3,4,2,3,4,2,2,2,2,4,3,2,4,3,3,2,2,2,4,4,4,3,4,2,4,1,4,4,3,1,2,2,2,3,4,4,3,2,1,4,4,1,2,4,1,1,4,1,3,1,4,1,3,1,1,2,3,3,2,2,3,4,4,2,1,3,3,1,4,4,4,2,3,3,3,1,2,1,2,3,1,4,3,2,1,1,3,4,2,3,2,2,2,2,4,3,4,2,2,1,3,1,4,4,2,2,4,4,4,4,3,4,1,1,3,3,3,3,1,4,4,1,3,1,3,2,3,2,4,2,2,3,4,1,3,2,2,4,1,3,3,4,2,3,1,3,3,4,3,3,4,2,3,2,2,1,3,1,3,3,1,2,2,4,4,2,4,3,4,2,4,2,3,4,3,4,2,1,3,1,1,2,1,3,2,1,4,3,3,1,3,1,2,4,4,3,1,3,4,2,2,4,3,2,4,3,2,3,4,1,1,1,3,2,1,4,2,2,1,3,2,2,1,4,3,1,2,2,1,4,4,2,2,4,4,1,3,2,1,3,4,3,4,4,4,1,4,4,4,4,2,3,1,4,3,3,2,3,3,3,2,4,2,4,3,4,1,4,1,1,1,3,1,4,1,4,4,2,1,2,1,2,3,2,3,4,2,3,2,2,4,4,3,4,2,4,4,4,3,1,2,4,1,2,1,3,1,1,2,4,2,3,1,3,2,4,2,3,2,1,4,2,2,4,3,1,1,4,4,4,3,4,2,3,4,3,1,4,1,2,1,2,1,1,3,1,2,4,4,2,3,1,1,1,4,3,4,1,3,3,2,4,1,1,1,1,3,2,1,3,2,1,4,2,2,4,1,3,3,4,1,2,1,2,4,4,4,4,2,3,2,2,2,1,1,1,3,2,1,1,2,4,3,4,4,3,3,4,3,4,1,3,3,1,4,3,1,4,1,2,4,4,1,3,3,4,1,3,3,1,2,2,3,1,3,1,3,2,1,2,1,4,1,3,4,2,3,4,3,3,1,2,4,3,3,1,4,2,1,1,3,2,4,2,2,1,3,3,3,1,2,1,1,4,3,2,2,2,1,4,2,3,3,2,4,1,2,3,1,3,2,3,3,4,3,1,4,2,4,3,3,2,3,4,2,2,4,4,1,1,4,3,1,3,4,3,2,1,1,1,1,1,4,2,4,4,4,4,3,4,2,3,3,4,1,1,4,4,2,4,3,3,2,1,3,3,1,3,3,2,3,1,3,4,2,2,1,1,4,1,4,3,2,2,1,4,2,3,3,2,4,4,3,3,4,3,1,4,1,4,1,4,4,4,1,2,1,4,4,2,3,3,2,4,4,2,1,1,1,4,4,3,2,4,4,3,4,1,2,2,1,3,2,3,2,1,1,4,2,4,4,3,2,4,4,3,1,4,2,2,2,1,4,3,2,1,3,2,4,3,3,3,1,2,3,2,4,1,4,3,4,4,3,3,4,3,3,2,2,2,1,4,4,4,3,4,2,4,2,3,4,4,4,3,4,1,4,2,3,2,4,4,1,2,4,3,4,1,3,2,2,1,2,1,2,4,1,1,4,2,2,3,4,1,2,2,1,4,4,2,1,1,1,2,2,3,4,2,4,4,4,3,4,2,1,1,4,1,1,2,4,1,1,4,2,1,3,4,4,2,4,3,3,1,4,3,3,4,2,3,2,2,2,1,2,3,1,2,3,4,2,4,3,1,4,1,2,1,2,4,1,2,3,4,3,1,2,1,1,4,3,4,3,2,4,4,3,2,2,2,1,1,4,2,1,3,4,3,3,4,1,3,2,2,2,1,3,1,4,3,1,2,2,2,2,3,2,4,3,1,1,3,4,2,4,3,2,3,2,3,1,3,1,3,3,1,1,1,1,1,2,1,1,4,2,1,1,3,2,1,2,2,1,1,2,1,4,3,1,2,3,2,3,3,1,1,4,4,3,2,4,1,2,3,2,3,3,1,4,4,1,1,4,4,1,2,4,4,2,1,3,3,1,4,1,4,2,4,1,1,2,3,2,2,1,4,1,2,2,1,2,2,4,4,4,3,1,4,1,4,1,3,2,3,3,3,3,1,1,1,4,1,2,3,4,3,1,1,2,4,1,4,2,1,2,2,1,1,1,1,4,1,2,3,3,3,1,4,2,2,4,3,4,1,1,2,3,4,2,3,4,2,4,2,3,3,1,1,3,2,2,3,3,2,2,1,4,2,2,2,2,2,1,1,2,3,2,3,1,3,3,1,4,2,1,4,4,2,2,1,3,2,1,4,2,4,3,2,1,4,2,3,3,1,4,1,3,2,3,3,3,1,1,2,1,2,4,4,3,1,2,4,3,4,1,2,2,1,4,1,3,1,3,2,3,3,2,1,3,2,4,4,3,3,2,4,3,4,3,4,2,4,4,2,4,3,1,4,1,2,4,3,1,3,3,2,4,3,1,3,3,2,4,4,2,3,2,4,2,2,4,4,4,1,3,2,4,1,3,2,4,3,2,2,1,3,1,4,3,2,3,1,2,1,3,1,2,3,4,4,3,2,2,4,1,4,4,2,3,3,4,3,4,2,1,4,4,2,2,1,4,2,4,4,4,1,2,3,4,2,1,1,4,2,4,2,3,4,1,1,4,3,3,3,4,1,4,4,3,3,2,2,1,1,1,2,4,3,4,4,4,1,1,3,4,1,3,3,1,2,4,2,1,1,4,3,1,1,2,2,3,2,3,4,2,4,4,3,3,3,3,1,4,2,2,2,3,1,3,4,3,2,4,2,3,3,3,4,2,3,3,3,4,3,1,2,4,4,4,2,4,3,4,2,2,2,3,2,1,2,2,2,2,1,4,4,2,3,4,4,2,3,1,4,4,2,1,4,1,1,1,3,1,1,2,4,2,4,1,4,4,3,3,3,2,1,2,3,1,1,3,4,2,3,1,1,2,1,4,4,1,2,4,2,3,4,2,2,1,1,1,2,3,1,2,4,1,4,1,4,2,2,2,2,3,3,3,2,4,1,1,4,3,2,4,2,2,3,1,1,4,2,1,3,3,3,1,1,2,2,3,3,4,1,2,4,1,4,3,2,3,2,4,4,3,3,3,3,4,3,3,1,1,4,2,1,3,3,4,1,4,2,4,3,4,4,3,2,2,3,3,2,1,2,1,1,4,1,4,1,4,1,368,369,368,369,1,4,1,3,4,1,3,3,3,1,2,4,4,3,4,3,4,3,1,3,4,4,1,3,1,4,1,3,1,4,4,2,4,3,4,1,3,3,2,4,1,4,1,1,2,1,3,2,2,1,4,4,1,1,4,4,1,1,1,2,4,3,3,4,4,3,4,3,1,4,3,2,1,2,1,1,4,3,4,4,1,4,3,1,2,2,1,1,4,4,1,2,3,4,4,1,391,392,393,394,347,2,3,2,1,4,1,1,1,4,4,3,4,2,3,4,4,3,1,2,3,3,3,4,1,1,3,2,4,1,4,3,4,1,2,2,2,3,3,1,1,4,3,4,3,2,4,4,4,3,1,3,1,1,1,2,1,1,2,2,2,1,3,2,4,4,4,3,4,3,1,3,1,4,1,3,4,4,4,3,4,2,2,4,4,1,4,3,1,2,2,4,3,4,3,2,407,407,408,409,297,2,3,1,4,3,4,1,4,1,4,4,2,2,1,4,3,1,4,3,2,3,1,3,1,4,3,3,4,4,3,2,1,4,4,2,2,3,3,2,1,3,4,2,1,1,2,3,2,3,2,4,1,1,2,1,3,1,4,3,3,2,4,3,1,3,1,2,1,2,1,3,2,1,2,1,3,2,3,4,3,4,4,4,3,2,2,4,2,2,1,2,2,4,2,3,423,423,423,425,313,3,3,2,4,3,4,1,3,1,3,1,1,2,4,4,2,2,4,1,3,1,1,2,2,2,1,2,4,2,2,1,4,3,2,4,4,3,2,2,2,1,3,2,2,2,4,3,1,3,3,4,3,2,4,2,2,3,1,3,3,2,1,1,1,2,4,4,1,1,3,1,1,4,4,1,4,1,4,3,2,3,3,2,1,2,1,1,4,4,2,4,1,4,4,4,439,440,441,442,489,1,4,4,2,2,1,4,2,4,2,3,1,2,2,1,2,4,2,3,3,3,3,2,2,1,1,3,1,1,1,2,3,3,4,3,2,2,4,4,1,4,1,4,3,3,2,4,2,4,1,3,1,3,2,2,1,4,3,4,1,2,1,4,4,2,2,2,1,4,1,2,2,4,1,2,1,4,4,2,1,4,1,1,4,4,1,4,1,2,3,3,4,3,2,4,416,417,416,417,1,1,4,4,3,3,3,1,4,2,2,2,3,4,2,4,1,3,4,4,4,2,4,3,1,2,3,2,4,4,2,3,3,3,4,1,4,4,4,1,4,2,3,2,1,4,3,2,1,2,3,1,1,4,4,1,4,1,2,4,2,3,2,4,3,3,2,1,3,3,4,3,1,4,4,4,1,2,3,3,4,4,3,1,1,2,2,1,3,1,4,4,4,1,2,1,2,4,3,2,4,3,3,4,4,1,1,4,2,1,1,3,4,3,4,4,3,4,3,2,2,2,3,3,4,3,3,4,4,3,1,2,3,4,2,1,1,2,1,2,1,1,4,4,3,1,3,3,1,2,1,2,3,4,3,1,1,4,4,1,2,3,2,1,1,2,2,3,4,3,2,1,4,2,3,1,4,4,2,2,4,4,4,4,1,3,2,2,1,4,4,1,3,2,4,2,1,3,4,4,1,1,2,3,3,3,3,3,4,1,3,1,2,3,4,4,4,1,3,3,2,4,2,2,3,4,1,3,3,2,2,1,4,2,4,2,1,4,3,2,3,4,4,3,3,3,4,3,1,4,3,2,4,4,1,1,2,1,4,1,1,2,1,4,3,1,1,4,2,3,2,1,1,2,2,2,1,1,3,1,4,1,2,3,1,1,4,4,4,4,1,4,1,4,2,1,2,2,1,2,1,1,2,2,1,2,3,3,2,4,3,1,3,4,1,1,4,1,1,3,2,3,1,1,2,1,4,2,4,2,2,4,1,3,3,3,2,3,3,3,2,1,2,1,2,4,2,2,3,2,1,4,4,1,1,2,4,1,1,1,3,4,1,2,1,3,2,2,3,3,3,4,2,2,2,3,1,2,4,1,3,4,4,4,4,2,2,4,1,2,3,4,1,3,4,3,3,2,2,1,1,1,1,3,4,3,3,4,1,1,3,3,2,2,2,2,3,1,1,3,3,4,4,2,1,1,2,2,2,1,3,3,1,4,4,4,2,3,4,4,3,3,1,1,3,4,3,4,2,3,2,2,1,2,3,4,4,4,1,2,2,1,2,4,3,4,4,3,1,2,2,3,3,4,1,1,1,1,2,4,3,4,2,3,1,1,3,3,3,2,2,4,2,2,4,3,4,1,1,1,4,3,3,2,4,1,3,4,1,4,3,2,1,2,4,1,2,3,2,4,3,4,1,2,4,2,1,1,2,1,3,2,3,1,2,4,1,2,2,4,4,4,2,3,2,1,4,3,2,3,1,3,3,3,1,3,2,2,4,4,1,4,3,1,1,4,1,2,4,3,3,2,4,2,3,3,3,1,3,2,3,1,2,3,2,1,1,1,4,3,2,4,3,3,2,1,2,1,2,1,3,1,3,3,3,3,4,4,3,4,1,2,1,2,4,4,1,1,3,3,1,3,2,4,2,1,1,2,4,4,4,3,4,4,1,2,1,3,1,2,1,1,4,3,2,3,3,3,1,3,2,1,2,4,1,3,1,2,3,4,3,3,1,4,1,2,3,1,1,3,1,3,1,4,3,1,2,4,4,3,1,4,2,2,2,1,1,4,1,4,2,2,3,3,3,2,2,1,1,2,1,2,4,1,3,4,3,2,1,3,1,2,2,2,2,3,2,1,1,1,2,2,3,1,2,1,3,2,2,1,1,4,1,1,2,1,3,3,1,2,4,1,3,1,1,1,3,3,1,1,3,3,2,3,4,1,3,4,2,2,2,4,1,3,1,1,2,4,4,1,3,1,3,2,4,3,1,4,2,3,4,1,4,1,3,3,3,2,1,4,1,1,3,3,1,3,2,3,3,4,1,4,3,3,4,4,1,4,2,3,4,1,1,1,2,2,2,4,3,4,2,2,1,2,4,3,3,2,3,1,3,1,4,4,2,1,4,3,4,3,2,1,3,4,2,1,4,2,3,2,2,3,3,2,4,1,1,1,1,4,3,3,2,3,4,3,4,3,2,4,2,1,1,2,2,2,3,4,2,2,3,1,2,3,3,4,2,3,2,2,3,2,4,2,3,2,1,4,1,3,1,3,4,1,3,2,2,2,4,2,3,1,3,1,2,3,1,4,4,1,4,4,1,2,4,3,4,4,3,1,3,4,2,4,4,4,1,4,2,4,2,2,4,4,4,3,3,3,2,1,1,4,1,2,3,4,1,4,2,1,3,4,3,1,2,4,1,2,4,2,3,1,4,3,1,2,4,2,1,3,1,1,3,2,3,1,2,1,3,1,4,3,4,1,2,3,3,4,3,2,1,2,3,2,2,1,2,1,4,1,3,1,4,1,2,3,1,1,4,2,4,3,2,4,1,1,3,4,1,4,1,3,3,3,4,1,2,1,3,2,1,2,3,3,2,1,1,4,4,3,4,3,2,2,1,1,1,4,2,2,3,1,3,4,2,4,2,2,2,3,3,3,3,3,3,4,3,3,4,2,2,3,1,1,2,4,4,1,3,4,2,3,4,4,1,2,2,1,2,2,4,2,1,2,1,2,3,4,4,4,1,3,4,1,1,2,1,3,1,1,1,1,3,4,1,4,1,3,1,3,1,2,2,1,2,2,1,3,4,2,4,3,3,3,3,3,2,4,1,3,1,3,3,2,3,2,2,1,1,4,4,3,2,2,1,4,3,4,2,1,1,4,3,3,3,1,2,4,4,4,1,2,3,4,3,4,4,2,4,4,1,1,2,1,1,2,1,2,4,3,1,1,3,2,1,2,3,2,1,3,2,2,1,2,4,4,2,1,3,1,3,2,1,1,4,3,2,1,4,2,1,1,3,1,1,3,2,2,1,1,4,4,2,2,4,3,2,3,3,2,1,1,3,2,3,4,1,4,1,3,1,2,3,1,2,3,2,4,2,4,4,1,1,1,2,3,3,2,3,4,4,1,3,4,1,2,4,3,3,4,2,4,2,3,4,2,2,4,1,1,1,2,4,1,3,3,2,3,3,2,3,3,3,3,2,4,2,3,2,4,4,3,2,1,3,2,3,4,2,1,4,3,4,4,2,1,4,4,1,4,2,1,3,2,4,3,3,1,3,2,1,1,1,3,1,3,2,3,2,2,2,1,4,2,1,4,3,1,1,2,4,1,1,2,2,1,3,1,4,4,3,1,3,1,3,1,2,4,1,2,4,3,4,1,4,2,2,2,4,1,2,1,3,3,2,2,4,4,2,2,3,1,3,4,1,1,3,4,1,2,1,1,4,3,2,3,4,2,3,4,3,1,4,3,1,4,4,1,3,2,4,4,4,2,4,1,3,4,1,3,4,3,4,2,1,2,4,3,1,3,4,2,1,2,2,3,4,1,3,3,1,2,3,3,4,3,1,2,4,4,3,1,4,3,2,4,4,4,2,1,4,3,1,1,4,2,1,3,4,4,4,4,3,4,4,1,2,4,2,4,2,2,1,1,2,3,1,1,2,3,1,1,2,1,3,2,2,1,2,2,4,1,1,2,1,4,2,4,2,3,4,4,4,3,4,4,2,1,3,1,2,4,3,2,1,3,3,1,3,4,4,3,2,3,4,4,4,3,2,3,4,2,4,3,1,2,4,4,4,3,2,4,1,4,4,3,4,1,3,4,1,3,2,3,3,1,2,1,3,2,3,1,4,3,2,2,4,4,2,3,1,4,2,1,1,1,4,2,1,3,4,1,1,2,4,2,2,2,1,1,1,2,3,1,4,1,1,2,4,3,1,3,3,2,4,1,2,2,3,2,2,3,3,3,4,1,2,1,1,1,1,1,3,4,4,2,4,2,1,2,1,2,3,3,2,3,1,2,1,4,1,1,4,3,3,1,1,2,4,2,2,4,1,3,4,1,1,4,4,2,1,1,1,2,4,3,4,3,3,4,1,4,2,2,2,4,1,1,1,2,4,2,3,2,1,1,3,1,3,3,3,2,2,4,2,3,4,1,1,1,3,3,3,2,1,2,3,2,1,2,2,2,4,3,4,3,3,1,4,1,3,3,2,3,3,3,4,1,1,2,3,4,1,4,3,4,3,2,1,4,4,2,3,4,3,4,4,2,3,1,2,3,1,3,1,1,1,3,3,2,1,2,3,4,1,1,2,4,3,4,2,3,3,4,4,1,1,3,4,3,4,3,3,1,1,2,1,1,1,1,1,2,3,1,1,1,3,2,2,1,4,1,1,1,3,3,1,4,4,1,2,3,3,4,3,3,2,1,3,2,2,4,4,4,1,2,3,1,4,2,1,2,2,4,4,1,1,3,4,1,4,4,1,3,2,3,4,1,1,3,2,4,4,1,1,3,4,3,1,4,2,2,1,1,4,3,4,1,2,4,2,1,1,4,4,1,4,1,3,4,1,4,2,2,3,1,4,2,2,1,1,3,4,2,3,2,1,3,1,4,3,2,2,2,3,3,2,2,3,2,2,4,4,4,1,3,1,3,2,1,1,2,1,1,3,1,3,1,1,2,3,3,2,1,3,3,2,1,3,3,4,1,2,2,3,2,4,1,2,1,1,2,3,2,3,4,4,2,3,4,2,4,3,1,4,2,4,4,4,3,1,4,1,4,4,4,2,4,3,2,3,4,4,3,3,4,1,3,1,2,2,3,2,4,1,2,3,3,4,1,4,1,3,2,3,4,4,2,4,4,2,2,1,1,2,2,4,1,2,4,3,3,3,4,2,3,4,4,3,2,1,4,1,2,3,1,2,4,1,1,1,1,2,3,3,4,2,4,3,2,3,1,1,2,2,1,2,2,2,3,1,3,3,2,4,1,4,2,1,2,4,3,4,1,3,3,3,3,4,2,2,1,1,3,2,3,2,1,1,1,4,3,3,1,4,1,2,1,2,4,2,3,1,2,4,1,2,1,1,4,1,3,2,4,4,1,3,3,2,2,2,1,2,4,1,1,2,3,2,1,3,4,4,4,1,4,2,3,2,2,2,3,4,4,4,2,4,2,1,3,2,3,1,3,2,1,2,2,2,2,2,3,2,3,3,3,1,2,3,1,3,2,3,1,4,4,3,1,4,4,3,2,2,3,4,3,2,1,1,1,4,1,1,4,1,1,2,4,4,4,1,2,4,2,1,3,3,1,3,4,3,4,4,4,3,2,2,4,1,1,1,3,3,1,2,2,2,3,1,3,1,1,2,2,1,4,1,2,2,1,3,4,3,3,3,2,3,2,1,4,4,1,1,2,1,2,1,4,2,4,4,1,3,3,2,1,3,4,1,4,4,4,4,2,1,3,2,3,2,2,4,4,2,1,3,1,3,2,2,2,1,2,1,2,1,2,2,1,1,4,2,4,2,4,2,2,3,1,3,3,1,4,2,2,3,3,4,3,4,2,1,2,1,3,2,3,3,1,2,4,3,1,3,2,3,3,1,3,1,2,4,1,3,1,4,2,2,3,4,1,3,1,1,2,4,1,1,2,2,1,3,3,2,3,3,1,4,1,1,3,1,1,2,4,4,1,3,4,2,1,2,4,3,2,4,3,4,1,1,2,1,1,4,3,1,1,2,3,2,2,3,2,2,1,4,2,2,3,1,3,1,4,1,4,4,2,1,4,4,2,1,1,2,3,1,4,2,1,2,4,3,4,4,1,1,4,1,1,4,3,1,1,2,1,4,1,4,1,2,2,3,3,2,2,2,4,3,1,3,4,3,3,1,2,4,4,3,3,2,3,3,3,1,4,2,2,2,4,2,2,4,1,4,4,1,2,4,3,3,2,4,1,3,1,2,2,1,1,3,3,3,2,1,2,4,2,4,1,4,2,4,3,3,1,2,4,1,4,4,1,2,1,1,3,3,1,1,1,4,1,2,2,2,4,3,2,3,4,3,3,3,3,3,3,4,2,3,1,1,1,1,2,3,1,4,3,3,4,2,2,3,2,4,1,3,1,2,3,2,3,2,1,3,3,1,4,2,2,1,2,3,4,4,2,2,3,3,3,4,3,3,2,1,1,3,2,1,3,3,3,1,2,3,3,2,1,4,2,3,1,4,4,2,1,1,2,2,1,4,1,1,2,2,1,2,4,1,3,2,1,1,3,4,4,2,2,3,2,4,3,4,1,3,1,2,4,2,3,4,1,3,3,2,4,4,2,2,2,2,1,4,1,1,3,4,1,2,3,3,1,1,1,4,1,3,2,2,3,3,3,1,3,3,2,1,2,2,4,4,3,4,1,1,4,1,4,4,3,1,4,1,3,4,2,1,4,1,2,1,3,4,4,2,1,4,1,3,1,2,1,2,2,3,2,1,1,2,3,3,4,4,1,1,1,2,1,3,1,3,3,2,4,1,1,2,2,1,4,4,4,4,2,2,2,3,3,4,3,3,1,4,2,4,2,1,3,2,1,2,2,4,4,2,1,1,4,4,2,3,2,3,3,3,2,1,3,2,2,2,1,2,3,4,2,4,3,3,2,4,1,2,3,4,1,4,3,2,2,1,3,1,2,2,2,2,4,1,1,1,4,1,4,2,4,1,1,1,3,3,2,2,4,4,1,4,4,3,1,4,4,2,4,3,2,1,1,1,4,3,1,3,3,2,1,4,2,3,1,2,1,1,2,2,2,4,3,1,4,2,4,1,2,3,3,3,4,3,3,4,1,3,1,3,4,2,1,2,1,4,2,4,2,4,3,3,2,3,4,2,3,2,3,3,4,1,2,3,3,2,3,4,1,3,1,4,3,1,2,2,3,1,2,1,4,1,3,2,4,3,2,1,4,2,2,1,4,3,2,3,1,1,2,1,1,1,4,4,1,4,3,4,4,4,1,4,3,1,3,1,4,2,2,3,3,4,1,2,3,2,2,2,2,3,2,1,4,2,4,2,1,1,1,2,1,2,4,2,2,1,1,4,3,2,1,3,1,4,2,4,4,1,3,2,2,1,2,1,2,1,3,4,1,2,3,3,1,4,2,2,2,4,3,1,4,2,2,2,3,2,2,2,1,4,2,2,4,4,1,3,1,2,2,4,1,4,4,1,2,4,3,1,3,1,3,2,2] \ No newline at end of file