diff --git a/projects/pathway-browser/src/app/render/render-shapes.model.ts b/projects/pathway-browser/src/app/render/render-shapes.model.ts
index 208c38d..c4d87d2 100644
--- a/projects/pathway-browser/src/app/render/render-shapes.model.ts
+++ b/projects/pathway-browser/src/app/render/render-shapes.model.ts
@@ -51,6 +51,18 @@ export interface RenderNodeShape {
dashed: boolean;
}
+/**
+ * A polyline, and also the shape every arrowhead is drawn as.
+ *
+ * An arrowhead is geometry, not a line decoration. The diagram draws four of
+ * them and three carry meaning a triangle does not: catalysis is a hollow
+ * circle, positive regulation a hollow triangle, and negative regulation a bar
+ * across the line. OOXML's line ends offer `triangle`, `oval`, `stealth`,
+ * `diamond` and `arrow`, always filled and always the line's own colour -- so a
+ * tee has no spelling there at all, and an export that reached for the nearest
+ * line end drew inhibition as activation. Handing over the points instead means
+ * the exporter needs to know none of that.
+ */
export interface RenderEdgeShape {
kind: 'edge';
id: string;
@@ -59,8 +71,9 @@ export interface RenderEdgeShape {
points: { x: number; y: number }[];
stroke: ShapeColour;
strokeWidth: number;
- /** Reactions draw arrowheads; a plain link does not. */
- arrow: boolean;
+ /** Closed and filled, for an arrowhead; open and stroked, for a connector. */
+ closed: boolean;
+ fill: ShapeColour;
/** A broken line, which the diagram uses for the links between glyphs. */
dashed: boolean;
}
diff --git a/projects/pathway-browser/src/app/render/render.component.ts b/projects/pathway-browser/src/app/render/render.component.ts
index 4dec3e6..aa7bab9 100644
--- a/projects/pathway-browser/src/app/render/render.component.ts
+++ b/projects/pathway-browser/src/app/render/render.component.ts
@@ -434,6 +434,21 @@ export class RenderComponent {
!framed ||
(box.x2 >= extent.x1 && box.x1 <= extent.x2 && box.y2 >= extent.y1 && box.y1 <= extent.y2);
+ // Keeping a glyph that merely crosses the frame is right; keeping the parts
+ // of it that fall outside is not. An SVG has a viewBox and simply does not
+ // draw them, and a slide has nothing of the sort -- a connector that ran the
+ // width of the diagram arrived as an object sitting 31 inches off the side
+ // of an 11 inch slide, which is what a reader would find when they opened it.
+ const clipBox = (box: { x1: number; y1: number; x2: number; y2: number }) =>
+ framed
+ ? {
+ x1: Math.max(box.x1, extent.x1),
+ y1: Math.max(box.y1, extent.y1),
+ x2: Math.min(box.x2, extent.x2),
+ y2: Math.min(box.y2, extent.y2),
+ }
+ : box;
+
// toArray() rather than iterating the collection: a cytoscape collection is
// array-like without being an array, and its filter hands back the loose
// element type rather than a node.
@@ -448,9 +463,11 @@ export class RenderComponent {
const nodeUnderlays: RenderNodeShape[] = [];
const edges: RenderEdgeShape[] = [];
const edgeUnderlays: RenderEdgeShape[] = [];
+ const arrowheads: (RenderNodeShape | RenderEdgeShape)[] = [];
for (const node of visible) {
- const box = node.boundingBox({ includeLabels: false, includeOverlays: false });
+ const box = clipBox(node.boundingBox({ includeLabels: false, includeOverlays: false }));
+ if (box.x2 <= box.x1 || box.y2 <= box.y1) continue;
const label = String(node.data('displayName') ?? '').trim();
const under = this.underlay(node);
if (under) {
@@ -458,10 +475,14 @@ export class RenderComponent {
kind: 'node',
id: `${node.id()}-underlay`,
name: `${label || node.id()} highlight`,
- x: box.x1 - under.padding,
- y: box.y1 - under.padding,
- w: box.w + 2 * under.padding,
- h: box.h + 2 * under.padding,
+ x: Math.max(box.x1 - under.padding, framed ? extent.x1 : -Infinity),
+ y: Math.max(box.y1 - under.padding, framed ? extent.y1 : -Infinity),
+ w:
+ Math.min(box.x2 + under.padding, framed ? extent.x2 : Infinity) -
+ Math.max(box.x1 - under.padding, framed ? extent.x1 : -Infinity),
+ h:
+ Math.min(box.y2 + under.padding, framed ? extent.y2 : Infinity) -
+ Math.max(box.y1 - under.padding, framed ? extent.y1 : -Infinity),
geom: this.geometryOf(String(node.style('shape') ?? '')),
fill: under.colour,
stroke: null,
@@ -480,8 +501,8 @@ export class RenderComponent {
name: label || String(node.data('schemaClass') ?? node.id()),
x: box.x1,
y: box.y1,
- w: box.w,
- h: box.h,
+ w: box.x2 - box.x1,
+ h: box.y2 - box.y1,
geom: this.geometryOf(String(node.style('shape') ?? '')),
fill: this.colour(node.style('background-color'), node.style('background-opacity')),
stroke: this.colour(node.style('border-color'), node.style('border-opacity')),
@@ -501,34 +522,58 @@ export class RenderComponent {
.filter((edge) => within(edge.boundingBox()))) {
// Bend points are how the diagram's orthogonal routing is stored; without
// them every connector exports as a straight diagonal.
- const points = [edge.sourceEndpoint(), ...this.bendPoints(edge), edge.targetEndpoint()];
+ const whole = [edge.sourceEndpoint(), ...this.bendPoints(edge), edge.targetEndpoint()].map(
+ (point) => ({ x: point.x, y: point.y })
+ );
+ // Unframed, this is the polyline itself; framed, only the parts in view.
+ const runs = framed ? this.clipRuns(whole, extent) : [whole];
+ if (!runs.length) continue;
+ const points = whole;
const width = this.pixels(edge.style('width')) || 1;
const under = this.underlay(edge);
if (under) {
- edgeUnderlays.push({
- kind: 'edge',
- id: `${edge.id()}-underlay`,
- name: `${String(edge.data('schemaClass') ?? 'connector')} highlight`,
- points: points.map((point) => ({ x: point.x, y: point.y })),
- stroke: under.colour,
- // Cytoscape pads an underlay outwards from the line, so the band is
- // the line plus that padding on each side.
- strokeWidth: width + 2 * under.padding,
- arrow: false,
- dashed: false,
+ // One band per run, or a connector clipped into two pieces keeps its
+ // tint on the first and loses it on the rest.
+ runs.forEach((run, at) => {
+ edgeUnderlays.push({
+ kind: 'edge',
+ id: at === 0 ? `${edge.id()}-underlay` : `${edge.id()}-underlay-${at}`,
+ name: `${String(edge.data('schemaClass') ?? 'connector')} highlight`,
+ points: run,
+ stroke: under.colour,
+ // Cytoscape pads an underlay outwards from the line, so the band is
+ // the line plus that padding on each side.
+ strokeWidth: width + 2 * under.padding,
+ closed: false,
+ fill: null,
+ dashed: false,
+ });
});
}
- edges.push({
- kind: 'edge',
- id: String(edge.id()),
- name: String(edge.data('schemaClass') ?? 'connector'),
- points: points.map((point) => ({ x: point.x, y: point.y })),
- stroke: this.colour(edge.style('line-color'), edge.style('opacity')),
- strokeWidth: width,
- arrow: String(edge.style('target-arrow-shape') ?? 'none') !== 'none',
- dashed: this.dashed(edge.style('line-style')),
+ const stroke = this.colour(edge.style('line-color'), edge.style('opacity'));
+ const dashed = this.dashed(edge.style('line-style'));
+ runs.forEach((run, at) => {
+ edges.push({
+ kind: 'edge',
+ id: at === 0 ? String(edge.id()) : `${edge.id()}-${at}`,
+ name: String(edge.data('schemaClass') ?? 'connector'),
+ points: run,
+ stroke,
+ strokeWidth: width,
+ closed: false,
+ fill: null,
+ dashed,
+ });
});
+
+ // The arrowhead is drawn after its line, so it sits on top of it -- and
+ // only when the end it marks is in view.
+ const tip = points[points.length - 1];
+ const showsTip =
+ !framed ||
+ (tip.x >= extent.x1 && tip.x <= extent.x2 && tip.y >= extent.y1 && tip.y <= extent.y2);
+ if (showsTip) arrowheads.push(...this.arrowhead(edge, points, width));
}
return {
@@ -544,7 +589,14 @@ export class RenderComponent {
// The underlays are how the diagram tints an event by the sub-pathway it
// belongs to, and each sits immediately behind the glyph it marks -- so
// they go in front of the compartments and behind everything else.
- shapes: [...compartments, ...edgeUnderlays, ...edges, ...nodeUnderlays, ...nodes],
+ shapes: [
+ ...compartments,
+ ...edgeUnderlays,
+ ...edges,
+ ...arrowheads,
+ ...nodeUnderlays,
+ ...nodes,
+ ],
};
}
@@ -625,6 +677,185 @@ export class RenderComponent {
return null;
}
+ /**
+ * A polyline cut down to a rectangle, as the runs that survive.
+ *
+ * Liang-Barsky per segment. A connector crossing the frame twice comes back
+ * as two runs rather than one line joining them through the middle, which is
+ * what naive clipping to the endpoints would draw.
+ */
+ private clipRuns(
+ points: { x: number; y: number }[],
+ box: { x1: number; y1: number; x2: number; y2: number }
+ ): { x: number; y: number }[][] {
+ const runs: { x: number; y: number }[][] = [];
+ let run: { x: number; y: number }[] = [];
+
+ const near = (a: { x: number; y: number }, b: { x: number; y: number }) =>
+ Math.abs(a.x - b.x) < 0.01 && Math.abs(a.y - b.y) < 0.01;
+
+ for (let at = 0; at < points.length - 1; at++) {
+ const from = points[at];
+ const to = points[at + 1];
+ const dx = to.x - from.x;
+ const dy = to.y - from.y;
+ let enter = 0;
+ let leave = 1;
+ let inside = true;
+
+ for (const [p, q] of [
+ [-dx, from.x - box.x1],
+ [dx, box.x2 - from.x],
+ [-dy, from.y - box.y1],
+ [dy, box.y2 - from.y],
+ ]) {
+ if (p === 0) {
+ // Parallel to this edge: outside it means the whole segment is out.
+ if (q < 0) {
+ inside = false;
+ break;
+ }
+ continue;
+ }
+ const at2 = q / p;
+ if (p < 0) enter = Math.max(enter, at2);
+ else leave = Math.min(leave, at2);
+ }
+ if (!inside || enter > leave) {
+ if (run.length > 1) runs.push(run);
+ run = [];
+ continue;
+ }
+
+ const start = { x: from.x + dx * enter, y: from.y + dy * enter };
+ const end = { x: from.x + dx * leave, y: from.y + dy * leave };
+ if (!run.length) run.push(start);
+ else if (!near(run[run.length - 1], start)) {
+ if (run.length > 1) runs.push(run);
+ run = [start];
+ }
+ run.push(end);
+ // A segment that left the box ends the run.
+ if (leave < 1) {
+ runs.push(run);
+ run = [];
+ }
+ }
+
+ if (run.length > 1) runs.push(run);
+ return runs;
+ }
+
+ /**
+ * The mark at the target end of a connector, as geometry.
+ *
+ * The diagram uses four, and three of them mean something a triangle does
+ * not: catalysis is a hollow circle, positive regulation a hollow triangle,
+ * and negative regulation a bar across the line. Exporting them all as a
+ * filled triangle drew inhibition as activation, which is a figure that says
+ * the opposite of what the pathway does.
+ *
+ * Built here rather than in the exporter because it is diagram geometry --
+ * where the line ends, which way it points -- and because OOXML's own line
+ * ends cannot express a bar, a hollow head, or a colour of their own.
+ */
+ private arrowhead(
+ edge: cytoscape.EdgeSingular,
+ points: { x: number; y: number }[],
+ width: number
+ ): (RenderNodeShape | RenderEdgeShape)[] {
+ const shape = String(edge.style('target-arrow-shape') ?? 'none');
+ if (shape === 'none' || points.length < 2) return [];
+
+ const colour = this.colour(edge.style('target-arrow-color'), edge.style('opacity'));
+ if (!colour) return [];
+
+ const hollow = String(edge.style('target-arrow-fill') ?? 'filled') === 'hollow';
+ // Cytoscape scales an arrow by the line's width; measured against the
+ // exported SVG, a 4px connector carries a 16px head.
+ const scale = this.pixels(edge.style('arrow-scale')) || 1;
+ const size = Math.max(6, width * 4 * scale);
+
+ const tip = points[points.length - 1];
+ const from = points[points.length - 2];
+ const run = Math.hypot(tip.x - from.x, tip.y - from.y) || 1;
+ // Along the line, and across it.
+ const ax = (tip.x - from.x) / run;
+ const ay = (tip.y - from.y) / run;
+ const cx = -ay;
+ const cy = ax;
+
+ const name = `${String(edge.data('schemaClass') ?? 'connector')} ${shape}`;
+ const id = `${edge.id()}-arrow`;
+
+ if (shape === 'tee') {
+ // A bar across the line's end. Its thickness is the line's, not the
+ // head's, or inhibition on a hairline connector becomes a black square.
+ return [
+ {
+ kind: 'edge',
+ id,
+ name,
+ points: [
+ { x: tip.x + cx * (size / 2), y: tip.y + cy * (size / 2) },
+ { x: tip.x - cx * (size / 2), y: tip.y - cy * (size / 2) },
+ ],
+ stroke: colour,
+ strokeWidth: Math.max(width, size / 4),
+ closed: false,
+ fill: null,
+ dashed: false,
+ },
+ ];
+ }
+
+ if (shape === 'circle') {
+ // Centred where the line stops, which is how cytoscape seats it.
+ return [
+ {
+ kind: 'node',
+ id,
+ name,
+ x: tip.x - ax * (size / 2) - size / 2,
+ y: tip.y - ay * (size / 2) - size / 2,
+ w: size,
+ h: size,
+ geom: 'ellipse',
+ fill: hollow ? null : colour,
+ stroke: colour,
+ strokeWidth: hollow ? Math.max(1, width) : 0,
+ label: '',
+ fontSize: 0,
+ fontColor: null,
+ bold: false,
+ dashed: false,
+ },
+ ];
+ }
+
+ // Everything else is a triangle: the tip on the line's end, the base back
+ // along it. `stealth`, `diamond` and the rest do not occur in this diagram,
+ // and a triangle is the honest approximation if one ever does.
+ const base = { x: tip.x - ax * size, y: tip.y - ay * size };
+ return [
+ {
+ kind: 'edge',
+ id,
+ name,
+ points: [
+ { x: tip.x, y: tip.y },
+ { x: base.x + cx * (size / 2), y: base.y + cy * (size / 2) },
+ { x: base.x - cx * (size / 2), y: base.y - cy * (size / 2) },
+ ],
+ stroke: colour,
+ strokeWidth: hollow ? Math.max(1, width) : 0,
+ closed: true,
+ fill: hollow ? null : colour,
+ dashed: false,
+ },
+ ];
+ }
+
/**
* The band the diagram draws behind a glyph, if it draws one.
*
diff --git a/tools/render/README.md b/tools/render/README.md
index a771927..452b591 100644
--- a/tools/render/README.md
+++ b/tools/render/README.md
@@ -82,6 +82,12 @@ diagram looks like. R-HSA-109606 comes out as **635 shapes in 32 KB**, against
The slide is the size of the diagram, as production's is, so labels land at 5–53pt
rather than the 1.65pt that fitting a 5976px diagram onto a 13.3in slide gives.
+Arrowheads are geometry rather than OOXML line ends. The diagram draws four and
+three of them mean something a triangle does not — catalysis is a hollow circle,
+positive regulation a hollow triangle, negative regulation a bar across the line
+— while a line end is always filled and always the line's own colour, and has no
+spelling for a bar at all. Drawn as line ends, inhibition came out as activation.
+
Two things a slide of shapes does not carry yet:
- **Node decorations.** The style draws them with `background-image` — 140 small
diff --git a/tools/render/fixtures/shapes-apoptosis.json b/tools/render/fixtures/shapes-apoptosis.json
index f080086..0655b49 100644
--- a/tools/render/fixtures/shapes-apoptosis.json
+++ b/tools/render/fixtures/shapes-apoptosis.json
@@ -132,7 +132,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -155,7 +156,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -178,7 +180,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -197,7 +200,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -216,7 +220,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -239,7 +244,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -262,7 +268,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -285,7 +292,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -308,7 +316,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -331,7 +340,8 @@
],
"stroke": "0000cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -350,7 +360,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -373,7 +384,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -396,7 +408,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -419,7 +432,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -438,7 +452,8 @@
],
"stroke": "cccc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -457,7 +472,8 @@
],
"stroke": "cccc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -476,7 +492,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -499,7 +516,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -518,7 +536,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -541,7 +560,8 @@
],
"stroke": "cccc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -560,7 +580,8 @@
],
"stroke": "cccc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -583,7 +604,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -602,7 +624,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -633,7 +656,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -656,7 +680,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -687,7 +712,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -710,7 +736,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -733,7 +760,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -760,7 +788,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -787,7 +816,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -810,7 +840,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -833,7 +864,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -852,7 +884,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -875,7 +908,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -898,7 +932,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -921,7 +956,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -948,7 +984,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -967,7 +1004,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -986,7 +1024,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1005,7 +1044,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1028,7 +1068,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1059,7 +1100,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1078,7 +1120,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1105,7 +1148,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1128,7 +1172,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1151,7 +1196,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1174,7 +1220,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1193,7 +1240,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1212,7 +1260,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1231,7 +1280,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1250,7 +1300,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1269,7 +1320,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1292,7 +1344,8 @@
],
"stroke": "cccc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1315,7 +1368,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1334,7 +1388,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1353,7 +1408,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1376,7 +1432,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1399,7 +1456,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1418,7 +1476,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1437,7 +1496,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1456,7 +1516,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1475,7 +1536,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1498,7 +1560,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1521,7 +1584,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1544,7 +1608,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1567,7 +1632,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1590,7 +1656,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1613,7 +1680,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1636,7 +1704,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1659,7 +1728,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1678,7 +1748,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1697,7 +1768,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1716,7 +1788,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1739,7 +1812,8 @@
],
"stroke": "0000cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1758,7 +1832,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1777,7 +1852,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1796,7 +1872,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1819,7 +1896,8 @@
],
"stroke": "0000cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1838,7 +1916,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1857,7 +1936,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1876,7 +1956,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1895,7 +1976,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1918,7 +2000,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1941,7 +2024,8 @@
],
"stroke": "cccc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1964,7 +2048,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -1983,7 +2068,8 @@
],
"stroke": "cc000024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2010,7 +2096,8 @@
],
"stroke": "cccc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2033,7 +2120,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2056,7 +2144,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2079,7 +2168,8 @@
],
"stroke": "cccc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2098,7 +2188,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2121,7 +2212,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2140,7 +2232,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2163,7 +2256,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2186,7 +2280,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2205,7 +2300,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2228,7 +2324,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2251,7 +2348,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2274,7 +2372,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2293,7 +2392,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2312,7 +2412,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2335,7 +2436,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2354,7 +2456,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2377,7 +2480,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2396,7 +2500,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2419,7 +2524,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2438,7 +2544,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2457,7 +2564,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2476,7 +2584,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2495,7 +2604,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2514,7 +2624,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2537,7 +2648,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2560,7 +2672,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2579,7 +2692,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2602,7 +2716,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2625,7 +2740,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2644,7 +2760,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2663,7 +2780,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2682,7 +2800,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2705,7 +2824,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2728,7 +2848,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2751,7 +2872,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2774,7 +2896,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2797,7 +2920,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2820,7 +2944,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2843,7 +2968,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2862,7 +2988,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2881,7 +3008,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2904,7 +3032,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2931,7 +3060,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2954,7 +3084,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -2981,7 +3112,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3004,7 +3136,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3023,7 +3156,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3042,7 +3176,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3061,7 +3196,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3080,7 +3216,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3099,7 +3236,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3122,7 +3260,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3141,7 +3280,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3160,7 +3300,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3187,7 +3328,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3210,7 +3352,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3233,7 +3376,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3252,7 +3396,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3271,7 +3416,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3290,7 +3436,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3313,7 +3460,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3336,7 +3484,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3359,7 +3508,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3386,7 +3536,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3405,7 +3556,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3424,7 +3576,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3443,7 +3596,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3466,7 +3620,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3485,7 +3640,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3504,7 +3660,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3527,7 +3684,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3550,7 +3708,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3573,7 +3732,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3592,7 +3752,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3611,7 +3772,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3630,7 +3792,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3653,7 +3816,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3672,7 +3836,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3691,7 +3856,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3710,7 +3876,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3729,7 +3896,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3748,7 +3916,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3767,7 +3936,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3790,7 +3960,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3813,7 +3984,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3836,7 +4008,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3859,7 +4032,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3882,7 +4056,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3905,7 +4080,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3928,7 +4104,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3951,7 +4128,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -3978,7 +4156,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4001,7 +4180,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4024,7 +4204,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4047,7 +4228,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4070,7 +4252,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4093,7 +4276,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4116,7 +4300,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4139,7 +4324,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4158,7 +4344,8 @@
],
"stroke": "0000cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4177,7 +4364,8 @@
],
"stroke": "0000cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4200,7 +4388,8 @@
],
"stroke": "0000cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4219,7 +4408,8 @@
],
"stroke": "0000cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4242,7 +4432,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4261,7 +4452,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4280,7 +4472,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4303,7 +4496,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4322,7 +4516,8 @@
],
"stroke": "0000cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4341,7 +4536,8 @@
],
"stroke": "0000cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4360,7 +4556,8 @@
],
"stroke": "0000cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4379,7 +4576,8 @@
],
"stroke": "00cc0024",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4402,7 +4600,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4425,7 +4624,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4444,7 +4644,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4467,7 +4668,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4490,7 +4692,8 @@
],
"stroke": "cc00cc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4513,7 +4716,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4536,7 +4740,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4559,7 +4764,8 @@
],
"stroke": "00cccc24",
"strokeWidth": 44,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4582,7 +4788,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4605,7 +4812,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4628,7 +4836,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4647,7 +4856,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4666,7 +4876,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4689,7 +4900,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4712,7 +4924,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4735,7 +4948,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4758,7 +4972,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4781,7 +4996,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4800,7 +5016,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4823,7 +5040,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4846,7 +5064,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4869,7 +5088,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4888,7 +5108,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4907,7 +5128,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4926,7 +5148,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4949,7 +5172,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4968,7 +5192,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -4991,7 +5216,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5010,7 +5236,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5033,7 +5260,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5052,7 +5280,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5083,7 +5312,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5106,7 +5336,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5137,7 +5368,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5160,7 +5392,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5183,7 +5416,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5210,7 +5444,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5237,7 +5472,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5260,7 +5496,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5283,7 +5520,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5302,7 +5540,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5325,7 +5564,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5348,7 +5588,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5371,7 +5612,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5398,7 +5640,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5417,7 +5660,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5436,7 +5680,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5455,7 +5700,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5478,7 +5724,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5509,7 +5756,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5528,7 +5776,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5555,7 +5804,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5578,7 +5828,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5601,7 +5852,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5624,7 +5876,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5643,7 +5896,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5662,7 +5916,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5681,7 +5936,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5700,7 +5956,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5719,7 +5976,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5742,7 +6000,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5765,7 +6024,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5784,7 +6044,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5803,7 +6064,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5826,7 +6088,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5849,7 +6112,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5868,7 +6132,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5887,7 +6152,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5906,7 +6172,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5925,7 +6192,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5948,7 +6216,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5971,7 +6240,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -5994,7 +6264,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6017,7 +6288,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6040,7 +6312,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6063,7 +6336,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6086,7 +6360,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6109,7 +6384,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6128,7 +6404,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6147,7 +6424,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6166,7 +6444,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6189,7 +6468,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6208,7 +6488,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6227,7 +6508,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6246,7 +6528,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6269,7 +6552,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6288,7 +6572,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6307,7 +6592,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6326,7 +6612,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6345,7 +6632,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6368,7 +6656,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6391,7 +6680,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6414,7 +6704,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6433,7 +6724,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6460,7 +6752,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6483,7 +6776,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6506,7 +6800,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6529,7 +6824,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6548,7 +6844,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6571,7 +6868,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6590,7 +6888,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6613,7 +6912,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6636,7 +6936,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6655,7 +6956,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6678,7 +6980,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6701,7 +7004,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6724,7 +7028,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6743,7 +7048,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6762,7 +7068,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6785,7 +7092,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6804,7 +7112,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6827,7 +7136,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6846,7 +7156,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6869,7 +7180,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6888,7 +7200,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6907,7 +7220,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6926,7 +7240,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6945,7 +7260,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6964,7 +7280,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -6987,7 +7304,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7010,7 +7328,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7029,7 +7348,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7052,7 +7372,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7075,7 +7396,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7094,7 +7416,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7113,7 +7436,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7132,7 +7456,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7155,7 +7480,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7178,7 +7504,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7201,7 +7528,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7224,7 +7552,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7247,7 +7576,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7270,7 +7600,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7293,7 +7624,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7312,7 +7644,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7331,7 +7664,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7354,7 +7688,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7381,7 +7716,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7404,7 +7740,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7431,7 +7768,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7454,7 +7792,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7473,7 +7812,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7492,7 +7832,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7511,7 +7852,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7530,7 +7872,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7549,7 +7892,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7572,7 +7916,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7591,7 +7936,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7610,7 +7956,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7637,7 +7984,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7660,7 +8008,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7683,7 +8032,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7702,7 +8052,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7721,7 +8072,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7740,7 +8092,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7763,7 +8116,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7786,7 +8140,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7809,7 +8164,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7836,7 +8192,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7855,7 +8212,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7874,7 +8232,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7893,7 +8252,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7916,7 +8276,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7935,7 +8296,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7954,7 +8316,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -7977,7 +8340,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8000,7 +8364,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8023,7 +8388,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8042,7 +8408,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8061,7 +8428,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8080,7 +8448,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8103,7 +8472,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8122,7 +8492,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8141,7 +8512,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8160,7 +8532,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8179,7 +8552,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8198,7 +8572,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8217,7 +8592,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8240,7 +8616,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8263,7 +8640,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8286,7 +8664,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8309,7 +8688,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8332,7 +8712,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8355,7 +8736,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8378,7 +8760,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8401,7 +8784,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8428,7 +8812,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8451,7 +8836,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8474,7 +8860,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8497,7 +8884,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8520,7 +8908,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8543,7 +8932,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8566,7 +8956,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8589,7 +8980,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8608,7 +9000,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8627,7 +9020,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8650,7 +9044,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8669,7 +9064,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8692,7 +9088,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8711,7 +9108,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8730,7 +9128,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8753,7 +9152,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8772,7 +9172,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8791,7 +9192,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8810,7 +9212,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8829,7 +9232,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8852,7 +9256,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8875,7 +9280,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8894,7 +9300,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8917,7 +9324,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8940,7 +9348,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8963,7 +9372,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -8986,7 +9396,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -9009,7 +9420,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": false,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -9032,7 +9444,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9051,7 +9464,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9078,7 +9492,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9097,7 +9512,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9120,7 +9536,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9139,7 +9556,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9162,7 +9580,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9189,7 +9608,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9216,7 +9636,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9235,7 +9656,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -9254,7 +9676,8 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": false
},
{
@@ -9281,7 +9704,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9300,7 +9724,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9323,7 +9748,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9350,7 +9776,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9369,7 +9796,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9392,7 +9820,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9419,7 +9848,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9438,7 +9868,8 @@
],
"stroke": "001f2580",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
"dashed": true
},
{
@@ -9461,7 +9892,2904 @@
],
"stroke": "001f25",
"strokeWidth": 4,
- "arrow": true,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2178 --> 2816-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4240,
+ "y": 1672
+ },
+ {
+ "x": 4216,
+ "y": 1684
+ },
+ {
+ "x": 4216,
+ "y": 1660
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2178 --> 2817-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4182,
+ "y": 1702
+ },
+ {
+ "x": 4155.6,
+ "y": 1697.1999999999996
+ },
+ {
+ "x": 4170,
+ "y": 1677.9999999999998
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2181 --> 2818-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4698,
+ "y": 1676
+ },
+ {
+ "x": 4674,
+ "y": 1688
+ },
+ {
+ "x": 4674,
+ "y": 1664
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2819 --| 2181-arrow",
+ "name": "connector tee",
+ "points": [
+ {
+ "x": 4581.958649675097,
+ "y": 1657.9233035011155
+ },
+ {
+ "x": 4605.887957327134,
+ "y": 1656.0825875278813
+ }
+ ],
+ "stroke": "ba1a1a",
+ "strokeWidth": 6,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2820 --| 2181-arrow",
+ "name": "connector tee",
+ "points": [
+ {
+ "x": 4618.296202234586,
+ "y": 1679.2722838907964
+ },
+ {
+ "x": 4603.262815635001,
+ "y": 1697.9804983258357
+ }
+ ],
+ "stroke": "ba1a1a",
+ "strokeWidth": 6,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2821 --| 2181-arrow",
+ "name": "connector tee",
+ "points": [
+ {
+ "x": 4595.548308975846,
+ "y": 1699.336879152731
+ },
+ {
+ "x": 4575.36901183992,
+ "y": 1686.3447289419296
+ }
+ ],
+ "stroke": "ba1a1a",
+ "strokeWidth": 6,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2142 --> 2054-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1472,
+ "y": 2216
+ },
+ {
+ "x": 1446.140409909508,
+ "y": 2208.8388827441713
+ },
+ {
+ "x": 1462.2131397503676,
+ "y": 2191.0156575741094
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2822 --o 2185-arrow",
+ "name": "connector circle",
+ "x": 5588,
+ "y": 1619.917331319575,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2860 --> 2822-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5278,
+ "y": 1672
+ },
+ {
+ "x": 5254.176414863925,
+ "y": 1684.3465295230756
+ },
+ {
+ "x": 5253.828625299895,
+ "y": 1660.349049604985
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2053 --> 2055-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1604,
+ "y": 2430
+ },
+ {
+ "x": 1580.5438988907943,
+ "y": 2443.031167282892
+ },
+ {
+ "x": 1579.501405508163,
+ "y": 2419.0538194823703
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2841 --> 2311-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4188,
+ "y": 472
+ },
+ {
+ "x": 4200,
+ "y": 496
+ },
+ {
+ "x": 4176,
+ "y": 496
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2823 --| 2244-arrow",
+ "name": "connector tee",
+ "points": [
+ {
+ "x": 4570.770329614269,
+ "y": 1041.3851648071343
+ },
+ {
+ "x": 4548.486889033023,
+ "y": 1032.471788574636
+ }
+ ],
+ "stroke": "ba1a1a",
+ "strokeWidth": 6,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2823 --| 2249-arrow",
+ "name": "connector tee",
+ "points": [
+ {
+ "x": 5262,
+ "y": 995
+ },
+ {
+ "x": 5238,
+ "y": 995
+ }
+ ],
+ "stroke": "ba1a1a",
+ "strokeWidth": 6,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2827 --> 2824-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4276,
+ "y": 318
+ },
+ {
+ "x": 4251.936172948255,
+ "y": 329.8714880121945
+ },
+ {
+ "x": 4252.064513359197,
+ "y": 305.8718311659202
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2824 --| 2846-arrow",
+ "name": "connector tee",
+ "points": [
+ {
+ "x": 4805,
+ "y": 804
+ },
+ {
+ "x": 4805,
+ "y": 780
+ }
+ ],
+ "stroke": "ba1a1a",
+ "strokeWidth": 6,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2824 --| 2851-arrow",
+ "name": "connector tee",
+ "points": [
+ {
+ "x": 3981.3234472170666,
+ "y": 1234.4312280821314
+ },
+ {
+ "x": 4003.4510177516436,
+ "y": 1243.7248077066538
+ }
+ ],
+ "stroke": "ba1a1a",
+ "strokeWidth": 6,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2310 --> 2312-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4370,
+ "y": 598
+ },
+ {
+ "x": 4358,
+ "y": 574
+ },
+ {
+ "x": 4382,
+ "y": 574
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2312 --| 2841-arrow",
+ "name": "connector tee",
+ "points": [
+ {
+ "x": 4207,
+ "y": 628
+ },
+ {
+ "x": 4207,
+ "y": 652
+ }
+ ],
+ "stroke": "ba1a1a",
+ "strokeWidth": 6,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2851 --> 2825-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4818,
+ "y": 358
+ },
+ {
+ "x": 4799.02633403899,
+ "y": 339.0263340389897
+ },
+ {
+ "x": 4821.794733192202,
+ "y": 331.4368676545856
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2828 --> 2826-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5378,
+ "y": 254
+ },
+ {
+ "x": 5353.972973179471,
+ "y": 265.94579349250625
+ },
+ {
+ "x": 5354.027149113678,
+ "y": 241.94585463908098
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2347 --> 2826-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5484,
+ "y": 284
+ },
+ {
+ "x": 5474.759705792945,
+ "y": 309.19160500974596
+ },
+ {
+ "x": 5458.30253946797,
+ "y": 291.72272764020323
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2349 --> 2826-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5478,
+ "y": 284
+ },
+ {
+ "x": 5465.788671879645,
+ "y": 307.89316775852546
+ },
+ {
+ "x": 5451.558668920967,
+ "y": 288.56683815883173
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2350 --> 2826-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5552,
+ "y": 228
+ },
+ {
+ "x": 5569.197611608681,
+ "y": 207.40286051518427
+ },
+ {
+ "x": 5578.796278553062,
+ "y": 229.39980559605544
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2846 --> 2314-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4824,
+ "y": 496
+ },
+ {
+ "x": 4836,
+ "y": 520
+ },
+ {
+ "x": 4812,
+ "y": 520
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2313 --> 2315-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4660,
+ "y": 568
+ },
+ {
+ "x": 4633.986885456753,
+ "y": 561.4183686095398
+ },
+ {
+ "x": 4649.657436386419,
+ "y": 543.240529531126
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2316 --> 2318-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4990,
+ "y": 322
+ },
+ {
+ "x": 4966,
+ "y": 334
+ },
+ {
+ "x": 4966,
+ "y": 310
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2084 --> 2085-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1666,
+ "y": 2062
+ },
+ {
+ "x": 1689.9999999999998,
+ "y": 2049.9999999999995
+ },
+ {
+ "x": 1690.0000000000002,
+ "y": 2073.9999999999995
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3371 --> 3373-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 2070,
+ "y": 692
+ },
+ {
+ "x": 2078.4852813742386,
+ "y": 666.5441558772843
+ },
+ {
+ "x": 2095.455844122716,
+ "y": 683.5147186257614
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3374 --+ 2144-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3772,
+ "y": 1560
+ },
+ {
+ "x": 3769.9806248228238,
+ "y": 1533.2432789024178
+ },
+ {
+ "x": 3792.19375177176,
+ "y": 1542.3304671997098
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3375 --+ 2144-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3756,
+ "y": 1560
+ },
+ {
+ "x": 3733.6737477739425,
+ "y": 1545.1158318492949
+ },
+ {
+ "x": 3754.51158318493,
+ "y": 1533.208497328731
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2873 --> 2874-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4820,
+ "y": 1932
+ },
+ {
+ "x": 4808,
+ "y": 1908
+ },
+ {
+ "x": 4832,
+ "y": 1908
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2875 --> 2876-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3876,
+ "y": 1950
+ },
+ {
+ "x": 3864.732444889634,
+ "y": 1925.6475421808216
+ },
+ {
+ "x": 3888.721433189123,
+ "y": 1926.3744812202
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2877 --> 2878-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4810,
+ "y": 1488
+ },
+ {
+ "x": 4785.625581727716,
+ "y": 1499.2199703158135
+ },
+ {
+ "x": 4786.399372783979,
+ "y": 1475.2324475716605
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2366 --o 79-arrow",
+ "name": "connector circle",
+ "x": 966,
+ "y": 2114.082668680425,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2370 --o 321-arrow",
+ "name": "connector circle",
+ "x": 166.0790265569492,
+ "y": 1801.6175423512962,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2370 --o 201-arrow",
+ "name": "connector circle",
+ "x": 162.0817579637531,
+ "y": 1373.80874516225,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2377 --> 2372-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 782,
+ "y": 3028
+ },
+ {
+ "x": 770,
+ "y": 3004
+ },
+ {
+ "x": 794,
+ "y": 3004
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "321 --> 324-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 132,
+ "y": 2044
+ },
+ {
+ "x": 119.71515620808958,
+ "y": 2020.14454752036
+ },
+ {
+ "x": 143.71345570856573,
+ "y": 2019.8588534786877
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2377 --> 2379-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 712,
+ "y": 2974
+ },
+ {
+ "x": 735.6474927882701,
+ "y": 2961.3194603888983
+ },
+ {
+ "x": 736.3329273618432,
+ "y": 2985.309670463955
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2380 --o 2377-arrow",
+ "name": "connector circle",
+ "x": 772,
+ "y": 2871.917331319575,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "79 --> 81-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1024,
+ "y": 1958
+ },
+ {
+ "x": 1026.9034308699147,
+ "y": 1984.6752711173406
+ },
+ {
+ "x": 1004.4018416280763,
+ "y": 1976.327907366336
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "83 --> 81-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 946,
+ "y": 1930
+ },
+ {
+ "x": 922,
+ "y": 1942
+ },
+ {
+ "x": 922,
+ "y": 1918
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2016 --> 81-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1034,
+ "y": 1902
+ },
+ {
+ "x": 1023.2237729654993,
+ "y": 1877.4261738652506
+ },
+ {
+ "x": 1047.1933246870992,
+ "y": 1878.6347226915498
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "84 --o 83-arrow",
+ "name": "connector circle",
+ "x": 717.9173313195749,
+ "y": 1918,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "85 --> 86-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1166,
+ "y": 2534
+ },
+ {
+ "x": 1154.318905362254,
+ "y": 2509.843178436226
+ },
+ {
+ "x": 1178.3168004683716,
+ "y": 2510.161031351539
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "87 --o 85-arrow",
+ "name": "connector circle",
+ "x": 1197.791370675913,
+ "y": 1891.5924944689255,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "131 --> 89-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1592,
+ "y": 2582
+ },
+ {
+ "x": 1576.891649062812,
+ "y": 2604.1751602465183
+ },
+ {
+ "x": 1565.1948612404724,
+ "y": 2583.2184153981607
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2053 --> 89-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1606,
+ "y": 2526
+ },
+ {
+ "x": 1580.4543930453378,
+ "y": 2517.7889120502873
+ },
+ {
+ "x": 1597.2415061869729,
+ "y": 2500.6368616664427
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "88 --> 89-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1508,
+ "y": 2554
+ },
+ {
+ "x": 1484.1363377672708,
+ "y": 2566.2688884925333
+ },
+ {
+ "x": 1483.866691866336,
+ "y": 2542.2704033093364
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "127 --> 2394-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1168,
+ "y": 3012
+ },
+ {
+ "x": 1193.6140184634914,
+ "y": 3004.0048728495462
+ },
+ {
+ "x": 1189.7645127984579,
+ "y": 3027.694138480521
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2144 --> 2146-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3872,
+ "y": 1576
+ },
+ {
+ "x": 3848,
+ "y": 1588
+ },
+ {
+ "x": 3848,
+ "y": 1564
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "127 --> 2408-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1390,
+ "y": 3032
+ },
+ {
+ "x": 1367.267490012995,
+ "y": 3046.255980839308
+ },
+ {
+ "x": 1364.9557093363505,
+ "y": 3022.367580513981
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "127 --> 121-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1328,
+ "y": 2950
+ },
+ {
+ "x": 1340,
+ "y": 2974
+ },
+ {
+ "x": 1316,
+ "y": 2974
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "321 --> 2427-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 208,
+ "y": 1876
+ },
+ {
+ "x": 183.99999999999997,
+ "y": 1888
+ },
+ {
+ "x": 184.00000000000003,
+ "y": 1864
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "201 --> 2428-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 178,
+ "y": 1292
+ },
+ {
+ "x": 154,
+ "y": 1304
+ },
+ {
+ "x": 154,
+ "y": 1280
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "124 --> 126-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 982,
+ "y": 3158
+ },
+ {
+ "x": 958,
+ "y": 3170
+ },
+ {
+ "x": 958,
+ "y": 3146
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "291 --> 2431-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1522,
+ "y": 1282
+ },
+ {
+ "x": 1498.1548009437904,
+ "y": 1294.3047341283645
+ },
+ {
+ "x": 1497.8490932635825,
+ "y": 1270.3066812320512
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "381 --> 2432-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1532,
+ "y": 1354
+ },
+ {
+ "x": 1508.0669114089083,
+ "y": 1366.1329003330186
+ },
+ {
+ "x": 1507.9338265789302,
+ "y": 1342.133269326938
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "128 --o 127-arrow",
+ "name": "connector circle",
+ "x": 1318,
+ "y": 3190.082668680425,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2175 --> 2177-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3844,
+ "y": 822
+ },
+ {
+ "x": 3820,
+ "y": 834
+ },
+ {
+ "x": 3820,
+ "y": 810
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "129 --> 130-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1548,
+ "y": 2918
+ },
+ {
+ "x": 1524,
+ "y": 2930
+ },
+ {
+ "x": 1524,
+ "y": 2906
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2353 --> 132-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1674,
+ "y": 2782
+ },
+ {
+ "x": 1681.7711931290848,
+ "y": 2756.3171544148536
+ },
+ {
+ "x": 1699.208992345568,
+ "y": 2772.80724715218
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "131 --> 133-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1580,
+ "y": 2634
+ },
+ {
+ "x": 1555.38728234516,
+ "y": 2644.6871010869704
+ },
+ {
+ "x": 1556.6826885375197,
+ "y": 2620.7220865283102
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2883 --> 2949-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5166,
+ "y": 1814
+ },
+ {
+ "x": 5142.363162512078,
+ "y": 1826.7003902920176
+ },
+ {
+ "x": 5141.657585273633,
+ "y": 1802.7107641848731
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "134 --> 135-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1232,
+ "y": 960
+ },
+ {
+ "x": 1209.2620022952067,
+ "y": 974.2472264099654
+ },
+ {
+ "x": 1206.959420249152,
+ "y": 950.3579376821447
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "136 --> 135-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1232,
+ "y": 950
+ },
+ {
+ "x": 1207.214613508037,
+ "y": 960.2803023517802
+ },
+ {
+ "x": 1208.904526223398,
+ "y": 936.3398722174977
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2883 --> 2951-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5120,
+ "y": 1858
+ },
+ {
+ "x": 5098.233853704545,
+ "y": 1842.3081270893226
+ },
+ {
+ "x": 5119.493810551268,
+ "y": 1831.1719592172294
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2185 --> 2186-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5704,
+ "y": 1698
+ },
+ {
+ "x": 5677.187793194495,
+ "y": 1696.948540909588
+ },
+ {
+ "x": 5688.753843189026,
+ "y": 1675.9193591013484
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3207 --> 3210-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4062,
+ "y": 2658
+ },
+ {
+ "x": 4050,
+ "y": 2634
+ },
+ {
+ "x": 4074,
+ "y": 2634
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2185 --> 2187-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5658,
+ "y": 1218
+ },
+ {
+ "x": 5670.313353907908,
+ "y": 1241.8407490557365
+ },
+ {
+ "x": 5646.315413100156,
+ "y": 1242.1551325597684
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2350 --> 2187-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5658,
+ "y": 1148
+ },
+ {
+ "x": 5646.099275157725,
+ "y": 1123.950618547903
+ },
+ {
+ "x": 5670.099070256312,
+ "y": 1124.0497912549222
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2187 --o 2244-arrow",
+ "name": "connector circle",
+ "x": 4586.200591208251,
+ "y": 1038.2005912082504,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2187 --o 2249-arrow",
+ "name": "connector circle",
+ "x": 5267.2245298643575,
+ "y": 997.1137484164071,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "138 --> 139-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1536,
+ "y": 1096
+ },
+ {
+ "x": 1512,
+ "y": 1108
+ },
+ {
+ "x": 1512,
+ "y": 1084
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "140 --> 141-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1236,
+ "y": 564
+ },
+ {
+ "x": 1211.0413163457217,
+ "y": 573.852111968794
+ },
+ {
+ "x": 1213.1431002323977,
+ "y": 549.9443202578537
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "142 --> 141-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1236,
+ "y": 570
+ },
+ {
+ "x": 1213.3131520632123,
+ "y": 584.3285355390237
+ },
+ {
+ "x": 1210.9250628067084,
+ "y": 560.4476429739841
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "143 --> 144-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1540,
+ "y": 782
+ },
+ {
+ "x": 1516,
+ "y": 794
+ },
+ {
+ "x": 1516,
+ "y": 770
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2971 --> 2976-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5794,
+ "y": 2094
+ },
+ {
+ "x": 5782,
+ "y": 2070
+ },
+ {
+ "x": 5806,
+ "y": 2070
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2465 --+ 140-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 876,
+ "y": 514
+ },
+ {
+ "x": 870.1791449991281,
+ "y": 487.80615249607604
+ },
+ {
+ "x": 893.462565002616,
+ "y": 493.62700749694807
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2491 --> 2465-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 770,
+ "y": 400
+ },
+ {
+ "x": 745.6926257504729,
+ "y": 411.3644866621166
+ },
+ {
+ "x": 746.3239861205905,
+ "y": 387.37279259764824
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2977 --> 2979-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3882,
+ "y": 2154
+ },
+ {
+ "x": 3858,
+ "y": 2166
+ },
+ {
+ "x": 3858,
+ "y": 2142
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "1952 --> 1955-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 2508,
+ "y": 742
+ },
+ {
+ "x": 2484,
+ "y": 754
+ },
+ {
+ "x": 2484,
+ "y": 730
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2981 --> 2983-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4242,
+ "y": 1320
+ },
+ {
+ "x": 4218,
+ "y": 1332
+ },
+ {
+ "x": 4218,
+ "y": 1308
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "1956 --> 1959-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3052,
+ "y": 732
+ },
+ {
+ "x": 3075.721147188839,
+ "y": 719.4577842449817
+ },
+ {
+ "x": 3076.2664609173185,
+ "y": 743.4515882980602
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3239 --> 3240-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3110,
+ "y": 2686
+ },
+ {
+ "x": 3133.9387778785376,
+ "y": 2673.878328758705
+ },
+ {
+ "x": 3134.0606037201587,
+ "y": 2697.878019558053
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2475 --+ 134-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 902,
+ "y": 1010
+ },
+ {
+ "x": 915.5698781468499,
+ "y": 1033.1486156622734
+ },
+ {
+ "x": 891.6230343582912,
+ "y": 1034.745071914844
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2494 --> 2475-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 788,
+ "y": 1124
+ },
+ {
+ "x": 764,
+ "y": 1136
+ },
+ {
+ "x": 764,
+ "y": 1112
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2483 --+ 142-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 876,
+ "y": 624
+ },
+ {
+ "x": 888,
+ "y": 648
+ },
+ {
+ "x": 864,
+ "y": 648
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2493 --> 2483-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 756,
+ "y": 720
+ },
+ {
+ "x": 732,
+ "y": 732
+ },
+ {
+ "x": 732,
+ "y": 708
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2487 --+ 136-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 892,
+ "y": 908
+ },
+ {
+ "x": 880,
+ "y": 884
+ },
+ {
+ "x": 904,
+ "y": 884
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2490 --> 2487-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 758,
+ "y": 834
+ },
+ {
+ "x": 734,
+ "y": 846
+ },
+ {
+ "x": 734,
+ "y": 822
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2244 --> 2498-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4656,
+ "y": 1036
+ },
+ {
+ "x": 4629.246220717769,
+ "y": 1033.9420169782902
+ },
+ {
+ "x": 4641.594118848028,
+ "y": 1013.362186761189
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2347 --> 2499-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4578,
+ "y": 818
+ },
+ {
+ "x": 4551.254231285743,
+ "y": 820.1595962315859
+ },
+ {
+ "x": 4560.224861786178,
+ "y": 797.8991427675461
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2244 --> 2499-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 4626,
+ "y": 874
+ },
+ {
+ "x": 4638,
+ "y": 898
+ },
+ {
+ "x": 4614,
+ "y": 898
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2249 --> 2252-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5410,
+ "y": 990
+ },
+ {
+ "x": 5384.199605092974,
+ "y": 997.3715414020074
+ },
+ {
+ "x": 5388.622529934179,
+ "y": 973.7826089155836
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "201 --> 204-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 128,
+ "y": 1198
+ },
+ {
+ "x": 140,
+ "y": 1222
+ },
+ {
+ "x": 116,
+ "y": 1222
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2349 --> 2253-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5282,
+ "y": 842
+ },
+ {
+ "x": 5255.448743301986,
+ "y": 845.876953411657
+ },
+ {
+ "x": 5262.967683251865,
+ "y": 823.0851666885828
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2249 --> 2253-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 5346,
+ "y": 898
+ },
+ {
+ "x": 5358,
+ "y": 922
+ },
+ {
+ "x": 5334,
+ "y": 922
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2051 --> 2017-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 760,
+ "y": 1618
+ },
+ {
+ "x": 785.1905057909098,
+ "y": 1627.2432904313418
+ },
+ {
+ "x": 767.7196711294723,
+ "y": 1643.6983788915331
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2016 --> 2018-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1140,
+ "y": 1664
+ },
+ {
+ "x": 1116,
+ "y": 1676
+ },
+ {
+ "x": 1116,
+ "y": 1652
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2531 --+ 2144-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3746,
+ "y": 1570
+ },
+ {
+ "x": 3719.42109271873,
+ "y": 1573.6826196835495
+ },
+ {
+ "x": 3727.1065598843984,
+ "y": 1550.9464459851138
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2531 --+ 2175-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3768,
+ "y": 836
+ },
+ {
+ "x": 3763.919877594492,
+ "y": 862.5207956358038
+ },
+ {
+ "x": 3744.335290048052,
+ "y": 848.6483794570756
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2786 --> 2788-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1766,
+ "y": 686
+ },
+ {
+ "x": 1752.5485231068856,
+ "y": 662.7823823488712
+ },
+ {
+ "x": 1776.5032079850344,
+ "y": 661.3082478948312
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2019 --> 2020-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1564,
+ "y": 1670
+ },
+ {
+ "x": 1539.7475429884573,
+ "y": 1681.481216351209
+ },
+ {
+ "x": 1540.2635527121072,
+ "y": 1657.4867642014913
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2021 --> 2022-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 1606,
+ "y": 1454
+ },
+ {
+ "x": 1617.2892358151269,
+ "y": 1478.3424147263672
+ },
+ {
+ "x": 1593.2996097079824,
+ "y": 1477.6368374879216
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2791 --+ 2786-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 952,
+ "y": 280
+ },
+ {
+ "x": 940,
+ "y": 256
+ },
+ {
+ "x": 964,
+ "y": 256
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "321 --> 2793-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 190,
+ "y": 1956
+ },
+ {
+ "x": 166,
+ "y": 1944
+ },
+ {
+ "x": 185.2,
+ "y": 1929.6
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "3058 --o 2883-arrow",
+ "name": "connector circle",
+ "x": 5042.881903101013,
+ "y": 1848.0632955480437,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": null,
+ "stroke": "0c9509",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "201 --> 2813-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 166,
+ "y": 1260
+ },
+ {
+ "x": 155.37176019458406,
+ "y": 1284.6381922761914
+ },
+ {
+ "x": 139.91250229579742,
+ "y": 1266.2803235213821
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2436-arrow",
+ "name": "connector circle",
+ "x": 2205.9821462335735,
+ "y": 856.3878238577374,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2532-arrow",
+ "name": "connector circle",
+ "x": 3438.22111262668,
+ "y": 1089.4798269499029,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2437-arrow",
+ "name": "connector circle",
+ "x": 2206.0522542006343,
+ "y": 882.3240092193436,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2533-arrow",
+ "name": "connector circle",
+ "x": 3499.801907544541,
+ "y": 1120.493704274949,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2789-arrow",
+ "name": "connector circle",
+ "x": 1881.84861353803,
+ "y": 688.9428572251769,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2438-arrow",
+ "name": "connector circle",
+ "x": 2206.0816472665365,
+ "y": 849.4362516283661,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2790-arrow",
+ "name": "connector circle",
+ "x": 1828.9442302073269,
+ "y": 667.3344375196442,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2439-arrow",
+ "name": "connector circle",
+ "x": 2205.9301269046146,
+ "y": 861.283218818022,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2440-arrow",
+ "name": "connector circle",
+ "x": 2205.917331319575,
+ "y": 866,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3688-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3932,
+ "y": 1430
+ },
+ {
+ "x": 3956.199914079815,
+ "y": 1418.4084445163912
+ },
+ {
+ "x": 3955.7931928347757,
+ "y": 1442.4049979736865
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2382-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 686,
+ "y": 2778
+ },
+ {
+ "x": 661.8095979226099,
+ "y": 2789.6113929971475
+ },
+ {
+ "x": 662.1966443558482,
+ "y": 2765.6145141363763
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2450-arrow",
+ "name": "connector circle",
+ "x": 2996.774304765681,
+ "y": 937.8039834669643,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2451-arrow",
+ "name": "connector circle",
+ "x": 2514.0786852726683,
+ "y": 870.3999738102125,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2452-arrow",
+ "name": "connector circle",
+ "x": 2975.971344866005,
+ "y": 893.4719221620784,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2453-arrow",
+ "name": "connector circle",
+ "x": 3013.0873092069705,
+ "y": 938.7545324260818,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2454-arrow",
+ "name": "connector circle",
+ "x": 2976.0934984837972,
+ "y": 900.6542002021604,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2455-arrow",
+ "name": "connector circle",
+ "x": 2976.6220902990126,
+ "y": 921.273537422652,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2973-arrow",
+ "name": "connector circle",
+ "x": 5806.082668680425,
+ "y": 1852,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2974-arrow",
+ "name": "connector circle",
+ "x": 5638.7034148551775,
+ "y": 1809.795014764555,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3678-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3902,
+ "y": 1360
+ },
+ {
+ "x": 3927.800394907026,
+ "y": 1352.6284585979924
+ },
+ {
+ "x": 3923.3774700658214,
+ "y": 1376.2173910844162
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
"dashed": false
},
{
diff --git a/tools/render/fixtures/shapes-framed-reaction.json b/tools/render/fixtures/shapes-framed-reaction.json
new file mode 100644
index 0000000..a3f3e67
--- /dev/null
+++ b/tools/render/fixtures/shapes-framed-reaction.json
@@ -0,0 +1,996 @@
+{
+ "x": 3197.8181818181815,
+ "y": 992.1363636363637,
+ "width": 1036.3636363636365,
+ "height": 647.7272727272727,
+ "shapes": [
+ {
+ "kind": "node",
+ "id": "262-outer",
+ "name": "cytosol",
+ "x": 3197.8181818181815,
+ "y": 992.1363636363637,
+ "w": 1036.3636363636365,
+ "h": 647.7272727272727,
+ "geom": "roundRect",
+ "fill": "e5834a0f",
+ "stroke": "e5834a",
+ "strokeWidth": 4,
+ "label": "cytosol",
+ "fontSize": 16,
+ "fontColor": "e5834a",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "262-inner",
+ "name": "262-inner",
+ "x": 3197.8181818181815,
+ "y": 992.1363636363637,
+ "w": 1036.3636363636365,
+ "h": 647.7272727272727,
+ "geom": "roundRect",
+ "fill": "e5834a0f",
+ "stroke": "e5834a",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 16,
+ "fontColor": "e5834a",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "90-outer",
+ "name": "mitochondrial outer membrane",
+ "x": 3197.8181818181815,
+ "y": 992.1363636363637,
+ "w": 576.1818181818185,
+ "h": 647.7272727272727,
+ "geom": "roundRect",
+ "fill": "e5834a0f",
+ "stroke": "e5834a",
+ "strokeWidth": 4,
+ "label": "mitochondrial outer membrane",
+ "fontSize": 16,
+ "fontColor": "e5834a",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "91-outer",
+ "name": "mitochondrial inner membrane",
+ "x": 3197.8181818181815,
+ "y": 1015,
+ "w": 225.18181818181847,
+ "h": 624.8636363636365,
+ "geom": "roundRect",
+ "fill": "e5834a0f",
+ "stroke": "e5834a",
+ "strokeWidth": 4,
+ "label": "mitochondrial inner membrane",
+ "fontSize": 16,
+ "fontColor": "e5834a",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2823 --- 2828",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4146,
+ "y": 1154
+ },
+ {
+ "x": 4062.0000000000005,
+ "y": 1153.9999999999998
+ },
+ {
+ "x": 4060.9256838294455,
+ "y": 992.1363636363637
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2823 --- 2841",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4188,
+ "y": 1126
+ },
+ {
+ "x": 4188,
+ "y": 992.1363636363637
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2823 --- 2846",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4230,
+ "y": 1166
+ },
+ {
+ "x": 4234.181818181818,
+ "y": 1167.5681818181818
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2823 --- 2851",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4162,
+ "y": 1182
+ },
+ {
+ "x": 4075.9999999999995,
+ "y": 1256
+ },
+ {
+ "x": 3986,
+ "y": 1256
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2823 --- 2981",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4180,
+ "y": 1182
+ },
+ {
+ "x": 4138,
+ "y": 1319.9999999999998
+ },
+ {
+ "x": 4190,
+ "y": 1320
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2823 --| 2244",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4230,
+ "y": 1152
+ },
+ {
+ "x": 4234.181818181818,
+ "y": 1152
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2823 --| 2249",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4188,
+ "y": 1182
+ },
+ {
+ "x": 4188,
+ "y": 1212
+ },
+ {
+ "x": 4234.181818181818,
+ "y": 1211.9130285909946
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2824 --| 2851",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4032.7746107483676,
+ "y": 992.1363636363637
+ },
+ {
+ "x": 4034,
+ "y": 1140
+ },
+ {
+ "x": 3992.387232484355,
+ "y": 1239.0780178943926
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2851 --> 2825",
+ "name": "connector",
+ "points": [
+ {
+ "x": 3986,
+ "y": 1256
+ },
+ {
+ "x": 3986.497855917667,
+ "y": 992.1363636363637
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3374 --+ 2144",
+ "name": "connector",
+ "points": [
+ {
+ "x": 3808,
+ "y": 1472
+ },
+ {
+ "x": 3772,
+ "y": 1560
+ }
+ ],
+ "stroke": "0561a6",
+ "strokeWidth": 8,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3375 --+ 2144",
+ "name": "connector",
+ "points": [
+ {
+ "x": 3656,
+ "y": 1348
+ },
+ {
+ "x": 3636,
+ "y": 1350
+ },
+ {
+ "x": 3756,
+ "y": 1560
+ }
+ ],
+ "stroke": "0561a6",
+ "strokeWidth": 8,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2145 --- 2144",
+ "name": "connector",
+ "points": [
+ {
+ "x": 3686,
+ "y": 1576
+ },
+ {
+ "x": 3764,
+ "y": 1576
+ }
+ ],
+ "stroke": "0561a6",
+ "strokeWidth": 8,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2146 --- 2178",
+ "name": "connector",
+ "points": [
+ {
+ "x": 3952,
+ "y": 1606
+ },
+ {
+ "x": 4011.517906336089,
+ "y": 1639.8636363636365
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2144 --> 2146",
+ "name": "connector",
+ "points": [
+ {
+ "x": 3764,
+ "y": 1576
+ },
+ {
+ "x": 3872,
+ "y": 1576
+ }
+ ],
+ "stroke": "0561a6",
+ "strokeWidth": 8,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2187 --- 2851",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4234.181818181818,
+ "y": 1256.2502876869964
+ },
+ {
+ "x": 4075.9999999999995,
+ "y": 1256
+ },
+ {
+ "x": 3986,
+ "y": 1256
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2982 --- 2981",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4096,
+ "y": 1320
+ },
+ {
+ "x": 4138,
+ "y": 1320
+ },
+ {
+ "x": 4190,
+ "y": 1320
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2981 --> 2983",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4190,
+ "y": 1320
+ },
+ {
+ "x": 4234.181818181818,
+ "y": 1320
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2531 --+ 2144",
+ "name": "connector",
+ "points": [
+ {
+ "x": 3606,
+ "y": 1124
+ },
+ {
+ "x": 3604.0000000000005,
+ "y": 1522
+ },
+ {
+ "x": 3746,
+ "y": 1570
+ }
+ ],
+ "stroke": "0561a6",
+ "strokeWidth": 8,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2531 --+ 2175",
+ "name": "connector",
+ "points": [
+ {
+ "x": 3632,
+ "y": 1028
+ },
+ {
+ "x": 3657.403409090909,
+ "y": 992.1363636363637
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2532",
+ "name": "connector",
+ "points": [
+ {
+ "x": 3197.8181818181815,
+ "y": 1145.8866989990713
+ },
+ {
+ "x": 3462.039594137117,
+ "y": 1099.400525435581
+ }
+ ],
+ "stroke": "001f2580",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": true
+ },
+ {
+ "kind": "edge",
+ "id": "2533",
+ "name": "connector",
+ "points": [
+ {
+ "x": 3197.8181818181815,
+ "y": 1279.0412020412023
+ },
+ {
+ "x": 3522.6758164328735,
+ "y": 1127.4184598977545
+ }
+ ],
+ "stroke": "001f2580",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": true
+ },
+ {
+ "kind": "edge",
+ "id": "3688",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4050,
+ "y": 1432
+ },
+ {
+ "x": 3932,
+ "y": 1430
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3678",
+ "name": "connector",
+ "points": [
+ {
+ "x": 4050,
+ "y": 1406
+ },
+ {
+ "x": 3934,
+ "y": 1366
+ },
+ {
+ "x": 3902,
+ "y": 1360
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2824 --| 2851-arrow",
+ "name": "connector tee",
+ "points": [
+ {
+ "x": 3981.3234472170666,
+ "y": 1234.4312280821314
+ },
+ {
+ "x": 4003.4510177516436,
+ "y": 1243.7248077066538
+ }
+ ],
+ "stroke": "ba1a1a",
+ "strokeWidth": 6,
+ "closed": false,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3374 --+ 2144-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3772,
+ "y": 1560
+ },
+ {
+ "x": 3769.3074997637655,
+ "y": 1524.3243718698902
+ },
+ {
+ "x": 3798.9250023623467,
+ "y": 1536.4406229329463
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 8,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3375 --+ 2144-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3756,
+ "y": 1560
+ },
+ {
+ "x": 3726.2316636985897,
+ "y": 1540.1544424657268
+ },
+ {
+ "x": 3754.0154442465728,
+ "y": 1524.277996438308
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 8,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2144 --> 2146-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3872,
+ "y": 1576
+ },
+ {
+ "x": 3840,
+ "y": 1592
+ },
+ {
+ "x": 3840,
+ "y": 1560
+ }
+ ],
+ "stroke": "0561a6",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "0561a6",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "2531 --+ 2144-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3746,
+ "y": 1570
+ },
+ {
+ "x": 3710.561456958307,
+ "y": 1574.9101595780658
+ },
+ {
+ "x": 3720.8087465125313,
+ "y": 1544.595261313485
+ }
+ ],
+ "stroke": "0c9509",
+ "strokeWidth": 8,
+ "closed": true,
+ "fill": null,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2532-arrow",
+ "name": "connector circle",
+ "x": 3438.22111262668,
+ "y": 1089.4798269499029,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2533-arrow",
+ "name": "connector circle",
+ "x": 3499.801907544541,
+ "y": 1120.493704274949,
+ "w": 24,
+ "h": 24,
+ "geom": "ellipse",
+ "fill": "001f2580",
+ "stroke": "001f2580",
+ "strokeWidth": 0,
+ "label": "",
+ "fontSize": 0,
+ "fontColor": null,
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3688-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3932,
+ "y": 1430
+ },
+ {
+ "x": 3956.199914079815,
+ "y": 1418.4084445163912
+ },
+ {
+ "x": 3955.7931928347757,
+ "y": 1442.4049979736865
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "edge",
+ "id": "3678-arrow",
+ "name": "connector triangle",
+ "points": [
+ {
+ "x": 3902,
+ "y": 1360
+ },
+ {
+ "x": 3927.800394907026,
+ "y": 1352.6284585979924
+ },
+ {
+ "x": 3923.3774700658214,
+ "y": 1376.2173910844162
+ }
+ ],
+ "stroke": "001f25",
+ "strokeWidth": 0,
+ "closed": true,
+ "fill": "001f25",
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2851",
+ "name": "2851",
+ "x": 3971,
+ "y": 1241,
+ "w": 30,
+ "h": 30,
+ "geom": "ellipse",
+ "fill": "001f25",
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 16,
+ "fontColor": "001f25",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2981",
+ "name": "2981",
+ "x": 4175,
+ "y": 1305,
+ "w": 30,
+ "h": 30,
+ "geom": "ellipse",
+ "fill": "001f25",
+ "stroke": "001f25",
+ "strokeWidth": 4,
+ "label": "",
+ "fontSize": 16,
+ "fontColor": "001f25",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2144",
+ "name": "2144",
+ "x": 3748,
+ "y": 1560,
+ "w": 32,
+ "h": 32,
+ "geom": "roundRect",
+ "fill": "effbff",
+ "stroke": "0561a6",
+ "strokeWidth": 6,
+ "label": "",
+ "fontSize": 16,
+ "fontColor": "001f25",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2823",
+ "name": "XIAP",
+ "x": 4151,
+ "y": 1131,
+ "w": 74,
+ "h": 46,
+ "geom": "roundRect",
+ "fill": "001f29",
+ "stroke": "000000",
+ "strokeWidth": 0,
+ "label": "XIAP",
+ "fontSize": 6,
+ "fontColor": "ffffff",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "3374",
+ "name": "GSDMD(1-275):cardiolipin",
+ "x": 3722,
+ "y": 1393,
+ "w": 204,
+ "h": 74,
+ "geom": "rect",
+ "fill": null,
+ "stroke": "000000",
+ "strokeWidth": 0,
+ "label": "GSDMD(1-275):cardiolipin",
+ "fontSize": 12,
+ "fontColor": "ffffff",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "3375",
+ "name": "GSDME:cardiolipin",
+ "x": 3660,
+ "y": 1319,
+ "w": 236,
+ "h": 46,
+ "geom": "rect",
+ "fill": null,
+ "stroke": "000000",
+ "strokeWidth": 0,
+ "label": "GSDME:cardiolipin",
+ "fontSize": 12,
+ "fontColor": "ffffff",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "3674",
+ "name": "Pyroptosis",
+ "x": 4054,
+ "y": 1394,
+ "w": 176,
+ "h": 84,
+ "geom": "rect",
+ "fill": "006782",
+ "stroke": "ffffff",
+ "strokeWidth": 12,
+ "label": "Pyroptosis",
+ "fontSize": 12,
+ "fontColor": "ffffff",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2145",
+ "name": "CYCS",
+ "x": 3599,
+ "y": 1555,
+ "w": 82,
+ "h": 46,
+ "geom": "roundRect",
+ "fill": "001f29",
+ "stroke": "000000",
+ "strokeWidth": 0,
+ "label": "CYCS",
+ "fontSize": 6,
+ "fontColor": "ffffff",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2146",
+ "name": "CYCS",
+ "x": 3877,
+ "y": 1555,
+ "w": 82,
+ "h": 46,
+ "geom": "roundRect",
+ "fill": "001f29",
+ "stroke": "000000",
+ "strokeWidth": 0,
+ "label": "CYCS",
+ "fontSize": 6,
+ "fontColor": "ffffff",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2982",
+ "name": "SEPT4 dimer",
+ "x": 3914,
+ "y": 1301,
+ "w": 176,
+ "h": 46,
+ "geom": "rect",
+ "fill": null,
+ "stroke": "000000",
+ "strokeWidth": 0,
+ "label": "SEPT4 dimer",
+ "fontSize": 12,
+ "fontColor": "ffffff",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2496",
+ "name": "CASP3(1-277) dimer",
+ "x": 4214,
+ "y": 992.1363636363637,
+ "w": 20.181818181818016,
+ "h": 60.86363636363626,
+ "geom": "rect",
+ "fill": null,
+ "stroke": "000000",
+ "strokeWidth": 0,
+ "label": "CASP3(1-277) dimer",
+ "fontSize": 12,
+ "fontColor": "ffffff",
+ "bold": false,
+ "dashed": false
+ },
+ {
+ "kind": "node",
+ "id": "2531",
+ "name": "Activated BAX,BAK oligomers",
+ "x": 3473,
+ "y": 1031,
+ "w": 270,
+ "h": 90,
+ "geom": "roundRect",
+ "fill": null,
+ "stroke": "000000",
+ "strokeWidth": 0,
+ "label": "Activated BAX,BAK oligomers",
+ "fontSize": 12,
+ "fontColor": "ffffff",
+ "bold": false,
+ "dashed": false
+ }
+ ]
+}
diff --git a/tools/render/pptx.mjs b/tools/render/pptx.mjs
index beb3821..3a5ac87 100644
--- a/tools/render/pptx.mjs
+++ b/tools/render/pptx.mjs
@@ -258,7 +258,11 @@ function textBody({ label, fontSize, fontColor, bold, emuPerPx }) {
return (
`${body}` +
`` +
- (colour ? `` : '') +
+ (colour
+ ? `` +
+ (colour.alpha < 1 ? `` : '') +
+ ``
+ : '') +
`${escapeXml(label)}`
);
}
@@ -266,13 +270,17 @@ function textBody({ label, fontSize, fontColor, bold, emuPerPx }) {
/** A node: a preset rectangle, rounded rectangle or ellipse, with its label. */
function nodeShape(shape, id, place, emuPerPx) {
const at = place(shape.x, shape.y, shape.w, shape.h);
+ const stroke =
+ shape.strokeWidth > 0 || !shape.fill
+ ? outline(shape.stroke, shape.strokeWidth, emuPerPx, { dashed: Boolean(shape.dashed) })
+ : '';
return (
`` +
`` +
`` +
`` +
solidFill(shape.fill) +
- outline(shape.stroke, shape.strokeWidth, emuPerPx, { dashed: Boolean(shape.dashed) }) +
+ stroke +
`` +
textBody({ ...shape, emuPerPx }) +
``
@@ -290,6 +298,8 @@ function nodeShape(shape, id, place, emuPerPx) {
* is legal but which PowerPoint handles badly, so both sides have a floor.
*/
function edgeShape(shape, id, place, emuPerPx) {
+ // Closed and filled means an arrowhead; the page hands those over as points
+ // for the same reason it hands over everything else.
const points = (shape.points ?? []).filter(
(point) => Number.isFinite(point?.x) && Number.isFinite(point?.y)
);
@@ -302,14 +312,15 @@ function edgeShape(shape, id, place, emuPerPx) {
const cx = Math.max(1, at.cx);
const cy = Math.max(1, at.cy);
- const path = points
- .map((point, index) => {
- const x = Math.round((point.x - box.x) * emuPerPx);
- const y = Math.round((point.y - box.y) * emuPerPx);
- const pt = ``;
- return index === 0 ? `${pt}` : `${pt}`;
- })
- .join('');
+ const path =
+ points
+ .map((point, index) => {
+ const x = Math.round((point.x - box.x) * emuPerPx);
+ const y = Math.round((point.y - box.y) * emuPerPx);
+ const pt = ``;
+ return index === 0 ? `${pt}` : `${pt}`;
+ })
+ .join('') + (shape.closed ? '' : '');
return (
`` +
@@ -318,11 +329,13 @@ function edgeShape(shape, id, place, emuPerPx) {
`` +
`` +
`${path}` +
- `` +
- outline(shape.stroke, shape.strokeWidth, emuPerPx, {
- dashed: Boolean(shape.dashed),
- extra: shape.arrow ? '' : '',
- }) +
+ `` +
+ solidFill(shape.fill) +
+ // A filled arrowhead has no outline to draw; giving it one at width 0 makes
+ // PowerPoint draw a hairline, which on a small head is most of the head.
+ (shape.strokeWidth > 0 || !shape.fill
+ ? outline(shape.stroke, shape.strokeWidth, emuPerPx, { dashed: Boolean(shape.dashed) })
+ : '') +
``
);
}
diff --git a/tools/render/pptx.spec.mjs b/tools/render/pptx.spec.mjs
index fbe7ffe..acf39a4 100644
--- a/tools/render/pptx.spec.mjs
+++ b/tools/render/pptx.spec.mjs
@@ -96,7 +96,25 @@ const EDGE = {
],
stroke: 'rgb(0,0,0)',
strokeWidth: 1.2,
- arrow: true,
+ closed: false,
+ fill: null,
+ dashed: false,
+};
+
+/** An arrowhead, which the page hands over as a closed, filled polygon. */
+const ARROW = {
+ kind: 'edge',
+ id: 'e1-arrow',
+ name: 'production triangle',
+ points: [
+ { x: 60, y: 20 },
+ { x: 48, y: 26 },
+ { x: 48, y: 14 },
+ ],
+ stroke: '001f25',
+ strokeWidth: 0,
+ closed: true,
+ fill: '001f25',
dashed: false,
};
@@ -207,13 +225,40 @@ describe('a slide built from shapes', () => {
expect((slide.match(//g) ?? []).length).toBe(1);
});
- it('gives a reaction an arrowhead and a plain link none', () => {
- const arrow = open(pptx({ shapes: { ...SHAPES, shapes: [EDGE] } })).slide();
- const plain = open(
- pptx({ shapes: { ...SHAPES, shapes: [{ ...EDGE, arrow: false }] } })
+ it('closes and fills an arrowhead, and leaves a connector open', () => {
+ // OOXML line ends are always filled and always the line's own colour, so an
+ // arrowhead drawn as one cannot be hollow, cannot be a bar, and cannot be
+ // green. The page sends geometry instead; this is the shape of that.
+ const head = open(pptx({ shapes: { ...SHAPES, shapes: [ARROW] } })).slide();
+ expect(head).toContain('');
+ expect(head).toContain('');
+ expect(head, 'a filled head draws no outline of its own').toContain('');
+
+ const line = open(pptx({ shapes: { ...SHAPES, shapes: [EDGE] } })).slide();
+ expect(line).not.toContain('');
+ expect(line).toContain('');
+ });
+
+ it('leaves a hollow arrowhead unfilled and outlined', () => {
+ const slide = open(
+ pptx({
+ shapes: {
+ ...SHAPES,
+ shapes: [{ ...ARROW, fill: null, stroke: '0c9509', strokeWidth: 2 }],
+ },
+ })
).slide();
- expect(arrow).toContain('tailEnd');
- expect(plain).not.toContain('tailEnd');
+ expect(slide).toContain('');
+ expect(slide).toContain('');
+ expect(slide, 'the outline carries the arrowhead colour').toContain('');
+ });
+
+ it('never spells an arrowhead as a line end', () => {
+ // A line end would be the obvious way to draw one and cannot say what the
+ // diagram says: a tee has no line end at all.
+ const slide = open(pptx({ shapes: REAL })).slide();
+ expect(slide).not.toContain('tailEnd');
+ expect(slide).not.toContain('headEnd');
});
it('keeps the diagram square, mapping both axes by one scale', () => {
@@ -376,10 +421,12 @@ describe('a slide built from a payload the page produced', () => {
expect(slide, fill).toContain(``);
}
}
- // And nothing the page coloured may come out unfilled: one noFill per
- // uncoloured node, plus one per edge, and no more.
- const uncoloured = REAL.shapes.filter((shape) => shape.kind === 'edge' || !shape.fill).length;
- expect((slide.match(//g) ?? []).length).toBe(uncoloured);
+ // And nothing the page coloured may come out unfilled. An outline can be
+ // noFill too, so strip the outlines first: what is left is one body fill
+ // per shape, empty exactly where the page sent no colour.
+ const bodies = slide.replace(/][\s\S]*?<\/a:ln>/g, '');
+ const unfilled = REAL.shapes.filter((shape) => !shape.fill).length;
+ expect((bodies.match(//g) ?? []).length).toBe(unfilled);
});
it('keeps every label the page gave it, escaped', () => {
@@ -479,6 +526,68 @@ describe('the slide itself', () => {
});
});
+describe('a payload framed on one event', () => {
+ /**
+ * The same diagram asked for one reaction, which is what `?select=` does.
+ *
+ * Here because framing is where the contract "every shape lies inside the
+ * extent" is easy to break and impossible to notice: an SVG has a viewBox and
+ * simply does not draw what falls outside, so the same payload looks right in
+ * one format and puts objects 31 inches off the side of the slide in another.
+ */
+ const FRAMED = JSON.parse(
+ readFileSync(new URL('./fixtures/shapes-framed-reaction.json', import.meta.url), 'utf8')
+ );
+
+ it('is a frame, not the whole diagram', () => {
+ expect(FRAMED.shapes.length).toBeLessThan(REAL.shapes.length / 4);
+ expect(FRAMED.width).toBeLessThan(REAL.width / 2);
+ });
+
+ it.each([
+ ['framed', () => FRAMED],
+ ['whole', () => REAL],
+ ])('keeps every %s shape inside the extent it declares', (_name, payload) => {
+ const page = payload();
+ const right = page.x + page.width;
+ const bottom = page.y + page.height;
+ // A hair of tolerance: the extent and the geometry are both floats.
+ const slack = 0.5;
+ for (const shape of page.shapes) {
+ const points =
+ shape.kind === 'edge'
+ ? shape.points
+ : [
+ { x: shape.x, y: shape.y },
+ { x: shape.x + shape.w, y: shape.y + shape.h },
+ ];
+ for (const point of points) {
+ expect(point.x, `${shape.name} x`).toBeGreaterThanOrEqual(page.x - slack);
+ expect(point.x, `${shape.name} x`).toBeLessThanOrEqual(right + slack);
+ expect(point.y, `${shape.name} y`).toBeGreaterThanOrEqual(page.y - slack);
+ expect(point.y, `${shape.name} y`).toBeLessThanOrEqual(bottom + slack);
+ }
+ }
+ });
+
+ it('puts no shape past the edge of the slide it is drawn on', () => {
+ const { files, drawn } = open(pptx({ title: 'Framed', shapes: FRAMED }));
+ const [, cx, cy] = //.exec(
+ strFromU8(files['ppt/presentation.xml'])
+ );
+ const placed = [
+ ...drawn().matchAll(//g),
+ ];
+ expect(placed.length).toBeGreaterThan(10);
+ for (const [, x, y, w, h] of placed) {
+ expect(Number(x)).toBeGreaterThanOrEqual(0);
+ expect(Number(y)).toBeGreaterThanOrEqual(0);
+ expect(Number(x) + Number(w)).toBeLessThanOrEqual(Number(cx));
+ expect(Number(y) + Number(h)).toBeLessThanOrEqual(Number(cy));
+ }
+ });
+});
+
describe('the tints the diagram paints behind its glyphs', () => {
it('draws every underlay the page described', () => {
const underlays = REAL.shapes.filter((shape) => shape.name.endsWith('highlight'));
diff --git a/tools/render/service.mjs b/tools/render/service.mjs
index 6f8e3bf..fec8739 100644
--- a/tools/render/service.mjs
+++ b/tools/render/service.mjs
@@ -63,8 +63,15 @@ const CACHE = process.env.RENDER_CACHE || path.resolve('.render-cache');
// does: it keys the disk cache AND is the ETag, so it is the only thing that
// tells a browser its copy is stale. v2 = full-size differenced GIFs; v3 =
// illustrations export as standalone SVG, styles inlined and size written down;
-// v4 = PowerPoint is shapes rather than a picture of them.
-const CACHE_KEY = process.env.RENDER_CACHE_KEY || 'v4';
+// v4 = PowerPoint is shapes rather than a picture of them; v5 = arrowheads are
+// geometry, so a hollow circle and an inhibition bar are no longer both drawn
+// as a filled triangle.
+//
+// v5 exists because v4 was already published and the exporter changed again --
+// the second time in one day that a correct build served a stale file. If you
+// changed anything under tools/render that affects output, this line is part of
+// the change.
+const CACHE_KEY = process.env.RENDER_CACHE_KEY || 'v5';
const CONCURRENCY = Number(process.env.RENDER_CONCURRENCY || 2);
// Generous next to a real render, which is 3-8s, but far short of the two
// minutes a page that never becomes ready would otherwise hold a browser for.