mapwright 0.20.0__tar.gz → 0.22.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. {mapwright-0.20.0 → mapwright-0.22.0}/CHANGELOG.md +45 -0
  2. {mapwright-0.20.0 → mapwright-0.22.0}/PKG-INFO +15 -5
  3. {mapwright-0.20.0 → mapwright-0.22.0}/README.md +14 -4
  4. mapwright-0.22.0/docs/gallery/fortress-town.png +0 -0
  5. mapwright-0.22.0/docs/gallery/fortress-town.svg +1 -0
  6. mapwright-0.22.0/docs/gallery/grid-city.png +0 -0
  7. mapwright-0.22.0/docs/gallery/grid-city.svg +1 -0
  8. {mapwright-0.20.0 → mapwright-0.22.0}/examples/gallery.py +2 -0
  9. {mapwright-0.20.0 → mapwright-0.22.0}/pyproject.toml +1 -1
  10. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/__init__.py +3 -1
  11. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/_geometry.py +43 -0
  12. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/settlement.py +319 -45
  13. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/settlement_renderer.py +22 -0
  14. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_api_contract.py +2 -0
  15. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_geometry.py +21 -0
  16. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_settlement.py +172 -5
  17. {mapwright-0.20.0 → mapwright-0.22.0}/.github/workflows/ci.yml +0 -0
  18. {mapwright-0.20.0 → mapwright-0.22.0}/.github/workflows/publish.yml +0 -0
  19. {mapwright-0.20.0 → mapwright-0.22.0}/.gitignore +0 -0
  20. {mapwright-0.20.0 → mapwright-0.22.0}/LICENSE +0 -0
  21. {mapwright-0.20.0 → mapwright-0.22.0}/NOTICE +0 -0
  22. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/age-old.png +0 -0
  23. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/age-old.svg +0 -0
  24. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/age-young.png +0 -0
  25. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/age-young.svg +0 -0
  26. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/archipelago.png +0 -0
  27. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/archipelago.svg +0 -0
  28. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/arctic.png +0 -0
  29. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/arctic.svg +0 -0
  30. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas.png +0 -0
  31. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/README.md +0 -0
  32. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/city_castle_1.png +0 -0
  33. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/city_large_1.png +0 -0
  34. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/city_town_1.png +0 -0
  35. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/city_village_1.png +0 -0
  36. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/decoration_compass_1.png +0 -0
  37. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/decoration_creature_1.png +0 -0
  38. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/decoration_ship_1.png +0 -0
  39. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/dune_1.png +0 -0
  40. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/hill_1.png +0 -0
  41. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/hill_2.png +0 -0
  42. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/manifest.json +0 -0
  43. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/mountain_mid_1.png +0 -0
  44. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/mountain_old_1.png +0 -0
  45. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/mountain_old_2.png +0 -0
  46. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/mountain_young_1.png +0 -0
  47. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/mountain_young_2.png +0 -0
  48. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/tree_cactus_1.png +0 -0
  49. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/tree_deciduous_1.png +0 -0
  50. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/tree_deciduous_2.png +0 -0
  51. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/tree_pine_1.png +0 -0
  52. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/atlas_pack/tree_pine_2.png +0 -0
  53. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/citadel.png +0 -0
  54. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/citadel.svg +0 -0
  55. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/continent.png +0 -0
  56. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/continent.svg +0 -0
  57. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/desert.png +0 -0
  58. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/desert.svg +0 -0
  59. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/dungeon.png +0 -0
  60. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/dungeon.svg +0 -0
  61. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/highlands.png +0 -0
  62. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/highlands.svg +0 -0
  63. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/hint.png +0 -0
  64. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/hint.svg +0 -0
  65. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/islands.png +0 -0
  66. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/islands.svg +0 -0
  67. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/metropolis.png +0 -0
  68. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/metropolis.svg +0 -0
  69. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/pangaea.png +0 -0
  70. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/pangaea.svg +0 -0
  71. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/port.png +0 -0
  72. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/port.svg +0 -0
  73. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/regions.png +0 -0
  74. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/regions.svg +0 -0
  75. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/roads.png +0 -0
  76. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/roads.svg +0 -0
  77. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/shantytown.png +0 -0
  78. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/shantytown.svg +0 -0
  79. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/template-atoll.png +0 -0
  80. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/template-atoll.svg +0 -0
  81. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/template-isthmus.png +0 -0
  82. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/template-isthmus.svg +0 -0
  83. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-blueprint.png +0 -0
  84. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-blueprint.svg +0 -0
  85. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-citadel-neon.png +0 -0
  86. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-citadel-neon.svg +0 -0
  87. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-dune.png +0 -0
  88. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-dune.svg +0 -0
  89. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-dungeon-blueprint.png +0 -0
  90. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-dungeon-blueprint.svg +0 -0
  91. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-neon.png +0 -0
  92. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-neon.svg +0 -0
  93. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-parchment.png +0 -0
  94. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/theme-parchment.svg +0 -0
  95. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/town.png +0 -0
  96. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/town.svg +0 -0
  97. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/tropical.png +0 -0
  98. {mapwright-0.20.0 → mapwright-0.22.0}/docs/gallery/tropical.svg +0 -0
  99. {mapwright-0.20.0 → mapwright-0.22.0}/examples/benchmark.py +0 -0
  100. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/_graph.py +0 -0
  101. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/_serde.py +0 -0
  102. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/affordances.py +0 -0
  103. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/atlas_renderer.py +0 -0
  104. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/config.py +0 -0
  105. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/dungeon.py +0 -0
  106. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/dungeon_renderer.py +0 -0
  107. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/names.py +0 -0
  108. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/regions.py +0 -0
  109. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/rng.py +0 -0
  110. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/roads.py +0 -0
  111. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/svg_renderer.py +0 -0
  112. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/terrain.py +0 -0
  113. {mapwright-0.20.0 → mapwright-0.22.0}/src/mapwright/themes.py +0 -0
  114. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_affordances.py +0 -0
  115. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_atlas_renderer.py +0 -0
  116. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_config.py +0 -0
  117. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_dungeon.py +0 -0
  118. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_dungeon_renderer.py +0 -0
  119. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_graph.py +0 -0
  120. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_names.py +0 -0
  121. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_properties.py +0 -0
  122. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_regions.py +0 -0
  123. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_rng.py +0 -0
  124. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_roads.py +0 -0
  125. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_serialize.py +0 -0
  126. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_svg_renderer.py +0 -0
  127. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_terrain.py +0 -0
  128. {mapwright-0.20.0 → mapwright-0.22.0}/tests/test_themes.py +0 -0
@@ -8,6 +8,51 @@ All notable changes to mapwright are documented here. The format follows
8
8
  `tests/test_api_contract.py`). While the version is `0.x`, minor versions may
9
9
  make breaking changes; these will always be noted here.
10
10
 
11
+ ## [0.22.0] — 2026-06-02
12
+
13
+ ### Added
14
+ - **Settlement `purpose` + landmarks — what a town exists for.** A new
15
+ `SettlementConfig.purpose` field (`"general"` default, or `"trade"`,
16
+ `"fortress"`, `"religious"`, `"harbor"`, `"extraction"`, `"transit"`). Anything
17
+ but `"general"`:
18
+ - promotes the central ward to a purpose-specific **landmark** kind
19
+ (fortress→`citadel`, religious→`temple`, trade→`market`, harbor→`docks`,
20
+ extraction→`mine`, transit→`plaza`), recorded on the new
21
+ `Settlement.landmark` field (a new public `Landmark` type);
22
+ - focuses the **main roads** on that landmark (they radiate from it to the
23
+ gates);
24
+ - **biases the ward-kind mix** toward the purpose (e.g. fortress → more
25
+ garrison wards).
26
+ - The renderer draws a star glyph over the landmark ward.
27
+ - New presets **`fortress_town`**, **`pilgrimage_site`**, **`mining_camp`**;
28
+ gallery `fortress-town` showcase.
29
+ - `"general"` output is **byte-identical** to before (no landmark, unchanged
30
+ ward bag and roads). New `Landmark` public type; `Settlement` serialisation
31
+ bumps to `mapwright/settlement@5` (back-compatible — older payloads load with
32
+ no landmark and `purpose="general"`).
33
+
34
+ ## [0.21.0] — 2026-06-02
35
+
36
+ ### Added
37
+ - **Grid streets — the organic ↔ planned layout descriptor.** A new
38
+ `SettlementConfig.layout` field (`"organic"` default, or `"grid"`) chooses the
39
+ street pattern. In `"grid"` mode the town gets a geometric street grid aligned
40
+ to its long axis (PCA over the footprint): two families of parallel
41
+ thoroughfares clipped to the footprint, the central line of each marked
42
+ `"main"`, with gates where the mains pierce the perimeter (plus a harbour gate
43
+ when coastal). Building lots are also bisected along the grid axes, so blocks
44
+ come out rectangular and street-aligned. Walls splice grid gates (which land
45
+ mid-edge) into the wall ring as real gatehouse gaps. This is the *Layout &
46
+ Geometry* descriptor from the imaginative-realms taxonomy ("Hyper-Grid Rigid"),
47
+ generalising the `era`/`wealth` shanty↔skyscraper axis.
48
+ - New preset **`grid_city`**; gallery `grid-city` showcase.
49
+ - The default (`layout="organic"`) output is **byte-identical** to before — all
50
+ grid logic is gated behind the new mode.
51
+ - `layout` serialises via `to_dict`/`json_schema` (new enum-field support in
52
+ `SettlementConfig`, via an `_ENUM_SPEC`).
53
+ - New reusable geometry primitive `clip_line_to_convex` (Liang–Barsky line ↔
54
+ convex-polygon clipping) in the internal `_geometry` module.
55
+
11
56
  ## [0.20.0] — 2026-06-02
12
57
 
13
58
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapwright
3
- Version: 0.20.0
3
+ Version: 0.22.0
4
4
  Summary: Domain-neutral procedural fantasy map & world generation: Voronoi terrain, hydraulic erosion, biomes, rivers, Markov place-names, and shaded-relief SVG.
5
5
  Project-URL: Homepage, https://github.com/sligara7/mapwright
6
6
  Project-URL: Repository, https://github.com/sligara7/mapwright
@@ -97,7 +97,11 @@ produced by [`examples/gallery.py`](examples/gallery.py):
97
97
  <tr>
98
98
  <td align="center"><img width="240" src="https://raw.githubusercontent.com/sligara7/mapwright/main/docs/gallery/shantytown.png" alt="poor, dense, irregular shantytown"><br><sub><code>wealth=0.08</code> (shantytown)</sub></td>
99
99
  <td align="center"><img width="240" src="https://raw.githubusercontent.com/sligara7/mapwright/main/docs/gallery/metropolis.png" alt="rich, modern, grid-block metropolis"><br><sub><code>wealth=0.92, era=0.95</code> (metropolis)</sub></td>
100
- <td align="center"><sub>Same generator, opposite ends of the <b>shanty skyscraper</b> axis: <code>wealth</code> drives plot size + ward mix, <code>era</code> drives organic-vs-grid block regularity.</sub></td>
100
+ <td align="center"><img width="240" src="https://raw.githubusercontent.com/sligara7/mapwright/main/docs/gallery/grid-city.png" alt="planned town with a geometric street grid"><br><sub><code>layout="grid"</code> (grid_city)</sub></td>
101
+ </tr>
102
+ <tr>
103
+ <td align="center"><img width="240" src="https://raw.githubusercontent.com/sligara7/mapwright/main/docs/gallery/fortress-town.png" alt="walled fortress town with a central citadel landmark"><br><sub><code>purpose="fortress"</code> (fortress_town)</sub></td>
104
+ <td align="center" colspan="2"><sub>A <code>purpose</code> seeds a central <b>landmark</b> (★) the main roads focus on — citadel, temple, mine, … — and biases the ward mix toward what the town is for.</sub></td>
101
105
  </tr>
102
106
  <tr>
103
107
  <td align="center"><img width="240" src="https://raw.githubusercontent.com/sligara7/mapwright/main/docs/gallery/roads.png" alt="settlements linked by terrain-routed roads"><br><sub><code>RegionalRoadGenerator</code></sub></td>
@@ -226,8 +230,14 @@ open("town.svg", "w").write(SettlementSVGRenderer().render(town))
226
230
  ```
227
231
 
228
232
  Settlement presets: `hamlet`, `village`, `town`, `city`, `port`, `citadel`,
229
- `shantytown`, `metropolis`. The `wealth` (poor ⇄ rich) and `era` (ancient ⇄ modern)
230
- knobs drive the shanty↔skyscraper axis plot size, ward-kind mix, and block regularity.
233
+ `shantytown`, `metropolis`, `grid_city`, `fortress_town`, `pilgrimage_site`,
234
+ `mining_camp`. The `wealth` (poor rich) and `era` (ancient modern) knobs drive
235
+ the shanty↔skyscraper axis — plot size, ward-kind mix, and block regularity. The
236
+ `layout` knob picks the street pattern: `"organic"` (winding ward-to-ward roads,
237
+ the default) or `"grid"` (a geometric street grid aligned to the town's long axis,
238
+ with grid-aligned lots). The `purpose` knob (`"fortress"`, `"religious"`,
239
+ `"extraction"`, …) gives the town a central **landmark** the main roads focus on
240
+ and biases its ward mix toward what it's for.
231
241
 
232
242
  ## What's inside
233
243
 
@@ -245,7 +255,7 @@ knobs drive the shanty↔skyscraper axis — plot size, ward-kind mix, and block
245
255
  | `RegionGenerator` | Partitions land into named factions/territories: spread capitals seed a flood fill over the land graph (sea divides them); each `Region` is Markov-named. |
246
256
  | `DungeonGenerator` | BSP-partitioned rooms + minimum-spanning-tree corridors → rooms, corridor cells, and a walkable grid (with `Dungeon.ascii()`). |
247
257
  | `DungeonSVGRenderer` | Renders a `Dungeon` to SVG: walls, carved floor, room outlines, optional tile grid and per-room labels. Takes a `theme=`. |
248
- | `SettlementGenerator` | Self-contained town layout: an organic footprint divided into named Voronoi **wards** (market, docks, …), each subdivided into building **lots**, a **street** network (MST over ward adjacency + main roads from gates to the market), an optional defensive **wall** (towers + gate gaps, opened at the harbour when coastal), and optional coastline. |
258
+ | `SettlementGenerator` | Self-contained town layout: an organic footprint divided into named Voronoi **wards** (market, docks, …), each subdivided into building **lots**, a **street** network (`layout="organic"` → MST over ward adjacency + gate-to-hub roads; `layout="grid"` a geometric street grid + grid-aligned lots), an optional defensive **wall** (towers + gate gaps, opened at the harbour when coastal), an optional **`purpose`** that places a central **landmark** (citadel/temple/mine/…) the main roads focus on, and optional coastline. |
249
259
  | `SettlementSVGRenderer` | Renders a `Settlement` to SVG: sea, footprint, kind-coloured wards, building lots, streets, wall with towers/gatehouses, labels. Takes a `theme=`. |
250
260
 
251
261
  Everything is neutral: `RegionalTerrainGenerator` returns a `TerrainResult` of `TerrainCell`s
@@ -70,7 +70,11 @@ produced by [`examples/gallery.py`](examples/gallery.py):
70
70
  <tr>
71
71
  <td align="center"><img width="240" src="https://raw.githubusercontent.com/sligara7/mapwright/main/docs/gallery/shantytown.png" alt="poor, dense, irregular shantytown"><br><sub><code>wealth=0.08</code> (shantytown)</sub></td>
72
72
  <td align="center"><img width="240" src="https://raw.githubusercontent.com/sligara7/mapwright/main/docs/gallery/metropolis.png" alt="rich, modern, grid-block metropolis"><br><sub><code>wealth=0.92, era=0.95</code> (metropolis)</sub></td>
73
- <td align="center"><sub>Same generator, opposite ends of the <b>shanty skyscraper</b> axis: <code>wealth</code> drives plot size + ward mix, <code>era</code> drives organic-vs-grid block regularity.</sub></td>
73
+ <td align="center"><img width="240" src="https://raw.githubusercontent.com/sligara7/mapwright/main/docs/gallery/grid-city.png" alt="planned town with a geometric street grid"><br><sub><code>layout="grid"</code> (grid_city)</sub></td>
74
+ </tr>
75
+ <tr>
76
+ <td align="center"><img width="240" src="https://raw.githubusercontent.com/sligara7/mapwright/main/docs/gallery/fortress-town.png" alt="walled fortress town with a central citadel landmark"><br><sub><code>purpose="fortress"</code> (fortress_town)</sub></td>
77
+ <td align="center" colspan="2"><sub>A <code>purpose</code> seeds a central <b>landmark</b> (★) the main roads focus on — citadel, temple, mine, … — and biases the ward mix toward what the town is for.</sub></td>
74
78
  </tr>
75
79
  <tr>
76
80
  <td align="center"><img width="240" src="https://raw.githubusercontent.com/sligara7/mapwright/main/docs/gallery/roads.png" alt="settlements linked by terrain-routed roads"><br><sub><code>RegionalRoadGenerator</code></sub></td>
@@ -199,8 +203,14 @@ open("town.svg", "w").write(SettlementSVGRenderer().render(town))
199
203
  ```
200
204
 
201
205
  Settlement presets: `hamlet`, `village`, `town`, `city`, `port`, `citadel`,
202
- `shantytown`, `metropolis`. The `wealth` (poor ⇄ rich) and `era` (ancient ⇄ modern)
203
- knobs drive the shanty↔skyscraper axis plot size, ward-kind mix, and block regularity.
206
+ `shantytown`, `metropolis`, `grid_city`, `fortress_town`, `pilgrimage_site`,
207
+ `mining_camp`. The `wealth` (poor rich) and `era` (ancient modern) knobs drive
208
+ the shanty↔skyscraper axis — plot size, ward-kind mix, and block regularity. The
209
+ `layout` knob picks the street pattern: `"organic"` (winding ward-to-ward roads,
210
+ the default) or `"grid"` (a geometric street grid aligned to the town's long axis,
211
+ with grid-aligned lots). The `purpose` knob (`"fortress"`, `"religious"`,
212
+ `"extraction"`, …) gives the town a central **landmark** the main roads focus on
213
+ and biases its ward mix toward what it's for.
204
214
 
205
215
  ## What's inside
206
216
 
@@ -218,7 +228,7 @@ knobs drive the shanty↔skyscraper axis — plot size, ward-kind mix, and block
218
228
  | `RegionGenerator` | Partitions land into named factions/territories: spread capitals seed a flood fill over the land graph (sea divides them); each `Region` is Markov-named. |
219
229
  | `DungeonGenerator` | BSP-partitioned rooms + minimum-spanning-tree corridors → rooms, corridor cells, and a walkable grid (with `Dungeon.ascii()`). |
220
230
  | `DungeonSVGRenderer` | Renders a `Dungeon` to SVG: walls, carved floor, room outlines, optional tile grid and per-room labels. Takes a `theme=`. |
