{
  "formatVersion": 2,
  "club": "RCYC",
  "name": "Cork Harbour passages for the 2026 keelboat card",
  "source": "https://github.com/Bateleur88/cork-harbour-orc",
  "contributor": "Pat Tanner",
  "method": "Local knowledge, from Pat Tanner's master workbook v3.19 (SHA-256 ff0ae3ee…a735220). Every straight line between marks and waypoints was tested against INFOMAR's 2 m bathymetry (Contains Irish Public Sector Data (Geological Survey Ireland & Marine Institute) licensed under CC BY 4.0), sampled every 5 m: a line passes with at least 1.5 m below chart datum throughout, a modelling rule rather than a declaration of navigational safety. A line that fails is routed through waypoints he authored; three are routed only to keep clear of the Refinery Jetty, which the sailing instructions exclude.",
  "marks": "marks.json",
  "assumed": [
    {
      "mark": "Cage",
      "position": {
        "lat": 51.8139,
        "lng": -8.2828
      },
      "toleranceM": 20,
      "note": "The club's position, which the marks file carries; the workbook tested eOceanic's C1, 39 m away. All eleven of the overlay's lines with an end at Cage were tested again here, with the workbook's own method and grids, and pass.",
      "source": "Retested by course-cards on 5 October 2026 with tools/check_depth.py: Pat Tanner's sampling (cork-harbour-orc scripts/geo.py) against INFOMAR GEO12_04, KRY12_05 and CB12_01"
    },
    {
      "mark": "Dosco",
      "position": {
        "lat": 51.82085,
        "lng": -8.263683
      },
      "toleranceM": 20
    },
    {
      "mark": "Dutchman",
      "position": {
        "lat": 51.7847,
        "lng": -8.283133
      },
      "toleranceM": 200,
      "note": "The workbook's planning position for a mark laid afresh each race day; the day's fix is where it is."
    },
    {
      "mark": "E1",
      "position": {
        "lat": 51.794517,
        "lng": -8.258917
      },
      "toleranceM": 20
    },
    {
      "mark": "E2",
      "position": {
        "lat": 51.79265,
        "lng": -8.261483
      },
      "toleranceM": 20
    },
    {
      "mark": "E4",
      "position": {
        "lat": 51.798842,
        "lng": -8.262568
      },
      "toleranceM": 20
    },
    {
      "mark": "EF2",
      "position": {
        "lat": 51.84385,
        "lng": -8.2373
      },
      "toleranceM": 20
    },
    {
      "mark": "EF4",
      "position": {
        "lat": 51.845333,
        "lng": -8.245667
      },
      "toleranceM": 20
    },
    {
      "id": "SL@grassy-walk",
      "mark": "SL",
      "position": {
        "lat": 51.811908,
        "lng": -8.283267
      },
      "toleranceM": 500,
      "note": "The workbook's Grassy Mid, the point its routes from the Grassy Walk line start and finish at: the midpoint of the line's shore end and Cage. 500 m is where Pat Tanner's race officer page warns that a recorded line is away from it."
    },
    {
      "mark": "Harp",
      "position": {
        "lat": 51.786667,
        "lng": -8.238
      },
      "toleranceM": 20
    },
    {
      "mark": "No.10",
      "position": {
        "lat": 51.829383,
        "lng": -8.275317
      },
      "toleranceM": 20
    },
    {
      "mark": "No.11",
      "position": {
        "lat": 51.844033,
        "lng": -8.258717
      },
      "toleranceM": 20
    },
    {
      "mark": "No.12",
      "position": {
        "lat": 51.8327,
        "lng": -8.269667
      },
      "toleranceM": 20
    },
    {
      "mark": "No.13",
      "position": {
        "lat": 51.849483,
        "lng": -8.26545
      },
      "toleranceM": 20
    },
    {
      "mark": "No.14",
      "position": {
        "lat": 51.835417,
        "lng": -8.26735
      },
      "toleranceM": 20
    },
    {
      "mark": "No.16",
      "position": {
        "lat": 51.844883,
        "lng": -8.26425
      },
      "toleranceM": 20
    },
    {
      "mark": "No.18",
      "position": {
        "lat": 51.848767,
        "lng": -8.27155
      },
      "toleranceM": 20
    },
    {
      "mark": "No.20",
      "position": {
        "lat": 51.847133,
        "lng": -8.288083
      },
      "toleranceM": 20
    },
    {
      "mark": "No.3",
      "position": {
        "lat": 51.802167,
        "lng": -8.26025
      },
      "toleranceM": 20
    },
    {
      "mark": "No.5",
      "position": {
        "lat": 51.8171,
        "lng": -8.270083
      },
      "toleranceM": 20
    },
    {
      "mark": "No.6",
      "position": {
        "lat": 51.805533,
        "lng": -8.265367
      },
      "toleranceM": 20
    },
    {
      "mark": "No.7",
      "position": {
        "lat": 51.827067,
        "lng": -8.26755
      },
      "toleranceM": 20
    },
    {
      "mark": "No.8",
      "position": {
        "lat": 51.821167,
        "lng": -8.277183
      },
      "toleranceM": 20
    },
    {
      "mark": "No.9",
      "position": {
        "lat": 51.837783,
        "lng": -8.257617
      },
      "toleranceM": 20
    },
    {
      "mark": "Ringabella",
      "position": {
        "lat": 51.773167,
        "lng": -8.296333
      },
      "toleranceM": 20
    },
    {
      "mark": "W1",
      "position": {
        "lat": 51.79515,
        "lng": -8.2678
      },
      "toleranceM": 20
    },
    {
      "mark": "W2",
      "position": {
        "lat": 51.794867,
        "lng": -8.2723
      },
      "toleranceM": 20
    },
    {
      "mark": "W4",
      "position": {
        "lat": 51.800517,
        "lng": -8.26565
      },
      "toleranceM": 20
    },
    {
      "mark": "White Bay",
      "position": {
        "lat": 51.80635,
        "lng": -8.254067
      },
      "toleranceM": 200,
      "note": "The workbook's planning position for a mark laid afresh each race day; the day's fix is where it is."
    },
    {
      "id": "SL@dosco",
      "mark": "SL",
      "as": "Dosco",
      "toleranceM": 500,
      "note": "The workbook's Dosco start and finish: a committee-boat line in the area of Dosco, routed as Dosco."
    },
    {
      "id": "SL@no8",
      "mark": "SL",
      "as": "No.8",
      "toleranceM": 500,
      "note": "The workbook's No.8 start and finish: a committee-boat line in the area of No.8, routed as No.8."
    }
  ],
  "waypoints": [
    {
      "id": "RW_Fort_Davis",
      "position": {
        "lat": 51.815183,
        "lng": -8.2654
      }
    },
    {
      "id": "RW_Fort_Davis_South",
      "position": {
        "lat": 51.808067,
        "lng": -8.261217
      }
    },
    {
      "id": "RW_Rams_Head",
      "position": {
        "lat": 51.809117,
        "lng": -8.271883
      }
    },
    {
      "id": "RW_Refinery_North",
      "position": {
        "lat": 51.836233,
        "lng": -8.260417
      }
    },
    {
      "id": "RW_Roches_Point",
      "position": {
        "lat": 51.79105,
        "lng": -8.256017
      }
    },
    {
      "id": "RW_Temblebreedy_Pier",
      "position": {
        "lat": 51.811033,
        "lng": -8.277067
      }
    },
    {
      "id": "RW_West_of_Refinery",
      "position": {
        "lat": 51.833933,
        "lng": -8.263467
      }
    },
    {
      "id": "RW_clear_spit_bank",
      "position": {
        "lat": 51.847067,
        "lng": -8.2747
      }
    }
  ],
  "passages": [
    {
      "from": "Cage",
      "to": "E4",
      "via": [
        "RW_Rams_Head"
      ],
      "note": "Explicit RW route retained."
    },
    {
      "from": "Cage",
      "to": "No.3",
      "via": [
        "RW_Rams_Head"
      ],
      "note": "Explicit RW route retained."
    },
    {
      "from": "Cage",
      "to": "No.9",
      "via": [
        "RW_West_of_Refinery",
        "RW_Refinery_North"
      ],
      "note": "Authored to keep the leg clear of the Refinery Jetty exclusion in RCYC SI 2026 para 21 (at least 150 m from the jetty or vessels moored alongside; SI 2026 para 22 makes a breach grounds for disqualification). Basis: user local navigational knowledge, 28 Sep 2026. The direct chord passes the 1.5 m LAT bathymetric test, so survey data alone would not flag it; the constraint is the exclusion, not depth. Component chords: 2,634.6 m; bearing 31.0°T; INFOMAR 2 m LAT KRY12_05 (399); GEO12_04 (129); 5.0 m spacing; 528/528 samples covered; minimum 1.767 m LAT; 0 below 1.5 m; tested 28 Sep 2026 | 331.1 m; bearing 39.4°T; INFOMAR 2 m LAT KRY12_05 (68); 5.0 m spacing; 68/68 samples covered; minimum 9.991 m LAT; 0 below 1.5 m; tested 28 Sep 2026 | 258.7 m; bearing 48.2°T; INFOMAR 2 m LAT KRY12_05 (48); GEO12_04 (5); 5.0 m spacing; 53/53 samples covered; minimum 5.311 m LAT; 0 below 1.5 m; tested 28 Sep 2026."
    },
    {
      "from": "Cage",
      "to": "W2",
      "via": [
        "RW_Rams_Head"
      ],
      "note": "Canonical reverse W2/Cage passage. Always use Cage → RW_Rams_Head → W2."
    },
    {
      "from": "Cage",
      "to": "W4",
      "via": [
        "RW_Rams_Head"
      ],
      "note": "Explicit RW route retained."
    },
    {
      "from": "Dosco",
      "to": "Dutchman",
      "via": [
        "W2"
      ],
      "note": "Explicit passage confirmed after direct Dosco→Dutchman depth failure. Dosco→W2 is already DIRECT – VERIFIED; W2→Dutchman passes the 1.5 m LAT model (1,353.9 m; 271/271 covered; min 5.664 m LAT; 0 below 1.5 m)."
    },
    {
      "from": "Dosco",
      "to": "E1",
      "via": [
        "RW_Fort_Davis"
      ],
      "note": "User-authored exact passage. Dosco→RW_Fort_Davis already VERIFIED: 641.3 m, 130/130, min 2.875 m LAT. RW_Fort_Davis→E1 INFOMAR 2 m raster chord test: 2,340.9 m; 470/470 covered; min 4.419 m LAT; 0 below 1.5 m."
    },
    {
      "from": "Dosco",
      "to": "E2",
      "via": [
        "RW_Fort_Davis"
      ],
      "note": "Dosco→RW_Fort_Davis already verified. RW_Fort_Davis→E2 INFOMAR 2 m test: 2,520.7 m; 506/506 covered; min 4.419 m LAT; 0 below 1.5 m."
    },
    {
      "from": "Dosco",
      "to": "E4",
      "via": [
        "RW_Fort_Davis"
      ],
      "note": "User-authored exact passage; both physical chords verified."
    },
    {
      "from": "Dosco",
      "to": "Harp",
      "via": [
        "RW_Fort_Davis",
        "RW_Roches_Point"
      ],
      "note": "Course 3 Dosco start. Updated RW_Fort_Davis position: Dosco→RW_Fort_Davis 130/130, min 2.875 m LAT; Fort Davis→Roches Point 554/554, min 3.651 m LAT; Roches Point→Harp already verified."
    },
    {
      "from": "Dosco",
      "to": "No.11",
      "via": [
        "RW_West_of_Refinery"
      ],
      "note": "User-authored exact passage; both physical chords freshly INFOMAR verified."
    },
    {
      "from": "Dosco",
      "to": "No.3",
      "via": [
        "RW_Fort_Davis"
      ],
      "note": "User-authored exact passage; both physical chords verified."
    },
    {
      "from": "Dosco",
      "to": "Ringabella",
      "via": [
        "W2"
      ],
      "note": "Course 1 Dosco start. Direct Dosco→Ringabella failed. Shortest immediate working candidate W2 tested against INFOMAR: PASS (min 2.875 m LAT, 592/592 coverage). W2→Ringabella already verified."
    },
    {
      "from": "Dosco",
      "to": "W1",
      "via": [
        "RW_Fort_Davis"
      ],
      "note": "User-authored exact passage; both physical chords verified."
    },
    {
      "from": "Dosco",
      "to": "W4",
      "via": [
        "RW_Fort_Davis"
      ],
      "note": "User-authored exact passage. Dosco→RW_Fort_Davis already VERIFIED: 641.3 m, 130/130, min 2.875 m LAT. RW_Fort_Davis→W4 accepted as user-authored clear routing chord; exact passage retained only for Dosco→W4."
    },
    {
      "from": "Dosco",
      "to": "White Bay",
      "via": [
        "RW_Fort_Davis",
        "RW_Fort_Davis_South"
      ],
      "note": "Corrected user-authored exact passage; all physical chords verified."
    },
    {
      "from": "Dutchman",
      "to": "SL@grassy-walk",
      "via": [
        "W2",
        "RW_Rams_Head",
        "RW_Temblebreedy_Pier"
      ],
      "note": "Canonical reverse passage. Dutchman→W2 verified; W2→Grassy Mid uses established canonical passage."
    },
    {
      "from": "E1",
      "to": "Cage",
      "via": [
        "RW_Rams_Head"
      ],
      "note": "Explicit RW route retained."
    },
    {
      "from": "E2",
      "to": "No.14",
      "via": [
        "RW_Fort_Davis"
      ],
      "note": "E2→RW_Fort_Davis INFOMAR 2 m test: 2,520.7 m; 506/506 covered; min 4.419 m LAT; 0 below 1.5 m. RW_Fort_Davis→No.14: 2,254.4 m; 452/452 covered; min 3.481 m LAT; 0 below 1.5 m."
    },
    {
      "from": "EF2",
      "to": "No.8",
      "via": [
        "RW_Refinery_North"
      ],
      "note": "User-authored exact passage; component chords verified."
    },
    {
      "from": "Harp",
      "to": "E1",
      "via": [
        "RW_Roches_Point"
      ],
      "note": "Harp → RW_Roches_Point is INFOMAR DIRECT – VERIFIED. RW_Roches_Point → E1 is DIRECT – VERIFIED since 28 Sep 2026 (v3.11): 88/88 samples covered by GEO12_04 (55) and KRY12_05 (33), min 5.889 m LAT, 0 below 1.5 m. Supersedes the earlier USER VERIFIED – LOCAL KNOWLEDGE basis."
    },
    {
      "from": "Harp",
      "to": "No.3",
      "via": [
        "RW_Roches_Point"
      ],
      "note": "User-authored exact passage. Harp→RW_Roches_Point inherits the verified reverse of Roches Point→Harp (1,335.4 m; 269/269; min 5.893 m LAT). RW_Roches_Point→No.3 retained as the established harbour routing chord."
    },
    {
      "from": "No.10",
      "to": "EF2",
      "via": [
        "RW_Refinery_North"
      ],
      "note": "Authored to keep the leg clear of the Refinery Jetty exclusion in RCYC SI 2026 para 21 (at least 150 m from the jetty or vessels moored alongside; SI 2026 para 22 makes a breach grounds for disqualification). Basis: user local navigational knowledge, 28 Sep 2026. The direct chord passes the 1.5 m LAT bathymetric test, so survey data alone would not flag it; the constraint is the exclusion, not depth. Component chords: 1,278.5 m; bearing 53.4°T; INFOMAR 2 m LAT KRY12_05 (257); 5.0 m spacing; 257/257 samples covered; minimum 9.991 m LAT; 0 below 1.5 m; tested 28 Sep 2026 | 1,804.0 m; bearing 62.0°T; INFOMAR 2 m LAT GEO12_04 (329); KRY12_05 (33); 5.0 m spacing; 362/362 samples covered; minimum 3.437 m LAT; 0 below 1.5 m; tested 28 Sep 2026."
    },
    {
      "from": "No.6",
      "to": "Dosco",
      "via": [
        "RW_Fort_Davis"
      ],
      "note": "User-authored exact passage; component chords verified."
    },
    {
      "from": "No.6",
      "to": "SL@grassy-walk",
      "via": [
        "RW_Rams_Head",
        "RW_Temblebreedy_Pier"
      ],
      "note": "User-authored exact passage; all physical chords verified."
    },
    {
      "from": "No.7",
      "to": "No.3",
      "via": [
        "RW_Fort_Davis"
      ],
      "note": "User-authored exact passage; component chords verified."
    },
    {
      "from": "No.8",
      "to": "Dutchman",
      "via": [
        "RW_Rams_Head",
        "W2"
      ],
      "note": "User-authored exact passage. Component physical chords No.8→RW_Rams_Head, RW_Rams_Head→W2 and W2→Dutchman are already verified."
    },
    {
      "from": "No.8",
      "to": "Harp",
      "via": [
        "RW_Rams_Head",
        "RW_Roches_Point"
      ],
      "note": "Course 3 No.8 start. No.8→RW_Rams_Head, RW_Rams_Head→RW_Roches_Point and RW_Roches_Point→Harp are already verified physical chords."
    },
    {
      "from": "No.8",
      "to": "No.16",
      "via": [
        "RW_Rams_Head"
      ],
      "note": "Integrity rebuild v2.32: exact passage record added to match existing Required Pairs RELEASE – VERIFIED PASSAGE and retained verification evidence."
    },
    {
      "from": "No.8",
      "to": "Ringabella",
      "via": [
        "RW_Rams_Head",
        "W2"
      ],
      "note": "User-authored exact passage. Component physical chords No.8→RW_Rams_Head, RW_Rams_Head→W2 and W2→Ringabella are already verified."
    },
    {
      "from": "No.8",
      "to": "W2",
      "via": [
        "RW_Rams_Head"
      ],
      "note": "User-authored exact passage; both component chords already verified."
    },
    {
      "from": "No.8",
      "to": "White Bay",
      "via": [
        "RW_Fort_Davis_South"
      ],
      "note": "User-authored exact reverse passage; component chords verified."
    },
    {
      "from": "No.9",
      "to": "Dosco",
      "via": [
        "RW_Refinery_North",
        "RW_West_of_Refinery"
      ],
      "note": "User-authored exact passage; component chords verified."
    },
    {
      "from": "No.9",
      "to": "No.20",
      "via": [
        "RW_clear_spit_bank"
      ],
      "note": "Explicit RW route retained."
    },
    {
      "from": "Ringabella",
      "to": "Cage",
      "via": [
        "W2",
        "RW_Rams_Head"
      ],
      "note": "User-authored exact passage; all component chords already verified."
    },
    {
      "from": "Ringabella",
      "to": "No.6",
      "via": [
        "W2"
      ],
      "note": "User-authored exact passage; both component chords already verified."
    },
    {
      "from": "SL@grassy-walk",
      "to": "E1",
      "via": [
        "RW_Temblebreedy_Pier",
        "RW_Rams_Head"
      ],
      "note": "User-authored exact passage. Grassy Mid→RW_Temblebreedy_Pier→RW_Rams_Head inherits the established verified Grassy routing. RW_Rams_Head→E1 is retained as the verified reverse of the existing E1→RW_Rams_Head physical chord used in the verified E1→Cage passage."
    },
    {
      "from": "SL@grassy-walk",
      "to": "E2",
      "via": [
        "RW_Temblebreedy_Pier",
        "RW_Rams_Head"
      ],
      "note": "User-authored exact passage; all component chords verified."
    },
    {
      "from": "SL@grassy-walk",
      "to": "E4",
      "via": [
        "RW_Temblebreedy_Pier",
        "RW_Rams_Head"
      ],
      "note": "User-authored exact passage; components verified."
    },
    {
      "from": "SL@grassy-walk",
      "to": "Harp",
      "via": [
        "RW_Temblebreedy_Pier",
        "RW_Rams_Head",
        "RW_Roches_Point"
      ],
      "note": "Course 3 Grassy start. Existing first two chords plus newly verified Rams Head→Roches Point and Roches Point→Harp."
    },
    {
      "from": "SL@grassy-walk",
      "to": "No.3",
      "via": [
        "RW_Temblebreedy_Pier",
        "RW_Rams_Head"
      ],
      "note": "User-authored exact passage; all component chords verified."
    },
    {
      "from": "SL@grassy-walk",
      "to": "Ringabella",
      "via": [
        "RW_Temblebreedy_Pier",
        "RW_Rams_Head",
        "W2"
      ],
      "note": "Integrity rebuild v2.32: explicit promotion of previously completed Course 1 Grassy-start route; prevents non-downgrade regression."
    },
    {
      "from": "SL@grassy-walk",
      "to": "W1",
      "via": [
        "RW_Temblebreedy_Pier",
        "RW_Rams_Head"
      ],
      "note": "User-authored exact passage; all component chords verified."
    },
    {
      "from": "SL@grassy-walk",
      "to": "W2",
      "via": [
        "RW_Temblebreedy_Pier",
        "RW_Rams_Head"
      ],
      "note": "Canonical Grassy/W2 passage. All three physical chords are verified; use this route whenever connecting Grassy Mid to W2."
    },
    {
      "from": "SL@grassy-walk",
      "to": "W4",
      "via": [
        "RW_Temblebreedy_Pier",
        "RW_Rams_Head"
      ],
      "note": "User-authored exact passage. Grassy Mid→RW_Temblebreedy_Pier→RW_Rams_Head inherits the established verified Grassy routing. RW_Rams_Head→W4 inherits the verified physical chord already used in the existing verified Cage→RW_Rams_Head→W4 passage."
    }
  ],
  "direct": [
    {
      "from": "Cage",
      "to": "Dosco"
    },
    {
      "from": "Cage",
      "to": "No.10"
    },
    {
      "from": "Cage",
      "to": "No.11"
    },
    {
      "from": "Cage",
      "to": "No.12"
    },
    {
      "from": "Cage",
      "to": "No.5"
    },
    {
      "from": "Cage",
      "to": "No.7"
    },
    {
      "from": "Cage",
      "to": "No.8"
    },
    {
      "from": "Cage",
      "to": "White Bay"
    },
    {
      "from": "Dosco",
      "to": "No.10"
    },
    {
      "from": "Dosco",
      "to": "No.12"
    },
    {
      "from": "Dosco",
      "to": "No.13"
    },
    {
      "from": "Dosco",
      "to": "No.16"
    },
    {
      "from": "Dosco",
      "to": "No.18"
    },
    {
      "from": "Dosco",
      "to": "No.5"
    },
    {
      "from": "Dosco",
      "to": "No.7"
    },
    {
      "from": "Dosco",
      "to": "No.8"
    },
    {
      "from": "Dosco",
      "to": "SL@grassy-walk"
    },
    {
      "from": "Dosco",
      "to": "W2"
    },
    {
      "from": "Dutchman",
      "to": "W2"
    },
    {
      "from": "E1",
      "to": "No.6"
    },
    {
      "from": "E2",
      "to": "No.8"
    },
    {
      "from": "EF2",
      "to": "No.11"
    },
    {
      "from": "EF2",
      "to": "No.20"
    },
    {
      "from": "EF4",
      "to": "No.10"
    },
    {
      "from": "No.10",
      "to": "No.3"
    },
    {
      "from": "No.10",
      "to": "No.5"
    },
    {
      "from": "No.10",
      "to": "No.7"
    },
    {
      "from": "No.10",
      "to": "No.8"
    },
    {
      "from": "No.10",
      "to": "No.9"
    },
    {
      "from": "No.10",
      "to": "SL@grassy-walk"
    },
    {
      "from": "No.11",
      "to": "No.10"
    },
    {
      "from": "No.11",
      "to": "No.5"
    },
    {
      "from": "No.11",
      "to": "No.8"
    },
    {
      "from": "No.12",
      "to": "E2"
    },
    {
      "from": "No.12",
      "to": "No.5"
    },
    {
      "from": "No.12",
      "to": "No.6"
    },
    {
      "from": "No.12",
      "to": "No.8"
    },
    {
      "from": "No.13",
      "to": "No.11"
    },
    {
      "from": "No.13",
      "to": "No.5"
    },
    {
      "from": "No.13",
      "to": "No.9"
    },
    {
      "from": "No.14",
      "to": "Dosco"
    },
    {
      "from": "No.14",
      "to": "No.6"
    },
    {
      "from": "No.16",
      "to": "EF2"
    },
    {
      "from": "No.16",
      "to": "No.6"
    },
    {
      "from": "No.18",
      "to": "No.20"
    },
    {
      "from": "No.20",
      "to": "No.13"
    },
    {
      "from": "No.3",
      "to": "No.5"
    },
    {
      "from": "No.3",
      "to": "No.8"
    },
    {
      "from": "No.3",
      "to": "W2"
    },
    {
      "from": "No.3",
      "to": "W4"
    },
    {
      "from": "No.5",
      "to": "No.14"
    },
    {
      "from": "No.5",
      "to": "No.8"
    },
    {
      "from": "No.5",
      "to": "SL@grassy-walk"
    },
    {
      "from": "No.6",
      "to": "Cage"
    },
    {
      "from": "No.6",
      "to": "No.10"
    },
    {
      "from": "No.6",
      "to": "No.3"
    },
    {
      "from": "No.6",
      "to": "No.8"
    },
    {
      "from": "No.6",
      "to": "W2"
    },
    {
      "from": "No.7",
      "to": "No.13"
    },
    {
      "from": "No.7",
      "to": "No.5"
    },
    {
      "from": "No.7",
      "to": "No.8"
    },
    {
      "from": "No.8",
      "to": "E1"
    },
    {
      "from": "No.8",
      "to": "E4"
    },
    {
      "from": "No.8",
      "to": "No.13"
    },
    {
      "from": "No.8",
      "to": "No.18"
    },
    {
      "from": "No.8",
      "to": "W1"
    },
    {
      "from": "No.8",
      "to": "W4"
    },
    {
      "from": "No.9",
      "to": "No.5"
    },
    {
      "from": "No.9",
      "to": "No.8"
    },
    {
      "from": "No.9",
      "to": "SL@grassy-walk"
    },
    {
      "from": "Ringabella",
      "to": "W2"
    },
    {
      "from": "SL@grassy-walk",
      "to": "No.11"
    },
    {
      "from": "SL@grassy-walk",
      "to": "No.16"
    },
    {
      "from": "SL@grassy-walk",
      "to": "No.7"
    },
    {
      "from": "SL@grassy-walk",
      "to": "No.8"
    },
    {
      "from": "SL@grassy-walk",
      "to": "White Bay"
    },
    {
      "from": "W1",
      "to": "No.10"
    },
    {
      "from": "W4",
      "to": "No.10"
    },
    {
      "from": "W4",
      "to": "No.14"
    }
  ]
}
