From 88535920cfd8169a4490a5ac612736328034816d Mon Sep 17 00:00:00 2001 From: goetchstone Date: Sat, 1 Aug 2026 06:47:14 -0400 Subject: [PATCH] Map: crop to the FULL playable extent (we were clipping real map) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Owner: "the map needs to be right first, and it is not." It was not — the playable rectangle came from the war3map.w3i CAMERA bounds. The camera rect is where the VIEW may scroll, and WC3 keeps it INSIDE the terrain, so cropping to it silently deleted real playable map. Measured, it was short on ALL FOUR sides: east 448u of navigable sea cut off the EAST lane south 192u, west 64u, north 192u and the Flux Repair System (-1344,-7552) fell outside the map entirely — a structure we had simply deleted from the game. The 3-cell "WEST_EXTEND" fudge added earlier (so one shop stopped falling off the grid) was the tell that the rect was wrong; it is now gone. The rect is DERIVED FROM THE DATA: the smallest tilepoint-aligned rect covering every sailable wpm cell plus every placed structure, padded one tilepoint. Self-correcting — it can never clip playable water or a building again. Grid 162x226 -> 176x234 (64u cells unchanged). Also: the water-fraction gate was an absolute band calibrated on the old crop, so widening the rect tripped it even though classification was identical. It now gates on DRIFT from the raw wpm over the SAME rect (|drift| <= 0.02) — crop-independent, and a truer test of "we neither over- nor under-watered". Gates: 16/16 shops sea-reachable, bases connected, G6 lane topology 0 mismatches, 0 structures outside the map. 1,249 tests green. Co-Authored-By: Claude Fable 5 --- data/json/terrain.json | 2 +- packages/client/src/render/land.ts | 8 +- packages/client/src/render/theme.ts | 26 ++--- .../core/test/terrain-integration.test.ts | 15 +-- tools/extractor/terrain.py | 94 +++++++++++++++---- 5 files changed, 103 insertions(+), 42 deletions(-) diff --git a/data/json/terrain.json b/data/json/terrain.json index ded7715..8f5fd12 100644 --- a/data/json/terrain.json +++ b/data/json/terrain.json @@ -1 +1 @@ -{"_comment":"Static land/water mask. SAILABLE WATER = the map's own PATHING MAP (data/extracted/war3map.wpm, bit 0x40 = no-water, 4x4 32u subcells per 128u tile, majority vote): the engine's truth for where ships could actually sail in the original. This REPLACES the minimap NON-BLUE colour key (~0.66 water), which over-watered: green 'shallow' paint is often visually-wet-but-UNSAILABLE, merging lanes the real map separates (owner-reported 2026-07-08: the NE lane must NOT merge into the east-edge lane; the wpm separates them). The wpm reads ~0.55 sailable over the playable crop and all 26 known anchors (HQs, harbours, spawns, lane waypoints) sit sailable. The ONLY additions on top of the raw wpm grid are MINIMAL 1-cell connectivity necks (so every shop + dock/spawn reaches the sea and the two bases stay water-connected) PLUS the two owner-approved WEST sail-around island moats (Swedish Lumber Mill, Goblin Potion Dealer: land core + thin 1-cell navigable ring + EXACTLY ONE entrance; deterministic post-step). water=true is ship-navigable. The OPTIONAL `depth` field (0=land,1=deep,2=shallow,3=pink) is additive render metadata the SIM IGNORES; the minimap colours band each FINAL water cell so a client paints the water shades like the original. Regenerate with: make terrain (tools/extractor/terrain.py; pure stdlib, reads wpm+w3e+PNG, no venv). yOrientation 'top-down' means rle row 0 is the NORTH (max-Y) edge.","source":"data/extracted/war3map.wpm (pathing map, bit 0x40=no-water; THE sailability authority) + data/extracted/war3map.w3e (grid geometry) + data/reference/war3mapMap.png (depth render metadata only)","target":"the original map's enforced ship-pathing (wpm no-water), cropped to the playable rectangle","rule":"water = wpm NOT-no-water majority over the 16 32u subcells per 128u tile, MINUS singleton speckle, PLUS minimal 1-cell connectivity necks (Dijkstra cost 1 water / 30 land) for shops, docks/spawns and base-to-base, PLUS the two carved WEST sail-around island moats (compact land core + thin 1-cell water ring + exactly one entrance) around the Swedish Lumber Mill and Goblin Potion Dealer shops. depth sub-classifies FINAL water cells from the minimap colours for RENDER only: DEEP (R-B>35 AND R>=G), PINK (R>150 AND B>120 AND R-G>15), else SHALLOW; a water cell whose pixels read land-blue falls back to SHALLOW.","playableBounds":{"minX":-5376.0,"minY":-7424.0,"maxX":4864.0,"maxY":6912.0},"bounds":{"minX":-5440.0,"minY":-7488.0,"maxX":4928.0,"maxY":6976.0},"cols":162,"rows":226,"cellSizeX":64.0,"cellSizeY":64.0,"yOrientation":"top-down","yOrientationNote":"rle row 0 = max-Y (north); last row = min-Y (south). col 0 = min-X (west). col=floor((x-minX)/cellSizeX), row=floor((maxY-y)/cellSizeY). The minimap is north-up; tiles are sampled at their world centers via the content-box registration, emit row 0 = north, matching sim isWater.","rleFormat":"water[r] = [leadingValue, run0, run1, ...]; runs alternate from leadingValue (0=land,1=water) and sum to cols.","depthRleFormat":"OPTIONAL render metadata, the sim IGNORES it. depth[r] = [value0, run0, value1, run1, ...] (explicit value per run; values 0=land, 1=deep, 2=shallow, 3=pink; runs sum to cols). depth[r][col]>0 IFF water[r][col]==1 (exactly consistent with the authoritative `water` mask). Carved necks/moats with no minimap colour emit as shallow (2).","waterFraction":0.51311,"validation":{"hqsOnWater":"2/2","harboursOnWater":"4/4","playerSpawnsOnWater":"12/12","lanes":["south-west: spawnWater=True connToEnemyHQ=True","south-east: spawnWater=True connToEnemyHQ=True","north-west: spawnWater=True connToEnemyHQ=True","north-east: spawnWater=True connToEnemyHQ=True"],"basesConnected":true,"shopsReachable":"16/16","shopReach":["Swedish Lumber Mill: reachable=True nearestSeaCells=1","Goblin Potion Dealer: reachable=True nearestSeaCells=1","Elven Library: reachable=True nearestSeaCells=0","Ship Wreck: reachable=True nearestSeaCells=0","Elven Library: reachable=True nearestSeaCells=4","Ale Brewery: reachable=True nearestSeaCells=2","Equipment Merchant: reachable=True nearestSeaCells=3","Heavy Weapons Merchant: reachable=True nearestSeaCells=2","Weapons Merchant: reachable=True nearestSeaCells=4","Equipment Merchant: reachable=True nearestSeaCells=2","Bill (Trade Master): reachable=True nearestSeaCells=3","Pirate Boat Merchant: reachable=True nearestSeaCells=0","Will (Trade Master): reachable=True nearestSeaCells=4","Weapons Merchant: reachable=True nearestSeaCells=2","Heavy Weapons Merchant: reachable=True nearestSeaCells=3","Goblin Bomb Shop: reachable=True nearestSeaCells=0"],"repairRegionsReachable":"2/2","repairRegionReach":["Repair_Station_South: reachable=True","Repair_Station_North: reachable=True"],"waterFraction":0.5131,"eastThirdWaterRun":"median=6.0 mean=8.57 count=567","bottomRightWaterRun":"median=5.0 mean=5.87 count=200","necks":{"basePlatformCellsAdded":1,"connectivityNeckCellsAdded":0,"shopNeckCellsAdded":4,"repairRegionNeckCellsAdded":0,"waterFractionBefore":0.5136,"waterFractionAfter":0.5137,"shopsReachable":"16/16","repairRegionsReachable":"2/2","singletonCellsDropped":0,"straddledChannelCellsRestored":0,"ownerLaneGates":[{"gate":"north-most lane: east leg (owner's arrow)","row":22,"blocked":2,"widthUnits":128}],"westIslandLoops":{"Swedish Lumber Mill":{"shopCell":[12,123],"anchor":[8,123],"shopInCore":true,"shopInRing":false,"shopOnLand":true,"cycleLen":40,"entranceCells":[[7,117]],"entrances":1,"cellsChanged":93},"Goblin Potion Dealer":{"shopCell":[7,192],"anchor":[7,188],"shopInCore":true,"shopInRing":false,"shopOnLand":true,"cycleLen":40,"entranceCells":[[7,194]],"entrances":1,"cellsChanged":49},"waterFractionBefore":0.5137,"waterFractionAfter":0.5131,"totalCellsChanged":142}},"laneTopologyVsWpm":{"anchors":22,"pairwiseMismatches":0},"sideRoutes":{"westLumberMillIsland":{"islandLandCells":81,"ringWaterCells":36,"entrances":1},"westGoblinPotionIsland":{"islandLandCells":81,"ringWaterCells":36,"entrances":1},"eastBreweryWrap":{"brewerySeaReachable":true,"farEastNorthWaterCells":226},"bottomRightWinding":{"tanSegments":196,"tanMaxRun":27,"windingNotBlob":false}},"wpmAgreement":0.9959,"wpmConfusion":"agree=0.9959 ours-only(necks/moats)=0.0018 ref-only(denoised)=0.0023","depthSplitLandDeepShallowPink":[0.4869,0.2337,0.2719,0.0075],"colourKeyAgreement":0.6694},"water":[[0,162],[0,162],[0,162],[0,71,6,85],[0,71,6,85],[0,57,2,12,6,85],[0,57,2,12,6,85],[0,47,2,7,7,8,6,85],[0,47,2,7,7,8,6,85],[0,47,4,4,22,85],[0,47,4,4,22,85],[0,47,32,54,2,27],[0,47,32,54,2,27],[0,55,30,44,8,25],[0,55,30,44,8,25],[0,57,28,40,14,23],[0,57,28,37,20,20],[0,57,20,45,7,8,5,20],[0,57,20,45,7,8,5,20],[0,57,20,45,5,11,5,19],[0,57,20,45,5,12,5,18],[0,57,18,46,4,15,4,18],[0,57,18,46,4,37],[0,57,18,48,2,16,4,17],[0,57,19,47,2,16,4,17],[0,7,8,28,33,5,12,18,4,8,2,18,2,17],[0,7,8,28,37,1,13,6,4,6,5,8,2,18,3,16],[0,7,10,24,54,5,5,5,7,6,4,16,3,11,3,2],[0,7,10,24,54,5,5,1,2,2,8,5,4,9,4,2,4,11,3,2],[0,7,11,15,2,4,56,4,30,6,11,7,3,1,5],[0,7,12,9,2,3,2,4,56,3,31,6,2,1,8,7,9],[0,9,26,4,56,3,29,8,11,7,9],[0,9,26,4,56,3,28,9,13,5,9],[0,9,3,2,21,4,88,6,28,1],[0,9,2,1,116,5,18,1,9,1],[0,12,106,5,6,4,6,4,12,1,4,2],[0,11,104,8,6,4,6,4,18,1],[0,13,14,3,79,15,15,5,18],[0,13,15,2,74,1,4,16,14,6,16,1],[0,13,15,2,68,29,12,6,13,4],[0,2,2,9,84,30,13,5,5,1,6,5],[1,4,9,84,20,2,18,1,1,1,10,6,6],[1,3,1,2,2,89,13,2,4,3,18,2,23],[1,97,12,14,39],[1,29,3,65,12,17,36],[0,3,26,3,65,13,23,29],[0,2,7,4,16,3,66,12,23,29],[0,2,7,4,16,3,35,8,4,4,16,11,10,3,18,18,3],[0,2,7,4,16,4,34,8,4,4,16,7,14,3,18,1,2,15,3],[0,2,7,4,5,13,31,15,2,4,14,8,15,7,2,3,13,10,6,1],[0,3,7,3,4,14,31,15,2,4,14,8,15,7,2,8,9,9,6,1],[1,17,19,26,15,2,4,14,8,15,18,2,1,5,7,6,3],[1,17,20,27,12,6,1,14,8,12,24,7,5,6,3],[1,17,21,28,10,21,8,12,26,12,7],[1,17,21,28,12,20,6,13,26,12,7],[1,19,14,2,3,27,13,21,5,11,8,2,20,9,8],[1,19,14,2,3,27,11,5,4,15,4,11,8,2,20,9,8],[1,13,20,2,3,26,12,5,4,15,4,10,9,2,10,4,9,6,8],[1,13,20,2,3,24,15,4,4,15,5,9,6,5,10,5,22],[1,13,20,2,3,24,3,2,9,5,4,15,3,11,5,8,8,8,19],[1,13,20,29,13,6,4,15,3,10,3,12,7,8,19],[0,4,9,6,2,12,29,3,12,4,32,3,13,6,10,17],[0,5,11,3,2,12,44,4,32,3,29,17],[0,6,17,11,43,4,64,4,2,11],[0,9,15,10,44,3,64,1,6,10],[0,10,17,7,30,2,87,9],[0,11,17,6,29,3,87,9],[0,19,12,3,28,4,5,9,73,9],[0,19,43,5,4,9,76,6],[0,21,41,7,2,9,76,5,1],[0,21,43,4,3,7,78,5,1],[0,21,43,4,5,4,79,6],[0,21,42,1,9,1,81,7],[0,25,129,8],[0,25,2,4,120,11],[0,32,119,11],[0,33,118,11],[0,33,66,4,48,11],[0,33,66,4,48,11],[0,11,8,18,62,10,5,2,34,12],[0,11,8,18,62,9,6,3,5,3,16,21],[0,7,16,14,62,9,6,4,4,40],[0,7,16,14,63,4,2,3,4,49],[0,5,7,3,12,11,62,3,10,49],[0,4,7,4,12,14,20,3,3,6,3,2,21,3,3,1,7,49],[0,3,7,5,10,16,20,3,2,7,3,2,35,48,1],[1,2,1,7,5,10,13,2,1,20,12,3,2,35,48,1],[1,2,1,7,5,7,16,23,12,40,6,2,32,4,5],[0,3,6,6,6,17,26,8,39,8,2,32,4,5],[0,3,6,6,6,17,26,8,31,4,4,6,4,20,4,4,8,5],[0,2,7,5,10,15,28,3,33,4,4,6,4,20,4,4,8,5],[0,2,5,7,11,13,63,6,5,7,2,10,26,5],[0,5,3,6,11,13,64,5,5,7,2,10,26,5],[0,5,3,5,14,11,64,5,5,21,22,7],[0,5,3,5,14,10,64,6,4,22,23,6],[0,5,14,1,2,3,2,6,33,2,33,4,6,23,22,6],[0,5,14,6,2,6,32,6,30,4,8,22,21,6],[0,6,13,6,2,6,31,9,5,3,20,4,8,22,22,5],[0,8,12,5,2,6,31,9,4,4,20,3,9,9,2,11,23,4],[0,8,19,12,28,6,4,4,29,12,5,8,6,4,13,4],[0,8,19,12,28,5,6,3,30,11,6,7,6,4,11,6],[0,8,19,13,22,10,6,5,26,12,8,6,6,8,7,6],[0,4,26,10,21,12,5,5,26,12,8,6,6,8,7,6],[0,3,27,10,19,14,5,5,22,16,8,6,4,11,7,5],[1,30,10,19,14,5,5,22,16,9,5,4,12,6,5],[1,6,5,6,1,15,7,16,17,6,4,21,9,17,21,11],[0,2,4,5,6,6,10,7,16,17,6,4,20,10,17,21,11],[0,2,4,5,6,9,9,5,16,11,12,4,18,12,17,25,7],[0,4,2,5,6,10,9,5,15,11,12,4,18,12,19,23,7],[0,4,2,5,4,14,7,7,13,9,12,6,18,10,21,25,5],[0,11,4,14,7,7,12,1,2,2,4,1,12,6,18,10,20,11,4,10,4,2],[0,11,4,14,8,6,15,2,17,6,48,10,6,9,4,2],[0,11,4,14,8,6,15,3,16,6,48,9,7,5,7,3],[0,9,8,14,6,6,34,4,50,6,10,5,7,3],[0,9,8,14,6,6,34,4,50,6,13,2,7,3],[0,7,6,18,6,6,30,1,2,5,20,6,26,4,22,3],[0,7,6,13,2,3,6,6,31,7,20,6,26,4,22,3],[0,7,1,18,2,1,8,6,14,4,13,7,20,10,21,9,16,5],[0,3,11,14,9,5,15,4,40,10,20,10,16,5],[0,3,1,9,1,14,29,4,40,12,7,4,7,10,14,7],[0,3,1,9,1,14,29,4,40,11,7,6,6,10,14,7],[0,3,1,9,1,14,29,4,2,7,30,12,6,7,10,6,4,17],[0,3,1,9,1,14,32,1,2,10,26,26,10,5,5,17],[0,3,1,9,1,13,10,1,25,11,25,26,4,4,2,5,5,17],[0,3,1,9,1,13,10,5,21,12,25,25,4,4,2,6,4,17],[0,3,1,9,1,1,2,10,7,8,21,12,25,23,6,13,3,17],[0,3,1,9,1,1,2,10,6,9,21,12,29,19,6,14,2,17],[0,3,1,9,1,1,2,8,4,1,2,9,20,14,29,19,4,16,2,10,6,1],[0,3,11,1,2,7,5,12,20,14,28,20,4,16,5,7,6,1],[0,15,2,7,5,10,22,14,27,19,6,16,5,7,4,3],[0,9,8,8,4,10,22,14,26,15,2,3,6,15,5,8,4,3],[0,9,8,8,4,8,24,14,26,8,2,5,2,1,12,8,8,8,4,3],[0,8,9,8,5,7,24,14,26,5,5,7,13,8,8,8,4,3],[0,1,2,4,12,6,5,7,25,13,36,7,6,1,7,1,13,5,10,1],[0,1,2,4,12,6,5,7,27,11,37,7,2,3,22,5,2,2,6,1],[0,1,2,4,2,6,4,6,5,11,24,6,41,12,22,3,1,2,1,2,7],[0,1,2,3,3,6,4,6,5,11,24,6,41,10,28,2,10],[0,6,3,6,4,4,7,11,24,4,44,9,40],[0,6,3,6,4,4,6,12,25,3,43,10,38,1,1],[0,5,4,6,12,12,27,3,34,3,6,10,35,4,1],[0,5,4,6,12,12,29,1,34,3,12,2,37,4,1],[0,7,18,14,63,4,12,2,12,5,1,2,10,1,6,5],[0,7,18,14,62,5,12,5,9,5,1,2,17,5],[0,7,6,4,6,18,23,3,33,6,12,5,9,5,22,3],[0,7,6,4,6,18,22,4,32,7,7,10,9,5,9,3,10,3],[0,41,22,6,30,7,4,2,1,15,6,2,10,3,12,1],[0,41,22,5,31,7,4,2,1,16,17,3,12,1],[0,37,24,7,3,6,34,21,15,4,10,1],[0,37,24,8,2,6,34,22,5,2,7,4,7,1,2,1],[0,27,2,8,24,8,2,6,26,2,4,25,4,2,7,4,11],[0,27,2,8,25,2,2,2,3,6,26,2,4,25,3,3,7,4,2,3,6],[0,27,2,8,36,4,23,7,2,10,4,10,4,3,2,11,1,2,6],[0,26,3,7,37,4,22,8,2,10,4,10,4,16,9],[0,26,5,4,38,4,22,8,2,10,4,12,2,18,2,4,1],[0,26,73,8,2,10,4,12,2,18,2,4,1],[0,26,2,2,37,4,30,6,4,6,2,16,2,25],[0,30,37,4,30,6,4,6,2,15,4,6,2,16],[0,30,33,8,2,1,27,6,4,23,5,4,3,16],[0,31,32,7,3,6,22,6,4,21,7,4,2,17],[0,29,33,8,3,8,22,4,6,19,7,16,2,5],[0,29,34,5,2,1,2,8,22,4,7,18,7,16,2,5],[0,29,33,1,12,6,36,15,7,16,2,5],[0,29,30,3,13,6,35,12,2,4,5,16,2,5],[0,29,30,3,15,4,26,18,5,4,2,1,4,10,10,1],[0,29,30,4,15,3,26,18,5,7,4,9,11,1],[0,27,32,4,44,18,6,8,2,9,12],[0,27,32,4,44,18,6,8,2,5,16],[0,27,32,4,14,1,31,16,6,8,2,4,7,9,1],[0,27,50,3,29,15,7,8,2,4,6,10,1],[0,27,50,3,26,1,8,9,7,8,9,13,1],[0,26,51,3,22,5,9,6,9,8,8,14,1],[0,21,10,7,22,11,6,3,22,7,7,6,9,10,5,9,7],[0,21,11,6,22,3,2,10,2,3,21,8,7,7,8,10,4,10,7],[0,21,11,6,22,17,28,5,7,6,12,16,11],[0,21,11,6,21,17,29,8,4,6,13,15,11],[0,23,9,5,22,17,29,9,13,6,4,12,7,6],[0,23,9,5,22,18,29,9,12,6,4,12,5,8],[0,23,36,18,29,9,10,8,6,8,7,8],[0,23,37,17,20,17,11,8,6,7,5,11],[0,25,35,17,16,21,4,16,5,4,8,11],[0,25,35,14,19,42,5,3,8,11],[0,25,4,3,30,2,29,45,9,15],[0,25,4,4,29,2,29,11,2,33,8,15],[0,2,11,12,2,7,59,11,2,34,7,10,5],[0,2,1,9,1,11,3,9,60,6,4,16,2,17,6,10,4,1],[0,2,1,9,1,11,3,9,61,4,6,15,2,38],[0,2,1,9,1,11,4,6,63,4,6,55],[0,2,1,9,1,10,72,6,8,18,4,24,1,6],[0,2,1,9,1,10,72,6,9,14,2,1,7,21,1,6],[0,2,1,9,1,1,1,6,74,6,9,13,12,20,1,5,1],[0,2,1,9,1,1,1,6,74,6,9,8,2,3,12,20,1,5,1],[0,2,1,9,1,1,1,6,89,7,20,14,5,6],[0,2,1,9,1,1,1,6,89,6,22,13,5,6],[0,2,11,8,89,5,23,13,5,6],[0,7,1,12,82,3,5,5,27,9,6,5],[0,7,5,8,20,2,60,4,24,5,8,6,8,5],[0,7,6,7,20,3,57,7,22,6,9,5,6,7],[0,7,6,4,23,3,57,8,11,3,5,10,7,5,5,8],[0,7,2,1,3,4,22,4,57,8,11,3,5,9,10,2,5,9],[1,3,6,29,9,53,8,4,3,4,3,5,9,17,9],[1,36,11,53,8,4,3,4,5,3,12,14,9],[1,36,11,50,1,2,7,5,3,2,7,7,8,12,11],[1,1,5,25,16,50,9,6,3,2,8,6,8,12,11],[1,1,5,8,4,4,2,6,28,22,7,4,15,6,15,6,29],[1,1,24,4,34,16,8,4,15,6,15,6,29],[0,25,2,36,16,27,6,15,6,29],[0,25,2,36,16,28,5,15,6,29],[0,63,16,28,6,14,8,27],[0,63,16,28,6,14,8,27],[0,63,16,29,9,8,4,33],[0,63,16,30,13,3,4,33],[0,63,20,29,17,33],[0,63,20,30,16,33],[0,55,30,29,6,42],[0,55,30,33,2,42],[0,55,30,33,2,42],[0,55,30,77],[0,59,8,4,1,90],[0,59,8,95],[0,61,6,95],[0,61,6,95],[0,61,6,95],[0,61,6,95],[0,61,6,95],[0,61,6,95],[0,63,2,97]],"depth":[[0,162],[0,162],[0,162],[0,71,2,6,0,85],[0,71,2,6,0,85],[0,57,2,2,0,12,2,6,0,85],[0,57,2,2,0,12,2,6,0,85],[0,47,2,2,0,7,2,7,0,8,2,6,0,85],[0,47,2,2,0,7,2,7,0,8,2,6,0,85],[0,47,2,4,0,4,2,22,0,85],[0,47,2,4,0,4,2,22,0,85],[0,47,2,15,1,10,2,7,0,54,2,2,0,27],[0,47,2,14,1,13,2,5,0,54,2,2,0,27],[0,55,2,5,1,16,2,9,0,44,2,8,0,25],[0,55,2,5,1,16,2,9,0,44,2,8,0,25],[0,57,2,4,1,16,2,8,0,40,2,14,0,23],[0,57,2,4,1,16,2,8,0,37,2,20,0,20],[0,57,2,3,1,17,0,45,2,7,0,8,2,5,0,20],[0,57,2,2,1,18,0,45,2,2,1,2,2,3,0,8,2,5,0,20],[0,57,2,2,1,18,0,45,2,2,1,3,0,11,2,5,0,19],[0,57,1,20,0,45,2,3,1,1,2,1,0,12,2,5,0,18],[0,57,1,18,0,46,2,4,0,15,2,4,0,18],[0,57,1,18,0,46,2,4,0,37],[0,57,1,18,0,48,2,2,0,16,2,4,0,17],[0,57,1,19,0,47,2,2,0,16,2,4,0,17],[0,7,2,4,1,4,0,28,1,33,0,5,1,3,2,2,1,7,0,18,2,4,0,8,2,2,0,18,2,2,0,17],[0,7,2,3,1,5,0,28,1,37,0,1,1,13,0,6,2,4,0,6,2,5,0,8,2,2,0,18,2,3,0,16],[0,7,2,3,1,7,0,24,1,54,0,5,2,5,0,5,2,7,0,6,2,4,0,16,2,3,0,11,2,3,0,2],[0,7,2,3,1,7,0,24,1,54,0,5,2,5,0,1,2,2,0,2,2,8,0,5,2,4,0,9,2,4,0,2,2,4,0,11,2,3,0,2],[0,7,2,3,1,8,0,15,2,1,1,1,0,4,1,56,0,4,2,30,0,6,2,11,0,7,2,3,0,1,2,5],[0,7,1,1,2,2,1,9,0,9,2,1,1,1,0,3,1,1,2,1,0,4,1,31,2,2,1,3,2,6,1,1,2,2,1,11,0,3,2,31,0,6,2,2,0,1,2,8,0,7,2,9],[0,9,2,1,1,11,2,8,1,4,2,2,0,4,1,25,2,3,1,3,2,7,1,1,2,7,1,10,0,3,2,29,0,8,2,11,0,7,2,9],[0,9,2,2,1,11,2,8,1,3,2,2,0,4,1,24,2,22,1,10,0,3,2,28,0,9,2,13,0,5,2,9],[0,9,2,3,0,2,2,2,1,6,2,11,1,2,0,4,1,23,2,22,1,12,2,31,0,6,2,28,0,1],[0,9,2,2,0,1,2,1,1,1,2,2,1,3,2,13,1,26,2,26,1,12,2,32,0,5,2,18,0,1,2,9,0,1],[0,12,2,4,1,2,2,13,1,5,2,1,1,20,2,30,1,6,2,23,1,1,2,1,0,5,1,1,2,5,0,4,2,6,0,4,2,12,0,1,2,4,0,2],[0,11,2,13,3,3,2,4,1,3,2,3,1,19,2,19,3,1,1,2,2,9,1,6,2,22,0,8,1,1,2,5,0,4,2,6,0,4,2,18,0,1],[0,13,2,6,3,2,1,1,2,1,3,4,0,3,2,1,1,3,2,3,1,19,2,2,1,2,2,14,3,1,1,4,2,8,1,7,2,15,0,15,2,15,0,5,2,18],[0,13,2,5,1,1,3,9,0,2,2,3,1,1,2,3,1,21,2,16,3,2,1,4,2,7,1,7,2,10,0,1,2,4,0,16,2,14,0,6,2,16,0,1],[0,13,2,2,3,4,2,4,3,5,0,2,2,7,1,22,2,15,3,4,1,3,2,7,1,7,2,3,0,29,2,12,0,6,2,13,0,4],[0,2,1,2,0,9,2,1,3,5,2,5,3,6,2,7,1,22,2,15,3,4,1,3,2,3,1,1,2,3,1,7,2,2,0,30,2,13,0,5,2,5,0,1,2,6,0,5],[1,4,0,9,2,1,3,5,2,7,3,4,2,7,1,23,2,15,3,4,1,2,2,2,1,2,2,3,1,8,2,1,0,20,1,2,0,18,2,1,0,1,2,1,0,10,2,6,0,6],[1,3,0,1,1,2,0,2,2,6,3,5,2,7,3,5,2,7,1,22,2,15,3,3,1,3,2,8,1,8,0,13,2,1,1,1,0,4,1,2,2,1,0,18,2,2,0,23],[1,7,2,7,3,3,2,10,3,5,2,6,1,26,2,11,3,3,1,3,2,8,1,8,0,12,2,2,1,6,2,6,0,39],[1,6,2,9,3,2,2,10,3,2,0,3,2,6,1,24,2,1,1,1,2,12,3,1,1,4,2,5,1,2,2,2,1,7,0,12,2,2,1,6,2,9,0,36],[0,3,1,2,2,11,3,1,2,10,3,2,0,3,2,6,1,23,2,5,3,4,2,6,3,1,1,5,2,4,1,4,2,6,1,1,0,13,2,1,1,6,2,16,0,29],[0,2,1,2,2,5,0,4,2,14,3,2,0,3,2,6,1,23,2,5,3,5,2,5,3,1,1,5,2,5,1,4,2,7,0,12,1,7,2,16,0,29],[0,2,1,2,2,5,0,4,2,16,0,3,2,6,1,22,2,6,3,1,0,8,2,1,3,1,1,2,0,4,2,5,1,3,2,8,0,11,1,2,2,2,1,3,2,3,0,3,2,18,0,18,2,3],[0,2,1,3,2,4,0,4,2,16,0,4,2,4,1,23,2,6,3,1,0,8,2,4,0,4,2,10,1,2,2,4,0,7,2,4,1,3,2,1,1,3,2,3,0,3,2,1,1,1,2,16,0,1,2,2,0,15,2,3],[0,2,1,3,2,4,0,4,2,5,0,13,2,7,1,23,2,1,0,15,2,2,0,4,2,10,1,3,2,1,0,8,2,5,1,4,2,2,1,1,2,3,0,7,2,2,0,3,2,13,0,10,2,6,0,1],[0,3,1,1,2,6,0,3,2,4,0,14,2,8,1,22,2,1,0,15,2,2,0,4,2,9,1,5,0,8,2,5,1,7,2,3,0,7,2,2,0,8,2,9,0,9,2,6,0,1],[2,17,0,19,2,3,1,22,2,1,0,15,2,2,0,4,2,7,1,7,0,8,2,4,1,9,2,2,0,18,2,2,0,1,2,4,1,1,0,7,2,6,0,3],[1,2,2,15,0,20,2,2,1,23,2,2,0,12,2,6,0,1,2,7,1,7,0,8,2,1,1,11,0,24,1,7,0,5,2,6,0,3],[2,17,0,21,2,1,1,22,2,5,0,10,1,1,2,13,1,7,0,8,1,12,0,26,1,5,2,7,0,7],[2,17,0,21,2,1,1,22,2,5,0,12,2,12,1,8,0,6,1,13,0,26,1,6,2,6,0,7],[2,10,1,1,2,6,1,2,0,14,2,2,0,3,2,1,1,22,2,4,0,13,2,10,1,11,0,5,1,11,0,8,1,2,0,20,1,5,2,4,0,8],[2,8,1,7,2,2,1,2,0,14,2,2,0,3,1,23,2,4,0,11,2,5,0,4,2,2,1,13,0,4,1,11,0,8,1,2,0,20,1,5,2,4,0,8],[2,8,1,5,0,20,1,2,0,3,1,23,2,3,0,12,2,5,0,4,1,15,0,4,1,10,0,9,1,2,0,10,1,4,0,9,1,6,0,8],[2,9,1,4,0,20,1,2,0,3,1,23,2,1,0,15,2,4,0,4,1,15,0,5,1,9,0,6,1,5,0,10,1,5,0,22],[2,9,3,4,0,20,1,2,0,3,1,22,2,2,0,3,2,2,0,9,2,5,0,4,1,15,0,3,1,11,0,5,1,8,0,8,1,8,0,19],[2,13,0,20,1,27,2,2,0,13,2,6,0,4,1,15,0,3,1,10,0,3,1,12,0,7,1,8,0,19],[0,4,2,9,0,6,2,2,0,12,1,28,2,1,0,3,2,2,1,2,2,8,0,4,2,2,1,30,0,3,1,13,0,6,1,10,0,17],[0,5,2,11,0,3,2,2,0,12,1,30,2,4,1,3,2,7,0,4,2,2,1,30,0,3,1,29,0,17],[0,6,2,17,0,11,1,29,2,4,1,3,2,2,1,2,2,3,0,4,2,1,1,63,0,4,1,2,0,11],[0,9,2,15,0,10,1,29,2,4,1,3,2,2,1,2,2,4,0,3,1,22,2,4,1,38,0,1,1,5,2,1,0,10],[0,10,2,17,0,7,1,29,2,1,0,2,2,1,1,3,2,10,1,22,2,5,1,2,2,6,1,4,2,2,1,31,2,1,0,9],[0,11,2,17,0,6,1,29,0,3,2,1,1,3,2,4,1,29,2,4,1,1,2,7,1,4,2,3,1,31,0,9],[0,19,2,12,0,3,2,1,1,27,0,4,2,1,1,2,2,2,0,9,1,23,2,4,1,1,2,7,1,5,2,1,1,28,2,1,1,3,0,9],[0,19,2,17,1,26,0,5,2,4,0,9,1,20,2,18,1,15,2,6,1,9,2,2,1,6,0,6],[0,21,2,18,1,23,0,7,2,1,1,1,0,9,1,19,2,20,1,1,2,2,1,1,2,3,1,5,2,13,1,3,2,4,1,4,2,1,0,5,2,1],[0,21,2,18,1,24,2,1,0,4,2,2,1,1,0,7,1,21,2,18,1,3,2,32,1,4,0,5,2,1],[0,21,2,19,1,22,2,2,0,4,2,2,1,3,0,4,1,22,2,18,1,1,2,1,1,1,2,36,0,6],[0,21,2,20,1,20,2,2,0,1,2,6,1,3,0,1,1,24,2,19,1,1,2,37,0,7],[0,25,2,16,1,19,2,10,1,28,2,2,1,2,2,14,1,2,2,36,0,8],[0,25,2,2,0,4,2,8,1,1,2,2,1,15,2,13,1,28,2,19,1,1,2,33,0,11],[0,32,2,10,1,14,2,15,1,1,2,1,1,1,2,1,1,1,2,11,1,11,2,53,0,11],[0,33,2,10,1,14,2,1,1,2,2,28,1,10,2,53,0,11],[0,33,2,10,1,14,2,31,1,10,2,1,0,4,2,48,0,11],[0,33,2,10,1,14,2,29,1,12,2,1,0,4,2,48,0,11],[0,11,2,8,0,18,2,2,1,17,2,30,1,13,0,10,2,5,0,2,2,13,3,1,2,20,0,12],[0,11,2,8,0,18,1,20,2,29,1,13,0,9,2,6,0,3,2,5,0,3,2,3,3,3,2,10,0,21],[0,7,2,16,0,14,1,23,2,26,1,13,0,9,2,6,0,4,2,4,0,40],[0,7,2,16,0,14,2,2,1,22,2,24,1,15,0,4,2,2,0,3,2,4,0,49],[0,5,2,6,1,1,0,3,1,2,2,10,0,11,2,1,1,24,2,21,1,16,0,3,1,1,2,9,0,49],[0,4,2,7,0,4,1,1,2,11,0,14,1,20,0,3,2,3,0,6,2,3,0,2,2,4,1,17,0,3,1,3,0,1,2,7,0,49],[0,3,2,7,0,5,2,10,0,16,1,20,0,3,1,1,2,1,0,7,2,3,0,2,2,4,1,21,2,10,0,48,2,1],[2,2,0,1,2,7,0,5,2,10,0,13,1,2,0,1,1,20,0,12,2,1,1,2,0,2,2,6,1,18,2,11,0,48,1,1],[2,2,0,1,2,7,0,5,2,7,0,16,1,23,0,12,2,12,1,18,2,10,0,6,2,2,0,32,2,4,0,5],[0,3,1,1,2,5,0,6,2,6,0,17,1,25,2,1,0,8,2,13,1,18,2,8,0,8,2,2,0,32,2,2,1,2,0,5],[0,3,1,2,2,4,0,6,2,6,0,17,1,24,2,2,0,8,2,14,1,17,0,4,2,4,0,6,2,4,0,20,2,4,0,4,2,6,1,1,2,1,0,5],[0,2,2,1,1,2,2,4,0,5,2,10,0,15,1,22,2,6,0,3,2,16,1,17,0,4,2,4,0,6,2,4,0,20,2,4,0,4,2,8,0,5],[0,2,2,5,0,7,2,11,0,13,1,22,2,2,1,2,2,22,1,15,0,6,2,4,1,1,0,7,2,2,0,10,2,26,0,5],[0,5,2,3,0,6,2,11,0,13,1,21,2,27,1,16,0,5,2,3,1,2,0,7,2,2,0,10,2,26,0,5],[0,5,2,3,0,5,1,4,2,10,0,11,2,1,1,19,2,16,1,3,2,9,1,16,0,5,2,3,1,2,0,21,2,22,0,7],[0,5,2,3,0,5,1,6,2,8,0,10,2,2,1,17,2,18,1,4,2,9,1,14,0,6,2,4,0,22,2,23,0,6],[0,5,2,8,1,6,0,1,2,2,0,3,2,2,0,6,2,6,1,16,2,11,0,2,2,7,1,2,2,10,1,14,0,4,2,6,0,23,2,22,0,6],[0,5,2,8,1,6,0,6,2,2,0,6,2,6,1,16,2,10,0,6,2,16,1,14,0,4,2,8,0,22,2,5,3,1,2,15,0,6],[0,6,2,8,1,5,0,6,2,2,0,6,2,6,1,16,2,9,0,9,2,5,0,3,2,5,1,15,0,4,2,8,0,22,2,7,3,1,2,14,0,5],[0,8,2,7,1,5,0,5,2,2,0,6,2,6,1,16,2,9,0,9,2,1,1,3,0,4,2,5,1,7,2,2,1,6,0,3,2,9,0,9,2,2,0,11,2,6,3,3,2,14,0,4],[0,8,2,7,1,5,2,7,0,12,2,1,1,14,2,13,0,6,3,1,1,3,0,4,2,5,1,2,2,1,1,4,2,3,1,6,2,8,0,12,2,5,0,8,2,6,0,4,2,13,0,4],[0,8,2,9,1,3,2,7,0,12,2,1,1,14,2,13,0,5,3,1,1,5,0,3,2,10,1,2,2,4,1,5,2,1,1,1,2,7,0,11,2,6,0,7,2,6,0,4,2,11,0,6],[0,8,2,19,0,13,2,1,1,13,2,8,0,10,1,6,0,5,2,10,1,1,2,3,1,5,2,7,0,12,2,1,1,3,2,3,1,1,0,6,2,6,0,8,2,7,0,6],[0,4,2,26,0,10,2,3,1,11,2,7,0,12,1,5,0,5,2,11,1,1,2,3,1,3,2,8,0,12,1,5,2,2,1,1,0,6,1,1,2,5,0,8,2,7,0,6],[0,3,2,27,0,10,2,3,1,12,2,4,0,14,1,5,0,5,2,12,1,1,2,1,1,4,2,4,0,16,1,6,2,2,0,6,1,1,2,3,0,11,2,7,0,5],[2,3,1,4,2,23,0,10,2,2,1,11,2,1,1,4,2,1,0,14,1,5,0,5,2,11,1,8,2,3,0,16,1,7,2,2,0,5,1,1,2,3,0,12,2,6,0,5],[3,3,1,3,0,5,2,6,0,1,2,15,0,7,2,2,1,10,2,3,1,1,0,17,1,4,2,2,0,4,2,11,1,8,2,2,0,9,2,3,1,14,0,21,2,11],[0,2,1,4,0,5,2,6,0,6,2,10,0,7,2,3,1,9,2,3,1,1,0,17,1,4,2,2,0,4,2,11,1,8,2,1,0,10,1,17,0,21,2,11],[0,2,1,4,0,5,2,6,0,9,2,9,0,5,2,3,1,9,2,3,1,1,0,11,1,9,2,3,0,4,2,10,1,7,2,1,0,12,3,1,1,16,0,25,2,7],[0,4,1,2,0,5,2,6,0,10,2,9,0,5,2,1,1,10,2,4,0,11,1,8,2,4,0,4,2,9,1,9,0,12,1,16,2,3,0,23,2,7],[0,4,1,2,0,5,2,4,0,14,2,7,0,7,1,10,2,3,0,9,1,9,2,3,0,6,2,6,1,12,0,10,1,17,2,4,0,25,2,3,1,2],[0,11,2,4,0,14,2,7,0,7,1,10,2,2,0,1,2,2,0,2,2,1,1,3,0,1,1,9,2,3,0,6,2,3,1,1,2,1,1,13,0,10,1,16,2,2,1,1,2,1,0,11,2,4,0,10,1,1,2,3,0,2],[0,11,3,1,2,3,0,14,2,8,0,6,1,10,2,5,0,2,1,14,2,3,0,6,2,3,1,16,2,2,1,2,2,6,1,15,2,1,1,3,0,10,2,6,0,9,1,1,2,3,0,2],[0,11,3,2,2,2,0,14,2,8,0,6,1,10,2,5,0,3,1,12,2,4,0,6,2,3,1,16,2,12,3,1,1,11,2,2,1,3,0,9,2,7,0,5,1,4,2,3,0,3],[0,9,3,3,2,5,0,14,2,6,0,6,1,10,2,8,1,13,2,3,0,4,2,5,1,17,2,11,3,1,1,10,2,4,1,1,2,1,0,6,2,10,0,5,1,1,2,6,0,3],[0,9,3,3,2,5,0,14,2,6,0,6,1,10,2,9,1,15,0,4,2,5,1,17,2,13,1,9,2,6,0,6,2,13,0,2,2,7,0,3],[0,7,3,6,0,18,2,6,0,6,1,10,2,8,3,1,1,8,2,3,0,1,1,2,0,5,2,5,1,15,0,6,2,12,1,5,2,9,0,4,2,22,0,3],[0,7,3,6,0,13,2,2,0,3,2,6,0,6,1,10,2,8,3,1,1,6,2,6,0,7,2,5,1,15,0,6,2,13,1,3,2,10,0,4,2,22,0,3],[0,7,3,1,0,18,2,2,0,1,2,8,0,6,1,10,2,4,0,4,3,2,1,2,3,4,2,5,0,7,2,5,1,15,0,10,2,9,1,3,2,9,0,9,2,16,0,5],[0,3,2,1,1,2,3,7,2,1,0,14,2,9,0,5,1,15,0,4,3,8,2,17,1,15,0,10,2,20,0,10,2,16,0,5],[0,3,2,1,0,9,2,1,0,14,1,1,2,12,1,16,0,4,2,1,3,7,2,17,1,15,0,12,2,7,0,4,2,7,0,10,2,14,0,7],[0,3,1,1,0,9,2,1,0,14,1,1,2,12,1,16,0,4,2,1,3,1,1,3,3,2,2,18,1,15,0,11,2,7,0,6,2,6,0,10,2,14,0,7],[0,3,1,1,0,9,2,1,0,14,2,13,1,16,0,4,2,1,3,1,0,7,2,3,3,1,2,12,1,14,0,12,2,6,0,7,2,10,0,6,2,4,0,17],[0,3,1,1,0,9,2,1,0,14,2,13,1,19,0,1,1,2,0,10,2,13,1,13,0,26,2,6,1,2,2,2,0,5,2,5,0,17],[0,3,1,1,0,9,2,1,0,13,2,10,0,1,2,3,1,22,0,11,2,12,1,13,0,26,2,4,0,4,3,2,0,5,2,5,0,17],[0,3,1,1,0,9,2,1,0,13,2,10,0,5,1,21,0,12,2,11,1,14,0,25,2,3,3,1,0,4,3,2,0,6,2,4,0,17],[0,3,1,1,0,9,2,1,0,1,2,2,0,10,2,7,0,8,1,19,3,2,0,12,2,11,1,14,0,23,2,6,0,13,2,3,0,17],[0,3,1,1,0,9,2,1,0,1,2,2,0,10,2,6,0,9,1,19,3,2,0,12,3,3,2,8,1,17,2,1,0,19,2,6,0,14,2,2,0,17],[0,3,1,1,0,9,3,1,0,1,2,2,0,8,2,4,0,1,2,2,0,9,1,20,0,14,3,3,2,8,1,17,2,1,0,19,2,4,0,16,2,2,0,10,2,6,0,1],[0,3,1,7,3,4,0,1,2,2,0,7,2,5,0,12,1,19,3,1,0,14,3,3,2,8,1,17,0,20,2,4,0,16,2,5,0,7,2,6,0,1],[0,15,2,2,0,7,2,5,0,10,2,2,1,19,3,1,0,14,3,3,2,8,1,16,0,19,2,6,0,16,2,5,0,7,2,4,0,3],[0,9,1,3,3,2,2,3,0,8,2,4,0,10,2,2,1,19,2,1,0,14,3,2,2,9,1,15,0,15,2,2,0,3,2,6,0,15,2,5,0,8,2,4,0,3],[0,9,1,5,2,3,0,8,2,4,0,8,2,5,1,17,2,2,0,14,1,1,2,10,1,15,0,8,2,2,0,5,2,2,0,1,2,12,0,8,2,8,0,8,2,4,0,3],[0,8,1,6,3,1,2,2,0,8,2,5,0,7,2,5,1,17,2,2,0,14,2,11,1,15,0,5,2,5,0,7,2,12,1,1,0,8,2,8,0,8,2,4,0,3],[0,1,1,2,0,4,1,7,3,1,2,4,0,6,2,5,0,7,2,6,1,17,2,2,0,13,2,11,1,18,2,7,0,7,2,6,0,1,2,4,1,3,0,1,1,2,2,4,1,1,2,6,0,5,2,10,0,1],[0,1,1,2,0,4,3,1,1,6,3,1,2,3,3,1,0,6,2,5,0,7,2,8,1,16,2,3,0,11,2,11,1,7,2,2,1,10,2,7,0,7,2,2,0,3,2,5,1,6,2,3,1,3,2,5,0,5,2,2,0,2,2,6,0,1],[0,1,1,2,0,4,3,2,0,6,2,3,3,1,0,6,2,5,0,11,2,5,1,15,2,3,1,1,0,6,2,4,1,6,2,4,1,7,2,3,1,11,2,6,0,12,2,8,1,4,2,3,1,2,2,5,0,3,2,1,0,2,2,1,0,2,2,7],[0,1,1,2,0,3,3,3,0,6,1,1,2,3,0,6,2,5,0,11,2,5,1,16,2,1,1,2,0,6,2,2,1,19,2,3,1,11,2,6,0,10,2,10,1,5,2,13,0,2,2,10],[0,6,3,3,0,6,1,2,2,2,0,4,2,7,0,11,2,4,1,18,2,2,0,4,2,3,1,20,2,4,1,10,2,7,0,9,2,8,1,7,2,25],[0,6,3,2,2,1,0,6,1,2,3,1,2,1,0,4,2,6,0,12,2,4,1,18,2,3,0,3,2,2,1,23,2,3,1,9,2,6,0,10,2,8,1,8,2,22,0,1,2,1],[0,5,3,2,2,2,0,6,1,3,2,9,0,12,2,5,1,18,2,4,0,3,2,1,1,25,2,3,1,4,2,1,0,3,2,6,0,10,2,14,1,3,2,8,1,1,2,9,0,4,2,1],[0,5,3,1,2,3,0,6,1,3,2,9,0,12,2,5,1,17,2,7,0,1,2,1,1,26,2,2,1,5,0,3,2,4,1,2,2,6,0,2,1,2,2,16,1,1,2,18,0,4,2,1],[0,7,2,6,1,5,2,7,0,14,2,4,1,18,2,9,1,32,0,4,2,12,0,2,2,12,0,5,2,1,0,2,2,8,1,2,0,1,2,6,0,5],[0,7,2,6,1,3,3,2,2,7,0,14,2,5,1,16,2,10,1,12,2,3,1,16,0,5,2,12,0,5,2,9,0,5,2,1,0,2,2,8,1,4,2,5,0,5],[0,7,2,5,1,1,0,4,3,2,2,4,0,18,2,3,1,14,2,6,0,3,2,4,1,8,2,6,1,15,0,6,2,12,0,5,2,9,0,5,2,9,1,7,2,6,0,3],[0,7,2,6,0,4,2,6,0,18,2,3,1,13,2,6,0,4,2,5,1,5,2,9,1,13,0,7,2,7,0,10,2,9,0,5,2,7,1,2,0,3,2,1,1,4,2,5,0,3],[0,41,2,3,1,12,2,7,0,6,2,4,1,3,2,11,1,12,0,7,2,4,0,2,2,1,0,15,2,6,0,2,2,8,1,2,0,3,2,1,1,5,2,4,3,2,0,1],[0,41,2,1,1,15,2,6,0,5,2,7,1,1,2,11,1,12,0,7,2,4,0,2,2,1,0,16,2,16,1,1,0,3,2,1,1,6,2,3,3,2,0,1],[0,37,2,4,1,18,2,2,0,7,2,3,0,6,2,10,1,12,2,12,0,21,2,15,0,4,1,5,2,3,3,2,0,1],[0,37,2,4,1,18,2,2,0,8,2,2,0,6,2,8,1,16,2,10,0,22,2,5,0,2,2,7,0,4,1,2,3,3,2,2,0,1,2,2,0,1],[0,27,2,2,0,8,2,3,1,20,2,1,0,8,2,2,0,6,2,7,1,18,2,1,0,2,2,4,0,25,2,4,0,2,2,7,0,4,1,2,2,9],[0,27,2,2,0,8,2,2,1,21,2,2,0,2,1,1,2,1,0,2,2,3,0,6,2,5,1,18,2,3,0,2,2,4,0,25,2,3,0,3,2,7,0,4,2,2,0,3,2,6],[0,27,2,2,0,8,2,1,1,22,2,3,1,2,2,8,0,4,2,6,1,17,0,7,2,2,0,10,2,4,0,10,2,4,0,3,2,2,0,11,2,1,0,2,2,6],[0,26,2,3,0,7,2,1,1,24,2,2,1,2,2,8,0,4,2,6,1,16,0,8,2,2,0,10,2,4,0,10,2,4,0,16,2,9],[0,26,2,4,1,1,0,4,2,1,1,24,2,13,0,4,2,6,1,16,0,8,2,2,0,10,2,4,0,12,2,2,0,18,2,2,0,4,2,1],[0,26,2,4,1,1,2,3,1,2,2,4,1,19,2,24,1,16,0,8,2,2,0,10,3,2,2,2,0,12,2,2,0,18,2,2,0,4,2,1],[0,26,2,2,0,2,2,1,1,5,2,5,1,17,2,9,0,4,2,13,1,17,0,6,2,4,0,6,1,2,0,16,2,2,0,25],[0,30,1,7,2,4,1,14,2,12,0,4,2,12,1,18,0,6,2,4,0,6,1,2,0,15,2,4,0,6,2,2,0,16],[0,30,1,7,2,1,1,1,2,4,1,11,2,9,0,8,2,2,0,1,2,9,1,18,0,6,2,4,0,23,2,5,0,4,2,3,0,16],[0,31,1,6,2,6,1,11,2,9,0,7,2,3,0,6,2,4,1,1,2,1,1,16,0,6,2,4,0,21,2,7,0,4,2,2,0,17],[0,29,2,1,1,7,2,6,1,11,2,2,1,2,2,4,0,8,2,3,0,8,2,5,1,16,2,1,0,4,2,6,0,19,2,7,0,16,2,2,0,5],[0,29,2,1,1,7,2,3,1,1,2,1,1,12,2,2,1,2,2,5,0,5,2,2,0,1,2,2,0,8,2,5,1,16,2,1,0,4,2,7,0,18,2,7,0,16,2,2,0,5],[0,29,2,2,1,7,2,1,1,15,2,8,0,1,2,4,1,6,2,2,0,6,2,5,1,16,2,15,0,15,2,7,0,16,2,2,0,5],[0,29,2,2,1,24,2,4,0,3,2,3,1,10,0,6,2,5,1,16,2,14,0,12,2,2,0,4,2,5,0,16,2,2,0,5],[0,29,2,2,1,24,2,4,0,3,2,2,1,12,2,1,0,4,2,5,1,16,2,5,0,18,2,5,0,4,2,2,0,1,2,4,0,10,2,10,0,1],[0,29,2,2,1,25,2,3,0,4,2,1,1,13,2,1,0,3,2,5,1,16,2,5,0,18,2,5,0,7,2,4,0,9,2,11,0,1],[0,27,2,5,1,24,2,3,0,4,2,1,1,13,2,8,1,16,2,5,1,1,0,18,2,6,0,8,2,2,0,9,2,12],[0,27,2,6,1,24,2,2,0,4,2,1,1,13,2,8,1,15,2,6,1,1,0,18,2,6,0,8,2,2,0,5,2,16],[0,27,2,6,1,23,2,2,1,1,0,4,2,1,1,13,0,1,2,6,1,15,2,7,1,2,2,1,0,16,2,6,0,8,2,2,0,4,2,7,0,9,2,1],[0,27,1,1,2,6,1,22,2,2,1,2,2,3,1,14,0,3,2,4,1,14,2,11,0,15,2,7,0,8,2,2,0,4,2,6,0,10,2,1],[0,27,1,1,2,6,1,22,2,2,1,2,2,3,1,14,0,3,2,3,1,15,2,8,0,1,2,8,0,9,2,7,0,8,2,9,0,13,2,1],[0,26,1,2,2,8,1,23,2,5,1,13,0,3,2,3,1,15,2,4,0,5,2,9,0,6,2,9,0,8,2,8,0,14,2,1],[0,21,2,2,1,4,2,4,0,7,1,20,2,2,0,11,1,6,0,3,2,3,1,16,2,3,0,7,2,7,0,6,2,8,1,1,0,10,2,5,0,9,2,7],[0,21,2,1,1,5,2,5,0,6,1,20,2,2,0,3,2,1,3,1,0,10,1,1,2,1,0,3,2,3,1,18,0,8,2,7,0,7,2,8,0,10,2,4,0,10,2,7],[0,21,1,6,2,5,0,6,1,19,2,3,0,17,2,5,1,10,2,1,1,8,2,4,0,5,2,7,0,6,2,12,0,16,2,11],[0,21,1,6,2,5,0,6,1,18,2,3,0,17,2,6,1,9,2,3,1,5,2,5,1,1,0,8,2,4,0,6,2,13,0,15,2,11],[0,23,1,5,2,4,0,5,2,1,1,18,2,3,0,17,2,6,1,8,2,5,1,4,2,6,0,9,2,13,0,6,2,4,0,12,2,7,0,6],[0,23,1,6,2,3,0,5,2,2,1,16,2,4,0,18,2,5,1,7,2,7,1,4,2,6,0,9,2,12,0,6,2,4,0,12,2,5,0,8],[0,23,1,6,2,10,1,16,2,4,0,18,2,4,1,8,2,9,1,2,2,3,1,3,0,9,2,10,0,8,2,6,0,8,2,7,0,8],[0,23,1,11,2,5,1,17,2,4,0,17,2,4,1,8,2,8,0,17,2,6,1,1,2,4,0,8,2,6,0,7,2,5,0,11],[0,25,1,10,2,3,1,18,2,4,0,17,2,4,1,11,2,1,0,21,2,4,0,16,2,5,0,4,2,8,0,11],[0,25,1,32,2,3,0,14,2,7,1,9,2,3,0,42,2,5,0,3,2,8,0,11],[0,25,1,4,0,3,1,25,2,5,0,2,2,17,1,8,2,4,0,45,2,9,0,15],[0,25,1,4,0,4,1,25,2,4,0,2,2,17,1,8,2,4,0,11,2,2,0,33,2,8,0,15],[0,2,2,11,0,12,1,2,0,7,1,25,2,3,1,2,2,9,1,1,2,7,1,8,2,4,0,11,2,2,0,34,2,7,0,10,2,5],[0,2,2,1,0,9,2,1,0,11,1,3,0,9,1,24,2,10,1,6,2,5,1,9,2,6,0,6,2,4,0,16,2,2,0,17,2,6,0,10,2,4,0,1],[0,2,2,1,0,9,2,1,0,11,1,1,3,2,0,9,2,1,1,23,2,9,1,7,2,5,1,10,2,6,0,4,2,6,0,15,2,2,0,38],[0,2,2,1,0,9,2,1,0,11,3,3,2,1,0,6,2,1,1,1,2,1,1,24,2,8,1,7,2,4,1,12,2,5,0,4,2,6,0,55],[0,2,2,1,0,9,2,1,0,10,1,1,2,10,1,2,2,2,1,27,2,4,1,2,2,4,1,1,2,4,1,13,2,2,0,6,2,8,0,18,2,4,0,24,2,1,0,6],[0,2,2,1,0,9,2,1,0,10,2,15,1,33,2,3,1,20,2,1,0,6,2,8,1,1,0,14,2,2,0,1,2,7,0,21,2,1,0,6],[0,2,2,1,0,9,2,1,0,1,2,1,0,6,2,17,1,56,2,1,0,6,2,6,1,3,0,13,2,12,0,20,2,1,0,5,1,1],[0,2,2,1,0,9,2,1,0,1,2,1,0,6,2,16,1,57,2,1,0,6,2,6,1,2,2,1,0,8,2,2,0,3,2,12,0,20,2,1,0,5,1,1],[0,2,2,1,0,9,2,1,0,1,2,1,0,6,2,12,1,60,2,17,0,7,2,20,0,14,2,5,0,6],[0,2,2,1,0,9,2,1,0,1,2,1,0,6,2,9,1,63,2,17,0,6,2,22,0,13,2,5,0,6],[0,2,2,1,1,3,3,3,2,4,0,8,2,9,1,64,2,16,0,5,2,16,1,1,2,6,0,13,2,5,0,6],[0,7,1,1,0,12,2,10,1,18,2,5,1,42,2,2,1,1,2,4,0,3,2,5,0,5,2,16,1,1,2,10,0,9,2,6,0,5],[0,7,1,1,2,4,0,8,2,9,1,11,0,2,1,6,2,5,1,46,2,3,0,4,2,6,1,2,2,10,1,2,2,4,0,5,2,4,1,4,0,6,2,8,0,5],[0,7,1,1,2,5,0,7,2,9,1,11,0,3,1,5,2,5,1,2,2,4,1,41,0,7,2,3,1,4,2,15,0,6,2,5,1,4,0,5,1,1,2,5,0,7],[0,7,1,1,2,5,0,4,2,11,1,12,0,3,1,1,2,2,1,2,2,5,1,2,2,5,1,40,0,8,2,2,1,3,2,6,0,3,2,5,0,10,2,7,0,5,1,1,2,4,0,8],[0,7,2,2,0,1,2,3,0,4,2,2,1,2,2,6,1,10,2,1,1,1,0,4,1,1,2,2,1,2,2,12,1,40,0,8,2,2,1,1,2,8,0,3,2,5,0,9,2,10,0,2,1,1,2,4,0,9],[3,1,1,2,0,6,2,10,1,3,2,5,1,8,2,3,0,9,2,15,1,38,0,8,2,4,0,3,2,4,0,3,2,5,0,9,2,11,1,3,2,3,0,9],[3,2,1,2,2,15,1,4,2,4,1,7,2,2,0,11,2,17,1,36,0,8,2,4,0,3,1,1,2,3,0,5,2,3,0,12,2,8,1,4,2,2,0,9],[2,19,1,6,2,3,1,5,2,3,0,11,2,18,1,32,0,1,1,2,0,7,2,5,0,3,1,2,0,7,2,7,0,8,2,8,1,4,0,11],[2,1,0,5,2,13,1,7,2,1,1,4,0,16,2,19,1,29,2,2,0,9,2,6,0,3,1,2,0,8,2,6,0,8,2,8,1,4,0,11],[2,1,0,5,2,8,0,4,2,1,1,3,0,2,1,6,0,28,2,16,1,6,0,7,1,4,0,15,2,6,0,15,2,6,0,29],[2,1,0,24,1,1,2,3,0,34,2,14,1,2,0,8,1,4,0,15,2,6,0,15,2,6,0,29],[0,25,2,2,0,36,2,15,1,1,0,27,2,6,0,15,2,6,0,29],[0,25,2,2,0,36,2,16,0,28,2,5,0,15,2,6,0,29],[0,63,2,16,0,28,2,6,0,14,2,8,0,27],[0,63,2,16,0,28,2,6,0,14,2,8,0,27],[0,63,2,16,0,29,2,9,0,8,2,4,0,33],[0,63,2,16,0,30,2,13,0,3,2,4,0,33],[0,63,2,20,0,29,2,17,0,33],[0,63,2,20,0,30,2,16,0,33],[0,55,3,1,2,29,0,29,2,6,0,42],[0,55,3,1,2,29,0,33,2,2,0,42],[0,55,3,1,2,29,0,33,2,1,1,1,0,42],[0,55,2,30,0,77],[0,59,2,8,0,4,2,1,0,90],[0,59,2,8,0,95],[0,61,2,6,0,95],[0,61,2,6,0,95],[0,61,2,6,0,95],[0,61,2,6,0,95],[0,61,2,6,0,95],[0,61,2,1,1,2,2,3,0,95],[0,63,3,2,0,97]]} +{"_comment":"Static land/water mask. SAILABLE WATER = the map's own PATHING MAP (data/extracted/war3map.wpm, bit 0x40 = no-water, 4x4 32u subcells per 128u tile, majority vote): the engine's truth for where ships could actually sail in the original. This REPLACES the minimap NON-BLUE colour key (~0.66 water), which over-watered: green 'shallow' paint is often visually-wet-but-UNSAILABLE, merging lanes the real map separates (owner-reported 2026-07-08: the NE lane must NOT merge into the east-edge lane; the wpm separates them). The wpm reads ~0.55 sailable over the playable crop and all 26 known anchors (HQs, harbours, spawns, lane waypoints) sit sailable. The ONLY additions on top of the raw wpm grid are MINIMAL 1-cell connectivity necks (so every shop + dock/spawn reaches the sea and the two bases stay water-connected) PLUS the two owner-approved WEST sail-around island moats (Swedish Lumber Mill, Goblin Potion Dealer: land core + thin 1-cell navigable ring + EXACTLY ONE entrance; deterministic post-step). water=true is ship-navigable. The OPTIONAL `depth` field (0=land,1=deep,2=shallow,3=pink) is additive render metadata the SIM IGNORES; the minimap colours band each FINAL water cell so a client paints the water shades like the original. Regenerate with: make terrain (tools/extractor/terrain.py; pure stdlib, reads wpm+w3e+PNG, no venv). yOrientation 'top-down' means rle row 0 is the NORTH (max-Y) edge.","source":"data/extracted/war3map.wpm (pathing map, bit 0x40=no-water; THE sailability authority) + data/extracted/war3map.w3e (grid geometry) + data/reference/war3mapMap.png (depth render metadata only)","target":"the original map's enforced ship-pathing (wpm no-water), cropped to the playable rectangle","rule":"water = wpm NOT-no-water majority over the 16 32u subcells per 128u tile, MINUS singleton speckle, PLUS minimal 1-cell connectivity necks (Dijkstra cost 1 water / 30 land) for shops, docks/spawns and base-to-base, PLUS the two carved WEST sail-around island moats (compact land core + thin 1-cell water ring + exactly one entrance) around the Swedish Lumber Mill and Goblin Potion Dealer shops. depth sub-classifies FINAL water cells from the minimap colours for RENDER only: DEEP (R-B>35 AND R>=G), PINK (R>150 AND B>120 AND R-G>15), else SHALLOW; a water cell whose pixels read land-blue falls back to SHALLOW.","playableBounds":{"minX":-5632.0,"minY":-7680.0,"maxX":5504.0,"maxY":7168.0},"bounds":{"minX":-5696.0,"minY":-7744.0,"maxX":5568.0,"maxY":7232.0},"cols":176,"rows":234,"cellSizeX":64.0,"cellSizeY":64.0,"yOrientation":"top-down","yOrientationNote":"rle row 0 = max-Y (north); last row = min-Y (south). col 0 = min-X (west). col=floor((x-minX)/cellSizeX), row=floor((maxY-y)/cellSizeY). The minimap is north-up; tiles are sampled at their world centers via the content-box registration, emit row 0 = north, matching sim isWater.","rleFormat":"water[r] = [leadingValue, run0, run1, ...]; runs alternate from leadingValue (0=land,1=water) and sum to cols.","depthRleFormat":"OPTIONAL render metadata, the sim IGNORES it. depth[r] = [value0, run0, value1, run1, ...] (explicit value per run; values 0=land, 1=deep, 2=shallow, 3=pink; runs sum to cols). depth[r][col]>0 IFF water[r][col]==1 (exactly consistent with the authoritative `water` mask). Carved necks/moats with no minimap colour emit as shallow (2).","waterFraction":0.462995,"validation":{"hqsOnWater":"2/2","harboursOnWater":"4/4","playerSpawnsOnWater":"12/12","lanes":["south-west: spawnWater=True connToEnemyHQ=True","south-east: spawnWater=True connToEnemyHQ=True","north-west: spawnWater=True connToEnemyHQ=True","north-east: spawnWater=True connToEnemyHQ=True"],"basesConnected":true,"shopsReachable":"16/16","shopReach":["Swedish Lumber Mill: reachable=True nearestSeaCells=1","Goblin Potion Dealer: reachable=True nearestSeaCells=1","Elven Library: reachable=True nearestSeaCells=0","Ship Wreck: reachable=True nearestSeaCells=0","Elven Library: reachable=True nearestSeaCells=4","Ale Brewery: reachable=True nearestSeaCells=2","Equipment Merchant: reachable=True nearestSeaCells=3","Heavy Weapons Merchant: reachable=True nearestSeaCells=2","Weapons Merchant: reachable=True nearestSeaCells=4","Equipment Merchant: reachable=True nearestSeaCells=2","Bill (Trade Master): reachable=True nearestSeaCells=3","Pirate Boat Merchant: reachable=True nearestSeaCells=0","Will (Trade Master): reachable=True nearestSeaCells=4","Weapons Merchant: reachable=True nearestSeaCells=2","Heavy Weapons Merchant: reachable=True nearestSeaCells=3","Goblin Bomb Shop: reachable=True nearestSeaCells=0"],"repairRegionsReachable":"2/2","repairRegionReach":["Repair_Station_South: reachable=True","Repair_Station_North: reachable=True"],"waterFraction":0.463,"eastThirdWaterRun":"median=6.0 mean=8.24 count=551","bottomRightWaterRun":"median=5.0 mean=6.32 count=161","rawWpmWaterFraction":0.4633,"necks":{"basePlatformCellsAdded":1,"connectivityNeckCellsAdded":0,"shopNeckCellsAdded":4,"repairRegionNeckCellsAdded":0,"waterFractionBefore":0.4633,"waterFractionAfter":0.4634,"shopsReachable":"16/16","repairRegionsReachable":"2/2","singletonCellsDropped":0,"straddledChannelCellsRestored":0,"ownerLaneGates":[{"gate":"north-most lane: east leg (owner's arrow)","row":26,"blocked":2,"widthUnits":128}],"westIslandLoops":{"Swedish Lumber Mill":{"shopCell":[16,127],"anchor":[12,127],"shopInCore":true,"shopInRing":false,"shopOnLand":true,"cycleLen":40,"entranceCells":[[11,121]],"entrances":1,"cellsChanged":93},"Goblin Potion Dealer":{"shopCell":[11,196],"anchor":[7,196],"shopInCore":true,"shopInRing":false,"shopOnLand":true,"cycleLen":40,"entranceCells":[[3,202]],"entrances":1,"cellsChanged":48},"waterFractionBefore":0.4634,"waterFractionAfter":0.463,"totalCellsChanged":141}},"laneTopologyVsWpm":{"anchors":22,"pairwiseMismatches":0},"sideRoutes":{"westLumberMillIsland":{"islandLandCells":81,"ringWaterCells":36,"entrances":1},"westGoblinPotionIsland":{"islandLandCells":81,"ringWaterCells":36,"entrances":1},"eastBreweryWrap":{"brewerySeaReachable":true,"farEastNorthWaterCells":152},"bottomRightWinding":{"tanSegments":157,"tanMaxRun":27,"windingNotBlob":false}},"wpmAgreement":0.9964,"wpmConfusion":"agree=0.9964 ours-only(necks/moats)=0.0017 ref-only(denoised)=0.0019","depthSplitLandDeepShallowPink":[0.537,0.2082,0.248,0.0068],"colourKeyAgreement":0.679},"water":[[0,176],[0,176],[0,176],[0,176],[0,176],[0,176],[0,176],[0,75,6,95],[0,75,6,95],[0,61,2,12,6,95],[0,61,2,12,6,95],[0,51,2,7,7,8,6,95],[0,51,2,7,7,8,6,95],[0,51,4,4,22,95],[0,51,4,4,22,95],[0,51,32,54,2,37],[0,51,32,54,2,37],[0,59,30,44,8,35],[0,59,30,44,8,35],[0,61,28,40,14,33],[0,61,28,37,20,30],[0,61,20,45,7,8,5,30],[0,61,20,45,7,8,5,30],[0,61,20,45,5,11,5,29],[0,61,20,45,5,12,5,28],[0,61,18,46,4,15,4,28],[0,61,18,46,4,47],[0,61,18,48,2,16,4,27],[0,61,19,47,2,16,4,27],[0,11,8,28,33,5,12,18,4,8,2,18,2,18,2,7],[0,11,8,28,37,1,13,6,4,6,5,8,2,18,3,17,2,7],[0,11,10,24,54,5,5,5,7,6,4,16,3,11,3,4,1,7],[0,11,10,24,54,5,5,1,2,2,8,5,4,9,4,2,4,11,3,4,1,7],[0,11,11,15,2,4,56,4,30,6,11,7,3,1,5,1,2,7],[0,11,12,9,2,3,2,4,56,3,31,6,2,1,8,7,12,7],[0,13,26,4,56,3,29,8,11,7,10,9],[0,13,26,4,56,3,28,9,13,5,10,9],[0,13,3,2,21,4,88,6,28,11],[0,13,2,1,116,5,18,1,9,11],[0,16,106,5,6,4,6,4,12,1,4,12],[0,15,104,8,6,4,6,4,18,11],[0,17,14,3,79,15,15,5,18,10],[0,17,15,2,74,1,4,16,14,6,16,11],[0,17,15,2,68,29,12,6,13,14],[0,6,2,9,84,30,13,5,5,1,6,15],[0,3,5,9,84,20,2,18,1,1,1,10,6,16],[0,3,4,1,2,2,89,13,2,4,3,18,2,33],[0,3,98,12,14,49],[0,3,30,3,65,12,17,46],[0,7,26,3,65,13,23,39],[0,6,7,4,16,3,66,12,23,31,4,4],[0,6,7,4,16,3,35,8,4,4,16,11,10,3,18,18,9,4],[0,6,7,4,16,4,34,8,4,4,16,7,14,3,18,1,2,15,9,4],[0,6,7,4,5,13,31,15,2,4,14,8,15,7,2,3,13,10,6,1,7,3],[0,7,7,3,4,14,31,15,2,4,14,8,15,7,2,8,9,9,6,4,4,3],[0,3,18,19,26,15,2,4,14,8,15,18,2,1,5,7,6,6,4,3],[0,3,18,20,27,12,6,1,14,8,12,24,7,5,6,6,3,4],[0,3,18,21,28,10,21,8,12,26,12,10,3,4],[0,3,18,21,28,12,20,6,13,26,12,10,2,5],[0,3,20,14,2,3,27,13,21,5,11,8,2,20,9,11,2,5],[0,3,20,14,2,3,27,11,5,4,15,4,11,8,2,20,9,10,3,5],[0,3,14,20,2,3,26,12,5,4,15,4,10,9,2,10,4,9,6,10,3,5],[0,3,14,20,2,3,24,15,4,4,15,5,9,6,5,10,5,25,2,5],[0,3,14,20,2,3,24,3,2,9,5,4,15,3,11,5,8,8,8,22,2,5],[0,3,14,20,29,13,6,4,15,3,10,3,12,7,8,21,3,5],[0,3,1,4,9,6,2,12,29,3,12,4,32,3,13,6,10,18,4,5],[0,9,11,3,2,12,44,4,32,3,29,18,4,5],[0,10,17,11,43,4,64,4,2,12,4,5],[0,13,15,10,44,3,64,1,6,11,4,5],[0,14,17,7,30,2,87,10,2,7],[0,15,17,6,29,3,87,10,2,7],[0,23,12,3,28,4,5,9,73,10,2,7],[0,23,43,5,4,9,76,7,3,6],[0,25,41,7,2,9,76,5,5,6],[0,25,43,4,3,7,78,5,4,7],[0,25,43,4,5,4,79,7,2,7],[0,25,42,1,9,1,81,7,3,7],[0,29,129,8,3,7],[0,29,2,4,120,12,2,7],[0,36,119,12,2,7],[0,37,118,12,2,7],[0,37,66,4,48,12,2,7],[0,37,66,4,48,12,2,7],[0,15,8,18,62,10,5,2,34,13,2,7],[0,15,8,18,62,9,6,3,5,3,16,22,2,7],[0,11,16,14,62,9,6,4,4,41,2,7],[0,11,16,14,63,4,2,3,4,50,2,7],[0,9,7,3,12,11,62,3,10,50,2,7],[0,8,7,4,12,14,20,3,3,6,3,2,21,3,3,1,7,49,3,7],[0,7,7,5,10,16,20,3,2,7,3,2,35,48,6,5],[0,4,2,1,7,5,10,13,2,1,20,12,3,2,35,48,6,5],[0,4,2,1,7,5,7,16,23,12,40,6,2,32,4,8,2,5],[0,7,6,6,6,17,26,8,39,8,2,32,4,8,3,4],[0,7,6,6,6,17,26,8,31,4,4,6,4,20,4,4,8,8,3,4],[0,6,7,5,10,15,28,3,33,4,4,6,4,20,4,4,8,8,2,5],[0,6,5,7,11,13,63,6,5,7,2,10,26,6,4,5],[0,9,3,6,11,13,64,5,5,7,2,10,26,6,4,5],[0,9,3,5,14,11,64,5,5,21,22,8,2,7],[0,9,3,5,14,10,64,6,4,22,23,7,2,7],[0,9,14,1,2,3,2,6,33,2,33,4,6,23,22,7,2,7],[0,9,14,6,2,6,32,6,30,4,8,22,21,7,3,6],[0,10,13,6,2,6,31,9,5,3,20,4,8,22,22,6,3,6],[0,12,12,5,2,6,31,9,4,4,20,3,9,9,2,11,23,5,3,6],[0,12,19,12,28,6,4,4,29,12,5,8,6,4,13,5,4,5],[0,12,19,12,28,5,6,3,30,11,6,7,6,4,11,7,4,5],[0,12,19,13,22,10,6,5,26,12,8,6,6,8,7,7,4,5],[0,8,26,10,21,12,5,5,26,12,8,6,6,8,7,7,5,4],[0,7,27,10,19,14,5,5,22,16,8,6,4,11,7,6,5,4],[0,4,30,10,19,14,5,5,22,16,9,5,4,12,6,6,5,4],[0,4,6,5,6,1,15,7,16,17,6,4,21,9,17,21,17,4],[0,6,4,5,6,6,10,7,16,17,6,4,20,10,17,21,17,4],[0,6,4,5,6,9,9,5,16,11,12,4,18,12,17,25,13,4],[0,8,2,5,6,10,9,5,15,11,12,4,18,12,19,23,7,10],[0,8,2,5,4,14,7,7,13,9,12,6,18,10,21,25,5,10],[0,15,4,14,7,7,12,1,2,2,4,1,12,6,18,10,20,11,4,10,4,12],[0,15,4,14,8,6,15,2,17,6,48,10,6,9,4,12],[0,15,4,14,8,6,15,3,16,6,48,9,7,5,7,13],[0,13,8,14,6,6,34,4,50,6,10,5,7,13],[0,13,8,14,6,6,34,4,50,6,13,2,7,13],[0,11,6,18,6,6,30,1,2,5,20,6,26,4,22,13],[0,11,6,13,2,3,6,6,31,7,20,6,26,4,22,13],[0,11,1,18,2,1,8,6,14,4,13,7,20,10,21,9,16,15],[0,7,11,14,9,5,15,4,40,10,20,10,16,15],[0,7,1,9,1,14,29,4,40,12,7,4,7,10,14,17],[0,7,1,9,1,14,29,4,40,11,7,6,6,10,14,17],[0,7,1,9,1,14,29,4,2,7,30,12,6,7,10,6,4,27],[0,7,1,9,1,14,32,1,2,10,26,26,10,5,5,27],[0,7,1,9,1,13,10,1,25,11,25,26,4,4,2,5,5,27],[0,7,1,9,1,13,10,5,21,12,25,25,4,4,2,6,4,27],[0,7,1,9,1,1,2,10,7,8,21,12,25,23,6,13,3,27],[0,7,1,9,1,1,2,10,6,9,21,12,29,19,6,14,2,27],[0,7,1,9,1,1,2,8,4,1,2,9,20,14,29,19,4,16,2,10,6,11],[0,7,11,1,2,7,5,12,20,14,28,20,4,16,5,7,6,11],[0,19,2,7,5,10,22,14,27,19,6,16,5,7,4,13],[0,13,8,8,4,10,22,14,26,15,2,3,6,15,5,8,4,13],[0,13,8,8,4,8,24,14,26,8,2,5,2,1,12,8,8,8,4,13],[0,12,9,8,5,7,24,14,26,5,5,7,13,8,8,8,4,13],[0,5,2,4,12,6,5,7,25,13,36,7,6,1,7,1,13,5,10,11],[0,5,2,4,12,6,5,7,27,11,37,7,2,3,22,5,2,2,6,11],[0,5,2,4,2,6,4,6,5,11,24,6,41,12,22,3,1,2,1,2,8,9],[0,5,2,3,3,6,4,6,5,11,24,6,41,10,28,2,11,9],[0,10,3,6,4,4,7,11,24,4,44,9,41,9],[0,10,3,6,4,4,6,12,25,3,43,10,38,1,2,9],[0,9,4,6,12,12,27,3,34,3,6,10,35,4,2,9],[0,9,4,6,12,12,29,1,34,3,12,2,37,4,2,9],[0,11,18,14,63,4,12,2,12,5,1,2,10,1,6,15],[0,11,18,14,62,5,12,5,9,5,1,2,17,15],[0,11,6,4,6,18,23,3,33,6,12,5,9,5,22,13],[0,11,6,4,6,18,22,4,32,7,7,10,9,5,9,3,10,13],[0,45,22,6,30,7,4,2,1,15,6,2,10,3,12,11],[0,45,22,5,31,7,4,2,1,16,17,3,12,11],[0,41,24,7,3,6,34,21,15,4,10,11],[0,41,24,8,2,6,34,22,5,2,7,4,7,1,2,11],[0,31,2,8,24,8,2,6,26,2,4,25,4,2,7,4,12,9],[0,31,2,8,25,2,2,2,3,6,26,2,4,25,3,3,7,4,2,3,7,9],[0,31,2,8,36,4,23,7,2,10,4,10,4,3,2,11,1,2,7,9],[0,30,3,7,37,4,22,8,2,10,4,10,4,16,10,9],[0,30,5,4,38,4,22,8,2,10,4,12,2,18,2,4,2,9],[0,30,73,8,2,10,4,12,2,18,2,4,2,9],[0,30,2,2,37,4,30,6,4,6,2,16,2,35],[0,34,37,4,30,6,4,6,2,15,4,6,2,26],[0,34,33,8,2,1,27,6,4,23,5,4,3,26],[0,35,32,7,3,6,22,6,4,21,7,4,2,27],[0,33,33,8,3,8,22,4,6,19,7,16,2,15],[0,33,34,5,2,1,2,8,22,4,7,18,7,16,2,15],[0,33,33,1,12,6,36,15,7,16,2,15],[0,33,30,3,13,6,35,12,2,4,5,16,2,15],[0,33,30,3,15,4,26,18,5,4,2,1,4,10,10,11],[0,33,30,4,15,3,26,18,5,7,4,9,11,11],[0,31,32,4,44,18,6,8,2,9,13,9],[0,31,32,4,44,18,6,8,2,5,17,9],[0,31,32,4,14,1,31,16,6,8,2,4,7,9,2,9],[0,31,50,3,29,15,7,8,2,4,6,10,2,9],[0,31,50,3,26,1,8,9,7,8,9,13,2,9],[0,30,51,3,22,5,9,6,9,8,8,14,3,8],[0,25,10,7,22,11,6,3,22,7,7,6,9,10,5,9,10,7],[0,25,11,6,22,3,2,10,2,3,21,8,7,7,8,10,4,10,10,7],[0,25,11,6,22,17,28,5,7,6,12,16,12,9],[0,25,11,6,21,17,29,8,4,6,13,15,12,9],[0,27,9,5,22,17,29,9,13,6,4,12,7,16],[0,27,9,5,22,18,29,9,12,6,4,12,5,18],[0,27,36,18,29,9,10,8,6,8,7,18],[0,27,37,17,20,17,11,8,6,7,5,21],[0,29,35,17,16,21,4,16,5,4,8,21],[0,29,35,14,19,42,5,3,8,21],[0,29,4,3,30,2,29,45,9,25],[0,29,4,4,29,2,29,11,2,33,8,25],[0,29,2,7,59,11,2,34,7,10,8,7],[0,28,3,9,60,6,4,16,2,17,6,10,4,11],[0,28,3,9,61,4,6,15,2,48],[0,28,4,6,63,4,6,65],[0,2,11,14,72,6,8,18,4,24,1,16],[0,2,1,9,1,14,72,6,9,14,2,1,7,21,1,16],[0,2,1,9,1,4,2,6,74,6,9,13,12,20,1,5,4,7],[0,2,1,9,1,4,2,6,74,6,9,8,2,3,12,20,1,5,4,7],[0,2,1,9,1,1,5,6,89,7,20,14,5,16],[0,2,1,9,1,1,5,6,89,6,22,13,5,16],[0,2,1,9,1,1,3,8,89,5,23,13,5,16],[0,2,1,9,1,1,3,7,82,3,5,5,27,9,6,15],[0,2,1,9,1,1,2,8,20,2,60,4,24,5,8,6,8,15],[0,2,1,9,1,1,3,7,20,3,57,7,22,6,9,5,6,17],[0,2,11,1,3,4,23,3,57,8,11,3,5,10,7,5,5,18],[0,3,1,10,3,4,22,4,57,8,11,3,5,9,10,2,5,19],[0,3,4,6,29,9,53,8,4,3,4,3,5,9,17,19],[0,3,37,11,53,8,4,3,4,5,3,12,14,19],[0,3,37,11,50,1,2,7,5,3,2,7,7,8,12,21],[0,3,2,5,25,16,50,9,6,3,2,8,6,8,12,21],[0,3,2,5,8,4,4,2,6,28,22,7,4,15,6,15,6,39],[0,3,2,24,4,34,16,8,4,15,6,15,6,39],[0,29,2,36,16,27,6,15,6,39],[0,29,2,36,16,28,5,15,6,39],[0,67,16,28,6,14,8,37],[0,67,16,28,6,14,8,37],[0,67,16,29,9,8,4,43],[0,67,16,30,13,3,4,43],[0,67,20,29,17,43],[0,67,20,30,16,43],[0,59,30,29,6,52],[0,59,30,33,2,52],[0,59,30,33,2,52],[0,59,30,87],[0,63,8,4,1,100],[0,63,8,105],[0,65,6,105],[0,65,6,105],[0,65,6,105],[0,65,6,105],[0,65,6,105],[0,65,6,105],[0,67,2,107],[0,67,2,107],[0,176],[0,176],[0,176]],"depth":[[0,176],[0,176],[0,176],[0,176],[0,176],[0,176],[0,176],[0,75,2,6,0,95],[0,75,2,6,0,95],[0,61,2,2,0,12,2,6,0,95],[0,61,2,2,0,12,2,6,0,95],[0,51,2,2,0,7,2,7,0,8,2,6,0,95],[0,51,2,2,0,7,2,7,0,8,2,6,0,95],[0,51,2,4,0,4,2,22,0,95],[0,51,2,4,0,4,2,22,0,95],[0,51,2,15,1,10,2,7,0,54,2,2,0,37],[0,51,2,14,1,13,2,5,0,54,2,2,0,37],[0,59,2,5,1,16,2,9,0,44,2,8,0,35],[0,59,2,5,1,16,2,9,0,44,2,8,0,35],[0,61,2,4,1,16,2,8,0,40,2,14,0,33],[0,61,2,4,1,16,2,8,0,37,2,20,0,30],[0,61,2,3,1,17,0,45,2,7,0,8,2,5,0,30],[0,61,2,2,1,18,0,45,2,2,1,2,2,3,0,8,2,5,0,30],[0,61,2,2,1,18,0,45,2,2,1,3,0,11,2,5,0,29],[0,61,1,20,0,45,2,3,1,1,2,1,0,12,2,5,0,28],[0,61,1,18,0,46,2,4,0,15,2,4,0,28],[0,61,1,18,0,46,2,4,0,47],[0,61,1,18,0,48,2,2,0,16,2,4,0,27],[0,61,1,19,0,47,2,2,0,16,2,4,0,27],[0,11,2,4,1,4,0,28,1,33,0,5,1,3,2,2,1,7,0,18,2,4,0,8,2,2,0,18,2,2,0,18,2,2,0,7],[0,11,2,3,1,5,0,28,1,37,0,1,1,13,0,6,2,4,0,6,2,5,0,8,2,2,0,18,2,3,0,17,2,2,0,7],[0,11,2,3,1,7,0,24,1,54,0,5,2,5,0,5,2,7,0,6,2,4,0,16,2,3,0,11,2,3,0,4,2,1,0,7],[0,11,2,3,1,7,0,24,1,54,0,5,2,5,0,1,2,2,0,2,2,8,0,5,2,4,0,9,2,4,0,2,2,4,0,11,2,3,0,4,2,1,0,7],[0,11,2,3,1,8,0,15,2,1,1,1,0,4,1,56,0,4,2,30,0,6,2,11,0,7,2,3,0,1,2,5,0,1,2,2,0,7],[0,11,1,1,2,2,1,9,0,9,2,1,1,1,0,3,1,1,2,1,0,4,1,31,2,2,1,3,2,6,1,1,2,2,1,11,0,3,2,31,0,6,2,2,0,1,2,8,0,7,2,12,0,7],[0,13,2,1,1,11,2,8,1,4,2,2,0,4,1,25,2,3,1,3,2,7,1,1,2,7,1,10,0,3,2,29,0,8,2,11,0,7,2,10,0,9],[0,13,2,2,1,11,2,8,1,3,2,2,0,4,1,24,2,22,1,10,0,3,2,28,0,9,2,13,0,5,2,10,0,9],[0,13,2,3,0,2,2,2,1,6,2,11,1,2,0,4,1,23,2,22,1,12,2,31,0,6,2,28,0,11],[0,13,2,2,0,1,2,1,1,1,2,2,1,3,2,13,1,26,2,26,1,12,2,32,0,5,2,18,0,1,2,9,0,11],[0,16,2,4,1,2,2,13,1,5,2,1,1,20,2,30,1,6,2,23,1,1,2,1,0,5,1,1,2,5,0,4,2,6,0,4,2,12,0,1,2,4,0,12],[0,15,2,13,3,3,2,4,1,3,2,3,1,19,2,19,3,1,1,2,2,9,1,6,2,22,0,8,1,1,2,5,0,4,2,6,0,4,2,18,0,11],[0,17,2,6,3,2,1,1,2,1,3,4,0,3,2,1,1,3,2,3,1,19,2,2,1,2,2,14,3,1,1,4,2,8,1,7,2,15,0,15,2,15,0,5,2,18,0,10],[0,17,2,5,1,1,3,9,0,2,2,3,1,1,2,3,1,21,2,16,3,2,1,4,2,7,1,7,2,10,0,1,2,4,0,16,2,14,0,6,2,16,0,11],[0,17,2,2,3,4,2,4,3,5,0,2,2,7,1,22,2,15,3,4,1,3,2,7,1,7,2,3,0,29,2,12,0,6,2,13,0,14],[0,6,1,2,0,9,2,1,3,5,2,5,3,6,2,7,1,22,2,15,3,4,1,3,2,3,1,1,2,3,1,7,2,2,0,30,2,13,0,5,2,5,0,1,2,6,0,15],[0,3,1,5,0,9,2,1,3,5,2,7,3,4,2,7,1,23,2,15,3,4,1,2,2,2,1,2,2,3,1,8,2,1,0,20,1,2,0,18,2,1,0,1,2,1,0,10,2,6,0,16],[0,3,1,4,0,1,1,2,0,2,2,6,3,5,2,7,3,5,2,7,1,22,2,15,3,3,1,3,2,8,1,8,0,13,2,1,1,1,0,4,1,2,2,1,0,18,2,2,0,33],[0,3,1,8,2,7,3,3,2,10,3,5,2,6,1,26,2,11,3,3,1,3,2,8,1,8,0,12,2,2,1,6,2,6,0,49],[0,3,1,7,2,9,3,2,2,10,3,2,0,3,2,6,1,24,2,1,1,1,2,12,3,1,1,4,2,5,1,2,2,2,1,7,0,12,2,2,1,6,2,9,0,46],[0,7,1,2,2,11,3,1,2,10,3,2,0,3,2,6,1,23,2,5,3,4,2,6,3,1,1,5,2,4,1,4,2,6,1,1,0,13,2,1,1,6,2,16,0,39],[0,6,1,2,2,5,0,4,2,14,3,2,0,3,2,6,1,23,2,5,3,5,2,5,3,1,1,5,2,5,1,4,2,7,0,12,1,7,2,16,0,31,2,4,0,4],[0,6,1,2,2,5,0,4,2,16,0,3,2,6,1,22,2,6,3,1,0,8,2,1,3,1,1,2,0,4,2,5,1,3,2,8,0,11,1,2,2,2,1,3,2,3,0,3,2,18,0,18,2,9,0,4],[0,6,1,3,2,4,0,4,2,16,0,4,2,4,1,23,2,6,3,1,0,8,2,4,0,4,2,10,1,2,2,4,0,7,2,4,1,3,2,1,1,3,2,3,0,3,2,1,1,1,2,16,0,1,2,2,0,15,2,9,0,4],[0,6,1,3,2,4,0,4,2,5,0,13,2,7,1,23,2,1,0,15,2,2,0,4,2,10,1,3,2,1,0,8,2,5,1,4,2,2,1,1,2,3,0,7,2,2,0,3,2,13,0,10,2,6,0,1,2,7,0,3],[0,7,1,1,2,6,0,3,2,4,0,14,2,8,1,22,2,1,0,15,2,2,0,4,2,9,1,5,0,8,2,5,1,7,2,3,0,7,2,2,0,8,2,9,0,9,2,6,0,4,2,4,0,3],[0,3,2,18,0,19,2,3,1,22,2,1,0,15,2,2,0,4,2,7,1,7,0,8,2,4,1,9,2,2,0,18,2,2,0,1,2,4,1,1,0,7,2,6,0,6,2,4,0,3],[0,3,2,1,1,2,2,15,0,20,2,2,1,23,2,2,0,12,2,6,0,1,2,7,1,7,0,8,2,1,1,11,0,24,1,7,0,5,2,6,0,6,2,3,0,4],[0,3,2,18,0,21,2,1,1,22,2,5,0,10,1,1,2,13,1,7,0,8,1,12,0,26,1,5,2,7,0,10,2,3,0,4],[0,3,2,18,0,21,2,1,1,22,2,5,0,12,2,12,1,8,0,6,1,13,0,26,1,6,2,6,0,10,2,2,0,5],[0,3,2,11,1,1,2,6,1,2,0,14,2,2,0,3,2,1,1,22,2,4,0,13,2,10,1,11,0,5,1,11,0,8,1,2,0,20,1,5,2,4,0,11,2,2,0,5],[0,3,2,9,1,7,2,2,1,2,0,14,2,2,0,3,1,23,2,4,0,11,2,5,0,4,2,2,1,13,0,4,1,11,0,8,1,2,0,20,1,5,2,4,0,10,2,3,0,5],[0,3,2,9,1,5,0,20,1,2,0,3,1,23,2,3,0,12,2,5,0,4,1,15,0,4,1,10,0,9,1,2,0,10,1,4,0,9,1,6,0,10,2,3,0,5],[0,3,2,10,1,4,0,20,1,2,0,3,1,23,2,1,0,15,2,4,0,4,1,15,0,5,1,9,0,6,1,5,0,10,1,5,0,25,2,2,0,5],[0,3,2,10,3,4,0,20,1,2,0,3,1,22,2,2,0,3,2,2,0,9,2,5,0,4,1,15,0,3,1,11,0,5,1,8,0,8,1,8,0,22,2,2,0,5],[0,3,2,14,0,20,1,27,2,2,0,13,2,6,0,4,1,15,0,3,1,10,0,3,1,12,0,7,1,8,0,21,2,3,0,5],[0,3,2,1,0,4,2,9,0,6,2,2,0,12,1,28,2,1,0,3,2,2,1,2,2,8,0,4,2,2,1,30,0,3,1,13,0,6,1,10,0,18,2,4,0,5],[0,9,2,11,0,3,2,2,0,12,1,30,2,4,1,3,2,7,0,4,2,2,1,30,0,3,1,29,0,18,2,4,0,5],[0,10,2,17,0,11,1,29,2,4,1,3,2,2,1,2,2,3,0,4,2,1,1,63,0,4,1,2,0,12,2,4,0,5],[0,13,2,15,0,10,1,29,2,4,1,3,2,2,1,2,2,4,0,3,1,22,2,4,1,38,0,1,1,5,2,1,0,11,2,4,0,5],[0,14,2,17,0,7,1,29,2,1,0,2,2,1,1,3,2,10,1,22,2,5,1,2,2,6,1,4,2,2,1,31,2,1,0,10,2,2,0,7],[0,15,2,17,0,6,1,29,0,3,2,1,1,3,2,4,1,29,2,4,1,1,2,7,1,4,2,3,1,31,0,10,2,2,0,7],[0,23,2,12,0,3,2,1,1,27,0,4,2,1,1,2,2,2,0,9,1,23,2,4,1,1,2,7,1,5,2,1,1,28,2,1,1,3,0,10,2,2,0,7],[0,23,2,17,1,26,0,5,2,4,0,9,1,20,2,18,1,15,2,6,1,9,2,2,1,6,0,7,2,3,0,6],[0,25,2,18,1,23,0,7,2,1,1,1,0,9,1,19,2,20,1,1,2,2,1,1,2,3,1,5,2,13,1,3,2,4,1,4,2,1,0,5,2,5,0,6],[0,25,2,18,1,24,2,1,0,4,2,2,1,1,0,7,1,21,2,18,1,3,2,32,1,4,0,5,2,4,0,7],[0,25,2,19,1,22,2,2,0,4,2,2,1,3,0,4,1,22,2,18,1,1,2,1,1,1,2,36,0,7,2,2,0,7],[0,25,2,20,1,20,2,2,0,1,2,6,1,3,0,1,1,24,2,19,1,1,2,37,0,7,2,3,0,7],[0,29,2,16,1,19,2,10,1,28,2,2,1,2,2,14,1,2,2,36,0,8,2,3,0,7],[0,29,2,2,0,4,2,8,1,1,2,2,1,15,2,13,1,28,2,19,1,1,2,33,0,12,2,2,0,7],[0,36,2,10,1,14,2,15,1,1,2,1,1,1,2,1,1,1,2,11,1,11,2,53,0,12,2,2,0,7],[0,37,2,10,1,14,2,1,1,2,2,28,1,10,2,53,0,12,2,2,0,7],[0,37,2,10,1,14,2,31,1,10,2,1,0,4,2,48,0,12,2,2,0,7],[0,37,2,10,1,14,2,29,1,12,2,1,0,4,2,48,0,12,2,2,0,7],[0,15,2,8,0,18,2,2,1,17,2,30,1,13,0,10,2,5,0,2,2,13,3,1,2,20,0,13,2,2,0,7],[0,15,2,8,0,18,1,20,2,29,1,13,0,9,2,6,0,3,2,5,0,3,2,3,3,3,2,10,0,22,2,2,0,7],[0,11,2,16,0,14,1,23,2,26,1,13,0,9,2,6,0,4,2,4,0,41,2,2,0,7],[0,11,2,16,0,14,2,2,1,22,2,24,1,15,0,4,2,2,0,3,2,4,0,50,2,2,0,7],[0,9,2,6,1,1,0,3,1,2,2,10,0,11,2,1,1,24,2,21,1,16,0,3,1,1,2,9,0,50,2,2,0,7],[0,8,2,7,0,4,1,1,2,11,0,14,1,20,0,3,2,3,0,6,2,3,0,2,2,4,1,17,0,3,1,3,0,1,2,7,0,49,2,3,0,7],[0,7,2,7,0,5,2,10,0,16,1,20,0,3,1,1,2,1,0,7,2,3,0,2,2,4,1,21,2,10,0,48,2,6,0,5],[0,4,2,2,0,1,2,7,0,5,2,10,0,13,1,2,0,1,1,20,0,12,2,1,1,2,0,2,2,6,1,18,2,11,0,48,1,3,2,3,0,5],[0,4,2,2,0,1,2,7,0,5,2,7,0,16,1,23,0,12,2,12,1,18,2,10,0,6,2,2,0,32,2,4,0,8,2,2,0,5],[0,7,1,1,2,5,0,6,2,6,0,17,1,25,2,1,0,8,2,13,1,18,2,8,0,8,2,2,0,32,2,2,1,2,0,8,2,3,0,4],[0,7,1,2,2,4,0,6,2,6,0,17,1,24,2,2,0,8,2,14,1,17,0,4,2,4,0,6,2,4,0,20,2,4,0,4,2,6,1,1,2,1,0,8,2,3,0,4],[0,6,2,1,1,2,2,4,0,5,2,10,0,15,1,22,2,6,0,3,2,16,1,17,0,4,2,4,0,6,2,4,0,20,2,4,0,4,2,8,0,8,2,2,0,5],[0,6,2,5,0,7,2,11,0,13,1,22,2,2,1,2,2,22,1,15,0,6,2,4,1,1,0,7,2,2,0,10,2,26,0,6,1,1,2,3,0,5],[0,9,2,3,0,6,2,11,0,13,1,21,2,27,1,16,0,5,2,3,1,2,0,7,2,2,0,10,2,26,0,6,1,1,2,3,0,5],[0,9,2,3,0,5,1,4,2,10,0,11,2,1,1,19,2,16,1,3,2,9,1,16,0,5,2,3,1,2,0,21,2,22,0,8,1,2,0,7],[0,9,2,3,0,5,1,6,2,8,0,10,2,2,1,17,2,18,1,4,2,9,1,14,0,6,2,4,0,22,2,23,0,7,1,2,0,7],[0,9,2,8,1,6,0,1,2,2,0,3,2,2,0,6,2,6,1,16,2,11,0,2,2,7,1,2,2,10,1,14,0,4,2,6,0,23,2,22,0,7,1,1,2,1,0,7],[0,9,2,8,1,6,0,6,2,2,0,6,2,6,1,16,2,10,0,6,2,16,1,14,0,4,2,8,0,22,2,5,3,1,2,15,0,7,2,3,0,6],[0,10,2,8,1,5,0,6,2,2,0,6,2,6,1,16,2,9,0,9,2,5,0,3,2,5,1,15,0,4,2,8,0,22,2,7,3,1,2,14,0,6,2,3,0,6],[0,12,2,7,1,5,0,5,2,2,0,6,2,6,1,16,2,9,0,9,2,1,1,3,0,4,2,5,1,7,2,2,1,6,0,3,2,9,0,9,2,2,0,11,2,6,3,3,2,14,0,5,2,3,0,6],[0,12,2,7,1,5,2,7,0,12,2,1,1,14,2,13,0,6,3,1,1,3,0,4,2,5,1,2,2,1,1,4,2,3,1,6,2,8,0,12,2,5,0,8,2,6,0,4,2,13,0,5,2,4,0,5],[0,12,2,9,1,3,2,7,0,12,2,1,1,14,2,13,0,5,3,1,1,5,0,3,2,10,1,2,2,4,1,5,2,1,1,1,2,7,0,11,2,6,0,7,2,6,0,4,2,11,0,7,2,4,0,5],[0,12,2,19,0,13,2,1,1,13,2,8,0,10,1,6,0,5,2,10,1,1,2,3,1,5,2,7,0,12,2,1,1,3,2,3,1,1,0,6,2,6,0,8,2,7,0,7,2,4,0,5],[0,8,2,26,0,10,2,3,1,11,2,7,0,12,1,5,0,5,2,11,1,1,2,3,1,3,2,8,0,12,1,5,2,2,1,1,0,6,1,1,2,5,0,8,2,7,0,7,2,5,0,4],[0,7,2,27,0,10,2,3,1,12,2,4,0,14,1,5,0,5,2,12,1,1,2,1,1,4,2,4,0,16,1,6,2,2,0,6,1,1,2,3,0,11,2,7,0,6,2,5,0,4],[0,4,2,3,1,4,2,23,0,10,2,2,1,11,2,1,1,4,2,1,0,14,1,5,0,5,2,11,1,8,2,3,0,16,1,7,2,2,0,5,1,1,2,3,0,12,2,6,0,6,2,5,0,4],[0,4,3,3,1,3,0,5,2,6,0,1,2,15,0,7,2,2,1,10,2,3,1,1,0,17,1,4,2,2,0,4,2,11,1,8,2,2,0,9,2,3,1,14,0,21,2,17,0,4],[0,6,1,4,0,5,2,6,0,6,2,10,0,7,2,3,1,9,2,3,1,1,0,17,1,4,2,2,0,4,2,11,1,8,2,1,0,10,1,17,0,21,2,17,0,4],[0,6,1,4,0,5,2,6,0,9,2,9,0,5,2,3,1,9,2,3,1,1,0,11,1,9,2,3,0,4,2,10,1,7,2,1,0,12,3,1,1,16,0,25,2,13,0,4],[0,8,1,2,0,5,2,6,0,10,2,9,0,5,2,1,1,10,2,4,0,11,1,8,2,4,0,4,2,9,1,9,0,12,1,16,2,3,0,23,2,7,0,10],[0,8,1,2,0,5,2,4,0,14,2,7,0,7,1,10,2,3,0,9,1,9,2,3,0,6,2,6,1,12,0,10,1,17,2,4,0,25,2,3,1,2,0,10],[0,15,2,4,0,14,2,7,0,7,1,10,2,2,0,1,2,2,0,2,2,1,1,3,0,1,1,9,2,3,0,6,2,3,1,1,2,1,1,13,0,10,1,16,2,2,1,1,2,1,0,11,2,4,0,10,1,1,2,3,0,12],[0,15,3,1,2,3,0,14,2,8,0,6,1,10,2,5,0,2,1,14,2,3,0,6,2,3,1,16,2,2,1,2,2,6,1,15,2,1,1,3,0,10,2,6,0,9,1,1,2,3,0,12],[0,15,3,2,2,2,0,14,2,8,0,6,1,10,2,5,0,3,1,12,2,4,0,6,2,3,1,16,2,12,3,1,1,11,2,2,1,3,0,9,2,7,0,5,1,4,2,3,0,13],[0,13,3,3,2,5,0,14,2,6,0,6,1,10,2,8,1,13,2,3,0,4,2,5,1,17,2,11,3,1,1,10,2,4,1,1,2,1,0,6,2,10,0,5,1,1,2,6,0,13],[0,13,3,3,2,5,0,14,2,6,0,6,1,10,2,9,1,15,0,4,2,5,1,17,2,13,1,9,2,6,0,6,2,13,0,2,2,7,0,13],[0,11,3,6,0,18,2,6,0,6,1,10,2,8,3,1,1,8,2,3,0,1,1,2,0,5,2,5,1,15,0,6,2,12,1,5,2,9,0,4,2,22,0,13],[0,11,3,6,0,13,2,2,0,3,2,6,0,6,1,10,2,8,3,1,1,6,2,6,0,7,2,5,1,15,0,6,2,13,1,3,2,10,0,4,2,22,0,13],[0,11,3,1,0,18,2,2,0,1,2,8,0,6,1,10,2,4,0,4,3,2,1,2,3,4,2,5,0,7,2,5,1,15,0,10,2,9,1,3,2,9,0,9,2,16,0,15],[0,7,2,1,1,2,3,7,2,1,0,14,2,9,0,5,1,15,0,4,3,8,2,17,1,15,0,10,2,20,0,10,2,16,0,15],[0,7,2,1,0,9,2,1,0,14,1,1,2,12,1,16,0,4,2,1,3,7,2,17,1,15,0,12,2,7,0,4,2,7,0,10,2,14,0,17],[0,7,1,1,0,9,2,1,0,14,1,1,2,12,1,16,0,4,2,1,3,1,1,3,3,2,2,18,1,15,0,11,2,7,0,6,2,6,0,10,2,14,0,17],[0,7,1,1,0,9,2,1,0,14,2,13,1,16,0,4,2,1,3,1,0,7,2,3,3,1,2,12,1,14,0,12,2,6,0,7,2,10,0,6,2,4,0,27],[0,7,1,1,0,9,2,1,0,14,2,13,1,19,0,1,1,2,0,10,2,13,1,13,0,26,2,6,1,2,2,2,0,5,2,5,0,27],[0,7,1,1,0,9,2,1,0,13,2,10,0,1,2,3,1,22,0,11,2,12,1,13,0,26,2,4,0,4,3,2,0,5,2,5,0,27],[0,7,1,1,0,9,2,1,0,13,2,10,0,5,1,21,0,12,2,11,1,14,0,25,2,3,3,1,0,4,3,2,0,6,2,4,0,27],[0,7,1,1,0,9,2,1,0,1,2,2,0,10,2,7,0,8,1,19,3,2,0,12,2,11,1,14,0,23,2,6,0,13,2,3,0,27],[0,7,1,1,0,9,2,1,0,1,2,2,0,10,2,6,0,9,1,19,3,2,0,12,3,3,2,8,1,17,2,1,0,19,2,6,0,14,2,2,0,27],[0,7,1,1,0,9,3,1,0,1,2,2,0,8,2,4,0,1,2,2,0,9,1,20,0,14,3,3,2,8,1,17,2,1,0,19,2,4,0,16,2,2,0,10,2,6,0,11],[0,7,1,7,3,4,0,1,2,2,0,7,2,5,0,12,1,19,3,1,0,14,3,3,2,8,1,17,0,20,2,4,0,16,2,5,0,7,2,6,0,11],[0,19,2,2,0,7,2,5,0,10,2,2,1,19,3,1,0,14,3,3,2,8,1,16,0,19,2,6,0,16,2,5,0,7,2,4,0,13],[0,13,1,3,3,2,2,3,0,8,2,4,0,10,2,2,1,19,2,1,0,14,3,2,2,9,1,15,0,15,2,2,0,3,2,6,0,15,2,5,0,8,2,4,0,13],[0,13,1,5,2,3,0,8,2,4,0,8,2,5,1,17,2,2,0,14,1,1,2,10,1,15,0,8,2,2,0,5,2,2,0,1,2,12,0,8,2,8,0,8,2,4,0,13],[0,12,1,6,3,1,2,2,0,8,2,5,0,7,2,5,1,17,2,2,0,14,2,11,1,15,0,5,2,5,0,7,2,12,1,1,0,8,2,8,0,8,2,4,0,13],[0,5,1,2,0,4,1,7,3,1,2,4,0,6,2,5,0,7,2,6,1,17,2,2,0,13,2,11,1,18,2,7,0,7,2,6,0,1,2,4,1,3,0,1,1,2,2,4,1,1,2,6,0,5,2,10,0,11],[0,5,1,2,0,4,3,1,1,6,3,1,2,3,3,1,0,6,2,5,0,7,2,8,1,16,2,3,0,11,2,11,1,7,2,2,1,10,2,7,0,7,2,2,0,3,2,5,1,6,2,3,1,3,2,5,0,5,2,2,0,2,2,6,0,11],[0,5,1,2,0,4,3,2,0,6,2,3,3,1,0,6,2,5,0,11,2,5,1,15,2,3,1,1,0,6,2,4,1,6,2,4,1,7,2,3,1,11,2,6,0,12,2,8,1,4,2,3,1,2,2,5,0,3,2,1,0,2,2,1,0,2,2,8,0,9],[0,5,1,2,0,3,3,3,0,6,1,1,2,3,0,6,2,5,0,11,2,5,1,16,2,1,1,2,0,6,2,2,1,19,2,3,1,11,2,6,0,10,2,10,1,5,2,13,0,2,2,11,0,9],[0,10,3,3,0,6,1,2,2,2,0,4,2,7,0,11,2,4,1,18,2,2,0,4,2,3,1,20,2,4,1,10,2,7,0,9,2,8,1,7,2,26,0,9],[0,10,3,2,2,1,0,6,1,2,3,1,2,1,0,4,2,6,0,12,2,4,1,18,2,3,0,3,2,2,1,23,2,3,1,9,2,6,0,10,2,8,1,8,2,22,0,1,2,2,0,9],[0,9,3,2,2,2,0,6,1,3,2,9,0,12,2,5,1,18,2,4,0,3,2,1,1,25,2,3,1,4,2,1,0,3,2,6,0,10,2,14,1,3,2,8,1,1,2,9,0,4,2,2,0,9],[0,9,3,1,2,3,0,6,1,3,2,9,0,12,2,5,1,17,2,7,0,1,2,1,1,26,2,2,1,5,0,3,2,4,1,2,2,6,0,2,1,2,2,16,1,1,2,18,0,4,2,2,0,9],[0,11,2,6,1,5,2,7,0,14,2,4,1,18,2,9,1,32,0,4,2,12,0,2,2,12,0,5,2,1,0,2,2,8,1,2,0,1,2,6,0,15],[0,11,2,6,1,3,3,2,2,7,0,14,2,5,1,16,2,10,1,12,2,3,1,16,0,5,2,12,0,5,2,9,0,5,2,1,0,2,2,8,1,4,2,5,0,15],[0,11,2,5,1,1,0,4,3,2,2,4,0,18,2,3,1,14,2,6,0,3,2,4,1,8,2,6,1,15,0,6,2,12,0,5,2,9,0,5,2,9,1,7,2,6,0,13],[0,11,2,6,0,4,2,6,0,18,2,3,1,13,2,6,0,4,2,5,1,5,2,9,1,13,0,7,2,7,0,10,2,9,0,5,2,7,1,2,0,3,2,1,1,4,2,5,0,13],[0,45,2,3,1,12,2,7,0,6,2,4,1,3,2,11,1,12,0,7,2,4,0,2,2,1,0,15,2,6,0,2,2,8,1,2,0,3,2,1,1,5,2,4,3,2,0,11],[0,45,2,1,1,15,2,6,0,5,2,7,1,1,2,11,1,12,0,7,2,4,0,2,2,1,0,16,2,16,1,1,0,3,2,1,1,6,2,3,3,2,0,11],[0,41,2,4,1,18,2,2,0,7,2,3,0,6,2,10,1,12,2,12,0,21,2,15,0,4,1,5,2,3,3,2,0,11],[0,41,2,4,1,18,2,2,0,8,2,2,0,6,2,8,1,16,2,10,0,22,2,5,0,2,2,7,0,4,1,2,3,3,2,2,0,1,2,2,0,11],[0,31,2,2,0,8,2,3,1,20,2,1,0,8,2,2,0,6,2,7,1,18,2,1,0,2,2,4,0,25,2,4,0,2,2,7,0,4,1,2,2,10,0,9],[0,31,2,2,0,8,2,2,1,21,2,2,0,2,1,1,2,1,0,2,2,3,0,6,2,5,1,18,2,3,0,2,2,4,0,25,2,3,0,3,2,7,0,4,2,2,0,3,2,7,0,9],[0,31,2,2,0,8,2,1,1,22,2,3,1,2,2,8,0,4,2,6,1,17,0,7,2,2,0,10,2,4,0,10,2,4,0,3,2,2,0,11,2,1,0,2,2,7,0,9],[0,30,2,3,0,7,2,1,1,24,2,2,1,2,2,8,0,4,2,6,1,16,0,8,2,2,0,10,2,4,0,10,2,4,0,16,2,10,0,9],[0,30,2,4,1,1,0,4,2,1,1,24,2,13,0,4,2,6,1,16,0,8,2,2,0,10,2,4,0,12,2,2,0,18,2,2,0,4,2,2,0,9],[0,30,2,4,1,1,2,3,1,2,2,4,1,19,2,24,1,16,0,8,2,2,0,10,3,2,2,2,0,12,2,2,0,18,2,2,0,4,2,2,0,9],[0,30,2,2,0,2,2,1,1,5,2,5,1,17,2,9,0,4,2,13,1,17,0,6,2,4,0,6,1,2,0,16,2,2,0,35],[0,34,1,7,2,4,1,14,2,12,0,4,2,12,1,18,0,6,2,4,0,6,1,2,0,15,2,4,0,6,2,2,0,26],[0,34,1,7,2,1,1,1,2,4,1,11,2,9,0,8,2,2,0,1,2,9,1,18,0,6,2,4,0,23,2,5,0,4,2,3,0,26],[0,35,1,6,2,6,1,11,2,9,0,7,2,3,0,6,2,4,1,1,2,1,1,16,0,6,2,4,0,21,2,7,0,4,2,2,0,27],[0,33,2,1,1,7,2,6,1,11,2,2,1,2,2,4,0,8,2,3,0,8,2,5,1,16,2,1,0,4,2,6,0,19,2,7,0,16,2,2,0,15],[0,33,2,1,1,7,2,3,1,1,2,1,1,12,2,2,1,2,2,5,0,5,2,2,0,1,2,2,0,8,2,5,1,16,2,1,0,4,2,7,0,18,2,7,0,16,2,2,0,15],[0,33,2,2,1,7,2,1,1,15,2,8,0,1,2,4,1,6,2,2,0,6,2,5,1,16,2,15,0,15,2,7,0,16,2,2,0,15],[0,33,2,2,1,24,2,4,0,3,2,3,1,10,0,6,2,5,1,16,2,14,0,12,2,2,0,4,2,5,0,16,2,2,0,15],[0,33,2,2,1,24,2,4,0,3,2,2,1,12,2,1,0,4,2,5,1,16,2,5,0,18,2,5,0,4,2,2,0,1,2,4,0,10,2,10,0,11],[0,33,2,2,1,25,2,3,0,4,2,1,1,13,2,1,0,3,2,5,1,16,2,5,0,18,2,5,0,7,2,4,0,9,2,11,0,11],[0,31,2,5,1,24,2,3,0,4,2,1,1,13,2,8,1,16,2,5,1,1,0,18,2,6,0,8,2,2,0,9,2,13,0,9],[0,31,2,6,1,24,2,2,0,4,2,1,1,13,2,8,1,15,2,6,1,1,0,18,2,6,0,8,2,2,0,5,2,17,0,9],[0,31,2,6,1,23,2,2,1,1,0,4,2,1,1,13,0,1,2,6,1,15,2,7,1,2,2,1,0,16,2,6,0,8,2,2,0,4,2,7,0,9,2,2,0,9],[0,31,1,1,2,6,1,22,2,2,1,2,2,3,1,14,0,3,2,4,1,14,2,11,0,15,2,7,0,8,2,2,0,4,2,6,0,10,2,2,0,9],[0,31,1,1,2,6,1,22,2,2,1,2,2,3,1,14,0,3,2,3,1,15,2,8,0,1,2,8,0,9,2,7,0,8,2,9,0,13,2,2,0,9],[0,30,1,2,2,8,1,23,2,5,1,13,0,3,2,3,1,15,2,4,0,5,2,9,0,6,2,9,0,8,2,8,0,14,2,3,0,8],[0,25,2,2,1,4,2,4,0,7,1,20,2,2,0,11,1,6,0,3,2,3,1,16,2,3,0,7,2,7,0,6,2,8,1,1,0,10,2,5,0,9,2,10,0,7],[0,25,2,1,1,5,2,5,0,6,1,20,2,2,0,3,2,1,3,1,0,10,1,1,2,1,0,3,2,3,1,18,0,8,2,7,0,7,2,8,0,10,2,4,0,10,2,10,0,7],[0,25,1,6,2,5,0,6,1,19,2,3,0,17,2,5,1,10,2,1,1,8,2,4,0,5,2,7,0,6,2,12,0,16,2,12,0,9],[0,25,1,6,2,5,0,6,1,18,2,3,0,17,2,6,1,9,2,3,1,5,2,5,1,1,0,8,2,4,0,6,2,13,0,15,2,12,0,9],[0,27,1,5,2,4,0,5,2,1,1,18,2,3,0,17,2,6,1,8,2,5,1,4,2,6,0,9,2,13,0,6,2,4,0,12,2,7,0,16],[0,27,1,6,2,3,0,5,2,2,1,16,2,4,0,18,2,5,1,7,2,7,1,4,2,6,0,9,2,12,0,6,2,4,0,12,2,5,0,18],[0,27,1,6,2,10,1,16,2,4,0,18,2,4,1,8,2,9,1,2,2,3,1,3,0,9,2,10,0,8,2,6,0,8,2,7,0,18],[0,27,1,11,2,5,1,17,2,4,0,17,2,4,1,8,2,8,0,17,2,6,1,1,2,4,0,8,2,6,0,7,2,5,0,21],[0,29,1,10,2,3,1,18,2,4,0,17,2,4,1,11,2,1,0,21,2,4,0,16,2,5,0,4,2,8,0,21],[0,29,1,32,2,3,0,14,2,7,1,9,2,3,0,42,2,5,0,3,2,8,0,21],[0,29,1,4,0,3,1,25,2,5,0,2,2,17,1,8,2,4,0,45,2,9,0,25],[0,29,1,4,0,4,1,25,2,4,0,2,2,17,1,8,2,4,0,11,2,2,0,33,2,8,0,25],[0,29,1,2,0,7,1,25,2,3,1,2,2,9,1,1,2,7,1,8,2,4,0,11,2,2,0,34,2,7,0,10,2,8,0,7],[0,28,1,3,0,9,1,24,2,10,1,6,2,5,1,9,2,6,0,6,2,4,0,16,2,2,0,17,2,6,0,10,2,4,0,11],[0,28,1,1,3,2,0,9,2,1,1,23,2,9,1,7,2,5,1,10,2,6,0,4,2,6,0,15,2,2,0,48],[0,28,3,3,2,1,0,6,2,1,1,1,2,1,1,24,2,8,1,7,2,4,1,12,2,5,0,4,2,6,0,65],[0,2,2,11,0,14,1,1,2,10,1,2,2,2,1,27,2,4,1,2,2,4,1,1,2,4,1,13,2,2,0,6,2,8,0,18,2,4,0,24,2,1,0,16],[0,2,2,1,0,9,2,1,0,14,2,15,1,33,2,3,1,20,2,1,0,6,2,8,1,1,0,14,2,2,0,1,2,7,0,21,2,1,0,16],[0,2,2,1,0,9,2,1,0,4,2,2,0,6,2,17,1,56,2,1,0,6,2,6,1,3,0,13,2,12,0,20,2,1,0,5,1,3,3,1,0,7],[0,2,2,1,0,9,2,1,0,4,2,2,0,6,2,16,1,57,2,1,0,6,2,6,1,2,2,1,0,8,2,2,0,3,2,12,0,20,2,1,0,5,1,4,0,7],[0,2,2,1,0,9,2,1,0,1,2,5,0,6,2,12,1,60,2,17,0,7,2,20,0,14,2,5,0,16],[0,2,2,1,0,9,3,1,0,1,2,5,0,6,2,9,1,63,2,17,0,6,2,22,0,13,2,5,0,16],[0,2,2,1,0,9,3,1,0,1,2,3,0,8,2,9,1,64,2,16,0,5,2,16,1,1,2,6,0,13,2,5,0,16],[0,2,2,1,0,9,3,1,0,1,2,3,0,7,2,10,1,18,2,5,1,42,2,2,1,1,2,4,0,3,2,5,0,5,2,16,1,1,2,10,0,9,2,6,0,15],[0,2,2,1,0,9,2,1,0,1,2,2,0,8,2,9,1,11,0,2,1,6,2,5,1,46,2,3,0,4,2,6,1,2,2,10,1,2,2,4,0,5,2,4,1,4,0,6,2,8,0,15],[0,2,2,1,0,9,2,1,0,1,2,3,0,7,2,9,1,11,0,3,1,5,2,5,1,2,2,4,1,41,0,7,2,3,1,4,2,15,0,6,2,5,1,4,0,5,1,1,2,5,0,17],[0,2,2,1,3,2,1,7,2,1,0,1,2,3,0,4,2,11,1,12,0,3,1,1,2,2,1,2,2,5,1,2,2,5,1,40,0,8,2,2,1,3,2,6,0,3,2,5,0,10,2,7,0,5,1,1,2,4,0,18],[0,3,3,1,0,10,2,3,0,4,2,2,1,2,2,6,1,10,2,1,1,1,0,4,1,1,2,2,1,2,2,12,1,40,0,8,2,2,1,1,2,8,0,3,2,5,0,9,2,10,0,2,1,1,2,4,0,19],[0,3,3,2,1,2,0,6,2,10,1,3,2,5,1,8,2,3,0,9,2,15,1,38,0,8,2,4,0,3,2,4,0,3,2,5,0,9,2,11,1,3,2,3,0,19],[0,3,3,3,1,2,2,15,1,4,2,4,1,7,2,2,0,11,2,17,1,36,0,8,2,4,0,3,1,1,2,3,0,5,2,3,0,12,2,8,1,4,2,2,0,19],[0,3,2,20,1,6,2,3,1,5,2,3,0,11,2,18,1,32,0,1,1,2,0,7,2,5,0,3,1,2,0,7,2,7,0,8,2,8,1,4,0,21],[0,3,2,2,0,5,2,13,1,7,2,1,1,4,0,16,2,19,1,29,2,2,0,9,2,6,0,3,1,2,0,8,2,6,0,8,2,8,1,4,0,21],[0,3,2,2,0,5,2,8,0,4,2,1,1,3,0,2,1,6,0,28,2,16,1,6,0,7,1,4,0,15,2,6,0,15,2,6,0,39],[0,3,2,2,0,24,1,1,2,3,0,34,2,14,1,2,0,8,1,4,0,15,2,6,0,15,2,6,0,39],[0,29,2,2,0,36,2,15,1,1,0,27,2,6,0,15,2,6,0,39],[0,29,2,2,0,36,2,16,0,28,2,5,0,15,2,6,0,39],[0,67,2,16,0,28,2,6,0,14,2,8,0,37],[0,67,2,16,0,28,2,6,0,14,2,8,0,37],[0,67,2,16,0,29,2,9,0,8,2,4,0,43],[0,67,2,16,0,30,2,13,0,3,2,4,0,43],[0,67,2,20,0,29,2,17,0,43],[0,67,2,20,0,30,2,16,0,43],[0,59,3,1,2,29,0,29,2,6,0,52],[0,59,3,1,2,29,0,33,2,2,0,52],[0,59,3,1,2,29,0,33,2,1,1,1,0,52],[0,59,2,30,0,87],[0,63,2,8,0,4,2,1,0,100],[0,63,2,8,0,105],[0,65,2,6,0,105],[0,65,2,6,0,105],[0,65,2,6,0,105],[0,65,2,6,0,105],[0,65,2,6,0,105],[0,65,2,1,1,2,2,3,0,105],[0,67,3,2,0,107],[0,67,3,2,0,107],[0,176],[0,176],[0,176]]} diff --git a/packages/client/src/render/land.ts b/packages/client/src/render/land.ts index 36d8ad4..94ef1d4 100644 --- a/packages/client/src/render/land.ts +++ b/packages/client/src/render/land.ts @@ -54,13 +54,13 @@ import { COAST_ROCK, COAST_SAND, SHADOW, mix, scale, shade } from './theme.js'; // --------------------------------------------------------------------------- /** - * Base land color — the original's lush grass green (owner's screenshots of - * real play show green islands with rock cliffs, not the olive-slate we had). - * Kept darker than the shoal band so water still reads as the playfield. + * Base land color — the original's grass green, pushed YELLOW-green so it + * separates by HUE from the cyan water ramp (theme.WATER_RAMP). With flat + * fills and no texture, hue is the only thing telling shore from shoal. * The lit/shade variants come from theme.shade so the land obeys the same * top-left key light as every structure. */ -export const LAND_BASE = 0x2f5730; +export const LAND_BASE = 0x4d6b33; /** * Width (world units) of the sand/rock coast band drawn along the waterline. diff --git a/packages/client/src/render/theme.ts b/packages/client/src/render/theme.ts index cc0d8ca..7ccf70a 100644 --- a/packages/client/src/render/theme.ts +++ b/packages/client/src/render/theme.ts @@ -50,19 +50,23 @@ export const GOLD = 0xf4c95c; * renderer interpolates along this by a per-pixel/per-band "depth" value so * the sea reads as layered rather than a single flat fill. * - * Retuned 2026-07-31 against the owner's gameplay screenshots of the ORIGINAL: - * the real map is HIGH CONTRAST — near-black navy in the deep channels against - * bright teal-green shoals ringing every island — not the uniform mid-blue we - * had. That contrast is what makes the lanes legible at a glance, and it only - * became worth doing once the true per-cell seabed shipped (WaterMask.depth). - * Hulls still out-saturate the sea: the ramp stays desaturated, it just spans - * a much wider value range. + * Retuned against the owner's gameplay screenshots of the ORIGINAL: high + * contrast, near-black navy in the deep channels up to a bright shoal at the + * coast. That range is what makes the lanes legible, and it only became worth + * doing once the true per-cell seabed shipped (WaterMask.depth). + * + * HUE IS LOAD-BEARING: every stop is BLUE-DOMINANT (cyan, never green). A + * first attempt used a teal-GREEN shoal to match the screenshots' warmth and + * it collided with the green land — shoals read as coastline and the map + * became unreadable (owner: "almost seems worse"). Without texture to + * separate them, hue is the only cue: water cyan, land green. Do not warm the + * shoal toward green again. */ export const WATER_RAMP: readonly number[] = [ - 0x3f8f7d, // shallow / near coast — the original's bright teal-green shoal - 0x24606a, // mid - 0x102a44, // deep open sea — the original reads near-black navy here - 0x06121f, // abyss / map edge + 0x2b8ca6, // shallow / near coast — CYAN, blue-dominant on purpose + 0x1b5f7d, // mid + 0x0e2b45, // deep open sea — near-black navy + 0x061520, // abyss / map edge ]; /** Foam / wave-crest highlight stroked on the lighter water bands. */ diff --git a/packages/core/test/terrain-integration.test.ts b/packages/core/test/terrain-integration.test.ts index 1e47661..f7e9ffe 100644 --- a/packages/core/test/terrain-integration.test.ts +++ b/packages/core/test/terrain-integration.test.ts @@ -78,7 +78,7 @@ describe('terrain integration (real water mask)', () => { expect(ruleset.map.waterMask.cells.length).toBeGreaterThan(0); // The mask is SAILABILITY from the map's own PATHING MAP (war3map.wpm bit // 0x40 = no-water — the engine's enforced truth; see terrain.py), cropped - // to the 162x226 PLAYABLE grid (64u cells — 2x the tilepoint spacing; + // to the 176x234 PLAYABLE grid (64u cells — 2x the tilepoint spacing; // lane-topology equivalence vs the raw 32u wpm is gate G6) (the unplayable border removed; // the WEST bound extended 3 cells west of the camera bounds so the Goblin // Potion Dealer shop sits off the grid edge — see docs/TERRAIN.md @@ -92,12 +92,13 @@ describe('terrain integration (real water mask)', () => { // real map separates. const water = ruleset.map.waterMask.cells.reduce((n, c) => n + c, 0); const total = ruleset.map.waterMask.cells.length; - expect(total).toBe(162 * 226); // 64u cells (full-res lane deduction) - // ~0.513: the wpm sailable fraction at 64u cells with LAND-BIASED ties - // (straddling walls are kept, conservatively thickening land). Same band - // as the extractor's fail-loud gate [0.50, 0.62]. - expect(water / total).toBeGreaterThan(0.5); - expect(water / total).toBeLessThan(0.62); + expect(total).toBe(176 * 234); // 64u cells over the FULL playable extent + // ~0.463 over the FULL playable extent. The absolute value is a function + // of how much land-heavy border the crop includes, so it is NOT the + // fidelity signal — the extractor gates on DRIFT from the raw wpm over the + // same rect instead. Kept here only as a broad sanity band. + expect(water / total).toBeGreaterThan(0.40); + expect(water / total).toBeLessThan(0.60); // Nav fields are populated (a real flood from each base goal). expect(ruleset.map.navByTeam.south.dist.length).toBe(total); expect(ruleset.map.navByTeam.north.dist.length).toBe(total); diff --git a/tools/extractor/terrain.py b/tools/extractor/terrain.py index e2334ba..374f276 100644 --- a/tools/extractor/terrain.py +++ b/tools/extractor/terrain.py @@ -150,17 +150,57 @@ # and the shop sits ON the island LAND CORE (the west moat side at col 0 is sealed # by the off-grid boundary, exactly like a land wall). The new west columns get # their water from the SAME minimap trace. -WEST_EXTEND_CELLS = 3 # K: whole cells the playable west bound is moved westward. -_PLAYABLE_CAMERA_MIN_X = -4992.0 # the prior west bound (war3map.w3i camera bounds). - -# Playable rectangle = war3map.w3i camera bounds, with the WEST bound extended by -# WEST_EXTEND_CELLS cells (see above). minY/maxX/maxY unchanged. -PLAYABLE = { - "minX": _PLAYABLE_CAMERA_MIN_X - WEST_EXTEND_CELLS * TILE_SPACING, - "minY": -7424.0, - "maxX": 4864.0, - "maxY": 6912.0, -} +# PLAYABLE RECTANGLE — derived from the MAP DATA, not the camera. +# +# It used to be the war3map.w3i CAMERA bounds (plus a 3-cell west fudge added so +# one shop stopped falling off the grid). That fudge was the tell: the camera +# rect is where the VIEW may scroll, and WC3 deliberately keeps it inside the +# terrain, so cropping to it silently deletes real playable map. Measured, the +# camera crop was short on ALL FOUR sides — worst 448u of navigable sea off the +# EAST lane — and it cut the Flux Repair System (-1344,-7552) off the map +# entirely (owner 2026-07-31: "the map needs to be right first, and it is not"). +# +# The rect is now computed to cover every SAILABLE wpm cell plus every placed +# STRUCTURE, padded to whole tilepoints. Self-correcting: it can never clip +# playable water or a building again, and no per-shop fudge is needed. +PLAYABLE_PAD_CELLS = 1 # whole 128u tilepoints of margin beyond the content + + +def compute_playable(wpm: dict, layout: dict, map_min_x: float, map_min_y: float) -> dict: + """Smallest tilepoint-aligned rect covering all sailable water + structures.""" + ww, wh, flags = wpm["width"], wpm["height"], wpm["flags"] + xs: list[float] = [] + ys: list[float] = [] + for sy in range(wh): + row = sy * ww + for sx in range(ww): + if not (flags[row + sx] & 0x40): + xs.append(map_min_x + sx * 32) + ys.append(map_min_y + sy * 32) + for st in layout.get("structures", []): + if st.get("x") is not None and st.get("y") is not None: + xs.append(float(st["x"])) + ys.append(float(st["y"])) + pad = PLAYABLE_PAD_CELLS * TILE_SPACING + def snap_lo(v: float) -> float: + return math.floor((v - pad - map_min_x) / TILE_SPACING) * TILE_SPACING + map_min_x + def snap_hi(v: float) -> float: + return math.ceil((v + pad - map_min_x) / TILE_SPACING) * TILE_SPACING + map_min_x + def snap_lo_y(v: float) -> float: + return math.floor((v - pad - map_min_y) / TILE_SPACING) * TILE_SPACING + map_min_y + def snap_hi_y(v: float) -> float: + return math.ceil((v + pad - map_min_y) / TILE_SPACING) * TILE_SPACING + map_min_y + return { + "minX": snap_lo(min(xs)), + "minY": snap_lo_y(min(ys)), + "maxX": snap_hi(max(xs) + 32), + "maxY": snap_hi_y(max(ys) + 32), + } + + +# Filled in by main() once the wpm + layout are read; the module-level default is +# only a placeholder for tools that import PLAYABLE before main runs. +PLAYABLE = {"minX": -5568.0, "minY": -7744.0, "maxX": 5440.0, "maxY": 6912.0} # --- minimap registration (content box -> full w3e tile-edge extent) ---------- CONTENT_X0, CONTENT_X1 = 32.0, 223.0 # non-white content cols (letterboxed x) @@ -1505,10 +1545,22 @@ def is_water_at(x: float, y: float) -> bool: # trace. Band [0.55, 0.70] (target the playable-crop NON-BLUE read). wf = water_fraction(rows) report["waterFraction"] = round(wf, 4) - if not (0.50 <= wf <= 0.62): - raise SystemExit(f"terrain: water fraction {wf:.3f} out of the wpm band [0.50, 0.62] " - "(the pathing map reads ~0.55 sailable over the playable crop; " - "well above = colour-key-style over-watering, well below = over-dry)") + # CROP-INDEPENDENT gate: compare the emitted mask against the RAW wpm + # sailable fraction over the SAME rect. An absolute band was wrong — it was + # calibrated on one particular crop, so simply widening the playable rect + # (which pulls in more border land) tripped it even though the + # classification was unchanged. What actually matters is that we neither + # over- nor under-water RELATIVE to the pathing map: the only legitimate + # additions are the minimal connectivity necks + the two west moats. + raw_wf = report.get("rawWpmWaterFraction") + if isinstance(raw_wf, float): + drift = wf - raw_wf + report["waterFractionDriftVsWpm"] = round(drift, 4) + if abs(drift) > 0.02: + raise SystemExit( + f"terrain: emitted water fraction {wf:.3f} drifts {drift:+.3f} from the raw " + f"wpm's {raw_wf:.3f} over the same crop (>|0.02|). Only minimal necks/moats " + "may be added; a drift this large means the classification changed.") def lane_runs(col_range, row_range) -> list[int]: out: list[int] = [] @@ -1927,8 +1979,11 @@ def main() -> None: w3e = parse_w3e(args.w3e.read_bytes()) layout = json.loads(args.layout.read_text()) - cols_idx, rows_idx = playable_indices(w3e, PLAYABLE) - geom = crop_geometry(w3e, cols_idx, rows_idx, PLAYABLE) + wpm = parse_wpm(args.wpm.read_bytes()) + playable = compute_playable(wpm, layout, w3e["centerX"], w3e["centerY"]) + print(f"terrain: playable rect from data: {playable}", file=sys.stderr) + cols_idx, rows_idx = playable_indices(w3e, playable) + geom = crop_geometry(w3e, cols_idx, rows_idx, playable) mm_w, mm_h, mm_px = decode_png_rgb(args.minimap) @@ -1939,7 +1994,6 @@ def main() -> None: # merged lanes the real map separates (owner-reported: the NE lane must NOT # merge into the east-edge lane; the wpm separates them, 26/26 known # anchors -- HQs/harbours/spawns/lane waypoints -- sit sailable). - wpm = parse_wpm(args.wpm.read_bytes()) sail = wpm_sailable_grid(geom, wpm, w3e["centerX"], w3e["centerY"]) # The colour key stays for depth RENDER metadata + an informational # agreement stat (how far the picture is from the pathing truth). @@ -1950,6 +2004,7 @@ def main() -> None: # rows = the working mask; keep the denoised raw wpm grid as the reference # the G2 agreement compares the final (carved) mask against. + raw_water_fraction = water_fraction(sail) rows = [list(r) for r in sail] restored = restore_straddled_channels(rows, wpm, geom, w3e["centerX"], w3e["centerY"]) removed = drop_singletons(rows, geom["cols"], geom["rows"]) @@ -1985,6 +2040,7 @@ def main() -> None: rle = [rle_encode_row(r) for r in rows] wf = water_fraction(rows) report = validate(rows, layout, geom) + report["rawWpmWaterFraction"] = round(raw_water_fraction, 4) report["necks"] = neck_report report["laneTopologyVsWpm"] = topo_report report["sideRoutes"] = confirm_side_routes(rows, ref_after_denoise, layout, geom) @@ -2066,7 +2122,7 @@ def main() -> None: "PINK (R>150 AND B>120 AND R-G>15), else SHALLOW; a water cell " "whose pixels read land-blue falls back to SHALLOW." ), - "playableBounds": PLAYABLE, + "playableBounds": playable, "bounds": geom["bounds"], "cols": geom["cols"], "rows": geom["rows"],