221
- | `SettlementGenerator` | Self-contained town layout: an organic footprint divided into named Voronoi **wards** (market, docks, …), each subdivided into building **lots**, a **street** network (MST over ward adjacency + main roads from gates to the market), an optional defensive **wall** (towers + gate gaps, opened at the harbour when coastal), and optional coastline. |
231
+ | `SettlementGenerator` | Self-contained town layout: an organic footprint divided into named Voronoi **wards** (market, docks, …), each subdivided into building **lots**, a **street** network (`layout="organic"` → MST over ward adjacency + gate-to-hub roads; `layout="grid"` a geometric street grid + grid-aligned lots), an optional defensive **wall** (towers + gate gaps, opened at the harbour when coastal), an optional **`purpose`** that places a central **landmark** (citadel/temple/mine/…) the main roads focus on, and optional coastline. |
222
232
  | `SettlementSVGRenderer` | Renders a `Settlement` to SVG: sea, footprint, kind-coloured wards, building lots, streets, wall with towers/gatehouses, labels. Takes a `theme=`. |
223
233
 
224
234
  Everything is neutral: `RegionalTerrainGenerator` returns a `TerrainResult` of `TerrainCell`s
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="630" height="630" viewBox="0 0 630 630"><rect width="630" height="630" fill="#c9d2bb"/><polygon points="112.4,390.5 112.4,361.1 117.4,330.8 127.1,300.4 141.2,270.5 159.2,241.7 180.9,214.6 205.7,189.8 233.2,167.8 262.9,149.2 294.0,134.5 326.0,124.2 357.9,118.7 388.8,118.3 417.8,123.1 444.0,133.0 466.6,147.7 484.9,166.7 498.5,189.2 507.1,214.6 510.8,242.1 509.6,270.7 503.8,299.9 493.9,328.9 480.0,357.3 462.7,384.5 442.2,410.2 418.8,433.9 392.9,455.1 364.9,473.5 335.1,488.5 304.4,499.5 273.2,506.1 242.6,507.9 213.4,504.7 186.5,496.3 162.7,483.1 143.0,465.2 127.8,443.3 117.5,418.2" fill="#e6dcc0"/><g stroke="#4a4230" stroke-width="1" stroke-linejoin="round"><polygon points="133.8,286.2 141.2,270.5 159.2,241.7 180.9,214.6 205.7,189.8 212.6,184.3 240.8,218.7 215.1,296.2 163.9,301.6" fill="#b3a684"/><polygon points="360.3,475.8 335.1,488.5 304.4,499.5 294.4,501.6 285.4,464.7 307.5,438.2 343.2,445.0" fill="#b3a684"/><polygon points="492.7,179.7 498.5,189.2 500.5,195.2 438.6,261.5 413.2,261.6 395.8,245.4 388.9,204.9" fill="#b3a684"/><polygon points="215.1,296.2 240.8,218.7 285.3,232.4 273.6,299.8 230.6,307.4" fill="#b9a98c"/><polygon points="480.9,355.5 480.0,357.3 462.7,384.5 442.2,410.2 420.8,431.8 390.6,401.4 421.6,345.9" fill="#c2b48f"/><polygon points="420.8,431.8 418.8,433.9 392.9,455.1 364.9,473.5 360.3,475.8 343.2,445.0 368.3,400.1 390.6,401.4" fill="#c2b48f"/><polygon points="386.9,202.0 388.9,204.9 395.8,245.4 337.2,270.5 293.7,231.0 334.1,182.5" fill="#c2b48f"/><polygon points="230.1,481.5 189.2,452.7 189.0,451.2 192.4,439.8 239.4,422.6 254.0,455.7" fill="#d8cdb0"/><polygon points="332.5,298.8 366.1,329.3 343.2,374.1 322.1,374.4 296.7,344.9 298.9,316.8" fill="#cdbf9e"/><polygon points="229.5,506.5 213.4,504.7 186.5,496.3 173.4,489.0 189.2,452.7 230.1,481.5" fill="#c2b48f"/><polygon points="343.2,445.0 307.5,438.2 296.9,407.4 322.1,374.4 343.2,374.1 368.3,400.1" fill="#c2b48f"/><polygon points="337.2,270.5 395.8,245.4 413.2,261.6 400.2,323.2 366.1,329.3 332.5,298.8" fill="#c2b48f"/><polygon points="192.4,439.8 189.0,451.2 131.4,448.6 127.8,443.3 117.5,418.2 114.5,402.1 167.3,392.4" fill="#b9a98c"/><polygon points="296.9,407.4 307.5,438.2 285.4,464.7 254.0,455.7 239.4,422.6 247.9,398.8" fill="#b3a684"/><polygon points="415.9,122.8 417.8,123.1 444.0,133.0 466.6,147.7 484.9,166.7 492.7,179.7 388.9,204.9 386.9,202.0" fill="#b3a684"/><polygon points="294.4,501.6 273.2,506.1 242.6,507.9 229.5,506.5 230.1,481.5 254.0,455.7 285.4,464.7" fill="#dfd6c0"/><polygon points="499.4,312.9 493.9,328.9 480.9,355.5 421.6,345.9 400.2,323.2 413.2,261.6 438.6,261.5" fill="#b9a98c"/><polygon points="421.6,345.9 390.6,401.4 368.3,400.1 343.2,374.1 366.1,329.3 400.2,323.2" fill="#c2b48f"/><polygon points="212.6,184.3 233.2,167.8 262.9,149.2 294.0,134.5 315.2,127.7 334.1,182.5 293.7,231.0 285.3,232.4 240.8,218.7" fill="#cdbf9e"/><polygon points="296.7,344.9 322.1,374.4 296.9,407.4 247.9,398.8 237.5,374.7 241.1,366.7" fill="#cdbf9e"/><polygon points="163.9,301.6 215.1,296.2 230.6,307.4 241.1,366.7 237.5,374.7 181.2,375.8" fill="#b3a684"/><polygon points="315.2,127.7 326.0,124.2 357.9,118.7 388.8,118.3 415.9,122.8 386.9,202.0 334.1,182.5" fill="#b9a98c"/><polygon points="230.6,307.4 273.6,299.8 298.9,316.8 296.7,344.9 241.1,366.7" fill="#cdbf9e"/><polygon points="112.4,390.5 112.4,361.1 117.4,330.8 127.1,300.4 133.8,286.2 163.9,301.6 181.2,375.8 167.3,392.4 114.5,402.1" fill="#b9a98c"/><polygon points="500.5,195.2 507.1,214.6 510.8,242.1 509.6,270.7 503.8,299.9 499.4,312.9 438.6,261.5" fill="#d8cdb0"/><polygon points="273.6,299.8 285.3,232.4 293.7,231.0 337.2,270.5 332.5,298.8 298.9,316.8" fill="#dfd6c0"/><polygon points="237.5,374.7 247.9,398.8 239.4,422.6 192.4,439.8 167.3,392.4 181.2,375.8" fill="#cdbf9e"/><polygon points="189.0,451.2 189.2,452.7 173.4,489.0 162.7,483.1 143.0,465.2 131.4,448.6" fill="#d8cdb0"/></g><g fill="#7d6c52" stroke="#4a3e2e" stroke-width="0.5" stroke-linejoin="round"><polygon points="238.4,219.9 236.0,227.2 228.0,224.6 230.4,217.3"/><polygon points="234.9,230.7 232.6,237.6 224.5,234.9 226.8,228.1"/><polygon points="210.1,214.4 211.2,211.0 226.8,216.2 225.7,219.5"/><polygon points="213.6,230.9 205.7,228.3 209.0,218.4 216.9,221.0"/><polygon points="221.1,233.9 217.1,232.6 220.8,221.7 224.7,223.1"/><polygon points="231.8,240.9 229.1,249.0 224.7,247.5 227.4,239.4"/><polygon points="221.7,246.3 215.7,244.4 218.3,236.6 224.3,238.6"/><polygon points="212.2,242.8 202.0,239.4 204.3,232.4 214.5,235.8"/><polygon points="223.5,207.7 220.2,210.4 211.8,207.6 212.9,204.3"/><polygon points="217.2,193.0 226.7,204.5 226.1,205.0 214.5,201.2"/><polygon points="229.2,207.1 236.0,215.5 223.9,211.4"/><polygon points="205.5,192.2 206.7,191.0 212.4,186.4 214.7,189.3 213.0,194.7"/><polygon points="197.2,201.3 203.2,195.3 211.2,197.9 208.9,205.2"/><polygon points="201.8,206.8 208.1,208.9 205.8,215.9 199.5,213.8"/><polygon points="188.0,210.0 193.7,204.2 198.6,205.8 196.3,212.7"/><polygon points="199.2,234.7 198.0,238.1 181.9,232.8 183.0,229.3"/><polygon points="202.7,224.8 200.6,231.0 191.9,228.2 193.9,221.9"/><polygon points="195.5,215.7 205.1,218.9 204.1,221.9 194.5,218.7"/><polygon points="188.0,213.7 192.3,215.1 188.4,227.0 184.1,225.6"/><polygon points="171.7,229.4 182.4,216.0 183.4,215.1 178.0,231.4"/><polygon points="190.6,239.6 196.2,241.5 193.3,250.0 187.8,248.2"/><polygon points="199.3,242.3 203.3,243.6 200.4,252.6 196.4,251.2"/><polygon points="199.4,255.5 198.5,258.0 185.8,253.7 186.6,251.3"/><polygon points="197.1,261.2 195.5,265.8 183.5,261.8 185.0,257.2"/><polygon points="184.2,249.0 183.2,251.8 172.6,248.3 173.5,245.4"/><polygon points="181.8,254.8 179.8,260.7 170.0,257.4 171.9,251.6"/><polygon points="177.4,235.6 187.0,238.7 184.7,245.5 175.1,242.3"/><polygon points="161.6,242.0 168.9,232.8 173.5,234.3 170.0,244.7"/><polygon points="155.1,252.2 159.3,245.6 168.6,248.7 166.3,255.9"/><polygon points="174.7,270.6 172.1,278.4 167.3,276.8 169.9,268.9"/><polygon points="164.2,275.5 157.7,273.4 160.1,265.9 166.7,268.1"/><polygon points="162.6,258.9 176.7,263.6 175.5,267.2 161.4,262.5"/><polygon points="144.3,268.9 148.1,262.8 155.8,267.7 154.3,272.2"/><polygon points="149.8,259.8 152.6,255.4 159.3,257.6 157.1,264.4"/><polygon points="163.2,278.8 171.0,281.4 169.3,286.6 160.7,283.8"/><polygon points="167.6,290.1 164.5,299.4 164.3,299.4 155.6,294.9 159.4,287.4"/><polygon points="146.7,273.5 152.8,275.5 149.8,284.5 143.7,282.5"/><polygon points="137.6,281.0 142.1,271.4 143.9,272.0 140.6,282.0"/><polygon points="135.9,285.4 136.7,283.7 149.0,287.8 147.8,291.5"/><polygon points="156.3,276.6 159.9,277.8 151.9,293.4 150.9,292.9"/><polygon points="185.5,295.4 184.9,297.2 169.2,298.9 171.9,290.9"/><polygon points="180.4,265.0 194.1,269.6 192.6,274.3 178.8,269.7"/><polygon points="181.2,289.6 173.0,286.9 175.6,279.1 183.8,281.8"/><polygon points="176.1,275.7 177.1,272.8 186.4,275.9 185.4,278.8"/><polygon points="191.8,278.0 187.2,291.9 184.6,291.0 189.2,277.1"/><polygon points="205.6,295.2 189.4,296.9 191.5,290.5"/><polygon points="196.3,274.5 197.4,271.0 207.1,274.2 205.9,277.6"/><polygon points="201.3,289.5 192.9,286.7 195.7,278.1 204.2,280.9"/><polygon points="216.4,285.9 213.8,293.7 205.2,290.9 207.8,283.1"/><polygon points="219.3,278.3 217.9,282.6 208.6,279.5 210.0,275.2"/><polygon points="206.2,244.6 212.7,246.8 210.7,252.9 204.2,250.7"/><polygon points="215.9,248.3 227.6,252.2 225.9,257.4 214.2,253.6"/><polygon points="222.8,267.0 220.2,274.9 212.7,272.5 215.4,264.5"/><polygon points="225.4,260.8 224.3,264.1 215.9,261.3 217.0,258.0"/><polygon points="209.1,271.1 199.0,267.8 201.2,261.3 211.2,264.7"/><polygon points="202.0,257.7 203.3,253.8 214.0,257.4 212.7,261.3"/><polygon points="300.3,498.8 295.6,499.8 293.5,491.2 298.2,490.0"/><polygon points="312.2,494.6 303.8,497.6 303.7,497.6 301.7,489.6 310.5,487.4"/><polygon points="292.8,488.0 290.6,478.9 295.5,477.7 297.7,486.8"/><polygon points="299.2,477.2 307.5,475.2 309.5,483.6 301.2,485.6"/><polygon points="327.6,489.1 321.9,491.1 318.2,480.7 325.1,479.0"/><polygon points="318.8,492.8 315.6,493.9 312.6,481.6 314.6,481.1"/><polygon points="312.2,478.3 311.2,474.1 323.4,471.1 324.4,475.3"/><polygon points="309.0,459.4 311.1,458.9 313.8,470.2 311.8,470.7"/><polygon points="314.3,458.7 320.0,457.4 322.5,467.5 316.8,468.9"/><polygon points="295.8,463.1 306.2,460.6 307.3,465.4 296.9,467.9"/><polygon points="308.4,468.4 309.1,471.2 298.1,473.9 297.4,471.1"/><polygon points="289.9,475.6 287.4,465.2 292.4,464.0 294.9,474.3"/><polygon points="345.6,481.5 334.5,487.1 331.0,488.3 330.3,485.2"/><polygon points="335.2,470.2 342.4,468.4 344.7,478.0 337.6,479.8"/><polygon points="329.7,482.1 327.2,471.8 331.6,470.7 334.1,481.0"/><polygon points="357.4,474.9 349.2,479.0 346.5,467.6 352.5,466.1"/><polygon points="338.5,453.2 344.4,451.8 350.2,462.1 341.2,464.3"/><polygon points="326.6,468.2 325.1,462.2 335.7,459.7 337.2,465.6"/><polygon points="323.9,459.0 323.2,456.2 334.7,453.4 335.3,456.2"/><polygon points="321.2,442.3 326.5,443.3 324.6,452.9 323.9,453.0"/><polygon points="329.6,444.4 342.0,446.7 342.7,448.0 328.2,451.5"/><polygon points="318.3,445.5 320.2,453.1 309.2,455.8 307.3,448.2"/><polygon points="305.3,443.1 308.1,439.8 318.2,441.7 318.2,441.8 305.7,444.8"/><polygon points="299.5,450.3 302.9,446.2 305.6,457.3 301.4,458.3"/><polygon points="290.1,461.3 297.0,452.9 298.6,459.2"/><polygon points="415.3,200.4 419.6,199.4 422.8,212.6 418.5,213.6"/><polygon points="423.0,198.3 433.3,195.8 434.4,200.1 424.0,202.7"/><polygon points="435.0,203.6 436.4,209.3 426.4,211.7 425.0,206.0"/><polygon points="437.3,212.9 439.5,222.0 433.4,223.5 431.1,214.4"/><polygon points="429.6,224.2 421.7,226.1 419.6,217.4 427.5,215.4"/><polygon points="416.4,221.1 417.8,227.1 407.0,229.7 405.6,223.7"/><polygon points="403.3,215.1 414.6,213.2 415.6,217.4 404.5,220.1"/><polygon points="395.3,233.0 394.4,227.3 402.4,226.0 403.7,231.0"/><polygon points="393.9,224.0 392.7,216.9 399.8,215.7 401.5,222.7"/><polygon points="402.5,203.7 411.5,201.5 413.5,209.5 403.8,211.2"/><polygon points="392.2,213.4 391.0,206.3 398.7,204.4 400.0,212.0"/><polygon points="400.5,247.0 397.6,244.4 396.3,236.4 402.2,235.0 404.8,246.0"/><polygon points="405.6,233.8 409.0,233.0 411.9,244.6 408.4,245.5"/><polygon points="415.2,259.7 414.0,259.7 403.8,250.2 412.4,248.1"/><polygon points="414.0,239.3 412.3,232.2 419.3,230.5 421.0,237.6"/><polygon points="416.3,248.9 414.7,242.6 421.9,240.8 423.4,247.2"/><polygon points="426.3,259.7 419.1,259.8 417.3,252.2 424.1,250.6"/><polygon points="436.7,259.8 430.0,259.8 428.3,252.9 434.7,251.4"/><polygon points="446.7,250.5 439.7,258.0 437.9,250.5 446.2,248.5"/><polygon points="427.8,249.0 426.8,245.0 443.8,240.9 444.8,244.9"/><polygon points="425.7,240.9 423.0,230.0 429.3,228.5 431.9,239.4"/><polygon points="433.3,227.6 440.2,225.9 442.8,236.7 435.9,238.4"/><polygon points="458.7,205.5 457.5,204.5 462.8,198.8 467.7,203.3"/><polygon points="465.5,196.7 472.6,189.2 475.4,200.8 471.1,201.9"/><polygon points="479.4,215.5 474.9,220.5 471.4,217.2 478.1,210.0"/><polygon points="469.1,214.9 466.2,212.1 472.5,205.3 476.5,204.3 477.1,206.4"/><polygon points="463.7,210.7 460.4,207.6 468.5,205.6"/><polygon points="449.8,197.8 444.1,192.5 448.3,191.5"/><polygon points="455.5,201.7 453.3,199.7 451.4,191.8 460.0,189.7 461.4,195.3"/><polygon points="463.0,188.2 471.0,186.2 464.3,193.4"/><polygon points="490.0,204.3 481.9,212.9 480.4,206.6"/><polygon points="497.8,194.2 498.0,194.7 493.3,199.7 480.2,202.9 479.2,198.8"/><polygon points="491.7,182.0 496.6,190.1 496.6,190.2 487.3,192.4 485.2,183.6"/><polygon points="483.7,193.6 477.8,195.0 475.6,185.7 481.4,184.3"/><polygon points="465.8,229.3 456.1,239.6 449.4,233.3"/><polygon points="454.0,242.7 449.3,247.7 446.4,235.6"/><polygon points="457.4,223.1 454.4,210.7 458.2,209.7 464.4,215.6"/><polygon points="472.4,222.7 471.3,223.9 459.0,226.9 467.4,218.0"/><polygon points="454.3,227.7 445.5,229.8 443.4,221.4 452.3,219.3"/><polygon points="442.1,217.9 441.0,213.5 450.8,211.1 451.9,215.6"/><polygon points="440.3,208.5 437.2,195.4 441.5,194.3 447.9,200.3"/><polygon points="451.0,202.3 455.7,206.7 444.3,209.5"/><polygon points="219.2,294.9 224.2,279.8 235.5,283.6 229.3,302.2"/><polygon points="241.7,285.0 249.4,287.6 244.6,302.0 235.5,303.6"/><polygon points="251.9,260.9 257.7,262.8 251.3,282.2 245.5,280.3"/><polygon points="226.7,273.1 232.6,255.5 245.4,259.7 239.6,277.3"/><polygon points="272.4,285.3 270.4,296.6 252.3,299.8 258.6,280.7"/><polygon points="263.0,264.6 276.1,268.9 274.3,279.0 259.9,274.2"/><polygon points="274.6,233.1 281.0,235.1 276.3,262.0 266.2,258.6"/><polygon points="240.7,230.2 243.1,223.1 267.7,230.7 265.2,238.3"/><polygon points="235.3,248.2 238.8,237.5 262.3,245.3 258.8,256.0"/><polygon points="397.0,394.5 404.3,381.4 409.4,384.3 402.1,397.4"/><polygon points="413.5,386.8 420.0,390.4 412.9,403.1 406.4,399.5"/><polygon points="406.8,414.2 393.6,401.0 394.8,398.7 410.6,407.5"/><polygon points="414.8,422.5 410.2,417.9 416.8,406.1 422.3,409.2"/><polygon points="433.4,415.6 420.8,428.4 418.4,425.9 426.4,411.6"/><polygon points="428.6,407.2 419.3,402.0 424.4,392.9 433.7,398.1"/><polygon points="444.7,403.7 440.6,408.8 437.1,412.4 432.4,409.8 437.9,399.9"/><polygon points="415.2,363.7 423.2,349.4 431.5,350.7 429.0,365.9"/><polygon points="425.9,387.8 415.9,382.2 422.3,370.7 428.5,371.7"/><polygon points="411.5,380.5 406.2,377.5 411.4,368.3 417.7,369.3"/><polygon points="439.1,395.2 430.9,390.6 432.9,378.1 441.7,379.5"/><polygon points="454.0,390.9 447.1,399.5 444.2,397.9 447.0,380.5 455.5,381.8"/><polygon points="458.1,365.7 456.4,376.4 443.9,374.4 445.7,363.7"/><polygon points="447.0,352.3 460.4,354.5 459.4,360.8 446.0,358.6"/><polygon points="433.7,372.8 437.2,351.2 442.1,351.9 438.6,373.6"/><polygon points="475.9,357.9 461.7,380.2 465.6,356.2"/><polygon points="347.9,442.8 352.8,433.9 366.4,441.4 361.4,450.3"/><polygon points="355.4,462.8 347.4,448.3 359.7,455.2"/><polygon points="367.8,459.5 364.7,454.8 371.2,443.2 375.5,445.6"/><polygon points="389.5,454.1 372.3,465.3 371.1,463.5 379.5,448.5"/><polygon points="368.6,468.5 363.8,471.7 361.2,473.0 357.9,467.0 362.4,459.0"/><polygon points="403.2,444.2 394.4,451.4 390.7,449.3 395.9,440.1"/><polygon points="416.6,431.8 406.3,440.3 399.1,436.3 407.0,422.2"/><polygon points="387.0,446.6 381.7,443.6 390.5,427.7 395.9,430.7"/><polygon points="377.1,440.8 370.9,437.4 379.6,421.8 385.8,425.2"/><polygon points="399.3,413.1 403.8,417.6 398.7,426.9 393.3,423.9"/><polygon points="382.1,417.0 389.4,403.9 389.4,403.9 395.7,410.2 389.5,421.2"/><polygon points="368.2,404.7 369.5,402.3 384.3,403.2 379.9,411.2"/><polygon points="366.1,434.8 355.4,428.8 360.5,419.5 371.3,425.5"/><polygon points="362.6,414.9 366.1,408.7 377.6,415.1 374.1,421.3"/><polygon points="369.4,253.4 360.0,257.5 353.8,243.2 363.3,239.1"/><polygon points="381.9,248.4 374.8,251.5 368.4,236.6 375.6,233.5"/><polygon points="390.0,227.4 392.7,243.7 386.9,246.2 380.6,231.4"/><polygon points="384.4,223.7 375.6,227.5 369.6,213.4 378.4,209.7"/><polygon points="386.7,205.0 387.1,205.7 390.0,222.4 389.2,222.7 382.4,206.9"/><polygon points="381.5,202.6 367.1,208.8 363.8,201.1 370.1,198.4"/><polygon points="370.5,229.8 351.3,238.0 349.0,232.6 368.2,224.4"/><polygon points="347.1,227.1 340.5,211.8 350.2,207.7 356.7,222.9"/><polygon points="354.9,204.8 359.4,202.9 366.5,219.6 362.1,221.5"/><polygon points="338.0,206.3 331.2,190.6 335.0,186.0 345.1,189.7 339.1,205.9"/><polygon points="350.3,191.2 363.3,196.0 345.8,203.5"/><polygon points="297.3,229.4 305.7,219.3 310.8,223.6"/><polygon points="309.6,216.5 318.6,205.7 329.2,214.5 314.7,220.7"/><polygon points="321.4,201.3 327.2,194.4 334.9,212.5"/><polygon points="326.5,251.7 343.1,233.3 347.2,242.8"/><polygon points="338.1,268.0 337.6,268.2 325.7,257.4 332.4,254.5"/><polygon points="354.4,259.8 342.3,265.0 337.4,253.5 349.5,248.3"/><polygon points="319.6,251.1 311.8,243.9 320.9,233.9 325.5,244.6"/><polygon points="307.9,240.4 299.9,233.1 317.3,225.7 318.5,228.7"/><polygon points="339.9,224.7 341.1,227.5 329.3,240.5 325.2,231.0"/><polygon points="321.4,223.3 336.9,216.6 338.5,220.3 323.0,226.9"/><polygon points="225.2,472.9 193.5,450.6 195.8,443.0 212.1,437.1"/><polygon points="243.7,442.8 249.1,454.8 233.6,471.5 225.5,449.4"/><polygon points="218.9,433.7 237.6,426.8 241.5,435.5 222.1,442.6"/><polygon points="354.4,346.0 347.9,358.6 339.0,354.0 345.4,341.4"/><polygon points="334.1,351.9 327.4,348.5 334.2,335.3 340.8,338.7"/><polygon points="323.2,346.8 319.3,344.8 326.5,330.8 330.3,332.8"/><polygon points="338.9,308.7 346.9,316.0 334.8,329.4 329.6,326.7"/><polygon points="356.1,323.8 362.8,329.9 357.0,341.2 349.2,337.2"/><polygon points="351.4,318.9 352.6,320.0 344.8,335.4 339.0,332.5"/><polygon points="325.6,322.2 324.9,323.7 307.8,315.0 318.7,309.2"/><polygon points="332.2,301.6 335.1,304.3 328.5,317.2 322.8,306.6"/><polygon points="301.7,335.5 299.8,334.6 301.1,318.3 302.2,317.6 309.0,321.1"/><polygon points="322.1,328.5 315.3,341.8 306.5,337.4 313.4,324.0"/><polygon points="307.7,354.2 299.1,344.2 299.4,339.5 311.9,345.9"/><polygon points="321.9,369.3 312.0,357.8 316.4,349.2 328.9,355.6"/><polygon points="345.3,363.6 341.4,371.2 327.6,371.4 334.4,358.1"/><polygon points="181.9,491.0 176.4,488.0 182.4,474.3 188.1,476.8"/><polygon points="188.8,494.7 187.3,494.3 185.8,493.4 192.4,478.5 198.4,481.1"/><polygon points="184.6,469.8 190.3,456.6 198.8,462.6 191.6,472.8"/><polygon points="202.9,464.8 207.7,468.2 201.1,477.6 195.6,475.2"/><polygon points="215.1,502.4 213.9,502.2 193.7,496.0 197.8,490.1"/><polygon points="227.5,504.1 225.2,503.9 219.7,500.0 227.8,488.5"/><polygon points="216.3,497.4 212.9,495.0 223.7,479.8 227.0,482.1"/><polygon points="209.0,491.3 201.4,485.9 211.3,471.9 218.9,477.3"/><polygon points="358.7,410.8 351.4,423.8 341.0,418.0 348.3,404.9"/><polygon points="335.6,415.3 327.7,410.9 335.3,397.3 343.2,401.7"/><polygon points="345.0,380.3 356.2,391.9 349.4,398.5 338.3,392.3"/><polygon points="360.4,394.9 365.8,400.4 362.2,406.7 353.3,401.8"/><polygon points="321.7,379.0 323.3,376.9 340.7,376.6 335.2,386.5"/><polygon points="305.7,399.4 308.5,395.7 323.9,407.4 323.0,409.0"/><polygon points="312.6,392.0 318.8,383.9 331.8,391.1 325.7,402.1"/><polygon points="306.2,425.3 300.2,407.9 303.3,403.9 314.6,410.3"/><polygon points="319.0,438.5 308.9,436.6 307.6,432.8 309.4,429.6 320.5,435.9"/><polygon points="312.6,426.0 319.8,413.1 329.1,418.3 321.9,431.1"/><polygon points="339.1,442.4 322.8,439.3 325.4,434.7"/><polygon points="329.0,431.0 334.3,421.4 348.4,429.3 343.0,438.9"/><polygon points="363.6,270.7 367.0,278.8 353.7,284.5 350.3,276.5"/><polygon points="346.2,268.8 360.8,262.6 362.4,266.2 347.8,272.4"/><polygon points="339.8,272.5 342.1,271.4 348.6,286.6 336.5,291.8"/><polygon points="362.7,309.9 352.8,314.2 349.2,310.9 358.6,300.5"/><polygon points="345.7,306.9 336.2,298.2 353.7,290.7 355.9,295.7"/><polygon points="373.7,294.0 377.7,303.2 367.0,307.8 363.1,298.5"/><polygon points="369.4,283.1 372.1,289.5 360.9,294.3 358.1,288.0"/><polygon points="369.0,326.7 366.7,327.1 356.1,317.5 363.6,314.3"/><polygon points="379.4,308.6 385.5,322.8 373.7,324.9 368.7,313.2"/><polygon points="408.1,271.6 405.3,284.6 386.8,280.7"/><polygon points="401.0,306.8 398.0,320.9 391.4,322.1 387.3,312.6"/><polygon points="386.8,306.6 385.5,307.1 376.2,285.4 377.3,285.0 390.8,287.8"/><polygon points="404.6,290.2 402.4,300.5 393.1,304.5 396.5,288.4"/><polygon points="407.3,259.5 410.5,262.5 410.0,264.8 393.8,271.7 391.5,266.3"/><polygon points="385.7,252.6 395.3,248.5 403.0,255.7 389.5,261.5"/><polygon points="365.2,261.3 380.9,254.6 383.4,260.5 367.8,267.2"/><polygon points="385.3,265.6 388.7,273.5 373.6,280.0 370.2,272.1"/><polygon points="188.2,440.2 186.1,447.2 157.1,445.9 157.5,437.9 187.7,439.3"/><polygon points="158.0,430.0 158.6,416.8 176.0,417.6 183.2,431.1"/><polygon points="157.9,409.7 158.5,397.1 165.7,395.8 173.4,410.4"/><polygon points="120.6,411.8 119.4,405.5 151.2,399.7 150.5,413.1"/><polygon points="127.6,436.6 120.2,418.3 128.4,418.7"/><polygon points="149.1,445.2 133.8,444.5 134.9,420.8 150.2,421.5"/><polygon points="267.0,404.1 275.8,405.6 274.5,412.9 265.7,411.4"/><polygon points="254.6,401.9 263.2,403.4 261.9,410.7 253.3,409.2"/><polygon points="245.9,408.5 248.8,400.3 251.5,400.8 250.1,409.2"/><polygon points="244.2,414.6 245.3,411.6 259.9,414.1 259.4,417.3"/><polygon points="244.3,429.7 241.1,422.6 242.8,417.8 246.9,418.5 244.9,429.8"/><polygon points="250.4,419.7 258.3,421.1 256.6,431.3 248.6,429.9"/><polygon points="263.6,414.9 273.8,416.7 272.6,423.3 262.5,421.5"/><polygon points="271.9,427.2 270.7,433.9 260.6,432.2 261.8,425.4"/><polygon points="256.2,454.3 255.4,454.1 250.6,443.1 258.8,439.5"/><polygon points="248.9,439.9 245.9,433.3 258.9,435.5"/><polygon points="261.9,442.6 263.0,436.3 270.4,437.6 269.3,443.9"/><polygon points="266.7,457.3 259.9,455.3 261.5,446.2 268.4,447.4"/><polygon points="303.9,434.3 305.1,437.8 298.6,445.6 292.7,440.6 298.8,433.4"/><polygon points="289.5,438.7 284.1,434.1 286.9,430.8 294.9,432.2"/><polygon points="281.7,432.9 276.2,428.3 284.4,429.7"/><polygon points="273.2,440.6 273.3,439.7 284.9,441.8 280.7,446.9"/><polygon points="270.6,458.6 270.2,458.5 272.7,444.5 278.4,449.2"/><polygon points="273.8,436.7 274.9,430.6 284.5,438.6"/><polygon points="285.3,462.5 284.9,463.0 273.7,459.8 277.2,455.7"/><polygon points="296.3,448.8 292.4,453.5 284.8,447.2 288.7,442.5"/><polygon points="290.2,456.3 287.2,460.0 279.3,453.5 282.4,449.8"/><polygon points="295.7,408.7 297.8,415.0 290.6,417.5 292.2,408.1"/><polygon points="298.5,418.8 302.2,429.6 289.5,427.3 290.5,421.5"/><polygon points="278.4,412.3 279.5,406.2 288.8,407.8 287.8,413.9"/><polygon points="285.2,426.7 276.4,425.2 278.0,416.2 286.8,417.7"/><polygon points="487.4,174.6 489.6,178.4 475.1,181.9 474.1,177.9"/><polygon points="479.2,163.9 483.1,168.0 484.9,171.0 473.3,173.8 471.4,165.8"/><polygon points="470.6,154.1 476.9,160.7 469.9,162.4 468.0,154.7"/><polygon points="472.0,183.3 469.6,183.9 466.9,172.6 469.2,172.0"/><polygon points="466.4,184.1 460.8,185.5 458.3,175.2 463.9,173.8"/><polygon points="457.4,171.6 456.2,166.5 466.8,163.9 468.0,169.0"/><polygon points="455.2,163.0 454.1,158.3 464.9,155.7 466.0,160.4"/><polygon points="447.9,188.6 439.7,190.6 437.8,182.9 446.1,180.9"/><polygon points="457.4,186.5 451.5,187.9 449.5,179.9 455.5,178.4"/><polygon points="441.2,161.4 450.7,159.1 451.9,164.0 442.4,166.3"/><polygon points="452.5,167.6 454.3,174.9 445.3,177.1 443.5,169.8"/><polygon points="437.0,179.0 433.3,163.8 437.6,162.7 441.4,178.0"/><polygon points="455.8,143.0 465.3,149.2 467.4,151.4 458.4,153.6"/><polygon points="453.3,148.3 454.9,154.5 446.3,156.6 444.8,150.4"/><polygon points="447.4,137.6 451.2,140.0 452.4,144.8 444.0,146.8 442.1,138.9"/><polygon points="442.5,157.2 432.3,159.7 430.6,152.7 440.8,150.2"/><polygon points="429.6,148.7 428.0,142.4 438.3,139.9 439.9,146.2"/><polygon points="423.7,126.9 429.6,129.1 426.3,137.8"/><polygon points="432.5,130.6 443.2,134.6 443.4,134.8 429.6,138.1"/><polygon points="408.2,193.4 406.2,185.2 411.7,183.8"/><polygon points="406.1,181.8 403.4,170.9 414.2,174.8 412.2,180.3"/><polygon points="433.5,181.9 435.8,191.4 430.1,192.8 426.8,179.5"/><polygon points="426.3,193.9 419.2,195.6 416.6,185.2 424.9,188.2"/><polygon points="415.9,196.8 409.6,198.3 409.5,198.0 413.5,187.0"/><polygon points="415.7,181.2 417.8,175.6 422.6,177.4 424.3,184.3"/><polygon points="406.5,198.9 401.0,200.3 398.6,190.3 405.0,192.7"/><polygon points="397.4,200.9 389.7,202.7 389.0,201.7 393.8,188.8 394.6,189.1"/><polygon points="395.2,185.2 399.7,172.8 403.5,188.2"/><polygon points="419.9,154.6 405.0,158.2 408.0,150.2"/><polygon points="417.0,124.7 417.4,124.7 420.3,125.8 421.8,132.3 413.5,134.3"/><polygon points="422.4,135.7 423.5,140.3 410.3,143.6 412.3,138.2"/><polygon points="424.3,144.1 426.4,152.8 411.4,147.3"/><polygon points="428.0,159.9 432.1,176.9 423.0,173.5"/><polygon points="412.7,170.2 402.0,166.2 403.3,162.5 410.5,160.8"/><polygon points="418.9,172.1 417.1,171.5 414.4,160.1 424.2,157.7"/><polygon points="268.3,473.7 264.9,485.4 259.7,486.7 257.2,476.4"/><polygon points="253.7,460.1 254.9,458.8 270.7,463.3 269.3,468.3 256.5,471.4"/><polygon points="276.2,465.2 282.9,467.1 285.9,479.5 271.1,483.1"/><polygon points="238.6,475.3 249.6,463.5 251.7,472.1"/><polygon points="240.3,479.8 252.2,476.9 254.7,487.4 242.9,490.3"/><polygon points="231.8,493.8 232.0,482.3 233.5,480.7 235.6,480.1 238.5,492.1"/><polygon points="239.6,505.8 231.4,504.9 231.5,497.7 237.3,496.3"/><polygon points="259.4,504.0 244.2,504.9 242.1,496.3 256.6,492.8"/><polygon points="278.6,501.8 272.8,503.0 265.5,503.5 262.5,491.5 275.4,488.4"/><polygon points="291.3,499.7 284.3,501.2 280.7,486.5 287.7,484.8"/><polygon points="416.4,266.9 416.7,265.8 437.0,265.7 450.0,276.7 440.8,287.5"/><polygon points="412.3,283.5 414.1,275.2 436.2,293.9 431.4,299.6"/><polygon points="408.4,325.8 404.8,321.9 411.0,292.6 425.9,305.2"/><polygon points="422.2,340.5 414.2,332.0 430.8,312.4 439.6,319.9"/><polygon points="440.3,345.4 429.7,343.6 445.9,324.4 453.0,330.3"/><polygon points="477.8,351.4 448.6,346.6 458.4,335.0"/><polygon points="486.4,337.1 482.0,346.1 467.7,334.1 474.0,326.6"/><polygon points="495.5,314.0 490.8,327.6 489.1,331.0 478.3,321.9 489.3,308.8"/><polygon points="449.5,289.3 456.3,281.2 472.4,294.9 465.6,302.9"/><polygon points="451.4,319.1 435.9,306.0 444.9,295.3 460.4,308.4"/><polygon points="462.9,328.9 457.4,324.3 478.0,299.9 483.4,304.6"/><polygon points="418.4,346.3 409.7,362.0 404.9,359.4 414.5,342.2"/><polygon points="400.6,357.1 386.3,349.2 389.0,344.3 403.3,352.3"/><polygon points="407.9,334.3 411.6,338.2 405.7,348.7 401.2,346.2"/><polygon points="391.5,340.2 399.4,326.0 404.4,331.3 397.6,343.6"/><polygon points="382.0,346.0 365.5,336.9 368.0,332.0 379.8,329.9 382.5,345.1"/><polygon points="384.5,328.0 394.1,326.3 386.6,339.8"/><polygon points="350.0,366.0 356.5,353.2 362.4,356.2 355.8,369.2"/><polygon points="366.8,359.1 376.6,364.0 369.7,376.4 360.6,371.3"/><polygon points="359.6,348.7 362.9,342.3 382.4,353.2 379.3,358.8"/><polygon points="362.2,389.6 346.7,373.5 348.1,370.9 366.8,381.4"/><polygon points="376.6,398.8 369.1,398.3 365.1,394.2 367.0,390.7 377.8,396.7"/><polygon points="370.2,387.2 377.0,374.9 386.0,379.9 379.1,392.2"/><polygon points="396.5,385.5 389.1,398.7 381.9,398.3 390.8,382.3"/><polygon points="406.4,366.7 398.8,380.3 389.1,374.9 396.7,361.2"/><polygon points="383.9,372.8 379.2,370.2 387.5,355.3 392.2,357.9"/><polygon points="293.7,190.2 288.3,185.7 297.7,174.5 303.0,178.9"/><polygon points="300.3,170.8 306.6,163.3 312.5,168.2 306.2,175.7"/><polygon points="313.5,186.1 307.5,181.1 315.7,171.3 321.7,176.3"/><polygon points="330.4,183.4 322.1,193.5 316.9,189.2 325.3,179.2"/><polygon points="318.0,197.0 311.8,204.4 298.3,193.2 304.5,185.8"/><polygon points="319.7,148.2 323.6,159.5 313.3,163.0 309.7,160.1"/><polygon points="325.4,163.7 330.1,177.4 317.1,166.6"/><polygon points="312.1,149.5 305.1,157.8 296.9,151.0 303.9,142.6"/><polygon points="313.5,130.6 313.8,130.5 318.1,142.8 315.4,146.0 306.7,138.8"/><polygon points="285.5,141.4 295.0,136.9 304.6,133.9 293.0,147.7"/><polygon points="292.2,153.4 302.2,161.7 297.5,167.3 287.5,159.0"/><polygon points="293.6,171.0 284.5,181.8 275.6,174.4 284.7,163.5"/><polygon points="271.2,148.1 280.4,143.8 288.3,150.4 282.4,157.5"/><polygon points="270.9,154.7 279.0,161.5 271.0,171.0 262.9,164.2"/><polygon points="253.6,157.4 263.8,151.0 266.2,149.9 267.7,151.2 258.9,161.8"/><polygon points="259.2,168.2 268.0,175.6 260.2,185.0 251.4,177.6"/><polygon points="238.7,167.4 250.1,160.3 255.3,164.6 247.2,174.4"/><polygon points="250.1,183.9 256.6,189.2 247.2,200.5 238.6,193.3"/><polygon points="244.1,204.8 238.3,211.8 229.1,200.6 234.1,196.5"/><polygon points="230.4,173.1 234.3,170.1 246.3,180.2 240.3,185.1"/><polygon points="217.0,184.8 226.6,177.1 235.6,188.1 226.1,195.9"/><polygon points="250.0,218.8 242.3,216.4 241.7,215.6 251.8,203.5 258.3,208.8"/><polygon points="260.9,222.8 254.3,220.8 262.2,211.3 267.1,215.4"/><polygon points="283.8,229.6 265.4,224.0 270.2,218.3"/><polygon points="272.2,177.9 279.5,184.0 275.1,189.3 267.8,183.2"/><polygon points="271.6,192.4 261.4,204.5 255.3,199.4 265.4,187.3"/><polygon points="282.5,187.2 294.1,196.8 289.7,202.0 278.2,192.4"/><polygon points="287.2,205.7 284.6,208.8 272.5,198.7 275.1,195.6"/><polygon points="281.3,212.0 276.7,217.5 265.3,208.0 269.9,202.5"/><polygon points="295.9,224.7 292.4,228.8 290.4,229.2 280.4,220.8 284.8,215.4"/><polygon points="297.9,201.0 307.8,209.2 298.8,219.9 288.9,211.7"/><polygon points="251.8,364.9 258.2,362.4 262.9,374.5 256.5,377.0"/><polygon points="243.3,382.0 240.2,374.7 242.9,368.6 247.5,366.8 252.1,378.5"/><polygon points="257.8,397.7 249.8,396.3 245.7,386.6 255.5,382.8 260.9,396.5"/><polygon points="259.9,380.5 264.6,378.7 270.3,393.4 265.7,395.2"/><polygon points="274.5,402.0 263.4,400.0 272.4,396.5"/><polygon points="274.7,392.9 272.7,387.7 284.5,383.1 286.5,388.3"/><polygon points="292.2,404.1 278.6,401.7 276.7,396.9 287.8,392.6"/><polygon points="299.9,399.4 297.1,403.0 288.8,381.9 292.5,380.5"/><polygon points="316.3,370.4 319.8,374.5 316.0,379.4 308.3,373.5"/><polygon points="312.4,382.4 303.4,394.2 297.5,378.9 304.3,376.2"/><polygon points="296.1,347.4 299.4,351.2 290.3,359.0 287.1,350.9"/><polygon points="301.9,355.7 311.7,367.0 296.8,372.8 293.1,363.3"/><polygon points="292.0,375.4 284.3,378.4 279.7,366.5 287.3,363.5"/><polygon points="279.7,380.1 271.5,383.3 266.9,371.6 275.1,368.4"/><polygon points="265.2,366.5 263.1,361.1 282.9,353.4 285.0,358.8"/><polygon points="209.8,350.4 215.2,349.1 218.0,361.3 212.6,362.6"/><polygon points="201.0,365.2 200.7,352.6 205.8,351.5 208.5,363.4"/><polygon points="220.9,373.1 211.3,373.3 211.2,366.9 219.0,365.1"/><polygon points="207.9,373.7 200.5,373.9 200.4,369.0 207.8,367.3"/><polygon points="179.2,358.5 178.9,357.5 196.7,353.4 196.8,358.2"/><polygon points="185.3,374.0 182.5,374.0 179.8,362.2 185.1,362.1"/><polygon points="196.8,373.3 189.2,373.4 189.0,362.4 196.6,362.3"/><polygon points="233.7,372.6 225.0,372.8 223.0,364.1 231.2,362.2"/><polygon points="238.4,359.8 239.6,366.5 237.2,371.8 234.6,360.7"/><polygon points="228.1,358.6 222.0,360.0 219.2,348.3 225.4,346.9"/><polygon points="235.2,344.5 237.3,356.5 232.1,357.7 229.3,345.8"/><polygon points="222.0,343.8 214.4,345.6 213.0,339.5 220.6,337.7"/><polygon points="212.2,336.3 210.9,330.7 218.6,328.9 219.9,334.5"/><polygon points="232.0,326.1 233.2,332.6 223.4,334.3 222.1,328.4"/><polygon points="234.0,336.1 234.8,340.8 225.3,343.0 224.1,337.8"/><polygon points="229.7,314.7 231.0,322.1 220.5,324.6 218.8,317.2"/><polygon points="228.9,308.1 229.2,308.3 229.7,310.9 217.3,313.8 216.7,310.9"/><polygon points="216.3,325.6 210.6,326.9 207.5,313.7 213.2,312.4"/><polygon points="218.0,299.9 226.2,305.8 219.7,307.3"/><polygon points="216.5,305.5 217.1,307.8 205.9,310.4 205.4,308.1"/><polygon points="203.8,299.2 214.4,298.1 215.4,302.5 205.1,304.9"/><polygon points="206.5,327.2 207.9,333.1 198.1,335.4 196.7,329.5"/><polygon points="205.6,321.3 206.3,324.0 195.5,326.5 194.9,323.8"/><polygon points="194.6,336.3 190.3,337.3 187.7,325.9 191.9,324.9"/><polygon points="208.7,336.7 210.9,346.2 204.8,347.6 202.6,338.1"/><polygon points="201.0,348.3 193.6,350.1 191.4,340.9 198.9,339.1"/><polygon points="189.5,350.9 178.2,353.5 176.6,347.0 188.0,344.4"/><polygon points="175.7,342.9 174.1,336.0 185.4,333.4 187.0,340.2"/><polygon points="172.7,332.4 172.0,329.4 184.4,326.5 185.1,329.6"/><polygon points="169.5,318.0 168.1,312.1 176.7,310.1 178.0,316.0"/><polygon points="180.1,324.2 171.3,326.2 170.2,321.3 178.9,319.2"/><polygon points="185.4,308.3 186.9,322.3 183.5,323.1 180.3,309.5"/><polygon points="166.5,303.5 184.5,301.6 184.8,304.2 167.6,308.2"/><polygon points="203.2,313.9 204.2,318.1 190.8,321.3 190.1,315.3"/><polygon points="198.8,299.3 200.5,299.1 203.1,310.4 200.0,310.8"/><polygon points="188.6,301.0 195.5,300.3 196.5,310.5 189.7,311.2"/><polygon points="403.1,124.1 411.4,125.4 403.6,146.8 395.8,144.0"/><polygon points="384.4,121.9 388.5,121.8 396.2,123.1 389.5,141.5 378.6,137.5"/><polygon points="400.7,153.3 393.9,171.9 381.7,167.4 388.5,148.9"/><polygon points="375.1,165.8 368.6,163.5 376.0,143.4 382.4,145.8"/><polygon points="352.7,122.7 358.2,121.7 377.7,121.5 374.3,130.6"/><polygon points="352.1,129.5 371.5,136.6 367.8,146.8 348.4,139.7"/><polygon points="365.7,153.3 362.9,161.1 342.9,153.8 345.7,145.9"/><polygon points="320.6,130.4 327.0,128.3 340.7,126.0 344.6,127.4 336.2,150.3 326.2,146.6"/><polygon points="336.4,179.3 328.1,155.2 343.2,160.8"/><polygon points="391.0,179.1 384.5,196.9 370.1,191.5 376.6,173.8"/><polygon points="362.4,188.5 343.5,181.5 349.8,164.2 368.8,171.2"/><polygon points="263.4,355.5 256.2,358.3 252.0,347.7 261.7,346.0"/><polygon points="251.7,359.9 243.0,363.3 240.6,349.9 247.3,348.7"/><polygon points="240.2,344.4 238.9,337.2 258.8,333.7 260.1,340.9"/><polygon points="286.2,345.8 268.3,352.8 266.5,342.9 285.1,339.6"/><polygon points="265.1,337.5 264.2,332.3 283.7,328.9 284.6,334.0"/><polygon points="295.8,326.5 294.5,343.3 291.4,344.5 288.5,327.8"/><polygon points="275.6,304.4 288.1,312.9 280.6,324.0 279.1,324.3"/><polygon points="292.4,314.6 297.0,317.7 296.7,322.1 286.1,324.0"/><polygon points="248.2,317.2 250.3,329.2 237.8,331.4 235.7,319.4"/><polygon points="233.1,309.1 247.1,306.7 248.1,312.1 234.1,314.6"/><polygon points="271.7,315.8 273.3,325.0 256.1,328.0 254.5,318.8"/><polygon points="252.0,306.4 269.8,303.3 271.0,310.0 253.2,313.2"/><polygon points="161.2,308.4 165.4,326.7 147.4,330.8 143.2,312.6"/><polygon points="137.0,291.2 157.8,301.8 140.4,305.9"/><polygon points="126.6,308.7 129.0,301.1 132.4,293.9 135.4,306.7"/><polygon points="120.5,337.3 121.4,331.8 126.7,315.0 134.8,313.1 139.4,332.8"/><polygon points="116.9,354.1 118.3,345.3 137.7,340.8 139.6,348.8"/><polygon points="124.5,359.6 140.6,355.8 144.3,371.4 128.2,375.1"/><polygon points="114.9,379.6 114.9,361.3 115.1,360.4 118.1,359.7 122.3,377.9"/><polygon points="138.8,379.4 146.8,377.5 150.3,392.7 141.6,394.4"/><polygon points="116.0,390.2 116.0,385.6 132.8,381.7 135.2,394.7 117.4,397.9"/><polygon points="174.8,378.9 165.8,389.7 155.9,391.6 154.0,383.7"/><polygon points="172.5,356.9 175.8,371.3 153.7,376.5 150.3,362.0"/><polygon points="145.2,340.0 167.3,334.8 170.6,348.7 148.4,353.8"/><polygon points="503.7,278.6 499.8,298.8 497.4,305.7 475.4,287.2 491.9,267.6"/><polygon points="469.0,281.7 459.8,274.0 477.0,253.7 485.8,261.8"/><polygon points="453.4,268.6 444.6,261.2 463.5,241.0 470.9,247.9"/><polygon points="504.4,226.0 506.5,242.2 505.5,268.7 483.5,248.3"/><polygon points="498.8,203.2 502.9,215.3 477.4,242.5 469.2,234.9"/><polygon points="296.6,265.2 313.2,268.1 311.7,276.4 295.2,273.6"/><polygon points="310.8,282.1 309.4,290.1 292.8,287.3 294.2,279.2"/><polygon points="279.5,284.6 283.2,263.2 290.7,264.5 287.0,285.9"/><polygon points="289.8,292.2 294.9,293.1 292.1,309.2 282.7,302.8"/><polygon points="275.7,299.0 277.4,289.4 285.4,290.8 278.6,300.9"/><polygon points="300.2,294.3 308.4,295.7 306.0,309.8 299.0,313.5 297.1,312.2"/><polygon points="325.6,300.1 311.3,307.8 313.0,298.0"/><polygon points="331.6,286.2 330.0,295.8 314.7,293.2 316.4,283.6"/><polygon points="318.8,269.0 334.2,271.6 332.7,280.6 317.3,277.9"/><polygon points="284.2,257.0 286.1,245.9 304.0,249.0 295.0,258.9"/><polygon points="286.3,240.4 287.3,234.5 292.9,233.6 303.7,243.4"/><polygon points="310.8,250.6 325.8,264.2 302.1,260.2"/><polygon points="189.9,378.6 203.7,378.3 203.9,389.6 190.1,389.9"/><polygon points="204.4,395.1 204.6,402.6 189.9,402.8 189.7,395.4"/><polygon points="174.8,386.3 182.1,377.6 185.0,377.6 185.2,386.2"/><polygon points="175.9,402.9 170.6,392.8 172.1,391.0 184.4,390.8 184.6,402.7"/><polygon points="205.8,433.0 193.2,437.6 192.0,435.2 205.1,428.3 205.8,429.6"/><polygon points="190.7,430.6 185.3,420.3 196.5,414.4 202.0,424.7"/><polygon points="200.0,411.2 205.5,408.3 205.8,422.1"/><polygon points="182.4,415.8 178.3,408.0 198.0,407.6"/><polygon points="225.3,424.5 210.6,429.9 210.4,416.2 225.1,415.9"/><polygon points="240.2,414.5 237.9,421.1 230.3,423.9 230.1,414.7"/><polygon points="227.3,409.8 210.2,410.1 210.1,400.9 227.1,400.6"/><polygon points="244.9,399.8 241.3,410.1 232.8,410.2 232.6,400.0"/><polygon points="235.9,377.3 243.5,394.8 234.4,395.0 234.1,377.3"/><polygon points="229.5,395.2 224.5,395.3 224.2,377.4 229.2,377.3"/><polygon points="219.2,394.8 209.9,395.0 209.6,378.2 218.9,378.0"/><polygon points="153.9,470.6 145.5,463.0 137.9,452.1 154.7,452.9"/><polygon points="183.5,455.1 171.4,483.1 165.2,479.6 161.1,475.9 162.1,454.2"/></g><g fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M192.3,251.5 L227.9,257.4 L251.7,265.7" stroke="#6c604a" stroke-width="3.4"/><path d="M251.7,265.7 L279.5,266.1 L303.2,277.0" stroke="#6c604a" stroke-width="3.4"/><path d="M251.7,265.7 L252.1,303.6 L263.7,330.1" stroke="#6c604a" stroke-width="3.4"/><path d="M263.7,330.1 L268.9,355.8 L280.0,377.8" stroke="#6c604a" stroke-width="3.4"/><path d="M280.0,377.8 L272.4,403.1 L272.9,430.3" stroke="#6c604a" stroke-width="3.4"/><path d="M272.9,430.3 L246.7,439.1 L223.7,450.8" stroke="#6c604a" stroke-width="3.4"/><path d="M223.7,450.8 L209.6,467.1 L203.0,483.2" stroke="#6c604a" stroke-width="3.4"/><path d="M203.0,483.2 L181.3,470.8 L163.3,463.8" stroke="#6c604a" stroke-width="3.4"/><path d="M163.3,463.8 L160.2,449.9 L153.0,423.9" stroke="#6c604a" stroke-width="3.4"/><path d="M223.7,450.8 L215.9,431.2 L208.6,402.5" stroke="#6c604a" stroke-width="3.4"/><path d="M223.7,450.8 L242.0,468.6 L260.9,485.1" stroke="#6c604a" stroke-width="3.4"/><path d="M280.0,377.8 L309.5,390.9 L331.5,409.0" stroke="#6c604a" stroke-width="3.4"/><path d="M331.5,409.0 L355.7,422.6 L378.3,435.1" stroke="#6c604a" stroke-width="3.4"/><path d="M263.7,330.1 L235.9,337.0 L203.8,336.8" stroke="#6c604a" stroke-width="3.4"/><path d="M272.9,430.3 L296.5,451.5 L319.3,468.9" stroke="#6c604a" stroke-width="3.4"/><path d="M203.8,336.8 L172.5,338.7 L143.9,349.9" stroke="#6c604a" stroke-width="3.4"/><path d="M280.0,377.8 L309.4,359.7 L329.2,337.4" stroke="#6c604a" stroke-width="3.4"/><path d="M329.2,337.4 L354.6,351.7 L382.1,361.5" stroke="#6c604a" stroke-width="3.4"/><path d="M382.1,361.5 L406.1,373.6 L432.1,383.6" stroke="#6c604a" stroke-width="3.4"/><path d="M303.2,277.0 L315.4,250.8 L347.7,226.8" stroke="#6c604a" stroke-width="3.4"/><path d="M329.2,337.4 L349.3,314.1 L375.1,288.2" stroke="#6c604a" stroke-width="3.4"/><path d="M432.1,383.6 L451.2,350.7 L446.2,311.2" stroke="#6c604a" stroke-width="3.4"/><path d="M446.2,311.2 L469.0,287.2 L484.1,255.9" stroke="#6c604a" stroke-width="3.4"/><path d="M484.1,255.9 L469.5,228.4 L439.5,219.8" stroke="#6c604a" stroke-width="3.4"/><path d="M439.5,219.8 L440.8,192.3 L434.9,166.6" stroke="#6c604a" stroke-width="3.4"/><path d="M434.9,166.6 L401.4,162.4 L366.0,153.1" stroke="#6c604a" stroke-width="3.4"/><path d="M347.7,226.8 L313.9,206.8 L279.1,182.6" stroke="#6c604a" stroke-width="3.4"/><path d="M192.3,251.5 L148.8,293.9 L143.9,349.9" stroke="#6c604a" stroke-width="3.4"/><path d="M319.3,468.9 L289.9,483.2 L260.9,485.1" stroke="#6c604a" stroke-width="3.4"/><path d="M439.5,219.8 L392.4,225.1 L347.7,226.8" stroke="#6c604a" stroke-width="3.4"/><path d="M439.5,219.8 L404.5,253.5 L375.1,288.2" stroke="#6c604a" stroke-width="3.4"/><path d="M439.5,219.8 L425.9,261.6 L446.2,311.2" stroke="#6c604a" stroke-width="3.4"/><path d="M251.7,265.7 L263.0,225.5 L279.1,182.6" stroke="#6c604a" stroke-width="3.4"/><path d="M347.7,226.8 L366.5,257.9 L375.1,288.2" stroke="#6c604a" stroke-width="3.4"/><path d="M347.7,226.8 L387.9,203.5 L434.9,166.6" stroke="#6c604a" stroke-width="3.4"/><path d="M329.2,337.4 L315.7,307.8 L303.2,277.0" stroke="#6c604a" stroke-width="3.4"/><path d="M203.0,483.2 L229.8,494.0 L260.9,485.1" stroke="#6c604a" stroke-width="3.4"/><path d="M329.2,337.4 L127.1,300.4" stroke="#6c604a" stroke-width="4.8"/><path d="M329.2,337.4 L466.6,147.7" stroke="#6c604a" stroke-width="4.8"/><path d="M329.2,337.4 L364.9,473.5" stroke="#6c604a" stroke-width="4.8"/><path d="M192.3,251.5 L227.9,257.4 L251.7,265.7" stroke="#e4d9bc" stroke-width="1.8"/><path d="M251.7,265.7 L279.5,266.1 L303.2,277.0" stroke="#e4d9bc" stroke-width="1.8"/><path d="M251.7,265.7 L252.1,303.6 L263.7,330.1" stroke="#e4d9bc" stroke-width="1.8"/><path d="M263.7,330.1 L268.9,355.8 L280.0,377.8" stroke="#e4d9bc" stroke-width="1.8"/><path d="M280.0,377.8 L272.4,403.1 L272.9,430.3" stroke="#e4d9bc" stroke-width="1.8"/><path d="M272.9,430.3 L246.7,439.1 L223.7,450.8" stroke="#e4d9bc" stroke-width="1.8"/><path d="M223.7,450.8 L209.6,467.1 L203.0,483.2" stroke="#e4d9bc" stroke-width="1.8"/><path d="M203.0,483.2 L181.3,470.8 L163.3,463.8" stroke="#e4d9bc" stroke-width="1.8"/><path d="M163.3,463.8 L160.2,449.9 L153.0,423.9" stroke="#e4d9bc" stroke-width="1.8"/><path d="M223.7,450.8 L215.9,431.2 L208.6,402.5" stroke="#e4d9bc" stroke-width="1.8"/><path d="M223.7,450.8 L242.0,468.6 L260.9,485.1" stroke="#e4d9bc" stroke-width="1.8"/><path d="M280.0,377.8 L309.5,390.9 L331.5,409.0" stroke="#e4d9bc" stroke-width="1.8"/><path d="M331.5,409.0 L355.7,422.6 L378.3,435.1" stroke="#e4d9bc" stroke-width="1.8"/><path d="M263.7,330.1 L235.9,337.0 L203.8,336.8" stroke="#e4d9bc" stroke-width="1.8"/><path d="M272.9,430.3 L296.5,451.5 L319.3,468.9" stroke="#e4d9bc" stroke-width="1.8"/><path d="M203.8,336.8 L172.5,338.7 L143.9,349.9" stroke="#e4d9bc" stroke-width="1.8"/><path d="M280.0,377.8 L309.4,359.7 L329.2,337.4" stroke="#e4d9bc" stroke-width="1.8"/><path d="M329.2,337.4 L354.6,351.7 L382.1,361.5" stroke="#e4d9bc" stroke-width="1.8"/><path d="M382.1,361.5 L406.1,373.6 L432.1,383.6" stroke="#e4d9bc" stroke-width="1.8"/><path d="M303.2,277.0 L315.4,250.8 L347.7,226.8" stroke="#e4d9bc" stroke-width="1.8"/><path d="M329.2,337.4 L349.3,314.1 L375.1,288.2" stroke="#e4d9bc" stroke-width="1.8"/><path d="M432.1,383.6 L451.2,350.7 L446.2,311.2" stroke="#e4d9bc" stroke-width="1.8"/><path d="M446.2,311.2 L469.0,287.2 L484.1,255.9" stroke="#e4d9bc" stroke-width="1.8"/><path d="M484.1,255.9 L469.5,228.4 L439.5,219.8" stroke="#e4d9bc" stroke-width="1.8"/><path d="M439.5,219.8 L440.8,192.3 L434.9,166.6" stroke="#e4d9bc" stroke-width="1.8"/><path d="M434.9,166.6 L401.4,162.4 L366.0,153.1" stroke="#e4d9bc" stroke-width="1.8"/><path d="M347.7,226.8 L313.9,206.8 L279.1,182.6" stroke="#e4d9bc" stroke-width="1.8"/><path d="M192.3,251.5 L148.8,293.9 L143.9,349.9" stroke="#e4d9bc" stroke-width="1.8"/><path d="M319.3,468.9 L289.9,483.2 L260.9,485.1" stroke="#e4d9bc" stroke-width="1.8"/><path d="M439.5,219.8 L392.4,225.1 L347.7,226.8" stroke="#e4d9bc" stroke-width="1.8"/><path d="M439.5,219.8 L404.5,253.5 L375.1,288.2" stroke="#e4d9bc" stroke-width="1.8"/><path d="M439.5,219.8 L425.9,261.6 L446.2,311.2" stroke="#e4d9bc" stroke-width="1.8"/><path d="M251.7,265.7 L263.0,225.5 L279.1,182.6" stroke="#e4d9bc" stroke-width="1.8"/><path d="M347.7,226.8 L366.5,257.9 L375.1,288.2" stroke="#e4d9bc" stroke-width="1.8"/><path d="M347.7,226.8 L387.9,203.5 L434.9,166.6" stroke="#e4d9bc" stroke-width="1.8"/><path d="M329.2,337.4 L315.7,307.8 L303.2,277.0" stroke="#e4d9bc" stroke-width="1.8"/><path d="M203.0,483.2 L229.8,494.0 L260.9,485.1" stroke="#e4d9bc" stroke-width="1.8"/><path d="M329.2,337.4 L127.1,300.4" stroke="#e4d9bc" stroke-width="3.2"/><path d="M329.2,337.4 L466.6,147.7" stroke="#e4d9bc" stroke-width="3.2"/><path d="M329.2,337.4 L364.9,473.5" stroke="#e4d9bc" stroke-width="3.2"/></g><path d="M112.4,390.5 L112.4,361.1 M112.4,361.1 L117.4,330.8 M117.4,330.8 L124.3,309.1 M131.0,292.2 L141.2,270.5 M141.2,270.5 L159.2,241.7 M159.2,241.7 L180.9,214.6 M180.9,214.6 L205.7,189.8 M205.7,189.8 L233.2,167.8 M233.2,167.8 L262.9,149.2 M262.9,149.2 L294.0,134.5 M294.0,134.5 L326.0,124.2 M326.0,124.2 L357.9,118.7 M357.9,118.7 L388.8,118.3 M388.8,118.3 L417.8,123.1 M417.8,123.1 L444.0,133.0 M444.0,133.0 L458.9,142.8 M472.9,154.3 L484.9,166.7 M484.9,166.7 L498.5,189.2 M498.5,189.2 L507.1,214.6 M507.1,214.6 L510.8,242.1 M510.8,242.1 L509.6,270.7 M509.6,270.7 L503.8,299.9 M503.8,299.9 L493.9,328.9 M493.9,328.9 L480.0,357.3 M480.0,357.3 L462.7,384.5 M462.7,384.5 L442.2,410.2 M442.2,410.2 L418.8,433.9 M418.8,433.9 L392.9,455.1 M392.9,455.1 L372.5,468.5 M356.7,477.6 L335.1,488.5 M335.1,488.5 L304.4,499.5 M304.4,499.5 L273.2,506.1 M273.2,506.1 L242.6,507.9 M242.6,507.9 L213.4,504.7 M213.4,504.7 L186.5,496.3 M186.5,496.3 L162.7,483.1 M162.7,483.1 L143.0,465.2 M143.0,465.2 L127.8,443.3 M127.8,443.3 L117.5,418.2 M117.5,418.2 L112.4,390.5" fill="none" stroke="#3c3628" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><g fill="#3c3628" stroke="#1c1810" stroke-width="0.6"><circle cx="112.4" cy="390.5" r="2.6"/><circle cx="112.4" cy="361.1" r="2.6"/><circle cx="117.4" cy="330.8" r="2.6"/><circle cx="127.1" cy="300.4" r="2.6"/><circle cx="141.2" cy="270.5" r="2.6"/><circle cx="159.2" cy="241.7" r="2.6"/><circle cx="180.9" cy="214.6" r="2.6"/><circle cx="205.7" cy="189.8" r="2.6"/><circle cx="233.2" cy="167.8" r="2.6"/><circle cx="262.9" cy="149.2" r="2.6"/><circle cx="294.0" cy="134.5" r="2.6"/><circle cx="326.0" cy="124.2" r="2.6"/><circle cx="357.9" cy="118.7" r="2.6"/><circle cx="388.8" cy="118.3" r="2.6"/><circle cx="417.8" cy="123.1" r="2.6"/><circle cx="444.0" cy="133.0" r="2.6"/><circle cx="466.6" cy="147.7" r="2.6"/><circle cx="484.9" cy="166.7" r="2.6"/><circle cx="498.5" cy="189.2" r="2.6"/><circle cx="507.1" cy="214.6" r="2.6"/><circle cx="510.8" cy="242.1" r="2.6"/><circle cx="509.6" cy="270.7" r="2.6"/><circle cx="503.8" cy="299.9" r="2.6"/><circle cx="493.9" cy="328.9" r="2.6"/><circle cx="480.0" cy="357.3" r="2.6"/><circle cx="462.7" cy="384.5" r="2.6"/><circle cx="442.2" cy="410.2" r="2.6"/><circle cx="418.8" cy="433.9" r="2.6"/><circle cx="392.9" cy="455.1" r="2.6"/><circle cx="364.9" cy="473.5" r="2.6"/><circle cx="335.1" cy="488.5" r="2.6"/><circle cx="304.4" cy="499.5" r="2.6"/><circle cx="273.2" cy="506.1" r="2.6"/><circle cx="242.6" cy="507.9" r="2.6"/><circle cx="213.4" cy="504.7" r="2.6"/><circle cx="186.5" cy="496.3" r="2.6"/><circle cx="162.7" cy="483.1" r="2.6"/><circle cx="143.0" cy="465.2" r="2.6"/><circle cx="127.8" cy="443.3" r="2.6"/><circle cx="117.5" cy="418.2" r="2.6"/></g><g fill="#3c3628" stroke="#1c1810" stroke-width="0.8"><rect x="124.1" y="297.4" width="6.0" height="6.0"/><rect x="463.6" y="144.7" width="6.0" height="6.0"/><rect x="361.9" y="470.5" width="6.0" height="6.0"/></g><polygon points="329.2,330.9 330.8,335.2 335.4,335.4 331.8,338.3 333.1,342.7 329.2,340.1 325.4,342.7 326.7,338.3 323.1,335.4 327.6,335.2" fill="#3c3628" stroke="#f7f3ea" stroke-width="1.4" stroke-linejoin="round" paint-order="stroke"/><g font-family="Georgia, serif" font-size="8" text-anchor="middle"><text x="192.3" y="254.5" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Slums</text><text x="319.3" y="471.9" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Slums</text><text x="439.5" y="222.8" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Slums</text><text x="251.7" y="268.7" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="432.1" y="386.6" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="378.3" y="438.1" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="347.7" y="229.8" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="223.7" y="453.8" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="329.2" y="340.4" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Citadel</text><text x="203.0" y="486.2" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="331.5" y="412.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="375.1" y="291.2" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="153.0" y="426.9" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="272.9" y="433.3" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Slums</text><text x="434.9" y="169.6" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Slums</text><text x="260.9" y="488.1" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Temple</text><text x="446.2" y="314.2" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="382.1" y="364.5" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="279.1" y="185.6" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="280.0" y="380.8" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="203.8" y="339.8" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Slums</text><text x="366.0" y="156.1" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="263.7" y="333.1" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="143.9" y="352.9" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="484.1" y="258.9" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="303.2" y="280.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Temple</text><text x="208.6" y="405.5" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="163.3" y="466.8" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text></g><text x="315.0" y="20" text-anchor="middle" font-family="Georgia, serif" font-size="16" font-weight="bold" stroke="#f7f3ea" stroke-width="3" paint-order="stroke" fill="#23211c">Caldwingate</text></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="630" height="630" viewBox="0 0 630 630"><rect width="630" height="630" fill="#c9d2bb"/><polygon points="81.8,367.7 85.2,334.2 93.9,300.7 107.5,267.9 125.8,236.4 148.3,206.8 174.7,179.7 204.4,155.7 236.9,135.3 271.5,119.2 307.4,107.7 343.8,101.3 379.7,100.2 414.2,104.5 446.3,114.3 475.2,129.1 500.2,148.6 520.5,172.3 535.8,199.6 545.7,229.7 550.1,261.9 548.9,295.5 542.2,329.7 529.9,363.8 512.4,397.0 490.0,428.6 463.1,457.8 432.1,483.7 397.9,505.7 361.2,523.0 323.0,535.0 284.5,541.3 246.7,541.7 210.8,536.0 177.9,524.6 148.9,507.7 124.5,486.1 105.4,460.5 91.8,431.7 84.0,400.4" fill="#e6dcc0"/><g stroke="#4a4230" stroke-width="1" stroke-linejoin="round"><polygon points="137.2,221.4 148.3,206.8 174.7,179.7 195.1,163.2 204.9,173.1 217.7,215.1 196.3,253.2 192.7,254.4" fill="#d8cdb0"/><polygon points="319.2,444.5 349.3,451.3 361.7,488.1 300.7,496.8" fill="#c2b48f"/><polygon points="435.4,234.2 430.3,235.4 404.9,216.9 403.0,197.8 416.9,189.5 454.6,205.8" fill="#d8cdb0"/><polygon points="387.2,258.5 368.8,303.9 345.0,289.1 339.1,253.5 360.2,235.5 377.5,241.6" fill="#b9a98c"/><polygon points="495.4,144.9 500.2,148.6 520.5,172.3 535.8,199.6 540.4,213.5 494.2,223.6 466.9,200.2 468.2,187.2" fill="#c2b48f"/><polygon points="405.4,356.6 376.6,307.4 420.6,298.3 437.4,319.3 434.0,348.1" fill="#cdbf9e"/><polygon points="549.5,279.5 548.9,295.5 542.2,329.7 531.8,358.4 497.0,341.7 485.1,297.9 488.4,287.3" fill="#d8cdb0"/><polygon points="192.7,254.4 196.3,253.2 240.6,275.4 249.3,301.4 239.0,322.7 204.4,334.3 170.0,314.8 168.9,310.0" fill="#cdbf9e"/><polygon points="247.0,429.8 273.2,435.3 277.2,502.5 216.9,473.7" fill="#b9a98c"/><polygon points="249.3,301.4 240.6,275.4 268.1,244.8 297.0,250.4 298.4,298.9" fill="#c2b48f"/><polygon points="418.4,109.2 419.8,143.9 378.0,160.5 361.2,145.5 364.3,131.3" fill="#d8cdb0"/><polygon points="423.4,414.1 412.5,432.7 400.0,437.6 369.7,428.6 364.2,407.6 392.9,375.1" fill="#b3a684"/><polygon points="445.3,472.6 432.1,483.7 397.9,505.7 388.0,510.3 386.3,507.6 400.0,437.6 412.5,432.7" fill="#c2b48f"/><polygon points="298.4,298.9 297.0,250.4 305.3,244.9 339.1,253.5 345.0,289.1 300.5,300.5" fill="#dfd6c0"/><polygon points="349.3,451.3 319.2,444.5 302.2,422.7 304.1,415.6 334.0,395.0 364.2,407.6 369.7,428.6" fill="#c2b48f"/><polygon points="392.9,375.1 364.2,407.6 334.0,395.0 335.3,352.1 339.9,350.2 393.0,373.0" fill="#c2b48f"/><polygon points="468.2,187.2 466.9,200.2 454.6,205.8 416.9,189.5 428.1,160.2" fill="#dfd6c0"/><polygon points="204.9,476.7 185.3,527.1 177.9,524.6 148.9,507.7 124.5,486.1 111.9,469.3 178.5,449.3" fill="#cdbf9e"/><polygon points="310.1,213.6 305.3,244.9 297.0,250.4 268.1,244.8 256.6,218.1 274.3,191.1" fill="#cdbf9e"/><polygon points="425.2,280.8 415.4,262.1 430.3,235.4 435.4,234.2 476.1,267.0 476.2,267.5" fill="#d8cdb0"/><polygon points="284.0,541.3 246.7,541.7 210.8,536.0 185.3,527.1 204.9,476.7 216.9,473.7 277.2,502.5 284.0,510.5" fill="#dfd6c0"/><polygon points="273.2,435.3 247.0,429.8 230.9,399.3 272.9,365.0 273.8,365.1 304.1,415.6 302.2,422.7" fill="#b3a684"/><polygon points="489.1,139.9 495.4,144.9 468.2,187.2 428.1,160.2 426.6,151.9" fill="#cdbf9e"/><polygon points="504.6,408.1 490.0,428.6 468.9,451.5 444.9,408.0 459.5,391.3" fill="#b9a98c"/><polygon points="300.5,300.5 345.0,289.1 368.8,303.9 369.0,304.4 339.9,350.2 335.3,352.1 309.0,343.2" fill="#d9c08a"/><polygon points="376.6,307.4 405.4,356.6 393.0,373.0 339.9,350.2 369.0,304.4" fill="#cdbf9e"/><polygon points="368.8,303.9 387.2,258.5 415.4,262.1 425.2,280.8 420.6,298.3 376.6,307.4 369.0,304.4" fill="#d8cdb0"/><polygon points="387.2,258.5 377.5,241.6 404.9,216.9 430.3,235.4 415.4,262.1" fill="#cdbf9e"/><polygon points="105.5,272.8 107.5,267.9 125.8,236.4 137.2,221.4 192.7,254.4 168.9,310.0" fill="#d8cdb0"/><polygon points="361.2,145.5 378.0,160.5 380.7,185.9 352.0,205.8 334.3,198.1 324.8,161.6 328.6,155.2" fill="#cdbf9e"/><polygon points="195.1,163.2 204.4,155.7 236.9,135.3 265.4,122.0 274.6,170.2 273.0,173.2 204.9,173.1" fill="#c2b48f"/><polygon points="468.9,451.5 463.1,457.8 445.3,472.6 412.5,432.7 423.4,414.1 444.9,408.0" fill="#d8cdb0"/><polygon points="435.4,234.2 454.6,205.8 466.9,200.2 494.2,223.6 476.1,267.0" fill="#c2b48f"/><polygon points="388.0,510.3 361.2,523.0 323.0,535.0 284.5,541.3 284.0,541.3 284.0,510.5 300.7,496.8 361.7,488.1 386.3,507.6" fill="#c2b48f"/><polygon points="268.1,244.8 240.6,275.4 196.3,253.2 217.7,215.1 256.6,218.1" fill="#cdbf9e"/><polygon points="419.4,106.1 446.3,114.3 475.2,129.1 489.1,139.9 426.6,151.9 419.8,143.9 418.4,109.2" fill="#d8cdb0"/><polygon points="437.4,319.3 420.6,298.3 425.2,280.8 476.2,267.5 488.4,287.3 485.1,297.9" fill="#dfd6c0"/><polygon points="423.4,414.1 392.9,375.1 393.0,373.0 405.4,356.6 434.0,348.1 456.6,364.1 459.5,391.3 444.9,408.0" fill="#b3a684"/><polygon points="360.2,235.5 339.1,253.5 305.3,244.9 310.1,213.6 334.3,198.1 352.0,205.8" fill="#cdbf9e"/><polygon points="306.8,107.9 307.4,107.7 343.8,101.3 354.2,101.0 364.3,131.3 361.2,145.5 328.6,155.2" fill="#d8cdb0"/><polygon points="403.0,197.8 404.9,216.9 377.5,241.6 360.2,235.5 352.0,205.8 380.7,185.9" fill="#cdbf9e"/><polygon points="89.7,316.8 93.9,300.7 105.5,272.8 168.9,310.0 170.0,314.8 137.2,350.1" fill="#cdbf9e"/><polygon points="239.0,322.7 249.3,301.4 298.4,298.9 300.5,300.5 309.0,343.2 273.8,365.1 272.9,365.0" fill="#b3a684"/><polygon points="152.1,392.8 94.0,436.2 91.8,431.7 84.0,400.4 82.5,378.1 136.0,357.8" fill="#cdbf9e"/><polygon points="354.2,101.0 379.7,100.2 414.2,104.5 419.4,106.1 418.4,109.2 364.3,131.3" fill="#d8cdb0"/><polygon points="416.9,189.5 403.0,197.8 380.7,185.9 378.0,160.5 419.8,143.9 426.6,151.9 428.1,160.2" fill="#cdbf9e"/><polygon points="81.8,367.7 85.2,334.2 89.7,316.8 137.2,350.1 136.0,357.8 82.5,378.1" fill="#cdbf9e"/><polygon points="274.3,191.1 256.6,218.1 217.7,215.1 204.9,173.1 273.0,173.2" fill="#c2b48f"/><polygon points="265.4,122.0 271.5,119.2 306.8,107.9 328.6,155.2 324.8,161.6 274.6,170.2" fill="#d8cdb0"/><polygon points="309.0,343.2 335.3,352.1 334.0,395.0 304.1,415.6 273.8,365.1" fill="#cdbf9e"/><polygon points="178.5,449.3 111.9,469.3 105.4,460.5 94.0,436.2 152.1,392.8 179.9,404.4" fill="#c2b48f"/><polygon points="434.0,348.1 437.4,319.3 485.1,297.9 497.0,341.7 456.6,364.1" fill="#b9a98c"/><polygon points="361.7,488.1 349.3,451.3 369.7,428.6 400.0,437.6 386.3,507.6" fill="#d8cdb0"/><polygon points="170.0,314.8 204.4,334.3 204.0,391.3 179.9,404.4 152.1,392.8 136.0,357.8 137.2,350.1" fill="#b9a98c"/><polygon points="230.9,399.3 247.0,429.8 216.9,473.7 204.9,476.7 178.5,449.3 179.9,404.4 204.0,391.3" fill="#c2b48f"/><polygon points="531.8,358.4 529.9,363.8 512.4,397.0 504.6,408.1 459.5,391.3 456.6,364.1 497.0,341.7" fill="#c2b48f"/><polygon points="204.4,334.3 239.0,322.7 272.9,365.0 230.9,399.3 204.0,391.3" fill="#b9a98c"/><polygon points="277.2,502.5 273.2,435.3 302.2,422.7 319.2,444.5 300.7,496.8 284.0,510.5" fill="#b9a98c"/><polygon points="324.8,161.6 334.3,198.1 310.1,213.6 274.3,191.1 273.0,173.2 274.6,170.2" fill="#cdbf9e"/><polygon points="540.4,213.5 545.7,229.7 550.1,261.9 549.5,279.5 488.4,287.3 476.2,267.5 476.1,267.0 494.2,223.6" fill="#c2b48f"/></g><g fill="#7d6c52" stroke="#4a3e2e" stroke-width="0.5" stroke-linejoin="round"><polygon points="143.4,220.2 151.5,209.6 165.4,195.3 182.2,218.1 163.3,232.0"/><polygon points="187.1,224.9 198.6,240.5 193.5,249.7 193.2,249.8 171.1,236.7"/><polygon points="171.3,189.2 177.5,182.8 194.8,168.9 201.2,175.3 207.1,194.6 186.5,209.8"/><polygon points="209.7,203.2 213.2,214.6 203.2,232.5 191.5,216.6"/><polygon points="307.4,486.2 314.7,465.6 321.9,475.5"/><polygon points="331.9,489.3 308.2,492.7 325.2,480.2"/><polygon points="320.6,449.2 332.0,464.7 324.9,469.9 317.1,459.3"/><polygon points="327.4,449.0 347.2,453.5 347.3,453.8 336.6,461.6"/><polygon points="348.7,460.3 351.6,468.9 334.2,481.6 329.1,474.7"/><polygon points="354.2,474.8 357.9,485.7 338.5,488.5 337.5,487.1"/><polygon points="432.9,230.5 431.2,230.8 408.9,214.6 407.4,200.0 417.2,194.2 448.3,207.7"/><polygon points="348.0,281.4 343.6,255.2 349.4,250.2 363.8,269.7"/><polygon points="355.9,244.7 361.1,240.2 374.6,245.0 381.4,256.8 370.6,264.7"/><polygon points="378.2,269.6 366.8,297.7 352.3,288.7"/><polygon points="470.1,195.5 470.8,188.1 478.2,176.7 484.3,185.0"/><polygon points="492.9,197.3 479.6,207.1 472.4,200.9 487.4,189.8"/><polygon points="494.3,168.7 484.2,176.2 480.9,171.8 488.2,160.5"/><polygon points="496.0,148.7 498.3,150.5 506.2,159.7 498.2,165.5 491.3,156.2"/><polygon points="507.7,186.0 497.9,193.3 488.3,180.2 498.1,173.0"/><polygon points="509.6,164.1 518.1,174.0 520.0,177.4 513.0,182.6 502.9,169.0"/><polygon points="489.2,215.7 483.8,211.1 498.6,200.2 502.7,205.7"/><polygon points="511.6,217.3 494.9,221.0 492.9,219.3 506.0,209.7"/><polygon points="519.7,203.1 511.9,208.9 503.2,197.0 511.0,191.3"/><polygon points="523.0,182.3 530.4,195.4 524.2,200.0 515.3,187.9"/><polygon points="533.0,200.6 533.1,200.8 536.6,211.3 517.0,215.6 515.4,213.5"/><polygon points="386.1,318.4 380.8,309.3 399.7,305.4 401.1,307.3"/><polygon points="394.5,331.6 389.6,323.2 404.2,312.4 410.0,320.2"/><polygon points="406.0,304.4 419.4,301.6 425.4,309.2 415.1,316.7"/><polygon points="404.0,347.5 398.0,337.3 411.6,327.3 418.6,336.8"/><polygon points="406.6,353.7 406.3,353.2 422.8,341.0 427.6,347.4"/><polygon points="416.5,323.2 429.2,313.8 434.2,320.2 433.9,323.1 422.6,331.4"/><polygon points="434.1,329.3 432.1,345.8 424.9,336.0"/><polygon points="518.4,311.7 497.4,327.1 489.5,298.0 491.6,291.2 502.3,289.8"/><polygon points="545.1,284.3 544.8,292.2 525.2,306.7 511.9,288.6"/><polygon points="532.2,345.1 529.5,352.6 500.6,338.7 499.8,335.8 516.4,323.6"/><polygon points="542.9,304.0 538.1,328.5 535.6,335.5 523.1,318.6"/><polygon points="186.8,309.2 177.8,315.9 172.5,312.9 171.9,310.2 177.7,296.8"/><polygon points="182.2,293.7 180.0,290.7 186.5,275.5 193.6,285.2"/><polygon points="202.6,297.7 191.5,305.9 185.5,297.9 196.7,289.6"/><polygon points="195.0,256.9 196.1,256.6 208.6,262.9 192.8,274.5 189.4,269.9"/><polygon points="217.2,286.1 207.2,293.5 197.0,279.6 207.0,272.2"/><polygon points="214.9,265.9 233.1,275.0 222.7,282.6 211.9,268.0"/><polygon points="207.7,329.7 204.7,330.7 184.0,319.0 194.2,311.4"/><polygon points="204.8,315.7 198.7,307.4 208.7,300.0 214.8,308.3"/><polygon points="226.2,324.0 214.1,328.0 208.2,320.0 218.0,312.8"/><polygon points="230.8,299.5 220.8,306.9 213.4,296.9 223.4,289.5"/><polygon points="238.6,278.2 242.8,290.9 235.5,296.2 228.0,286.0"/><polygon points="239.1,316.2 237.0,320.5 231.8,322.2 223.9,311.6 231.5,306.0"/><polygon points="244.9,295.6 246.8,301.2 241.8,311.5 235.3,302.7"/><polygon points="249.9,462.3 231.4,475.9 223.1,472.0 239.5,448.1"/><polygon points="248.8,434.4 269.2,438.7 269.8,447.7 256.7,457.3 244.5,440.8"/><polygon points="268.6,494.0 239.5,480.1 251.7,471.1"/><polygon points="270.7,456.8 272.5,486.3 257.8,466.3"/><polygon points="249.0,292.3 243.6,276.1 246.6,272.7 256.8,286.5"/><polygon points="250.6,268.7 255.8,262.8 267.3,278.4 261.1,283.0"/><polygon points="251.8,297.8 270.7,283.9 279.9,296.4"/><polygon points="259.8,258.4 269.1,248.0 270.7,248.3 276.8,256.6 264.9,265.4"/><polygon points="280.3,261.0 285.5,268.1 273.4,277.1 268.2,270.0"/><polygon points="278.7,249.7 294.3,252.7 294.6,261.4 289.9,264.9"/><polygon points="295.0,290.9 295.1,295.9 288.0,296.2 277.2,281.6 284.3,276.4"/><polygon points="295.4,266.8 295.9,283.2 287.9,272.4"/><polygon points="402.1,146.4 378.8,155.7 365.9,144.0 368.0,134.4 387.4,126.4"/><polygon points="414.4,115.4 415.5,141.1 410.2,143.2 395.4,123.2"/><polygon points="370.0,421.7 366.4,408.1 367.9,406.4 376.0,417.3"/><polygon points="371.0,403.4 375.0,398.8 384.0,411.0 379.2,414.6"/><polygon points="377.8,395.3 384.3,387.9 389.4,394.8 381.6,400.5"/><polygon points="391.8,397.9 395.6,403.0 387.6,408.9 383.8,403.8"/><polygon points="387.0,384.8 392.9,378.2 398.1,384.9 390.9,390.2"/><polygon points="400.5,388.1 405.9,395.1 398.7,400.5 393.4,393.3"/><polygon points="384.6,430.8 371.4,426.9 371.2,425.9 379.2,420.1 386.2,429.6"/><polygon points="382.6,417.6 388.1,413.5 395.1,423.1 389.6,427.1"/><polygon points="403.5,434.1 399.9,435.5 389.4,432.4 397.7,426.2"/><polygon points="399.0,420.9 391.7,411.0 397.9,406.5 405.1,416.3"/><polygon points="401.7,403.8 408.5,398.8 415.9,408.3 408.9,413.4"/><polygon points="414.5,424.7 411.0,430.9 407.4,432.3 401.7,424.5 409.9,418.5"/><polygon points="421.5,414.2 417.1,421.7 412.7,415.6 418.9,411.0"/><polygon points="392.2,488.5 395.4,472.4 401.9,481.3"/><polygon points="410.0,494.1 396.3,502.9 390.0,505.9 392.0,495.2 404.2,486.3"/><polygon points="399.0,469.6 396.8,466.7 399.8,451.6 408.1,462.9"/><polygon points="401.0,445.0 402.1,439.3 411.8,435.6 415.7,440.4 403.9,449.0"/><polygon points="418.7,444.4 424.1,450.9 412.1,459.7 407.1,453.0"/><polygon points="424.2,484.6 415.5,490.2 403.4,473.8 411.7,467.6"/><polygon points="422.3,471.3 416.4,463.3 427.4,455.2 433.7,462.9"/><polygon points="441.8,472.3 430.6,481.7 429.9,482.1 425.3,475.7 437.3,466.9"/><polygon points="300.1,275.3 299.6,256.4 308.8,268.9"/><polygon points="301.2,292.7 300.9,281.4 311.5,273.6 317.0,281.1"/><polygon points="304.8,296.9 320.7,285.2 325.4,291.6"/><polygon points="301.3,250.5 305.7,247.5 318.8,250.8 307.6,259.1"/><polygon points="325.1,253.5 336.0,256.3 336.3,257.8 317.9,271.4 311.9,263.2"/><polygon points="339.5,287.4 330.8,289.7 321.3,276.8 328.1,271.8"/><polygon points="338.4,263.3 341.4,281.2 331.8,268.2"/><polygon points="317.0,436.2 305.9,422.0 307.1,417.7 312.7,413.8 324.9,430.3"/><polygon points="317.7,409.8 323.3,405.9 335.8,422.9 330.3,426.9"/><polygon points="335.9,446.0 320.5,442.5 319.5,441.3 327.9,435.1"/><polygon points="348.2,447.9 343.1,446.7 332.7,432.6 339.3,427.8 351.4,444.3"/><polygon points="328.0,402.5 333.1,399.0 345.5,415.9 340.6,419.6"/><polygon points="340.5,400.2 357.8,407.5 350.0,413.2"/><polygon points="361.3,433.4 355.6,439.7 344.2,424.2 350.9,419.2"/><polygon points="362.3,410.2 367.0,427.9 365.4,429.6 355.0,415.5"/><polygon points="336.7,369.2 337.1,354.0 344.2,363.6"/><polygon points="337.4,389.7 337.9,374.7 346.2,368.5 353.3,378.1"/><polygon points="345.1,356.0 369.1,366.3 358.5,374.2"/><polygon points="354.9,401.4 339.4,394.9 346.3,389.8"/><polygon points="371.1,394.6 363.3,403.4 351.6,387.6 360.9,380.7"/><polygon points="388.5,374.9 375.8,389.2 366.5,376.6 376.1,369.6"/><polygon points="425.8,190.7 420.0,188.2 424.9,175.3 432.6,185.7"/><polygon points="427.5,169.9 429.5,164.6 445.6,175.5 436.5,182.2"/><polygon points="451.2,201.4 431.4,192.8 440.2,186.4"/><polygon points="464.6,188.9 463.7,198.0 458.1,200.5 445.5,183.4 450.7,179.5"/><polygon points="126.0,483.2 116.8,470.9 128.2,467.4 135.0,476.6"/><polygon points="133.3,465.4 146.0,461.6 149.6,466.5 139.5,473.9"/><polygon points="139.5,495.7 130.0,487.3 139.9,480.0 147.3,490.0"/><polygon points="144.2,476.7 152.4,470.7 159.9,480.9 151.7,486.9"/><polygon points="152.3,460.6 162.8,457.5 172.6,470.7 164.3,476.8"/><polygon points="168.6,455.1 177.7,452.4 186.2,461.3 177.8,467.6"/><polygon points="158.5,510.1 150.5,505.4 143.8,499.5 152.1,493.4 162.3,507.3"/><polygon points="156.7,490.1 163.3,485.2 173.5,499.0 166.8,503.9"/><polygon points="185.8,516.6 183.3,522.9 179.3,521.5 164.7,513.1 176.8,504.3"/><polygon points="187.3,486.8 177.4,494.1 168.4,481.9 178.3,474.6"/><polygon points="201.1,477.0 192.5,483.3 183.1,470.7 190.1,465.5"/><polygon points="197.6,487.1 188.7,509.7 181.0,499.2"/><polygon points="265.0,230.1 260.0,218.4 265.8,209.5 275.4,222.5"/><polygon points="268.6,204.2 275.0,194.3 283.5,199.7 271.7,208.4"/><polygon points="287.8,203.0 295.4,207.8 280.2,219.1 275.2,212.3"/><polygon points="273.9,242.6 270.4,241.9 267.8,235.9 284.0,223.9 289.3,231.2"/><polygon points="300.3,245.0 296.5,247.6 281.1,244.7 293.4,235.6"/><polygon points="306.9,215.1 306.1,219.8 294.8,228.1 288.9,220.0 300.7,211.2"/><polygon points="306.1,226.1 303.7,241.7 297.1,232.7"/><polygon points="422.7,267.1 420.2,262.2 433.0,239.0 434.4,238.7 447.2,249.1"/><polygon points="427.3,275.9 426.7,274.6 454.0,254.5 467.5,265.4"/><polygon points="201.6,529.3 189.6,525.1 195.9,508.8 207.7,524.8"/><polygon points="198.0,501.6 204.5,485.1 211.9,495.1 199.8,504.1"/><polygon points="214.9,500.4 224.0,512.8 213.1,520.8 204.0,508.5"/><polygon points="207.3,479.2 216.6,476.9 228.6,482.6 216.4,491.6"/><polygon points="238.9,502.0 229.4,509.0 220.2,496.5 229.7,489.5"/><polygon points="234.7,484.9 252.1,493.2 243.9,499.2 233.9,485.6"/><polygon points="221.2,535.6 211.3,534.1 206.4,532.4 214.5,526.5"/><polygon points="227.3,535.3 219.2,524.3 229.3,516.9 237.4,527.9"/><polygon points="247.5,539.7 246.9,539.7 232.8,537.5 241.3,531.3"/><polygon points="238.5,519.8 233.6,513.2 245.8,504.2 250.6,510.8"/><polygon points="246.0,530.1 241.5,524.0 253.8,515.0 258.3,521.1"/><polygon points="249.5,501.0 257.1,495.4 265.0,499.2 254.1,507.2"/><polygon points="269.7,502.1 275.4,504.8 277.2,506.8 262.5,517.6 257.6,511.0"/><polygon points="269.8,538.5 252.7,538.7 249.5,534.3 260.7,526.1"/><polygon points="280.4,537.8 277.3,537.9 266.2,522.8 280.5,512.3"/><polygon points="236.3,406.1 232.9,399.7 237.2,396.2 241.6,402.2"/><polygon points="240.1,394.3 247.5,388.3 251.8,394.2 244.2,399.8"/><polygon points="243.7,418.8 238.6,409.1 244.4,404.8 250.9,413.6"/><polygon points="247.9,402.2 254.1,397.6 260.6,406.5 254.4,411.0"/><polygon points="250.2,385.8 253.6,383.0 260.3,392.0 256.7,394.7"/><polygon points="256.6,380.8 261.2,377.1 267.9,386.2 263.1,389.7"/><polygon points="270.1,389.9 274.6,396.0 264.1,403.6 259.7,397.5"/><polygon points="264.8,374.7 272.9,368.1 278.4,377.3 270.8,382.9"/><polygon points="280.9,381.0 285.3,388.3 278.3,393.5 273.2,386.6"/><polygon points="255.6,429.3 248.4,427.8 245.8,422.8 252.8,417.6 259.3,426.5"/><polygon points="255.6,414.9 258.7,412.7 265.8,422.4 262.8,424.7"/><polygon points="261.6,410.7 265.8,407.7 272.7,417.1 268.6,420.2"/><polygon points="270.2,433.2 259.5,430.9 265.4,426.6"/><polygon points="268.6,425.1 274.9,420.5 281.5,429.4 274.2,432.6"/><polygon points="268.6,405.4 275.7,400.2 279.4,405.3 272.3,410.5"/><polygon points="281.5,408.1 285.3,413.3 278.2,418.5 274.4,413.3"/><polygon points="278.8,398.2 287.5,391.7 290.7,396.9 282.3,403.0"/><polygon points="292.7,400.1 295.9,405.4 288.2,411.1 284.5,406.1"/><polygon points="294.5,423.7 285.5,427.6 280.9,421.4 288.6,415.7"/><polygon points="297.7,408.8 302.0,415.9 300.5,421.3 298.5,422.1 291.9,413.1"/><polygon points="445.2,168.4 430.6,158.5 429.8,154.1 437.8,152.5 448.0,166.4"/><polygon points="444.0,151.5 458.5,148.7 463.2,155.0 452.4,162.9"/><polygon points="468.6,181.8 467.4,183.5 449.9,171.7 457.2,166.3"/><polygon points="475.5,171.2 471.6,177.2 461.3,163.1 466.7,159.2"/><polygon points="481.7,143.6 468.4,153.4 463.7,147.1"/><polygon points="489.7,144.2 491.4,145.6 478.4,165.7 472.1,157.2"/><polygon points="455.9,420.6 449.3,408.5 458.9,397.4 468.9,411.0"/><polygon points="482.6,430.5 469.7,444.4 460.1,427.1 473.1,417.5"/><polygon points="498.1,410.1 488.2,424.0 470.3,399.7"/><polygon points="356.1,351.8 353.4,353.7 343.0,349.2 348.2,341.1"/><polygon points="368.1,341.8 359.7,348.0 351.7,337.2 357.8,327.7"/><polygon points="374.7,309.6 377.5,314.3 362.9,325.0 360.8,322.3 370.1,307.7"/><polygon points="380.1,319.5 385.5,328.8 373.0,338.1 366.6,329.4"/><polygon points="371.6,360.7 359.5,355.5 372.6,345.8 379.3,355.0"/><polygon points="391.6,370.2 376.1,363.5 383.0,358.5"/><polygon points="388.7,334.4 396.0,346.9 386.2,354.1 377.7,342.5"/><polygon points="399.5,351.3 402.5,356.5 394.7,366.9 388.9,359.0"/><polygon points="374.1,301.9 384.6,276.1 400.8,298.1 377.0,303.0"/><polygon points="388.3,267.0 389.9,263.1 412.7,266.0 420.7,281.3 417.2,294.7 409.8,296.2"/><polygon points="387.8,252.6 381.8,242.3 393.7,231.5 401.7,242.4"/><polygon points="393.1,256.4 405.9,247.0 414.3,258.4 413.9,259.1"/><polygon points="398.6,226.9 405.1,221.0 419.2,231.3 407.9,239.6"/><polygon points="424.7,234.6 426.8,236.1 417.3,253.2 411.0,244.7"/><polygon points="110.8,271.0 111.3,269.8 128.5,240.1 150.2,269.5 131.6,283.2"/><polygon points="133.7,233.0 138.3,226.9 176.9,249.9 156.9,264.5"/><polygon points="170.8,294.7 166.9,303.9 139.5,287.8 156.5,275.3"/><polygon points="184.7,254.5 187.4,256.1 174.7,285.8 163.3,270.3"/><polygon points="332.9,179.0 328.5,162.1 330.9,158.1 335.7,156.6 345.4,169.8"/><polygon points="336.2,193.5 334.2,186.0 349.5,174.7 353.8,180.5"/><polygon points="363.5,193.9 351.6,202.2 341.1,197.6 357.4,185.6"/><polygon points="360.6,148.2 361.4,148.9 345.8,160.4 341.1,154.0"/><polygon points="365.0,153.4 372.2,159.8 355.5,172.1 349.9,164.5"/><polygon points="376.1,185.5 368.7,190.6 358.9,177.3 366.1,172.0"/><polygon points="376.2,163.4 377.9,179.6 369.6,168.3"/><polygon points="199.2,163.4 206.0,157.9 208.1,156.6 217.1,168.8 214.9,170.4 206.0,170.4"/><polygon points="213.4,153.8 224.7,146.7 232.3,157.1 221.6,165.0"/><polygon points="236.2,161.3 243.1,170.7 223.5,170.6"/><polygon points="229.2,143.2 238.1,137.6 241.1,136.2 245.7,142.4 234.7,150.6"/><polygon points="248.8,146.4 253.2,152.4 242.0,160.7 237.5,154.7"/><polygon points="247.3,134.3 262.8,127.0 265.7,141.9 257.4,148.1"/><polygon points="264.2,170.4 249.5,170.4 245.4,164.7 254.9,157.7"/><polygon points="267.7,148.2 271.8,169.8 271.4,170.5 271.1,170.5 259.2,154.4"/><polygon points="426.8,443.4 417.6,432.3 426.2,417.7 442.8,412.9 450.1,426.2"/><polygon points="463.7,450.9 460.2,454.7 445.9,466.7 432.1,449.9 454.2,433.7"/><polygon points="440.1,233.5 450.1,218.6 459.9,231.9 448.5,240.3"/><polygon points="453.5,212.6 456.5,208.1 466.4,203.6 472.2,208.5 458.1,218.9"/><polygon points="476.6,212.2 481.7,216.6 465.3,228.7 461.4,223.4"/><polygon points="461.6,251.3 453.4,244.7 467.7,234.2 473.8,242.4"/><polygon points="480.3,250.3 475.1,262.8 465.7,255.3 477.6,246.6"/><polygon points="486.1,220.9 490.3,224.5 482.4,243.4 473.0,230.6"/><polygon points="286.2,533.7 286.2,516.7 294.3,527.7"/><polygon points="288.2,510.8 295.1,505.1 305.2,518.8 298.0,524.1"/><polygon points="315.5,533.1 290.3,537.2 308.6,523.8"/><polygon points="309.3,513.6 300.3,501.5 302.2,500.0 319.9,497.5 323.9,502.9"/><polygon points="316.6,524.6 312.5,519.0 328.1,507.6 332.2,513.2"/><polygon points="341.7,526.1 322.4,532.2 322.3,532.2 320.0,529.2 335.5,517.8"/><polygon points="338.2,511.3 327.1,496.2 339.0,494.5 346.8,505.0"/><polygon points="345.0,493.0 360.9,490.8 363.9,493.1 351.7,502.1"/><polygon points="362.9,518.6 360.0,520.0 347.6,523.9 342.1,516.4 354.5,507.2"/><polygon points="382.8,509.1 368.9,515.6 359.9,503.4 368.1,497.5"/><polygon points="203.8,244.1 212.3,229.1 216.5,234.8"/><polygon points="212.2,257.5 201.8,252.3 218.7,239.9 224.8,248.2"/><polygon points="241.2,270.1 239.9,271.6 218.5,260.8 228.8,253.2"/><polygon points="218.4,229.8 214.9,225.1 219.1,217.6 229.6,218.5 231.1,220.4"/><polygon points="230.1,244.4 222.4,233.9 233.8,225.4 241.6,236.0"/><polygon points="237.0,219.5 254.6,220.9 256.6,225.3 246.7,232.6"/><polygon points="253.3,256.1 245.5,264.9 234.2,249.6 243.5,242.8"/><polygon points="264.5,244.2 258.0,251.5 248.5,238.7 258.8,231.1"/><polygon points="422.5,111.3 444.8,118.0 445.2,118.2 423.5,134.3"/><polygon points="453.3,122.5 473.0,132.6 479.2,137.5 428.2,147.3 424.9,143.4"/><polygon points="428.6,304.2 423.4,297.7 426.5,286.0 435.9,298.9"/><polygon points="430.8,282.4 443.1,279.2 449.7,288.2 440.2,295.2"/><polygon points="438.1,316.1 431.9,308.3 440.7,301.8 448.0,311.7"/><polygon points="445.2,298.8 453.3,292.8 462.3,305.0 452.9,309.3"/><polygon points="449.6,277.7 474.7,271.1 475.4,272.3 456.1,286.5"/><polygon points="475.5,299.3 467.6,302.8 459.2,291.5 466.1,286.4"/><polygon points="478.8,277.2 485.3,287.7 482.8,295.9 480.6,296.8 470.6,283.2"/><polygon points="398.3,378.8 395.0,374.5 395.0,373.7 400.8,366.1 405.9,373.1"/><polygon points="403.6,362.8 406.8,358.6 410.7,357.4 416.4,365.1 409.2,370.4"/><polygon points="408.9,391.9 401.1,381.9 406.6,377.9 414.1,388.1"/><polygon points="409.6,375.2 419.1,368.1 421.8,371.8 412.3,378.9"/><polygon points="424.0,374.8 427.0,379.0 417.6,385.9 414.5,381.8"/><polygon points="415.4,356.1 433.6,350.7 434.7,351.5 420.0,362.4"/><polygon points="425.1,370.0 422.2,366.0 432.1,358.7 435.0,362.7"/><polygon points="440.0,369.4 430.0,376.8 427.3,373.1 437.3,365.7"/><polygon points="438.8,354.1 449.7,361.9 443.1,366.8 435.5,356.5"/><polygon points="417.5,403.6 411.1,395.3 415.7,391.9 421.9,400.3"/><polygon points="418.7,389.7 423.1,386.4 429.4,394.9 424.9,398.2"/><polygon points="424.1,412.1 419.7,406.4 425.0,402.5 430.7,410.2"/><polygon points="427.9,400.4 431.5,397.7 439.0,407.8 434.3,409.1"/><polygon points="426.9,384.4 434.4,378.9 440.9,387.7 433.4,393.2"/><polygon points="443.7,391.5 449.4,399.2 443.6,405.9 442.8,406.1 436.2,397.1"/><polygon points="438.0,376.0 444.5,371.2 450.9,379.9 444.4,384.7"/><polygon points="447.6,368.5 453.4,364.2 454.8,365.1 456.0,376.6 454.4,377.8"/><polygon points="456.3,381.4 457.2,390.6 452.6,395.9 446.9,388.3"/><polygon points="309.1,241.6 313.1,215.8 324.0,230.6"/><polygon points="338.6,249.9 338.3,250.2 315.8,244.5 328.0,235.5"/><polygon points="329.2,226.4 318.7,212.1 328.7,205.7 338.7,219.4"/><polygon points="333.3,201.9 334.5,201.1 349.8,207.7 350.8,211.4 344.0,216.4"/><polygon points="350.0,240.3 343.2,246.1 332.7,231.8 339.8,226.5"/><polygon points="357.2,234.5 354.5,236.9 344.2,222.9 352.3,216.9"/><polygon points="312.9,111.0 344.2,105.5 351.2,105.2 352.2,108.5 322.0,130.8"/><polygon points="355.1,116.9 360.0,131.6 357.7,142.2 330.9,150.1 325.6,138.6"/><polygon points="359.3,221.2 355.3,207.0 362.0,202.4 370.0,213.3"/><polygon points="382.9,231.9 376.7,237.6 363.1,232.8 361.6,227.4 373.3,218.8"/><polygon points="376.0,211.4 366.9,199.2 376.1,192.8 385.0,204.8"/><polygon points="380.0,189.1 380.8,188.5 396.8,197.1 389.7,202.3"/><polygon points="394.8,222.2 388.0,228.4 379.2,216.3 386.5,210.9"/><polygon points="400.6,200.3 402.2,215.8 398.9,218.8 390.7,207.6"/><polygon points="95.8,302.6 96.1,301.5 102.9,285.1 108.8,293.1"/><polygon points="92.5,315.7 94.0,310.0 97.8,307.2 106.4,318.9 101.8,322.3"/><polygon points="102.4,304.4 111.5,297.7 119.5,308.6 110.4,315.3"/><polygon points="104.9,280.0 106.5,276.0 119.2,283.4 111.5,289.0"/><polygon points="123.4,287.1 137.2,295.2 124.3,304.6 115.6,292.8"/><polygon points="118.0,333.4 106.4,325.2 115.7,318.4 123.7,329.2"/><polygon points="120.3,315.2 129.8,308.2 137.6,318.7 128.0,325.7"/><polygon points="139.7,343.6 136.8,346.7 122.5,336.6 130.4,330.9"/><polygon points="149.0,333.6 143.3,339.7 134.5,327.8 141.1,322.9"/><polygon points="143.3,298.6 155.7,305.9 142.7,315.4 134.9,304.8"/><polygon points="161.6,309.3 166.1,312.0 166.5,313.8 152.6,328.9 146.4,320.5"/><polygon points="241.1,322.4 246.7,310.7 251.2,316.7 241.9,323.5"/><polygon points="248.8,307.1 250.6,303.4 256.9,303.1 261.2,308.9 254.1,314.2"/><polygon points="246.7,329.5 244.1,326.3 253.9,319.1 256.3,322.4"/><polygon points="261.5,329.6 252.3,336.3 249.0,332.2 258.3,325.4"/><polygon points="263.7,312.6 270.8,322.2 264.6,326.8 257.4,317.2"/><polygon points="261.5,302.6 276.3,301.9 266.4,309.2"/><polygon points="279.3,305.0 284.5,312.0 274.5,319.3 269.4,312.3"/><polygon points="282.6,301.8 297.7,301.0 298.6,301.7 298.6,302.0 288.3,309.6"/><polygon points="263.3,350.0 254.7,339.3 258.1,336.7 266.3,347.8"/><polygon points="261.5,334.5 266.1,331.1 274.0,341.8 269.3,345.2"/><polygon points="269.4,328.6 279.3,321.3 282.7,325.9 272.8,333.2"/><polygon points="285.2,328.9 287.6,332.1 277.3,339.7 274.9,336.4"/><polygon points="268.8,356.7 265.7,352.9 275.8,345.5 278.7,349.4"/><polygon points="284.0,356.6 273.7,363.0 271.1,359.7 280.9,352.4"/><polygon points="281.8,347.1 278.9,343.2 289.7,335.3 292.5,339.1"/><polygon points="298.5,347.3 287.2,354.3 284.2,350.3 294.9,342.5"/><polygon points="286.4,324.4 282.4,318.9 290.0,313.3 294.0,318.8"/><polygon points="300.5,327.6 293.0,333.2 288.7,327.4 296.2,321.9"/><polygon points="299.5,306.5 303.1,324.3 293.3,311.1"/><polygon points="304.1,330.1 306.5,342.2 302.0,344.9 295.7,336.3"/><polygon points="87.2,402.7 86.5,400.0 85.4,382.3 95.7,396.4"/><polygon points="89.4,378.6 98.0,375.4 107.0,387.7 99.9,392.9"/><polygon points="105.4,423.6 95.3,431.1 95.0,430.5 89.4,408.4 92.5,406.1"/><polygon points="103.2,410.0 97.4,402.1 110.5,392.5 116.3,400.3"/><polygon points="124.1,410.4 110.6,420.5 106.3,414.7 119.9,404.7"/><polygon points="115.2,387.9 104.6,373.5 118.2,368.4 126.5,379.6"/><polygon points="123.7,365.4 134.6,361.2 139.2,371.2 132.0,376.6"/><polygon points="137.2,400.0 128.4,406.5 118.8,393.5 127.6,387.0"/><polygon points="148.4,391.8 142.2,396.5 132.4,383.2 141.4,376.6"/><polygon points="359.9,105.0 379.5,104.4 409.8,108.2 366.9,125.7"/><polygon points="383.5,180.3 381.6,162.8 391.2,159.0 398.6,169.1"/><polygon points="403.5,194.7 402.9,195.0 385.7,185.9 393.1,180.5"/><polygon points="413.6,188.3 407.7,191.8 397.3,177.7 402.8,173.6"/><polygon points="396.8,156.1 406.3,152.3 413.9,162.6 405.9,168.5"/><polygon points="411.0,150.0 419.1,146.7 424.4,152.9 424.8,155.2 418.3,160.0"/><polygon points="424.5,161.8 416.4,182.8 409.2,173.0"/><polygon points="85.8,356.9 88.1,334.7 88.1,334.6 97.9,348.0"/><polygon points="84.0,367.7 84.4,364.3 88.0,361.6 95.0,371.1 84.5,375.0"/><polygon points="92.5,359.2 101.4,352.6 110.2,364.6 99.5,368.6"/><polygon points="89.0,327.6 90.9,320.1 100.5,326.8 92.7,332.5"/><polygon points="104.0,330.3 115.0,338.0 103.8,346.2 96.3,336.0"/><polygon points="125.1,358.8 115.8,362.4 107.3,350.9 115.1,345.2"/><polygon points="120.0,340.9 134.6,351.2 133.9,356.1 130.6,357.4 119.0,341.6"/><polygon points="211.8,187.1 208.3,175.6 223.1,175.7 224.6,177.6"/><polygon points="218.1,208.1 213.1,192.1 215.5,190.3 224.9,203.1"/><polygon points="219.9,187.7 227.5,182.1 236.3,194.1 228.8,199.6"/><polygon points="235.9,214.4 219.3,213.1 219.3,212.8 229.3,205.4"/><polygon points="251.7,214.9 241.9,214.2 233.7,203.0 239.7,198.6"/><polygon points="241.0,189.8 231.4,176.7 258.8,176.7"/><polygon points="262.9,202.5 256.9,211.7 244.9,195.4 253.2,189.3"/><polygon points="271.3,190.3 266.8,197.2 258.0,185.3 270.3,176.3"/><polygon points="270.2,124.4 273.0,123.1 304.5,113.0 308.3,121.1 274.3,146.1"/><polygon points="296.7,162.8 277.5,166.1 275.4,155.0 285.5,147.6"/><polygon points="311.9,128.9 323.9,154.9 322.2,157.8 304.9,160.8 292.1,143.4"/><polygon points="284.0,375.9 278.2,366.2 292.1,357.5 298.1,365.5"/><polygon points="290.6,387.5 286.9,381.3 301.9,370.2 306.2,376.0"/><polygon points="297.3,398.5 293.7,392.5 309.6,380.7 313.7,386.4"/><polygon points="322.5,398.9 305.1,410.9 300.8,403.6 317.1,391.6"/><polygon points="303.2,362.5 296.9,354.0 307.8,347.1 313.6,354.9"/><polygon points="323.0,367.9 312.7,375.4 306.4,366.9 316.7,359.3"/><polygon points="315.6,348.4 332.4,354.1 332.2,361.0 327.5,364.6"/><polygon points="331.3,369.5 330.6,393.1 328.0,394.9 317.0,380.0"/><polygon points="106.5,455.0 98.2,437.3 105.0,432.2 116.4,447.7"/><polygon points="109.5,428.0 124.8,416.6 128.5,421.6 113.1,433.0"/><polygon points="131.7,426.4 136.7,433.2 121.8,444.2 116.8,437.4"/><polygon points="129.5,460.9 113.1,465.9 109.3,460.8 122.3,451.2"/><polygon points="132.4,455.0 127.0,447.7 140.3,437.9 145.7,445.2"/><polygon points="153.4,454.5 135.2,460.0 134.8,459.5 149.3,448.9"/><polygon points="135.3,420.9 129.8,413.4 144.8,402.2 150.4,409.7"/><polygon points="142.2,430.9 138.5,425.9 154.3,414.3 158.0,419.3"/><polygon points="150.2,398.4 152.6,396.7 174.9,406.0 162.5,415.1"/><polygon points="153.6,446.7 145.2,435.3 152.2,430.2 160.5,441.6"/><polygon points="156.1,427.1 161.8,422.9 170.4,434.6 164.7,438.8"/><polygon points="175.9,447.3 158.1,452.7 156.8,450.9 173.2,438.8 176.0,442.6"/><polygon points="166.2,420.1 176.9,412.2 176.2,433.7"/><polygon points="438.4,346.1 441.2,322.2 449.9,318.3 459.2,330.8"/><polygon points="464.1,337.5 473.4,350.1 456.8,359.2 445.5,351.2"/><polygon points="457.5,314.7 482.5,303.5 484.7,311.6 465.5,325.7"/><polygon points="486.9,320.1 492.2,339.6 480.7,346.0 470.5,332.2"/><polygon points="360.5,471.5 354.0,452.3 371.0,433.3 395.1,440.5 393.9,446.9"/><polygon points="365.2,485.5 363.3,479.9 391.5,459.1 383.5,500.0"/><polygon points="168.4,354.1 146.4,370.3 140.4,357.2 141.2,352.0 155.5,336.6"/><polygon points="170.8,320.1 195.5,334.1 175.1,349.1 161.3,330.3"/><polygon points="155.0,389.1 150.0,378.1 174.8,359.8 181.8,369.4"/><polygon points="197.1,390.2 179.6,399.7 163.8,393.1 186.8,376.2"/><polygon points="200.1,341.2 199.9,379.8 181.5,354.9"/><polygon points="181.8,423.4 182.3,405.9 184.1,404.9 192.1,415.8"/><polygon points="192.9,444.8 184.2,451.2 181.3,448.2 181.9,429.9 181.9,429.9"/><polygon points="205.5,435.1 197.5,441.0 186.9,426.7 194.9,420.8"/><polygon points="196.6,411.9 189.9,402.8 204.4,395.0 215.2,398.2"/><polygon points="221.4,423.0 210.7,430.8 200.8,417.4 211.5,409.5"/><polygon points="228.7,401.9 234.8,413.5 227.0,419.3 216.7,405.3 223.4,400.3"/><polygon points="197.4,465.2 187.7,455.2 195.1,449.8 203.3,460.9"/><polygon points="199.9,446.9 210.7,439.0 218.2,449.2 207.5,457.1"/><polygon points="224.1,457.5 214.9,470.9 205.9,473.2 201.9,469.0 221.8,454.3"/><polygon points="233.5,443.8 227.9,451.9 215.8,435.4 223.2,429.9"/><polygon points="237.9,418.8 243.5,429.6 237.3,438.6 228.0,426.1"/><polygon points="460.7,380.0 459.1,365.4 463.0,363.3 470.2,373.0"/><polygon points="469.6,392.1 462.0,389.3 461.6,385.7 473.0,377.4 478.8,385.4"/><polygon points="467.6,361.0 479.2,354.6 484.5,361.7 473.9,369.5"/><polygon points="487.6,366.1 493.7,374.4 483.3,382.1 477.2,373.8"/><polygon points="492.1,400.9 474.9,394.6 483.0,388.6"/><polygon points="494.0,395.0 487.3,385.9 497.0,378.8 503.7,387.9"/><polygon points="510.3,396.1 503.7,405.3 500.0,403.9 496.6,399.4 507.0,391.7"/><polygon points="497.9,369.6 485.1,352.3 493.9,347.4 505.9,363.7"/><polygon points="500.4,346.1 519.2,355.1 511.3,360.9"/><polygon points="519.0,377.5 512.5,389.8 501.8,375.2 511.8,367.8"/><polygon points="528.9,359.6 527.7,362.8 522.5,372.7 515.8,363.7 524.3,357.4"/><polygon points="207.8,376.9 207.9,348.4 221.5,366.8"/><polygon points="237.1,388.8 230.0,394.6 208.2,388.1 208.3,386.3 225.7,373.4"/><polygon points="209.4,337.1 237.5,327.6 244.6,336.4 221.5,353.5"/><polygon points="250.9,377.7 243.6,383.7 226.3,360.2 233.9,354.6"/><polygon points="249.9,343.0 267.1,364.4 257.3,372.4 240.6,349.8"/><polygon points="278.3,468.6 276.9,444.0 289.1,460.6"/><polygon points="280.8,501.1 279.3,476.3 279.6,476.1 294.9,496.8 284.4,505.3"/><polygon points="285.2,471.7 292.8,466.1 303.0,480.0 299.2,490.8"/><polygon points="280.3,436.6 300.9,427.6 307.2,435.7 289.3,448.9"/><polygon points="312.1,442.0 314.7,445.2 305.6,471.0 294.1,455.3"/><polygon points="276.7,186.0 275.8,173.8 276.4,172.7 287.7,170.8 291.1,175.4"/><polygon points="286.8,195.6 279.4,190.9 294.3,179.9 299.1,186.5"/><polygon points="314.1,207.3 310.1,209.9 292.5,198.8 302.4,191.5"/><polygon points="314.9,177.8 305.4,184.8 294.6,170.1 307.6,167.8"/><polygon points="323.3,164.1 325.2,171.5 319.9,175.5 312.8,165.9"/><polygon points="326.2,199.9 319.4,204.2 308.8,189.9 315.3,185.1"/><polygon points="326.2,176.5 331.5,197.0 331.0,197.3 319.4,181.5"/><polygon points="484.1,274.4 479.5,266.9 485.4,252.8 495.3,266.2"/><polygon points="487.4,246.1 494.1,230.0 500.3,238.4 488.2,247.3"/><polygon points="502.9,243.4 511.1,254.5 500.4,262.4 492.2,251.2"/><polygon points="506.0,282.3 489.8,284.4 487.0,279.7 498.1,271.5"/><polygon points="508.1,275.6 502.6,268.2 515.0,259.1 520.4,266.5"/><polygon points="530.3,279.4 512.2,281.7 511.0,280.0 523.8,270.6"/><polygon points="505.0,235.7 497.7,225.9 517.8,221.5 520.1,224.6"/><polygon points="529.1,237.1 514.2,248.1 508.7,240.6 523.6,229.6"/><polygon points="538.4,217.1 541.9,227.8 534.2,233.5 524.3,220.1"/><polygon points="536.1,254.8 525.1,262.9 517.8,253.1 528.8,245.0"/><polygon points="543.6,233.6 545.6,248.3 540.9,251.8 533.2,241.3"/><polygon points="546.7,275.6 546.6,276.9 536.2,278.2 528.6,267.8 536.6,261.9"/><polygon points="546.9,253.1 548.1,262.0 547.9,268.8 540.0,258.2"/></g><g fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M118.4,249.1 L311.4,107.0" stroke="#6c604a" stroke-width="3.4"/><path d="M83.9,347.1 L413.3,104.4" stroke="#6c604a" stroke-width="3.4"/><path d="M88.1,416.6 L476.8,130.3" stroke="#6c604a" stroke-width="3.4"/><path d="M113.0,470.8 L519.6,171.3" stroke="#6c604a" stroke-width="4.8"/><path d="M155.8,511.8 L544.4,225.6" stroke="#6c604a" stroke-width="3.4"/><path d="M219.6,537.4 L549.0,294.8" stroke="#6c604a" stroke-width="3.4"/><path d="M320.9,535.4 L514.8,392.5" stroke="#6c604a" stroke-width="3.4"/><path d="M84.0,400.0 L174.1,522.3" stroke="#6c604a" stroke-width="3.4"/><path d="M91.1,311.2 L260.8,541.5" stroke="#6c604a" stroke-width="3.4"/><path d="M118.2,249.5 L327.5,533.6" stroke="#6c604a" stroke-width="3.4"/><path d="M154.6,200.4 L384.2,512.1" stroke="#6c604a" stroke-width="3.4"/><path d="M198.0,160.8 L434.4,481.8" stroke="#6c604a" stroke-width="4.8"/><path d="M248.0,130.1 L477.7,442.0" stroke="#6c604a" stroke-width="3.4"/><path d="M304.7,108.6 L514.4,393.3" stroke="#6c604a" stroke-width="3.4"/><path d="M371.3,100.4 L541.5,331.5" stroke="#6c604a" stroke-width="3.4"/><path d="M458.7,120.6 L547.3,240.9" stroke="#6c604a" stroke-width="3.4"/><path d="M118.4,249.1 L311.4,107.0" stroke="#e4d9bc" stroke-width="1.8"/><path d="M83.9,347.1 L413.3,104.4" stroke="#e4d9bc" stroke-width="1.8"/><path d="M88.1,416.6 L476.8,130.3" stroke="#e4d9bc" stroke-width="1.8"/><path d="M113.0,470.8 L519.6,171.3" stroke="#e4d9bc" stroke-width="3.2"/><path d="M155.8,511.8 L544.4,225.6" stroke="#e4d9bc" stroke-width="1.8"/><path d="M219.6,537.4 L549.0,294.8" stroke="#e4d9bc" stroke-width="1.8"/><path d="M320.9,535.4 L514.8,392.5" stroke="#e4d9bc" stroke-width="1.8"/><path d="M84.0,400.0 L174.1,522.3" stroke="#e4d9bc" stroke-width="1.8"/><path d="M91.1,311.2 L260.8,541.5" stroke="#e4d9bc" stroke-width="1.8"/><path d="M118.2,249.5 L327.5,533.6" stroke="#e4d9bc" stroke-width="1.8"/><path d="M154.6,200.4 L384.2,512.1" stroke="#e4d9bc" stroke-width="1.8"/><path d="M198.0,160.8 L434.4,481.8" stroke="#e4d9bc" stroke-width="3.2"/><path d="M248.0,130.1 L477.7,442.0" stroke="#e4d9bc" stroke-width="1.8"/><path d="M304.7,108.6 L514.4,393.3" stroke="#e4d9bc" stroke-width="1.8"/><path d="M371.3,100.4 L541.5,331.5" stroke="#e4d9bc" stroke-width="1.8"/><path d="M458.7,120.6 L547.3,240.9" stroke="#e4d9bc" stroke-width="1.8"/></g><polygon points="81.8,367.7 85.2,334.2 93.9,300.7 107.5,267.9 125.8,236.4 148.3,206.8 174.7,179.7 204.4,155.7 236.9,135.3 271.5,119.2 307.4,107.7 343.8,101.3 379.7,100.2 414.2,104.5 446.3,114.3 475.2,129.1 500.2,148.6 520.5,172.3 535.8,199.6 545.7,229.7 550.1,261.9 548.9,295.5 542.2,329.7 529.9,363.8 512.4,397.0 490.0,428.6 463.1,457.8 432.1,483.7 397.9,505.7 361.2,523.0 323.0,535.0 284.5,541.3 246.7,541.7 210.8,536.0 177.9,524.6 148.9,507.7 124.5,486.1 105.4,460.5 91.8,431.7 84.0,400.4" fill="none" stroke="#3c3628" stroke-width="1.5"/><g font-family="Georgia, serif" font-size="8" text-anchor="middle"><text x="183.4" y="214.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="331.3" y="475.6" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="426.3" y="214.2" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="362.4" y="270.1" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="501.5" y="193.4" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="411.0" y="328.5" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="518.8" y="317.1" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="209.3" y="299.6" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="253.2" y="467.4" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="272.6" y="278.6" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="392.9" y="139.4" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="393.0" y="413.8" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Slums</text><text x="411.9" y="474.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="318.4" y="275.5" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Temple</text><text x="337.3" y="426.5" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="357.9" y="382.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="442.5" y="188.6" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Temple</text><text x="164.5" y="487.5" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="284.0" y="226.2" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="440.6" y="262.7" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="235.7" y="515.8" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Temple</text><text x="267.9" y="407.9" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Slums</text><text x="462.3" y="163.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="472.3" y="420.3" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="332.1" y="321.3" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Market</text><text x="374.2" y="344.9" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="398.1" y="286.7" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="404.1" y="244.6" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="150.3" y="267.9" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="352.9" y="177.6" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="241.4" y="157.5" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="441.0" y="441.7" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="466.5" y="234.3" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="329.2" y="516.2" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="233.7" y="245.7" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="444.5" y="134.3" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="453.8" y="295.1" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Temple</text><text x="428.8" y="382.7" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Slums</text><text x="332.6" y="230.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="338.2" y="128.9" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="378.6" y="216.3" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="126.9" y="315.1" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="276.1" y="330.3" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Slums</text><text x="113.7" y="396.4" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="381.4" y="115.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="403.4" y="173.6" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="103.7" y="352.7" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="240.6" y="196.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="295.2" y="143.8" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="309.1" y="379.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="141.5" y="435.5" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="465.1" y="335.2" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="375.8" y="466.1" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Noble</text><text x="174.0" y="364.1" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="209.2" y="434.3" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="493.0" y="376.9" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text><text x="231.8" y="364.3" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="293.1" y="465.7" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Garrison</text><text x="304.8" y="188.7" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Residential</text><text x="515.9" y="256.0" stroke="#f7f3ea" stroke-width="2.5" paint-order="stroke" fill="#23211c">Craftsmen</text></g><text x="315.0" y="20" text-anchor="middle" font-family="Georgia, serif" font-size="16" font-weight="bold" stroke="#f7f3ea" stroke-width="3" paint-order="stroke" fill="#23211c">Pelmoorhill</text></svg>
@@ -214,6 +214,8 @@ def main() -> None:
214
214
  emit("citadel", render_settlement("citadel", seed=3))
