@tscircuit/schematic-trace-solver 0.0.193 → 0.0.195

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -13070,7 +13070,8 @@ var getOuterBounds = (obstacles) => {
13070
13070
  };
13071
13071
  var getPinConnectionCandidates = ({
13072
13072
  connectionPair,
13073
- obstacles
13073
+ obstacles,
13074
+ channelObstacles = obstacles
13074
13075
  }) => {
13075
13076
  const [firstPin, secondPin] = connectionPair.pins;
13076
13077
  const firstEscapePoint = getEscapePoint({
@@ -13085,7 +13086,7 @@ var getPinConnectionCandidates = ({
13085
13086
  const horizontalChannels = [
13086
13087
  outerBounds.minY - ROUTE_CLEARANCE,
13087
13088
  outerBounds.maxY + ROUTE_CLEARANCE,
13088
- ...obstacles.flatMap((obstacle) => [
13089
+ ...channelObstacles.flatMap((obstacle) => [
13089
13090
  obstacle.minY - ROUTE_CLEARANCE,
13090
13091
  obstacle.maxY + ROUTE_CLEARANCE
13091
13092
  ])
@@ -13093,7 +13094,7 @@ var getPinConnectionCandidates = ({
13093
13094
  const verticalChannels = [
13094
13095
  outerBounds.minX - ROUTE_CLEARANCE,
13095
13096
  outerBounds.maxX + ROUTE_CLEARANCE,
13096
- ...obstacles.flatMap((obstacle) => [
13097
+ ...channelObstacles.flatMap((obstacle) => [
13097
13098
  obstacle.minX - ROUTE_CLEARANCE,
13098
13099
  obstacle.maxX + ROUTE_CLEARANCE
13099
13100
  ])
@@ -13426,14 +13427,21 @@ var UnroutedTraceRecoverySolver = class extends BaseSolver {
13426
13427
  });
13427
13428
  const pinConnectionCandidates = getPinConnectionCandidates({
13428
13429
  connectionPair,
13429
- obstacles
13430
+ obstacles,
13431
+ channelObstacles: []
13430
13432
  });
13431
- const candidates = [...junctionCandidates, ...pinConnectionCandidates];
13433
+ const candidates = [...junctionCandidates, ...pinConnectionCandidates].sort(
13434
+ (firstPath, secondPath) => getPathLength5(firstPath) - getPathLength5(secondPath)
13435
+ );
13432
13436
  const rejectComponentBoundaryTravel = hasParallelFailedConnection({
13433
13437
  connectionPair,
13434
13438
  failedConnectionPairs: this.failedConnectionPairs
13435
13439
  });
13440
+ let recoveredPath;
13436
13441
  for (const tracePath of candidates) {
13442
+ if (recoveredPath && getPathLength5(tracePath) >= getPathLength5(recoveredPath)) {
13443
+ continue;
13444
+ }
13437
13445
  if (pathCollidesWithObstacles({
13438
13446
  path: tracePath,
13439
13447
  obstacles,
@@ -13449,13 +13457,20 @@ var UnroutedTraceRecoverySolver = class extends BaseSolver {
13449
13457
  })) {
13450
13458
  continue;
13451
13459
  }
13460
+ if (!recoveredPath) {
13461
+ candidates.push(
13462
+ ...getPinConnectionCandidates({ connectionPair, obstacles })
13463
+ );
13464
+ }
13465
+ recoveredPath = tracePath;
13466
+ }
13467
+ if (recoveredPath) {
13452
13468
  this.solvedUnroutedTraces.push({
13453
13469
  ...connectionPair,
13454
- tracePath,
13470
+ tracePath: recoveredPath,
13455
13471
  mspConnectionPairIds: [connectionPair.mspPairId],
13456
13472
  pinIds: connectionPair.pins.map((pin) => pin.pinId)
13457
13473
  });
13458
- return;
13459
13474
  }
13460
13475
  }
13461
13476
  getOutput() {
@@ -90,9 +90,11 @@ const getOuterBounds = (obstacles: ObstacleRect[]) => {
90
90
  const getPinConnectionCandidates = ({
91
91
  connectionPair,
92
92
  obstacles,
93
+ channelObstacles = obstacles,
93
94
  }: {
94
95
  connectionPair: MspConnectionPair
95
96
  obstacles: ObstacleRect[]
97
+ channelObstacles?: ObstacleRect[]
96
98
  }): Point[][] => {
97
99
  const [firstPin, secondPin] = connectionPair.pins
98
100
  const firstEscapePoint = getEscapePoint({
@@ -107,7 +109,7 @@ const getPinConnectionCandidates = ({
107
109
  const horizontalChannels = [
108
110
  outerBounds.minY - ROUTE_CLEARANCE,
109
111
  outerBounds.maxY + ROUTE_CLEARANCE,
110
- ...obstacles.flatMap((obstacle) => [
112
+ ...channelObstacles.flatMap((obstacle) => [
111
113
  obstacle.minY - ROUTE_CLEARANCE,
112
114
  obstacle.maxY + ROUTE_CLEARANCE,
113
115
  ]),
@@ -115,7 +117,7 @@ const getPinConnectionCandidates = ({
115
117
  const verticalChannels = [
116
118
  outerBounds.minX - ROUTE_CLEARANCE,
117
119
  outerBounds.maxX + ROUTE_CLEARANCE,
118
- ...obstacles.flatMap((obstacle) => [
120
+ ...channelObstacles.flatMap((obstacle) => [
119
121
  obstacle.minX - ROUTE_CLEARANCE,
120
122
  obstacle.maxX + ROUTE_CLEARANCE,
121
123
  ]),
@@ -545,14 +547,25 @@ export class UnroutedTraceRecoverySolver extends BaseSolver {
545
547
  const pinConnectionCandidates = getPinConnectionCandidates({
546
548
  connectionPair,
547
549
  obstacles,
550
+ channelObstacles: [],
548
551
  })
549
- const candidates = [...junctionCandidates, ...pinConnectionCandidates]
552
+ const candidates = [...junctionCandidates, ...pinConnectionCandidates].sort(
553
+ (firstPath, secondPath) =>
554
+ getPathLength(firstPath) - getPathLength(secondPath),
555
+ )
550
556
  const rejectComponentBoundaryTravel = hasParallelFailedConnection({
551
557
  connectionPair,
552
558
  failedConnectionPairs: this.failedConnectionPairs,
553
559
  })
554
560
 
561
+ let recoveredPath: Point[] | undefined
555
562
  for (const tracePath of candidates) {
563
+ if (
564
+ recoveredPath &&
565
+ getPathLength(tracePath) >= getPathLength(recoveredPath)
566
+ ) {
567
+ continue
568
+ }
556
569
  if (
557
570
  pathCollidesWithObstacles({
558
571
  path: tracePath,
@@ -572,13 +585,21 @@ export class UnroutedTraceRecoverySolver extends BaseSolver {
572
585
  ) {
573
586
  continue
574
587
  }
588
+ if (!recoveredPath) {
589
+ // Local channels shorten valid routes without recovering new connections.
590
+ candidates.push(
591
+ ...getPinConnectionCandidates({ connectionPair, obstacles }),
592
+ )
593
+ }
594
+ recoveredPath = tracePath
595
+ }
596
+ if (recoveredPath) {
575
597
  this.solvedUnroutedTraces.push({
576
598
  ...connectionPair,
577
- tracePath,
599
+ tracePath: recoveredPath,
578
600
  mspConnectionPairIds: [connectionPair.mspPairId],
579
601
  pinIds: connectionPair.pins.map((pin) => pin.pinId),
580
602
  })
581
- return
582
603
  }
583
604
  }
584
605
 
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "url": "https://github.com/tscircuit/schematic-trace-solver.git"
6
6
  },
7
7
  "main": "dist/index.js",
8
- "version": "0.0.193",
8
+ "version": "0.0.195",
9
9
  "type": "module",
10
10
  "scripts": {
11
11
  "start": "cosmos",
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/repros/assets/repro-core-vertical-passive-ground-label-overlap.input.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -1,20 +1,20 @@
1
1
  <svg width="1200" height="2016" viewBox="0 0 1200 2016" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Solver debug visualization on top and Circuit JSON schematic on the bottom">
2
2
  <g transform="translate(0, 0) scale(1.875, 1.875) translate(0, 0)">
3
- <rect width="100%" height="100%" fill="white"/><g><polyline data-points="-0.4458008,0.00006220000000001225 1.1458008,1.1899378" data-type="line" data-label="" points="82.08836873900444,385.92099171420324 305.38141882696914,218.98791502638952" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.0458008,-0.08006219999999957 1.9058008000000002,1.1899378" data-type="line" data-label="" points="571.9410875073304,397.1620093548415 412.0052862991136,218.98791502638952" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.4458008,-0.08006219999999949 0.4458008,-0.00006220000000001225" data-type="line" data-label="" points="487.7643500293216,397.1620093548415 207.1752251026255,385.9384443577737" fill="none" stroke="hsl(0, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.7458008,-0.00006219999999993796 1.9058008000000002,1.1899378" data-type="line" data-label="" points="389.55815630497796,385.9384443577737 412.0052862991136,218.98791502638952" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.1458008,-0.00006219999999986448 0.4458008,-0.00006220000000001225" data-type="line" data-label="" points="305.38141882696914,385.9384443577737 207.1752251026255,385.9384443577737" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-0.4458008,0.00006220000000001225 -0.6458008,0.00006220000000001225 -0.6458008,1.1899378 1.1458008,1.1899378" data-type="line" data-label="" points="82.08836873900444,385.92099171420324 54.029456246334846,385.92099171420324 54.029456246334846,218.98791502638952 305.38141882696914,218.98791502638952" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.9058008000000002,1.1899378 2.1058008000000004,1.1899378 2.1058008000000004,-0.00006219999999993796 1.7458008,-0.00006219999999993796" data-type="line" data-label="" points="412.0052862991136,218.98791502638952 440.06419879178327,218.98791502638952 440.06419879178327,385.9384443577737 389.55815630497796,385.9384443577737" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1458008,-0.00006219999999986448 0.4458008,-0.00006220000000001225" data-type="line" data-label="" points="305.38141882696914,385.9384443577737 207.1752251026255,385.9384443577737" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.0458008,-0.08006219999999957 3.2458008,-0.08006219999999957 3.2458008,0.5949378000000001 2.1058008000000004,0.5949378000000001" data-type="line" data-label="" points="571.9410875073304,397.1620093548415 600,397.1620093548415 600,302.4631796920816 440.06419879178327,302.4631796920816" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="2.4458008,-0.08006219999999949 2.2458008,-0.08006219999999949 2.2458008,-0.7000621999999994 0.7958008,-0.7000621999999994 0.7958008,-0.00006219999999993836" data-type="line" data-label="" points="487.7643500293216,397.1620093548415 459.70543753665197,397.1620093548415 459.70543753665197,484.14463808211724 256.27832196479727,484.14463808211724 256.27832196479727,385.9384443577737" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="82.08836873900444" y="323.3059010698864" width="125.08685636362105" height="125.24763393220417" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="1.5258008" data-y="1.1899378" x="305.38141882696914" y="183.9142744105525" width="106.62386747214447" height="70.14728123167401" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="2.7458008" data-y="-0.0800621999999995" x="487.7643500293216" y="338.2382931202353" width="84.17673747800882" height="117.84743246921232" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="1.4458008" data-y="-0.00006219999999990122" x="305.38141882696914" y="338.2382931202353" width="84.17673747800882" height="95.40030247507667" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="netId: VS1.1 to SW1.1
4
- globalConnNetId: connectivity_net0" data-x="-0.6458008" data-y="-0.2249378" x="40.00000000000004" y="385.92099171420324" width="28.058912492669606" height="63.13255310850661" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="netId: .R1 &gt; .pin2 to VS1.2
5
- globalConnNetId: connectivity_net2" data-x="0.7958008" data-y="0.22493780000000008" x="242.24886571846247" y="322.80589124926706" width="28.058912492669577" height="63.13255310850661" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="netId: .R1 &gt; .pin1 to SW1.2
6
- globalConnNetId: connectivity_net1" data-x="2.1058008000000004" data-y="1.4149378000000001" x="426.03474254544847" y="155.85536191788287" width="28.058912492669606" height="63.13255310850664" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.007127860000000001"/></g><g><circle data-type="point" data-label="VS1.1
7
- x-" data-x="-0.4458008" data-y="0.00006220000000001225" cx="82.08836873900444" cy="385.92099171420324" r="3" fill="hsl(103, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="VS1.2
8
- x+" data-x="0.4458008" data-y="-0.00006220000000001225" cx="207.1752251026255" cy="385.9384443577737" r="3" fill="hsl(104, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="SW1.1
9
- x-" data-x="1.1458008" data-y="1.1899378" cx="305.38141882696914" cy="218.98791502638952" r="3" fill="hsl(104, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="SW1.2
10
- x+" data-x="1.9058008000000002" data-y="1.1899378" cx="412.0052862991136" cy="218.98791502638952" r="3" fill="hsl(105, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C1.1
11
- x+" data-x="3.0458008" data-y="-0.08006219999999957" cx="571.9410875073304" cy="397.1620093548415" r="3" fill="hsl(121, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C1.2
12
- x-" data-x="2.4458008" data-y="-0.08006219999999949" cx="487.7643500293216" cy="397.1620093548415" r="3" fill="hsl(122, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R1.1
13
- x+" data-x="1.7458008" data-y="-0.00006219999999993796" cx="389.55815630497796" cy="385.9384443577737" r="3" fill="hsl(226, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R1.2
14
- x-" data-x="1.1458008" data-y="-0.00006219999999986448" cx="305.38141882696914" cy="385.9384443577737" r="3" fill="hsl(227, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
15
- orientation: y-" data-x="-0.6458008" data-y="0.00006220000000001225" cx="54.029456246334846" cy="385.92099171420324" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
16
- orientation: y+" data-x="0.7958008" data-y="-0.00006219999999993836" cx="256.27832196479727" cy="385.9384443577737" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
17
- orientation: y+" data-x="2.1058008000000004" data-y="1.1899378" cx="440.06419879178327" cy="218.98791502638952" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
3
+ <rect width="100%" height="100%" fill="white"/><g><polyline data-points="-0.4458008,0.00006220000000001225 1.1458008,1.1899378" data-type="line" data-label="" points="82.08836873900444,397.144556711271 305.38141882696914,230.21148002345726" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.0458008,-0.08006219999999957 1.9058008000000002,1.1899378" data-type="line" data-label="" points="571.9410875073304,408.3855743519092 412.0052862991136,230.21148002345726" fill="none" stroke="hsl(16, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="2.4458008,-0.08006219999999949 0.4458008,-0.00006220000000001225" data-type="line" data-label="" points="487.7643500293216,408.3855743519092 207.1752251026255,397.1620093548414" fill="none" stroke="hsl(0, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.7458008,-0.00006219999999993796 1.9058008000000002,1.1899378" data-type="line" data-label="" points="389.55815630497796,397.1620093548414 412.0052862991136,230.21148002345726" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="1.1458008,-0.00006219999999986448 0.4458008,-0.00006220000000001225" data-type="line" data-label="" points="305.38141882696914,397.1620093548414 207.1752251026255,397.1620093548414" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-0.4458008,0.00006220000000001225 -0.6458008,0.00006220000000001225 -0.6458008,1.1899378 1.1458008,1.1899378" data-type="line" data-label="" points="82.08836873900444,397.144556711271 54.029456246334846,397.144556711271 54.029456246334846,230.21148002345726 305.38141882696914,230.21148002345726" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.9058008000000002,1.1899378 2.1058008000000004,1.1899378 2.1058008000000004,-0.00006219999999993796 1.7458008,-0.00006219999999993796" data-type="line" data-label="" points="412.0052862991136,230.21148002345726 440.06419879178327,230.21148002345726 440.06419879178327,397.1620093548414 389.55815630497796,397.1620093548414" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.1458008,-0.00006219999999986448 0.4458008,-0.00006220000000001225" data-type="line" data-label="" points="305.38141882696914,397.1620093548414 207.1752251026255,397.1620093548414" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.0458008,-0.08006219999999957 3.2458008,-0.08006219999999957 3.2458008,0.5949378000000001 2.1058008000000004,0.5949378000000001" data-type="line" data-label="" points="571.9410875073304,408.3855743519092 600,408.3855743519092 600,313.68674468914935 440.06419879178327,313.68674468914935" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="0.9458008,-0.00006219999999986448 0.9458008,-0.5400621999999999 2.2458008,-0.5400621999999999 2.2458008,-0.08006219999999949 2.4458008,-0.08006219999999949" data-type="line" data-label="" points="277.32250633429953,397.1620093548414 277.32250633429953,472.92107308504933 459.70543753665197,472.92107308504933 459.70543753665197,408.3855743519092 487.7643500293216,408.3855743519092" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="82.08836873900444" y="334.5294660669541" width="125.08685636362105" height="125.24763393220417" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="1.5258008" data-y="1.1899378" x="305.38141882696914" y="195.13783940762022" width="106.62386747214447" height="70.14728123167404" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="2.7458008" data-y="-0.0800621999999995" x="487.7643500293216" y="349.46185811730305" width="84.17673747800882" height="117.84743246921232" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="1.4458008" data-y="-0.00006219999999990122" x="305.38141882696914" y="349.4618581173031" width="84.17673747800882" height="95.40030247507661" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="netId: VS1.1 to SW1.1
4
+ globalConnNetId: connectivity_net0" data-x="-0.6458008" data-y="-0.2249378" x="40.00000000000004" y="397.144556711271" width="28.058912492669606" height="63.13255310850661" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="netId: .R1 &gt; .pin2 to VS1.2
5
+ globalConnNetId: connectivity_net2" data-x="0.7958008" data-y="0.22493780000000008" x="242.24886571846247" y="334.0294562463348" width="28.058912492669577" height="63.13255310850661" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.007127860000000001"/></g><g><rect data-type="rect" data-label="netId: .R1 &gt; .pin1 to SW1.2
6
+ globalConnNetId: connectivity_net1" data-x="2.1058008000000004" data-y="1.4149378000000001" x="426.03474254544847" y="167.0789269149506" width="28.058912492669606" height="63.13255310850664" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.007127860000000001"/></g><g><circle data-type="point" data-label="VS1.1
7
+ x-" data-x="-0.4458008" data-y="0.00006220000000001225" cx="82.08836873900444" cy="397.144556711271" r="3" fill="hsl(103, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="VS1.2
8
+ x+" data-x="0.4458008" data-y="-0.00006220000000001225" cx="207.1752251026255" cy="397.1620093548414" r="3" fill="hsl(104, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="SW1.1
9
+ x-" data-x="1.1458008" data-y="1.1899378" cx="305.38141882696914" cy="230.21148002345726" r="3" fill="hsl(104, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="SW1.2
10
+ x+" data-x="1.9058008000000002" data-y="1.1899378" cx="412.0052862991136" cy="230.21148002345726" r="3" fill="hsl(105, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C1.1
11
+ x+" data-x="3.0458008" data-y="-0.08006219999999957" cx="571.9410875073304" cy="408.3855743519092" r="3" fill="hsl(121, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="C1.2
12
+ x-" data-x="2.4458008" data-y="-0.08006219999999949" cx="487.7643500293216" cy="408.3855743519092" r="3" fill="hsl(122, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R1.1
13
+ x+" data-x="1.7458008" data-y="-0.00006219999999993796" cx="389.55815630497796" cy="397.1620093548414" r="3" fill="hsl(226, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R1.2
14
+ x-" data-x="1.1458008" data-y="-0.00006219999999986448" cx="305.38141882696914" cy="397.1620093548414" r="3" fill="hsl(227, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
15
+ orientation: y-" data-x="-0.6458008" data-y="0.00006220000000001225" cx="54.029456246334846" cy="397.144556711271" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
16
+ orientation: y+" data-x="0.7958008" data-y="-0.00006219999999993836" cx="256.27832196479727" cy="397.1620093548414" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
17
+ orientation: y+" data-x="2.1058008000000004" data-y="1.1899378" cx="440.06419879178327" cy="230.21148002345726" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
18
18
  document.currentScript.parentElement.addEventListener('mousemove', (e) => {
19
19
  const svg = e.currentTarget;
20
20
  const rect = svg.getBoundingClientRect();
@@ -36,7 +36,7 @@ orientation: y+" data-x="2.1058008000000004" data-y="1.1899378" cx="440.06419879
36
36
  v.setAttribute('y2', '640');
37
37
 
38
38
  // Calculate real coordinates using inverse transformation
39
- const matrix = {"a":140.29456246334803,"c":0,"e":144.63179692081496,"b":0,"d":-140.29456246334803,"f":385.92971803598846};
39
+ const matrix = {"a":140.29456246334803,"c":0,"e":144.63179692081496,"b":0,"d":-140.29456246334803,"f":397.1532830330562};
40
40
  // Manually invert and apply the affine transform
41
41
  // Since we only use translate and scale, we can directly compute:
42
42
  // x' = (x - tx) / sx
@@ -71,27 +71,27 @@ orientation: y+" data-x="2.1058008000000004" data-y="1.1899378" cx="440.06419879
71
71
  .port-label { fill: rgb(0, 100, 100); }
72
72
  .component-name { fill: rgb(0, 100, 100); }
73
73
 
74
- </style><rect class="boundary" x="0" y="0" width="1200" height="800"/><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><path d="M 190.41568060436208 499.57365929113297 L 142.81176045328206 499.57365929113297 L 142.81176045328206 216.35994403054093 L 569.2480579980179 216.35994403054093" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="38.083136120864005px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 190.41568060436208 499.57365929113297 L 142.81176045328206 499.57365929113297 L 142.81176045328206 216.35994403054093 L 569.2480579980179 216.35994403054093" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"><path d="M 750.142954572122 216.35994403054093 L 797.7468747232019 216.35994403054093 L 797.7468747232019 499.60326892946694 L 712.0598184512579 499.60326892946694" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="38.083136120864005px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 750.142954572122 216.35994403054093 L 797.7468747232019 216.35994403054093 L 797.7468747232019 499.60326892946694 L 712.0598184512579 499.60326892946694" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"><path d="M 569.2480579980179 499.60326892946694 L 402.6343374692379 499.603268929467" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="38.083136120864005px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 569.2480579980179 499.60326892946694 L 402.6343374692379 499.603268929467" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"><path d="M 1021.485299433278 518.6448369898989 L 1069.089219584358 518.6448369898989 L 1069.089219584358 357.98160648000396 L 797.7468747232019 357.98160648000396" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="38.083136120864005px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 1021.485299433278 518.6448369898989 L 1069.089219584358 518.6448369898989 L 1069.089219584358 357.98160648000396 L 797.7468747232019 357.98160648000396" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"><path d="M 878.6735389800381 518.6448369898989 L 831.069618828958 518.6448369898989 L 831.069618828958 666.2169894582469 L 485.9411977336279 666.2169894582469 L 485.9411977336279 499.60326892946694" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="38.083136120864005px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 878.6735389800381 518.6448369898989 L 831.069618828958 518.6448369898989 L 831.069618828958 666.2169894582469 L 485.9411977336279 666.2169894582469 L 485.9411977336279 499.60326892946694" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component-overlay sch-component-overlay" x="190.41568060436208" y="479.924625740144" width="212.20956235068138" height="51.08748723257139" fill="transparent"/><path class="sch-component-symbol-path" d="M 190.41568060436208 499.573659291133 L 237.57336112673573 497.60875593603413" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 353.5026590775709 497.60875593603413 L 402.62524295504346 497.60875593603413" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 316.1694953306918 479.924625740144 L 296.52046177970277 517.2577894870232 L 274.90652487361484 479.924625740144" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 296.52046177970277 531.0121129727154 L 310.27478526539505 527.0823062625176" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 310.27478526539505 527.0823062625176 L 324.0291087510874 531.0121129727154" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 267.04691145321925 531.0121129727154 L 282.7661382940105 527.0823062625176" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 282.7661382940105 527.0823062625176 L 296.52046177970277 531.0121129727154" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="296.52046177970277" y="425.0143502586103" stroke="rgb(245, 241, 237)" stroke-width="4.760392015108001px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="42.843528135972px">VS1</text><text class="sch-component-text" x="296.52046177970277" y="585.9223884542491" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="42.843528135972px"></text><circle class="sch-component-symbol-circle" cx="296.52046177970277" cy="497.60875593603413" r="69.025684219066px" stroke-width="4.760392015108001px" fill="none" stroke="rgb(132, 0, 0)"/></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_1__stack1"><rect class="component-overlay sch-component-overlay" x="569.2480579980179" y="183.03719992478491" width="180.894896574104" height="35.70294011331001" fill="transparent"/><path class="sch-component-symbol-path" d="M 569.2480579980179 216.35994403054093 L 631.1331541944219 218.74014003809492" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 643.0341342321918 213.97974802298694 L 683.4974663606099 183.03719992478491" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 688.2578583757179 218.74014003809492 L 750.1429545721219 216.35994403054093" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="659.6955062850699" y="156.85504384169093" stroke="rgb(245, 241, 237)" stroke-width="4.760392015108001px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="42.843528135972px">SW1</text><text class="sch-component-text" x="659.6955062850699" y="275.86484421939093" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="42.843528135972px"></text><circle class="sch-component-symbol-circle" cx="683.4974663606099" cy="216.35994403054093" r="4.760392015108001px" stroke-width="4.760392015108001px" fill="none" stroke="rgb(132, 0, 0)"/><circle class="sch-component-symbol-circle" cx="635.8935462095299" cy="216.35994403054093" r="4.760392015108001px" stroke-width="4.760392015108001px" fill="none" stroke="rgb(132, 0, 0)"/></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component-overlay sch-component-overlay" x="878.6735389800381" y="480.5569404770198" width="142.8117604532399" height="76.17579302575814" fill="transparent"/><path class="sch-component-symbol-path" d="M 1021.485299433278 518.6448369898989 L 964.360595251982 518.6448369898989" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 935.7982431613341 518.6448369898989 L 878.6735389800381 518.6448369898989" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 964.360595251982 480.5569404770198 L 964.360595251982 556.7327335027779" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 935.7982431613341 480.5569404770198 L 935.7982431613341 556.7327335027779" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="950.079419206658" y="461.5201328086029" stroke="rgb(245, 241, 237)" stroke-width="4.760392015108001px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="42.843528135972px">C1</text><text class="sch-component-text" x="950.079419206658" y="575.7695411711949" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="42.843528135972px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_3__stack1"><rect class="component-overlay sch-component-overlay" x="569.2480579980179" y="480.56646126105005" width="142.8117604532399" height="38.073615336833825" fill="transparent"/><path class="sch-component-symbol-path" d="M 712.0598184512578 499.60326892946694 L 688.2530979837028 499.60326892946694" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 593.0547784655729 499.60326892946694 L 569.2480579980179 499.60326892946694" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 688.2530979837028 518.6400765978839 L 593.0547784655729 518.6400765978839 L 593.0547784655729 480.56646126105005 L 688.2530979837028 480.56646126105005 L 688.2530979837028 518.6400765978839" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="640.6539382246378" y="461.5201328086029" stroke="rgb(245, 241, 237)" stroke-width="4.760392015108001px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="42.843528135972px">R1</text><text class="sch-component-text" x="640.6539382246378" y="537.6864050503309" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="42.843528135972px"></text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="167.98987737178675" cy="498.3277813337677" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="380.20853423666256" cy="498.35739097210165" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="569.2480579980179" cy="216.35994403054093" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="750.142954572122" cy="216.35994403054093" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="1021.485299433278" cy="518.6448369898989" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="878.6735389800381" cy="518.6448369898989" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_0__stack1"><circle cx="712.0598184512579" cy="499.60326892946694" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_1__stack1"><circle cx="569.2480579980179" cy="499.60326892946694" r="9.520784030216001" fill="red" opacity="0"/></g><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" d="
75
- M 142.81176045328206,499.57365929113297
76
- L 166.61372052882206,512.4267177319246
77
- L 166.61372052882206,594.0515728176431
78
- L 119.00980037774207,594.0515728176431
79
- L 119.00980037774207,512.4267177319246
74
+ </style><rect class="boundary" x="0" y="0" width="1200" height="800"/><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><path d="M 190.41568060436208 518.615227351533 L 142.81176045328206 518.615227351533 L 142.81176045328206 235.40151209094097 L 569.2480579980179 235.40151209094097" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="38.083136120864005px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 190.41568060436208 518.615227351533 L 142.81176045328206 518.615227351533 L 142.81176045328206 235.40151209094097 L 569.2480579980179 235.40151209094097" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"><path d="M 750.142954572122 235.40151209094097 L 797.7468747232019 235.40151209094097 L 797.7468747232019 518.644836989867 L 712.0598184512579 518.644836989867" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="38.083136120864005px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 750.142954572122 235.40151209094097 L 797.7468747232019 235.40151209094097 L 797.7468747232019 518.644836989867 L 712.0598184512579 518.644836989867" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"><path d="M 569.2480579980179 518.6448369898669 L 402.6343374692379 518.644836989867" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="38.083136120864005px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 569.2480579980179 518.6448369898669 L 402.6343374692379 518.644836989867" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"><path d="M 1021.485299433278 537.6864050502988 L 1069.089219584358 537.6864050502988 L 1069.089219584358 377.02317454040394 L 797.7468747232019 377.02317454040394" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="38.083136120864005px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 1021.485299433278 537.6864050502988 L 1069.089219584358 537.6864050502988 L 1069.089219584358 377.02317454040394 L 797.7468747232019 377.02317454040394" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"><path d="M 521.644137846938 518.6448369898669 L 521.644137846938 647.175421397783 L 831.069618828958 647.175421397783 L 831.069618828958 537.6864050502988 L 878.6735389800381 537.6864050502988" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="38.083136120864005px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 521.644137846938 518.6448369898669 L 521.644137846938 647.175421397783 L 831.069618828958 647.175421397783 L 831.069618828958 537.6864050502988 L 878.6735389800381 537.6864050502988" stroke="rgb(0, 150, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component-overlay sch-component-overlay" x="190.41568060436208" y="498.96619380054403" width="212.20956235068138" height="51.08748723257145" fill="transparent"/><path class="sch-component-symbol-path" d="M 190.41568060436208 518.615227351533 L 237.57336112673573 516.6503239964342" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 353.5026590775709 516.6503239964342 L 402.62524295504346 516.6503239964342" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 316.1694953306918 498.96619380054403 L 296.52046177970277 536.2993575474231 L 274.90652487361484 498.96619380054403" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 296.52046177970277 550.0536810331155 L 310.27478526539505 546.1238743229177" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 310.27478526539505 546.1238743229177 L 324.0291087510874 550.0536810331155" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 267.04691145321925 550.0536810331155 L 282.7661382940105 546.1238743229177" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 282.7661382940105 546.1238743229177 L 296.52046177970277 550.0536810331155" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="296.52046177970277" y="444.05591831901035" stroke="rgb(245, 241, 237)" stroke-width="4.760392015108001px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="42.843528135972px">VS1</text><text class="sch-component-text" x="296.52046177970277" y="604.9639565146491" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="42.843528135972px"></text><circle class="sch-component-symbol-circle" cx="296.52046177970277" cy="516.6503239964342" r="69.025684219066px" stroke-width="4.760392015108001px" fill="none" stroke="rgb(132, 0, 0)"/></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_1__stack1"><rect class="component-overlay sch-component-overlay" x="569.2480579980179" y="202.07876798518495" width="180.894896574104" height="35.70294011331001" fill="transparent"/><path class="sch-component-symbol-path" d="M 569.2480579980179 235.40151209094097 L 631.1331541944219 237.78170809849496" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 643.0341342321918 233.02131608338698 L 683.4974663606099 202.07876798518495" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 688.2578583757179 237.78170809849496 L 750.1429545721219 235.40151209094097" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="659.6955062850699" y="175.89661190209097" stroke="rgb(245, 241, 237)" stroke-width="4.760392015108001px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="42.843528135972px">SW1</text><text class="sch-component-text" x="659.6955062850699" y="294.90641227979097" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="42.843528135972px"></text><circle class="sch-component-symbol-circle" cx="683.4974663606099" cy="235.40151209094097" r="4.760392015108001px" stroke-width="4.760392015108001px" fill="none" stroke="rgb(132, 0, 0)"/><circle class="sch-component-symbol-circle" cx="635.8935462095299" cy="235.40151209094097" r="4.760392015108001px" stroke-width="4.760392015108001px" fill="none" stroke="rgb(132, 0, 0)"/></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component-overlay sch-component-overlay" x="878.6735389800381" y="499.5985085374198" width="142.8117604532399" height="76.17579302575814" fill="transparent"/><path class="sch-component-symbol-path" d="M 1021.485299433278 537.6864050502988 L 964.360595251982 537.6864050502988" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 935.7982431613341 537.6864050502988 L 878.6735389800381 537.6864050502988" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 964.360595251982 499.5985085374198 L 964.360595251982 575.7743015631779" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 935.7982431613341 499.5985085374198 L 935.7982431613341 575.7743015631779" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="950.079419206658" y="480.5617008690029" stroke="rgb(245, 241, 237)" stroke-width="4.760392015108001px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="42.843528135972px">C1</text><text class="sch-component-text" x="950.079419206658" y="594.8111092315949" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="42.843528135972px"></text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_3__stack1"><rect class="component-overlay sch-component-overlay" x="569.2480579980179" y="499.60802932145003" width="142.8117604532399" height="38.073615336833825" fill="transparent"/><path class="sch-component-symbol-path" d="M 712.0598184512578 518.6448369898669 L 688.2530979837028 518.6448369898669" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 593.0547784655729 518.6448369898669 L 569.2480579980179 518.6448369898669" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><path class="sch-component-symbol-path" d="M 688.2530979837028 537.6816446582839 L 593.0547784655729 537.6816446582839 L 593.0547784655729 499.60802932145003 L 688.2530979837028 499.60802932145003 L 688.2530979837028 537.6816446582839" stroke="rgb(132, 0, 0)" fill="none" stroke-width="4.760392015108001px" stroke-linecap="round"/><text class="sch-component-name sch-component-text" x="640.6539382246378" y="480.5617008690029" stroke="rgb(245, 241, 237)" stroke-width="4.760392015108001px" paint-order="stroke" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="ideographic" font-size="42.843528135972px">R1</text><text class="sch-component-text" x="640.6539382246378" y="556.7279731107309" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="42.843528135972px"></text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="167.98987737178675" cy="517.3693493941678" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="380.20853423666256" cy="517.3989590325017" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="569.2480579980179" cy="235.40151209094097" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="750.142954572122" cy="235.40151209094097" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="1021.485299433278" cy="537.6864050502988" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="878.6735389800381" cy="537.6864050502988" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_0__stack1"><circle cx="712.0598184512579" cy="518.644836989867" r="9.520784030216001" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_1__stack1"><circle cx="569.2480579980179" cy="518.6448369898669" r="9.520784030216001" fill="red" opacity="0"/></g><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" d="
75
+ M 142.81176045328206,518.615227351533
76
+ L 166.61372052882206,531.4682857923247
77
+ L 166.61372052882206,613.0931408780431
78
+ L 119.00980037774207,613.0931408780431
79
+ L 119.00980037774207,531.4682857923247
80
80
  Z
81
- " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="4.760392015108001px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" x="142.81176045328206" y="520.995423359119" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="42.843528135972px" transform="rotate(90 142.81176045328206 520.995423359119)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" d="
82
- M 485.9411977336279,499.60326892946694
83
- L 462.1392376580879,486.75021048867535
84
- L 462.13923765808795,405.1253554029568
85
- L 509.74315780916794,405.1253554029568
86
- L 509.74315780916794,486.75021048867535
81
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="4.760392015108001px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" x="142.81176045328206" y="540.036991419519" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="42.843528135972px" transform="rotate(90 142.81176045328206 540.036991419519)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" d="
82
+ M 485.9411977336279,518.644836989867
83
+ L 462.1392376580879,505.79177854907545
84
+ L 462.13923765808795,424.1669234633569
85
+ L 509.74315780916794,424.1669234633569
86
+ L 509.74315780916794,505.79177854907545
87
87
  Z
88
- " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="4.760392015108001px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" x="485.9411977336279" y="478.18150486148096" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="42.843528135972px" transform="rotate(-90 485.9411977336279 478.18150486148096)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" d="
89
- M 797.7468747232019,216.35994403054093
90
- L 773.9449146476619,203.50688558974932
91
- L 773.9449146476619,121.88203050403082
92
- L 821.548834798742,121.88203050403082
93
- L 821.548834798742,203.50688558974934
88
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="4.760392015108001px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" x="485.9411977336279" y="497.22307292188106" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="42.843528135972px" transform="rotate(-90 485.9411977336279 497.22307292188106)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" d="
89
+ M 797.7468747232019,235.40151209094097
90
+ L 773.9449146476619,222.54845365014936
91
+ L 773.9449146476619,140.92359856443085
92
+ L 821.548834798742,140.92359856443085
93
+ L 821.548834798742,222.54845365014938
94
94
  Z
95
- " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="4.760392015108001px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" x="797.7468747232019" y="194.93817996255493" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="42.843528135972px" transform="rotate(-90 797.7468747232019 194.93817996255493)">XX</text>
95
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="4.760392015108001px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" x="797.7468747232019" y="213.97974802295496" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="42.843528135972px" transform="rotate(-90 797.7468747232019 213.97974802295496)">XX</text>
96
96
  </g>
97
97
  </svg>