app
Fusion - the Fusion 360 Bridge
Public Made by Adomby adom
Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.
← Commit history
Add Fusion 24-net crossover routing, shared vias, and captioned demo
37 files changed
+9697−11
.gitignore+4BRIDGE_VERSION+1−1bridge.json+1−1demo/routing/README.md+2−1demo/routing/crossbar/README.md+82demo/routing/crossbar/delivery.json+12demo/routing/crossbar/final-frame.pngdemo/routing/crossbar/find_action.py+36demo/routing/crossbar/fusion-crossbar-24-3x.ass+27demo/routing/crossbar/fusion-crossbar-24-3x.edit.json+1297demo/routing/crossbar/fusion-crossbar-24-3x.mp4demo/routing/crossbar/fusion-crossbar-24.brd+289demo/routing/crossbar/install.json+11demo/routing/crossbar/make_crossbar.py+51demo/routing/crossbar/plan.json+986demo/routing/crossbar/player-open.json+9demo/routing/crossbar/player-verification.json+26demo/routing/crossbar/record_crossbar.py+53demo/routing/crossbar/render_crossbar.py+74demo/routing/crossbar/take-01/action-ranges.json+626demo/routing/crossbar/take-01/before.json+1735demo/routing/crossbar/take-01/calls.json.gzdemo/routing/crossbar/take-01/export.json+33demo/routing/crossbar/take-01/final.json+3373demo/routing/crossbar/take-01/fusion-crossbar-24-routed.brd+838demo/routing/crossbar/take-01/fusion-crossbar-24-routed.fbrddemo/routing/crossbar/take-01/motion-scores.json+1demo/routing/crossbar/take-01/record-start.json+31demo/routing/crossbar/take-01/record-stop.json+28demo/routing/crossbar/video-verification.json+34package.json+1−1rust/Cargo.lock+5−5rust/Cargo.toml+1−1rust/bridge/src/routing_script.py+9skills/fusion-routing/SKILL.md+3tests/test_routing.py+17tools/install-routing-dev.ps1+1−1.gitignore+4@@ -11,3 +11,7 @@ rust/target/ # Full window-capture originals stay local; the share copy is versioned. demo/routing/videos/window-*.mp4++# Preserve raw crossover take and full call log locally; publish compressed evidence.+demo/routing/crossbar/take-*/window-*.mp4+demo/routing/crossbar/take-*/calls.json
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.10.0-dev.routing.1+1.10.0-dev.routing.2
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.10.0-dev.routing.1",+ "version": "1.10.0-dev.routing.2", "description": "Drive Autodesk Fusion 360 from the cloud: launch Fusion, electronics board layout, design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers/BOM/CPL), fast APS server-indexed cloud search plus browse/recent/file-info/versions, cloud file download/upload and folder creation, and in-app parametric modeling (fusion_run_modeling_script). Never-charge: APS calls are capped to the free tier.", "homepage": "https://wiki.adom.inc/adom/fusion-bridge", "author": "Adom Inc.",
demo/routing/README.md+2−1@@ -2,7 +2,8 @@ Development branch `feature/per-net-trace-routing`, based on wiki `adom/fusion-bridge` commit `3e27d7f04743fef7a864bbc84bc0abc7bbabbe86`-(version 1.9.366). Runtime version: `1.10.0-dev.routing.1`.+(version 1.9.366). Initial runtime version: `1.10.0-dev.routing.1`.+The 24-net crossover extension uses `1.10.0-dev.routing.2`. This adds three bridge verbs that edit and inspect the **live Fusion board**. The caller supplies the paths. This is explicit copper creation, not an
demo/routing/crossbar/README.mdadded+82@@ -0,0 +1,82 @@+# Fusion 24-net crossover++This is the Fusion counterpart of the second KiCad Astra video. It uses a+constructed test fixture and freshly calculated waypoints, with no Freerouting+or other external router. KiCad files are read as a reference and remain intact.++For input `i = 0..23`, calculate `j = (7*i) mod 24`, row `y = 52 + 2.54*i`+and column `x = 65 + 2.54*j` mm. J1 at x=45 feeds the selected J2 pad at y=35+and branches to J3 at y=125. Top copper carries horizontal rows; bottom copper+carries vertical columns. Two vias per net connect the top SMD endpoints and+bottom routing. The branch's J3 pad is through-hole. Width is 0.30 mm, via+outer diameter 0.60 mm, drill 0.30 mm; pads are 1.50 mm with 2.54 mm pitch.+Fusion's positive Y points upward, so this exact numeric geometry appears+vertically flipped relative to KiCad's canvas.++`make_crossbar.py` authors the separate unrouted Fusion/EAGLE board and plan.+`record_crossbar.py` reads the active board, dry-runs all net plans, records the+actual Fusion window, and commits each trace/via with consecutive revisions.+It verifies the copper after every call and invokes native DRC after each net.+Timestamps and every response are retained in `take-01/calls.json`.++The bridge extension in `1.10.0-dev.routing.2` deduplicates identical planned+vias shared by multiple branches of a net. Its regression test adds all 24+nets to the geometry model in sequence and checks 120 segments and 48 vias.+This conservative preflight is not native DRC; the live result is recorded+separately and intermediate boards can still have airwires.++```sh+python3 demo/routing/crossbar/make_crossbar.py+python3 -m unittest discover -s tests -p test_routing.py -v+# Stage/open the new board and resolve the live Fusion HWND first.+python3 demo/routing/crossbar/record_crossbar.py --hwnd <hwnd> \+ --take demo/routing/crossbar/new-take+```++## Measured live result — AdomLapper, 2026-09-05++The native run completed with 24 connected nets, 72 pads, 120 trace segments+and 48 through vias. Autodesk DRC reported zero errors, zero warnings and zero+airwires. All 168 mutations passed copper read-back; the revision was updated+after every edit. All 24 net-level native DRC checks reported no physical+violations. `take-01/final.json` contains the measured result. The complete+request/response log is preserved locally as `calls.json` and on the branch as+`calls.json.gz`. The initial six-net demo and all KiCad files were preserved.++Routed `.brd` and `.fbrd` exports are in `take-01/` and on Windows under+`C:/Users/john/Documents/fusion-crossbar-dev/`. Fusion remains open on the+completed board. The development runtime remains pinned at+`1.10.0-dev.routing.2`; the previous executable was backed up (see `install.json`).++The raw native AB recording is preserved locally under `take-01/window-*.mp4`.+It contains 5,800 frames (193.333 seconds at 30 fps); the recorder reports+206.642 seconds of wall time. These are separate measurements. The edited+video accelerates the retained recorded frames at 3x, not a claim of elapsed+end-to-end routing time. `find_action.py` detects copper changes within the+board, trims idle intervals with handles around changes, and retains the final+DRC view. Its boundaries are visually reviewed before delivery.++## Delivered video++`fusion-crossbar-24-3x.mp4` is 41.667 seconds, H.264/yuv420p, 1920x1080 at+30 fps, with no audio. It retains 3,299 source frames at 3x and adds a+five-second final hold. Roughly 83.37 seconds of recorded waits were omitted.+The persistent speed/edit labels and captions explain actual Fusion verbs,+the formula, layer assignment and measured native DRC. The `.ass` and+`.edit.json` contain caption timing and exact selected source frame ranges.++Full decode, constant source frame rate, output dimensions, duration and the+168-edit revision chain passed verification. Initial, sequential, transition+and final frames were visually inspected. See `video-verification.json`.++Delivered to Windows and verified visibly playing in Media Player:+`C:/Users/john/Documents/Adom Routing Demos/fusion-crossbar-24-3x.mp4`.++```sh+python3 demo/routing/crossbar/find_action.py <raw-window-mp4>+python3 demo/routing/crossbar/render_crossbar.py <take-directory>+```++The edit uses frame-index ranges after verifying constant 30 fps. This avoids+floating-point boundary differences between FFprobe timestamps and FFmpeg's+select expression. A variable-rate recording requires timestamp-aware editing.
demo/routing/crossbar/delivery.jsonadded+12@@ -0,0 +1,12 @@+{+ "_hint": "Wrote 1 file(s) to the LAPTOP (Windows host), NOT to your container/WSL. Folder: C:/Users/john/Documents/Adom Routing Demos \u00b7 exact paths are in destinationPaths[]. VERIFY: adom-bridge list_dir '{\"path\":\"C:/Users/john/Documents/Adom Routing Demos\"}' READ ONE BACK: adom-bridge pull_file '{\"path\":\"C:/Users/john/Documents/Adom Routing Demos/fusion-crossbar-24-3x.mp4\"}'. To control where files land, pass dest:'C:/abs/path' (absolute) or destinationFolder:'subdir' (relative to the laptop Downloads default). NOTE: send_files only COPIES bytes \u2014 it does NOT install or register a bridge. To make a bridge appear (capsule in the ab GUI + verbs routable), use bridge_install '{\"manifestUrl\":\"https://wiki.adom.inc/...<bridge>-manifest.json\"}', then confirm with bridge_list.",+ "destinationPaths": [+ "C:/Users/john/Documents/Adom Routing Demos/fusion-crossbar-24-3x.mp4"+ ],+ "durationMs": 43,+ "error": null,+ "filesReceived": 1,+ "savedToDir": "C:/Users/john/Documents/Adom Routing Demos",+ "status": "ok",+ "success": true+}
demo/routing/crossbar/final-frame.pngadded⋯ 1 unchanged line ⋯
demo/routing/crossbar/find_action.pyadded+36@@ -0,0 +1,36 @@+"""Find visible copper changes in the Fusion board, excluding surrounding UI."""+import argparse,json,subprocess+from pathlib import Path+import numpy as np+p=argparse.ArgumentParser();p.add_argument('source',type=Path);a=p.parse_args()+probe=json.loads(subprocess.check_output(['ffprobe','-v','error','-show_format','-show_streams','-of','json',str(a.source)]))+duration=float(probe['format']['duration'])+# Work at half the native width. This crop contains the board, not the DRC panel.+w,h=600,620+proc=subprocess.Popen(['ffmpeg','-v','error','-i',str(a.source),'-vf',f'fps=10,scale=1280:-2,crop={w}:{h}:220:130','-f','rawvideo','-pix_fmt','rgb24','-'],stdout=subprocess.PIPE)+prev=None;scores=[];events=[];i=0+while True:+ buf=proc.stdout.read(w*h*3)+ if not buf:break+ assert len(buf)==w*h*3+ frame=np.frombuffer(buf,np.uint8).reshape(h,w,3).astype(np.int16)+ colored=(frame.max(2)-frame.min(2)>60)&(frame.max(2)>70)+ if prev is not None:+ changed=(np.abs(frame-prev).max(2)>40)&(colored|oldcolored)+ score=int(changed.sum());scores.append([round(i/10,3),score])+ if score>=3 and i/10>.5:events.append(i/10)+ prev=frame;oldcolored=colored;i+=1+assert proc.wait()==0+ranges=[]+for t in events:+ lo=max(0,t-.25);hi=min(duration,t+.4)+ if ranges and lo<=ranges[-1][1]:ranges[-1][1]=hi+ else:ranges.append([lo,hi])+assert ranges+# Show a brief unrouted setup and retain the final clean DRC result for the hold.+ranges[0][0]=max(0,ranges[0][0]-.4)+ranges.append([max(ranges[-1][1],duration-.5),duration])+ranges=[r for r in ranges if r[1]>r[0]]+(a.source.parent/'motion-scores.json').write_text(json.dumps(scores)+'\n')+(a.source.parent/'action-ranges.json').write_text(json.dumps(ranges,indent=2)+'\n')+print({'sourceSeconds':duration,'events':len(events),'intervals':len(ranges),'keptSeconds':sum(b-a for a,b in ranges)})
demo/routing/crossbar/fusion-crossbar-24-3x.assadded+27@@ -0,0 +1,27 @@+[Script Info]+ScriptType: v4.00++PlayResX: 1920+PlayResY: 1080+WrapStyle: 2+[V4+ Styles]+Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding+Style: Main,Liberation Sans,34,&H00FFFFFF,&H00FFFFFF,&H00130F0A,&H00130F0A,0,0,0,0,100,100,0,0,1,1,0,2,30,30,22,1+[Events]+Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text+Dialogue: 0,0:00:00.00,0:00:41.66,Main,,0,0,0,,{\an7\pos(34,16)\fs38\b1\c&H00E5CF65&}CODEX ASTRA IN ADOM HYDROGEN{\c&H00FFFFFF&} / 24-NET CROSSOVER+Dialogue: 0,0:00:00.00,0:00:41.66,Main,,0,0,0,,{\an7\pos(1490,125)\fs48\b1\c&H00E5CF65&}3x SPEED+Dialogue: 0,0:00:00.00,0:00:41.66,Main,,0,0,0,,{\an7\pos(1490,197)\fs28}Native Fusion capture\NIdle waits trimmed+Dialogue: 0,0:00:00.00,0:00:41.66,Main,,0,0,0,,{\an7\pos(1490,305)\fs32\b1\c&H00E5CF65&}THE BOARD+Dialogue: 0,0:00:00.00,0:00:41.66,Main,,0,0,0,,{\an7\pos(1490,351)\fs27}24 nets / 72 pads\N120 trace segments\N48 through vias+Dialogue: 0,0:00:00.00,0:00:41.66,Main,,0,0,0,,{\an7\pos(1490,495)\fs32\b1\c&H00E5CF65&}THE CALCULATION+Dialogue: 0,0:00:00.00,0:00:41.66,Main,,0,0,0,,{\an7\pos(1490,541)\fs27}j = (7 x i) mod 24\N0.30 mm trace width\NExplicit Astra waypoints+Dialogue: 0,0:00:00.00,0:00:41.66,Main,,0,0,0,,{\an7\pos(1490,685)\fs32\b1\c&H00E5CF65&}RECORD + VERIFY+Dialogue: 0,0:00:00.00,0:00:41.66,Main,,0,0,0,,{\an7\pos(1490,731)\fs27}Native AB window capture\NFusion copper read-back\NAutodesk DRC result+Dialogue: 0,0:00:00.00,0:00:04.00,Main,,0,0,0,,{\an2\pos(960,1058)\fs34}Codex Astra calculates the 24-net crossover in Adom Hydrogen.+Dialogue: 0,0:00:04.00,0:00:08.00,Main,,0,0,0,,{\an2\pos(960,1058)\fs34}Output column j = (7 x i) mod 24. Rows and columns use 2.54 mm pitch.+Dialogue: 0,0:00:08.00,0:00:12.00,Main,,0,0,0,,{\an2\pos(960,1058)\fs34}Top copper carries rows; bottom copper carries columns.\NCrossings stay on separate layers. No Freerouting.+Dialogue: 0,0:00:12.00,0:00:16.00,Main,,0,0,0,,{\an2\pos(960,1058)\fs34}fusion_routing_state reads nets, pads and revision.\Nfusion_route_net dryRun checks explicit planned geometry.+Dialogue: 0,0:00:16.00,0:00:20.00,Main,,0,0,0,,{\an2\pos(960,1058)\fs34}fusion_route_net adds each trace and via through Adom Bridge.\NexpectedRevision guards edits; copper is read back after each call.+Dialogue: 0,0:00:20.00,0:00:36.66,Main,,0,0,0,,{\an2\pos(960,1058)\fs34}Each net branches to a third pad and uses two through vias.\NFusion recalculates connectivity as the copper appears.+Dialogue: 0,0:00:36.66,0:00:41.66,Main,,0,0,0,,{\an2\pos(960,1058)\fs34}fusion_routing_drc: 24 nets connected.\NNative Autodesk DRC: 0 errors / 0 warnings / 0 airwires.+Dialogue: 0,0:00:36.46,0:00:41.66,Main,,0,0,0,,{\an7\pos(1490,885)\fs23\c&H00B9B9B9&}Final frame held for reading
demo/routing/crossbar/fusion-crossbar-24-3x.edit.jsonadded+1297@@ -0,0 +1,1297 @@+{+ "source": "demo/routing/crossbar/take-01/window-8916576-20260905-213451.mp4",+ "trimStartSeconds": 0,+ "trimEndSeconds": 193.33333333333334,+ "speed": 3,+ "holdSeconds": 5,+ "durationSeconds": 41.65555555555556,+ "captions": [+ [+ 0,+ 4,+ "Codex Astra calculates the 24-net crossover in Adom Hydrogen."+ ],+ [+ 4,+ 8,+ "Output column j = (7 x i) mod 24. Rows and columns use 2.54 mm pitch."+ ],+ [+ 8,+ 12,+ "Top copper carries rows; bottom copper carries columns.\\NCrossings stay on separate layers. No Freerouting."+ ],+ [+ 12,+ 16,+ "fusion_routing_state reads nets, pads and revision.\\Nfusion_route_net dryRun checks explicit planned geometry."+ ],+ [+ 16,+ 20,+ "fusion_route_net adds each trace and via through Adom Bridge.\\NexpectedRevision guards edits; copper is read back after each call."+ ],+ [+ 20,+ 36.65555555555556,+ "Each net branches to a third pad and uses two through vias.\\NFusion recalculates connectivity as the copper appears."+ ],+ [+ 36.65555555555556,+ 41.65555555555556,+ "fusion_routing_drc: 24 nets connected.\\NNative Autodesk DRC: 0 errors / 0 warnings / 0 airwires."+ ]+ ],+ "keptSourceRanges": [+ [+ 0.9500000000000001,+ 2.0+ ],+ [+ 2.15,+ 2.8+ ],+ [+ 3.35,+ 4.0+ ],+ [+ 4.15,+ 4.800000000000001+ ],+ [+ 5.15,+ 5.800000000000001+ ],+ [+ 6.05,+ 6.7+ ],+ [+ 6.95,+ 7.6000000000000005+ ],+ [+ 8.25,+ 8.9+ ],+ [+ 9.35,+ 10.0+ ],+ [+ 11.35,+ 12.0+ ],+ [+ 12.35,+ 13.0+ ],+ [+ 13.25,+ 13.9+ ],+ [+ 14.15,+ 14.8+ ],+ [+ 15.75,+ 16.4+ ],+ [+ 16.65,+ 17.299999999999997+ ],+ [+ 18.35,+ 19.0+ ],+ [+ 19.45,+ 20.099999999999998+ ],+ [+ 20.35,+ 21.0+ ],+ [+ 21.35,+ 22.0+ ],+ [+ 22.85,+ 23.5+ ],+ [+ 23.65,+ 24.299999999999997+ ],+ [+ 25.75,+ 26.4+ ],+ [+ 26.75,+ 27.4+ ],+ [+ 27.65,+ 28.299999999999997+ ],+ [+ 28.65,+ 29.299999999999997+ ],+ [+ 30.15,+ 30.799999999999997+ ],+ [+ 31.05,+ 31.7+ ],+ [+ 32.05,+ 32.699999999999996+ ],+ [+ 33.05,+ 33.699999999999996+ ],+ [+ 34.05,+ 34.699999999999996+ ],+ [+ 34.85,+ 35.5+ ],+ [+ 35.85,+ 36.5+ ],+ [+ 37.45,+ 38.1+ ],+ [+ 38.35,+ 39.0+ ],+ [+ 40.25,+ 40.9+ ],+ [+ 42.25,+ 42.9+ ],+ [+ 43.15,+ 43.8+ ],+ [+ 44.85,+ 45.5+ ],+ [+ 45.65,+ 46.3+ ],+ [+ 47.75,+ 48.4+ ],+ [+ 48.55,+ 49.199999999999996+ ],+ [+ 49.65,+ 51.1+ ],+ [+ 51.35,+ 52.699999999999996+ ],+ [+ 53.15,+ 54.1+ ],+ [+ 55.15,+ 59.199999999999996+ ],+ [+ 60.05,+ 60.699999999999996+ ],+ [+ 60.95,+ 61.699999999999996+ ],+ [+ 62.95,+ 63.6+ ],+ [+ 64.15,+ 64.80000000000001+ ],+ [+ 65.15,+ 65.80000000000001+ ],+ [+ 66.05,+ 66.7+ ],+ [+ 67.45,+ 68.10000000000001+ ],+ [+ 68.45,+ 69.10000000000001+ ],+ [+ 70.45,+ 71.10000000000001+ ],+ [+ 71.45,+ 72.10000000000001+ ],+ [+ 72.35,+ 73.0+ ],+ [+ 73.35,+ 74.0+ ],+ [+ 75.05,+ 75.7+ ],+ [+ 76.05,+ 76.7+ ],+ [+ 77.05,+ 77.7+ ],+ [+ 77.95,+ 78.60000000000001+ ],+ [+ 78.95,+ 79.60000000000001+ ],+ [+ 79.85,+ 80.5+ ],+ [+ 80.85,+ 81.5+ ],+ [+ 82.35,+ 83.0+ ],+ [+ 83.35,+ 84.0+ ],+ [+ 84.35,+ 85.0+ ],+ [+ 85.35,+ 86.0+ ],+ [+ 86.45,+ 87.10000000000001+ ],+ [+ 87.55,+ 88.4+ ],+ [+ 88.65,+ 89.30000000000001+ ],+ [+ 90.55,+ 91.2+ ],+ [+ 91.55,+ 92.2+ ],+ [+ 92.65,+ 93.30000000000001+ ],+ [+ 93.45,+ 94.10000000000001+ ],+ [+ 94.65,+ 95.30000000000001+ ],+ [+ 95.75,+ 96.4+ ],+ [+ 96.75,+ 98.10000000000001+ ],+ [+ 98.45,+ 99.10000000000001+ ],+ [+ 99.45,+ 100.10000000000001+ ],+ [+ 100.55,+ 101.2+ ],+ [+ 101.65,+ 102.30000000000001+ ],+ [+ 102.65,+ 103.30000000000001+ ],+ [+ 103.65,+ 104.30000000000001+ ],+ [+ 104.75,+ 105.4+ ],+ [+ 106.45,+ 107.10000000000001+ ],+ [+ 107.45,+ 108.10000000000001+ ],+ [+ 108.65,+ 109.30000000000001+ ],+ [+ 109.65,+ 110.30000000000001+ ],+ [+ 110.65,+ 111.30000000000001+ ],+ [+ 111.55,+ 112.2+ ],+ [+ 112.55,+ 113.2+ ],+ [+ 114.25,+ 114.9+ ],+ [+ 115.35,+ 116.0+ ],+ [+ 116.45,+ 117.10000000000001+ ],+ [+ 117.45,+ 118.10000000000001+ ],+ [+ 118.55,+ 119.2+ ],+ [+ 119.55,+ 120.2+ ],+ [+ 120.65,+ 121.30000000000001+ ],+ [+ 122.35,+ 123.0+ ],+ [+ 123.35,+ 124.0+ ],+ [+ 124.55,+ 125.2+ ],+ [+ 125.55,+ 126.2+ ],+ [+ 126.65,+ 127.30000000000001+ ],+ [+ 127.75,+ 128.4+ ],+ [+ 128.75,+ 129.4+ ],+ [+ 130.55,+ 131.20000000000002+ ],+ [+ 131.45,+ 132.1+ ],+ [+ 132.45,+ 133.1+ ],+ [+ 133.55,+ 134.20000000000002+ ],+ [+ 134.85,+ 135.5+ ],+ [+ 136.15,+ 136.8+ ],+ [+ 137.15,+ 137.8+ ],+ [+ 138.85,+ 139.5+ ],+ [+ 139.95,+ 140.6+ ],+ [+ 141.05,+ 141.70000000000002+ ],+ [+ 142.15,+ 142.8+ ],+ [+ 143.35,+ 144.0+ ],+ [+ 144.45,+ 145.1+ ],+ [+ 145.45,+ 146.1+ ],+ [+ 147.15,+ 147.8+ ],+ [+ 148.15,+ 148.8+ ],+ [+ 149.35,+ 150.0+ ],+ [+ 150.45,+ 151.1+ ],+ [+ 151.65,+ 152.3+ ],+ [+ 152.75,+ 153.4+ ],+ [+ 153.85,+ 154.5+ ],+ [+ 155.65,+ 156.3+ ],+ [+ 156.95,+ 157.6+ ],+ [+ 158.05,+ 158.70000000000002+ ],+ [+ 159.25,+ 159.9+ ],+ [+ 160.45,+ 161.1+ ],+ [+ 161.55,+ 162.20000000000002+ ],+ [+ 162.75,+ 163.4+ ],+ [+ 164.65,+ 165.3+ ],+ [+ 165.85,+ 166.5+ ],+ [+ 167.05,+ 167.70000000000002+ ],+ [+ 168.15,+ 168.8+ ],+ [+ 169.35,+ 170.0+ ],+ [+ 170.45,+ 171.1+ ],+ [+ 171.65,+ 172.3+ ],+ [+ 173.65,+ 174.3+ ],+ [+ 174.75,+ 175.4+ ],+ [+ 176.05,+ 176.70000000000002+ ],+ [+ 177.35,+ 178.0+ ],+ [+ 178.55,+ 179.20000000000002+ ],+ [+ 179.75,+ 180.4+ ],+ [+ 180.95,+ 181.6+ ],+ [+ 182.85,+ 183.5+ ],+ [+ 183.95,+ 184.6+ ],+ [+ 185.15,+ 185.8+ ],+ [+ 186.35,+ 187.0+ ],+ [+ 187.55,+ 188.20000000000002+ ],+ [+ 188.65,+ 189.3+ ],+ [+ 189.75,+ 190.4+ ],+ [+ 192.8333,+ 193.3333+ ]+ ],+ "keptFrameRangesEndExclusive": [+ [+ 29,+ 61+ ],+ [+ 65,+ 85+ ],+ [+ 101,+ 121+ ],+ [+ 125,+ 145+ ],+ [+ 155,+ 175+ ],+ [+ 182,+ 202+ ],+ [+ 209,+ 229+ ],+ [+ 248,+ 268+ ],+ [+ 281,+ 301+ ],+ [+ 341,+ 361+ ],+ [+ 371,+ 391+ ],+ [+ 398,+ 418+ ],+ [+ 425,+ 445+ ],+ [+ 473,+ 493+ ],+ [+ 500,+ 519+ ],+ [+ 551,+ 571+ ],+ [+ 584,+ 603+ ],+ [+ 611,+ 631+ ],+ [+ 641,+ 661+ ],+ [+ 686,+ 706+ ],+ [+ 710,+ 729+ ],+ [+ 773,+ 793+ ],+ [+ 803,+ 823+ ],+ [+ 830,+ 849+ ],+ [+ 860,+ 879+ ],+ [+ 905,+ 924+ ],+ [+ 932,+ 952+ ],+ [+ 962,+ 981+ ],+ [+ 992,+ 1011+ ],+ [+ 1022,+ 1041+ ],+ [+ 1046,+ 1066+ ],+ [+ 1076,+ 1096+ ],+ [+ 1124,+ 1144+ ],+ [+ 1151,+ 1171+ ],+ [+ 1208,+ 1228+ ],+ [+ 1268,+ 1288+ ],+ [+ 1295,+ 1315+ ],+ [+ 1346,+ 1366+ ],+ [+ 1370,+ 1390+ ],+ [+ 1433,+ 1453+ ],+ [+ 1457,+ 1476+ ],+ [+ 1490,+ 1534+ ],+ [+ 1541,+ 1581+ ],+ [+ 1595,+ 1624+ ],+ [+ 1655,+ 1776+ ],+ [+ 1802,+ 1821+ ],+ [+ 1829,+ 1851+ ],+ [+ 1889,+ 1909+ ],+ [+ 1925,+ 1945+ ],+ [+ 1955,+ 1975+ ],+ [+ 1982,+ 2002+ ],+ [+ 2024,+ 2044+ ],+ [+ 2054,+ 2074+ ],+ [+ 2114,+ 2134+ ],+ [+ 2144,+ 2164+ ],+ [+ 2171,+ 2191+ ],+ [+ 2201,+ 2221+ ],+ [+ 2252,+ 2272+ ],+ [+ 2282,+ 2302+ ],+ [+ 2312,+ 2332+ ],+ [+ 2339,+ 2359+ ],+ [+ 2369,+ 2389+ ],+ [+ 2396,+ 2416+ ],+ [+ 2426,+ 2446+ ],+ [+ 2471,+ 2491+ ],+ [+ 2501,+ 2521+ ],+ [+ 2531,+ 2551+ ],+ [+ 2561,+ 2581+ ],+ [+ 2594,+ 2614+ ],+ [+ 2627,+ 2653+ ],+ [+ 2660,+ 2680+ ],+ [+ 2717,+ 2737+ ],+ [+ 2747,+ 2767+ ],+ [+ 2780,+ 2800+ ],+ [+ 2804,+ 2824+ ],+ [+ 2840,+ 2860+ ],+ [+ 2873,+ 2893+ ],+ [+ 2903,+ 2944+ ],+ [+ 2954,+ 2974+ ],+ [+ 2984,+ 3004+ ],+ [+ 3017,+ 3037+ ],+ [+ 3050,+ 3070+ ],+ [+ 3080,+ 3100+ ],+ [+ 3110,+ 3130+ ],+ [+ 3143,+ 3163+ ],+ [+ 3194,+ 3214+ ],+ [+ 3224,+ 3244+ ],+ [+ 3260,+ 3280+ ],+ [+ 3290,+ 3310+ ],+ [+ 3320,+ 3340+ ],+ [+ 3347,+ 3367+ ],+ [+ 3377,+ 3397+ ],+ [+ 3428,+ 3448+ ],+ [+ 3461,+ 3481+ ],+ [+ 3494,+ 3514+ ],+ [+ 3524,+ 3544+ ],+ [+ 3557,+ 3577+ ],+ [+ 3587,+ 3607+ ],+ [+ 3620,+ 3640+ ],+ [+ 3671,+ 3691+ ],+ [+ 3701,+ 3721+ ],+ [+ 3737,+ 3757+ ],+ [+ 3767,+ 3787+ ],+ [+ 3800,+ 3820+ ],+ [+ 3833,+ 3853+ ],+ [+ 3863,+ 3883+ ],+ [+ 3917,+ 3937+ ],+ [+ 3944,+ 3964+ ],+ [+ 3974,+ 3994+ ],+ [+ 4007,+ 4027+ ],+ [+ 4046,+ 4066+ ],+ [+ 4085,+ 4105+ ],+ [+ 4115,+ 4135+ ],+ [+ 4166,+ 4186+ ],+ [+ 4199,+ 4219+ ],+ [+ 4232,+ 4252+ ],+ [+ 4265,+ 4285+ ],+ [+ 4301,+ 4321+ ],+ [+ 4334,+ 4354+ ],+ [+ 4364,+ 4384+ ],+ [+ 4415,+ 4435+ ],+ [+ 4445,+ 4465+ ],+ [+ 4481,+ 4501+ ],+ [+ 4514,+ 4534+ ],+ [+ 4550,+ 4570+ ],+ [+ 4583,+ 4603+ ],+ [+ 4616,+ 4636+ ],+ [+ 4670,+ 4690+ ],+ [+ 4709,+ 4729+ ],+ [+ 4742,+ 4762+ ],+ [+ 4778,+ 4798+ ],+ [+ 4814,+ 4834+ ],+ [+ 4847,+ 4867+ ],+ [+ 4883,+ 4903+ ],+ [+ 4940,+ 4960+ ],+ [+ 4976,+ 4996+ ],+ [+ 5012,+ 5032+ ],+ [+ 5045,+ 5065+ ],+ [+ 5081,+ 5101+ ],+ [+ 5114,+ 5134+ ],+ [+ 5150,+ 5170+ ],+ [+ 5210,+ 5230+ ],+ [+ 5243,+ 5263+ ],+ [+ 5282,+ 5302+ ],+ [+ 5321,+ 5341+ ],+ [+ 5357,+ 5377+ ],+ [+ 5393,+ 5413+ ],+ [+ 5429,+ 5449+ ],+ [+ 5486,+ 5506+ ],+ [+ 5519,+ 5539+ ],+ [+ 5555,+ 5575+ ],+ [+ 5591,+ 5611+ ],+ [+ 5627,+ 5647+ ],+ [+ 5660,+ 5680+ ],+ [+ 5693,+ 5713+ ],+ [+ 5785,+ 5800+ ]+ ]+}
demo/routing/crossbar/fusion-crossbar-24-3x.mp4added⋯ 1 unchanged line ⋯
demo/routing/crossbar/fusion-crossbar-24.brdadded+289@@ -0,0 +1,289 @@+<?xml version="1.0" encoding="utf-8"?>+<!DOCTYPE eagle SYSTEM "eagle.dtd">+<eagle version="9.6.2">+ <drawing>+ <settings />+ <grid distance="0.1" unitdist="mm" unit="mm" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="mm" altunit="mm" />+ <layers>+ <layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes" />+ <layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes" />+ <layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes" />+ <layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes" />+ <layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes" />+ <layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes" />+ <layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes" />+ <layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes" />+ <layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes" />+ <layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes" />+ <layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes" />+ <layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes" />+ <layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes" />+ <layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes" />+ <layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes" />+ <layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes" />+ <layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes" />+ <layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes" />+ <layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes" />+ <layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes" />+ <layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes" />+ <layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes" />+ <layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes" />+ <layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes" />+ <layer number="39" name="tKeepout" color="4" fill="11" visible="no" active="yes" />+ <layer number="40" name="bKeepout" color="1" fill="11" visible="no" active="yes" />+ <layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="yes" />+ <layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="yes" />+ <layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="yes" />+ <layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes" />+ <layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes" />+ <layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes" />+ <layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes" />+ <layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes" />+ <layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes" />+ <layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes" />+ <layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes" />+ <layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes" />+ <layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes" />+ <layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes" />+ <layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes" />+ <layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes" />+ <layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes" />+ </layers>+ <board>+ <plain>+ <wire x1="38" y1="24" x2="132" y2="24" width="0" layer="20" />+ <wire x1="132" y1="24" x2="132" y2="133" width="0" layer="20" />+ <wire x1="132" y1="133" x2="38" y2="133" width="0" layer="20" />+ <wire x1="38" y1="133" x2="38" y2="24" width="0" layer="20" />+ <text x="48" y="129" size="2" layer="21">ADOM / 24-NET CROSSOVER</text>+ <text x="49" y="26" size="1.3" layer="21">ASTRA > ADOM BRIDGE > FUSION</text>+ <text x="63" y="118" size="1.3" layer="21">24 NETS / 72 PADS / 2 LAYERS</text>+ </plain>+ <libraries>+ <library name="FusionCrossbarFixture">+ <packages>+ <package name="J1">+ <smd name="1" x="45" y="52.0" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="2" x="45" y="54.54" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="3" x="45" y="57.08" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="4" x="45" y="59.62" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="5" x="45" y="62.16" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="6" x="45" y="64.7" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="7" x="45" y="67.24" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="8" x="45" y="69.78" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="9" x="45" y="72.32" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="10" x="45" y="74.86" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="11" x="45" y="77.4" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="12" x="45" y="79.94" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="13" x="45" y="82.48" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="14" x="45" y="85.02" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="15" x="45" y="87.56" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="16" x="45" y="90.1" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="17" x="45" y="92.64" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="18" x="45" y="95.18" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="19" x="45" y="97.72" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="20" x="45" y="100.26" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="21" x="45" y="102.8" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="22" x="45" y="105.34" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="23" x="45" y="107.88" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="24" x="45" y="110.42" dx="1.5" dy="1.5" layer="1" roundness="20" />+ </package>+ <package name="J2">+ <smd name="1" x="65.0" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="8" x="82.78" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="15" x="100.56" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="22" x="118.34" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="5" x="75.16" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="12" x="92.94" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="19" x="110.72" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="2" x="67.54" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="9" x="85.32" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="16" x="103.1" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="23" x="120.88" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="6" x="77.7" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="13" x="95.48" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="20" x="113.26" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="3" x="70.08" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="10" x="87.86" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="17" x="105.64" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="24" x="123.42" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="7" x="80.24" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="14" x="98.02" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="21" x="115.8" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="4" x="72.62" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="11" x="90.4" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ <smd name="18" x="108.18" y="35" dx="1.5" dy="1.5" layer="1" roundness="20" />+ </package>+ <package name="J3">+ <pad name="1" x="65.0" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="8" x="82.78" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="15" x="100.56" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="22" x="118.34" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="5" x="75.16" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="12" x="92.94" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="19" x="110.72" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="2" x="67.54" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="9" x="85.32" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="16" x="103.1" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="23" x="120.88" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="6" x="77.7" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="13" x="95.48" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="20" x="113.26" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="3" x="70.08" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="10" x="87.86" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="17" x="105.64" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="24" x="123.42" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="7" x="80.24" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="14" x="98.02" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="21" x="115.8" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="4" x="72.62" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="11" x="90.4" y="125" drill="0.8" diameter="1.5" shape="round" />+ <pad name="18" x="108.18" y="125" drill="0.8" diameter="1.5" shape="round" />+ </package>+ </packages>+ </library>+ </libraries>+ <attributes />+ <variantdefs />+ <classes>+ <class number="0" name="default" width=".3" drill=".3" />+ </classes>+ <designrules name="FusionCrossbarFixture">+ <param name="layerSetup" value="(1*16)" />+ <param name="mdWireWire" value="0.2mm" />+ <param name="mdWirePad" value="0.2mm" />+ <param name="mdWireVia" value="0.2mm" />+ <param name="msWidth" value="0.2mm" />+ <param name="msDrill" value="0.3mm" />+ <param name="mdCopperDimension" value="0.5mm" />+ </designrules>+ <elements>+ <element name="J1" library="FusionCrossbarFixture" package="J1" value="CROSSBAR_TEST" x="0" y="0" />+ <element name="J2" library="FusionCrossbarFixture" package="J2" value="CROSSBAR_TEST" x="0" y="0" />+ <element name="J3" library="FusionCrossbarFixture" package="J3" value="CROSSBAR_TEST" x="0" y="0" />+ </elements>+ <signals>+ <signal name="CH_01">+ <contactref element="J1" pad="1" />+ <contactref element="J2" pad="1" />+ <contactref element="J3" pad="1" />+ </signal>+ <signal name="CH_02">+ <contactref element="J1" pad="2" />+ <contactref element="J2" pad="8" />+ <contactref element="J3" pad="8" />+ </signal>+ <signal name="CH_03">+ <contactref element="J1" pad="3" />+ <contactref element="J2" pad="15" />+ <contactref element="J3" pad="15" />+ </signal>+ <signal name="CH_04">+ <contactref element="J1" pad="4" />+ <contactref element="J2" pad="22" />+ <contactref element="J3" pad="22" />+ </signal>+ <signal name="CH_05">+ <contactref element="J1" pad="5" />+ <contactref element="J2" pad="5" />+ <contactref element="J3" pad="5" />+ </signal>+ <signal name="CH_06">+ <contactref element="J1" pad="6" />+ <contactref element="J2" pad="12" />+ <contactref element="J3" pad="12" />+ </signal>+ <signal name="CH_07">+ <contactref element="J1" pad="7" />+ <contactref element="J2" pad="19" />+ <contactref element="J3" pad="19" />+ </signal>+ <signal name="CH_08">+ <contactref element="J1" pad="8" />+ <contactref element="J2" pad="2" />+ <contactref element="J3" pad="2" />+ </signal>+ <signal name="CH_09">+ <contactref element="J1" pad="9" />+ <contactref element="J2" pad="9" />+ <contactref element="J3" pad="9" />+ </signal>+ <signal name="CH_10">+ <contactref element="J1" pad="10" />+ <contactref element="J2" pad="16" />+ <contactref element="J3" pad="16" />+ </signal>+ <signal name="CH_11">+ <contactref element="J1" pad="11" />+ <contactref element="J2" pad="23" />+ <contactref element="J3" pad="23" />+ </signal>+ <signal name="CH_12">+ <contactref element="J1" pad="12" />+ <contactref element="J2" pad="6" />+ <contactref element="J3" pad="6" />+ </signal>+ <signal name="CH_13">+ <contactref element="J1" pad="13" />+ <contactref element="J2" pad="13" />+ <contactref element="J3" pad="13" />+ </signal>+ <signal name="CH_14">+ <contactref element="J1" pad="14" />+ <contactref element="J2" pad="20" />+ <contactref element="J3" pad="20" />+ </signal>+ <signal name="CH_15">+ <contactref element="J1" pad="15" />+ <contactref element="J2" pad="3" />+ <contactref element="J3" pad="3" />+ </signal>+ <signal name="CH_16">+ <contactref element="J1" pad="16" />+ <contactref element="J2" pad="10" />+ <contactref element="J3" pad="10" />+ </signal>+ <signal name="CH_17">+ <contactref element="J1" pad="17" />+ <contactref element="J2" pad="17" />+ <contactref element="J3" pad="17" />+ </signal>+ <signal name="CH_18">+ <contactref element="J1" pad="18" />+ <contactref element="J2" pad="24" />+ <contactref element="J3" pad="24" />+ </signal>+ <signal name="CH_19">+ <contactref element="J1" pad="19" />+ <contactref element="J2" pad="7" />+ <contactref element="J3" pad="7" />+ </signal>+ <signal name="CH_20">+ <contactref element="J1" pad="20" />+ <contactref element="J2" pad="14" />+ <contactref element="J3" pad="14" />+ </signal>+ <signal name="CH_21">+ <contactref element="J1" pad="21" />+ <contactref element="J2" pad="21" />+ <contactref element="J3" pad="21" />+ </signal>+ <signal name="CH_22">+ <contactref element="J1" pad="22" />+ <contactref element="J2" pad="4" />+ <contactref element="J3" pad="4" />+ </signal>+ <signal name="CH_23">+ <contactref element="J1" pad="23" />+ <contactref element="J2" pad="11" />+ <contactref element="J3" pad="11" />+ </signal>+ <signal name="CH_24">+ <contactref element="J1" pad="24" />+ <contactref element="J2" pad="18" />+ <contactref element="J3" pad="18" />+ </signal>+ </signals>+ </board>+ </drawing>+</eagle>
demo/routing/crossbar/install.jsonadded+11@@ -0,0 +1,11 @@+{+ "durationMs": 715,+ "exitCode": 0,+ "ok": true,+ "status": "ok",+ "stderr": "",+ "stdout": "{\r\n \"backup\": \"C:/Users/john/AppData/Local/Adom Bridge/bridges-cache/fusion360/routing-backup-20260905-163355\",\r\n \"version\": \"1.10.0-dev.routing.2\",\r\n \"sha256\": \"36AB678B4A017F39E6F29E82F1752D46CF61E578E18C524DB89684DDC7E47F48\"\r\n}\r\n",+ "success": true,+ "timedOut": false,+ "timeoutSeconds": 75+}
demo/routing/crossbar/make_crossbar.pyadded+51@@ -0,0 +1,51 @@+"""Calculate Fusion's 24-net crossover from the requested permutation, no router."""+import copy+import json+from pathlib import Path+import xml.etree.ElementTree as E+ROOT=Path(__file__).resolve().parent++def make():+ root=E.Element('eagle',version='9.6.2');drawing=E.SubElement(root,'drawing')+ E.SubElement(drawing,'settings')+ E.SubElement(drawing,'grid',distance='0.1',unitdist='mm',unit='mm',style='lines',multiple='1',display='no',altdistance='0.01',altunitdist='mm',altunit='mm')+ layers=E.parse(ROOT.parents[2]/'examples/ADS8588SIPM.fusion.lbr').find('drawing/layers')+ drawing.append(copy.deepcopy(layers));board=E.SubElement(drawing,'board');plain=E.SubElement(board,'plain')+ corners=[(38,24),(132,24),(132,133),(38,133)]+ for a,b in zip(corners,corners[1:]+corners[:1]):+ E.SubElement(plain,'wire',x1=str(a[0]),y1=str(a[1]),x2=str(b[0]),y2=str(b[1]),width='0',layer='20')+ def label(text,x,y,size=1.3):E.SubElement(plain,'text',x=str(x),y=str(y),size=str(size),layer='21').text=text+ label('ADOM / 24-NET CROSSOVER',48,129,2)+ label('ASTRA > ADOM BRIDGE > FUSION',49,26,1.3)+ label('24 NETS / 72 PADS / 2 LAYERS',63,118,1.3)+ libs=E.SubElement(board,'libraries');lib=E.SubElement(libs,'library',name='FusionCrossbarFixture');pkgs=E.SubElement(lib,'packages')+ elements=E.SubElement(board,'elements');signals=E.SubElement(board,'signals')+ packages={}+ for ref in ['J1','J2','J3']:+ packages[ref]=E.SubElement(pkgs,'package',name=ref)+ E.SubElement(elements,'element',name=ref,library='FusionCrossbarFixture',package=ref,value='CROSSBAR_TEST',x='0',y='0')+ plans=[]+ for i in range(24):+ j=7*i%24;x=round(65+j*2.54,6);y=round(52+i*2.54,6);net=f'CH_{i+1:02d}'+ pads=[('J1',i+1,45,y),('J2',j+1,x,35),('J3',j+1,x,125)]+ signal=E.SubElement(signals,'signal',name=net)+ for ref,n,px,py in pads:+ attrs={'name':str(n),'x':str(px),'y':str(py)}+ if ref=='J3':E.SubElement(packages[ref],'pad',**attrs,drill='0.8',diameter='1.5',shape='round')+ else:E.SubElement(packages[ref],'smd',**attrs,dx='1.5',dy='1.5',layer='1',roundness='20')+ E.SubElement(signal,'contactref',element=ref,pad=str(n))+ plans.append({'net':net,'layer':1,'width':.3,'viaDiameter':.6,'viaDrill':.3,'paths':[+ [{'pad':f'J1.{i+1}'},[55,y],{'x':x,'y':y,'layer':16},{'x':x,'y':42,'layer':1},{'pad':f'J2.{j+1}'}],+ [{'x':x,'y':y,'layer':16},{'pad':f'J3.{j+1}'}]]})+ # EAGLE child order is significant; put rules/classes before elements/signals.+ board.remove(elements);board.remove(signals)+ E.SubElement(board,'attributes');E.SubElement(board,'variantdefs')+ E.SubElement(E.SubElement(board,'classes'),'class',number='0',name='default',width='.3',drill='.3')+ rules=E.SubElement(board,'designrules',name='FusionCrossbarFixture')+ for name,value in {'layerSetup':'(1*16)','mdWireWire':'0.2mm','mdWirePad':'0.2mm','mdWireVia':'0.2mm','msWidth':'0.2mm','msDrill':'0.3mm','mdCopperDimension':'0.5mm'}.items():E.SubElement(rules,'param',name=name,value=value)+ board.append(elements);board.append(signals);E.indent(root)+ (ROOT/'fusion-crossbar-24.brd').write_text('<?xml version="1.0" encoding="utf-8"?>\n<!DOCTYPE eagle SYSTEM "eagle.dtd">\n'+E.tostring(root,encoding='unicode'))+ (ROOT/'plan.json').write_text(json.dumps(plans,indent=2)+'\n')+ return board,plans+if __name__=='__main__':+ b,p=make();print('Calculated 24 nets, 72 pads: j=(7*i) mod 24')
demo/routing/crossbar/plan.jsonadded+986@@ -0,0 +1,986 @@+[+ {+ "net": "CH_01",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.1"+ },+ [+ 55,+ 52.0+ ],+ {+ "x": 65.0,+ "y": 52.0,+ "layer": 16+ },+ {+ "x": 65.0,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.1"+ }+ ],+ [+ {+ "x": 65.0,+ "y": 52.0,+ "layer": 16+ },+ {+ "pad": "J3.1"+ }+ ]+ ]+ },+ {+ "net": "CH_02",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.2"+ },+ [+ 55,+ 54.54+ ],+ {+ "x": 82.78,+ "y": 54.54,+ "layer": 16+ },+ {+ "x": 82.78,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.8"+ }+ ],+ [+ {+ "x": 82.78,+ "y": 54.54,+ "layer": 16+ },+ {+ "pad": "J3.8"+ }+ ]+ ]+ },+ {+ "net": "CH_03",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.3"+ },+ [+ 55,+ 57.08+ ],+ {+ "x": 100.56,+ "y": 57.08,+ "layer": 16+ },+ {+ "x": 100.56,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.15"+ }+ ],+ [+ {+ "x": 100.56,+ "y": 57.08,+ "layer": 16+ },+ {+ "pad": "J3.15"+ }+ ]+ ]+ },+ {+ "net": "CH_04",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.4"+ },+ [+ 55,+ 59.62+ ],+ {+ "x": 118.34,+ "y": 59.62,+ "layer": 16+ },+ {+ "x": 118.34,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.22"+ }+ ],+ [+ {+ "x": 118.34,+ "y": 59.62,+ "layer": 16+ },+ {+ "pad": "J3.22"+ }+ ]+ ]+ },+ {+ "net": "CH_05",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.5"+ },+ [+ 55,+ 62.16+ ],+ {+ "x": 75.16,+ "y": 62.16,+ "layer": 16+ },+ {+ "x": 75.16,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.5"+ }+ ],+ [+ {+ "x": 75.16,+ "y": 62.16,+ "layer": 16+ },+ {+ "pad": "J3.5"+ }+ ]+ ]+ },+ {+ "net": "CH_06",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.6"+ },+ [+ 55,+ 64.7+ ],+ {+ "x": 92.94,+ "y": 64.7,+ "layer": 16+ },+ {+ "x": 92.94,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.12"+ }+ ],+ [+ {+ "x": 92.94,+ "y": 64.7,+ "layer": 16+ },+ {+ "pad": "J3.12"+ }+ ]+ ]+ },+ {+ "net": "CH_07",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.7"+ },+ [+ 55,+ 67.24+ ],+ {+ "x": 110.72,+ "y": 67.24,+ "layer": 16+ },+ {+ "x": 110.72,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.19"+ }+ ],+ [+ {+ "x": 110.72,+ "y": 67.24,+ "layer": 16+ },+ {+ "pad": "J3.19"+ }+ ]+ ]+ },+ {+ "net": "CH_08",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.8"+ },+ [+ 55,+ 69.78+ ],+ {+ "x": 67.54,+ "y": 69.78,+ "layer": 16+ },+ {+ "x": 67.54,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.2"+ }+ ],+ [+ {+ "x": 67.54,+ "y": 69.78,+ "layer": 16+ },+ {+ "pad": "J3.2"+ }+ ]+ ]+ },+ {+ "net": "CH_09",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.9"+ },+ [+ 55,+ 72.32+ ],+ {+ "x": 85.32,+ "y": 72.32,+ "layer": 16+ },+ {+ "x": 85.32,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.9"+ }+ ],+ [+ {+ "x": 85.32,+ "y": 72.32,+ "layer": 16+ },+ {+ "pad": "J3.9"+ }+ ]+ ]+ },+ {+ "net": "CH_10",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.10"+ },+ [+ 55,+ 74.86+ ],+ {+ "x": 103.1,+ "y": 74.86,+ "layer": 16+ },+ {+ "x": 103.1,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.16"+ }+ ],+ [+ {+ "x": 103.1,+ "y": 74.86,+ "layer": 16+ },+ {+ "pad": "J3.16"+ }+ ]+ ]+ },+ {+ "net": "CH_11",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.11"+ },+ [+ 55,+ 77.4+ ],+ {+ "x": 120.88,+ "y": 77.4,+ "layer": 16+ },+ {+ "x": 120.88,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.23"+ }+ ],+ [+ {+ "x": 120.88,+ "y": 77.4,+ "layer": 16+ },+ {+ "pad": "J3.23"+ }+ ]+ ]+ },+ {+ "net": "CH_12",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.12"+ },+ [+ 55,+ 79.94+ ],+ {+ "x": 77.7,+ "y": 79.94,+ "layer": 16+ },+ {+ "x": 77.7,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.6"+ }+ ],+ [+ {+ "x": 77.7,+ "y": 79.94,+ "layer": 16+ },+ {+ "pad": "J3.6"+ }+ ]+ ]+ },+ {+ "net": "CH_13",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.13"+ },+ [+ 55,+ 82.48+ ],+ {+ "x": 95.48,+ "y": 82.48,+ "layer": 16+ },+ {+ "x": 95.48,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.13"+ }+ ],+ [+ {+ "x": 95.48,+ "y": 82.48,+ "layer": 16+ },+ {+ "pad": "J3.13"+ }+ ]+ ]+ },+ {+ "net": "CH_14",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.14"+ },+ [+ 55,+ 85.02+ ],+ {+ "x": 113.26,+ "y": 85.02,+ "layer": 16+ },+ {+ "x": 113.26,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.20"+ }+ ],+ [+ {+ "x": 113.26,+ "y": 85.02,+ "layer": 16+ },+ {+ "pad": "J3.20"+ }+ ]+ ]+ },+ {+ "net": "CH_15",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.15"+ },+ [+ 55,+ 87.56+ ],+ {+ "x": 70.08,+ "y": 87.56,+ "layer": 16+ },+ {+ "x": 70.08,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.3"+ }+ ],+ [+ {+ "x": 70.08,+ "y": 87.56,+ "layer": 16+ },+ {+ "pad": "J3.3"+ }+ ]+ ]+ },+ {+ "net": "CH_16",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.16"+ },+ [+ 55,+ 90.1+ ],+ {+ "x": 87.86,+ "y": 90.1,+ "layer": 16+ },+ {+ "x": 87.86,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.10"+ }+ ],+ [+ {+ "x": 87.86,+ "y": 90.1,+ "layer": 16+ },+ {+ "pad": "J3.10"+ }+ ]+ ]+ },+ {+ "net": "CH_17",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.17"+ },+ [+ 55,+ 92.64+ ],+ {+ "x": 105.64,+ "y": 92.64,+ "layer": 16+ },+ {+ "x": 105.64,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.17"+ }+ ],+ [+ {+ "x": 105.64,+ "y": 92.64,+ "layer": 16+ },+ {+ "pad": "J3.17"+ }+ ]+ ]+ },+ {+ "net": "CH_18",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.18"+ },+ [+ 55,+ 95.18+ ],+ {+ "x": 123.42,+ "y": 95.18,+ "layer": 16+ },+ {+ "x": 123.42,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.24"+ }+ ],+ [+ {+ "x": 123.42,+ "y": 95.18,+ "layer": 16+ },+ {+ "pad": "J3.24"+ }+ ]+ ]+ },+ {+ "net": "CH_19",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.19"+ },+ [+ 55,+ 97.72+ ],+ {+ "x": 80.24,+ "y": 97.72,+ "layer": 16+ },+ {+ "x": 80.24,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.7"+ }+ ],+ [+ {+ "x": 80.24,+ "y": 97.72,+ "layer": 16+ },+ {+ "pad": "J3.7"+ }+ ]+ ]+ },+ {+ "net": "CH_20",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.20"+ },+ [+ 55,+ 100.26+ ],+ {+ "x": 98.02,+ "y": 100.26,+ "layer": 16+ },+ {+ "x": 98.02,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.14"+ }+ ],+ [+ {+ "x": 98.02,+ "y": 100.26,+ "layer": 16+ },+ {+ "pad": "J3.14"+ }+ ]+ ]+ },+ {+ "net": "CH_21",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.21"+ },+ [+ 55,+ 102.8+ ],+ {+ "x": 115.8,+ "y": 102.8,+ "layer": 16+ },+ {+ "x": 115.8,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.21"+ }+ ],+ [+ {+ "x": 115.8,+ "y": 102.8,+ "layer": 16+ },+ {+ "pad": "J3.21"+ }+ ]+ ]+ },+ {+ "net": "CH_22",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.22"+ },+ [+ 55,+ 105.34+ ],+ {+ "x": 72.62,+ "y": 105.34,+ "layer": 16+ },+ {+ "x": 72.62,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.4"+ }+ ],+ [+ {+ "x": 72.62,+ "y": 105.34,+ "layer": 16+ },+ {+ "pad": "J3.4"+ }+ ]+ ]+ },+ {+ "net": "CH_23",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.23"+ },+ [+ 55,+ 107.88+ ],+ {+ "x": 90.4,+ "y": 107.88,+ "layer": 16+ },+ {+ "x": 90.4,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.11"+ }+ ],+ [+ {+ "x": 90.4,+ "y": 107.88,+ "layer": 16+ },+ {+ "pad": "J3.11"+ }+ ]+ ]+ },+ {+ "net": "CH_24",+ "layer": 1,+ "width": 0.3,+ "viaDiameter": 0.6,+ "viaDrill": 0.3,+ "paths": [+ [+ {+ "pad": "J1.24"+ },+ [+ 55,+ 110.42+ ],+ {+ "x": 108.18,+ "y": 110.42,+ "layer": 16+ },+ {+ "x": 108.18,+ "y": 42,+ "layer": 1+ },+ {+ "pad": "J2.18"+ }+ ],+ [+ {+ "x": 108.18,+ "y": 110.42,+ "layer": 16+ },+ {+ "pad": "J3.18"+ }+ ]+ ]+ }+]
demo/routing/crossbar/player-open.jsonadded+9@@ -0,0 +1,9 @@+{+ "durationMs": 752,+ "exitCode": 0,+ "status": "ok",+ "stderr": "",+ "stdout": "",+ "success": true,+ "timeoutSeconds": 120+}
demo/routing/crossbar/player-verification.jsonadded+26@@ -0,0 +1,26 @@+{+ "window": {+ "className": "ApplicationFrameWindow",+ "enabled": true,+ "hung": false,+ "hwnd": 18812610,+ "image": "ApplicationFrameHost.exe",+ "kind": "normal",+ "maximized": false,+ "minimized": false,+ "owner": 0,+ "pid": 15016,+ "rect": {+ "bottom": 1434,+ "height": 1338,+ "left": 118,+ "right": 2241,+ "top": 96,+ "width": 2123+ },+ "title": "Media Player",+ "z": 0+ },+ "screenshotPath": "/home/adom/project/screenshots/adom-bridge/window/2026-09-05T21-43-36.734-18812610.safe.png",+ "success": true+}
demo/routing/crossbar/record_crossbar.pyadded+53@@ -0,0 +1,53 @@+"""Record verified native Fusion edits; keep wall timestamps for action editing."""+import argparse+import json+from pathlib import Path+import sys+import time+sys.path.insert(0,str(Path(__file__).resolve().parents[1]))+from call import call+ROOT=Path(__file__).resolve().parent+p=argparse.ArgumentParser();p.add_argument('--hwnd',type=int,required=True);p.add_argument('--take',type=Path,required=True);a=p.parse_args()+a.take.mkdir(parents=True,exist_ok=False)+records=[]+def invoke(v,args):+ start=time.time();r=call(v,{**args,'reason':'Create and record the requested Fusion 24-net crossover demo'})+ records.append({'verb':v,'start':start,'end':time.time(),'args':args,'result':r})+ (a.take/'calls.json').write_text(json.dumps(records,indent=2)+'\n')+ if not r.get('success',r.get('ok',False)):raise RuntimeError(json.dumps(r))+ return r+s=invoke('fusion_routing_state',{'expectDocument':'fusion-crossbar-24'})+assert s['bridgeVersion']=='1.10.0-dev.routing.2' and s['segmentCount']==s['viaCount']==0+assert len(s['pads'])==72 and len(s['nets'])==24+(a.take/'before.json').write_text(json.dumps(s,indent=2)+'\n')+def guard():return {'expectDocument':'fusion-crossbar-24','boardId':s['boardId'],'expectedRevision':s['revision']}+plans=[]+for row in json.loads((ROOT/'plan.json').read_text()):+ preview=invoke('fusion_route_net',{**guard(),**row,'dryRun':True})+ assert len(preview['plan']['items'])==7+ plans.append((row,preview['plan']['items']))+invoke('fusion_execute_text_command',{'command':'Electron.ImmediateRepaint /full','expectDocument':'fusion-crossbar-24'})+rec=invoke('desktop_record_window_start',{'hwnd':a.hwnd,'fps':30,'audio':False,'maxDurationMs':600000})+(a.take/'record-start.json').write_text(json.dumps(rec,indent=2)+'\n')+try:+ time.sleep(1)+ for row,items in plans:+ for item in items:+ if item['kind']=='segment':+ route={'net':item['net'],'width':item['width'],'layer':item['layer'],'points':[item['start'],item['end']]}+ else:+ xy=item['at'];route={'net':item['net'],'layer':1,'width':.3,'viaDiameter':item['diameter'],'viaDrill':item['drill'],'points':[xy,{'x':xy[0],'y':xy[1],'layer':16}]}+ s=invoke('fusion_route_net',{**guard(),**route})+ assert s['verified'] and s['mutated']+ time.sleep(.2)+ s=invoke('fusion_routing_drc',guard())+ assert s['drc']['checked'] and not s['drc']['errorCount'] and not s['drc']['warningCount'],s['drc']+ print(row['net'],s['segmentCount'],s['viaCount'],len(s['remainingNets']),'nets remain',flush=True)+ assert s['segmentCount']==120 and s['viaCount']==48 and not s['remainingNets'] and s['drc']['clean']+ (a.take/'final.json').write_text(json.dumps(s,indent=2)+'\n')+ time.sleep(2)+finally:+ stop=invoke('desktop_record_window_stop',{'recordingId':rec['recordingId']})+ (a.take/'record-stop.json').write_text(json.dumps(stop,indent=2)+'\n')+invoke('pull_file',{'filePaths':[stop['path']],'saveTo':str(a.take.resolve())})+print('PASS: 24 nets / 120 segments / 48 vias / native DRC clean',flush=True)
demo/routing/crossbar/render_crossbar.pyadded+74@@ -0,0 +1,74 @@+import sys,subprocess,json+from pathlib import Path+import shutil+F=shutil.which('ffmpeg');root=Path(__file__).parent+HEADER='''[Script Info]+ScriptType: v4.00++PlayResX: 1920+PlayResY: 1080+WrapStyle: 2+[V4+ Styles]+Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding+Style: Main,Liberation Sans,34,&H00FFFFFF,&H00FFFFFF,&H00130F0A,&H00130F0A,0,0,0,0,100,100,0,0,1,1,0,2,30,30,22,1+[Events]+Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text+'''+def stamp(t):+ cs=round(t*100);return f'{cs//360000}:{cs//6000%60:02d}:{cs//100%60:02d}.{cs%100:02d}'+def render(name,source,start,end,cues,side,title,hold=4,keep=None,action_seconds=None,frame_ranges=None):+ duration=(action_seconds if action_seconds is not None else (sum(b-a for a,b in keep) if keep else end-start)/3)+hold+ events=[]+ def text(t0,t1,s):events.append(f'Dialogue: 0,{stamp(t0)},{stamp(t1)},Main,,0,0,0,,{s}')+ text(0,duration,r'{\an7\pos(34,16)\fs38\b1\c&H00E5CF65&}CODEX ASTRA IN ADOM HYDROGEN'+r'{\c&H00FFFFFF&} / '+title)+ text(0,duration,r'{\an7\pos(1490,125)\fs48\b1\c&H00E5CF65&}3x SPEED')+ text(0,duration,r'{\an7\pos(1490,197)\fs28}Native Fusion capture\NIdle waits trimmed')+ for y,heading,body in side:+ text(0,duration,fr'{{\an7\pos(1490,{y})\fs32\b1\c&H00E5CF65&}}'+heading)+ text(0,duration,fr'{{\an7\pos(1490,{y+46})\fs27}}'+body)+ for a,b,s in cues:text(a,b,r'{\an2\pos(960,1058)\fs34}'+s)+ text(duration-hold-.2,duration,r'{\an7\pos(1490,885)\fs23\c&H00B9B9B9&}Final frame held for reading')+ ass=root/(name+'.ass');ass.write_text(HEADER+'\n'.join(events)+'\n')+ out=root/(name+'.mp4')+ selection=("select='"+'+'.join(f'between(t,{a},{b})' for a,b in keep)+"',setpts=N/(30*TB)" if keep else f'trim=start={start}:end={end}')+ if frame_ranges is not None:+ selection="select='"+'+'.join(f'gte(n,{a})*lt(n,{b})' for a,b in frame_ranges)+"',setpts=N/(30*TB)"+ vf=f'{selection},setpts=(PTS-STARTPTS)/3,fps=30,scale=1440:900:force_original_aspect_ratio=decrease,pad=1440:900:(ow-iw)/2:(oh-ih)/2:color=0x0a0f13,pad=1920:1080:0:70:color=0x0a0f13,tpad=stop_mode=clone:stop_duration={hold},ass={ass}'+ subprocess.run([F,'-hide_banner','-loglevel','warning','-i',str(source),'-vf',vf,'-an','-c:v','libx264','-preset','fast','-crf','20','-pix_fmt','yuv420p','-movflags','+faststart','-y',str(out)],check=True)+ (root/(name+'.edit.json')).write_text(json.dumps({'source':str(source),'trimStartSeconds':start,'trimEndSeconds':end,'speed':3,'holdSeconds':hold,'durationSeconds':duration,'captions':cues,'keptSourceRanges':keep,'keptFrameRangesEndExclusive':frame_ranges},indent=2))+ print(out,flush=True)++if __name__=='__main__':+ import argparse+ p=argparse.ArgumentParser();p.add_argument('take',type=Path);a=p.parse_args()+ source=next(a.take.glob('window-*.mp4'))+ # select + N/(30*TB) removes gaps correctly only for verified constant-30fps input.+ frames=json.loads(subprocess.check_output(['ffprobe','-v','error','-select_streams','v:0','-show_entries','frame=best_effort_timestamp_time','-of','json',str(source)]))['frames']+ pts=[float(f['best_effort_timestamp_time']) for f in frames]+ assert all(abs((b-a)-1/30)<.00001 for a,b in zip(pts,pts[1:])), 'VFR source needs trim/concat'+ keep=json.loads((a.take/'action-ranges.json').read_text())+ final=json.loads((a.take/'final.json').read_text())+ assert final['segmentCount']==120 and final['viaCount']==48 and len(final['pads'])==72 and not final['remainingNets'] and final['drc']['clean']+ selected=[i for i,t in enumerate(pts) if any(lo<=t<=hi for lo,hi in keep)]+ frame_ranges=[]+ for i in selected:+ if frame_ranges and i==frame_ranges[-1][1]:frame_ranges[-1][1]=i+1+ else:frame_ranges.append([i,i+1])+ retained=len(selected)+ action=retained/90;duration=action+5+ cues=[+ (0,4,'Codex Astra calculates the 24-net crossover in Adom Hydrogen.'),+ (4,8,'Output column j = (7 x i) mod 24. Rows and columns use 2.54 mm pitch.'),+ (8,12,r'Top copper carries rows; bottom copper carries columns.\NCrossings stay on separate layers. No Freerouting.'),+ (12,16,r'fusion_routing_state reads nets, pads and revision.\Nfusion_route_net dryRun checks explicit planned geometry.'),+ (16,20,r'fusion_route_net adds each trace and via through Adom Bridge.\NexpectedRevision guards edits; copper is read back after each call.'),+ (20,action,r'Each net branches to a third pad and uses two through vias.\NFusion recalculates connectivity as the copper appears.'),+ (action,duration,r'fusion_routing_drc: 24 nets connected.\NNative Autodesk DRC: 0 errors / 0 warnings / 0 airwires.')]+ # Keep captions legible if the actual action is shorter than the template.+ if action<23:+ factor=action/24+ cues=[(x*factor,y*factor,t) for x,y,t in cues[:-2]]+[(20*factor,action,cues[-2][2]),(action,duration,cues[-1][2])]+ render('fusion-crossbar-24-3x',source,0,pts[-1]+1/30,cues,+ [(305,'THE BOARD',r'24 nets / 72 pads\N120 trace segments\N48 through vias'),+ (495,'THE CALCULATION',r'j = (7 x i) mod 24\N0.30 mm trace width\NExplicit Astra waypoints'),+ (685,'RECORD + VERIFY',r'Native AB window capture\NFusion copper read-back\NAutodesk DRC result')],+ '24-NET CROSSOVER',hold=5,keep=keep,action_seconds=action,frame_ranges=frame_ranges)
demo/routing/crossbar/take-01/action-ranges.jsonadded+626@@ -0,0 +1,626 @@+[+ [+ 0.9500000000000001,+ 2.0+ ],+ [+ 2.15,+ 2.8+ ],+ [+ 3.35,+ 4.0+ ],+ [+ 4.15,+ 4.800000000000001+ ],+ [+ 5.15,+ 5.800000000000001+ ],+ [+ 6.05,+ 6.7+ ],+ [+ 6.95,+ 7.6000000000000005+ ],+ [+ 8.25,+ 8.9+ ],+ [+ 9.35,+ 10.0+ ],+ [+ 11.35,+ 12.0+ ],+ [+ 12.35,+ 13.0+ ],+ [+ 13.25,+ 13.9+ ],+ [+ 14.15,+ 14.8+ ],+ [+ 15.75,+ 16.4+ ],+ [+ 16.65,+ 17.299999999999997+ ],+ [+ 18.35,+ 19.0+ ],+ [+ 19.45,+ 20.099999999999998+ ],+ [+ 20.35,+ 21.0+ ],+ [+ 21.35,+ 22.0+ ],+ [+ 22.85,+ 23.5+ ],+ [+ 23.65,+ 24.299999999999997+ ],+ [+ 25.75,+ 26.4+ ],+ [+ 26.75,+ 27.4+ ],+ [+ 27.65,+ 28.299999999999997+ ],+ [+ 28.65,+ 29.299999999999997+ ],+ [+ 30.15,+ 30.799999999999997+ ],+ [+ 31.05,+ 31.7+ ],+ [+ 32.05,+ 32.699999999999996+ ],+ [+ 33.05,+ 33.699999999999996+ ],+ [+ 34.05,+ 34.699999999999996+ ],+ [+ 34.85,+ 35.5+ ],+ [+ 35.85,+ 36.5+ ],+ [+ 37.45,+ 38.1+ ],+ [+ 38.35,+ 39.0+ ],+ [+ 40.25,+ 40.9+ ],+ [+ 42.25,+ 42.9+ ],+ [+ 43.15,+ 43.8+ ],+ [+ 44.85,+ 45.5+ ],+ [+ 45.65,+ 46.3+ ],+ [+ 47.75,+ 48.4+ ],+ [+ 48.55,+ 49.199999999999996+ ],+ [+ 49.65,+ 51.1+ ],+ [+ 51.35,+ 52.699999999999996+ ],+ [+ 53.15,+ 54.1+ ],+ [+ 55.15,+ 59.199999999999996+ ],+ [+ 60.05,+ 60.699999999999996+ ],+ [+ 60.95,+ 61.699999999999996+ ],+ [+ 62.95,+ 63.6+ ],+ [+ 64.15,+ 64.80000000000001+ ],+ [+ 65.15,+ 65.80000000000001+ ],+ [+ 66.05,+ 66.7+ ],+ [+ 67.45,+ 68.10000000000001+ ],+ [+ 68.45,+ 69.10000000000001+ ],+ [+ 70.45,+ 71.10000000000001+ ],+ [+ 71.45,+ 72.10000000000001+ ],+ [+ 72.35,+ 73.0+ ],+ [+ 73.35,+ 74.0+ ],+ [+ 75.05,+ 75.7+ ],+ [+ 76.05,+ 76.7+ ],+ [+ 77.05,+ 77.7+ ],+ [+ 77.95,+ 78.60000000000001+ ],+ [+ 78.95,+ 79.60000000000001+ ],+ [+ 79.85,+ 80.5+ ],+ [+ 80.85,+ 81.5+ ],+ [+ 82.35,+ 83.0+ ],+ [+ 83.35,+ 84.0+ ],+ [+ 84.35,+ 85.0+ ],+ [+ 85.35,+ 86.0+ ],+ [+ 86.45,+ 87.10000000000001+ ],+ [+ 87.55,+ 88.4+ ],+ [+ 88.65,+ 89.30000000000001+ ],+ [+ 90.55,+ 91.2+ ],+ [+ 91.55,+ 92.2+ ],+ [+ 92.65,+ 93.30000000000001+ ],+ [+ 93.45,+ 94.10000000000001+ ],+ [+ 94.65,+ 95.30000000000001+ ],+ [+ 95.75,+ 96.4+ ],+ [+ 96.75,+ 98.10000000000001+ ],+ [+ 98.45,+ 99.10000000000001+ ],+ [+ 99.45,+ 100.10000000000001+ ],+ [+ 100.55,+ 101.2+ ],+ [+ 101.65,+ 102.30000000000001+ ],+ [+ 102.65,+ 103.30000000000001+ ],+ [+ 103.65,+ 104.30000000000001+ ],+ [+ 104.75,+ 105.4+ ],+ [+ 106.45,+ 107.10000000000001+ ],+ [+ 107.45,+ 108.10000000000001+ ],+ [+ 108.65,+ 109.30000000000001+ ],+ [+ 109.65,+ 110.30000000000001+ ],+ [+ 110.65,+ 111.30000000000001+ ],+ [+ 111.55,+ 112.2+ ],+ [+ 112.55,+ 113.2+ ],+ [+ 114.25,+ 114.9+ ],+ [+ 115.35,+ 116.0+ ],+ [+ 116.45,+ 117.10000000000001+ ],+ [+ 117.45,+ 118.10000000000001+ ],+ [+ 118.55,+ 119.2+ ],+ [+ 119.55,+ 120.2+ ],+ [+ 120.65,+ 121.30000000000001+ ],+ [+ 122.35,+ 123.0+ ],+ [+ 123.35,+ 124.0+ ],+ [+ 124.55,+ 125.2+ ],+ [+ 125.55,+ 126.2+ ],+ [+ 126.65,+ 127.30000000000001+ ],+ [+ 127.75,+ 128.4+ ],+ [+ 128.75,+ 129.4+ ],+ [+ 130.55,+ 131.20000000000002+ ],+ [+ 131.45,+ 132.1+ ],+ [+ 132.45,+ 133.1+ ],+ [+ 133.55,+ 134.20000000000002+ ],+ [+ 134.85,+ 135.5+ ],+ [+ 136.15,+ 136.8+ ],+ [+ 137.15,+ 137.8+ ],+ [+ 138.85,+ 139.5+ ],+ [+ 139.95,+ 140.6+ ],+ [+ 141.05,+ 141.70000000000002+ ],+ [+ 142.15,+ 142.8+ ],+ [+ 143.35,+ 144.0+ ],+ [+ 144.45,+ 145.1+ ],+ [+ 145.45,+ 146.1+ ],+ [+ 147.15,+ 147.8+ ],+ [+ 148.15,+ 148.8+ ],+ [+ 149.35,+ 150.0+ ],+ [+ 150.45,+ 151.1+ ],+ [+ 151.65,+ 152.3+ ],+ [+ 152.75,+ 153.4+ ],+ [+ 153.85,+ 154.5+ ],+ [+ 155.65,+ 156.3+ ],+ [+ 156.95,+ 157.6+ ],+ [+ 158.05,+ 158.70000000000002+ ],+ [+ 159.25,+ 159.9+ ],+ [+ 160.45,+ 161.1+ ],+ [+ 161.55,+ 162.20000000000002+ ],+ [+ 162.75,+ 163.4+ ],+ [+ 164.65,+ 165.3+ ],+ [+ 165.85,+ 166.5+ ],+ [+ 167.05,+ 167.70000000000002+ ],+ [+ 168.15,+ 168.8+ ],+ [+ 169.35,+ 170.0+ ],+ [+ 170.45,+ 171.1+ ],+ [+ 171.65,+ 172.3+ ],+ [+ 173.65,+ 174.3+ ],+ [+ 174.75,+ 175.4+ ],+ [+ 176.05,+ 176.70000000000002+ ],+ [+ 177.35,+ 178.0+ ],+ [+ 178.55,+ 179.20000000000002+ ],+ [+ 179.75,+ 180.4+ ],+ [+ 180.95,+ 181.6+ ],+ [+ 182.85,+ 183.5+ ],+ [+ 183.95,+ 184.6+ ],+ [+ 185.15,+ 185.8+ ],+ [+ 186.35,+ 187.0+ ],+ [+ 187.55,+ 188.20000000000002+ ],+ [+ 188.65,+ 189.3+ ],+ [+ 189.75,+ 190.4+ ],+ [+ 192.8333,+ 193.3333+ ]+]
demo/routing/crossbar/take-01/before.jsonadded+1735@@ -0,0 +1,1735 @@+{+ "_timeoutHint": "ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.",+ "airwireCount": 48,+ "boardId": "ecc4548c-cb68-489f-8b82-46e7d41d61c0",+ "bridgeVersion": "1.10.0-dev.routing.2",+ "connectivitySource": "Fusion exported airwires; mutation paths recompute RATSNEST",+ "documentName": "fusion-crossbar-24",+ "drc": {+ "checked": false,+ "note": "Use fusion_routing_drc for a fresh Autodesk DRC"+ },+ "durationMs": 218,+ "error": "",+ "nets": [+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 65.0,+ 35.0+ ],+ "start": [+ 45.0,+ 52.0+ ]+ },+ {+ "end": [+ 65.0,+ 125.0+ ],+ "start": [+ 65.0,+ 35.0+ ]+ }+ ],+ "name": "CH_01",+ "pads": [+ "J1.1",+ "J2.1",+ "J3.1"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 82.78,+ 35.0+ ],+ "start": [+ 45.0,+ 54.54+ ]+ },+ {+ "end": [+ 82.78,+ 125.0+ ],+ "start": [+ 82.78,+ 35.0+ ]+ }+ ],+ "name": "CH_02",+ "pads": [+ "J1.2",+ "J2.8",+ "J3.8"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 100.56,+ 35.0+ ],+ "start": [+ 45.0,+ 57.08+ ]+ },+ {+ "end": [+ 100.56,+ 125.0+ ],+ "start": [+ 100.56,+ 35.0+ ]+ }+ ],+ "name": "CH_03",+ "pads": [+ "J1.3",+ "J2.15",+ "J3.15"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 118.34,+ 125.0+ ],+ "start": [+ 118.34,+ 35.0+ ]+ },+ {+ "end": [+ 118.34,+ 35.0+ ],+ "start": [+ 45.0,+ 59.62+ ]+ }+ ],+ "name": "CH_04",+ "pads": [+ "J1.4",+ "J2.22",+ "J3.22"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 75.16,+ 35.0+ ],+ "start": [+ 45.0,+ 62.16+ ]+ },+ {+ "end": [+ 75.16,+ 125.0+ ],+ "start": [+ 75.16,+ 35.0+ ]+ }+ ],+ "name": "CH_05",+ "pads": [+ "J1.5",+ "J2.5",+ "J3.5"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 92.94,+ 35.0+ ],+ "start": [+ 45.0,+ 64.7+ ]+ },+ {+ "end": [+ 92.94,+ 125.0+ ],+ "start": [+ 92.94,+ 35.0+ ]+ }+ ],+ "name": "CH_06",+ "pads": [+ "J1.6",+ "J2.12",+ "J3.12"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 110.72,+ 125.0+ ],+ "start": [+ 110.72,+ 35.0+ ]+ },+ {+ "end": [+ 110.72,+ 35.0+ ],+ "start": [+ 45.0,+ 67.24+ ]+ }+ ],+ "name": "CH_07",+ "pads": [+ "J1.7",+ "J2.19",+ "J3.19"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 67.54,+ 35.0+ ],+ "start": [+ 45.0,+ 69.78+ ]+ },+ {+ "end": [+ 67.54,+ 125.0+ ],+ "start": [+ 45.0,+ 69.78+ ]+ }+ ],+ "name": "CH_08",+ "pads": [+ "J1.8",+ "J2.2",+ "J3.2"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 85.32,+ 35.0+ ],+ "start": [+ 45.0,+ 72.32+ ]+ },+ {+ "end": [+ 85.32,+ 125.0+ ],+ "start": [+ 85.32,+ 35.0+ ]+ }+ ],+ "name": "CH_09",+ "pads": [+ "J1.9",+ "J2.9",+ "J3.9"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 103.1,+ 125.0+ ],+ "start": [+ 103.1,+ 35.0+ ]+ },+ {+ "end": [+ 103.1,+ 35.0+ ],+ "start": [+ 45.0,+ 74.86+ ]+ }+ ],+ "name": "CH_10",+ "pads": [+ "J1.10",+ "J2.16",+ "J3.16"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 120.88,+ 125.0+ ],+ "start": [+ 120.88,+ 35.0+ ]+ },+ {+ "end": [+ 120.88,+ 35.0+ ],+ "start": [+ 45.0,+ 77.4+ ]+ }+ ],+ "name": "CH_11",+ "pads": [+ "J1.11",+ "J2.23",+ "J3.23"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 77.7,+ 35.0+ ],+ "start": [+ 45.0,+ 79.94+ ]+ },+ {+ "end": [+ 77.7,+ 125.0+ ],+ "start": [+ 45.0,+ 79.94+ ]+ }+ ],+ "name": "CH_12",+ "pads": [+ "J1.12",+ "J2.6",+ "J3.6"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 95.48,+ 125.0+ ],+ "start": [+ 95.48,+ 35.0+ ]+ },+ {+ "end": [+ 95.48,+ 125.0+ ],+ "start": [+ 45.0,+ 82.48+ ]+ }+ ],+ "name": "CH_13",+ "pads": [+ "J1.13",+ "J2.13",+ "J3.13"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 113.26,+ 125.0+ ],+ "start": [+ 113.26,+ 35.0+ ]+ },+ {+ "end": [+ 113.26,+ 125.0+ ],+ "start": [+ 45.0,+ 85.02+ ]+ }+ ],+ "name": "CH_14",+ "pads": [+ "J1.14",+ "J2.20",+ "J3.20"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 70.08,+ 125.0+ ],+ "start": [+ 45.0,+ 87.56+ ]+ },+ {+ "end": [+ 70.08,+ 35.0+ ],+ "start": [+ 45.0,+ 87.56+ ]+ }+ ],+ "name": "CH_15",+ "pads": [+ "J1.15",+ "J2.3",+ "J3.3"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 87.86,+ 125.0+ ],+ "start": [+ 45.0,+ 90.1+ ]+ },+ {+ "end": [+ 87.86,+ 125.0+ ],+ "start": [+ 87.86,+ 35.0+ ]+ }+ ],+ "name": "CH_16",+ "pads": [+ "J1.16",+ "J2.10",+ "J3.10"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 105.64,+ 125.0+ ],+ "start": [+ 105.64,+ 35.0+ ]+ },+ {+ "end": [+ 105.64,+ 125.0+ ],+ "start": [+ 45.0,+ 92.64+ ]+ }+ ],+ "name": "CH_17",+ "pads": [+ "J1.17",+ "J2.17",+ "J3.17"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 123.42,+ 125.0+ ],+ "start": [+ 123.42,+ 35.0+ ]+ },+ {+ "end": [+ 123.42,+ 125.0+ ],+ "start": [+ 45.0,+ 95.18+ ]+ }+ ],+ "name": "CH_18",+ "pads": [+ "J1.18",+ "J2.24",+ "J3.24"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 80.24,+ 125.0+ ],+ "start": [+ 45.0,+ 97.72+ ]+ },+ {+ "end": [+ 80.24,+ 125.0+ ],+ "start": [+ 80.24,+ 35.0+ ]+ }+ ],+ "name": "CH_19",+ "pads": [+ "J1.19",+ "J2.7",+ "J3.7"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 98.02,+ 125.0+ ],+ "start": [+ 45.0,+ 100.26+ ]+ },+ {+ "end": [+ 98.02,+ 125.0+ ],+ "start": [+ 98.02,+ 35.0+ ]+ }+ ],+ "name": "CH_20",+ "pads": [+ "J1.20",+ "J2.14",+ "J3.14"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 115.8,+ 125.0+ ],+ "start": [+ 115.8,+ 35.0+ ]+ },+ {+ "end": [+ 115.8,+ 125.0+ ],+ "start": [+ 45.0,+ 102.8+ ]+ }+ ],+ "name": "CH_21",+ "pads": [+ "J1.21",+ "J2.21",+ "J3.21"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 72.62,+ 125.0+ ],+ "start": [+ 45.0,+ 105.34+ ]+ },+ {+ "end": [+ 72.62,+ 125.0+ ],+ "start": [+ 72.62,+ 35.0+ ]+ }+ ],+ "name": "CH_22",+ "pads": [+ "J1.22",+ "J2.4",+ "J3.4"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 90.4,+ 125.0+ ],+ "start": [+ 45.0,+ 107.88+ ]+ },+ {+ "end": [+ 90.4,+ 125.0+ ],+ "start": [+ 90.4,+ 35.0+ ]+ }+ ],+ "name": "CH_23",+ "pads": [+ "J1.23",+ "J2.11",+ "J3.11"+ ],+ "segments": 0,+ "vias": 0+ },+ {+ "airwireCount": 2,+ "airwires": [+ {+ "end": [+ 108.18,+ 125.0+ ],+ "start": [+ 45.0,+ 110.42+ ]+ },+ {+ "end": [+ 108.18,+ 125.0+ ],+ "start": [+ 108.18,+ 35.0+ ]+ }+ ],+ "name": "CH_24",+ "pads": [+ "J1.24",+ "J2.18",+ "J3.18"+ ],+ "segments": 0,+ "vias": 0+ }+ ],+ "pads": [+ {+ "at": [+ 45.0,+ 52.0+ ],+ "layers": [+ 1+ ],+ "name": "J1.1",+ "net": "CH_01",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 54.54+ ],+ "layers": [+ 1+ ],+ "name": "J1.2",+ "net": "CH_02",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 57.08+ ],+ "layers": [+ 1+ ],+ "name": "J1.3",+ "net": "CH_03",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 59.62+ ],+ "layers": [+ 1+ ],+ "name": "J1.4",+ "net": "CH_04",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 62.16+ ],+ "layers": [+ 1+ ],+ "name": "J1.5",+ "net": "CH_05",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 64.7+ ],+ "layers": [+ 1+ ],+ "name": "J1.6",+ "net": "CH_06",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 67.24+ ],+ "layers": [+ 1+ ],+ "name": "J1.7",+ "net": "CH_07",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 69.78+ ],+ "layers": [+ 1+ ],+ "name": "J1.8",+ "net": "CH_08",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 72.32+ ],+ "layers": [+ 1+ ],+ "name": "J1.9",+ "net": "CH_09",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 74.86+ ],+ "layers": [+ 1+ ],+ "name": "J1.10",+ "net": "CH_10",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 77.4+ ],+ "layers": [+ 1+ ],+ "name": "J1.11",+ "net": "CH_11",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 79.94+ ],+ "layers": [+ 1+ ],+ "name": "J1.12",+ "net": "CH_12",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 82.48+ ],+ "layers": [+ 1+ ],+ "name": "J1.13",+ "net": "CH_13",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 85.02+ ],+ "layers": [+ 1+ ],+ "name": "J1.14",+ "net": "CH_14",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 87.56+ ],+ "layers": [+ 1+ ],+ "name": "J1.15",+ "net": "CH_15",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 90.1+ ],+ "layers": [+ 1+ ],+ "name": "J1.16",+ "net": "CH_16",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 92.64+ ],+ "layers": [+ 1+ ],+ "name": "J1.17",+ "net": "CH_17",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 95.18+ ],+ "layers": [+ 1+ ],+ "name": "J1.18",+ "net": "CH_18",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 97.72+ ],+ "layers": [+ 1+ ],+ "name": "J1.19",+ "net": "CH_19",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 100.26+ ],+ "layers": [+ 1+ ],+ "name": "J1.20",+ "net": "CH_20",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 102.8+ ],+ "layers": [+ 1+ ],+ "name": "J1.21",+ "net": "CH_21",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 105.34+ ],+ "layers": [+ 1+ ],+ "name": "J1.22",+ "net": "CH_22",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 107.88+ ],+ "layers": [+ 1+ ],+ "name": "J1.23",+ "net": "CH_23",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 110.42+ ],+ "layers": [+ 1+ ],+ "name": "J1.24",+ "net": "CH_24",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 65.0,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.1",+ "net": "CH_01",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 82.78,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.8",+ "net": "CH_02",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 100.56,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.15",+ "net": "CH_03",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 118.34,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.22",+ "net": "CH_04",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 75.16,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.5",+ "net": "CH_05",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 92.94,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.12",+ "net": "CH_06",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 110.72,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.19",+ "net": "CH_07",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 67.54,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.2",+ "net": "CH_08",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 85.32,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.9",+ "net": "CH_09",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 103.1,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.16",+ "net": "CH_10",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 120.88,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.23",+ "net": "CH_11",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 77.7,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.6",+ "net": "CH_12",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 95.48,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.13",+ "net": "CH_13",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 113.26,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.20",+ "net": "CH_14",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 70.08,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.3",+ "net": "CH_15",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 87.86,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.10",+ "net": "CH_16",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 105.64,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.17",+ "net": "CH_17",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 123.42,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.24",+ "net": "CH_18",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 80.24,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.7",+ "net": "CH_19",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 98.02,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.14",+ "net": "CH_20",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 115.8,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.21",+ "net": "CH_21",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 72.62,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.4",+ "net": "CH_22",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 90.4,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.11",+ "net": "CH_23",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 108.18,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.18",+ "net": "CH_24",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 65.0,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.1",+ "net": "CH_01",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 82.78,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.8",+ "net": "CH_02",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 100.56,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.15",+ "net": "CH_03",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 118.34,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.22",+ "net": "CH_04",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 75.16,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.5",+ "net": "CH_05",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 92.94,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.12",+ "net": "CH_06",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 110.72,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.19",+ "net": "CH_07",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 67.54,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.2",+ "net": "CH_08",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 85.32,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.9",+ "net": "CH_09",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 103.1,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.16",+ "net": "CH_10",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 120.88,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.23",+ "net": "CH_11",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 77.7,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.6",+ "net": "CH_12",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 95.48,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.13",+ "net": "CH_13",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 113.26,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.20",+ "net": "CH_14",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 70.08,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.3",+ "net": "CH_15",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 87.86,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.10",+ "net": "CH_16",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 105.64,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.17",+ "net": "CH_17",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 123.42,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.24",+ "net": "CH_18",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 80.24,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.7",+ "net": "CH_19",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 98.02,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.14",+ "net": "CH_20",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 115.8,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.21",+ "net": "CH_21",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 72.62,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.4",+ "net": "CH_22",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 90.4,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.11",+ "net": "CH_23",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 108.18,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.18",+ "net": "CH_24",+ "radius": 1.0606601717798214+ }+ ],+ "remainingNets": [+ "CH_01",+ "CH_02",+ "CH_03",+ "CH_04",+ "CH_05",+ "CH_06",+ "CH_07",+ "CH_08",+ "CH_09",+ "CH_10",+ "CH_11",+ "CH_12",+ "CH_13",+ "CH_14",+ "CH_15",+ "CH_16",+ "CH_17",+ "CH_18",+ "CH_19",+ "CH_20",+ "CH_21",+ "CH_22",+ "CH_23",+ "CH_24"+ ],+ "revision": "9f99af53d850f7bf1fb389bc73b03f364424cdb27acf62e437707627dbf1022e",+ "segmentCount": 0,+ "segments": [],+ "shell": "rust",+ "status": "ok",+ "statusVerb": "fusion_get_app_state",+ "success": true,+ "timeoutSeconds": 60,+ "units": "mm",+ "viaCount": 0,+ "vias": []+}
demo/routing/crossbar/take-01/calls.json.gzadded⋯ 1 unchanged line ⋯
demo/routing/crossbar/take-01/export.jsonadded+33@@ -0,0 +1,33 @@+{+ "_hint": "Window opened/changed in the BACKGROUND - the user's focus was NOT touched; do NOT foreground anything to compensate. Render results via fusion_state. If the USER asks to watch, re-call with {\"foreground\": true, \"foregroundReason\": \"<why, shown to the user as a 3s caption>\"}.",+ "_timeoutHint": "ab waits up to 180s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.",+ "data": {+ "createdDocument": null,+ "documentName": "fusion-crossbar-24",+ "result": {+ "paths": [+ "C:/Users/john/Documents/fusion-crossbar-dev/fusion-crossbar-24-routed.fbrd",+ "C:/Users/john/Documents/fusion-crossbar-dev/fusion-crossbar-24-routed.brd"+ ],+ "success": true+ }+ },+ "durationMs": 787,+ "error": "",+ "shell": "rust",+ "status": "ok",+ "statusVerb": "fusion_get_app_state",+ "success": true,+ "timeoutSeconds": 180,+ "windowEtiquette": "background",+ "message": "Modeling script ran successfully.",+ "createdDocument": null,+ "documentName": "fusion-crossbar-24",+ "result": {+ "paths": [+ "C:/Users/john/Documents/fusion-crossbar-dev/fusion-crossbar-24-routed.fbrd",+ "C:/Users/john/Documents/fusion-crossbar-dev/fusion-crossbar-24-routed.brd"+ ],+ "success": true+ }+}
demo/routing/crossbar/take-01/final.jsonadded+3373@@ -0,0 +1,3373 @@+{+ "_timeoutHint": "ab waits up to 60s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure \u2014 the work usually keeps running on the bridge. Poll `fusion_get_app_state` until it reports done.",+ "airwireCount": 0,+ "boardId": "ecc4548c-cb68-489f-8b82-46e7d41d61c0",+ "bridgeVersion": "1.10.0-dev.routing.2",+ "connectivitySource": "Fusion exported airwires; mutation paths recompute RATSNEST",+ "documentName": "fusion-crossbar-24",+ "drc": {+ "airwireCount": 0,+ "checked": true,+ "clean": true,+ "errorCount": 0,+ "errors": [],+ "source": "Autodesk DRC + UL_BOARD.errors",+ "warningCount": 0+ },+ "durationMs": 522,+ "error": "",+ "nets": [+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_01",+ "pads": [+ "J1.1",+ "J2.1",+ "J3.1"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_02",+ "pads": [+ "J1.2",+ "J2.8",+ "J3.8"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_03",+ "pads": [+ "J1.3",+ "J2.15",+ "J3.15"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_04",+ "pads": [+ "J1.4",+ "J2.22",+ "J3.22"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_05",+ "pads": [+ "J1.5",+ "J2.5",+ "J3.5"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_06",+ "pads": [+ "J1.6",+ "J2.12",+ "J3.12"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_07",+ "pads": [+ "J1.7",+ "J2.19",+ "J3.19"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_08",+ "pads": [+ "J1.8",+ "J2.2",+ "J3.2"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_09",+ "pads": [+ "J1.9",+ "J2.9",+ "J3.9"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_10",+ "pads": [+ "J1.10",+ "J2.16",+ "J3.16"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_11",+ "pads": [+ "J1.11",+ "J2.23",+ "J3.23"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_12",+ "pads": [+ "J1.12",+ "J2.6",+ "J3.6"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_13",+ "pads": [+ "J1.13",+ "J2.13",+ "J3.13"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_14",+ "pads": [+ "J1.14",+ "J2.20",+ "J3.20"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_15",+ "pads": [+ "J1.15",+ "J2.3",+ "J3.3"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_16",+ "pads": [+ "J1.16",+ "J2.10",+ "J3.10"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_17",+ "pads": [+ "J1.17",+ "J2.17",+ "J3.17"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_18",+ "pads": [+ "J1.18",+ "J2.24",+ "J3.24"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_19",+ "pads": [+ "J1.19",+ "J2.7",+ "J3.7"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_20",+ "pads": [+ "J1.20",+ "J2.14",+ "J3.14"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_21",+ "pads": [+ "J1.21",+ "J2.21",+ "J3.21"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_22",+ "pads": [+ "J1.22",+ "J2.4",+ "J3.4"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_23",+ "pads": [+ "J1.23",+ "J2.11",+ "J3.11"+ ],+ "segments": 5,+ "vias": 2+ },+ {+ "airwireCount": 0,+ "airwires": [],+ "name": "CH_24",+ "pads": [+ "J1.24",+ "J2.18",+ "J3.18"+ ],+ "segments": 5,+ "vias": 2+ }+ ],+ "pads": [+ {+ "at": [+ 45.0,+ 52.0+ ],+ "layers": [+ 1+ ],+ "name": "J1.1",+ "net": "CH_01",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 54.54+ ],+ "layers": [+ 1+ ],+ "name": "J1.2",+ "net": "CH_02",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 57.08+ ],+ "layers": [+ 1+ ],+ "name": "J1.3",+ "net": "CH_03",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 59.62+ ],+ "layers": [+ 1+ ],+ "name": "J1.4",+ "net": "CH_04",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 62.16+ ],+ "layers": [+ 1+ ],+ "name": "J1.5",+ "net": "CH_05",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 64.7+ ],+ "layers": [+ 1+ ],+ "name": "J1.6",+ "net": "CH_06",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 67.24+ ],+ "layers": [+ 1+ ],+ "name": "J1.7",+ "net": "CH_07",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 69.78+ ],+ "layers": [+ 1+ ],+ "name": "J1.8",+ "net": "CH_08",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 72.32+ ],+ "layers": [+ 1+ ],+ "name": "J1.9",+ "net": "CH_09",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 74.86+ ],+ "layers": [+ 1+ ],+ "name": "J1.10",+ "net": "CH_10",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 77.4+ ],+ "layers": [+ 1+ ],+ "name": "J1.11",+ "net": "CH_11",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 79.94+ ],+ "layers": [+ 1+ ],+ "name": "J1.12",+ "net": "CH_12",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 82.48+ ],+ "layers": [+ 1+ ],+ "name": "J1.13",+ "net": "CH_13",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 85.02+ ],+ "layers": [+ 1+ ],+ "name": "J1.14",+ "net": "CH_14",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 87.56+ ],+ "layers": [+ 1+ ],+ "name": "J1.15",+ "net": "CH_15",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 90.1+ ],+ "layers": [+ 1+ ],+ "name": "J1.16",+ "net": "CH_16",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 92.64+ ],+ "layers": [+ 1+ ],+ "name": "J1.17",+ "net": "CH_17",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 95.18+ ],+ "layers": [+ 1+ ],+ "name": "J1.18",+ "net": "CH_18",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 97.72+ ],+ "layers": [+ 1+ ],+ "name": "J1.19",+ "net": "CH_19",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 100.26+ ],+ "layers": [+ 1+ ],+ "name": "J1.20",+ "net": "CH_20",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 102.8+ ],+ "layers": [+ 1+ ],+ "name": "J1.21",+ "net": "CH_21",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 105.34+ ],+ "layers": [+ 1+ ],+ "name": "J1.22",+ "net": "CH_22",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 107.88+ ],+ "layers": [+ 1+ ],+ "name": "J1.23",+ "net": "CH_23",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 45.0,+ 110.42+ ],+ "layers": [+ 1+ ],+ "name": "J1.24",+ "net": "CH_24",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 65.0,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.1",+ "net": "CH_01",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 82.78,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.8",+ "net": "CH_02",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 100.56,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.15",+ "net": "CH_03",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 118.34,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.22",+ "net": "CH_04",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 75.16,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.5",+ "net": "CH_05",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 92.94,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.12",+ "net": "CH_06",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 110.72,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.19",+ "net": "CH_07",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 67.54,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.2",+ "net": "CH_08",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 85.32,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.9",+ "net": "CH_09",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 103.1,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.16",+ "net": "CH_10",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 120.88,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.23",+ "net": "CH_11",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 77.7,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.6",+ "net": "CH_12",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 95.48,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.13",+ "net": "CH_13",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 113.26,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.20",+ "net": "CH_14",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 70.08,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.3",+ "net": "CH_15",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 87.86,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.10",+ "net": "CH_16",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 105.64,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.17",+ "net": "CH_17",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 123.42,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.24",+ "net": "CH_18",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 80.24,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.7",+ "net": "CH_19",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 98.02,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.14",+ "net": "CH_20",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 115.8,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.21",+ "net": "CH_21",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 72.62,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.4",+ "net": "CH_22",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 90.4,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.11",+ "net": "CH_23",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 108.18,+ 35.0+ ],+ "layers": [+ 1+ ],+ "name": "J2.18",+ "net": "CH_24",+ "radius": 1.0606601717798212+ },+ {+ "at": [+ 65.0,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.1",+ "net": "CH_01",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 82.78,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.8",+ "net": "CH_02",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 100.56,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.15",+ "net": "CH_03",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 118.34,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.22",+ "net": "CH_04",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 75.16,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.5",+ "net": "CH_05",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 92.94,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.12",+ "net": "CH_06",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 110.72,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.19",+ "net": "CH_07",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 67.54,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.2",+ "net": "CH_08",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 85.32,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.9",+ "net": "CH_09",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 103.1,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.16",+ "net": "CH_10",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 120.88,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.23",+ "net": "CH_11",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 77.7,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.6",+ "net": "CH_12",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 95.48,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.13",+ "net": "CH_13",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 113.26,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.20",+ "net": "CH_14",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 70.08,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.3",+ "net": "CH_15",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 87.86,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.10",+ "net": "CH_16",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 105.64,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.17",+ "net": "CH_17",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 123.42,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.24",+ "net": "CH_18",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 80.24,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.7",+ "net": "CH_19",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 98.02,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.14",+ "net": "CH_20",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 115.8,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.21",+ "net": "CH_21",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 72.62,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.4",+ "net": "CH_22",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 90.4,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.11",+ "net": "CH_23",+ "radius": 1.0606601717798214+ },+ {+ "at": [+ 108.18,+ 125.0+ ],+ "layers": [+ 1,+ 16+ ],+ "name": "J3.18",+ "net": "CH_24",+ "radius": 1.0606601717798214+ }+ ],+ "remainingNets": [],+ "revision": "9b48509d2bb57daf0cf653b36bdd273209f00147265f6463c4ba1b88a2c87f81",+ "segmentCount": 120,+ "segments": [+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 52.0+ ],+ "layer": 1,+ "net": "CH_01",+ "start": [+ 45.0,+ 52.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 65.0,+ 52.0+ ],+ "layer": 1,+ "net": "CH_01",+ "start": [+ 55.0,+ 52.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 65.0,+ 42.0+ ],+ "layer": 16,+ "net": "CH_01",+ "start": [+ 65.0,+ 52.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 65.0,+ 35.0+ ],+ "layer": 1,+ "net": "CH_01",+ "start": [+ 65.0,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 65.0,+ 125.0+ ],+ "layer": 16,+ "net": "CH_01",+ "start": [+ 65.0,+ 52.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 54.54+ ],+ "layer": 1,+ "net": "CH_02",+ "start": [+ 45.0,+ 54.54+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 82.78,+ 54.54+ ],+ "layer": 1,+ "net": "CH_02",+ "start": [+ 55.0,+ 54.54+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 82.78,+ 42.0+ ],+ "layer": 16,+ "net": "CH_02",+ "start": [+ 82.78,+ 54.54+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 82.78,+ 35.0+ ],+ "layer": 1,+ "net": "CH_02",+ "start": [+ 82.78,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 82.78,+ 125.0+ ],+ "layer": 16,+ "net": "CH_02",+ "start": [+ 82.78,+ 54.54+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 57.08+ ],+ "layer": 1,+ "net": "CH_03",+ "start": [+ 45.0,+ 57.08+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 100.56,+ 57.08+ ],+ "layer": 1,+ "net": "CH_03",+ "start": [+ 55.0,+ 57.08+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 100.56,+ 42.0+ ],+ "layer": 16,+ "net": "CH_03",+ "start": [+ 100.56,+ 57.08+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 100.56,+ 35.0+ ],+ "layer": 1,+ "net": "CH_03",+ "start": [+ 100.56,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 100.56,+ 125.0+ ],+ "layer": 16,+ "net": "CH_03",+ "start": [+ 100.56,+ 57.08+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 59.62+ ],+ "layer": 1,+ "net": "CH_04",+ "start": [+ 45.0,+ 59.62+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 118.34,+ 59.62+ ],+ "layer": 1,+ "net": "CH_04",+ "start": [+ 55.0,+ 59.62+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 118.34,+ 42.0+ ],+ "layer": 16,+ "net": "CH_04",+ "start": [+ 118.34,+ 59.62+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 118.34,+ 35.0+ ],+ "layer": 1,+ "net": "CH_04",+ "start": [+ 118.34,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 118.34,+ 125.0+ ],+ "layer": 16,+ "net": "CH_04",+ "start": [+ 118.34,+ 59.62+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 62.16+ ],+ "layer": 1,+ "net": "CH_05",+ "start": [+ 45.0,+ 62.16+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 75.16,+ 62.16+ ],+ "layer": 1,+ "net": "CH_05",+ "start": [+ 55.0,+ 62.16+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 75.16,+ 42.0+ ],+ "layer": 16,+ "net": "CH_05",+ "start": [+ 75.16,+ 62.16+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 75.16,+ 35.0+ ],+ "layer": 1,+ "net": "CH_05",+ "start": [+ 75.16,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 75.16,+ 125.0+ ],+ "layer": 16,+ "net": "CH_05",+ "start": [+ 75.16,+ 62.16+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 64.7+ ],+ "layer": 1,+ "net": "CH_06",+ "start": [+ 45.0,+ 64.7+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 92.94,+ 64.7+ ],+ "layer": 1,+ "net": "CH_06",+ "start": [+ 55.0,+ 64.7+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 92.94,+ 42.0+ ],+ "layer": 16,+ "net": "CH_06",+ "start": [+ 92.94,+ 64.7+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 92.94,+ 35.0+ ],+ "layer": 1,+ "net": "CH_06",+ "start": [+ 92.94,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 92.94,+ 125.0+ ],+ "layer": 16,+ "net": "CH_06",+ "start": [+ 92.94,+ 64.7+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 67.24+ ],+ "layer": 1,+ "net": "CH_07",+ "start": [+ 45.0,+ 67.24+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 110.72,+ 67.24+ ],+ "layer": 1,+ "net": "CH_07",+ "start": [+ 55.0,+ 67.24+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 110.72,+ 42.0+ ],+ "layer": 16,+ "net": "CH_07",+ "start": [+ 110.72,+ 67.24+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 110.72,+ 35.0+ ],+ "layer": 1,+ "net": "CH_07",+ "start": [+ 110.72,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 110.72,+ 125.0+ ],+ "layer": 16,+ "net": "CH_07",+ "start": [+ 110.72,+ 67.24+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 69.78+ ],+ "layer": 1,+ "net": "CH_08",+ "start": [+ 45.0,+ 69.78+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 67.54,+ 69.78+ ],+ "layer": 1,+ "net": "CH_08",+ "start": [+ 55.0,+ 69.78+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 67.54,+ 42.0+ ],+ "layer": 16,+ "net": "CH_08",+ "start": [+ 67.54,+ 69.78+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 67.54,+ 35.0+ ],+ "layer": 1,+ "net": "CH_08",+ "start": [+ 67.54,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 67.54,+ 125.0+ ],+ "layer": 16,+ "net": "CH_08",+ "start": [+ 67.54,+ 69.78+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 72.32+ ],+ "layer": 1,+ "net": "CH_09",+ "start": [+ 45.0,+ 72.32+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 85.32,+ 72.32+ ],+ "layer": 1,+ "net": "CH_09",+ "start": [+ 55.0,+ 72.32+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 85.32,+ 42.0+ ],+ "layer": 16,+ "net": "CH_09",+ "start": [+ 85.32,+ 72.32+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 85.32,+ 35.0+ ],+ "layer": 1,+ "net": "CH_09",+ "start": [+ 85.32,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 85.32,+ 125.0+ ],+ "layer": 16,+ "net": "CH_09",+ "start": [+ 85.32,+ 72.32+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 74.86+ ],+ "layer": 1,+ "net": "CH_10",+ "start": [+ 45.0,+ 74.86+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 103.1,+ 74.86+ ],+ "layer": 1,+ "net": "CH_10",+ "start": [+ 55.0,+ 74.86+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 103.1,+ 42.0+ ],+ "layer": 16,+ "net": "CH_10",+ "start": [+ 103.1,+ 74.86+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 103.1,+ 35.0+ ],+ "layer": 1,+ "net": "CH_10",+ "start": [+ 103.1,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 103.1,+ 125.0+ ],+ "layer": 16,+ "net": "CH_10",+ "start": [+ 103.1,+ 74.86+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 77.4+ ],+ "layer": 1,+ "net": "CH_11",+ "start": [+ 45.0,+ 77.4+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 120.88,+ 77.4+ ],+ "layer": 1,+ "net": "CH_11",+ "start": [+ 55.0,+ 77.4+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 120.88,+ 42.0+ ],+ "layer": 16,+ "net": "CH_11",+ "start": [+ 120.88,+ 77.4+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 120.88,+ 35.0+ ],+ "layer": 1,+ "net": "CH_11",+ "start": [+ 120.88,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 120.88,+ 125.0+ ],+ "layer": 16,+ "net": "CH_11",+ "start": [+ 120.88,+ 77.4+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 79.94+ ],+ "layer": 1,+ "net": "CH_12",+ "start": [+ 45.0,+ 79.94+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 77.7,+ 79.94+ ],+ "layer": 1,+ "net": "CH_12",+ "start": [+ 55.0,+ 79.94+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 77.7,+ 42.0+ ],+ "layer": 16,+ "net": "CH_12",+ "start": [+ 77.7,+ 79.94+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 77.7,+ 35.0+ ],+ "layer": 1,+ "net": "CH_12",+ "start": [+ 77.7,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 77.7,+ 125.0+ ],+ "layer": 16,+ "net": "CH_12",+ "start": [+ 77.7,+ 79.94+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 82.48+ ],+ "layer": 1,+ "net": "CH_13",+ "start": [+ 45.0,+ 82.48+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 95.48,+ 82.48+ ],+ "layer": 1,+ "net": "CH_13",+ "start": [+ 55.0,+ 82.48+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 95.48,+ 42.0+ ],+ "layer": 16,+ "net": "CH_13",+ "start": [+ 95.48,+ 82.48+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 95.48,+ 35.0+ ],+ "layer": 1,+ "net": "CH_13",+ "start": [+ 95.48,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 95.48,+ 125.0+ ],+ "layer": 16,+ "net": "CH_13",+ "start": [+ 95.48,+ 82.48+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 85.02+ ],+ "layer": 1,+ "net": "CH_14",+ "start": [+ 45.0,+ 85.02+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 113.26,+ 85.02+ ],+ "layer": 1,+ "net": "CH_14",+ "start": [+ 55.0,+ 85.02+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 113.26,+ 42.0+ ],+ "layer": 16,+ "net": "CH_14",+ "start": [+ 113.26,+ 85.02+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 113.26,+ 35.0+ ],+ "layer": 1,+ "net": "CH_14",+ "start": [+ 113.26,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 113.26,+ 125.0+ ],+ "layer": 16,+ "net": "CH_14",+ "start": [+ 113.26,+ 85.02+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 87.56+ ],+ "layer": 1,+ "net": "CH_15",+ "start": [+ 45.0,+ 87.56+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 70.08,+ 87.56+ ],+ "layer": 1,+ "net": "CH_15",+ "start": [+ 55.0,+ 87.56+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 70.08,+ 42.0+ ],+ "layer": 16,+ "net": "CH_15",+ "start": [+ 70.08,+ 87.56+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 70.08,+ 35.0+ ],+ "layer": 1,+ "net": "CH_15",+ "start": [+ 70.08,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 70.08,+ 125.0+ ],+ "layer": 16,+ "net": "CH_15",+ "start": [+ 70.08,+ 87.56+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 90.1+ ],+ "layer": 1,+ "net": "CH_16",+ "start": [+ 45.0,+ 90.1+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 87.86,+ 90.1+ ],+ "layer": 1,+ "net": "CH_16",+ "start": [+ 55.0,+ 90.1+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 87.86,+ 42.0+ ],+ "layer": 16,+ "net": "CH_16",+ "start": [+ 87.86,+ 90.1+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 87.86,+ 35.0+ ],+ "layer": 1,+ "net": "CH_16",+ "start": [+ 87.86,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 87.86,+ 125.0+ ],+ "layer": 16,+ "net": "CH_16",+ "start": [+ 87.86,+ 90.1+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 92.64+ ],+ "layer": 1,+ "net": "CH_17",+ "start": [+ 45.0,+ 92.64+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 105.64,+ 92.64+ ],+ "layer": 1,+ "net": "CH_17",+ "start": [+ 55.0,+ 92.64+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 105.64,+ 42.0+ ],+ "layer": 16,+ "net": "CH_17",+ "start": [+ 105.64,+ 92.64+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 105.64,+ 35.0+ ],+ "layer": 1,+ "net": "CH_17",+ "start": [+ 105.64,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 105.64,+ 125.0+ ],+ "layer": 16,+ "net": "CH_17",+ "start": [+ 105.64,+ 92.64+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 95.18+ ],+ "layer": 1,+ "net": "CH_18",+ "start": [+ 45.0,+ 95.18+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 123.42,+ 95.18+ ],+ "layer": 1,+ "net": "CH_18",+ "start": [+ 55.0,+ 95.18+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 123.42,+ 42.0+ ],+ "layer": 16,+ "net": "CH_18",+ "start": [+ 123.42,+ 95.18+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 123.42,+ 35.0+ ],+ "layer": 1,+ "net": "CH_18",+ "start": [+ 123.42,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 123.42,+ 125.0+ ],+ "layer": 16,+ "net": "CH_18",+ "start": [+ 123.42,+ 95.18+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 97.72+ ],+ "layer": 1,+ "net": "CH_19",+ "start": [+ 45.0,+ 97.72+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 80.24,+ 97.72+ ],+ "layer": 1,+ "net": "CH_19",+ "start": [+ 55.0,+ 97.72+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 80.24,+ 42.0+ ],+ "layer": 16,+ "net": "CH_19",+ "start": [+ 80.24,+ 97.72+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 80.24,+ 35.0+ ],+ "layer": 1,+ "net": "CH_19",+ "start": [+ 80.24,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 80.24,+ 125.0+ ],+ "layer": 16,+ "net": "CH_19",+ "start": [+ 80.24,+ 97.72+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 100.26+ ],+ "layer": 1,+ "net": "CH_20",+ "start": [+ 45.0,+ 100.26+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 98.02,+ 100.26+ ],+ "layer": 1,+ "net": "CH_20",+ "start": [+ 55.0,+ 100.26+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 98.02,+ 42.0+ ],+ "layer": 16,+ "net": "CH_20",+ "start": [+ 98.02,+ 100.26+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 98.02,+ 35.0+ ],+ "layer": 1,+ "net": "CH_20",+ "start": [+ 98.02,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 98.02,+ 125.0+ ],+ "layer": 16,+ "net": "CH_20",+ "start": [+ 98.02,+ 100.26+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 102.8+ ],+ "layer": 1,+ "net": "CH_21",+ "start": [+ 45.0,+ 102.8+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 115.8,+ 102.8+ ],+ "layer": 1,+ "net": "CH_21",+ "start": [+ 55.0,+ 102.8+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 115.8,+ 42.0+ ],+ "layer": 16,+ "net": "CH_21",+ "start": [+ 115.8,+ 102.8+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 115.8,+ 35.0+ ],+ "layer": 1,+ "net": "CH_21",+ "start": [+ 115.8,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 115.8,+ 125.0+ ],+ "layer": 16,+ "net": "CH_21",+ "start": [+ 115.8,+ 102.8+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 105.34+ ],+ "layer": 1,+ "net": "CH_22",+ "start": [+ 45.0,+ 105.34+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 72.62,+ 105.34+ ],+ "layer": 1,+ "net": "CH_22",+ "start": [+ 55.0,+ 105.34+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 72.62,+ 42.0+ ],+ "layer": 16,+ "net": "CH_22",+ "start": [+ 72.62,+ 105.34+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 72.62,+ 35.0+ ],+ "layer": 1,+ "net": "CH_22",+ "start": [+ 72.62,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 72.62,+ 125.0+ ],+ "layer": 16,+ "net": "CH_22",+ "start": [+ 72.62,+ 105.34+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 107.88+ ],+ "layer": 1,+ "net": "CH_23",+ "start": [+ 45.0,+ 107.88+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 90.4,+ 107.88+ ],+ "layer": 1,+ "net": "CH_23",+ "start": [+ 55.0,+ 107.88+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 90.4,+ 42.0+ ],+ "layer": 16,+ "net": "CH_23",+ "start": [+ 90.4,+ 107.88+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 90.4,+ 35.0+ ],+ "layer": 1,+ "net": "CH_23",+ "start": [+ 90.4,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 90.4,+ 125.0+ ],+ "layer": 16,+ "net": "CH_23",+ "start": [+ 90.4,+ 107.88+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 55.0,+ 110.42+ ],+ "layer": 1,+ "net": "CH_24",+ "start": [+ 45.0,+ 110.42+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 108.18,+ 110.42+ ],+ "layer": 1,+ "net": "CH_24",+ "start": [+ 55.0,+ 110.42+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 108.18,+ 42.0+ ],+ "layer": 16,+ "net": "CH_24",+ "start": [+ 108.18,+ 110.42+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 108.18,+ 35.0+ ],+ "layer": 1,+ "net": "CH_24",+ "start": [+ 108.18,+ 42.0+ ],+ "width": 0.3+ },+ {+ "curve": 0.0,+ "end": [+ 108.18,+ 125.0+ ],+ "layer": 16,+ "net": "CH_24",+ "start": [+ 108.18,+ 110.42+ ],+ "width": 0.3+ }+ ],+ "shell": "rust",+ "status": "ok",+ "statusVerb": "fusion_get_app_state",+ "success": true,+ "timeoutSeconds": 60,+ "units": "mm",+ "viaCount": 48,+ "vias": [+ {+ "at": [+ 65.0,+ 52.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_01"+ },+ {+ "at": [+ 65.0,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_01"+ },+ {+ "at": [+ 82.78,+ 54.54+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_02"+ },+ {+ "at": [+ 82.78,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_02"+ },+ {+ "at": [+ 100.56,+ 57.08+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_03"+ },+ {+ "at": [+ 100.56,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_03"+ },+ {+ "at": [+ 118.34,+ 59.62+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_04"+ },+ {+ "at": [+ 118.34,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_04"+ },+ {+ "at": [+ 75.16,+ 62.16+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_05"+ },+ {+ "at": [+ 75.16,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_05"+ },+ {+ "at": [+ 92.94,+ 64.7+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_06"+ },+ {+ "at": [+ 92.94,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_06"+ },+ {+ "at": [+ 110.72,+ 67.24+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_07"+ },+ {+ "at": [+ 110.72,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_07"+ },+ {+ "at": [+ 67.54,+ 69.78+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_08"+ },+ {+ "at": [+ 67.54,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_08"+ },+ {+ "at": [+ 85.32,+ 72.32+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_09"+ },+ {+ "at": [+ 85.32,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_09"+ },+ {+ "at": [+ 103.1,+ 74.86+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_10"+ },+ {+ "at": [+ 103.1,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_10"+ },+ {+ "at": [+ 120.88,+ 77.4+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_11"+ },+ {+ "at": [+ 120.88,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_11"+ },+ {+ "at": [+ 77.7,+ 79.94+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_12"+ },+ {+ "at": [+ 77.7,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_12"+ },+ {+ "at": [+ 95.48,+ 82.48+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_13"+ },+ {+ "at": [+ 95.48,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_13"+ },+ {+ "at": [+ 113.26,+ 85.02+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_14"+ },+ {+ "at": [+ 113.26,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_14"+ },+ {+ "at": [+ 70.08,+ 87.56+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_15"+ },+ {+ "at": [+ 70.08,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_15"+ },+ {+ "at": [+ 87.86,+ 90.1+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_16"+ },+ {+ "at": [+ 87.86,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_16"+ },+ {+ "at": [+ 105.64,+ 92.64+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_17"+ },+ {+ "at": [+ 105.64,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_17"+ },+ {+ "at": [+ 123.42,+ 95.18+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_18"+ },+ {+ "at": [+ 123.42,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_18"+ },+ {+ "at": [+ 80.24,+ 97.72+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_19"+ },+ {+ "at": [+ 80.24,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_19"+ },+ {+ "at": [+ 98.02,+ 100.26+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_20"+ },+ {+ "at": [+ 98.02,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_20"+ },+ {+ "at": [+ 115.8,+ 102.8+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_21"+ },+ {+ "at": [+ 115.8,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_21"+ },+ {+ "at": [+ 72.62,+ 105.34+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_22"+ },+ {+ "at": [+ 72.62,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_22"+ },+ {+ "at": [+ 90.4,+ 107.88+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_23"+ },+ {+ "at": [+ 90.4,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_23"+ },+ {+ "at": [+ 108.18,+ 110.42+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_24"+ },+ {+ "at": [+ 108.18,+ 42.0+ ],+ "diameter": 0.6,+ "drill": 0.3,+ "extent": "1-16",+ "net": "CH_24"+ }+ ]+}
demo/routing/crossbar/take-01/fusion-crossbar-24-routed.brdadded+838@@ -0,0 +1,838 @@+<?xml version="1.0" encoding="utf-8"?>+<!DOCTYPE eagle SYSTEM "eagle.dtd">+<eagle version="9.7.0">+<drawing>+<settings>+<setting alwaysvectorfont="no"/>+<setting verticaltext="up"/>+<setting violationmode="Push"/>+<drillsymbolsettings symboldiameter="650240" symbolwidth="8128">+<drill diameter="64000" />+<drill diameter="80000" />+<drill diameter="96000" />+<drill diameter="112000" />+<drill diameter="128000" />+<drill diameter="144000" />+<drill diameter="160000" />+<drill diameter="176000" />+<drill diameter="192000" />+<drill diameter="208000" />+<drill diameter="224000" />+<drill diameter="240000" />+<drill diameter="256000" />+<drill diameter="272000" />+<drill diameter="288000" />+<drill diameter="320000" />+</drillsymbolsettings>+</settings>+<grid distance="1" unitdist="mm" unit="mm" style="lines" multiple="1" display="no" altdistance="0.1" altunitdist="mm" altunit="mm"/>+<layers>+<layer number="1" name="Top" blackcolor="0xc8ff4164" whitecolor="0xccc90d0c" coloredcolor="0xccc90d0c" blackhighlight="0xccff0000" whitehighlight="0xb4ff0000" coloredhighlight="0xb4ff0000" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="16" name="Bottom" blackcolor="0xc80696d7" whitecolor="0xcc0696d7" coloredcolor="0xcc0696d7" blackhighlight="0xb40000ff" whitehighlight="0xcc8252c2" coloredhighlight="0xcc8252c2" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="17" name="Pads" blackcolor="0xb462d987" whitecolor="0xb462d987" coloredcolor="0xcc0dab76" blackhighlight="0xb400ff00" whitehighlight="0xb400ff00" coloredhighlight="0xb400ff00" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="18" name="Vias" blackcolor="0xb462d987" whitecolor="0xb462d987" coloredcolor="0xccffcd07" blackhighlight="0xb462d987" whitehighlight="0xb462d987" coloredhighlight="0xccffcd07" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="19" name="Unrouted" blackcolor="0xccd9d9d9" whitecolor="0xbbc8c832" coloredcolor="0xbbc8c832" blackhighlight="0xb462d987" whitehighlight="0xb462d987" coloredhighlight="0xccffcd07" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="20" name="Dimension" blackcolor="0xb462d986" whitecolor="0xb462d986" coloredcolor="0xcceec643" blackhighlight="0xb462d986" whitehighlight="0xb462d986" coloredhighlight="0xcceec643" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="21" name="tPlace" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd134" coloredhighlight="0xccafd134" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="22" name="bPlace" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd134" coloredhighlight="0xccafd134" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="23" name="tOrigins" blackcolor="0xc8ffffff" whitecolor="0xccafd134" coloredcolor="0xccafd134" blackhighlight="0xc8ffffff" whitehighlight="0xccafd134" coloredhighlight="0xccafd134" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="24" name="bOrigins" blackcolor="0xc8ffffff" whitecolor="0xccafd134" coloredcolor="0xccafd134" blackhighlight="0xc8ffffff" whitehighlight="0xccafd134" coloredhighlight="0xccafd134" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="25" name="tNames" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd134" coloredhighlight="0xccafd134" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="26" name="bNames" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd134" coloredhighlight="0xccafd134" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="27" name="tValues" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd135" coloredhighlight="0xccafd135" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="28" name="bValues" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd136" coloredhighlight="0xccafd136" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="29" name="tStop" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd137" coloredhighlight="0xccafd137" fill="3" visible="no" active="yes" locked="no"/>+<layer number="30" name="bStop" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd138" coloredhighlight="0xccafd138" fill="6" visible="no" active="yes" locked="no"/>+<layer number="31" name="tCream" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd139" coloredhighlight="0xccafd139" fill="4" visible="no" active="yes" locked="no"/>+<layer number="32" name="bCream" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd140" coloredhighlight="0xccafd140" fill="5" visible="no" active="yes" locked="no"/>+<layer number="33" name="tFinish" blackcolor="0xccd9d9d9" whitecolor="0xbbc8c832" coloredcolor="0xbbc8c832" blackhighlight="0xb462d987" whitehighlight="0xb462d987" coloredhighlight="0xccffcd07" fill="3" visible="no" active="yes" locked="no"/>+<layer number="34" name="bFinish" blackcolor="0xccd9d9d9" whitecolor="0xbbc8c832" coloredcolor="0xbbc8c832" blackhighlight="0xb462d987" whitehighlight="0xb462d987" coloredhighlight="0xccffcd07" fill="6" visible="no" active="yes" locked="no"/>+<layer number="35" name="tGlue" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd140" coloredhighlight="0xccafd140" fill="4" visible="no" active="yes" locked="no"/>+<layer number="36" name="bGlue" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd140" coloredhighlight="0xccafd140" fill="5" visible="no" active="yes" locked="no"/>+<layer number="37" name="tTest" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd140" coloredhighlight="0xccafd140" fill="1" visible="no" active="yes" locked="no"/>+<layer number="38" name="bTest" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd140" coloredhighlight="0xccafd140" fill="1" visible="no" active="yes" locked="no"/>+<layer number="39" name="tKeepout" blackcolor="0xc8ff4164" whitecolor="0xccc90d0c" coloredcolor="0xccc90d0c" blackhighlight="0xccff0000" whitehighlight="0xb4ff0000" coloredhighlight="0xb4ff0000" fill="11" visible="no" active="yes" locked="no"/>+<layer number="40" name="bKeepout" blackcolor="0xc80696d7" whitecolor="0xcc0696d7" coloredcolor="0xcc0696d7" blackhighlight="0xb40000ff" whitehighlight="0xcc8252c2" coloredhighlight="0xcc8252c2" fill="11" visible="no" active="yes" locked="no"/>+<layer number="41" name="RestrictCopper" blackcolor="0xc8ff4164" whitecolor="0xccc90d0c" coloredcolor="0xccc90d0c" blackhighlight="0xccff0000" whitehighlight="0xb4ff0000" coloredhighlight="0xb4ff0000" fill="10" visible="no" active="yes" locked="no"/>+<layer number="42" name="bRestrict" blackcolor="0xc80696d7" whitecolor="0xcc0696d7" coloredcolor="0xcc0696d7" blackhighlight="0xb40000ff" whitehighlight="0xcc8252c2" coloredhighlight="0xcc8252c2" fill="10" visible="no" active="yes" locked="no"/>+<layer number="43" name="vRestrict" blackcolor="0xb462d987" whitecolor="0xb462d987" coloredcolor="0xcc0dab76" blackhighlight="0xb400ff00" whitehighlight="0xb400ff00" coloredhighlight="0xb400ff00" fill="10" visible="no" active="yes" locked="no"/>+<layer number="44" name="Drills" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd140" coloredhighlight="0xccafd140" fill="1" visible="no" active="yes" locked="no"/>+<layer number="45" name="Holes" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd140" coloredhighlight="0xccafd140" fill="1" visible="no" active="yes" locked="no"/>+<layer number="46" name="Milling" blackcolor="0xcc32c8c8" whitecolor="0xb432c8c8" coloredcolor="0xb432c8c8" blackhighlight="0xb400ffff" whitehighlight="0xb400ffff" coloredhighlight="0xb400ffff" fill="1" visible="no" active="yes" locked="no"/>+<layer number="47" name="Measures" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd140" coloredhighlight="0xccafd140" fill="1" visible="no" active="yes" locked="no"/>+<layer number="48" name="Document" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd141" coloredhighlight="0xccafd141" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="49" name="Reference" blackcolor="0xccc8c8c8" whitecolor="0xbb808080" coloredcolor="0xbb808080" blackhighlight="0xc8ffffff" whitehighlight="0xccafd142" coloredhighlight="0xccafd142" fill="1" visible="yes" active="yes" locked="no"/>+<layer number="91" name="Nets" blackcolor="0xdc009292" whitecolor="0xdc009292" coloredcolor="0xc8e3e3e3" blackhighlight="0xdc009292" whitehighlight="0xdc009292" coloredhighlight="0xc8e3e3e3" fill="1" visible="no" active="no" locked="no"/>+<layer number="92" name="Busses" blackcolor="0xdc009292" whitecolor="0xdc009292" coloredcolor="0xc8d62525" blackhighlight="0xdc009292" whitehighlight="0xdc009292" coloredhighlight="0xc8d62525" fill="1" visible="no" active="no" locked="no"/>+<layer number="93" name="Pins" blackcolor="0xdcbbbbbb" whitecolor="0xdcbbbbbb" coloredcolor="0xc839d437" blackhighlight="0xdcbbbbbb" whitehighlight="0xdcbbbbbb" coloredhighlight="0xc839d437" fill="1" visible="no" active="no" locked="no"/>+<layer number="94" name="Symbols" blackcolor="0xdcfac36e" whitecolor="0xdcf57c10" coloredcolor="0xc8e6e600" blackhighlight="0xdcfac36e" whitehighlight="0xdcf57c10" coloredhighlight="0xc8e6e600" fill="1" visible="no" active="no" locked="no"/>+<layer number="95" name="Names" blackcolor="0xf0b2b2b2" whitecolor="0xc8757575" coloredcolor="0xc82c7bce" blackhighlight="0xf0b2b2b2" whitehighlight="0xc8757575" coloredhighlight="0xc82c7bce" fill="1" visible="no" active="no" locked="no"/>+<layer number="96" name="Values" blackcolor="0xf0b2b2b2" whitecolor="0xc8757575" coloredcolor="0xc82c7bce" blackhighlight="0xf0b2b2b2" whitehighlight="0xc8757575" coloredhighlight="0xc82c7bce" fill="1" visible="no" active="no" locked="no"/>+<layer number="97" name="Info" blackcolor="0xf0b2b2b2" whitecolor="0xc8757575" coloredcolor="0xc89526de" blackhighlight="0xf0b2b2b2" whitehighlight="0xc8757575" coloredhighlight="0xc89526de" fill="1" visible="no" active="no" locked="no"/>+<layer number="98" name="Guide" blackcolor="0xf0b2b2b2" whitecolor="0xc8757575" coloredcolor="0xc89526de" blackhighlight="0xf0b2b2b2" whitehighlight="0xc8757575" coloredhighlight="0xc89526de" fill="1" visible="no" active="no" locked="no"/>+</layers>+<board>+<plain>+<wire x1="38" y1="24" x2="132" y2="24" width="0" layer="20"/>+<wire x1="132" y1="24" x2="132" y2="133" width="0" layer="20"/>+<wire x1="132" y1="133" x2="38" y2="133" width="0" layer="20"/>+<wire x1="38" y1="133" x2="38" y2="24" width="0" layer="20"/>+<text x="48" y="129" size="2" layer="21">ADOM / 24-NET CROSSOVER</text>+<text x="49" y="26" size="1.3" layer="21">ASTRA > ADOM BRIDGE > FUSION</text>+<text x="63" y="118" size="1.3" layer="21">24 NETS / 72 PADS / 2 LAYERS</text>+</plain>+<namedviews>+</namedviews>+<libraries>+<library name="FusionCrossbarFixture">+<packages>+<package name="J1" use_placeholder="yes">+<smd name="1" x="45" y="52" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="2" x="45" y="54.54" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="3" x="45" y="57.08" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="4" x="45" y="59.62" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="5" x="45" y="62.16" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="6" x="45" y="64.7" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="7" x="45" y="67.24" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="8" x="45" y="69.78" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="9" x="45" y="72.32" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="10" x="45" y="74.86" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="11" x="45" y="77.4" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="12" x="45" y="79.94" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="13" x="45" y="82.48" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="14" x="45" y="85.02" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="15" x="45" y="87.56" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="16" x="45" y="90.1" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="17" x="45" y="92.64" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="18" x="45" y="95.18" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="19" x="45" y="97.72" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="20" x="45" y="100.26" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="21" x="45" y="102.8" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="22" x="45" y="105.34" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="23" x="45" y="107.88" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="24" x="45" y="110.42" dx="1.5" dy="1.5" layer="1" roundness="20"/>+</package>+<package name="J2" use_placeholder="yes">+<smd name="1" x="65" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="8" x="82.78" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="15" x="100.56" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="22" x="118.34" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="5" x="75.16" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="12" x="92.94" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="19" x="110.72" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="2" x="67.54" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="9" x="85.32" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="16" x="103.1" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="23" x="120.88" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="6" x="77.7" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="13" x="95.48" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="20" x="113.26" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="3" x="70.08" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="10" x="87.86" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="17" x="105.64" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="24" x="123.42" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="7" x="80.24" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="14" x="98.02" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="21" x="115.8" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="4" x="72.62" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="11" x="90.4" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+<smd name="18" x="108.18" y="35" dx="1.5" dy="1.5" layer="1" roundness="20"/>+</package>+<package name="J3" use_placeholder="yes">+<pad name="1" x="65" y="125" drill="0.8" diameter="1.5"/>+<pad name="8" x="82.78" y="125" drill="0.8" diameter="1.5"/>+<pad name="15" x="100.56" y="125" drill="0.8" diameter="1.5"/>+<pad name="22" x="118.34" y="125" drill="0.8" diameter="1.5"/>+<pad name="5" x="75.16" y="125" drill="0.8" diameter="1.5"/>+<pad name="12" x="92.94" y="125" drill="0.8" diameter="1.5"/>+<pad name="19" x="110.72" y="125" drill="0.8" diameter="1.5"/>+<pad name="2" x="67.54" y="125" drill="0.8" diameter="1.5"/>+<pad name="9" x="85.32" y="125" drill="0.8" diameter="1.5"/>+<pad name="16" x="103.1" y="125" drill="0.8" diameter="1.5"/>+<pad name="23" x="120.88" y="125" drill="0.8" diameter="1.5"/>+<pad name="6" x="77.7" y="125" drill="0.8" diameter="1.5"/>+<pad name="13" x="95.48" y="125" drill="0.8" diameter="1.5"/>+<pad name="20" x="113.26" y="125" drill="0.8" diameter="1.5"/>+<pad name="3" x="70.08" y="125" drill="0.8" diameter="1.5"/>+<pad name="10" x="87.86" y="125" drill="0.8" diameter="1.5"/>+<pad name="17" x="105.64" y="125" drill="0.8" diameter="1.5"/>+<pad name="24" x="123.42" y="125" drill="0.8" diameter="1.5"/>+<pad name="7" x="80.24" y="125" drill="0.8" diameter="1.5"/>+<pad name="14" x="98.02" y="125" drill="0.8" diameter="1.5"/>+<pad name="21" x="115.8" y="125" drill="0.8" diameter="1.5"/>+<pad name="4" x="72.62" y="125" drill="0.8" diameter="1.5"/>+<pad name="11" x="90.4" y="125" drill="0.8" diameter="1.5"/>+<pad name="18" x="108.18" y="125" drill="0.8" diameter="1.5"/>+</package>+</packages>+</library>+</libraries>+<attributes>+</attributes>+<variantdefs>+</variantdefs>+<classes>+<class number="0" name="default" width="0.3" drill="0.3">+</class>+</classes>+<designrules name="FusionCrossbarFixture" version="V1">+<rules>+<rulecategory type="Copper Clearance" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Keepout Clearance" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Solder-Mask Clearance" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Dimension Clearance" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Drill Distance" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Restrict Clearance" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Minimum Drill Size" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Minimum Copper Width" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Acute Angle" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Air-Wire" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Small Gap" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Wire Stub" manualdrc="yes" livedrc="no"/>+ <rulecategory type="Matched Lengths" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Via Restrict Clearance" manualdrc="yes" livedrc="yes"/>+ <rulecategory type="Teardrop" manualdrc="no" livedrc="no"/>+ <rule type="Minimum Copper Width" enabled="yes" priority="0" onescope="class=0" value="0.3mm" preferredvalue="0.3mm" check_polywidth="no" name="minimum-copper-width-1"/>+ <rule type="Minimum Copper Width" builtin_ruleid="14" enabled="yes" priority="1" value="0.2mm" preferredvalue="0.2mm" check_polywidth="no" name="minimum-copper-width-2"/>+ <rule type="Teardrop" builtin_ruleid="22" enabled="yes" priority="0" onescope="is_via" lengthratio="0.5" widthratio="0.7" curved_sides="no" auto_generate="no" name="teardrop-1"/>+ <rule type="Teardrop" builtin_ruleid="23" enabled="yes" priority="1" onescope="is_pad" lengthratio="0.5" widthratio="0.7" curved_sides="no" auto_generate="no" name="teardrop-2"/>+ <rule type="Teardrop" builtin_ruleid="24" enabled="yes" priority="2" onescope="is_smd" lengthratio="0.5" widthratio="0.7" curved_sides="no" auto_generate="no" name="teardrop-3"/>+ <rule type="Teardrop" builtin_ruleid="25" enabled="yes" priority="3" onescope="is_wire_polygon" lengthratio="0.5" widthratio="0.9" curved_sides="no" auto_generate="no" name="teardrop-4"/>+ <rule type="Minimum Drill Size" enabled="yes" priority="0" onescope="class=0" value="0.3mm" preferredvalue="0.3mm" name="minimum-drill-size-1"/>+ <rule type="Minimum Drill Size" builtin_ruleid="15" enabled="yes" priority="1" value="0.3mm" preferredvalue="0.3mm" name="minimum-drill-size-2"/>+ <rule type="Acute Angle" builtin_ruleid="16" enabled="no" priority="0" name="acute-angle-1"/>+ <rule type="Wire Stub" builtin_ruleid="17" enabled="yes" priority="0" name="wire-stub-1"/>+ <rule type="Air-Wire" builtin_ruleid="19" enabled="yes" priority="0" name="air-wire-1"/>+ <rule type="Matched Lengths" builtin_ruleid="20" enabled="yes" priority="0" tolerance="10mm" gapfactor="2.5" name="matched-lengths-1"/>+ <rule type="Copper Clearance" builtin_ruleid="0" enabled="yes" priority="0" onescope="is_wire_polygon" otherscope="is_wire_polygon" value="0.2mm" preferredvalue="0.2mm" samesignal="no" name="copper-clearance-1"/>+ <rule type="Copper Clearance" builtin_ruleid="1" enabled="yes" priority="1" onescope="is_wire_polygon" otherscope="is_pad_smd" value="0.2mm" preferredvalue="0.2mm" samesignal="no" name="copper-clearance-2"/>+ <rule type="Copper Clearance" builtin_ruleid="2" enabled="yes" priority="2" onescope="is_wire_polygon" otherscope="is_via" value="0.2mm" preferredvalue="0.2mm" samesignal="no" name="copper-clearance-3"/>+ <rule type="Copper Clearance" builtin_ruleid="3" enabled="yes" priority="3" onescope="is_pad_smd" otherscope="is_pad_smd" value="6mil" preferredvalue="6mil" samesignal="no" name="copper-clearance-4"/>+ <rule type="Copper Clearance" builtin_ruleid="4" enabled="yes" priority="4" onescope="is_pad_smd" otherscope="is_via" value="6mil" preferredvalue="6mil" samesignal="no" name="copper-clearance-5"/>+ <rule type="Copper Clearance" builtin_ruleid="5" enabled="yes" priority="5" onescope="is_via" otherscope="is_via" value="6mil" preferredvalue="6mil" samesignal="no" name="copper-clearance-6"/>+ <rule type="Copper Clearance" builtin_ruleid="6" enabled="yes" priority="6" onescope="is_smd" otherscope="is_pad" value="6mil" preferredvalue="6mil" samesignal="yes" name="copper-clearance-7"/>+ <rule type="Copper Clearance" builtin_ruleid="7" enabled="yes" priority="7" onescope="is_smd" otherscope="is_via" value="6mil" preferredvalue="6mil" samesignal="yes" name="copper-clearance-8"/>+ <rule type="Copper Clearance" builtin_ruleid="8" enabled="yes" priority="8" onescope="is_smd" otherscope="is_smd" value="6mil" preferredvalue="6mil" samesignal="yes" name="copper-clearance-9"/>+ <rule type="Dimension Clearance" builtin_ruleid="9" enabled="yes" priority="0" value="0.5mm" preferredvalue="0.5mm" name="dimension-clearance-1"/>+ <rule type="Via Restrict Clearance" builtin_ruleid="21" enabled="yes" priority="0" value="0mil" preferredvalue="0mil" name="via-restrict-clearance-1"/>+ <rule type="Restrict Clearance" builtin_ruleid="10" enabled="yes" priority="0" value="0mil" preferredvalue="0mil" name="restrict-clearance-1"/>+ <rule type="Small Gap" builtin_ruleid="18" enabled="yes" priority="0" name="small-gap-1"/>+ <rule type="Solder-Mask Clearance" builtin_ruleid="11" enabled="no" priority="0" value="0mil" preferredvalue="0mil" check_name="yes" check_value="no" name="solder-mask-clearance-1"/>+ <rule type="Drill Distance" builtin_ruleid="12" enabled="yes" priority="0" value="6mil" preferredvalue="6mil" name="drill-distance-1"/>+ <rule type="Keepout Clearance" builtin_ruleid="13" enabled="yes" priority="0" value="0mil" preferredvalue="0mil" name="keepout-clearance-1"/>+ </rules>+<param name="mdWireWire" value="0.2mm"/>+<param name="mdWirePad" value="0.2mm"/>+<param name="mdWireVia" value="0.2mm"/>+<param name="mdPadPad" value="6mil"/>+<param name="mdPadVia" value="6mil"/>+<param name="mdViaVia" value="6mil"/>+<param name="mdSmdPad" value="6mil"/>+<param name="mdSmdVia" value="6mil"/>+<param name="mdSmdSmd" value="6mil"/>+<param name="mdCopperDimension" value="0.5mm"/>+<param name="mdDrill" value="6mil"/>+<param name="msWidth" value="0.2mm"/>+<param name="msDrill" value="0.3mm"/>+<param name="dpMaxLengthDifference" value="10mm"/>+<param name="dpGapFactor" value="2.5"/>+<description language="en"><b>Fusion Electronics Design Rules</b>+<p>+The default Design Rules have been set to cover+a wide range of applications. Your particular design+may have different requirements, so please make the+necessary adjustments and save your customized+design rules under a new name.+</description>+<param name="layerSetup" value="(1*16)"/>+<param name="mtCopper" value="0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm"/>+<param name="mtIsolate" value="1.5mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm"/>+<param name="mdViaViaSameLayer" value="6mil"/>+<param name="mnLayersViaInSmd" value="2"/>+<param name="mdSmdStop" value="0mil"/>+<param name="msMicroVia" value="9.99mm"/>+<param name="msBlindViaRatio" value="0.5"/>+<param name="rvPadTop" value="0.25"/>+<param name="rvPadInner" value="0.25"/>+<param name="rvPadBottom" value="0.25"/>+<param name="rvViaOuter" value="0.25"/>+<param name="rvViaInner" value="0.25"/>+<param name="rvMicroViaOuter" value="0.25"/>+<param name="rvMicroViaInner" value="0.25"/>+<param name="rlMinPadTop" value="10mil"/>+<param name="rlMaxPadTop" value="20mil"/>+<param name="rlMinPadInner" value="10mil"/>+<param name="rlMaxPadInner" value="20mil"/>+<param name="rlMinPadBottom" value="10mil"/>+<param name="rlMaxPadBottom" value="20mil"/>+<param name="rlMinViaOuter" value="8mil"/>+<param name="rlMaxViaOuter" value="20mil"/>+<param name="rlMinViaInner" value="8mil"/>+<param name="rlMaxViaInner" value="20mil"/>+<param name="rlMinMicroViaOuter" value="4mil"/>+<param name="rlMaxMicroViaOuter" value="20mil"/>+<param name="rlMinMicroViaInner" value="4mil"/>+<param name="rlMaxMicroViaInner" value="20mil"/>+<param name="psTop" value="-1"/>+<param name="psBottom" value="-1"/>+<param name="psFirst" value="-1"/>+<param name="psElongationLong" value="100"/>+<param name="psElongationOffset" value="100"/>+<param name="mvStopFrame" value="1"/>+<param name="mvCreamFrame" value="0"/>+<param name="mlMinStopFrame" value="4mil"/>+<param name="mlMaxStopFrame" value="4mil"/>+<param name="mlMinCreamFrame" value="0mil"/>+<param name="mlMaxCreamFrame" value="0mil"/>+<param name="mlViaStopLimit" value="9999mil"/>+<param name="srRoundness" value="0"/>+<param name="srMinRoundness" value="0mil"/>+<param name="srMaxRoundness" value="0mil"/>+<param name="slThermalIsolate" value="10mil"/>+<param name="slThermalsForVias" value="0"/>+<param name="checkAngle" value="0"/>+<param name="checkRestrict" value="1"/>+<param name="checkStop" value="0"/>+<param name="checkValues" value="0"/>+<param name="checkNames" value="1"/>+<param name="checkWireStubs" value="1"/>+<param name="checkPolygonWidth" value="0"/>+<param name="useDiameter" value="13"/>+<param name="removeAnnularRing" value="0"/>+<param name="flattenRefDes" value="0"/>+<param name="maxErrors" value="999999"/>+<layerstackup name="Default Layer Stack" type="Standard Stackup" display_unit="mic" roughness_model="0">+ <layerdef type="Signal" id="{0c855fb7-b2bd-4696-a2e6-68c1f1e79c13}" layer="1" name="Top" locally_modified_material="yes">+ <material name="User Defined" thickness="0.035mm" weight="1oz" process="Electro Deposited" source="User"/>+</layerdef>+ <layerdef type="Core" id="{448e5dd7-6050-4abf-b09b-482010adcf36}" layer="1" name="Dielectric-1" locally_modified_material="yes">+ <material name="User Defined" construction="" thickness="1.5mm" resin="50%" dielectric_constant_1g="4.5" dissipation_factor_1g="0.02" glass_transition_temperature="125degC" source="User"/>+</layerdef>+ <layerdef type="Signal" id="{39fd09fa-bd24-4972-acdf-e052184e936c}" layer="16" name="Bottom" locally_modified_material="yes">+ <material name="User Defined" thickness="0.035mm" weight="1oz" process="Electro Deposited" source="User"/>+</layerdef>+ <viadef name="Thru 1:16" startlayer="1" stoplayer="16" complement="no"/>+ </layerstackup>+ </designrules>+<autorouter>+<pass name="Default">+<param name="RoutingGrid" value="50mil"/>+<param name="AutoGrid" value="1"/>+<param name="Efforts" value="0"/>+<param name="TopRouterVariant" value="1"/>+<param name="tpViaShape" value="round"/>+<param name="PrefDir.1" value="a"/>+<param name="PrefDir.2" value="0"/>+<param name="PrefDir.3" value="0"/>+<param name="PrefDir.4" value="0"/>+<param name="PrefDir.5" value="0"/>+<param name="PrefDir.6" value="0"/>+<param name="PrefDir.7" value="0"/>+<param name="PrefDir.8" value="0"/>+<param name="PrefDir.9" value="0"/>+<param name="PrefDir.10" value="0"/>+<param name="PrefDir.11" value="0"/>+<param name="PrefDir.12" value="0"/>+<param name="PrefDir.13" value="0"/>+<param name="PrefDir.14" value="0"/>+<param name="PrefDir.15" value="0"/>+<param name="PrefDir.16" value="a"/>+<param name="cfVia" value="8"/>+<param name="cfNonPref" value="5"/>+<param name="cfChangeDir" value="2"/>+<param name="cfOrthStep" value="2"/>+<param name="cfDiagStep" value="3"/>+<param name="cfExtdStep" value="0"/>+<param name="cfBonusStep" value="1"/>+<param name="cfMalusStep" value="1"/>+<param name="cfPadImpact" value="4"/>+<param name="cfSmdImpact" value="4"/>+<param name="cfBusImpact" value="0"/>+<param name="cfHugging" value="3"/>+<param name="cfAvoid" value="4"/>+<param name="cfPolygon" value="10"/>+<param name="cfBase.1" value="0"/>+<param name="cfBase.2" value="1"/>+<param name="cfBase.3" value="1"/>+<param name="cfBase.4" value="1"/>+<param name="cfBase.5" value="1"/>+<param name="cfBase.6" value="1"/>+<param name="cfBase.7" value="1"/>+<param name="cfBase.8" value="1"/>+<param name="cfBase.9" value="1"/>+<param name="cfBase.10" value="1"/>+<param name="cfBase.11" value="1"/>+<param name="cfBase.12" value="1"/>+<param name="cfBase.13" value="1"/>+<param name="cfBase.14" value="1"/>+<param name="cfBase.15" value="1"/>+<param name="cfBase.16" value="0"/>+<param name="mnVias" value="20"/>+<param name="mnSegments" value="9999"/>+<param name="mnExtdSteps" value="9999"/>+<param name="mnRipupLevel" value="10"/>+<param name="mnRipupSteps" value="100"/>+<param name="mnRipupTotal" value="100"/>+</pass>+<pass name="Follow-me" refer="Default" active="yes">+</pass>+<pass name="Busses" refer="Default" active="yes">+<param name="cfNonPref" value="4"/>+<param name="cfBusImpact" value="4"/>+<param name="cfHugging" value="0"/>+<param name="mnVias" value="0"/>+</pass>+<pass name="Route" refer="Default" active="yes">+</pass>+<pass name="Optimize1" refer="Default" active="yes">+<param name="cfVia" value="99"/>+<param name="cfExtdStep" value="10"/>+<param name="cfHugging" value="1"/>+<param name="mnExtdSteps" value="1"/>+<param name="mnRipupLevel" value="0"/>+</pass>+<pass name="Optimize2" refer="Optimize1" active="yes">+<param name="cfNonPref" value="0"/>+<param name="cfChangeDir" value="6"/>+<param name="cfExtdStep" value="0"/>+<param name="cfBonusStep" value="2"/>+<param name="cfMalusStep" value="2"/>+<param name="cfPadImpact" value="2"/>+<param name="cfSmdImpact" value="2"/>+<param name="cfHugging" value="0"/>+</pass>+<pass name="Optimize3" refer="Optimize2" active="yes">+<param name="cfChangeDir" value="8"/>+<param name="cfPadImpact" value="0"/>+<param name="cfSmdImpact" value="0"/>+</pass>+<pass name="Optimize4" refer="Optimize3" active="yes">+<param name="cfChangeDir" value="25"/>+</pass>+</autorouter>+<elements>+<element name="J1" library="FusionCrossbarFixture" package="J1" value="CROSSBAR_TEST" x="0" y="0" smashed="yes">+</element>+<element name="J2" library="FusionCrossbarFixture" package="J2" value="CROSSBAR_TEST" x="0" y="0" smashed="yes">+</element>+<element name="J3" library="FusionCrossbarFixture" package="J3" value="CROSSBAR_TEST" x="0" y="0" smashed="yes">+<pad name="1">+</pad>+<pad name="8">+</pad>+<pad name="15">+</pad>+<pad name="22">+</pad>+<pad name="5">+</pad>+<pad name="12">+</pad>+<pad name="19">+</pad>+<pad name="2">+</pad>+<pad name="9">+</pad>+<pad name="16">+</pad>+<pad name="23">+</pad>+<pad name="6">+</pad>+<pad name="13">+</pad>+<pad name="20">+</pad>+<pad name="3">+</pad>+<pad name="10">+</pad>+<pad name="17">+</pad>+<pad name="24">+</pad>+<pad name="7">+</pad>+<pad name="14">+</pad>+<pad name="21">+</pad>+<pad name="4">+</pad>+<pad name="11">+</pad>+<pad name="18">+</pad>+</element>+</elements>+<signals>+<signal name="CH_01">+<contactref element="J1" pad="1"/>+<contactref element="J2" pad="1"/>+<contactref element="J3" pad="1"/>+<wire x1="45" y1="52" x2="55" y2="52" width="0.3" layer="1"/>+<wire x1="55" y1="52" x2="65" y2="52" width="0.3" layer="1"/>+<via x="65" y="52" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="65" y1="52" x2="65" y2="42" width="0.3" layer="16"/>+<via x="65" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="65" y1="42" x2="65" y2="35" width="0.3" layer="1"/>+<wire x1="65" y1="52" x2="65" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_02">+<contactref element="J1" pad="2"/>+<contactref element="J2" pad="8"/>+<contactref element="J3" pad="8"/>+<wire x1="45" y1="54.54" x2="55" y2="54.54" width="0.3" layer="1"/>+<wire x1="55" y1="54.54" x2="82.78" y2="54.54" width="0.3" layer="1"/>+<via x="82.78" y="54.54" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="82.78" y1="54.54" x2="82.78" y2="42" width="0.3" layer="16"/>+<via x="82.78" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="82.78" y1="42" x2="82.78" y2="35" width="0.3" layer="1"/>+<wire x1="82.78" y1="54.54" x2="82.78" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_03">+<contactref element="J1" pad="3"/>+<contactref element="J2" pad="15"/>+<contactref element="J3" pad="15"/>+<wire x1="45" y1="57.08" x2="55" y2="57.08" width="0.3" layer="1"/>+<wire x1="55" y1="57.08" x2="100.56" y2="57.08" width="0.3" layer="1"/>+<via x="100.56" y="57.08" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="100.56" y1="57.08" x2="100.56" y2="42" width="0.3" layer="16"/>+<via x="100.56" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="100.56" y1="42" x2="100.56" y2="35" width="0.3" layer="1"/>+<wire x1="100.56" y1="57.08" x2="100.56" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_04">+<contactref element="J1" pad="4"/>+<contactref element="J2" pad="22"/>+<contactref element="J3" pad="22"/>+<wire x1="45" y1="59.62" x2="55" y2="59.62" width="0.3" layer="1"/>+<wire x1="55" y1="59.62" x2="118.34" y2="59.62" width="0.3" layer="1"/>+<via x="118.34" y="59.62" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="118.34" y1="59.62" x2="118.34" y2="42" width="0.3" layer="16"/>+<via x="118.34" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="118.34" y1="42" x2="118.34" y2="35" width="0.3" layer="1"/>+<wire x1="118.34" y1="59.62" x2="118.34" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_05">+<contactref element="J1" pad="5"/>+<contactref element="J2" pad="5"/>+<contactref element="J3" pad="5"/>+<wire x1="45" y1="62.16" x2="55" y2="62.16" width="0.3" layer="1"/>+<wire x1="55" y1="62.16" x2="75.16" y2="62.16" width="0.3" layer="1"/>+<via x="75.16" y="62.16" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="75.16" y1="62.16" x2="75.16" y2="42" width="0.3" layer="16"/>+<via x="75.16" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="75.16" y1="42" x2="75.16" y2="35" width="0.3" layer="1"/>+<wire x1="75.16" y1="62.16" x2="75.16" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_06">+<contactref element="J1" pad="6"/>+<contactref element="J2" pad="12"/>+<contactref element="J3" pad="12"/>+<wire x1="45" y1="64.7" x2="55" y2="64.7" width="0.3" layer="1"/>+<wire x1="55" y1="64.7" x2="92.94" y2="64.7" width="0.3" layer="1"/>+<via x="92.94" y="64.7" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="92.94" y1="64.7" x2="92.94" y2="42" width="0.3" layer="16"/>+<via x="92.94" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="92.94" y1="42" x2="92.94" y2="35" width="0.3" layer="1"/>+<wire x1="92.94" y1="64.7" x2="92.94" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_07">+<contactref element="J1" pad="7"/>+<contactref element="J2" pad="19"/>+<contactref element="J3" pad="19"/>+<wire x1="45" y1="67.24" x2="55" y2="67.24" width="0.3" layer="1"/>+<wire x1="55" y1="67.24" x2="110.72" y2="67.24" width="0.3" layer="1"/>+<via x="110.72" y="67.24" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="110.72" y1="67.24" x2="110.72" y2="42" width="0.3" layer="16"/>+<via x="110.72" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="110.72" y1="42" x2="110.72" y2="35" width="0.3" layer="1"/>+<wire x1="110.72" y1="67.24" x2="110.72" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_08">+<contactref element="J1" pad="8"/>+<contactref element="J2" pad="2"/>+<contactref element="J3" pad="2"/>+<wire x1="45" y1="69.78" x2="55" y2="69.78" width="0.3" layer="1"/>+<wire x1="55" y1="69.78" x2="67.54" y2="69.78" width="0.3" layer="1"/>+<via x="67.54" y="69.78" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="67.54" y1="69.78" x2="67.54" y2="42" width="0.3" layer="16"/>+<via x="67.54" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="67.54" y1="42" x2="67.54" y2="35" width="0.3" layer="1"/>+<wire x1="67.54" y1="69.78" x2="67.54" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_09">+<contactref element="J1" pad="9"/>+<contactref element="J2" pad="9"/>+<contactref element="J3" pad="9"/>+<wire x1="45" y1="72.32" x2="55" y2="72.32" width="0.3" layer="1"/>+<wire x1="55" y1="72.32" x2="85.32" y2="72.32" width="0.3" layer="1"/>+<via x="85.32" y="72.32" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="85.32" y1="72.32" x2="85.32" y2="42" width="0.3" layer="16"/>+<via x="85.32" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="85.32" y1="42" x2="85.32" y2="35" width="0.3" layer="1"/>+<wire x1="85.32" y1="72.32" x2="85.32" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_10">+<contactref element="J1" pad="10"/>+<contactref element="J2" pad="16"/>+<contactref element="J3" pad="16"/>+<wire x1="45" y1="74.86" x2="55" y2="74.86" width="0.3" layer="1"/>+<wire x1="55" y1="74.86" x2="103.1" y2="74.86" width="0.3" layer="1"/>+<via x="103.1" y="74.86" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="103.1" y1="74.86" x2="103.1" y2="42" width="0.3" layer="16"/>+<via x="103.1" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="103.1" y1="42" x2="103.1" y2="35" width="0.3" layer="1"/>+<wire x1="103.1" y1="74.86" x2="103.1" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_11">+<contactref element="J1" pad="11"/>+<contactref element="J2" pad="23"/>+<contactref element="J3" pad="23"/>+<wire x1="45" y1="77.4" x2="55" y2="77.4" width="0.3" layer="1"/>+<wire x1="55" y1="77.4" x2="120.88" y2="77.4" width="0.3" layer="1"/>+<via x="120.88" y="77.4" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="120.88" y1="77.4" x2="120.88" y2="42" width="0.3" layer="16"/>+<via x="120.88" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="120.88" y1="42" x2="120.88" y2="35" width="0.3" layer="1"/>+<wire x1="120.88" y1="77.4" x2="120.88" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_12">+<contactref element="J1" pad="12"/>+<contactref element="J2" pad="6"/>+<contactref element="J3" pad="6"/>+<wire x1="45" y1="79.94" x2="55" y2="79.94" width="0.3" layer="1"/>+<wire x1="55" y1="79.94" x2="77.7" y2="79.94" width="0.3" layer="1"/>+<via x="77.7" y="79.94" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="77.7" y1="79.94" x2="77.7" y2="42" width="0.3" layer="16"/>+<via x="77.7" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="77.7" y1="42" x2="77.7" y2="35" width="0.3" layer="1"/>+<wire x1="77.7" y1="79.94" x2="77.7" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_13">+<contactref element="J1" pad="13"/>+<contactref element="J2" pad="13"/>+<contactref element="J3" pad="13"/>+<wire x1="45" y1="82.48" x2="55" y2="82.48" width="0.3" layer="1"/>+<wire x1="55" y1="82.48" x2="95.48" y2="82.48" width="0.3" layer="1"/>+<via x="95.48" y="82.48" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="95.48" y1="82.48" x2="95.48" y2="42" width="0.3" layer="16"/>+<via x="95.48" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="95.48" y1="42" x2="95.48" y2="35" width="0.3" layer="1"/>+<wire x1="95.48" y1="82.48" x2="95.48" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_14">+<contactref element="J1" pad="14"/>+<contactref element="J2" pad="20"/>+<contactref element="J3" pad="20"/>+<wire x1="45" y1="85.02" x2="55" y2="85.02" width="0.3" layer="1"/>+<wire x1="55" y1="85.02" x2="113.26" y2="85.02" width="0.3" layer="1"/>+<via x="113.26" y="85.02" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="113.26" y1="85.02" x2="113.26" y2="42" width="0.3" layer="16"/>+<via x="113.26" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="113.26" y1="42" x2="113.26" y2="35" width="0.3" layer="1"/>+<wire x1="113.26" y1="85.02" x2="113.26" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_15">+<contactref element="J1" pad="15"/>+<contactref element="J2" pad="3"/>+<contactref element="J3" pad="3"/>+<wire x1="45" y1="87.56" x2="55" y2="87.56" width="0.3" layer="1"/>+<wire x1="55" y1="87.56" x2="70.08" y2="87.56" width="0.3" layer="1"/>+<via x="70.08" y="87.56" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="70.08" y1="87.56" x2="70.08" y2="42" width="0.3" layer="16"/>+<via x="70.08" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="70.08" y1="42" x2="70.08" y2="35" width="0.3" layer="1"/>+<wire x1="70.08" y1="87.56" x2="70.08" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_16">+<contactref element="J1" pad="16"/>+<contactref element="J2" pad="10"/>+<contactref element="J3" pad="10"/>+<wire x1="45" y1="90.1" x2="55" y2="90.1" width="0.3" layer="1"/>+<wire x1="55" y1="90.1" x2="87.86" y2="90.1" width="0.3" layer="1"/>+<via x="87.86" y="90.1" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="87.86" y1="90.1" x2="87.86" y2="42" width="0.3" layer="16"/>+<via x="87.86" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="87.86" y1="42" x2="87.86" y2="35" width="0.3" layer="1"/>+<wire x1="87.86" y1="90.1" x2="87.86" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_17">+<contactref element="J1" pad="17"/>+<contactref element="J2" pad="17"/>+<contactref element="J3" pad="17"/>+<wire x1="45" y1="92.64" x2="55" y2="92.64" width="0.3" layer="1"/>+<wire x1="55" y1="92.64" x2="105.64" y2="92.64" width="0.3" layer="1"/>+<via x="105.64" y="92.64" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="105.64" y1="92.64" x2="105.64" y2="42" width="0.3" layer="16"/>+<via x="105.64" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="105.64" y1="42" x2="105.64" y2="35" width="0.3" layer="1"/>+<wire x1="105.64" y1="92.64" x2="105.64" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_18">+<contactref element="J1" pad="18"/>+<contactref element="J2" pad="24"/>+<contactref element="J3" pad="24"/>+<wire x1="45" y1="95.18" x2="55" y2="95.18" width="0.3" layer="1"/>+<wire x1="55" y1="95.18" x2="123.42" y2="95.18" width="0.3" layer="1"/>+<via x="123.42" y="95.18" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="123.42" y1="95.18" x2="123.42" y2="42" width="0.3" layer="16"/>+<via x="123.42" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="123.42" y1="42" x2="123.42" y2="35" width="0.3" layer="1"/>+<wire x1="123.42" y1="95.18" x2="123.42" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_19">+<contactref element="J1" pad="19"/>+<contactref element="J2" pad="7"/>+<contactref element="J3" pad="7"/>+<wire x1="45" y1="97.72" x2="55" y2="97.72" width="0.3" layer="1"/>+<wire x1="55" y1="97.72" x2="80.24" y2="97.72" width="0.3" layer="1"/>+<via x="80.24" y="97.72" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="80.24" y1="97.72" x2="80.24" y2="42" width="0.3" layer="16"/>+<via x="80.24" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="80.24" y1="42" x2="80.24" y2="35" width="0.3" layer="1"/>+<wire x1="80.24" y1="97.72" x2="80.24" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_20">+<contactref element="J1" pad="20"/>+<contactref element="J2" pad="14"/>+<contactref element="J3" pad="14"/>+<wire x1="45" y1="100.26" x2="55" y2="100.26" width="0.3" layer="1"/>+<wire x1="55" y1="100.26" x2="98.02" y2="100.26" width="0.3" layer="1"/>+<via x="98.02" y="100.26" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="98.02" y1="100.26" x2="98.02" y2="42" width="0.3" layer="16"/>+<via x="98.02" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="98.02" y1="42" x2="98.02" y2="35" width="0.3" layer="1"/>+<wire x1="98.02" y1="100.26" x2="98.02" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_21">+<contactref element="J1" pad="21"/>+<contactref element="J2" pad="21"/>+<contactref element="J3" pad="21"/>+<wire x1="45" y1="102.8" x2="55" y2="102.8" width="0.3" layer="1"/>+<wire x1="55" y1="102.8" x2="115.8" y2="102.8" width="0.3" layer="1"/>+<via x="115.8" y="102.8" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="115.8" y1="102.8" x2="115.8" y2="42" width="0.3" layer="16"/>+<via x="115.8" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="115.8" y1="42" x2="115.8" y2="35" width="0.3" layer="1"/>+<wire x1="115.8" y1="102.8" x2="115.8" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_22">+<contactref element="J1" pad="22"/>+<contactref element="J2" pad="4"/>+<contactref element="J3" pad="4"/>+<wire x1="45" y1="105.34" x2="55" y2="105.34" width="0.3" layer="1"/>+<wire x1="55" y1="105.34" x2="72.62" y2="105.34" width="0.3" layer="1"/>+<via x="72.62" y="105.34" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="72.62" y1="105.34" x2="72.62" y2="42" width="0.3" layer="16"/>+<via x="72.62" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="72.62" y1="42" x2="72.62" y2="35" width="0.3" layer="1"/>+<wire x1="72.62" y1="105.34" x2="72.62" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_23">+<contactref element="J1" pad="23"/>+<contactref element="J2" pad="11"/>+<contactref element="J3" pad="11"/>+<wire x1="45" y1="107.88" x2="55" y2="107.88" width="0.3" layer="1"/>+<wire x1="55" y1="107.88" x2="90.4" y2="107.88" width="0.3" layer="1"/>+<via x="90.4" y="107.88" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="90.4" y1="107.88" x2="90.4" y2="42" width="0.3" layer="16"/>+<via x="90.4" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="90.4" y1="42" x2="90.4" y2="35" width="0.3" layer="1"/>+<wire x1="90.4" y1="107.88" x2="90.4" y2="125" width="0.3" layer="16"/>+</signal>+<signal name="CH_24">+<contactref element="J1" pad="24"/>+<contactref element="J2" pad="18"/>+<contactref element="J3" pad="18"/>+<wire x1="45" y1="110.42" x2="55" y2="110.42" width="0.3" layer="1"/>+<wire x1="55" y1="110.42" x2="108.18" y2="110.42" width="0.3" layer="1"/>+<via x="108.18" y="110.42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="108.18" y1="110.42" x2="108.18" y2="42" width="0.3" layer="16"/>+<via x="108.18" y="42" extent="1-16" drill="0.3" diameter="0.6" solderMask="auto">+</via>+<wire x1="108.18" y1="42" x2="108.18" y2="35" width="0.3" layer="1"/>+<wire x1="108.18" y1="110.42" x2="108.18" y2="125" width="0.3" layer="16"/>+</signal>+</signals>+<mfgpreviewcolors>+<mfgpreviewcolor name="soldermaskcolor" color="0xC8008000"/>+<mfgpreviewcolor name="silkscreencolor" color="0xFFFEFEFE"/>+<mfgpreviewcolor name="backgroundcolor" color="0xFF282828"/>+<mfgpreviewcolor name="coppercolor" color="0xFFFFBF00"/>+<mfgpreviewcolor name="substratecolor" color="0xFF786E46"/>+</mfgpreviewcolors>+</board>+</drawing>+<compatibility>+<note version="9.7" severity="warning">+Since Fusion, design files support named views saved in design. +Named views found in the design will not be understood with this version. +</note>+<note version="9.7" minversion="9.7.0" severity="warning">+Since Version 9.7.0 new layer stackup definition has been added,+which will not be loaded with this version.+</note>+<note version="9.7" minversion="9.7.0" severity="warning">+Since Version 9.7.0 new active CAMJOB file name has been added,+which will not be loaded with this version.+</note>+<note version="9.7" minversion="9.7.0" severity="warning">+Since Version 9.7.0 board construction lines has been added,+which will not be loaded with this version.+</note>+<note version="9.7" minversion="9.7.0" severity="warning">+Since Version 9.7.0 new design rule definitions have been added,+which will not be loaded with this version.+</note>+</compatibility>+</eagle>
demo/routing/crossbar/take-01/fusion-crossbar-24-routed.fbrdadded⋯ 1 unchanged line ⋯
demo/routing/crossbar/take-01/motion-scores.jsonadded+1@@ -0,0 +1 @@+[[0.1, 0], [0.2, 0], [0.3, 0], [0.4, 0], [0.5, 0], [0.6, 0], [0.7, 0], [0.8, 0], [0.9, 0], [1.0, 0], [1.1, 0], [1.2, 0], [1.3, 0], [1.4, 0], [1.5, 0], [1.6, 257], [1.7, 0], [1.8, 0], [1.9, 0], [2.0, 0], [2.1, 0], [2.2, 0], [2.3, 0], [2.4, 147], [2.5, 0], [2.6, 0], [2.7, 0], [2.8, 0], [2.9, 0], [3.0, 0], [3.1, 0], [3.2, 0], [3.3, 0], [3.4, 0], [3.5, 0], [3.6, 3], [3.7, 0], [3.8, 0], [3.9, 0], [4.0, 0], [4.1, 0], [4.2, 0], [4.3, 0], [4.4, 360], [4.5, 0], [4.6, 0], [4.7, 0], [4.8, 0], [4.9, 0], [5.0, 0], [5.1, 0], [5.2, 0], [5.3, 0], [5.4, 7], [5.5, 0], [5.6, 0], [5.7, 0], [5.8, 0], [5.9, 0], [6.0, 0], [6.1, 0], [6.2, 0], [6.3, 346], [6.4, 0], [6.5, 0], [6.6, 0], [6.7, 0], [6.8, 0], [6.9, 0], [7.0, 0], [7.1, 0], [7.2, 1014], [7.3, 0], [7.4, 0], [7.5, 0], [7.6, 0], [7.7, 0], [7.8, 0], [7.9, 0], [8.0, 0], [8.1, 0], [8.2, 0], [8.3, 0], [8.4, 0], [8.5, 432], [8.6, 0], [8.7, 0], [8.8, 0], [8.9, 0], [9.0, 0], [9.1, 0], [9.2, 0], [9.3, 0], [9.4, 0], [9.5, 0], [9.6, 286], [9.7, 0], [9.8, 0], [9.9, 0], [10.0, 0], [10.1, 0], [10.2, 0], [10.3, 0], [10.4, 0], [10.5, 0], [10.6, 0], [10.7, 0], [10.8, 0], [10.9, 0], [11.0, 0], [11.1, 0], [11.2, 0], [11.3, 0], [11.4, 0], [11.5, 0], [11.6, 478], [11.7, 0], [11.8, 0], [11.9, 0], [12.0, 0], [12.1, 0], [12.2, 0], [12.3, 0], [12.4, 0], [12.5, 0], [12.6, 5], [12.7, 0], [12.8, 0], [12.9, 0], [13.0, 0], [13.1, 0], [13.2, 0], [13.3, 0], [13.4, 0], [13.5, 426], [13.6, 0], [13.7, 0], [13.8, 0], [13.9, 0], [14.0, 0], [14.1, 0], [14.2, 0], [14.3, 0], [14.4, 1084], [14.5, 0], [14.6, 0], [14.7, 0], [14.8, 0], [14.9, 0], [15.0, 0], [15.1, 0], [15.2, 0], [15.3, 0], [15.4, 0], [15.5, 0], [15.6, 0], [15.7, 0], [15.8, 0], [15.9, 0], [16.0, 493], [16.1, 0], [16.2, 0], [16.3, 0], [16.4, 0], [16.5, 0], [16.6, 0], [16.7, 0], [16.8, 0], [16.9, 465], [17.0, 0], [17.1, 0], [17.2, 0], [17.3, 0], [17.4, 0], [17.5, 0], [17.6, 0], [17.7, 1], [17.8, 0], [17.9, 0], [18.0, 0], [18.1, 0], [18.2, 0], [18.3, 0], [18.4, 0], [18.5, 0], [18.6, 586], [18.7, 0], [18.8, 0], [18.9, 0], [19.0, 0], [19.1, 0], [19.2, 0], [19.3, 0], [19.4, 0], [19.5, 0], [19.6, 0], [19.7, 12], [19.8, 0], [19.9, 0], [20.0, 0], [20.1, 0], [20.2, 0], [20.3, 0], [20.4, 0], [20.5, 0], [20.6, 504], [20.7, 0], [20.8, 0], [20.9, 0], [21.0, 0], [21.1, 0], [21.2, 0], [21.3, 0], [21.4, 0], [21.5, 0], [21.6, 1131], [21.7, 0], [21.8, 0], [21.9, 0], [22.0, 0], [22.1, 0], [22.2, 0], [22.3, 0], [22.4, 0], [22.5, 0], [22.6, 0], [22.7, 0], [22.8, 0], [22.9, 0], [23.0, 0], [23.1, 557], [23.2, 0], [23.3, 0], [23.4, 0], [23.5, 0], [23.6, 0], [23.7, 0], [23.8, 0], [23.9, 652], [24.0, 0], [24.1, 0], [24.2, 0], [24.3, 0], [24.4, 0], [24.5, 0], [24.6, 0], [24.7, 0], [24.8, 0], [24.9, 0], [25.0, 1], [25.1, 0], [25.2, 0], [25.3, 0], [25.4, 0], [25.5, 0], [25.6, 0], [25.7, 0], [25.8, 0], [25.9, 0], [26.0, 767], [26.1, 0], [26.2, 0], [26.3, 0], [26.4, 0], [26.5, 0], [26.6, 0], [26.7, 0], [26.8, 0], [26.9, 0], [27.0, 10], [27.1, 0], [27.2, 0], [27.3, 0], [27.4, 0], [27.5, 0], [27.6, 0], [27.7, 0], [27.8, 0], [27.9, 632], [28.0, 0], [28.1, 0], [28.2, 0], [28.3, 0], [28.4, 0], [28.5, 0], [28.6, 0], [28.7, 0], [28.8, 0], [28.9, 1825], [29.0, 0], [29.1, 0], [29.2, 0], [29.3, 0], [29.4, 0], [29.5, 0], [29.6, 0], [29.7, 0], [29.8, 0], [29.9, 0], [30.0, 0], [30.1, 0], [30.2, 0], [30.3, 0], [30.4, 640], [30.5, 0], [30.6, 0], [30.7, 0], [30.8, 0], [30.9, 0], [31.0, 0], [31.1, 0], [31.2, 0], [31.3, 221], [31.4, 0], [31.5, 0], [31.6, 0], [31.7, 0], [31.8, 0], [31.9, 0], [32.0, 0], [32.1, 0], [32.2, 0], [32.3, 3], [32.4, 0], [32.5, 0], [32.6, 0], [32.7, 0], [32.8, 0], [32.9, 0], [33.0, 0], [33.1, 0], [33.2, 0], [33.3, 724], [33.4, 0], [33.5, 0], [33.6, 0], [33.7, 0], [33.8, 0], [33.9, 0], [34.0, 0], [34.1, 0], [34.2, 0], [34.3, 8], [34.4, 0], [34.5, 0], [34.6, 0], [34.7, 0], [34.8, 0], [34.9, 0], [35.0, 0], [35.1, 619], [35.2, 0], [35.3, 0], [35.4, 0], [35.5, 0], [35.6, 0], [35.7, 0], [35.8, 0], [35.9, 0], [36.0, 0], [36.1, 1194], [36.2, 0], [36.3, 0], [36.4, 0], [36.5, 0], [36.6, 0], [36.7, 0], [36.8, 0], [36.9, 0], [37.0, 0], [37.1, 0], [37.2, 0], [37.3, 0], [37.4, 0], [37.5, 0], [37.6, 0], [37.7, 695], [37.8, 0], [37.9, 0], [38.0, 0], [38.1, 0], [38.2, 0], [38.3, 0], [38.4, 0], [38.5, 0], [38.6, 397], [38.7, 0], [38.8, 0], [38.9, 0], [39.0, 0], [39.1, 0], [39.2, 0], [39.3, 0], [39.4, 0], [39.5, 0], [39.6, 0], [39.7, 2], [39.8, 0], [39.9, 0], [40.0, 0], [40.1, 0], [40.2, 0], [40.3, 0], [40.4, 0], [40.5, 840], [40.6, 0], [40.7, 0], [40.8, 0], [40.9, 0], [41.0, 0], [41.1, 0], [41.2, 0], [41.3, 0], [41.4, 0], [41.5, 0], [41.6, 2], [41.7, 0], [41.8, 0], [41.9, 0], [42.0, 0], [42.1, 0], [42.2, 0], [42.3, 0], [42.4, 0], [42.5, 677], [42.6, 0], [42.7, 0], [42.8, 0], [42.9, 0], [43.0, 0], [43.1, 0], [43.2, 0], [43.3, 0], [43.4, 1237], [43.5, 0], [43.6, 0], [43.7, 0], [43.8, 0], [43.9, 0], [44.0, 0], [44.1, 0], [44.2, 0], [44.3, 0], [44.4, 0], [44.5, 0], [44.6, 0], [44.7, 0], [44.8, 0], [44.9, 0], [45.0, 0], [45.1, 745], [45.2, 0], [45.3, 0], [45.4, 0], [45.5, 0], [45.6, 0], [45.7, 0], [45.8, 0], [45.9, 589], [46.0, 0], [46.1, 0], [46.2, 0], [46.3, 0], [46.4, 0], [46.5, 0], [46.6, 0], [46.7, 0], [46.8, 0], [46.9, 0], [47.0, 1], [47.1, 0], [47.2, 0], [47.3, 0], [47.4, 0], [47.5, 0], [47.6, 0], [47.7, 0], [47.8, 0], [47.9, 0], [48.0, 919], [48.1, 0], [48.2, 0], [48.3, 0], [48.4, 0], [48.5, 0], [48.6, 0], [48.7, 0], [48.8, 6], [48.9, 0], [49.0, 0], [49.1, 0], [49.2, 0], [49.3, 0], [49.4, 0], [49.5, 0], [49.6, 0], [49.7, 0], [49.8, 0], [49.9, 726], [50.0, 0], [50.1, 0], [50.2, 0], [50.3, 0], [50.4, 53], [50.5, 20], [50.6, 0], [50.7, 1237], [50.8, 0], [50.9, 0], [51.0, 0], [51.1, 0], [51.2, 0], [51.3, 0], [51.4, 0], [51.5, 0], [51.6, 53], [51.7, 64], [51.8, 57], [51.9, 25], [52.0, 0], [52.1, 0], [52.2, 0], [52.3, 798], [52.4, 0], [52.5, 0], [52.6, 0], [52.7, 0], [52.8, 0], [52.9, 0], [53.0, 0], [53.1, 0], [53.2, 0], [53.3, 0], [53.4, 139], [53.5, 0], [53.6, 32], [53.7, 26], [53.8, 0], [53.9, 0], [54.0, 0], [54.1, 0], [54.2, 0], [54.3, 0], [54.4, 1], [54.5, 0], [54.6, 0], [54.7, 0], [54.8, 0], [54.9, 0], [55.0, 0], [55.1, 0], [55.2, 0], [55.3, 0], [55.4, 1093], [55.5, 0], [55.6, 0], [55.7, 0], [55.8, 41], [55.9, 0], [56.0, 111], [56.1, 110], [56.2, 0], [56.3, 133], [56.4, 23], [56.5, 6], [56.6, 201], [56.7, 110], [56.8, 0], [56.9, 0], [57.0, 0], [57.1, 0], [57.2, 41], [57.3, 0], [57.4, 0], [57.5, 0], [57.6, 0], [57.7, 849], [57.8, 0], [57.9, 0], [58.0, 9], [58.1, 0], [58.2, 0], [58.3, 0], [58.4, 0], [58.5, 0], [58.6, 10], [58.7, 0], [58.8, 1568], [58.9, 0], [59.0, 0], [59.1, 0], [59.2, 0], [59.3, 0], [59.4, 0], [59.5, 0], [59.6, 0], [59.7, 0], [59.8, 0], [59.9, 0], [60.0, 0], [60.1, 0], [60.2, 0], [60.3, 904], [60.4, 0], [60.5, 0], [60.6, 0], [60.7, 0], [60.8, 0], [60.9, 0], [61.0, 0], [61.1, 0], [61.2, 17], [61.3, 344], [61.4, 0], [61.5, 0], [61.6, 0], [61.7, 0], [61.8, 0], [61.9, 0], [62.0, 0], [62.1, 0], [62.2, 0], [62.3, 2], [62.4, 0], [62.5, 0], [62.6, 0], [62.7, 0], [62.8, 0], [62.9, 0], [63.0, 0], [63.1, 0], [63.2, 1215], [63.3, 0], [63.4, 0], [63.5, 0], [63.6, 0], [63.7, 0], [63.8, 0], [63.9, 0], [64.0, 0], [64.1, 0], [64.2, 0], [64.3, 0], [64.4, 9], [64.5, 0], [64.6, 0], [64.7, 0], [64.8, 0], [64.9, 0], [65.0, 0], [65.1, 0], [65.2, 0], [65.3, 0], [65.4, 928], [65.5, 0], [65.6, 0], [65.7, 0], [65.8, 0], [65.9, 0], [66.0, 0], [66.1, 0], [66.2, 0], [66.3, 1592], [66.4, 0], [66.5, 0], [66.6, 0], [66.7, 0], [66.8, 0], [66.9, 0], [67.0, 0], [67.1, 0], [67.2, 0], [67.3, 0], [67.4, 0], [67.5, 0], [67.6, 0], [67.7, 962], [67.8, 0], [67.9, 0], [68.0, 0], [68.1, 0], [68.2, 0], [68.3, 0], [68.4, 0], [68.5, 0], [68.6, 0], [68.7, 512], [68.8, 0], [68.9, 0], [69.0, 0], [69.1, 0], [69.2, 0], [69.3, 0], [69.4, 0], [69.5, 0], [69.6, 0], [69.7, 0], [69.8, 2], [69.9, 0], [70.0, 0], [70.1, 0], [70.2, 0], [70.3, 0], [70.4, 0], [70.5, 0], [70.6, 0], [70.7, 1189], [70.8, 0], [70.9, 0], [71.0, 0], [71.1, 0], [71.2, 0], [71.3, 0], [71.4, 0], [71.5, 0], [71.6, 0], [71.7, 10], [71.8, 0], [71.9, 0], [72.0, 0], [72.1, 0], [72.2, 0], [72.3, 0], [72.4, 0], [72.5, 0], [72.6, 939], [72.7, 0], [72.8, 0], [72.9, 0], [73.0, 0], [73.1, 0], [73.2, 0], [73.3, 0], [73.4, 0], [73.5, 0], [73.6, 1370], [73.7, 0], [73.8, 0], [73.9, 0], [74.0, 0], [74.1, 0], [74.2, 0], [74.3, 0], [74.4, 0], [74.5, 0], [74.6, 0], [74.7, 0], [74.8, 0], [74.9, 0], [75.0, 0], [75.1, 0], [75.2, 0], [75.3, 1009], [75.4, 0], [75.5, 0], [75.6, 0], [75.7, 0], [75.8, 0], [75.9, 0], [76.0, 0], [76.1, 0], [76.2, 0], [76.3, 693], [76.4, 0], [76.5, 0], [76.6, 0], [76.7, 0], [76.8, 0], [76.9, 0], [77.0, 0], [77.1, 0], [77.2, 0], [77.3, 3], [77.4, 0], [77.5, 0], [77.6, 0], [77.7, 0], [77.8, 0], [77.9, 0], [78.0, 0], [78.1, 0], [78.2, 1278], [78.3, 0], [78.4, 0], [78.5, 0], [78.6, 0], [78.7, 0], [78.8, 0], [78.9, 0], [79.0, 0], [79.1, 0], [79.2, 6], [79.3, 0], [79.4, 0], [79.5, 0], [79.6, 0], [79.7, 0], [79.8, 0], [79.9, 0], [80.0, 0], [80.1, 967], [80.2, 0], [80.3, 0], [80.4, 0], [80.5, 0], [80.6, 0], [80.7, 0], [80.8, 0], [80.9, 0], [81.0, 0], [81.1, 1414], [81.2, 0], [81.3, 0], [81.4, 0], [81.5, 0], [81.6, 0], [81.7, 0], [81.8, 0], [81.9, 0], [82.0, 0], [82.1, 0], [82.2, 0], [82.3, 0], [82.4, 0], [82.5, 0], [82.6, 1058], [82.7, 0], [82.8, 0], [82.9, 0], [83.0, 0], [83.1, 0], [83.2, 0], [83.3, 0], [83.4, 0], [83.5, 0], [83.6, 261], [83.7, 0], [83.8, 0], [83.9, 0], [84.0, 0], [84.1, 0], [84.2, 0], [84.3, 0], [84.4, 0], [84.5, 0], [84.6, 4], [84.7, 0], [84.8, 0], [84.9, 0], [85.0, 0], [85.1, 0], [85.2, 0], [85.3, 0], [85.4, 0], [85.5, 0], [85.6, 1490], [85.7, 0], [85.8, 0], [85.9, 0], [86.0, 0], [86.1, 0], [86.2, 0], [86.3, 0], [86.4, 0], [86.5, 0], [86.6, 0], [86.7, 9], [86.8, 0], [86.9, 0], [87.0, 0], [87.1, 0], [87.2, 0], [87.3, 0], [87.4, 0], [87.5, 0], [87.6, 0], [87.7, 0], [87.8, 1087], [87.9, 22], [88.0, 22], [88.1, 0], [88.2, 0], [88.3, 0], [88.4, 0], [88.5, 0], [88.6, 0], [88.7, 0], [88.8, 0], [88.9, 1635], [89.0, 0], [89.1, 0], [89.2, 0], [89.3, 0], [89.4, 0], [89.5, 0], [89.6, 0], [89.7, 0], [89.8, 0], [89.9, 0], [90.0, 0], [90.1, 0], [90.2, 0], [90.3, 0], [90.4, 0], [90.5, 0], [90.6, 0], [90.7, 0], [90.8, 1179], [90.9, 0], [91.0, 0], [91.1, 0], [91.2, 0], [91.3, 0], [91.4, 0], [91.5, 0], [91.6, 0], [91.7, 0], [91.8, 467], [91.9, 0], [92.0, 0], [92.1, 0], [92.2, 0], [92.3, 0], [92.4, 0], [92.5, 0], [92.6, 0], [92.7, 0], [92.8, 0], [92.9, 4], [93.0, 0], [93.1, 0], [93.2, 0], [93.3, 0], [93.4, 0], [93.5, 0], [93.6, 0], [93.7, 1464], [93.8, 0], [93.9, 0], [94.0, 0], [94.1, 0], [94.2, 0], [94.3, 0], [94.4, 0], [94.5, 0], [94.6, 0], [94.7, 0], [94.8, 0], [94.9, 12], [95.0, 0], [95.1, 0], [95.2, 0], [95.3, 0], [95.4, 0], [95.5, 0], [95.6, 0], [95.7, 0], [95.8, 0], [95.9, 0], [96.0, 1145], [96.1, 0], [96.2, 0], [96.3, 0], [96.4, 0], [96.5, 0], [96.6, 0], [96.7, 0], [96.8, 0], [96.9, 0], [97.0, 1496], [97.1, 0], [97.2, 0], [97.3, 0], [97.4, 12], [97.5, 10], [97.6, 50], [97.7, 48], [97.8, 2], [97.9, 0], [98.0, 0], [98.1, 0], [98.2, 0], [98.3, 0], [98.4, 0], [98.5, 0], [98.6, 0], [98.7, 1262], [98.8, 0], [98.9, 0], [99.0, 0], [99.1, 0], [99.2, 0], [99.3, 0], [99.4, 0], [99.5, 0], [99.6, 0], [99.7, 901], [99.8, 0], [99.9, 0], [100.0, 0], [100.1, 0], [100.2, 0], [100.3, 0], [100.4, 0], [100.5, 0], [100.6, 0], [100.7, 0], [100.8, 4], [100.9, 0], [101.0, 0], [101.1, 0], [101.2, 0], [101.3, 0], [101.4, 0], [101.5, 0], [101.6, 0], [101.7, 0], [101.8, 0], [101.9, 2004], [102.0, 0], [102.1, 0], [102.2, 0], [102.3, 0], [102.4, 0], [102.5, 0], [102.6, 0], [102.7, 0], [102.8, 0], [102.9, 11], [103.0, 0], [103.1, 0], [103.2, 0], [103.3, 0], [103.4, 0], [103.5, 0], [103.6, 0], [103.7, 0], [103.8, 0], [103.9, 1301], [104.0, 0], [104.1, 0], [104.2, 0], [104.3, 0], [104.4, 0], [104.5, 0], [104.6, 0], [104.7, 0], [104.8, 0], [104.9, 0], [105.0, 1967], [105.1, 0], [105.2, 0], [105.3, 0], [105.4, 0], [105.5, 0], [105.6, 0], [105.7, 0], [105.8, 0], [105.9, 0], [106.0, 0], [106.1, 0], [106.2, 0], [106.3, 0], [106.4, 0], [106.5, 0], [106.6, 0], [106.7, 1369], [106.8, 0], [106.9, 0], [107.0, 0], [107.1, 0], [107.2, 0], [107.3, 0], [107.4, 0], [107.5, 0], [107.6, 0], [107.7, 274], [107.8, 0], [107.9, 0], [108.0, 0], [108.1, 0], [108.2, 0], [108.3, 0], [108.4, 0], [108.5, 0], [108.6, 0], [108.7, 0], [108.8, 0], [108.9, 6], [109.0, 0], [109.1, 0], [109.2, 0], [109.3, 0], [109.4, 0], [109.5, 0], [109.6, 0], [109.7, 0], [109.8, 0], [109.9, 1593], [110.0, 0], [110.1, 0], [110.2, 0], [110.3, 0], [110.4, 0], [110.5, 0], [110.6, 0], [110.7, 0], [110.8, 0], [110.9, 8], [111.0, 0], [111.1, 0], [111.2, 0], [111.3, 0], [111.4, 0], [111.5, 0], [111.6, 0], [111.7, 0], [111.8, 1278], [111.9, 0], [112.0, 0], [112.1, 0], [112.2, 0], [112.3, 0], [112.4, 0], [112.5, 0], [112.6, 0], [112.7, 0], [112.8, 1580], [112.9, 0], [113.0, 0], [113.1, 0], [113.2, 0], [113.3, 0], [113.4, 0], [113.5, 0], [113.6, 0], [113.7, 0], [113.8, 0], [113.9, 0], [114.0, 0], [114.1, 0], [114.2, 0], [114.3, 0], [114.4, 0], [114.5, 1447], [114.6, 0], [114.7, 0], [114.8, 0], [114.9, 0], [115.0, 0], [115.1, 0], [115.2, 0], [115.3, 0], [115.4, 0], [115.5, 0], [115.6, 564], [115.7, 0], [115.8, 0], [115.9, 0], [116.0, 0], [116.1, 0], [116.2, 0], [116.3, 0], [116.4, 0], [116.5, 0], [116.6, 0], [116.7, 6], [116.8, 0], [116.9, 0], [117.0, 0], [117.1, 0], [117.2, 0], [117.3, 0], [117.4, 0], [117.5, 0], [117.6, 0], [117.7, 1742], [117.8, 0], [117.9, 0], [118.0, 0], [118.1, 0], [118.2, 0], [118.3, 0], [118.4, 0], [118.5, 0], [118.6, 0], [118.7, 0], [118.8, 5], [118.9, 0], [119.0, 0], [119.1, 0], [119.2, 0], [119.3, 0], [119.4, 0], [119.5, 0], [119.6, 0], [119.7, 0], [119.8, 1360], [119.9, 0], [120.0, 0], [120.1, 0], [120.2, 0], [120.3, 0], [120.4, 0], [120.5, 0], [120.6, 0], [120.7, 0], [120.8, 0], [120.9, 1630], [121.0, 0], [121.1, 0], [121.2, 0], [121.3, 0], [121.4, 0], [121.5, 0], [121.6, 0], [121.7, 0], [121.8, 0], [121.9, 0], [122.0, 0], [122.1, 0], [122.2, 0], [122.3, 0], [122.4, 0], [122.5, 0], [122.6, 1468], [122.7, 0], [122.8, 0], [122.9, 0], [123.0, 0], [123.1, 0], [123.2, 0], [123.3, 0], [123.4, 0], [123.5, 0], [123.6, 787], [123.7, 0], [123.8, 0], [123.9, 0], [124.0, 0], [124.1, 0], [124.2, 0], [124.3, 0], [124.4, 0], [124.5, 0], [124.6, 0], [124.7, 0], [124.8, 4], [124.9, 0], [125.0, 0], [125.1, 0], [125.2, 0], [125.3, 0], [125.4, 0], [125.5, 0], [125.6, 0], [125.7, 0], [125.8, 1889], [125.9, 0], [126.0, 0], [126.1, 0], [126.2, 0], [126.3, 0], [126.4, 0], [126.5, 0], [126.6, 0], [126.7, 0], [126.8, 0], [126.9, 9], [127.0, 0], [127.1, 0], [127.2, 0], [127.3, 0], [127.4, 0], [127.5, 0], [127.6, 0], [127.7, 0], [127.8, 0], [127.9, 0], [128.0, 1463], [128.1, 0], [128.2, 0], [128.3, 0], [128.4, 0], [128.5, 0], [128.6, 0], [128.7, 0], [128.8, 0], [128.9, 0], [129.0, 1729], [129.1, 0], [129.2, 0], [129.3, 0], [129.4, 0], [129.5, 0], [129.6, 0], [129.7, 0], [129.8, 0], [129.9, 0], [130.0, 0], [130.1, 0], [130.2, 0], [130.3, 0], [130.4, 0], [130.5, 0], [130.6, 0], [130.7, 0], [130.8, 1565], [130.9, 0], [131.0, 0], [131.1, 0], [131.2, 0], [131.3, 0], [131.4, 0], [131.5, 0], [131.6, 0], [131.7, 1061], [131.8, 0], [131.9, 0], [132.0, 0], [132.1, 0], [132.2, 0], [132.3, 0], [132.4, 0], [132.5, 0], [132.6, 0], [132.7, 4], [132.8, 0], [132.9, 0], [133.0, 0], [133.1, 0], [133.2, 0], [133.3, 0], [133.4, 0], [133.5, 0], [133.6, 0], [133.7, 0], [133.8, 2297], [133.9, 0], [134.0, 0], [134.1, 0], [134.2, 0], [134.3, 0], [134.4, 0], [134.5, 0], [134.6, 0], [134.7, 0], [134.8, 0], [134.9, 0], [135.0, 0], [135.1, 11], [135.2, 0], [135.3, 0], [135.4, 0], [135.5, 0], [135.6, 0], [135.7, 0], [135.8, 0], [135.9, 0], [136.0, 0], [136.1, 0], [136.2, 0], [136.3, 0], [136.4, 1595], [136.5, 0], [136.6, 0], [136.7, 0], [136.8, 0], [136.9, 0], [137.0, 0], [137.1, 0], [137.2, 0], [137.3, 0], [137.4, 1946], [137.5, 0], [137.6, 0], [137.7, 0], [137.8, 0], [137.9, 0], [138.0, 0], [138.1, 0], [138.2, 0], [138.3, 0], [138.4, 0], [138.5, 0], [138.6, 0], [138.7, 0], [138.8, 0], [138.9, 0], [139.0, 0], [139.1, 1635], [139.2, 0], [139.3, 0], [139.4, 0], [139.5, 0], [139.6, 0], [139.7, 0], [139.8, 0], [139.9, 0], [140.0, 0], [140.1, 0], [140.2, 321], [140.3, 0], [140.4, 0], [140.5, 0], [140.6, 0], [140.7, 0], [140.8, 0], [140.9, 0], [141.0, 0], [141.1, 0], [141.2, 0], [141.3, 4], [141.4, 0], [141.5, 0], [141.6, 0], [141.7, 0], [141.8, 0], [141.9, 0], [142.0, 0], [142.1, 0], [142.2, 0], [142.3, 0], [142.4, 2270], [142.5, 0], [142.6, 0], [142.7, 0], [142.8, 0], [142.9, 0], [143.0, 0], [143.1, 0], [143.2, 0], [143.3, 0], [143.4, 0], [143.5, 0], [143.6, 9], [143.7, 0], [143.8, 0], [143.9, 0], [144.0, 0], [144.1, 0], [144.2, 0], [144.3, 0], [144.4, 0], [144.5, 0], [144.6, 0], [144.7, 1698], [144.8, 0], [144.9, 0], [145.0, 0], [145.1, 0], [145.2, 0], [145.3, 0], [145.4, 0], [145.5, 0], [145.6, 0], [145.7, 1911], [145.8, 0], [145.9, 0], [146.0, 0], [146.1, 0], [146.2, 0], [146.3, 0], [146.4, 0], [146.5, 0], [146.6, 0], [146.7, 0], [146.8, 0], [146.9, 0], [147.0, 0], [147.1, 0], [147.2, 0], [147.3, 0], [147.4, 1713], [147.5, 0], [147.6, 0], [147.7, 0], [147.8, 0], [147.9, 0], [148.0, 0], [148.1, 0], [148.2, 0], [148.3, 0], [148.4, 475], [148.5, 0], [148.6, 0], [148.7, 0], [148.8, 0], [148.9, 0], [149.0, 0], [149.1, 0], [149.2, 0], [149.3, 0], [149.4, 0], [149.5, 0], [149.6, 4], [149.7, 0], [149.8, 0], [149.9, 0], [150.0, 0], [150.1, 0], [150.2, 0], [150.3, 0], [150.4, 0], [150.5, 0], [150.6, 0], [150.7, 2263], [150.8, 0], [150.9, 0], [151.0, 0], [151.1, 0], [151.2, 0], [151.3, 0], [151.4, 0], [151.5, 0], [151.6, 0], [151.7, 0], [151.8, 0], [151.9, 8], [152.0, 0], [152.1, 0], [152.2, 0], [152.3, 0], [152.4, 0], [152.5, 0], [152.6, 0], [152.7, 0], [152.8, 0], [152.9, 0], [153.0, 1752], [153.1, 0], [153.2, 0], [153.3, 0], [153.4, 0], [153.5, 0], [153.6, 0], [153.7, 0], [153.8, 0], [153.9, 0], [154.0, 0], [154.1, 1962], [154.2, 0], [154.3, 0], [154.4, 0], [154.5, 0], [154.6, 0], [154.7, 0], [154.8, 0], [154.9, 0], [155.0, 0], [155.1, 0], [155.2, 0], [155.3, 0], [155.4, 0], [155.5, 0], [155.6, 0], [155.7, 0], [155.8, 0], [155.9, 1826], [156.0, 0], [156.1, 0], [156.2, 0], [156.3, 0], [156.4, 0], [156.5, 0], [156.6, 0], [156.7, 0], [156.8, 0], [156.9, 0], [157.0, 0], [157.1, 0], [157.2, 675], [157.3, 0], [157.4, 0], [157.5, 0], [157.6, 0], [157.7, 0], [157.8, 0], [157.9, 0], [158.0, 0], [158.1, 0], [158.2, 0], [158.3, 3], [158.4, 0], [158.5, 0], [158.6, 0], [158.7, 0], [158.8, 0], [158.9, 0], [159.0, 0], [159.1, 0], [159.2, 0], [159.3, 0], [159.4, 0], [159.5, 2418], [159.6, 0], [159.7, 0], [159.8, 0], [159.9, 0], [160.0, 0], [160.1, 0], [160.2, 0], [160.3, 0], [160.4, 0], [160.5, 0], [160.6, 0], [160.7, 4], [160.8, 0], [160.9, 0], [161.0, 0], [161.1, 0], [161.2, 0], [161.3, 0], [161.4, 0], [161.5, 0], [161.6, 0], [161.7, 0], [161.8, 1861], [161.9, 0], [162.0, 0], [162.1, 0], [162.2, 0], [162.3, 0], [162.4, 0], [162.5, 0], [162.6, 0], [162.7, 0], [162.8, 0], [162.9, 0], [163.0, 2043], [163.1, 0], [163.2, 0], [163.3, 0], [163.4, 0], [163.5, 0], [163.6, 0], [163.7, 0], [163.8, 0], [163.9, 0], [164.0, 0], [164.1, 0], [164.2, 0], [164.3, 0], [164.4, 0], [164.5, 0], [164.6, 0], [164.7, 0], [164.8, 0], [164.9, 1969], [165.0, 0], [165.1, 0], [165.2, 0], [165.3, 0], [165.4, 0], [165.5, 0], [165.6, 0], [165.7, 0], [165.8, 0], [165.9, 0], [166.0, 0], [166.1, 239], [166.2, 0], [166.3, 0], [166.4, 0], [166.5, 0], [166.6, 0], [166.7, 0], [166.8, 0], [166.9, 0], [167.0, 0], [167.1, 0], [167.2, 0], [167.3, 3], [167.4, 0], [167.5, 0], [167.6, 0], [167.7, 0], [167.8, 0], [167.9, 0], [168.0, 0], [168.1, 0], [168.2, 0], [168.3, 0], [168.4, 2783], [168.5, 0], [168.6, 0], [168.7, 0], [168.8, 0], [168.9, 0], [169.0, 0], [169.1, 0], [169.2, 0], [169.3, 0], [169.4, 0], [169.5, 0], [169.6, 9], [169.7, 0], [169.8, 0], [169.9, 0], [170.0, 0], [170.1, 0], [170.2, 0], [170.3, 0], [170.4, 0], [170.5, 0], [170.6, 0], [170.7, 2032], [170.8, 0], [170.9, 0], [171.0, 0], [171.1, 0], [171.2, 0], [171.3, 0], [171.4, 0], [171.5, 0], [171.6, 0], [171.7, 0], [171.8, 0], [171.9, 2220], [172.0, 0], [172.1, 0], [172.2, 0], [172.3, 0], [172.4, 0], [172.5, 0], [172.6, 0], [172.7, 0], [172.8, 0], [172.9, 0], [173.0, 0], [173.1, 0], [173.2, 0], [173.3, 0], [173.4, 0], [173.5, 0], [173.6, 0], [173.7, 0], [173.8, 0], [173.9, 2073], [174.0, 0], [174.1, 0], [174.2, 0], [174.3, 0], [174.4, 0], [174.5, 0], [174.6, 0], [174.7, 0], [174.8, 0], [174.9, 0], [175.0, 406], [175.1, 0], [175.2, 0], [175.3, 0], [175.4, 0], [175.5, 0], [175.6, 0], [175.7, 0], [175.8, 0], [175.9, 0], [176.0, 0], [176.1, 0], [176.2, 0], [176.3, 4], [176.4, 0], [176.5, 0], [176.6, 0], [176.7, 0], [176.8, 0], [176.9, 0], [177.0, 0], [177.1, 0], [177.2, 0], [177.3, 0], [177.4, 0], [177.5, 0], [177.6, 3002], [177.7, 0], [177.8, 0], [177.9, 0], [178.0, 0], [178.1, 0], [178.2, 0], [178.3, 0], [178.4, 0], [178.5, 0], [178.6, 0], [178.7, 0], [178.8, 12], [178.9, 0], [179.0, 0], [179.1, 0], [179.2, 0], [179.3, 0], [179.4, 0], [179.5, 0], [179.6, 0], [179.7, 0], [179.8, 0], [179.9, 0], [180.0, 2217], [180.1, 0], [180.2, 0], [180.3, 0], [180.4, 0], [180.5, 0], [180.6, 0], [180.7, 0], [180.8, 0], [180.9, 0], [181.0, 0], [181.1, 0], [181.2, 2328], [181.3, 0], [181.4, 0], [181.5, 0], [181.6, 0], [181.7, 0], [181.8, 0], [181.9, 0], [182.0, 0], [182.1, 0], [182.2, 0], [182.3, 0], [182.4, 0], [182.5, 0], [182.6, 0], [182.7, 0], [182.8, 0], [182.9, 0], [183.0, 0], [183.1, 2233], [183.2, 0], [183.3, 0], [183.4, 0], [183.5, 0], [183.6, 0], [183.7, 0], [183.8, 0], [183.9, 0], [184.0, 0], [184.1, 0], [184.2, 618], [184.3, 0], [184.4, 0], [184.5, 0], [184.6, 0], [184.7, 0], [184.8, 0], [184.9, 0], [185.0, 0], [185.1, 0], [185.2, 0], [185.3, 0], [185.4, 4], [185.5, 0], [185.6, 0], [185.7, 0], [185.8, 0], [185.9, 0], [186.0, 0], [186.1, 0], [186.2, 0], [186.3, 0], [186.4, 0], [186.5, 0], [186.6, 2871], [186.7, 0], [186.8, 0], [186.9, 0], [187.0, 0], [187.1, 0], [187.2, 0], [187.3, 0], [187.4, 0], [187.5, 0], [187.6, 0], [187.7, 0], [187.8, 11], [187.9, 0], [188.0, 0], [188.1, 0], [188.2, 0], [188.3, 0], [188.4, 0], [188.5, 0], [188.6, 0], [188.7, 0], [188.8, 0], [188.9, 2299], [189.0, 0], [189.1, 0], [189.2, 0], [189.3, 0], [189.4, 0], [189.5, 0], [189.6, 0], [189.7, 0], [189.8, 0], [189.9, 0], [190.0, 2340], [190.1, 0], [190.2, 0], [190.3, 0], [190.4, 0], [190.5, 0], [190.6, 0], [190.7, 0], [190.8, 0], [190.9, 0], [191.0, 0], [191.1, 0], [191.2, 0], [191.3, 0], [191.4, 0], [191.5, 0], [191.6, 0], [191.7, 0], [191.8, 0], [191.9, 0], [192.0, 0], [192.1, 0], [192.2, 0], [192.3, 0], [192.4, 0], [192.5, 0], [192.6, 0], [192.7, 0], [192.8, 0], [192.9, 0], [193.0, 0], [193.1, 0], [193.2, 0]]
demo/routing/crossbar/take-01/record-start.jsonadded+31@@ -0,0 +1,31 @@+{+ "_hint": "Native window recording (WGC): background-capturable, no picker. Stop with desktop_record_stop {recordingId}; pull the MP4 with pull_file.",+ "audio": false,+ "audioNote": null,+ "audioRate": 0,+ "codec": "h264",+ "durationMs": 663,+ "encoder": "NVIDIA H.264 Encoder MFT",+ "error": "",+ "fps": 30,+ "hardwareEncoder": true,+ "height": 1540,+ "hwnd": 8916576,+ "kind": "window",+ "maxDurationMs": 600000,+ "path": "C:/Users/john/AppData/Local/Temp/adom-bridge-recordings/window-8916576-20260905-213451.mp4",+ "recordingId": "rec-82c3309937024e1b90b9a253e8af200b",+ "status": "ok",+ "success": true,+ "timeoutSeconds": 15,+ "title": "fusion-crossbar-24* (jlauerhub) - Autodesk Fusion (Trial ends in 16 days) ",+ "width": 2564,+ "data": {+ "height": 1540,+ "kind": "window",+ "path": "C:\\Users\\john\\AppData\\Local\\Temp\\adom-bridge-recordings\\window-8916576-20260905-213451.mp4",+ "recordingId": "rec-82c3309937024e1b90b9a253e8af200b",+ "width": 2564+ },+ "message": "Recording window \"fusion-crossbar-24* (jlauerhub) - Autodesk Fusion (Trial ends in 16 days) \" -> C:\\Users\\john\\AppData\\Local\\Temp\\adom-bridge-recordings\\window-8916576-20260905-213451.mp4 (2564x1540 @ 30fps h264)"+}
demo/routing/crossbar/take-01/record-stop.jsonadded+28@@ -0,0 +1,28 @@+{+ "_hint": "The MP4 is finalized (moov written). pull_file {path} brings it to the caller; the janitor prunes the recordings dir by age/size, so pull it promptly.",+ "audio": false,+ "audioFrames": 0,+ "autoStopped": false,+ "bytes": 284769737,+ "durationMs": 477,+ "elapsedMs": 206642,+ "error": "",+ "fileExists": true,+ "frames": 5800,+ "height": 1540,+ "kind": "window",+ "path": "C:/Users/john/AppData/Local/Temp/adom-bridge-recordings/window-8916576-20260905-213451.mp4",+ "recordingId": "rec-82c3309937024e1b90b9a253e8af200b",+ "status": "ok",+ "success": true,+ "timeoutSeconds": 30,+ "width": 2564,+ "data": {+ "bytes": 284769737,+ "elapsedMs": 206642,+ "frames": 5800,+ "path": "C:\\Users\\john\\AppData\\Local\\Temp\\adom-bridge-recordings\\window-8916576-20260905-213451.mp4",+ "recordingId": "rec-82c3309937024e1b90b9a253e8af200b"+ },+ "message": "Stopped recording rec-82c3309937024e1b90b9a253e8af200b: 5800 frames, 206642 ms, 284769737 bytes -> C:\\Users\\john\\AppData\\Local\\Temp\\adom-bridge-recordings\\window-8916576-20260905-213451.mp4"+}
demo/routing/crossbar/video-verification.jsonadded+34@@ -0,0 +1,34 @@+{+ "fullDecodePassed": true,+ "expectedDurationSeconds": 41.65555555555556,+ "actualDurationSeconds": 41.666667,+ "sourceConstant30FpsVerified": true,+ "selectedSourceFrames": 3299,+ "speed": 3,+ "holdSeconds": 5,+ "output": {+ "programs": [],+ "streams": [+ {+ "width": 1920,+ "height": 1080,+ "pix_fmt": "yuv420p",+ "r_frame_rate": "30/1",+ "nb_frames": "1250"+ }+ ],+ "format": {+ "duration": "41.666667",+ "size": "1568684"+ }+ },+ "verifiedCopperMutations": 168,+ "continuousRevisionChain": true,+ "visualReview": {+ "initialUnroutedFrame": true,+ "sequentialProgression": true,+ "captionTransitions": true,+ "finalCopperAndErrorsZero": true+ },+ "sha256": "f1ae07c26c2dbf91541ba71a97f4470018798170104fc375fe0d86c101972077"+}
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "fusion-bridge",- "version": "1.10.0-dev.routing.1",+ "version": "1.10.0-dev.routing.2", "type": "app", "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.", "dependencies": {
rust/Cargo.lock+5−5@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "adom-fusion-bridge"-version = "1.10.0-dev.routing.1"+version = "1.10.0-dev.routing.2" dependencies = [ "base64", "chrono",@@ -273,7 +273,7 @@ dependencies = [ [[package]] name = "fusion-core"-version = "1.10.0-dev.routing.1"+version = "1.10.0-dev.routing.2" dependencies = [ "serde", "serde_json",@@ -283,7 +283,7 @@ dependencies = [ [[package]] name = "fusion-lbr"-version = "1.10.0-dev.routing.1"+version = "1.10.0-dev.routing.2" dependencies = [ "regex", "roxmltree",@@ -295,14 +295,14 @@ dependencies = [ [[package]] name = "fusion-os-mac"-version = "1.10.0-dev.routing.1"+version = "1.10.0-dev.routing.2" dependencies = [ "fusion-core", ] [[package]] name = "fusion-os-win"-version = "1.10.0-dev.routing.1"+version = "1.10.0-dev.routing.2" dependencies = [ "fusion-core", "windows-sys 0.59.0",
rust/Cargo.toml+1−1@@ -4,7 +4,7 @@ members = ["core", "lbr", "os-win", "os-mac", "bridge"] # One version for the whole bridge, in lockstep with BRIDGE_VERSION (tools/release.sh bumps both). [workspace.package]-version = "1.10.0-dev.routing.1"+version = "1.10.0-dev.routing.2" edition = "2021" license = "MIT"
rust/bridge/src/routing_script.py+9@@ -187,6 +187,15 @@ def plan(board,args): if outgoing!=current: planned.append({'kind':'via','net':net,'at':xy,'diameter':dia,'drill':drill,'extent':'1-16'}) current=outgoing; previous=xy+ # Multiple branches can name the same layer transition. Emit one physical via.+ unique=[]; seen_vias=set()+ for item in planned:+ if item['kind']=='via':+ key=(tuple(item['at']),item['diameter'],item['drill'],item['extent'])+ if key in seen_vias: continue+ seen_vias.add(key)+ unique.append(item)+ planned=unique if not planned or len(planned)>512: fail('invalid_path','Need 1..512 nonzero copper items') def rule(name,default): node=board.find("designrules/param[@name='%s']"%name)
skills/fusion-routing/SKILL.md+3@@ -31,3 +31,6 @@ approved ones. Require `drc.checked`, `drc.clean`, and no remaining nets before claiming a connected, DRC-clean result. Save/export the final board separately. See `demo/routing/README.md` for the tested scope, fixture, recorder and evidence.++For the 24-net crossover, see `demo/routing/crossbar/README.md`. Identical+via transitions shared by branches of one request produce one planned via.
tests/test_routing.py+17@@ -22,6 +22,23 @@ class RoutingTests(unittest.TestCase): self.assertGreater(len(p['items']),0) if a['net']=='NET_3':self.assertEqual(2,sum(x['kind']=='via' for x in p['items'])) if a['net']=='NET_6':self.assertEqual(5,len(p['items']))+ def test_crossbar_all_nets_and_shared_vias(self):+ import json+ board=ET.parse(ROOT/'demo/routing/crossbar/fusion-crossbar-24.brd').find('drawing/board')+ totals={'segment':0,'via':0}+ for args in json.loads((ROOT/'demo/routing/crossbar/plan.json').read_text()):+ plan=r.plan(board,args)+ self.assertEqual(2,sum(i['kind']=='via' for i in plan['items']))+ self.assertEqual(5,sum(i['kind']=='segment' for i in plan['items']))+ signal=board.find("signals/signal[@name='%s']"%args['net'])+ for item in plan['items']:+ totals[item['kind']]+=1+ if item['kind']=='segment':+ ET.SubElement(signal,'wire',x1=str(item['start'][0]),y1=str(item['start'][1]),x2=str(item['end'][0]),y2=str(item['end'][1]),width=str(item['width']),layer=str(item['layer']))+ else:+ ET.SubElement(signal,'via',x=str(item['at'][0]),y=str(item['at'][1]),diameter=str(item['diameter']),drill=str(item['drill']),extent=item['extent'])+ self.assertEqual({'segment':120,'via':48},totals)+ def test_wrong_net_pad(self): self.args['points'][0]={'pad':'J1.2'};self.rejected('net_mismatch') def test_injected_command(self):
tools/install-routing-dev.ps1+1−1@@ -1,7 +1,7 @@ param( [Parameter(Mandatory=$true)][string]$Cache, [Parameter(Mandatory=$true)][string]$Staged,- [string]$Version='1.10.0-dev.routing.1'+ [string]$Version='1.10.0-dev.routing.2' ) $ErrorActionPreference='Stop' if (!(Test-Path "$cache/.dev-pin")) { throw 'Fusion bridge is not dev-pinned' }