215
215
  emit("shantytown", render_settlement("shantytown", seed=5))
216
216
  emit("metropolis", render_settlement("metropolis", seed=5))
217
+ emit("grid-city", render_settlement("grid_city", seed=7))
218
+ emit("fortress-town", render_settlement("fortress_town", seed=3))
217
219
  emit("roads", render_roads(seed=7))
218
220
  emit("regions", render_regions(seed=4))
219
221
  emit("template-isthmus", render_template("isthmus", 0.5, seed=5))
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "mapwright"
7
- version = "0.20.0"
7
+ version = "0.22.0"
8
8
  description = "Domain-neutral procedural fantasy map & world generation: Voronoi terrain, hydraulic erosion, biomes, rivers, Markov place-names, and shaded-relief SVG."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -38,6 +38,7 @@ from .regions import Region, RegionGenerator
38
38
  from .rng import SeededRNG
39
39
  from .roads import Road, RegionalRoadGenerator
40
40
  from .settlement import (
41
+ Landmark,
41
42
  Lot,
42
43
  Settlement,
43
44
  SettlementConfig,
@@ -60,7 +61,7 @@ from .terrain import (
60
61
  compute_cell_polygons,
61
62
  )
62
63
 
63
- __version__ = "0.20.0"
64
+ __version__ = "0.22.0"
64
65
 
65
66
  __all__ = [
66
67
  "SeededRNG",
@@ -102,5 +103,6 @@ __all__ = [
102
103
  "Lot",
103
104
  "Street",
104
105
  "Wall",
106
+ "Landmark",
105
107
  "SETTLEMENT_PRESETS",
106
108
  ]
@@ -278,3 +278,46 @@ def inset_convex(poly: list[Point], dist: float) -> list[Point]:
278
278
  if polygon_area(out) <= 1e-9:
279
279
  return []
280
280
  return out
281
+
282
+
283
+ def clip_line_to_convex(
284
+ poly: list[Point], px: float, py: float, dx: float, dy: float
285
+ ) -> tuple[Point, Point] | None:
286
+ """Clip the infinite line through ``(px, py)`` with direction ``(dx, dy)`` to a
287
+ convex polygon, returning its ``(entry, exit)`` endpoints — or ``None`` if the
288
+ line misses the polygon (or the inputs are degenerate).
289
+
290
+ Liang–Barsky against each edge's inward half-plane: the line is ``P(t) =
291
+ (px + t·dx, py + t·dy)``; the valid ``t``-interval starts at ``(-inf, +inf)``
292
+ and is narrowed by every edge. ``poly`` must be convex.
293
+ """
294
+ if len(poly) < 3 or (dx == 0.0 and dy == 0.0):
295
+ return None
296
+ cx, cy = polygon_centroid(poly)
297
+ t_lo, t_hi = -math.inf, math.inf
298
+ n = len(poly)
299
+ for i in range(n):
300
+ ax, ay = poly[i]
301
+ bx, by = poly[(i + 1) % n]
302
+ ex, ey = bx - ax, by - ay
303
+ # Inward normal of this edge (oriented toward the centroid).
304
+ nx, ny = ey, -ex
305
+ if (cx - ax) * nx + (cy - ay) * ny < 0:
306
+ nx, ny = -nx, -ny
307
+ # Keep where (P(t) - a)·n >= 0 ⇒ base + t·slope >= 0.
308
+ base = (px - ax) * nx + (py - ay) * ny
309
+ slope = dx * nx + dy * ny
310
+ if abs(slope) < 1e-12:
311
+ if base < -1e-9:
312
+ return None # line runs wholly outside this edge — no crossing
313
+ continue
314
+ t = -base / slope
315
+ if slope > 0:
316
+ t_lo = max(t_lo, t)
317
+ else:
318
+ t_hi = min(t_hi, t)
319
+ if t_lo > t_hi:
320
+ return None
321
+ if not math.isfinite(t_lo) or not math.isfinite(t_hi) or t_hi - t_lo < 1e-9:
322
+ return None
323
+ return ((px + t_lo * dx, py + t_lo * dy), (px + t_hi * dx, py + t_hi * dy))