diff --git a/.changeset/good-garlics-act.md b/.changeset/good-garlics-act.md
new file mode 100644
index 000000000..eae7fc1d1
--- /dev/null
+++ b/.changeset/good-garlics-act.md
@@ -0,0 +1,5 @@
+---
+'layerchart': minor
+---
+
+feat: Add Dagre layout component for directed acyclic graphs (DAGs)
diff --git a/.changeset/shaggy-lions-guess.md b/.changeset/shaggy-lions-guess.md
new file mode 100644
index 000000000..e94158aee
--- /dev/null
+++ b/.changeset/shaggy-lions-guess.md
@@ -0,0 +1,5 @@
+---
+'layerchart': patch
+---
+
+fix(Spline): Improve initial data display / transition on non-cartesian charts (ex. hierarchy/graph)
diff --git a/packages/layerchart/package.json b/packages/layerchart/package.json
index 772634096..7b52bdfd3 100644
--- a/packages/layerchart/package.json
+++ b/packages/layerchart/package.json
@@ -80,6 +80,7 @@
   },
   "type": "module",
   "dependencies": {
+    "@dagrejs/dagre": "^1.1.4",
     "@layerstack/svelte-actions": "^0.0.9",
     "@layerstack/svelte-stores": "^0.0.9",
     "@layerstack/tailwind": "^0.0.11",
diff --git a/packages/layerchart/src/lib/components/Dagre.svelte b/packages/layerchart/src/lib/components/Dagre.svelte
new file mode 100644
index 000000000..b9b2c2573
--- /dev/null
+++ b/packages/layerchart/src/lib/components/Dagre.svelte
@@ -0,0 +1,151 @@
+<script module>
+  export type DagreGraphData = {
+    nodes: Array<{ id: string; parent?: string; label?: string | dagre.Label }>;
+    edges: Array<{ source: string; target: string; label?: string }>;
+  };
+
+  export const RankDir = {
+    'top-bottom': 'TB',
+    'bottom-top': 'BT',
+    'left-right': 'LR',
+    'right-left': 'RL',
+  };
+
+  export const Align = {
+    none: undefined,
+    'up-left': 'UL',
+    'up-right': 'UR',
+    'down-left': 'DL',
+    'down-right': 'DR',
+  };
+
+  export const EdgeLabelPosition = {
+    left: 'l',
+    center: 'c',
+    right: 'r',
+  };
+</script>
+
+<script lang="ts">
+  import dagre, { type Edge, type EdgeConfig, type GraphEdge } from '@dagrejs/dagre';
+
+  /** Data of nodes and edges to build graph */
+  export let data: DagreGraphData;
+
+  export let nodes = (d: any) => d.nodes;
+  export let nodeId = (d: any) => d.id;
+  export let edges = (d: any) => d.edges;
+
+  /** Set graph as directed (true, default) or undirected (false), which does not treat the order of nodes in an edge as significant. */
+  export let directed = true;
+
+  /** Allow a graph to have multiple edges between the same pair of nodes */
+  export let multigraph = false;
+
+  /** Allow a graph to have compound nodes - nodes which can be the `parent` of other nodes */
+  export let compound = false;
+
+  /** Type of algorithm to assigns a rank to each node in the input graph */
+  export let ranker: 'network-simplex' | 'tight-tree' | 'longest-path' = 'network-simplex';
+
+  /** Direction for rank nodes */
+  export let direction: keyof typeof RankDir = 'top-bottom';
+
+  /** Alignment for rank nodes */
+  export let align: keyof typeof Align | undefined = undefined;
+
+  /** Number of pixels between each rank in the layout */
+  export let rankSeparation = 50;
+
+  /** Number of pixels that separate nodes horizontally in the layout */
+  export let nodeSeparation = 50;
+
+  /** Number of pixels that separate edges horizontally in the layout */
+  export let edgeSeparation = 10;
+
+  /** Default node width if not defined on node */
+  export let nodeWidth = 100;
+
+  /** Default node height if not defined on node */
+  export let nodeHeight = 50;
+
+  /** Default link label width if not defined on edge */
+  export let edgeLabelWidth = 100;
+
+  /** Default edge label height if not defined on edge */
+  export let edgeLabelHeight = 20;
+
+  /** Default edge label height if not defined on edge */
+  export let edgeLabelPosition: keyof typeof EdgeLabelPosition = 'center';
+
+  /** Default pixels to move the label away from the edge if not defined on edge. Applies only when labelpos is l or r.*/
+  export let edgeLabelOffset = 10;
+
+  /** Filter nodes */
+  export let filterNodes: (nodeId: string, graph: dagre.graphlib.Graph) => boolean = () => true;
+
+  let graph: dagre.graphlib.Graph;
+  $: {
+    let g = new dagre.graphlib.Graph({ directed, multigraph, compound });
+
+    g.setGraph({
+      ranker: ranker,
+      rankdir: RankDir[direction],
+      align: align ? Align[align] : undefined,
+      ranksep: rankSeparation,
+      nodesep: nodeSeparation,
+      edgesep: edgeSeparation,
+    });
+
+    g.setDefaultEdgeLabel(() => {
+      return {};
+    });
+
+    nodes(data).forEach((n: any) => {
+      const id = nodeId(n);
+
+      g.setNode(nodeId(n), {
+        id,
+        label: typeof n.label === 'string' ? n.label : id,
+        width: nodeWidth,
+        height: nodeHeight,
+        ...(typeof n.label === 'object' ? n.label : null),
+      });
+
+      if (n.parent) {
+        g.setParent(id, n.parent);
+      }
+    });
+
+    edges(data).forEach((e: any) => {
+      const { source, target, label, ...rest } = e;
+      g.setEdge(
+        e.source,
+        e.target,
+        label
+          ? {
+              label: label,
+              labelpos: EdgeLabelPosition[edgeLabelPosition],
+              labeloffset: edgeLabelOffset,
+              width: edgeLabelWidth,
+              height: edgeLabelHeight,
+              ...rest,
+            }
+          : {}
+      );
+    });
+
+    g = filterNodes ? g.filterNodes((nodeId) => filterNodes(nodeId, graph)) : graph;
+
+    dagre.layout(g);
+
+    graph = g;
+  }
+
+  $: graphNodes = graph.nodes().map((id) => graph.node(id));
+  $: graphEdges = graph.edges().map((edge) => ({ ...edge, ...graph.edge(edge) })) as Array<
+    Edge & EdgeConfig & GraphEdge // `EdgeConfig` is excluded when inferred from usage
+  >;
+</script>
+
+<slot nodes={graphNodes} edges={graphEdges} />
diff --git a/packages/layerchart/src/lib/components/Spline.svelte b/packages/layerchart/src/lib/components/Spline.svelte
index c9f54e598..bd719d5c9 100644
--- a/packages/layerchart/src/lib/components/Spline.svelte
+++ b/packages/layerchart/src/lib/components/Spline.svelte
@@ -120,8 +120,6 @@
       if (curve) path.curve(curve);
 
       return path(data ?? $contextData);
-    } else {
-      return '';
     }
   }
 
diff --git a/packages/layerchart/src/lib/components/TransformControls.svelte b/packages/layerchart/src/lib/components/TransformControls.svelte
index c933f1121..05951d0d2 100644
--- a/packages/layerchart/src/lib/components/TransformControls.svelte
+++ b/packages/layerchart/src/lib/components/TransformControls.svelte
@@ -1,4 +1,5 @@
 <script lang="ts">
+  import { type ComponentProps } from 'svelte';
   import { Button, Icon, MenuButton, Tooltip } from 'svelte-ux';
   import { cls } from '@layerstack/tailwind';
 
@@ -28,6 +29,7 @@
 
   export let placement: Placement = 'top-right';
   export let orientation: 'horizontal' | 'vertical' = 'vertical';
+  export let size: ComponentProps<Button>['size'] = 'md';
 
   type Actions = 'zoomIn' | 'zoomOut' | 'center' | 'reset' | 'scrollMode';
   export let show: Actions[] = ['zoomIn', 'zoomOut', 'center', 'reset', 'scrollMode'];
@@ -64,7 +66,7 @@
 <!-- svelte-ignore a11y-no-static-element-interactions -->
 <div
   class={cls(
-    'bg-surface-300/50 rounded-full m-1 backdrop-blur z-10 flex',
+    'bg-surface-300/50 border rounded-full m-1 backdrop-blur z-10 flex',
     orientation === 'vertical' && 'flex-col',
     {
       'top-left': 'absolute top-0 left-0',
@@ -89,6 +91,7 @@
       <Button
         icon={mdiMagnifyPlusOutline}
         on:click={() => transform.zoomIn()}
+        {size}
         class="text-surface-content p-2"
       />
     </Tooltip>
@@ -99,6 +102,7 @@
       <Button
         icon={mdiMagnifyMinusOutline}
         on:click={() => transform.zoomOut()}
+        {size}
         class="text-surface-content p-2"
       />
     </Tooltip>
@@ -109,6 +113,7 @@
       <Button
         icon={mdiImageFilterCenterFocus}
         on:click={() => transform.translateCenter()}
+        {size}
         class="text-surface-content p-2"
       />
     </Tooltip>
@@ -119,6 +124,7 @@
       <Button
         icon={mdiArrowULeftTop}
         on:click={() => transform.reset()}
+        {size}
         class="text-surface-content p-2"
       />
     </Tooltip>
@@ -135,6 +141,7 @@
         ]}
         menuProps={{ placement: menuPlacementByOrientationAndPlacement[orientation][placement] }}
         menuIcon={null}
+        {size}
         value={$scrollMode}
         on:change={(e) => transform.setScrollMode(e.detail.value)}
         class="text-surface-content"
diff --git a/packages/layerchart/src/lib/components/index.ts b/packages/layerchart/src/lib/components/index.ts
index 3b86bf86f..9cc0ada9a 100644
--- a/packages/layerchart/src/lib/components/index.ts
+++ b/packages/layerchart/src/lib/components/index.ts
@@ -19,6 +19,7 @@ export { default as Circle } from './Circle.svelte';
 export { default as CircleClipPath } from './CircleClipPath.svelte';
 export { default as ClipPath } from './ClipPath.svelte';
 export { default as ColorRamp } from './ColorRamp.svelte';
+export { default as Dagre } from './Dagre.svelte';
 export { default as Frame } from './Frame.svelte';
 export { default as ForceSimulation } from './ForceSimulation.svelte';
 export { default as GeoCircle } from './GeoCircle.svelte';
diff --git a/packages/layerchart/src/lib/docs/CurveMenuField.svelte b/packages/layerchart/src/lib/docs/CurveMenuField.svelte
index 10bf08ace..2c01e5e71 100644
--- a/packages/layerchart/src/lib/docs/CurveMenuField.svelte
+++ b/packages/layerchart/src/lib/docs/CurveMenuField.svelte
@@ -23,4 +23,11 @@
     });
 </script>
 
-<MenuField label="Curve" {options} bind:value stepper classes={{ menuIcon: 'hidden' }} />
+<MenuField
+  label="Curve"
+  {options}
+  bind:value
+  stepper
+  classes={{ menuIcon: 'hidden' }}
+  {...$$restProps}
+/>
diff --git a/packages/layerchart/src/lib/utils/graph.test.ts b/packages/layerchart/src/lib/utils/graph.test.ts
new file mode 100644
index 000000000..f91db9b71
--- /dev/null
+++ b/packages/layerchart/src/lib/utils/graph.test.ts
@@ -0,0 +1,98 @@
+import { describe, it, expect } from 'vitest';
+import dagre from '@dagrejs/dagre';
+import { ancestors, descendants } from './graph.js';
+
+const exampleGraph = {
+  nodes: [
+    { id: 'A' },
+    { id: 'B' },
+    { id: 'C' },
+    { id: 'D' },
+    { id: 'E' },
+    { id: 'F' },
+    { id: 'G' },
+    { id: 'H' },
+    { id: 'I' },
+  ],
+  edges: [
+    { source: 'A', target: 'B' },
+    { source: 'C', target: 'B' },
+    { source: 'B', target: 'E' },
+    { source: 'B', target: 'F' },
+    { source: 'D', target: 'E' },
+    { source: 'D', target: 'F' },
+    { source: 'E', target: 'H' },
+    { source: 'G', target: 'H' },
+    { source: 'H', target: 'I' },
+  ],
+};
+
+function buildGraph(data: typeof exampleGraph) {
+  const g = new dagre.graphlib.Graph();
+
+  g.setGraph({});
+
+  data.nodes.forEach((n) => {
+    g.setNode(n.id, {
+      label: n.id,
+    });
+  });
+
+  data.edges.forEach((e) => {
+    g.setEdge(e.source, e.target);
+  });
+
+  return g;
+}
+
+describe('accessors', () => {
+  it('start of graph ', () => {
+    const graph = buildGraph(exampleGraph);
+    const actual = ancestors(graph, 'A');
+    expect(actual).length(0);
+  });
+
+  it('middle of graph ', () => {
+    const graph = buildGraph(exampleGraph);
+    const actual = ancestors(graph, 'E');
+    expect(actual).to.have.members(['A', 'B', 'C', 'D']);
+  });
+
+  it('end of graph ', () => {
+    const graph = buildGraph(exampleGraph);
+    const actual = ancestors(graph, 'I');
+    expect(actual).to.have.members(['A', 'B', 'C', 'D', 'E', 'G', 'H']);
+  });
+
+  it('max depth', () => {
+    const graph = buildGraph(exampleGraph);
+    const actual = ancestors(graph, 'H', 2);
+    expect(actual).to.have.members(['B', 'D', 'E', 'G']);
+  });
+});
+
+describe('descendants', () => {
+  it('start of graph ', () => {
+    const graph = buildGraph(exampleGraph);
+    const actual = descendants(graph, 'A');
+    expect(actual).to.have.members(['B', 'E', 'F', 'H', 'I']);
+  });
+
+  it('middle of graph ', () => {
+    const graph = buildGraph(exampleGraph);
+    const actual = descendants(graph, 'E');
+    expect(actual).to.have.members(['H', 'I']);
+  });
+
+  it('end of graph ', () => {
+    const graph = buildGraph(exampleGraph);
+    const actual = descendants(graph, 'I');
+    expect(actual).length(0);
+  });
+
+  it('max depth', () => {
+    const graph = buildGraph(exampleGraph);
+    const actual = descendants(graph, 'B', 2);
+    expect(actual).to.have.members(['E', 'F', 'H']);
+  });
+});
diff --git a/packages/layerchart/src/lib/utils/graph.ts b/packages/layerchart/src/lib/utils/graph.ts
index 6521ecd6d..0d42d3a6e 100644
--- a/packages/layerchart/src/lib/utils/graph.ts
+++ b/packages/layerchart/src/lib/utils/graph.ts
@@ -6,7 +6,8 @@ import type {
   SankeyNode,
   SankeyNodeMinimal,
 } from 'd3-sankey';
-import type { HierarchyLink, hierarchy as d3Hierarchy } from 'd3-hierarchy';
+import type { hierarchy as d3Hierarchy } from 'd3-hierarchy';
+import dagre from '@dagrejs/dagre';
 
 /**
  * Convert CSV rows in format: 'source,target,value' to SankeyGraph
@@ -86,3 +87,45 @@ export function nodesFromLinks<N extends SankeyExtraProperties, L extends Sankey
   }
   return Array.from(nodesByName.values());
 }
+
+/**
+ * Get all upstream predecessors for dagre nodeId
+ */
+export function ancestors(
+  graph: dagre.graphlib.Graph,
+  nodeId: string,
+  maxDepth = Infinity,
+  currentDepth = 0
+): dagre.Node[] {
+  if (currentDepth === maxDepth) {
+    return [];
+  }
+
+  const predecessors = graph.predecessors(nodeId) ?? [];
+  return [
+    ...predecessors,
+    // @ts-expect-error: Types from dagre appear incorrect
+    ...predecessors.flatMap((pId) => ancestors(graph, pId, maxDepth, currentDepth + 1)),
+  ];
+}
+
+/**
+ * Get all downstream descendants for dagre nodeId
+ */
+export function descendants(
+  graph: dagre.graphlib.Graph,
+  nodeId: string,
+  maxDepth = Infinity,
+  currentDepth = 0
+): dagre.Node[] {
+  if (currentDepth === maxDepth) {
+    return [];
+  }
+
+  const predecessors = graph.successors(nodeId) ?? [];
+  return [
+    ...predecessors,
+    // @ts-expect-error: Types from dagre appear incorrect
+    ...predecessors.flatMap((pId) => descendants(graph, pId, maxDepth, currentDepth + 1)),
+  ];
+}
diff --git a/packages/layerchart/src/routes/_NavMenu.svelte b/packages/layerchart/src/routes/_NavMenu.svelte
index 736d8ca2b..449cd5539 100644
--- a/packages/layerchart/src/routes/_NavMenu.svelte
+++ b/packages/layerchart/src/routes/_NavMenu.svelte
@@ -30,7 +30,8 @@
       'Sparkline',
       'Threshold',
     ],
-    'Hierarchy & Graph': ['Pack', 'Partition', 'Sankey', 'Sunburst', 'Tree', 'Treemap'],
+    Hierarchy: ['Pack', 'Partition', 'Sunburst', 'Tree', 'Treemap'],
+    Graph: ['Dagre', 'Sankey'],
     Force: [
       'Beeswarm',
       'CollisionDetection',
diff --git a/packages/layerchart/src/routes/docs/examples/Dagre/+page.svelte b/packages/layerchart/src/routes/docs/examples/Dagre/+page.svelte
new file mode 100644
index 000000000..15a5865e5
--- /dev/null
+++ b/packages/layerchart/src/routes/docs/examples/Dagre/+page.svelte
@@ -0,0 +1,441 @@
+<script lang="ts">
+  import type { ComponentProps } from 'svelte';
+  import { curveBasis, curveLinear } from 'd3-shape';
+  import { cubicOut } from 'svelte/easing';
+  import { slide } from 'svelte/transition';
+  import { cls } from '@layerstack/tailwind';
+
+  import { Chart, Dagre, Group, Rect, Spline, Svg, Text, Tooltip } from 'layerchart';
+  import { Field, MenuField, Switch, Toggle } from 'svelte-ux';
+
+  import Preview from '$lib/docs/Preview.svelte';
+  import DagreControls from './DagreControls.svelte';
+  import TransformControls from 'layerchart/components/TransformControls.svelte';
+
+  export let data;
+
+  let selectedGraphValue: keyof typeof data = 'simple';
+  $: selectedGraph = data[selectedGraphValue];
+
+  let settings = {
+    playground: {
+      ranker: 'network-simplex',
+      direction: 'left-right',
+      align: 'up-left',
+      nodeSeparation: 50,
+      rankSeparation: 50,
+      edgeSeparation: 10,
+      edgeLabelPosition: 'center',
+      edgeLabelOffset: 10,
+      curve: curveBasis,
+      arrow: 'arrow',
+    },
+    simple: {
+      ranker: 'network-simplex',
+      direction: 'left-right',
+      align: 'up-left',
+      nodeSeparation: 50,
+      rankSeparation: 50,
+      edgeSeparation: 10,
+      edgeLabelPosition: 'center',
+      edgeLabelOffset: 10,
+      curve: curveBasis,
+      arrow: 'arrow',
+    },
+    tcpState: {
+      ranker: 'network-simplex',
+      direction: 'top-bottom',
+      align: 'none',
+      nodeSeparation: 50,
+      rankSeparation: 50,
+      edgeSeparation: 10,
+      edgeLabelPosition: 'center',
+      edgeLabelOffset: 10,
+      curve: curveLinear,
+      arrow: 'triangle',
+    },
+    cluster: {
+      ranker: 'network-simplex',
+      direction: 'top-bottom',
+      align: 'none',
+      nodeSeparation: 50,
+      rankSeparation: 50,
+      edgeSeparation: 10,
+      edgeLabelPosition: 'center',
+      edgeLabelOffset: 10,
+      curve: curveLinear,
+      arrow: 'arrow',
+    },
+  } satisfies Record<string, ComponentProps<DagreControls>['settings']>;
+</script>
+
+<h1>Examples</h1>
+
+<Toggle let:on={showSettings} let:toggle>
+  <div class="grid grid-cols-[1fr,256px,auto] gap-2 items-end mb-1">
+    <h2>Playground</h2>
+
+    <MenuField
+      label="Graph"
+      options={[
+        { label: 'Simple', value: 'simple' },
+        { label: 'Medium', value: 'medium' },
+        { label: 'Large', value: 'large' },
+        { label: 'Les Misérables', value: 'miserables' },
+        { label: 'Generated (simple)', value: 'simpleGenerated' },
+        { label: 'Generated (complex)', value: 'complexGenerated' },
+      ]}
+      bind:value={selectedGraphValue}
+      menuIcon=""
+      dense
+      stepper
+    />
+
+    <Field label="Settings" labelPlacement="inset" let:id dense>
+      <Switch checked={showSettings} on:change={toggle} {id} size="md" />
+    </Field>
+  </div>
+
+  <Preview data={selectedGraph}>
+    <div class="flex gap-2">
+      <div class="flex-1 h-[700px] p-4 border rounded overflow-hidden">
+        <Chart
+          data={selectedGraph}
+          transform={{
+            mode: 'canvas',
+            initialScrollMode: 'scale',
+            tweened: { duration: 800, easing: cubicOut },
+          }}
+        >
+          <TransformControls />
+
+          <Svg>
+            <Dagre
+              data={selectedGraph}
+              edges={(d) => d.links}
+              {...settings.playground}
+              let:nodes
+              let:edges
+            >
+              <g class="edges">
+                {#each edges as edge, i (edge.v + '-' + edge.w)}
+                  <Spline
+                    data={edge.points}
+                    x="x"
+                    y="y"
+                    class="stroke-surface-content opacity-30"
+                    tweened
+                    curve={settings.playground.curve}
+                    markerEnd={settings.playground.arrow}
+                  />
+                {/each}
+              </g>
+
+              <g class="nodes">
+                {#each nodes as node (node.label)}
+                  <Group x={node.x - node.width / 2} y={node.y - node.height / 2} tweened>
+                    <Rect
+                      width={node.width}
+                      height={node.height}
+                      class="fill-surface-200 stroke-2 stroke-primary/50"
+                      rx={10}
+                    />
+
+                    <Text
+                      value={node.label}
+                      x={node.width / 2}
+                      y={node.height / 2}
+                      dy={-2}
+                      textAnchor="middle"
+                      verticalAnchor="middle"
+                      class={cls('text-xs pointer-events-none')}
+                    />
+                  </Group>
+                {/each}
+              </g>
+            </Dagre>
+          </Svg>
+        </Chart>
+      </div>
+
+      {#if showSettings}
+        <div transition:slide={{ axis: 'x' }}>
+          <DagreControls bind:settings={settings.playground} />
+        </div>
+      {/if}
+    </div>
+  </Preview>
+</Toggle>
+
+<Toggle let:on={showSettings} let:toggle>
+  <div class="grid grid-cols-[1fr,auto] gap-2 items-end">
+    <h2>Basic</h2>
+
+    <Field label="Settings" labelPlacement="left" class="mb-1" let:id>
+      <Switch checked={showSettings} on:change={toggle} {id} size="md" />
+    </Field>
+  </div>
+
+  <Preview data={data.basic}>
+    <div class="flex gap-2">
+      <div class="flex-1 h-[500px] p-4 border rounded overflow-hidden">
+        <Chart
+          data={data.basic}
+          transform={{
+            mode: 'canvas',
+            initialScrollMode: 'scale',
+            tweened: { duration: 800, easing: cubicOut },
+          }}
+        >
+          <TransformControls />
+
+          <Svg>
+            <Dagre
+              data={data.basic}
+              edges={(d) => d.links}
+              {...settings.simple}
+              let:nodes
+              let:edges
+            >
+              <g class="edges">
+                {#each edges as edge, i (edge.v + '-' + edge.w)}
+                  <Spline
+                    data={edge.points}
+                    x="x"
+                    y="y"
+                    class="stroke-surface-content opacity-30"
+                    tweened
+                    curve={settings.simple.curve}
+                    markerEnd={settings.simple.arrow}
+                  />
+                {/each}
+              </g>
+
+              <g class="nodes">
+                {#each nodes as node (node.label)}
+                  <Group x={node.x - node.width / 2} y={node.y - node.height / 2} tweened>
+                    <Rect
+                      width={node.width}
+                      height={node.height}
+                      class="fill-surface-200 stroke-2 stroke-primary/50"
+                      rx={10}
+                    />
+
+                    <Text
+                      value={node.label}
+                      x={node.width / 2}
+                      y={node.height / 2}
+                      dy={-2}
+                      textAnchor="middle"
+                      verticalAnchor="middle"
+                      class={cls('text-xs pointer-events-none')}
+                    />
+                  </Group>
+                {/each}
+              </g>
+            </Dagre>
+          </Svg>
+        </Chart>
+      </div>
+
+      {#if showSettings}
+        <div transition:slide={{ axis: 'x' }}>
+          <DagreControls bind:settings={settings.simple} />
+        </div>
+      {/if}
+    </div>
+  </Preview>
+</Toggle>
+
+<Toggle let:on={showSettings} let:toggle>
+  <div class="grid grid-cols-[1fr,auto] gap-2 items-end">
+    <h2>TCP State Diagram</h2>
+
+    <Field label="Settings" labelPlacement="left" class="mb-1" let:id>
+      <Switch checked={showSettings} on:change={toggle} {id} size="md" />
+    </Field>
+  </div>
+
+  <!-- https://dagrejs.github.io/project/dagre-d3/latest/demo/tcp-state-diagram.html -->
+
+  <Preview data={data.tcpState}>
+    <div class="flex gap-2">
+      <div class="flex-1 h-[700px] p-4 border rounded overflow-hidden">
+        <Chart
+          data={data.tcpState}
+          transform={{
+            mode: 'canvas',
+            initialScale: 0.75,
+            initialTranslate: { x: 0, y: -110 },
+            initialScrollMode: 'scale',
+            tweened: { duration: 800, easing: cubicOut },
+          }}
+        >
+          <TransformControls />
+
+          <Svg>
+            <Dagre
+              data={data.tcpState}
+              edges={(d) => d.links}
+              {...settings.tcpState}
+              let:nodes
+              let:edges
+            >
+              <g class="edges">
+                {#each edges as edge, i (edge.v + '-' + edge.w)}
+                  <Spline
+                    data={edge.points}
+                    x="x"
+                    y="y"
+                    class="stroke-surface-content opacity-30"
+                    tweened
+                    curve={settings.tcpState?.curve}
+                    markerEnd={settings.tcpState.arrow}
+                  />
+
+                  <!-- Label background -->
+                  <!-- <Rect
+                x={edge.x - edge.width / 2}
+                y={edge.y - edge.height / 2}
+                width={edge.width}
+                height={edge.height}
+                class="fill-surface-100"
+              /> -->
+                  <Text
+                    value={edge.label}
+                    x={edge.x}
+                    y={edge.y}
+                    textAnchor="middle"
+                    verticalAnchor="middle"
+                    class="stroke-2 stroke-surface-100"
+                    {...settings.simple}
+                    tweened
+                  />
+                {/each}
+              </g>
+
+              <g class="nodes">
+                {#each nodes as node (node.label)}
+                  <Group x={node.x - node.width / 2} y={node.y - node.height / 2} tweened>
+                    <Rect
+                      width={node.width}
+                      height={node.height}
+                      class={cls(
+                        'fill-surface-200 stroke-2 stroke-primary/50',
+                        node.label === 'CLOSED' && 'fill-danger/10 stroke-danger/50',
+                        node.label === 'ESTAB' && 'fill-success/10 stroke-success/50'
+                      )}
+                      rx={10}
+                    />
+
+                    <Text
+                      value={node.label}
+                      x={node.width / 2}
+                      y={node.height / 2}
+                      dy={-2}
+                      textAnchor="middle"
+                      verticalAnchor="middle"
+                      class={cls('text-xs pointer-events-none')}
+                    />
+                  </Group>
+                {/each}
+              </g>
+            </Dagre>
+          </Svg>
+        </Chart>
+      </div>
+
+      {#if showSettings}
+        <div transition:slide={{ axis: 'x' }}>
+          <DagreControls bind:settings={settings.tcpState} />
+        </div>
+      {/if}
+    </div>
+  </Preview>
+</Toggle>
+
+<!-- TODO: Match dagre d3 example - https://dagrejs.github.io/project/dagre-d3/latest/demo/clusters.html -->
+<!-- <Toggle let:on={showSettings} let:toggle>
+  <div class="grid grid-cols-[1fr,auto] gap-2 items-end">
+    <h2>Cluster</h2>
+
+    <Field label="Settings" labelPlacement="left" class="mb-1" let:id>
+      <Switch checked={showSettings} on:change={toggle} {id} size="md" />
+    </Field>
+  </div>
+
+  <Preview data={data.cluster}>
+    <div class="flex gap-2">
+      <div class="flex-1 h-[500px] p-4 border rounded overflow-hidden">
+        <Chart
+          data={data.cluster}
+          transform={{
+            mode: 'canvas',
+            initialScrollMode: 'scale',
+            tweened: { duration: 800, easing: cubicOut },
+          }}
+          let:tooltip
+        >
+          <TransformControls />
+
+          <Svg>
+            <Dagre
+              data={data.cluster}
+              edges={(d) => d.links}
+              compound
+              {...settings.cluster}
+              let:nodes
+              let:edges
+            >
+              <g class="edges">
+                {#each edges as edge, i (edge.v + '-' + edge.w)}
+                  <Spline
+                    data={edge.points}
+                    x="x"
+                    y="y"
+                    class="stroke-surface-content opacity-30"
+                    tweened
+                    curve={settings.cluster?.curve}
+                    markerEnd={settings.cluster.arrow}
+                  />
+                {/each}
+              </g>
+
+              <g class="nodes">
+                {#each nodes as node (node.label)}
+                  <Group x={node.x - node.width / 2} y={node.y - node.height / 2} tweened>
+                    <Rect
+                      width={node.width}
+                      height={node.height}
+                      class={cls(
+                        'fill-surface-200 stroke-2 stroke-primary/50 group-hover:fill-primary/10 group-hover:cursor-pointer',
+                        'fill-none'
+                      )}
+                      rx={10}
+                    />
+
+                    <Text
+                      value={node.label}
+                      x={node.width / 2}
+                      y={node.height / 2}
+                      dy={-2}
+                      textAnchor="middle"
+                      verticalAnchor="middle"
+                      class={cls('text-xs pointer-events-none')}
+                    />
+                  </Group>
+                {/each}
+              </g>
+            </Dagre>
+          </Svg>
+        </Chart>
+      </div>
+
+      {#if showSettings}
+        <div transition:slide={{ axis: 'x' }}>
+          <DagreControls bind:settings={settings.cluster} />
+        </div>
+      {/if}
+    </div>
+  </Preview>
+</Toggle> -->
diff --git a/packages/layerchart/src/routes/docs/examples/Dagre/+page.ts b/packages/layerchart/src/routes/docs/examples/Dagre/+page.ts
new file mode 100644
index 000000000..75d386225
--- /dev/null
+++ b/packages/layerchart/src/routes/docs/examples/Dagre/+page.ts
@@ -0,0 +1,61 @@
+import { range } from 'd3-array';
+import { randomInteger } from '@layerstack/utils';
+import { unique } from '@layerstack/utils/array';
+
+import pageSource from './+page.svelte?raw';
+
+export async function load() {
+  const alpha = [...Array(26)].map((val, i) => String.fromCharCode(i + 65));
+
+  function getRandomDownstreamIds(index: number) {
+    return unique(range(randomInteger(1, 3)).map(() => randomInteger(index + 1, 25)));
+  }
+
+  const simpleGenerated = {
+    nodes: alpha.map((a) => ({
+      id: a,
+    })),
+    links: alpha.flatMap((a, i) => {
+      if (i === 25) {
+        return [];
+      } else {
+        const randomDownstreamId = randomInteger(i + 1, 25);
+        const edge = { source: a, target: alpha[randomDownstreamId] };
+        return [edge];
+      }
+    }),
+  };
+
+  const complexGenerated = {
+    nodes: alpha.map((a) => ({
+      id: a,
+    })),
+    links: alpha.flatMap((a, i) => {
+      if (i === 25) {
+        return [];
+      } else {
+        return getRandomDownstreamIds(i).map((id) => {
+          return { source: a, target: alpha[id] };
+        });
+      }
+    }),
+  };
+
+  return {
+    basic: await fetch('/data/examples/graph/basic.json').then((r) => r.json()),
+    simple: await fetch('/data/examples/graph/simple.json').then((r) => r.json()),
+    complex: await fetch('/data/examples/graph/complex.json').then((r) => r.json()),
+    miserables: await fetch('/data/examples/graph/miserables.json').then((r) => r.json()),
+    tcpState: await fetch('/data/examples/graph/tcp-state.json').then((r) => r.json()),
+    cluster: await fetch('/data/examples/graph/cluster.json').then((r) => r.json()),
+    medium: await fetch('/data/examples/graph/dag-medium.json').then((r) => r.json()),
+    large: await fetch('/data/examples/graph/dag-large.json').then((r) => r.json()),
+    simpleGenerated,
+    complexGenerated,
+
+    meta: {
+      pageSource,
+      related: ['components/Dagre', 'components/Link'],
+    },
+  };
+}
diff --git a/packages/layerchart/src/routes/docs/examples/Dagre/DagreControls.svelte b/packages/layerchart/src/routes/docs/examples/Dagre/DagreControls.svelte
new file mode 100644
index 000000000..b8d17c661
--- /dev/null
+++ b/packages/layerchart/src/routes/docs/examples/Dagre/DagreControls.svelte
@@ -0,0 +1,151 @@
+<script lang="ts">
+  import type { ComponentProps } from 'svelte';
+  import { MenuField } from 'svelte-ux';
+  import { curveLinear } from 'd3-shape';
+  import { cls } from '@layerstack/tailwind';
+
+  import type Dagre from '$lib/components/Dagre.svelte';
+  import type Spline from '$lib/components/Spline.svelte';
+  import CurveMenuField from '$lib/docs/CurveMenuField.svelte';
+
+  type DagreProps = ComponentProps<Dagre>;
+
+  export let settings = {
+    ranker: 'network-simplex' as DagreProps['ranker'],
+    direction: 'left-right' as DagreProps['direction'],
+    align: 'up-left' as DagreProps['align'],
+    rankSeparation: 50 as DagreProps['rankSeparation'],
+    nodeSeparation: 50 as DagreProps['nodeSeparation'],
+    edgeSeparation: 10 as DagreProps['rankSeparation'],
+    edgeLabelPosition: 'center' as DagreProps['edgeLabelPosition'],
+    edgeLabelOffset: 10 as DagreProps['edgeLabelOffset'],
+    curve: curveLinear as ComponentProps<CurveMenuField>['value'],
+    arrow: 'arrow' as ComponentProps<Spline>['marker'],
+  };
+</script>
+
+<div class={cls('grid gap-2', $$props.class)}>
+  <MenuField
+    label="Ranker"
+    options={[
+      { label: 'Network-Simplex', value: 'network-simplex' },
+      { label: 'Tight tree', value: 'tight-tree' },
+      { label: 'Longest path', value: 'longest-path' },
+    ]}
+    bind:value={settings.ranker}
+    menuIcon=""
+    stepper
+    dense
+  />
+
+  <MenuField
+    label="Direction"
+    options={[
+      { label: 'Top → Bottom', value: 'top-bottom' },
+      { label: 'Bottom → Top', value: 'bottom-top' },
+      { label: 'Left → Right', value: 'left-right' },
+      { label: 'Right → Left', value: 'right-left' },
+    ]}
+    bind:value={settings.direction}
+    menuIcon=""
+    stepper
+    dense
+  />
+
+  <MenuField
+    label="Align"
+    options={[
+      { label: 'None', value: 'none' },
+      { label: 'Up / Left', value: 'up-left' },
+      { label: 'Up / Right', value: 'up-right' },
+      { label: 'Down / Left', value: 'down-left' },
+      { label: 'Down / Right', value: 'down-right' },
+    ]}
+    bind:value={settings.align}
+    menuIcon=""
+    stepper
+    dense
+  />
+
+  <MenuField
+    label="Rank separation"
+    options={[
+      { label: 'Compact', value: 10 },
+      { label: 'Default', value: 50 },
+      { label: 'Comfortable', value: 100 },
+    ]}
+    bind:value={settings.rankSeparation}
+    menuIcon=""
+    stepper
+    dense
+  />
+
+  <MenuField
+    label="Node separation"
+    options={[
+      { label: 'Compact', value: 10 },
+      { label: 'Default', value: 50 },
+      { label: 'Comfortable', value: 100 },
+    ]}
+    bind:value={settings.nodeSeparation}
+    menuIcon=""
+    stepper
+    dense
+  />
+
+  <MenuField
+    label="Edge separation"
+    options={[
+      { label: 'Compact', value: 5 },
+      { label: 'Default', value: 10 },
+      { label: 'Comfortable', value: 20 },
+    ]}
+    bind:value={settings.edgeSeparation}
+    menuIcon=""
+    stepper
+    dense
+  />
+
+  <MenuField
+    label="Edge label position"
+    options={[
+      { label: 'Left', value: 'left' },
+      { label: 'Center', value: 'center' },
+      { label: 'Right', value: 'right' },
+    ]}
+    bind:value={settings.edgeLabelPosition}
+    menuIcon=""
+    stepper
+    dense
+  />
+
+  <MenuField
+    label="Edge label offset"
+    options={[
+      { label: 'Compact', value: 5 },
+      { label: 'Default', value: 10 },
+      { label: 'Comfortable', value: 20 },
+    ]}
+    bind:value={settings.edgeLabelOffset}
+    menuIcon=""
+    stepper
+    dense
+  />
+
+  <CurveMenuField label="Curve style" bind:value={settings.curve} dense />
+  <MenuField
+    label="Arrow / Marker"
+    options={[
+      { label: 'arrow', value: 'arrow' },
+      { label: 'triangle', value: 'triangle' },
+      { label: 'circle', value: 'circle' },
+      { label: 'circle-stroke', value: 'circle-stroke' },
+      { label: 'dot', value: 'dot' },
+      { label: 'line', value: 'line' },
+    ]}
+    bind:value={settings.arrow}
+    menuIcon=""
+    stepper
+    dense
+  />
+</div>
diff --git a/packages/layerchart/static/data/examples/graph/basic.json b/packages/layerchart/static/data/examples/graph/basic.json
new file mode 100644
index 000000000..05f366664
--- /dev/null
+++ b/packages/layerchart/static/data/examples/graph/basic.json
@@ -0,0 +1,24 @@
+{
+  "nodes": [
+    { "id": "A" },
+    { "id": "B" },
+    { "id": "C" },
+    { "id": "D" },
+    { "id": "E" },
+    { "id": "F" },
+    { "id": "G" },
+    { "id": "H" },
+    { "id": "I" }
+  ],
+  "links": [
+    { "source": "A", "target": "B" },
+    { "source": "C", "target": "B" },
+    { "source": "B", "target": "E" },
+    { "source": "B", "target": "F" },
+    { "source": "D", "target": "E" },
+    { "source": "D", "target": "F" },
+    { "source": "E", "target": "H" },
+    { "source": "G", "target": "H" },
+    { "source": "H", "target": "I" }
+  ]
+}
diff --git a/packages/layerchart/static/data/examples/graph/cluster.json b/packages/layerchart/static/data/examples/graph/cluster.json
new file mode 100644
index 000000000..ea37e6b19
--- /dev/null
+++ b/packages/layerchart/static/data/examples/graph/cluster.json
@@ -0,0 +1,22 @@
+{
+  "nodes": [
+    { "id": "A" },
+    { "id": "B", "parent": "top_group" },
+    { "id": "C", "parent": "bottom_group" },
+    { "id": "D", "parent": "bottom_group" },
+    { "id": "E", "parent": "bottom_group" },
+    { "id": "F", "parent": "bottom_group" },
+    { "id": "G" },
+    { "id": "group" },
+    { "id": "top_group", "parent": "group" },
+    { "id": "bottom_group", "parent": "group" }
+  ],
+  "links": [
+    { "source": "A", "target": "B" },
+    { "source": "B", "target": "C" },
+    { "source": "B", "target": "D" },
+    { "source": "B", "target": "E" },
+    { "source": "B", "target": "F" },
+    { "source": "B", "target": "G" }
+  ]
+}
diff --git a/packages/layerchart/static/data/examples/graph/dag-large.json b/packages/layerchart/static/data/examples/graph/dag-large.json
new file mode 100644
index 000000000..2ebb3795e
--- /dev/null
+++ b/packages/layerchart/static/data/examples/graph/dag-large.json
@@ -0,0 +1,1859 @@
+{
+  "nodes": [
+    { "id": "0", "name": "1c22f73f2cc93f164283d9e762bced68" },
+    { "id": "1", "name": "03f76604756468de62f78e91c917bc9e" },
+    { "id": "2", "name": "00ad68f5c7cc1e82827eecf7a336fffb" },
+    { "id": "3", "name": "dbba63781f11ff411b3d5bae7ab58377" },
+    { "id": "4", "name": "f9e08b1fbf80d89ba8717721976c4e6f" },
+    { "id": "5", "name": "0e6ff806fc4a4399243522e116eb44ad" },
+    { "id": "6", "name": "d22c79061b363f5d6d25f8f29043c048" },
+    { "id": "7", "name": "ae131915396ed2f27752c043e123897e" },
+    { "id": "8", "name": "4b5d6ab6e3f422da578fe8ff044e35dd" },
+    { "id": "9", "name": "d9d5ee901fa0cbca611e8bfa490f5144" },
+    { "id": "10", "name": "d73b517b730d0b13e78ee72155a1861b" },
+    { "id": "11", "name": "a32a2af438ecdfdb7d89183bee1f1802" },
+    { "id": "12", "name": "94349049cb07b76538eb3fb4c1bb84a6" },
+    { "id": "13", "name": "44e21c5260ddb470e3854fc38403c45b" },
+    { "id": "14", "name": "8d28ea2b1c25694ca35399cc5fe6c317" },
+    { "id": "15", "name": "9533033056c4191d6d22979945246510" },
+    { "id": "16", "name": "89d1f92186c667db753a4d64a86a2908" },
+    { "id": "17", "name": "c5d0c5b6f82e286f1eb79bf0569e4614" },
+    { "id": "18", "name": "e51dcd266a702305db0653b139ebfdc2" },
+    { "id": "19", "name": "eceb5d51454334aa64f4ed5e560f9f7f" },
+    { "id": "20", "name": "76de00119a2127df4faecd5be49b3fe7" },
+    { "id": "21", "name": "46b9e6f0db1020302f6b52018023950a" },
+    { "id": "22", "name": "d2996082c1057d8c2b5e8b33ba1940fa" },
+    { "id": "23", "name": "41acf2dc58bd53bdd6258b5911077d6d" },
+    { "id": "24", "name": "03a0d5e5646bfe60fce679a87ef4cd34" },
+    { "id": "25", "name": "f8842d7dab501f9820d7f12c3bc00dd4" },
+    { "id": "26", "name": "afd0a1c912401320948956d1a7f9ee14" },
+    { "id": "27", "name": "d312ffbfb5b6d27da93722ef6f649e0a" },
+    { "id": "28", "name": "a0f7ca2b7da51083c6a07492b53df54d" },
+    { "id": "29", "name": "3718328db137d699c7b3425d20e96334" },
+    { "id": "30", "name": "2852f697a9f8581725c6fc6a5472a2e5" },
+    { "id": "31", "name": "aeda118711cca8b7c87b113f0bc29139" },
+    { "id": "32", "name": "fefb65aa1a38b0e3c0d1053609ebff99" },
+    { "id": "33", "name": "7f48ad52462c162afd1f9b7f4e94a2e1" },
+    { "id": "34", "name": "1cba1a6455efb4392487836c65f3ac72" },
+    { "id": "35", "name": "8dad532d0d1f8252845218fed998183c" },
+    { "id": "36", "name": "0b78491fe5109a771bfb5a7383df9bd7" },
+    { "id": "37", "name": "5dc3a1ffd9333b3ee9926d8ab3a9cf71" },
+    { "id": "38", "name": "77960fc96162cf7b1d2aaa1e1dfd506b" },
+    { "id": "39", "name": "dc51a7d438ed5e023a4aa7347e6de8dc" },
+    { "id": "40", "name": "95a1446a7120e4af5c0c8878abb7e6d2" },
+    { "id": "41", "name": "94052b0ee26fa4979fd25bf77b2ce611" },
+    { "id": "42", "name": "554208e1618d0aedf37387eda5ff17b0" },
+    { "id": "43", "name": "026bad66d0823629aeeb12abadda82aa" },
+    { "id": "44", "name": "f6f44ae6ee95a1dd4580df8ec1bc9a76" },
+    { "id": "45", "name": "e5638bdcd9ac7044e0b06883937b1373" },
+    { "id": "46", "name": "73e6138d290996cf6d12cb654d5fb1f1" },
+    { "id": "47", "name": "429c84849797c842062ecea402a8e4c4" },
+    { "id": "48", "name": "a934dfb0a262a799bcb126c935800320" },
+    { "id": "49", "name": "6bc3154245f5841ec399420bfa6af57a" },
+    { "id": "50", "name": "9353587f1aff8606f2357d9f6fd007ff" },
+    { "id": "51", "name": "32b9643eab750b5d9ecc50c71b14c3bf" },
+    { "id": "52", "name": "3608ee2da8bf0ff27b124e7b9d68f32a" },
+    { "id": "53", "name": "86baf53995d9f79f2e0dea8894252514" },
+    { "id": "54", "name": "e89b99165131558af8e9447879c530ac" },
+    { "id": "55", "name": "94425e46d9e82868322d09a66bdda3e4" },
+    { "id": "56", "name": "b78af2afda8be0c0d56adbb913c1a2d2" },
+    { "id": "57", "name": "a322566846461859c44229426fbdd8ba" },
+    { "id": "58", "name": "b2e2e8486229e316fbe8a457710c288c" },
+    { "id": "59", "name": "8bb7afb333d0e4b53560a856f5cda8ef" },
+    { "id": "60", "name": "463b44b79fedae0025ece436695e407d" },
+    { "id": "61", "name": "a315911defc5bcff13389f2c3ef834a1" },
+    { "id": "62", "name": "25bc1c203366fcc40fbf2394d5154b50" },
+    { "id": "63", "name": "5c6d383c57f46682cf9962704084ee03" },
+    { "id": "64", "name": "062d5c614d8fc26746bd5e5e9b8ea9e7" },
+    { "id": "65", "name": "fc14f1c2b399803e497827eed68d7779" },
+    { "id": "66", "name": "b7da8201493a56053c800eb57299e796" },
+    { "id": "67", "name": "338593eea9b5684639faaf8c500f0d2c" },
+    { "id": "68", "name": "040c74e89644cd7ce27ca609652112d7" },
+    { "id": "69", "name": "ea258e19d23517d4710950d7c94388af" },
+    { "id": "70", "name": "d10f51b7d18f86b30403c449ad0c5d66" },
+    { "id": "71", "name": "7a5d4244f2966079eb44df26b37b3ef9" },
+    { "id": "72", "name": "eeae6b00aaba1b7788ee4a6383bbf227" },
+    { "id": "73", "name": "56af64201081c0cf595ce03a38b20238" },
+    { "id": "74", "name": "bc6fb262bbe122374136684aadcd6613" },
+    { "id": "75", "name": "8aa4969b900749268b911edaf1d3e4ac" },
+    { "id": "76", "name": "32d43b96aca27ed885f9cc9819b190f1" },
+    { "id": "77", "name": "328c876e4c489aee32fddd7bd21b48ee" },
+    { "id": "78", "name": "357b28f176fa44566cd2937494b4117d" },
+    { "id": "79", "name": "0c5423ead9bc125eee75d900c59d2ebe" },
+    { "id": "80", "name": "6a11e6045d5311a5856568346fca6ff9" },
+    { "id": "81", "name": "8c3269c8b81f0a4cda1d42ef7e2b62f2" },
+    { "id": "82", "name": "80b40d324e115de9d11f288af4794570" },
+    { "id": "83", "name": "0ccb7b288c800cb57ad06595ee3efb48" },
+    { "id": "84", "name": "17c740181296e2e2f4733a4a80f490c4" },
+    { "id": "85", "name": "7fc7a596fc8078a2153253a522a27dea" },
+    { "id": "86", "name": "f63db9d41f068fe47c175637cd089e89" },
+    { "id": "87", "name": "f145eeb73f1d5e446508dbc2b2bbc8b6" },
+    { "id": "88", "name": "68f802bd1a0df66548c52df8a2f8bd71" },
+    { "id": "89", "name": "61201e1109b36ddced1901a89fdd83d5" },
+    { "id": "90", "name": "7e0a00244e129a260c2d00efcb137ab7" },
+    { "id": "91", "name": "7e0a00244e129a260c2d00efcb137ab7" },
+    { "id": "92", "name": "30caac1b1c2d53830f27d4f0ea73c242" },
+    { "id": "93", "name": "14511f2f5564650d129ca7cabc333278" },
+    { "id": "94", "name": "8ec7ae8aa8f007f5e62751e924b07f56" },
+    { "id": "95", "name": "aa78ff7a707836e35aca9cf37c400ac2" },
+    { "id": "96", "name": "aa78ff7a707836e35aca9cf37c400ac2" },
+    { "id": "97", "name": "e0d89d3b4f23d4f38e5f062b5a97651a" },
+    { "id": "98", "name": "e0d89d3b4f23d4f38e5f062b5a97651a" },
+    { "id": "99", "name": "14343966a1d7dce7526e57cf2206d19d" },
+    { "id": "100", "name": "4cab53ffca49159385612f2870f0037d" },
+    { "id": "101", "name": "acbde0c28966c2b4a8d77544bfea76d5" },
+    { "id": "102", "name": "a8d19aa979ed9541cb199908fdd4afc0" },
+    { "id": "103", "name": "593c2ce3452ed8df09e0435aefd18bd8" },
+    { "id": "104", "name": "ce90135cb880ca5ef87c83a3ad4ac864" },
+    { "id": "105", "name": "0f624d97c4b0ccb0ced16d55c95f40ad" },
+    { "id": "106", "name": "257dd940fb92f09b8ae745ad92af84ae" },
+    { "id": "107", "name": "4b3a6218bb3e3a7303e8a171a60fcf92" },
+    { "id": "108", "name": "3f1090879b83df4c820e0f9ce45645de" },
+    { "id": "109", "name": "e0323a9039add2978bf5b49550572c7c" },
+    { "id": "110", "name": "159a360043681b5483450ff467a249c9" },
+    { "id": "111", "name": "59141f4ba3d32e773065449dca08fb04" },
+    { "id": "112", "name": "21b8735d8a7a218da89a7fb174c792f3" },
+    { "id": "113", "name": "21b8735d8a7a218da89a7fb174c792f3" },
+    { "id": "114", "name": "06e264d656e98937112856db5e7f7c3e" },
+    { "id": "115", "name": "eb81adcc4edfeccb1ba0f16dfe1a737f" },
+    { "id": "116", "name": "08a2d92fd3df9c4bc76df21fd53ed42e" },
+    { "id": "117", "name": "fb7dba2eac65e3d65aad11cdd145aab0" },
+    { "id": "118", "name": "35ea51baf1fe7f0142ad5f950855dde0" },
+    { "id": "119", "name": "0a2ca52fb6c685c9c2db4fb22b012930" },
+    { "id": "120", "name": "bb5b2ae1f13372e0f31c9c51c90e1537" },
+    { "id": "121", "name": "f7ac7c3e53538c532d50fa9c41c59f5c" },
+    { "id": "122", "name": "d649c565bb540fb2eefb6c0b539d6242" },
+    { "id": "123", "name": "8bdba20fbf947deb51bb901d81013b4d" },
+    { "id": "124", "name": "ce6fdef565eeecf14ab38d83643b922d" },
+    { "id": "125", "name": "962a845876a1c5ae556cf3649effd23a" },
+    { "id": "126", "name": "ce5606835af24a6204e9ede8aae878d3" },
+    { "id": "127", "name": "c7b4fa30e4dc5d854bac9eca79e57e41" },
+    { "id": "128", "name": "4d236d9a2d102c5fe6ad1c50da4bec50" },
+    { "id": "129", "name": "b475bec99d5e6871eeec5f652c872e88" },
+    { "id": "130", "name": "86bc8118f38fa23912328fb3bb0265fa" },
+    { "id": "131", "name": "c3eef34d092ed60c3b2791814511903a" },
+    { "id": "132", "name": "f4c1af088d430615af64e45e5398da90" },
+    { "id": "133", "name": "59da411f99f66c223836cb98f7eba556" },
+    { "id": "134", "name": "23a343167200d7d3699a974a824f8fe6" },
+    { "id": "135", "name": "af6ebfc0beaf0e7988f875c7e67acd07" },
+    { "id": "136", "name": "874e62633a94fd4fd401ac70b0aa20dd" },
+    { "id": "137", "name": "88a889bccf8d6becb740554d8fdcb885" },
+    { "id": "138", "name": "f263ce8e8a316f812e8fbb85b04162c2" },
+    { "id": "139", "name": "ea3f11ede195849ca4168c815023f183" },
+    { "id": "140", "name": "b62cd28a67f00cc7c6d1ac536c5416e1" },
+    { "id": "141", "name": "fed7cb71238fdd8278862599f5cac297" },
+    { "id": "142", "name": "02d1228ea357fa8b7e4ffbd1e23ad0f9" },
+    { "id": "143", "name": "70074cb47ebd40410ea1458f81c2c0ce" },
+    { "id": "144", "name": "b902eeec7fc207ee60c25e8ce968c464" },
+    { "id": "145", "name": "7b240bccc0697deddc8fda79b8901039" },
+    { "id": "146", "name": "95483d507cf81106d9fa2107d8358ea0" },
+    { "id": "147", "name": "16c2d4b559ef09c6b0a7ee9bcd658de6" },
+    { "id": "148", "name": "fac302505ffff6f9d267c3d8406baddc" },
+    { "id": "149", "name": "51c3fbe0170e433dd010f9b8634f1c93" },
+    { "id": "150", "name": "e41fad42ce43492fd3ec1aca019866d8" },
+    { "id": "151", "name": "af15d11229bb0dee2b5d037bc92fb7ff" },
+    { "id": "152", "name": "b54dbbc002e9e7cf4507b390989bfe86" },
+    { "id": "153", "name": "1202259476e182258951edcbce2eaf5f" },
+    { "id": "154", "name": "a0f298746c3f5760b6a2b5f128081c88" },
+    { "id": "155", "name": "1dae544a125c8f47bb4cbf14447abd1f" },
+    { "id": "156", "name": "5c24d388073108311911127c1109504f" },
+    { "id": "157", "name": "7a311f9d6739d6d545a037372740a69e" },
+    { "id": "158", "name": "f8360bc69b9fbdb5ab12a7c8b4c5065d" },
+    { "id": "159", "name": "979d34e9a49eac62c0e8508d33fd715f" },
+    { "id": "160", "name": "c10f77963a2b21079156a0e5c5a4bb3c" },
+    { "id": "161", "name": "9dddf2a4f7d94594ec2ea98407a410e1" },
+    { "id": "162", "name": "204151369b0775e8003dda9f100dccc8" },
+    { "id": "163", "name": "c632fb3e90eb91a3b99db7e58c26a132" },
+    { "id": "164", "name": "fe5fa5500fa143b49753d1b8085c8f88" },
+    { "id": "165", "name": "4733f44d556ab0d67e7e14623d8ecf11" },
+    { "id": "166", "name": "4534bbf61c6f0ce20b6aba2543a2b689" },
+    { "id": "167", "name": "b4a4d45741c41ff5ba0f03738f97cb72" },
+    { "id": "168", "name": "a219d952c828c6dfd3c9e7465f0d29c4" },
+    { "id": "169", "name": "f5fdda08877f91406e8f144cda8337dc" },
+    { "id": "170", "name": "70106d0d821513f45702b7d25664ab7c" },
+    { "id": "171", "name": "07213a0161f52846ab198be103b5ab43" },
+    { "id": "172", "name": "1928c4acf185a7213d452963d360cbb4" },
+    { "id": "173", "name": "e673563d284ce1880ea3c79a1bf1d6e4" },
+    { "id": "174", "name": "e673563d284ce1880ea3c79a1bf1d6e4" },
+    { "id": "175", "name": "e673563d284ce1880ea3c79a1bf1d6e4" },
+    { "id": "176", "name": "ba1c79ef089f797e5261e60712a68010" },
+    { "id": "177", "name": "ba1c79ef089f797e5261e60712a68010" },
+    { "id": "178", "name": "108bbd9ea6ff1df28819a51e1a1d9dd7" },
+    { "id": "179", "name": "00f15f3ee321ac9bb6e87995f6661d48" },
+    { "id": "180", "name": "188b02f3db7cf2cba6d4c266f6a9a9ef" },
+    { "id": "181", "name": "cdf8e39ded05cc78f28c1ce7758920d8" },
+    { "id": "182", "name": "3f5e26f2d3f0b8c5003610f03bc8eb5b" },
+    { "id": "183", "name": "d5f51a6b3d05a2651e100f6a985ae930" },
+    { "id": "184", "name": "86c5bf13ff5be3da17d5e0a2b094757b" },
+    { "id": "185", "name": "86c5bf13ff5be3da17d5e0a2b094757b" },
+    { "id": "186", "name": "954a1536256725886a2e665e96137788" },
+    { "id": "187", "name": "35e5e04846d4be6087d27f52679f5515" },
+    { "id": "188", "name": "35e5e04846d4be6087d27f52679f5515" },
+    { "id": "189", "name": "be123bf97c6ee41cbab92c5c124eb17b" },
+    { "id": "190", "name": "bb2c3c9445c43c117faa4c5ae67f9714" },
+    { "id": "191", "name": "de3b4247b8a568ecfcd6619a568b6cea" },
+    { "id": "192", "name": "d13478fdc8d0b9a9a8ca45b3d3bd4aab" },
+    { "id": "193", "name": "c093d1adfc3901dc239444d45061f26a" },
+    { "id": "194", "name": "82acbce6db58682ce016453c696d9636" },
+    { "id": "195", "name": "c7739296d1cdb9748348bee070aa3d19" },
+    { "id": "196", "name": "9a4b4a1dc92e0276d14d7dd0f145306a" },
+    { "id": "197", "name": "faa17f9ec25ea6c7f6f963bd352808f5" },
+    { "id": "198", "name": "1d928c319af039b8ce4303ae11e9d4d8" },
+    { "id": "199", "name": "8684147451a6cc3b92142c6f4b78e61c" },
+    { "id": "200", "name": "b53d991e7442c1bd1c3ab4d62f0e7519" },
+    { "id": "201", "name": "889f73f4c8c315bc9d530967e82a57f4" },
+    { "id": "202", "name": "85ed998c9203767af5ec409f07cdfcab" },
+    { "id": "203", "name": "7494fe2c0f49924c0d543d1bb52225e2" },
+    { "id": "204", "name": "8a5116ceba99299fa224c58377419a7a" },
+    { "id": "205", "name": "76fddcb1a40d685e182bba8a3df83483" },
+    { "id": "206", "name": "8af643b4958414c857523ab128a59034" },
+    { "id": "207", "name": "7ed39e30114e9ee037784c176584456d" },
+    { "id": "208", "name": "d4467da3853ebbe0254e476463e93a8f" },
+    { "id": "209", "name": "f82084926fe3f17b1056520cf3144a76" },
+    { "id": "210", "name": "12c44fd3a485931f4faf5ebd7e505ad3" },
+    { "id": "211", "name": "0d303aafc28804ccc55f4ef8fc6ab7a4" },
+    { "id": "212", "name": "b36ef85c549d172423e123f0b74adcaf" },
+    { "id": "213", "name": "ff4a008470319a22d9cf3d14af485977" },
+    { "id": "214", "name": "b11293f3f59eac4b1221704f203af369" },
+    { "id": "215", "name": "9cc1df54052eb120644c29330aa18381" },
+    { "id": "216", "name": "afc85ee276f33abe7d041853c634fc36" },
+    { "id": "217", "name": "a6231c332ac8019b8246477bcccd79cc" },
+    { "id": "218", "name": "985482f61241ee19a86448cc97c5f682" },
+    { "id": "219", "name": "3ff47a2d7c0f78a49c8774990d82ccdd" },
+    { "id": "220", "name": "3bfbba3a2055fb7e523bddaa86c910c3" },
+    { "id": "221", "name": "e657fee496ec4d100164e0f4d2377d85" },
+    { "id": "222", "name": "61a5a1e70d1d9ca58a9e0b3c5990f1c4" },
+    { "id": "223", "name": "ec4d34fe3a6941380dc8c6949b16d42b" },
+    { "id": "224", "name": "dbcc6c6cc854ec7c0a519668f1ed9841" },
+    { "id": "225", "name": "e0cb68d453c7a8039a93564dc8248ea9" },
+    { "id": "226", "name": "567bc1d268f135496de3d5b946b691f3" },
+    { "id": "227", "name": "78805a221a988e79ef3f42d7c5bfd418" },
+    { "id": "228", "name": "9cbb47c15bdee9d8f1ac2b6ffc96a39c" },
+    { "id": "229", "name": "59b6d6f13869783e0734cd0bb01b5130" },
+    { "id": "230", "name": "913c4cd2428ce8671839b1afb2699b25" },
+    { "id": "231", "name": "d7119fcdb930b9aa3116335980570d82" },
+    { "id": "232", "name": "045373230fa7d701137ce2f2bca54db8" },
+    { "id": "233", "name": "c5b825e5c013d16600775fb568bd934c" },
+    { "id": "234", "name": "9e50b36bb2497496c6398461a2082fcc" },
+    { "id": "235", "name": "9e50b36bb2497496c6398461a2082fcc" },
+    { "id": "236", "name": "9e50b36bb2497496c6398461a2082fcc" },
+    { "id": "237", "name": "bd9a779d203f7c7e409f6139ac3691e4" },
+    { "id": "238", "name": "013764cfe4d1f0c0bb74403295d0f208" },
+    { "id": "239", "name": "e8a2f5fa37619881c42019504b770458" },
+    { "id": "240", "name": "a36ba9275ce99973e406a4b30b00cf3f" },
+    { "id": "241", "name": "8e43f40ef3c0cd3c0d20af30a589cf38" },
+    { "id": "242", "name": "bf911b21d6cb2222f430658c4c281604" },
+    { "id": "243", "name": "faaa5d5d9712d82df3d0b1f56acf1a8d" },
+    { "id": "244", "name": "7014827aed98eeb8a61e4d888c75e24a" },
+    { "id": "245", "name": "e5823ba08cf6f8acc6662017ec572078" },
+    { "id": "246", "name": "47041eaaa4d22eb472c06d81ecdccde7" },
+    { "id": "247", "name": "47041eaaa4d22eb472c06d81ecdccde7" },
+    { "id": "248", "name": "47041eaaa4d22eb472c06d81ecdccde7" },
+    { "id": "249", "name": "9521334fbf612112ba030c88fe882b06" },
+    { "id": "250", "name": "1c452f266e90d2652da56cf257d558df" },
+    { "id": "251", "name": "7877cd05a8932deaccf362f41e34be22" },
+    { "id": "252", "name": "190ebe412ab179f20e7e3ee39cae82d4" },
+    { "id": "253", "name": "dc1d71bbb5c4d2a5e936db79ef10c19f" },
+    { "id": "254", "name": "7b571ec5a348ca760bf1ef0d9782572c" },
+    { "id": "255", "name": "5272c4510cc7583284acd35c5283faaa" },
+    { "id": "256", "name": "fab40977708f30364cc3963cd7ae412c" },
+    { "id": "257", "name": "8034aa4e09965ae0beb0d375de3226c7" },
+    { "id": "258", "name": "8861021ea041394f627e3a1b60c3e92c" },
+    { "id": "259", "name": "86094b61cb9f63b77f982ceae03e95f0" },
+    { "id": "260", "name": "663f9b65074738ff4adf1d288e40042e" },
+    { "id": "261", "name": "def4021bc0cb91cd0bfe422d8044bc0b" },
+    { "id": "262", "name": "29a4011ccb2898c8cb9e769a75a837c5" },
+    { "id": "263", "name": "05edaca3adb3ec38bb87872faf340c80" },
+    { "id": "264", "name": "05edaca3adb3ec38bb87872faf340c80" },
+    { "id": "265", "name": "abe034562765464066b8cdf05fe90bf1" },
+    { "id": "266", "name": "77f7bdcfc6e15379ae72bea0f61928be" },
+    { "id": "267", "name": "77f7bdcfc6e15379ae72bea0f61928be" },
+    { "id": "268", "name": "393b7e38038f12c5fb4c92e81a1b5a01" },
+    { "id": "269", "name": "393b7e38038f12c5fb4c92e81a1b5a01" },
+    { "id": "270", "name": "aee37c30f5d091a495526f636a3527bb" },
+    { "id": "271", "name": "3ae474c6b56898d62527e923128c3e6f" },
+    { "id": "272", "name": "17200a32de0894e33960d8e659aab081" },
+    { "id": "273", "name": "1e89e5daef7cfc7487a9567c113f86e3" },
+    { "id": "274", "name": "20b1d691b33ed6c94fbe7d629fb526e6" },
+    { "id": "275", "name": "8345a34a65aa1a67f3e6f8852297c25b" },
+    { "id": "276", "name": "7555e8810948d6d8d545b3aca61cf291" },
+    { "id": "277", "name": "7555e8810948d6d8d545b3aca61cf291" },
+    { "id": "278", "name": "559fe6fefe8ba2f96e5de683026f9adf" },
+    { "id": "279", "name": "559fe6fefe8ba2f96e5de683026f9adf" },
+    { "id": "280", "name": "f36d3843919d2c0a78da03aa83c23467" },
+    { "id": "281", "name": "1e6cf868df5884c007e6117c00372aef" },
+    { "id": "282", "name": "1e6cf868df5884c007e6117c00372aef" },
+    { "id": "283", "name": "76010287fa91bee0542991280411c07b" },
+    { "id": "284", "name": "76010287fa91bee0542991280411c07b" },
+    { "id": "285", "name": "32348609a5980dbacdff1b41a4ccfa25" },
+    { "id": "286", "name": "32348609a5980dbacdff1b41a4ccfa25" },
+    { "id": "287", "name": "8d9e5d8716e6b0d97d40eae2f05d653c" },
+    { "id": "288", "name": "c0de6b975080d84145a31c4430546b52" },
+    { "id": "289", "name": "8754d87959e294f2f2b49721aac9d77c" },
+    { "id": "290", "name": "34da450e959d17db92f6876051d0faac" },
+    { "id": "291", "name": "f1ce1e003b7fcaa301e3e84a2a17caf3" },
+    { "id": "292", "name": "73f0e3d3042a071a755ce04fe3b84eeb" },
+    { "id": "293", "name": "1cf9f8be06cdce86bfde06213124c08b" },
+    { "id": "294", "name": "559dc096a2b767ff9a5ba7a2b01dcb18" },
+    { "id": "295", "name": "3ac156eead4ae6b40e9c498d532b4448" },
+    { "id": "296", "name": "ee7077d4a5317d34123c82d5b49f2c6d" },
+    { "id": "297", "name": "326d819779719261292c50b77e64c29b" },
+    { "id": "298", "name": "3737b875474ceba31cab544b12ff662d" },
+    { "id": "299", "name": "2f73afad7f2480e30b484a13d08c8c95" },
+    { "id": "300", "name": "cdc3ae6882ab6133d9448100253b6da3" },
+    { "id": "301", "name": "0b070ef33a2b45bda8d27d9ea0f4e4bb" },
+    { "id": "302", "name": "a264d2bed092db847e7fe93f56278949" },
+    { "id": "303", "name": "fc3a4fb327706ca2220500871d60b94b" },
+    { "id": "304", "name": "06baef17304361bd79041c4be3a55f36" },
+    { "id": "305", "name": "2d205dc0cb53af0d000627bf577a284d" },
+    { "id": "306", "name": "0f755a9630404f51115799274a859e9d" },
+    { "id": "307", "name": "1a04d3ce7d869169f32705efb43f2963" },
+    { "id": "308", "name": "5f1f0a7ab27efe156310472f35f77650" },
+    { "id": "309", "name": "2e541ebb6dcd2594b2b4a7f9e9331c84" },
+    { "id": "310", "name": "80e19adebcddc28661cf6fb7e6a43707" },
+    { "id": "311", "name": "eaa7963db60821bfdfcb40d425d48c2f" },
+    { "id": "312", "name": "78310a5e43f5e02a3ccfb2c519ade2df" },
+    { "id": "313", "name": "ca058f7ff8d77c9bfc0fc0aceb0d2d19" },
+    { "id": "314", "name": "8f4e4e875f8521719dd560c40e5585d3" },
+    { "id": "315", "name": "bff139fa05ac583f685a523ab3d110a0" },
+    { "id": "316", "name": "f965cf52cab93e83eb6c998148cb1899" },
+    { "id": "317", "name": "ae76ff49d7dc84738416af9f24790807" },
+    { "id": "318", "name": "b28f7972f56245741d80ee383a2ad9b4" },
+    { "id": "319", "name": "0a98ca1bc31668a67e5904c5448b0b1c" },
+    { "id": "320", "name": "f4b405642b6f52ba4d7c10b4a2a7dc1b" },
+    { "id": "321", "name": "35b22c9204e0f3e55bcd93371800d881" },
+    { "id": "322", "name": "35b22c9204e0f3e55bcd93371800d881" },
+    { "id": "323", "name": "d88b0dd70cc3da6c8f5e0e6c64aa3d2a" },
+    { "id": "324", "name": "3cdda3e94e1b3dfd218a9d60b8139968" },
+    { "id": "325", "name": "7a674c327bfa07f7c1204fb38ca6ef3b" },
+    { "id": "326", "name": "97ee2353c626b94e407568c289df2235" },
+    { "id": "327", "name": "34d1c35063280164066ecc517050da0b" },
+    { "id": "328", "name": "205755123d5c692a9524a9b14622731b" },
+    { "id": "329", "name": "df9a65089e5bad4f8dd5166321f6d1f3" },
+    { "id": "330", "name": "39a84672bfd6b013b04afb9a62d7fd4f" },
+    { "id": "331", "name": "81b1f8a72bc1d4d2076535f8fb7011f3" },
+    { "id": "332", "name": "81b1f8a72bc1d4d2076535f8fb7011f3" },
+    { "id": "333", "name": "e3842b8b466bc569864245c4ac47f4c7" },
+    { "id": "334", "name": "cdff3889e92d00c8ee5c129be5bb9eb1" },
+    { "id": "335", "name": "cdff3889e92d00c8ee5c129be5bb9eb1" },
+    { "id": "336", "name": "44c5b763d21e9a3ed8cad56977bfd75c" },
+    { "id": "337", "name": "4bf45f2a08cc7297bc0735294c46e455" },
+    { "id": "338", "name": "4bf45f2a08cc7297bc0735294c46e455" },
+    { "id": "339", "name": "9cd81e68982526e6d5f8e853d2d88149" },
+    { "id": "340", "name": "9cd81e68982526e6d5f8e853d2d88149" },
+    { "id": "341", "name": "09066f6946ebce2d3acdd534300250ee" },
+    { "id": "342", "name": "efecdfae536bae52e683435e553ad2fc" },
+    { "id": "343", "name": "d44c5e4afb0e037ebda34218d0ec906f" },
+    { "id": "344", "name": "151f91e8c75b37f108388e9c48149c96" },
+    { "id": "345", "name": "45798f269709550d6f6e1d2cf4b7d485" },
+    { "id": "346", "name": "f5853506c90053c6b7d30f358948e8c6" },
+    { "id": "347", "name": "ea07bab11665740dd69fcc1bfcb79218" },
+    { "id": "348", "name": "c3cb36b5dfc26b873db8771ed1356900" },
+    { "id": "349", "name": "f1ec5494313f41894c57f348578c7582" },
+    { "id": "350", "name": "d4cfab1b518d245bc1fc8db52b6d8ddc" },
+    { "id": "351", "name": "a1890b4c4f2b5e1944c40a9b0f84a1c9" },
+    { "id": "352", "name": "61e4a0242b73a47ca5be012eec164602" },
+    { "id": "353", "name": "9b4a1b957c67220d9000d92734279b4c" },
+    { "id": "354", "name": "5fb4f826eb039e06dcd48602b6f47744" },
+    { "id": "355", "name": "d780e58e7e113a4d9b3b8f7cb93e0d90" },
+    { "id": "356", "name": "197a397c6699d48b4e3d0684e3d60409" },
+    { "id": "357", "name": "a5c59a46b273ee720e88fd953668fc4c" },
+    { "id": "358", "name": "0ff9653ee33be170692bf31ef4762049" },
+    { "id": "359", "name": "8966f6bbb307dcc4a147c27e52f4e3c9" },
+    { "id": "360", "name": "ad96132928e568d000afd7430976a47a" },
+    { "id": "361", "name": "b794a3be43ae97af9272641e1439bb81" },
+    { "id": "362", "name": "e469554f74eb45316bb1e888fd26d9a5" },
+    { "id": "363", "name": "e52ce0141772cd5abea43f36ab85f387" },
+    { "id": "364", "name": "30babd8bb8a21ab5d5f64aa26b1b146f" },
+    { "id": "365", "name": "2dbcba41b9ac4c5d22886ba672463cb4" },
+    { "id": "366", "name": "66fa7ed832617131ae1a7038202c8eb0" },
+    { "id": "367", "name": "6937c747071d8ed25db6fd25c857c800" },
+    { "id": "368", "name": "40d4a203bc881c2d59c6fa3f6ffe0848" },
+    { "id": "369", "name": "281026d966626615768589fa301ae6af" },
+    { "id": "370", "name": "9c5aef07f2be779a3c925b7dcbd7edc8" },
+    { "id": "371", "name": "93237e284f0a749ffba472e449bfc25e" },
+    { "id": "372", "name": "efdd6be310211dc9f99352a528639a69" },
+    { "id": "373", "name": "437b674a7f6569110d1256eb80073f41" },
+    { "id": "374", "name": "d726760b0467b77803d6d1f3585deb6e" },
+    { "id": "375", "name": "d726760b0467b77803d6d1f3585deb6e" },
+    { "id": "376", "name": "af6f76f73f7bbc78ac093ab17179d79c" },
+    { "id": "377", "name": "6f6d894b6e7b0860a6bf5e7531362eb6" },
+    { "id": "378", "name": "4536c5221a1bd765afac166e93e0178e" },
+    { "id": "379", "name": "a8cbe673c91e4d81ec83c0cab9067500" },
+    { "id": "380", "name": "6027bd3d50602d5c3c468f012ae9f1d8" },
+    { "id": "381", "name": "3732301a0ea1396b1ba5d6fba5dfeef3" },
+    { "id": "382", "name": "e32374835198c385c2d5b06104a7e392" },
+    { "id": "383", "name": "519c922400f507afa4e229bd8ad70e57" },
+    { "id": "384", "name": "4c740dc82c5e102c992e4e06254617f0" },
+    { "id": "385", "name": "ef82bc84de1446be5cfb022f09a35779" },
+    { "id": "386", "name": "ef82bc84de1446be5cfb022f09a35779" },
+    { "id": "387", "name": "ef82bc84de1446be5cfb022f09a35779" },
+    { "id": "388", "name": "4ab7d471b85d867f917bf1a97f4224ec" },
+    { "id": "389", "name": "e6241403d71d11ca2cb2677975d92b7f" },
+    { "id": "390", "name": "d027e4e8af27161ef4f0f956f9761745" },
+    { "id": "391", "name": "d34ce0c192ca130e1501a539e2acc104" },
+    { "id": "392", "name": "d34ce0c192ca130e1501a539e2acc104" },
+    { "id": "393", "name": "e620c0045da1f9b6caf8af35e9ae2974" },
+    { "id": "394", "name": "305bf877df3b92ddf55e4f2846fff2bb" },
+    { "id": "395", "name": "166f8bf58312c261dbb7285929272029" },
+    { "id": "396", "name": "19ade5aaa068959b5df7b61c70bbd076" },
+    { "id": "397", "name": "091b300a1aeeb5d726503da4f553eda7" },
+    { "id": "398", "name": "1a2fb33872ac623cd067925d158c6956" },
+    { "id": "399", "name": "bb3a5ceb14b9916e7e2ed48d44c5c4b3" },
+    { "id": "400", "name": "d1d88fa25cf5d33c474f514746583b8a" },
+    { "id": "401", "name": "d1792b3856fcd0a9c4d37aed5060977d" },
+    { "id": "402", "name": "e5df42e20907d1dd015404c25257655f" },
+    { "id": "403", "name": "97c8316accbe1ad474be953f14a7e263" },
+    { "id": "404", "name": "65a78966cebfa72352c2164af20adacf" },
+    { "id": "405", "name": "109e84982280068d94d40ad3c8e5954a" },
+    { "id": "406", "name": "fee9e500058a8269de4e0f3bedf94046" },
+    { "id": "407", "name": "763122f293d1a3430b493172b1c586ab" },
+    { "id": "408", "name": "8a86a2616d761cf214a9078aa386575c" },
+    { "id": "409", "name": "80858b6eb2ac3ab296c316180b23487a" },
+    { "id": "410", "name": "47aae6947e67687737e8c7dfadadb7ec" },
+    { "id": "411", "name": "ef7c876f00f3acddd00fa671f52d0b1f" },
+    { "id": "412", "name": "e666d102045d6c3dd1722cccba827925" },
+    { "id": "413", "name": "04d94a9d91b116b0c7d8882d3173d31c" },
+    { "id": "414", "name": "1f4eaf4419512c0e8b4c337a0f22e5dd" },
+    { "id": "415", "name": "d1dbf933a5b6913a22927ac2fb763b3c" },
+    { "id": "416", "name": "2165060bd8a37db2487ca466905846ce" },
+    { "id": "417", "name": "c04b6fa7a56d0da7c952442232b4f0c4" },
+    { "id": "418", "name": "1d6efdf2bbe004c7dc5483ad0a44ca30" },
+    { "id": "419", "name": "41f88549976e3f853da38035c7aa0e9f" },
+    { "id": "420", "name": "deb563564005ef6b03805fcc97a04cbe" },
+    { "id": "421", "name": "558c8720b5b05214362ab84f0a215d27" },
+    { "id": "422", "name": "b6acf90bdb44c2d3b804683b6525ec8d" },
+    { "id": "423", "name": "d88c3e9efafa6c134c03fce74fcd6873" },
+    { "id": "424", "name": "a14bdeb169af05183a60d266fe30e3d2" },
+    { "id": "425", "name": "1ef05294d2c9e6c0d845a7d16dbd1cb2" },
+    { "id": "426", "name": "400362c59aab7fc83e0f1c5771ab56ae" },
+    { "id": "427", "name": "c68e6ab7a4d892817452d6a0f0e76ff6" },
+    { "id": "428", "name": "74dd0ef2dece36cda5137fabc02677cf" },
+    { "id": "429", "name": "b6c4c5c378eac3925d7f6543901f2dfe" },
+    { "id": "430", "name": "866c37703f08cc4913e30314a8075467" },
+    { "id": "431", "name": "2ae607ba615284096f49177a739fdf9a" },
+    { "id": "432", "name": "b324540f4b8f0ba32c08d08f7d4bf4e0" },
+    { "id": "433", "name": "ae70b95a170877b7638329348cc14b9a" },
+    { "id": "434", "name": "0f4137ed1502b5045d6083aa258b5c42" },
+    { "id": "435", "name": "0f4137ed1502b5045d6083aa258b5c42" },
+    { "id": "436", "name": "0f4137ed1502b5045d6083aa258b5c42" },
+    { "id": "437", "name": "187fe1f83bb6a149d28e9ac8a889e967" },
+    { "id": "438", "name": "01cade94c73d9e13e79f02ccacb7c791" },
+    { "id": "439", "name": "e145effa757d78568eab76356bf3b7fa" },
+    { "id": "440", "name": "d855f09097164c5f3616116bf82c3584" },
+    { "id": "441", "name": "d855f09097164c5f3616116bf82c3584" },
+    { "id": "442", "name": "d855f09097164c5f3616116bf82c3584" },
+    { "id": "443", "name": "efad9cd968c40cdbd0b7e33d69747d5d" },
+    { "id": "444", "name": "efad9cd968c40cdbd0b7e33d69747d5d" },
+    { "id": "445", "name": "efad9cd968c40cdbd0b7e33d69747d5d" },
+    { "id": "446", "name": "6ba99e656fd870628272091e07f2a1be" },
+    { "id": "447", "name": "6ba99e656fd870628272091e07f2a1be" },
+    { "id": "448", "name": "6ba99e656fd870628272091e07f2a1be" },
+    { "id": "449", "name": "4c6c07b6330b01004e7a3ef190465412" },
+    { "id": "450", "name": "4c6c07b6330b01004e7a3ef190465412" },
+    { "id": "451", "name": "4c6c07b6330b01004e7a3ef190465412" },
+    { "id": "452", "name": "5e3681f555944d31edeb44e7194f6745" },
+    { "id": "453", "name": "5e3681f555944d31edeb44e7194f6745" },
+    { "id": "454", "name": "5e3681f555944d31edeb44e7194f6745" },
+    { "id": "455", "name": "b948dcbfe194727798131ded082a6b85" },
+    { "id": "456", "name": "b948dcbfe194727798131ded082a6b85" },
+    { "id": "457", "name": "b948dcbfe194727798131ded082a6b85" },
+    { "id": "458", "name": "958bb955638d12c73624633dc6b59471" },
+    { "id": "459", "name": "958bb955638d12c73624633dc6b59471" },
+    { "id": "460", "name": "958bb955638d12c73624633dc6b59471" },
+    { "id": "461", "name": "82e897f1199c32f9098c861463e942c3" },
+    { "id": "462", "name": "82e897f1199c32f9098c861463e942c3" },
+    { "id": "463", "name": "82e897f1199c32f9098c861463e942c3" },
+    { "id": "464", "name": "277604a738af4ff5dfefa5c766bd18e2" },
+    { "id": "465", "name": "277604a738af4ff5dfefa5c766bd18e2" },
+    { "id": "466", "name": "277604a738af4ff5dfefa5c766bd18e2" },
+    { "id": "467", "name": "9e18a3311e807db18f7ec710e5e21f38" },
+    { "id": "468", "name": "c7c683c01ab99e6c8d919d53167a9a76" },
+    { "id": "469", "name": "c7c683c01ab99e6c8d919d53167a9a76" },
+    { "id": "470", "name": "22d5a2eb8798eed3f2e3e036d05273b8" },
+    { "id": "471", "name": "f43ad420f0470fdcc348bbad8cb1e5bb" },
+    { "id": "472", "name": "355cc995e67e634df54cb95493e29816" },
+    { "id": "473", "name": "efdce339cd6626e504236aefc611779b" },
+    { "id": "474", "name": "4ea0dc2f092838cb635874fb4bc0e034" },
+    { "id": "475", "name": "90705684f9e319161afda88268c99a81" },
+    { "id": "476", "name": "4281f64ac0895cdef980b3b507a1a346" },
+    { "id": "477", "name": "402cb3c53c75e2740892282d3f69c1a2" },
+    { "id": "478", "name": "99c2cc82325cfe171cf137559e60a02b" },
+    { "id": "479", "name": "e07174ed9c1f1e877dc38a0a5ec31375" },
+    { "id": "480", "name": "d074c638b8aca858d5c1e4eac97e68b5" }
+  ],
+  "links": [
+    { "source": "0", "target": "1" },
+    { "source": "0", "target": "294" },
+    { "source": "3", "target": "2" },
+    { "source": "4", "target": "2" },
+    { "source": "4", "target": "3" },
+    { "source": "4", "target": "283" },
+    { "source": "4", "target": "291" },
+    { "source": "5", "target": "2" },
+    { "source": "5", "target": "3" },
+    { "source": "5", "target": "291" },
+    { "source": "5", "target": "299" },
+    { "source": "5", "target": "371" },
+    { "source": "5", "target": "435" },
+    { "source": "6", "target": "2" },
+    { "source": "6", "target": "4" },
+    { "source": "6", "target": "5" },
+    { "source": "6", "target": "332" },
+    { "source": "6", "target": "467" },
+    { "source": "8", "target": "113" },
+    { "source": "8", "target": "194" },
+    { "source": "8", "target": "291" },
+    { "source": "8", "target": "414" },
+    { "source": "8", "target": "479" },
+    { "source": "9", "target": "258" },
+    { "source": "11", "target": "12" },
+    { "source": "11", "target": "90" },
+    { "source": "11", "target": "245" },
+    { "source": "11", "target": "268" },
+    { "source": "12", "target": "245" },
+    { "source": "12", "target": "314" },
+    { "source": "13", "target": "14" },
+    { "source": "13", "target": "91" },
+    { "source": "13", "target": "109" },
+    { "source": "13", "target": "110" },
+    { "source": "13", "target": "236" },
+    { "source": "13", "target": "237" },
+    { "source": "13", "target": "245" },
+    { "source": "13", "target": "253" },
+    { "source": "13", "target": "264" },
+    { "source": "13", "target": "265" },
+    { "source": "13", "target": "267" },
+    { "source": "13", "target": "277" },
+    { "source": "13", "target": "380" },
+    { "source": "17", "target": "245" },
+    { "source": "18", "target": "19" },
+    { "source": "18", "target": "20" },
+    { "source": "18", "target": "21" },
+    { "source": "18", "target": "22" },
+    { "source": "18", "target": "127" },
+    { "source": "18", "target": "410" },
+    { "source": "20", "target": "410" },
+    { "source": "21", "target": "442" },
+    { "source": "22", "target": "19" },
+    { "source": "22", "target": "442" },
+    { "source": "23", "target": "275" },
+    { "source": "24", "target": "25" },
+    { "source": "24", "target": "26" },
+    { "source": "25", "target": "26" },
+    { "source": "25", "target": "323" },
+    { "source": "25", "target": "325" },
+    { "source": "25", "target": "375" },
+    { "source": "26", "target": "354" },
+    { "source": "30", "target": "247" },
+    { "source": "31", "target": "173" },
+    { "source": "31", "target": "189" },
+    { "source": "32", "target": "132" },
+    { "source": "32", "target": "175" },
+    { "source": "32", "target": "177" },
+    { "source": "32", "target": "189" },
+    { "source": "32", "target": "312" },
+    { "source": "33", "target": "35" },
+    { "source": "33", "target": "36" },
+    { "source": "33", "target": "132" },
+    { "source": "33", "target": "179" },
+    { "source": "33", "target": "191" },
+    { "source": "33", "target": "363" },
+    { "source": "34", "target": "35" },
+    { "source": "34", "target": "99" },
+    { "source": "34", "target": "191" },
+    { "source": "35", "target": "174" },
+    { "source": "35", "target": "176" },
+    { "source": "35", "target": "312" },
+    { "source": "37", "target": "148" },
+    { "source": "41", "target": "24" },
+    { "source": "41", "target": "63" },
+    { "source": "41", "target": "104" },
+    { "source": "41", "target": "149" },
+    { "source": "41", "target": "182" },
+    { "source": "41", "target": "191" },
+    { "source": "41", "target": "327" },
+    { "source": "41", "target": "345" },
+    { "source": "41", "target": "354" },
+    { "source": "42", "target": "2" },
+    { "source": "42", "target": "44" },
+    { "source": "42", "target": "50" },
+    { "source": "42", "target": "54" },
+    { "source": "43", "target": "44" },
+    { "source": "43", "target": "45" },
+    { "source": "43", "target": "48" },
+    { "source": "43", "target": "54" },
+    { "source": "43", "target": "61" },
+    { "source": "43", "target": "64" },
+    { "source": "43", "target": "66" },
+    { "source": "43", "target": "71" },
+    { "source": "43", "target": "73" },
+    { "source": "43", "target": "79" },
+    { "source": "43", "target": "80" },
+    { "source": "43", "target": "82" },
+    { "source": "43", "target": "357" },
+    { "source": "43", "target": "411" },
+    { "source": "44", "target": "50" },
+    { "source": "44", "target": "54" },
+    { "source": "44", "target": "71" },
+    { "source": "44", "target": "77" },
+    { "source": "44", "target": "82" },
+    { "source": "44", "target": "163" },
+    { "source": "44", "target": "417" },
+    { "source": "44", "target": "423" },
+    { "source": "45", "target": "31" },
+    { "source": "45", "target": "34" },
+    { "source": "45", "target": "35" },
+    { "source": "45", "target": "44" },
+    { "source": "45", "target": "46" },
+    { "source": "45", "target": "48" },
+    { "source": "45", "target": "54" },
+    { "source": "45", "target": "64" },
+    { "source": "45", "target": "71" },
+    { "source": "45", "target": "77" },
+    { "source": "45", "target": "82" },
+    { "source": "45", "target": "85" },
+    { "source": "45", "target": "92" },
+    { "source": "45", "target": "149" },
+    { "source": "45", "target": "163" },
+    { "source": "45", "target": "190" },
+    { "source": "45", "target": "191" },
+    { "source": "45", "target": "238" },
+    { "source": "45", "target": "296" },
+    { "source": "45", "target": "345" },
+    { "source": "45", "target": "354" },
+    { "source": "45", "target": "380" },
+    { "source": "45", "target": "417" },
+    { "source": "45", "target": "419" },
+    { "source": "45", "target": "423" },
+    { "source": "46", "target": "65" },
+    { "source": "46", "target": "323" },
+    { "source": "46", "target": "325" },
+    { "source": "46", "target": "375" },
+    { "source": "47", "target": "44" },
+    { "source": "47", "target": "45" },
+    { "source": "47", "target": "50" },
+    { "source": "47", "target": "54" },
+    { "source": "47", "target": "66" },
+    { "source": "47", "target": "71" },
+    { "source": "47", "target": "80" },
+    { "source": "47", "target": "82" },
+    { "source": "47", "target": "288" },
+    { "source": "47", "target": "344" },
+    { "source": "48", "target": "44" },
+    { "source": "48", "target": "54" },
+    { "source": "48", "target": "66" },
+    { "source": "48", "target": "71" },
+    { "source": "48", "target": "77" },
+    { "source": "48", "target": "82" },
+    { "source": "48", "target": "104" },
+    { "source": "48", "target": "149" },
+    { "source": "49", "target": "44" },
+    { "source": "49", "target": "45" },
+    { "source": "49", "target": "48" },
+    { "source": "49", "target": "50" },
+    { "source": "49", "target": "54" },
+    { "source": "49", "target": "64" },
+    { "source": "49", "target": "66" },
+    { "source": "49", "target": "71" },
+    { "source": "49", "target": "73" },
+    { "source": "49", "target": "80" },
+    { "source": "49", "target": "82" },
+    { "source": "49", "target": "91" },
+    { "source": "49", "target": "326" },
+    { "source": "49", "target": "354" },
+    { "source": "50", "target": "65" },
+    { "source": "50", "target": "325" },
+    { "source": "50", "target": "375" },
+    { "source": "51", "target": "44" },
+    { "source": "51", "target": "48" },
+    { "source": "51", "target": "54" },
+    { "source": "51", "target": "64" },
+    { "source": "51", "target": "79" },
+    { "source": "51", "target": "82" },
+    { "source": "51", "target": "134" },
+    { "source": "51", "target": "376" },
+    { "source": "52", "target": "63" },
+    { "source": "53", "target": "44" },
+    { "source": "53", "target": "248" },
+    { "source": "53", "target": "380" },
+    { "source": "54", "target": "32" },
+    { "source": "54", "target": "55" },
+    { "source": "54", "target": "70" },
+    { "source": "54", "target": "71" },
+    { "source": "54", "target": "77" },
+    { "source": "54", "target": "82" },
+    { "source": "54", "target": "163" },
+    { "source": "54", "target": "181" },
+    { "source": "54", "target": "327" },
+    { "source": "54", "target": "346" },
+    { "source": "54", "target": "354" },
+    { "source": "54", "target": "371" },
+    { "source": "54", "target": "380" },
+    { "source": "55", "target": "65" },
+    { "source": "55", "target": "323" },
+    { "source": "55", "target": "325" },
+    { "source": "55", "target": "375" },
+    { "source": "56", "target": "65" },
+    { "source": "56", "target": "167" },
+    { "source": "57", "target": "44" },
+    { "source": "57", "target": "54" },
+    { "source": "57", "target": "62" },
+    { "source": "57", "target": "64" },
+    { "source": "57", "target": "79" },
+    { "source": "57", "target": "82" },
+    { "source": "57", "target": "195" },
+    { "source": "57", "target": "380" },
+    { "source": "58", "target": "44" },
+    { "source": "58", "target": "45" },
+    { "source": "58", "target": "48" },
+    { "source": "58", "target": "49" },
+    { "source": "58", "target": "54" },
+    { "source": "58", "target": "59" },
+    { "source": "58", "target": "64" },
+    { "source": "58", "target": "66" },
+    { "source": "58", "target": "69" },
+    { "source": "58", "target": "71" },
+    { "source": "58", "target": "73" },
+    { "source": "58", "target": "76" },
+    { "source": "58", "target": "80" },
+    { "source": "58", "target": "82" },
+    { "source": "59", "target": "65" },
+    { "source": "59", "target": "323" },
+    { "source": "59", "target": "325" },
+    { "source": "59", "target": "375" },
+    { "source": "60", "target": "40" },
+    { "source": "60", "target": "43" },
+    { "source": "60", "target": "44" },
+    { "source": "60", "target": "45" },
+    { "source": "60", "target": "48" },
+    { "source": "60", "target": "49" },
+    { "source": "60", "target": "54" },
+    { "source": "60", "target": "61" },
+    { "source": "60", "target": "64" },
+    { "source": "60", "target": "66" },
+    { "source": "60", "target": "69" },
+    { "source": "60", "target": "71" },
+    { "source": "60", "target": "73" },
+    { "source": "60", "target": "75" },
+    { "source": "60", "target": "77" },
+    { "source": "60", "target": "80" },
+    { "source": "60", "target": "82" },
+    { "source": "60", "target": "203" },
+    { "source": "60", "target": "302" },
+    { "source": "60", "target": "354" },
+    { "source": "60", "target": "356" },
+    { "source": "60", "target": "380" },
+    { "source": "61", "target": "44" },
+    { "source": "61", "target": "48" },
+    { "source": "61", "target": "54" },
+    { "source": "61", "target": "64" },
+    { "source": "61", "target": "71" },
+    { "source": "61", "target": "82" },
+    { "source": "62", "target": "44" },
+    { "source": "62", "target": "54" },
+    { "source": "62", "target": "66" },
+    { "source": "62", "target": "71" },
+    { "source": "62", "target": "82" },
+    { "source": "62", "target": "367" },
+    { "source": "62", "target": "380" },
+    { "source": "63", "target": "42" },
+    { "source": "63", "target": "43" },
+    { "source": "63", "target": "44" },
+    { "source": "63", "target": "45" },
+    { "source": "63", "target": "47" },
+    { "source": "63", "target": "48" },
+    { "source": "63", "target": "49" },
+    { "source": "63", "target": "50" },
+    { "source": "63", "target": "51" },
+    { "source": "63", "target": "54" },
+    { "source": "63", "target": "57" },
+    { "source": "63", "target": "58" },
+    { "source": "63", "target": "60" },
+    { "source": "63", "target": "61" },
+    { "source": "63", "target": "62" },
+    { "source": "63", "target": "64" },
+    { "source": "63", "target": "66" },
+    { "source": "63", "target": "69" },
+    { "source": "63", "target": "70" },
+    { "source": "63", "target": "71" },
+    { "source": "63", "target": "73" },
+    { "source": "63", "target": "75" },
+    { "source": "63", "target": "76" },
+    { "source": "63", "target": "77" },
+    { "source": "63", "target": "78" },
+    { "source": "63", "target": "79" },
+    { "source": "63", "target": "80" },
+    { "source": "63", "target": "81" },
+    { "source": "63", "target": "82" },
+    { "source": "63", "target": "84" },
+    { "source": "63", "target": "85" },
+    { "source": "64", "target": "16" },
+    { "source": "64", "target": "44" },
+    { "source": "64", "target": "54" },
+    { "source": "64", "target": "82" },
+    { "source": "64", "target": "133" },
+    { "source": "64", "target": "391" },
+    { "source": "64", "target": "393" },
+    { "source": "64", "target": "394" },
+    { "source": "65", "target": "323" },
+    { "source": "65", "target": "325" },
+    { "source": "65", "target": "346" },
+    { "source": "65", "target": "375" },
+    { "source": "65", "target": "387" },
+    { "source": "66", "target": "23" },
+    { "source": "66", "target": "198" },
+    { "source": "66", "target": "354" },
+    { "source": "67", "target": "198" },
+    { "source": "68", "target": "41" },
+    { "source": "69", "target": "44" },
+    { "source": "69", "target": "45" },
+    { "source": "69", "target": "49" },
+    { "source": "69", "target": "50" },
+    { "source": "69", "target": "54" },
+    { "source": "69", "target": "66" },
+    { "source": "69", "target": "71" },
+    { "source": "69", "target": "73" },
+    { "source": "69", "target": "80" },
+    { "source": "69", "target": "82" },
+    { "source": "69", "target": "84" },
+    { "source": "69", "target": "91" },
+    { "source": "69", "target": "104" },
+    { "source": "69", "target": "181" },
+    { "source": "69", "target": "326" },
+    { "source": "69", "target": "366" },
+    { "source": "69", "target": "382" },
+    { "source": "71", "target": "66" },
+    { "source": "71", "target": "70" },
+    { "source": "71", "target": "72" },
+    { "source": "71", "target": "82" },
+    { "source": "71", "target": "86" },
+    { "source": "71", "target": "163" },
+    { "source": "71", "target": "169" },
+    { "source": "71", "target": "198" },
+    { "source": "71", "target": "343" },
+    { "source": "71", "target": "345" },
+    { "source": "71", "target": "354" },
+    { "source": "71", "target": "356" },
+    { "source": "71", "target": "367" },
+    { "source": "71", "target": "371" },
+    { "source": "71", "target": "380" },
+    { "source": "72", "target": "65" },
+    { "source": "72", "target": "323" },
+    { "source": "72", "target": "325" },
+    { "source": "72", "target": "375" },
+    { "source": "72", "target": "411" },
+    { "source": "73", "target": "32" },
+    { "source": "73", "target": "44" },
+    { "source": "73", "target": "45" },
+    { "source": "73", "target": "48" },
+    { "source": "73", "target": "50" },
+    { "source": "73", "target": "54" },
+    { "source": "73", "target": "56" },
+    { "source": "73", "target": "61" },
+    { "source": "73", "target": "64" },
+    { "source": "73", "target": "66" },
+    { "source": "73", "target": "67" },
+    { "source": "73", "target": "71" },
+    { "source": "73", "target": "74" },
+    { "source": "73", "target": "77" },
+    { "source": "73", "target": "79" },
+    { "source": "73", "target": "80" },
+    { "source": "73", "target": "82" },
+    { "source": "73", "target": "84" },
+    { "source": "73", "target": "91" },
+    { "source": "73", "target": "104" },
+    { "source": "73", "target": "125" },
+    { "source": "73", "target": "163" },
+    { "source": "73", "target": "165" },
+    { "source": "73", "target": "191" },
+    { "source": "73", "target": "220" },
+    { "source": "73", "target": "227" },
+    { "source": "73", "target": "238" },
+    { "source": "73", "target": "241" },
+    { "source": "73", "target": "261" },
+    { "source": "73", "target": "262" },
+    { "source": "73", "target": "349" },
+    { "source": "73", "target": "354" },
+    { "source": "73", "target": "380" },
+    { "source": "73", "target": "382" },
+    { "source": "73", "target": "417" },
+    { "source": "73", "target": "423" },
+    { "source": "73", "target": "425" },
+    { "source": "74", "target": "65" },
+    { "source": "74", "target": "323" },
+    { "source": "74", "target": "325" },
+    { "source": "74", "target": "375" },
+    { "source": "75", "target": "44" },
+    { "source": "75", "target": "45" },
+    { "source": "75", "target": "50" },
+    { "source": "75", "target": "54" },
+    { "source": "75", "target": "61" },
+    { "source": "75", "target": "71" },
+    { "source": "75", "target": "73" },
+    { "source": "75", "target": "80" },
+    { "source": "75", "target": "82" },
+    { "source": "75", "target": "86" },
+    { "source": "75", "target": "317" },
+    { "source": "75", "target": "343" },
+    { "source": "75", "target": "354" },
+    { "source": "75", "target": "380" },
+    { "source": "75", "target": "411" },
+    { "source": "76", "target": "44" },
+    { "source": "76", "target": "45" },
+    { "source": "76", "target": "49" },
+    { "source": "76", "target": "50" },
+    { "source": "76", "target": "54" },
+    { "source": "76", "target": "64" },
+    { "source": "76", "target": "66" },
+    { "source": "76", "target": "71" },
+    { "source": "76", "target": "73" },
+    { "source": "76", "target": "80" },
+    { "source": "76", "target": "82" },
+    { "source": "76", "target": "91" },
+    { "source": "76", "target": "104" },
+    { "source": "76", "target": "181" },
+    { "source": "76", "target": "214" },
+    { "source": "76", "target": "326" },
+    { "source": "76", "target": "333" },
+    { "source": "76", "target": "380" },
+    { "source": "77", "target": "32" },
+    { "source": "77", "target": "33" },
+    { "source": "77", "target": "36" },
+    { "source": "77", "target": "132" },
+    { "source": "77", "target": "191" },
+    { "source": "77", "target": "419" },
+    { "source": "77", "target": "424" },
+    { "source": "78", "target": "0" },
+    { "source": "78", "target": "44" },
+    { "source": "78", "target": "45" },
+    { "source": "78", "target": "54" },
+    { "source": "78", "target": "66" },
+    { "source": "78", "target": "71" },
+    { "source": "78", "target": "73" },
+    { "source": "78", "target": "76" },
+    { "source": "78", "target": "80" },
+    { "source": "78", "target": "82" },
+    { "source": "78", "target": "84" },
+    { "source": "78", "target": "207" },
+    { "source": "78", "target": "354" },
+    { "source": "78", "target": "380" },
+    { "source": "79", "target": "44" },
+    { "source": "79", "target": "54" },
+    { "source": "79", "target": "71" },
+    { "source": "79", "target": "82" },
+    { "source": "79", "target": "149" },
+    { "source": "79", "target": "380" },
+    { "source": "80", "target": "23" },
+    { "source": "80", "target": "44" },
+    { "source": "80", "target": "54" },
+    { "source": "80", "target": "61" },
+    { "source": "80", "target": "66" },
+    { "source": "80", "target": "71" },
+    { "source": "80", "target": "77" },
+    { "source": "80", "target": "380" },
+    { "source": "81", "target": "42" },
+    { "source": "81", "target": "44" },
+    { "source": "81", "target": "45" },
+    { "source": "81", "target": "49" },
+    { "source": "81", "target": "50" },
+    { "source": "81", "target": "54" },
+    { "source": "81", "target": "61" },
+    { "source": "81", "target": "62" },
+    { "source": "81", "target": "64" },
+    { "source": "81", "target": "66" },
+    { "source": "81", "target": "71" },
+    { "source": "81", "target": "73" },
+    { "source": "81", "target": "76" },
+    { "source": "81", "target": "78" },
+    { "source": "81", "target": "80" },
+    { "source": "81", "target": "82" },
+    { "source": "81", "target": "84" },
+    { "source": "81", "target": "104" },
+    { "source": "81", "target": "377" },
+    { "source": "81", "target": "380" },
+    { "source": "82", "target": "8" },
+    { "source": "82", "target": "83" },
+    { "source": "82", "target": "194" },
+    { "source": "82", "target": "216" },
+    { "source": "82", "target": "271" },
+    { "source": "82", "target": "307" },
+    { "source": "82", "target": "366" },
+    { "source": "82", "target": "371" },
+    { "source": "82", "target": "380" },
+    { "source": "82", "target": "382" },
+    { "source": "82", "target": "388" },
+    { "source": "82", "target": "411" },
+    { "source": "82", "target": "424" },
+    { "source": "83", "target": "323" },
+    { "source": "83", "target": "325" },
+    { "source": "83", "target": "375" },
+    { "source": "84", "target": "42" },
+    { "source": "84", "target": "44" },
+    { "source": "84", "target": "54" },
+    { "source": "84", "target": "62" },
+    { "source": "84", "target": "66" },
+    { "source": "84", "target": "71" },
+    { "source": "84", "target": "82" },
+    { "source": "84", "target": "332" },
+    { "source": "84", "target": "367" },
+    { "source": "85", "target": "6" },
+    { "source": "85", "target": "23" },
+    { "source": "85", "target": "42" },
+    { "source": "85", "target": "44" },
+    { "source": "85", "target": "50" },
+    { "source": "85", "target": "54" },
+    { "source": "85", "target": "61" },
+    { "source": "85", "target": "62" },
+    { "source": "85", "target": "66" },
+    { "source": "85", "target": "77" },
+    { "source": "85", "target": "82" },
+    { "source": "85", "target": "84" },
+    { "source": "85", "target": "149" },
+    { "source": "85", "target": "332" },
+    { "source": "85", "target": "417" },
+    { "source": "85", "target": "423" },
+    { "source": "85", "target": "467" },
+    { "source": "86", "target": "354" },
+    { "source": "87", "target": "90" },
+    { "source": "87", "target": "111" },
+    { "source": "87", "target": "112" },
+    { "source": "87", "target": "119" },
+    { "source": "87", "target": "242" },
+    { "source": "87", "target": "243" },
+    { "source": "87", "target": "301" },
+    { "source": "87", "target": "323" },
+    { "source": "87", "target": "325" },
+    { "source": "87", "target": "336" },
+    { "source": "87", "target": "346" },
+    { "source": "87", "target": "360" },
+    { "source": "88", "target": "89" },
+    { "source": "91", "target": "354" },
+    { "source": "92", "target": "27" },
+    { "source": "92", "target": "28" },
+    { "source": "92", "target": "109" },
+    { "source": "92", "target": "113" },
+    { "source": "92", "target": "137" },
+    { "source": "94", "target": "192" },
+    { "source": "95", "target": "281" },
+    { "source": "96", "target": "282" },
+    { "source": "97", "target": "95" },
+    { "source": "97", "target": "285" },
+    { "source": "98", "target": "96" },
+    { "source": "98", "target": "284" },
+    { "source": "99", "target": "32" },
+    { "source": "99", "target": "35" },
+    { "source": "99", "target": "36" },
+    { "source": "99", "target": "179" },
+    { "source": "99", "target": "190" },
+    { "source": "99", "target": "191" },
+    { "source": "99", "target": "313" },
+    { "source": "99", "target": "388" },
+    { "source": "100", "target": "258" },
+    { "source": "100", "target": "354" },
+    { "source": "101", "target": "91" },
+    { "source": "101", "target": "354" },
+    { "source": "101", "target": "378" },
+    { "source": "101", "target": "387" },
+    { "source": "102", "target": "120" },
+    { "source": "102", "target": "477" },
+    { "source": "104", "target": "105" },
+    { "source": "105", "target": "323" },
+    { "source": "105", "target": "325" },
+    { "source": "105", "target": "375" },
+    { "source": "108", "target": "91" },
+    { "source": "108", "target": "253" },
+    { "source": "108", "target": "316" },
+    { "source": "108", "target": "348" },
+    { "source": "108", "target": "363" },
+    { "source": "108", "target": "380" },
+    { "source": "109", "target": "245" },
+    { "source": "111", "target": "270" },
+    { "source": "115", "target": "15" },
+    { "source": "115", "target": "223" },
+    { "source": "115", "target": "275" },
+    { "source": "115", "target": "445" },
+    { "source": "116", "target": "115" },
+    { "source": "116", "target": "117" },
+    { "source": "116", "target": "308" },
+    { "source": "117", "target": "298" },
+    { "source": "117", "target": "308" },
+    { "source": "117", "target": "309" },
+    { "source": "118", "target": "91" },
+    { "source": "118", "target": "477" },
+    { "source": "119", "target": "199" },
+    { "source": "119", "target": "245" },
+    { "source": "119", "target": "246" },
+    { "source": "120", "target": "121" },
+    { "source": "120", "target": "122" },
+    { "source": "121", "target": "18" },
+    { "source": "121", "target": "19" },
+    { "source": "121", "target": "123" },
+    { "source": "121", "target": "372" },
+    { "source": "122", "target": "219" },
+    { "source": "122", "target": "323" },
+    { "source": "122", "target": "325" },
+    { "source": "122", "target": "375" },
+    { "source": "125", "target": "379" },
+    { "source": "125", "target": "408" },
+    { "source": "128", "target": "129" },
+    { "source": "129", "target": "130" },
+    { "source": "129", "target": "323" },
+    { "source": "129", "target": "374" },
+    { "source": "130", "target": "323" },
+    { "source": "130", "target": "325" },
+    { "source": "130", "target": "374" },
+    { "source": "131", "target": "107" },
+    { "source": "131", "target": "258" },
+    { "source": "132", "target": "152" },
+    { "source": "133", "target": "113" },
+    { "source": "133", "target": "417" },
+    { "source": "138", "target": "136" },
+    { "source": "139", "target": "140" },
+    { "source": "139", "target": "245" },
+    { "source": "141", "target": "90" },
+    { "source": "141", "target": "139" },
+    { "source": "141", "target": "142" },
+    { "source": "141", "target": "185" },
+    { "source": "141", "target": "245" },
+    { "source": "142", "target": "90" },
+    { "source": "142", "target": "139" },
+    { "source": "142", "target": "184" },
+    { "source": "142", "target": "245" },
+    { "source": "143", "target": "90" },
+    { "source": "143", "target": "140" },
+    { "source": "143", "target": "144" },
+    { "source": "144", "target": "87" },
+    { "source": "145", "target": "11" },
+    { "source": "145", "target": "140" },
+    { "source": "145", "target": "143" },
+    { "source": "145", "target": "156" },
+    { "source": "145", "target": "234" },
+    { "source": "145", "target": "238" },
+    { "source": "145", "target": "245" },
+    { "source": "145", "target": "254" },
+    { "source": "145", "target": "263" },
+    { "source": "145", "target": "265" },
+    { "source": "145", "target": "288" },
+    { "source": "145", "target": "291" },
+    { "source": "145", "target": "296" },
+    { "source": "145", "target": "417" },
+    { "source": "145", "target": "419" },
+    { "source": "145", "target": "423" },
+    { "source": "145", "target": "434" },
+    { "source": "146", "target": "245" },
+    { "source": "147", "target": "112" },
+    { "source": "149", "target": "152" },
+    { "source": "150", "target": "151" },
+    { "source": "150", "target": "152" },
+    { "source": "151", "target": "152" },
+    { "source": "153", "target": "192" },
+    { "source": "153", "target": "397" },
+    { "source": "155", "target": "91" },
+    { "source": "155", "target": "248" },
+    { "source": "155", "target": "430" },
+    { "source": "158", "target": "323" },
+    { "source": "158", "target": "325" },
+    { "source": "158", "target": "374" },
+    { "source": "160", "target": "94" },
+    { "source": "160", "target": "153" },
+    { "source": "162", "target": "248" },
+    { "source": "165", "target": "135" },
+    { "source": "165", "target": "166" },
+    { "source": "165", "target": "198" },
+    { "source": "165", "target": "380" },
+    { "source": "166", "target": "167" },
+    { "source": "167", "target": "323" },
+    { "source": "167", "target": "325" },
+    { "source": "167", "target": "375" },
+    { "source": "169", "target": "354" },
+    { "source": "170", "target": "245" },
+    { "source": "170", "target": "442" },
+    { "source": "171", "target": "41" },
+    { "source": "172", "target": "275" },
+    { "source": "174", "target": "132" },
+    { "source": "174", "target": "295" },
+    { "source": "174", "target": "312" },
+    { "source": "175", "target": "132" },
+    { "source": "175", "target": "295" },
+    { "source": "175", "target": "312" },
+    { "source": "176", "target": "174" },
+    { "source": "176", "target": "312" },
+    { "source": "177", "target": "175" },
+    { "source": "177", "target": "312" },
+    { "source": "178", "target": "120" },
+    { "source": "178", "target": "300" },
+    { "source": "178", "target": "345" },
+    { "source": "178", "target": "387" },
+    { "source": "178", "target": "477" },
+    { "source": "180", "target": "361" },
+    { "source": "182", "target": "147" },
+    { "source": "182", "target": "260" },
+    { "source": "184", "target": "187" },
+    { "source": "185", "target": "186" },
+    { "source": "185", "target": "188" },
+    { "source": "186", "target": "323" },
+    { "source": "186", "target": "325" },
+    { "source": "186", "target": "375" },
+    { "source": "191", "target": "179" },
+    { "source": "191", "target": "189" },
+    { "source": "191", "target": "190" },
+    { "source": "191", "target": "295" },
+    { "source": "191", "target": "312" },
+    { "source": "192", "target": "397" },
+    { "source": "192", "target": "414" },
+    { "source": "193", "target": "245" },
+    { "source": "193", "target": "444" },
+    { "source": "194", "target": "113" },
+    { "source": "194", "target": "238" },
+    { "source": "194", "target": "245" },
+    { "source": "194", "target": "416" },
+    { "source": "194", "target": "417" },
+    { "source": "195", "target": "183" },
+    { "source": "195", "target": "196" },
+    { "source": "195", "target": "253" },
+    { "source": "195", "target": "411" },
+    { "source": "195", "target": "413" },
+    { "source": "196", "target": "139" },
+    { "source": "196", "target": "230" },
+    { "source": "196", "target": "232" },
+    { "source": "196", "target": "238" },
+    { "source": "196", "target": "245" },
+    { "source": "196", "target": "250" },
+    { "source": "196", "target": "253" },
+    { "source": "196", "target": "269" },
+    { "source": "196", "target": "411" },
+    { "source": "196", "target": "413" },
+    { "source": "196", "target": "417" },
+    { "source": "196", "target": "423" },
+    { "source": "196", "target": "436" },
+    { "source": "197", "target": "240" },
+    { "source": "197", "target": "253" },
+    { "source": "197", "target": "476" },
+    { "source": "198", "target": "23" },
+    { "source": "198", "target": "104" },
+    { "source": "198", "target": "354" },
+    { "source": "200", "target": "9" },
+    { "source": "200", "target": "100" },
+    { "source": "200", "target": "253" },
+    { "source": "200", "target": "338" },
+    { "source": "200", "target": "340" },
+    { "source": "201", "target": "90" },
+    { "source": "201", "target": "226" },
+    { "source": "201", "target": "415" },
+    { "source": "202", "target": "238" },
+    { "source": "202", "target": "364" },
+    { "source": "202", "target": "417" },
+    { "source": "202", "target": "423" },
+    { "source": "203", "target": "106" },
+    { "source": "203", "target": "205" },
+    { "source": "203", "target": "242" },
+    { "source": "203", "target": "356" },
+    { "source": "204", "target": "229" },
+    { "source": "204", "target": "323" },
+    { "source": "204", "target": "325" },
+    { "source": "204", "target": "375" },
+    { "source": "205", "target": "204" },
+    { "source": "205", "target": "354" },
+    { "source": "205", "target": "355" },
+    { "source": "205", "target": "356" },
+    { "source": "206", "target": "197" },
+    { "source": "207", "target": "0" },
+    { "source": "207", "target": "23" },
+    { "source": "207", "target": "473" },
+    { "source": "208", "target": "91" },
+    { "source": "208", "target": "209" },
+    { "source": "209", "target": "91" },
+    { "source": "210", "target": "253" },
+    { "source": "210", "target": "320" },
+    { "source": "210", "target": "380" },
+    { "source": "210", "target": "430" },
+    { "source": "210", "target": "436" },
+    { "source": "211", "target": "91" },
+    { "source": "211", "target": "212" },
+    { "source": "211", "target": "216" },
+    { "source": "212", "target": "91" },
+    { "source": "214", "target": "172" },
+    { "source": "214", "target": "373" },
+    { "source": "215", "target": "106" },
+    { "source": "216", "target": "8" },
+    { "source": "216", "target": "10" },
+    { "source": "216", "target": "354" },
+    { "source": "217", "target": "91" },
+    { "source": "217", "target": "128" },
+    { "source": "217", "target": "245" },
+    { "source": "217", "target": "248" },
+    { "source": "217", "target": "380" },
+    { "source": "217", "target": "429" },
+    { "source": "217", "target": "430" },
+    { "source": "218", "target": "37" },
+    { "source": "218", "target": "215" },
+    { "source": "218", "target": "347" },
+    { "source": "218", "target": "354" },
+    { "source": "218", "target": "368" },
+    { "source": "218", "target": "370" },
+    { "source": "220", "target": "138" },
+    { "source": "220", "target": "198" },
+    { "source": "223", "target": "17" },
+    { "source": "223", "target": "140" },
+    { "source": "223", "target": "224" },
+    { "source": "223", "target": "238" },
+    { "source": "223", "target": "417" },
+    { "source": "223", "target": "437" },
+    { "source": "224", "target": "109" },
+    { "source": "225", "target": "98" },
+    { "source": "225", "target": "161" },
+    { "source": "225", "target": "284" },
+    { "source": "226", "target": "150" },
+    { "source": "226", "target": "200" },
+    { "source": "226", "target": "253" },
+    { "source": "226", "target": "258" },
+    { "source": "226", "target": "338" },
+    { "source": "226", "target": "351" },
+    { "source": "226", "target": "415" },
+    { "source": "226", "target": "432" },
+    { "source": "227", "target": "104" },
+    { "source": "227", "target": "106" },
+    { "source": "227", "target": "126" },
+    { "source": "227", "target": "275" },
+    { "source": "227", "target": "315" },
+    { "source": "228", "target": "168" },
+    { "source": "228", "target": "216" },
+    { "source": "230", "target": "90" },
+    { "source": "230", "target": "231" },
+    { "source": "230", "target": "245" },
+    { "source": "231", "target": "245" },
+    { "source": "232", "target": "140" },
+    { "source": "232", "target": "254" },
+    { "source": "234", "target": "110" },
+    { "source": "234", "target": "131" },
+    { "source": "234", "target": "237" },
+    { "source": "234", "target": "253" },
+    { "source": "234", "target": "380" },
+    { "source": "234", "target": "415" },
+    { "source": "235", "target": "110" },
+    { "source": "235", "target": "131" },
+    { "source": "235", "target": "237" },
+    { "source": "235", "target": "253" },
+    { "source": "235", "target": "380" },
+    { "source": "235", "target": "415" },
+    { "source": "236", "target": "110" },
+    { "source": "236", "target": "113" },
+    { "source": "236", "target": "131" },
+    { "source": "236", "target": "237" },
+    { "source": "236", "target": "253" },
+    { "source": "236", "target": "380" },
+    { "source": "236", "target": "415" },
+    { "source": "236", "target": "440" },
+    { "source": "238", "target": "417" },
+    { "source": "239", "target": "245" },
+    { "source": "239", "target": "248" },
+    { "source": "239", "target": "314" },
+    { "source": "241", "target": "90" },
+    { "source": "244", "target": "106" },
+    { "source": "244", "target": "290" },
+    { "source": "244", "target": "383" },
+    { "source": "246", "target": "109" },
+    { "source": "246", "target": "430" },
+    { "source": "247", "target": "113" },
+    { "source": "247", "target": "430" },
+    { "source": "248", "target": "113" },
+    { "source": "248", "target": "441" },
+    { "source": "249", "target": "91" },
+    { "source": "249", "target": "245" },
+    { "source": "249", "target": "335" },
+    { "source": "250", "target": "245" },
+    { "source": "250", "target": "314" },
+    { "source": "252", "target": "352" },
+    { "source": "254", "target": "245" },
+    { "source": "255", "target": "245" },
+    { "source": "256", "target": "337" },
+    { "source": "259", "target": "91" },
+    { "source": "259", "target": "93" },
+    { "source": "259", "target": "142" },
+    { "source": "259", "target": "185" },
+    { "source": "259", "target": "253" },
+    { "source": "259", "target": "280" },
+    { "source": "259", "target": "299" },
+    { "source": "260", "target": "7" },
+    { "source": "260", "target": "361" },
+    { "source": "261", "target": "88" },
+    { "source": "261", "target": "91" },
+    { "source": "261", "target": "125" },
+    { "source": "261", "target": "221" },
+    { "source": "261", "target": "228" },
+    { "source": "261", "target": "253" },
+    { "source": "261", "target": "275" },
+    { "source": "261", "target": "318" },
+    { "source": "261", "target": "346" },
+    { "source": "261", "target": "369" },
+    { "source": "261", "target": "379" },
+    { "source": "261", "target": "380" },
+    { "source": "261", "target": "409" },
+    { "source": "262", "target": "88" },
+    { "source": "262", "target": "125" },
+    { "source": "262", "target": "157" },
+    { "source": "262", "target": "228" },
+    { "source": "262", "target": "261" },
+    { "source": "262", "target": "291" },
+    { "source": "262", "target": "336" },
+    { "source": "262", "target": "340" },
+    { "source": "262", "target": "346" },
+    { "source": "262", "target": "380" },
+    { "source": "262", "target": "388" },
+    { "source": "262", "target": "406" },
+    { "source": "263", "target": "90" },
+    { "source": "263", "target": "237" },
+    { "source": "263", "target": "266" },
+    { "source": "263", "target": "276" },
+    { "source": "263", "target": "331" },
+    { "source": "263", "target": "380" },
+    { "source": "264", "target": "91" },
+    { "source": "264", "target": "237" },
+    { "source": "264", "target": "253" },
+    { "source": "264", "target": "267" },
+    { "source": "264", "target": "277" },
+    { "source": "264", "target": "332" },
+    { "source": "264", "target": "380" },
+    { "source": "266", "target": "237" },
+    { "source": "267", "target": "237" },
+    { "source": "268", "target": "90" },
+    { "source": "268", "target": "113" },
+    { "source": "268", "target": "245" },
+    { "source": "269", "target": "91" },
+    { "source": "269", "target": "113" },
+    { "source": "269", "target": "245" },
+    { "source": "270", "target": "258" },
+    { "source": "270", "target": "414" },
+    { "source": "272", "target": "430" },
+    { "source": "273", "target": "293" },
+    { "source": "273", "target": "430" },
+    { "source": "274", "target": "323" },
+    { "source": "274", "target": "325" },
+    { "source": "274", "target": "374" },
+    { "source": "275", "target": "39" },
+    { "source": "276", "target": "278" },
+    { "source": "277", "target": "279" },
+    { "source": "278", "target": "321" },
+    { "source": "278", "target": "323" },
+    { "source": "278", "target": "325" },
+    { "source": "278", "target": "374" },
+    { "source": "279", "target": "322" },
+    { "source": "279", "target": "323" },
+    { "source": "279", "target": "325" },
+    { "source": "279", "target": "375" },
+    { "source": "280", "target": "255" },
+    { "source": "280", "target": "287" },
+    { "source": "283", "target": "97" },
+    { "source": "283", "target": "281" },
+    { "source": "283", "target": "285" },
+    { "source": "284", "target": "282" },
+    { "source": "284", "target": "286" },
+    { "source": "285", "target": "281" },
+    { "source": "287", "target": "109" },
+    { "source": "288", "target": "235" },
+    { "source": "288", "target": "263" },
+    { "source": "288", "target": "265" },
+    { "source": "288", "target": "274" },
+    { "source": "288", "target": "275" },
+    { "source": "288", "target": "289" },
+    { "source": "289", "target": "109" },
+    { "source": "290", "target": "106" },
+    { "source": "292", "target": "249" },
+    { "source": "294", "target": "395" },
+    { "source": "296", "target": "252" },
+    { "source": "296", "target": "297" },
+    { "source": "297", "target": "113" },
+    { "source": "297", "target": "245" },
+    { "source": "297", "target": "335" },
+    { "source": "297", "target": "366" },
+    { "source": "297", "target": "444" },
+    { "source": "298", "target": "336" },
+    { "source": "300", "target": "149" },
+    { "source": "300", "target": "245" },
+    { "source": "300", "target": "430" },
+    { "source": "303", "target": "258" },
+    { "source": "303", "target": "380" },
+    { "source": "303", "target": "398" },
+    { "source": "304", "target": "303" },
+    { "source": "304", "target": "305" },
+    { "source": "305", "target": "303" },
+    { "source": "305", "target": "306" },
+    { "source": "305", "target": "323" },
+    { "source": "305", "target": "325" },
+    { "source": "305", "target": "375" },
+    { "source": "306", "target": "291" },
+    { "source": "306", "target": "303" },
+    { "source": "306", "target": "358" },
+    { "source": "307", "target": "181" },
+    { "source": "307", "target": "228" },
+    { "source": "308", "target": "311" },
+    { "source": "309", "target": "310" },
+    { "source": "309", "target": "311" },
+    { "source": "310", "target": "311" },
+    { "source": "310", "target": "327" },
+    { "source": "311", "target": "362" },
+    { "source": "311", "target": "399" },
+    { "source": "313", "target": "38" },
+    { "source": "313", "target": "179" },
+    { "source": "313", "target": "190" },
+    { "source": "315", "target": "90" },
+    { "source": "315", "target": "147" },
+    { "source": "315", "target": "180" },
+    { "source": "315", "target": "182" },
+    { "source": "315", "target": "260" },
+    { "source": "316", "target": "113" },
+    { "source": "316", "target": "132" },
+    { "source": "316", "target": "312" },
+    { "source": "316", "target": "348" },
+    { "source": "316", "target": "388" },
+    { "source": "316", "target": "442" },
+    { "source": "317", "target": "124" },
+    { "source": "317", "target": "164" },
+    { "source": "317", "target": "218" },
+    { "source": "317", "target": "354" },
+    { "source": "318", "target": "409" },
+    { "source": "321", "target": "291" },
+    { "source": "321", "target": "385" },
+    { "source": "322", "target": "386" },
+    { "source": "323", "target": "406" },
+    { "source": "325", "target": "323" },
+    { "source": "327", "target": "245" },
+    { "source": "327", "target": "328" },
+    { "source": "327", "target": "329" },
+    { "source": "328", "target": "319" },
+    { "source": "328", "target": "329" },
+    { "source": "329", "target": "194" },
+    { "source": "334", "target": "90" },
+    { "source": "335", "target": "90" },
+    { "source": "336", "target": "9" },
+    { "source": "336", "target": "258" },
+    { "source": "336", "target": "338" },
+    { "source": "336", "target": "340" },
+    { "source": "337", "target": "339" },
+    { "source": "338", "target": "9" },
+    { "source": "338", "target": "258" },
+    { "source": "338", "target": "340" },
+    { "source": "342", "target": "106" },
+    { "source": "342", "target": "275" },
+    { "source": "342", "target": "299" },
+    { "source": "343", "target": "106" },
+    { "source": "343", "target": "342" },
+    { "source": "343", "target": "354" },
+    { "source": "344", "target": "145" },
+    { "source": "344", "target": "244" },
+    { "source": "345", "target": "40" },
+    { "source": "345", "target": "91" },
+    { "source": "345", "target": "354" },
+    { "source": "345", "target": "355" },
+    { "source": "347", "target": "353" },
+    { "source": "348", "target": "91" },
+    { "source": "348", "target": "170" },
+    { "source": "348", "target": "245" },
+    { "source": "348", "target": "251" },
+    { "source": "348", "target": "442" },
+    { "source": "349", "target": "106" },
+    { "source": "349", "target": "158" },
+    { "source": "349", "target": "396" },
+    { "source": "351", "target": "432" },
+    { "source": "354", "target": "355" },
+    { "source": "355", "target": "323" },
+    { "source": "355", "target": "325" },
+    { "source": "355", "target": "375" },
+    { "source": "356", "target": "233" },
+    { "source": "356", "target": "350" },
+    { "source": "356", "target": "354" },
+    { "source": "358", "target": "113" },
+    { "source": "358", "target": "146" },
+    { "source": "358", "target": "160" },
+    { "source": "359", "target": "242" },
+    { "source": "363", "target": "39" },
+    { "source": "364", "target": "414" },
+    { "source": "365", "target": "159" },
+    { "source": "365", "target": "417" },
+    { "source": "366", "target": "354" },
+    { "source": "367", "target": "354" },
+    { "source": "368", "target": "252" },
+    { "source": "369", "target": "91" },
+    { "source": "374", "target": "323" },
+    { "source": "374", "target": "325" },
+    { "source": "374", "target": "406" },
+    { "source": "375", "target": "323" },
+    { "source": "375", "target": "325" },
+    { "source": "375", "target": "406" },
+    { "source": "376", "target": "113" },
+    { "source": "376", "target": "140" },
+    { "source": "376", "target": "245" },
+    { "source": "376", "target": "272" },
+    { "source": "376", "target": "291" },
+    { "source": "376", "target": "436" },
+    { "source": "377", "target": "28" },
+    { "source": "377", "target": "213" },
+    { "source": "377", "target": "275" },
+    { "source": "377", "target": "364" },
+    { "source": "378", "target": "115" },
+    { "source": "378", "target": "116" },
+    { "source": "378", "target": "201" },
+    { "source": "378", "target": "222" },
+    { "source": "378", "target": "242" },
+    { "source": "378", "target": "302" },
+    { "source": "378", "target": "303" },
+    { "source": "378", "target": "304" },
+    { "source": "378", "target": "327" },
+    { "source": "378", "target": "336" },
+    { "source": "378", "target": "354" },
+    { "source": "378", "target": "356" },
+    { "source": "378", "target": "365" },
+    { "source": "378", "target": "403" },
+    { "source": "379", "target": "432" },
+    { "source": "380", "target": "381" },
+    { "source": "381", "target": "323" },
+    { "source": "381", "target": "325" },
+    { "source": "381", "target": "375" },
+    { "source": "382", "target": "113" },
+    { "source": "382", "target": "291" },
+    { "source": "385", "target": "228" },
+    { "source": "385", "target": "384" },
+    { "source": "385", "target": "468" },
+    { "source": "386", "target": "228" },
+    { "source": "386", "target": "384" },
+    { "source": "386", "target": "468" },
+    { "source": "387", "target": "228" },
+    { "source": "387", "target": "384" },
+    { "source": "387", "target": "469" },
+    { "source": "388", "target": "312" },
+    { "source": "388", "target": "389" },
+    { "source": "388", "target": "390" },
+    { "source": "389", "target": "323" },
+    { "source": "389", "target": "325" },
+    { "source": "389", "target": "375" },
+    { "source": "390", "target": "291" },
+    { "source": "390", "target": "412" },
+    { "source": "391", "target": "253" },
+    { "source": "391", "target": "291" },
+    { "source": "391", "target": "390" },
+    { "source": "392", "target": "253" },
+    { "source": "392", "target": "291" },
+    { "source": "392", "target": "390" },
+    { "source": "393", "target": "256" },
+    { "source": "393", "target": "273" },
+    { "source": "393", "target": "291" },
+    { "source": "393", "target": "336" },
+    { "source": "393", "target": "359" },
+    { "source": "393", "target": "366" },
+    { "source": "393", "target": "382" },
+    { "source": "393", "target": "388" },
+    { "source": "393", "target": "390" },
+    { "source": "393", "target": "392" },
+    { "source": "394", "target": "388" },
+    { "source": "394", "target": "393" },
+    { "source": "394", "target": "417" },
+    { "source": "396", "target": "112" },
+    { "source": "396", "target": "371" },
+    { "source": "399", "target": "414" },
+    { "source": "400", "target": "401" },
+    { "source": "403", "target": "404" },
+    { "source": "404", "target": "400" },
+    { "source": "404", "target": "401" },
+    { "source": "404", "target": "405" },
+    { "source": "405", "target": "402" },
+    { "source": "411", "target": "194" },
+    { "source": "411", "target": "354" },
+    { "source": "411", "target": "357" },
+    { "source": "415", "target": "351" },
+    { "source": "415", "target": "432" },
+    { "source": "417", "target": "113" },
+    { "source": "417", "target": "420" },
+    { "source": "418", "target": "103" },
+    { "source": "418", "target": "253" },
+    { "source": "418", "target": "291" },
+    { "source": "418", "target": "323" },
+    { "source": "418", "target": "325" },
+    { "source": "418", "target": "375" },
+    { "source": "418", "target": "422" },
+    { "source": "419", "target": "113" },
+    { "source": "419", "target": "238" },
+    { "source": "419", "target": "417" },
+    { "source": "419", "target": "423" },
+    { "source": "420", "target": "325" },
+    { "source": "420", "target": "421" },
+    { "source": "421", "target": "323" },
+    { "source": "421", "target": "325" },
+    { "source": "421", "target": "375" },
+    { "source": "421", "target": "418" },
+    { "source": "421", "target": "422" },
+    { "source": "423", "target": "238" },
+    { "source": "423", "target": "417" },
+    { "source": "424", "target": "238" },
+    { "source": "424", "target": "417" },
+    { "source": "425", "target": "28" },
+    { "source": "425", "target": "113" },
+    { "source": "425", "target": "114" },
+    { "source": "425", "target": "238" },
+    { "source": "425", "target": "253" },
+    { "source": "425", "target": "261" },
+    { "source": "425", "target": "296" },
+    { "source": "425", "target": "324" },
+    { "source": "425", "target": "332" },
+    { "source": "425", "target": "366" },
+    { "source": "425", "target": "371" },
+    { "source": "425", "target": "417" },
+    { "source": "425", "target": "419" },
+    { "source": "425", "target": "423" },
+    { "source": "425", "target": "426" },
+    { "source": "425", "target": "427" },
+    { "source": "425", "target": "428" },
+    { "source": "426", "target": "28" },
+    { "source": "426", "target": "89" },
+    { "source": "426", "target": "91" },
+    { "source": "426", "target": "114" },
+    { "source": "426", "target": "125" },
+    { "source": "426", "target": "228" },
+    { "source": "426", "target": "253" },
+    { "source": "426", "target": "261" },
+    { "source": "426", "target": "291" },
+    { "source": "426", "target": "296" },
+    { "source": "426", "target": "324" },
+    { "source": "426", "target": "332" },
+    { "source": "426", "target": "346" },
+    { "source": "426", "target": "366" },
+    { "source": "426", "target": "380" },
+    { "source": "426", "target": "423" },
+    { "source": "426", "target": "427" },
+    { "source": "426", "target": "428" },
+    { "source": "427", "target": "17" },
+    { "source": "427", "target": "28" },
+    { "source": "427", "target": "30" },
+    { "source": "427", "target": "88" },
+    { "source": "427", "target": "91" },
+    { "source": "427", "target": "93" },
+    { "source": "427", "target": "114" },
+    { "source": "427", "target": "142" },
+    { "source": "427", "target": "155" },
+    { "source": "427", "target": "202" },
+    { "source": "427", "target": "206" },
+    { "source": "427", "target": "208" },
+    { "source": "427", "target": "210" },
+    { "source": "427", "target": "211" },
+    { "source": "427", "target": "217" },
+    { "source": "427", "target": "238" },
+    { "source": "427", "target": "239" },
+    { "source": "427", "target": "245" },
+    { "source": "427", "target": "248" },
+    { "source": "427", "target": "253" },
+    { "source": "427", "target": "259" },
+    { "source": "427", "target": "261" },
+    { "source": "427", "target": "280" },
+    { "source": "427", "target": "291" },
+    { "source": "427", "target": "296" },
+    { "source": "427", "target": "324" },
+    { "source": "427", "target": "330" },
+    { "source": "427", "target": "332" },
+    { "source": "427", "target": "341" },
+    { "source": "427", "target": "346" },
+    { "source": "427", "target": "366" },
+    { "source": "427", "target": "380" },
+    { "source": "427", "target": "417" },
+    { "source": "427", "target": "423" },
+    { "source": "427", "target": "428" },
+    { "source": "427", "target": "430" },
+    { "source": "428", "target": "91" },
+    { "source": "428", "target": "238" },
+    { "source": "428", "target": "423" },
+    { "source": "430", "target": "431" },
+    { "source": "430", "target": "433" },
+    { "source": "432", "target": "430" },
+    { "source": "434", "target": "443" },
+    { "source": "435", "target": "438" },
+    { "source": "435", "target": "439" },
+    { "source": "435", "target": "444" },
+    { "source": "436", "target": "437" },
+    { "source": "436", "target": "445" },
+    { "source": "437", "target": "445" },
+    { "source": "438", "target": "323" },
+    { "source": "438", "target": "325" },
+    { "source": "438", "target": "374" },
+    { "source": "439", "target": "323" },
+    { "source": "439", "target": "325" },
+    { "source": "439", "target": "374" },
+    { "source": "440", "target": "443" },
+    { "source": "441", "target": "444" },
+    { "source": "442", "target": "445" },
+    { "source": "443", "target": "446" },
+    { "source": "443", "target": "449" },
+    { "source": "443", "target": "452" },
+    { "source": "443", "target": "455" },
+    { "source": "443", "target": "458" },
+    { "source": "443", "target": "461" },
+    { "source": "443", "target": "464" },
+    { "source": "444", "target": "447" },
+    { "source": "444", "target": "450" },
+    { "source": "444", "target": "453" },
+    { "source": "444", "target": "456" },
+    { "source": "444", "target": "459" },
+    { "source": "444", "target": "462" },
+    { "source": "444", "target": "465" },
+    { "source": "445", "target": "448" },
+    { "source": "445", "target": "451" },
+    { "source": "445", "target": "454" },
+    { "source": "445", "target": "457" },
+    { "source": "445", "target": "460" },
+    { "source": "445", "target": "463" },
+    { "source": "445", "target": "466" },
+    { "source": "467", "target": "13" },
+    { "source": "467", "target": "38" },
+    { "source": "467", "target": "91" },
+    { "source": "467", "target": "104" },
+    { "source": "467", "target": "108" },
+    { "source": "467", "target": "114" },
+    { "source": "467", "target": "139" },
+    { "source": "467", "target": "141" },
+    { "source": "467", "target": "154" },
+    { "source": "467", "target": "225" },
+    { "source": "467", "target": "238" },
+    { "source": "467", "target": "245" },
+    { "source": "467", "target": "253" },
+    { "source": "467", "target": "264" },
+    { "source": "467", "target": "267" },
+    { "source": "467", "target": "284" },
+    { "source": "467", "target": "291" },
+    { "source": "467", "target": "292" },
+    { "source": "467", "target": "302" },
+    { "source": "467", "target": "332" },
+    { "source": "467", "target": "334" },
+    { "source": "467", "target": "348" },
+    { "source": "467", "target": "367" },
+    { "source": "467", "target": "407" },
+    { "source": "467", "target": "417" },
+    { "source": "467", "target": "419" },
+    { "source": "467", "target": "423" },
+    { "source": "467", "target": "424" },
+    { "source": "467", "target": "441" },
+    { "source": "467", "target": "470" },
+    { "source": "467", "target": "471" },
+    { "source": "467", "target": "474" },
+    { "source": "468", "target": "258" },
+    { "source": "469", "target": "258" },
+    { "source": "470", "target": "242" },
+    { "source": "470", "target": "245" },
+    { "source": "470", "target": "257" },
+    { "source": "470", "target": "314" },
+    { "source": "471", "target": "29" },
+    { "source": "471", "target": "193" },
+    { "source": "471", "target": "245" },
+    { "source": "471", "target": "248" },
+    { "source": "471", "target": "291" },
+    { "source": "471", "target": "348" },
+    { "source": "471", "target": "472" },
+    { "source": "474", "target": "91" },
+    { "source": "474", "target": "162" },
+    { "source": "474", "target": "253" },
+    { "source": "474", "target": "291" },
+    { "source": "474", "target": "475" },
+    { "source": "477", "target": "478" },
+    { "source": "479", "target": "480" },
+    { "source": "480", "target": "323" },
+    { "source": "480", "target": "325" },
+    { "source": "480", "target": "375" }
+  ]
+}
diff --git a/packages/layerchart/static/data/examples/graph/dag-medium.json b/packages/layerchart/static/data/examples/graph/dag-medium.json
new file mode 100644
index 000000000..544d9bc2e
--- /dev/null
+++ b/packages/layerchart/static/data/examples/graph/dag-medium.json
@@ -0,0 +1,311 @@
+{
+  "nodes": [
+    { "id": "0", "name": "112ef21b3cba85614a3ca14ec3ffed8a" },
+    { "id": "1", "name": "183453b020e941b9478ccf4c18af2b27" },
+    { "id": "2", "name": "dc51a7d438ed5e023a4aa7347e6de8dc" },
+    { "id": "3", "name": "7e0a00244e129a260c2d00efcb137ab7" },
+    { "id": "4", "name": "593c2ce3452ed8df09e0435aefd18bd8" },
+    { "id": "5", "name": "4b3a6218bb3e3a7303e8a171a60fcf92" },
+    { "id": "6", "name": "54c280558263a67e0a84ba34f625c464" },
+    { "id": "7", "name": "21b8735d8a7a218da89a7fb174c792f3" },
+    { "id": "8", "name": "0d9e2b2753f492ab4307253ef862c37a" },
+    { "id": "9", "name": "dbad862e2720f8a2b3a51efb1ebe3fc1" },
+    { "id": "10", "name": "edac976a125467998ee6eccd35ba94f6" },
+    { "id": "11", "name": "bb5b2ae1f13372e0f31c9c51c90e1537" },
+    { "id": "12", "name": "bb5b2ae1f13372e0f31c9c51c90e1537" },
+    { "id": "13", "name": "b400c8f718345d43f396fe655509445f" },
+    { "id": "14", "name": "9a59bf06c28bfdd2004fd9ca4f416381" },
+    { "id": "15", "name": "39adfacef8f9f6766dbcbf4d77a5e01e" },
+    { "id": "16", "name": "d649c565bb540fb2eefb6c0b539d6242" },
+    { "id": "17", "name": "8bdba20fbf947deb51bb901d81013b4d" },
+    { "id": "18", "name": "8bdba20fbf947deb51bb901d81013b4d" },
+    { "id": "19", "name": "ff79dadf97072cc43968b8fc493d918c" },
+    { "id": "20", "name": "c3eef34d092ed60c3b2791814511903a" },
+    { "id": "21", "name": "c14031940383c0c73116d659fc7fea2e" },
+    { "id": "22", "name": "44a3cdb869ff629fe47411912927e71e" },
+    { "id": "23", "name": "4d4b370ab9b3dbca1ccdb1a5cca6a728" },
+    { "id": "24", "name": "f1b980d0edb32ee093ce6d5f03829765" },
+    { "id": "25", "name": "51c3fbe0170e433dd010f9b8634f1c93" },
+    { "id": "26", "name": "e41fad42ce43492fd3ec1aca019866d8" },
+    { "id": "27", "name": "af15d11229bb0dee2b5d037bc92fb7ff" },
+    { "id": "28", "name": "b54dbbc002e9e7cf4507b390989bfe86" },
+    { "id": "29", "name": "1852fbae944d82f4da0c9410f0763ca8" },
+    { "id": "30", "name": "7f5c935094204f88cbaaad83db991b17" },
+    { "id": "31", "name": "8684147451a6cc3b92142c6f4b78e61c" },
+    { "id": "32", "name": "7afe399f1415b137d0962f82662fa9d4" },
+    { "id": "33", "name": "afc85ee276f33abe7d041853c634fc36" },
+    { "id": "34", "name": "3ff47a2d7c0f78a49c8774990d82ccdd" },
+    { "id": "35", "name": "4e4eaf9e2289f546ab4e89a58cb3a866" },
+    { "id": "36", "name": "d0923e2dcda86958c930938c946649fb" },
+    { "id": "37", "name": "c87ba77ad88418483bc707b655300574" },
+    { "id": "38", "name": "9cbb47c15bdee9d8f1ac2b6ffc96a39c" },
+    { "id": "39", "name": "73015feba463836004e192dd64b4c85e" },
+    { "id": "40", "name": "c5b825e5c013d16600775fb568bd934c" },
+    { "id": "41", "name": "013764cfe4d1f0c0bb74403295d0f208" },
+    { "id": "42", "name": "bf911b21d6cb2222f430658c4c281604" },
+    { "id": "43", "name": "e5823ba08cf6f8acc6662017ec572078" },
+    { "id": "44", "name": "dc1d71bbb5c4d2a5e936db79ef10c19f" },
+    { "id": "45", "name": "8861021ea041394f627e3a1b60c3e92c" },
+    { "id": "46", "name": "a3b623e7b25c44ed41eb6b8314a10f41" },
+    { "id": "47", "name": "e376836d2234522833fa3c07d077f560" },
+    { "id": "48", "name": "8345a34a65aa1a67f3e6f8852297c25b" },
+    { "id": "49", "name": "8248c04590fc509824b9b5f7c606a590" },
+    { "id": "50", "name": "f1ce1e003b7fcaa301e3e84a2a17caf3" },
+    { "id": "51", "name": "d07ee43840f516baf4e9fc94ba41bd77" },
+    { "id": "52", "name": "7711be245e38138607b03d2eafb32740" },
+    { "id": "53", "name": "e44d5b0493cfce7c63a46b8114098e56" },
+    { "id": "54", "name": "ae1eed9aa160f0eb2db25ce57c2388d5" },
+    { "id": "55", "name": "ac0d1ac1f21abd32b30bf4e44990b94a" },
+    { "id": "56", "name": "4627023a7757fbfdc063f16e22dad049" },
+    { "id": "57", "name": "b7529e2456536d65b72ff4eafbe8d6a6" },
+    { "id": "58", "name": "72990d5b72e9f7d712372696ea7b0d36" },
+    { "id": "59", "name": "d88b0dd70cc3da6c8f5e0e6c64aa3d2a" },
+    { "id": "60", "name": "7a674c327bfa07f7c1204fb38ca6ef3b" },
+    { "id": "61", "name": "c8bd1df85941b8f0fa7b9ff5d42b5319" },
+    { "id": "62", "name": "df0cc91e0f37d78d6137617cb7377ee3" },
+    { "id": "63", "name": "44c5b763d21e9a3ed8cad56977bfd75c" },
+    { "id": "64", "name": "9cd81e68982526e6d5f8e853d2d88149" },
+    { "id": "65", "name": "223beda8a3f91ec1c7fb94f17bd1a918" },
+    { "id": "66", "name": "1078def2526ca3ac25242174cb5df6c9" },
+    { "id": "67", "name": "d4cfab1b518d245bc1fc8db52b6d8ddc" },
+    { "id": "68", "name": "a1890b4c4f2b5e1944c40a9b0f84a1c9" },
+    { "id": "69", "name": "61e4a0242b73a47ca5be012eec164602" },
+    { "id": "70", "name": "5fb4f826eb039e06dcd48602b6f47744" },
+    { "id": "71", "name": "d780e58e7e113a4d9b3b8f7cb93e0d90" },
+    { "id": "72", "name": "197a397c6699d48b4e3d0684e3d60409" },
+    { "id": "73", "name": "ad96132928e568d000afd7430976a47a" },
+    { "id": "74", "name": "10faae554c642e7607b1dd0cc8607703" },
+    { "id": "75", "name": "68b958c892719d213e8d9118f14430ac" },
+    { "id": "76", "name": "dc0d4d2d9881175e8caf18416000e2ab" },
+    { "id": "77", "name": "93237e284f0a749ffba472e449bfc25e" },
+    { "id": "78", "name": "efdd6be310211dc9f99352a528639a69" },
+    { "id": "79", "name": "d726760b0467b77803d6d1f3585deb6e" },
+    { "id": "80", "name": "a8cbe673c91e4d81ec83c0cab9067500" },
+    { "id": "81", "name": "a8f29833a3d589de6093d0e72f7718d6" },
+    { "id": "82", "name": "945715dcef391d4a708567515456476b" },
+    { "id": "83", "name": "ec18ad9a83c312380533fa93ac6fc61c" },
+    { "id": "84", "name": "ef82bc84de1446be5cfb022f09a35779" },
+    { "id": "85", "name": "11233c483a51e4e0a14c9e7f13c591eb" },
+    { "id": "86", "name": "8b9c754a47f15ad23b43d47052a0a530" },
+    { "id": "87", "name": "d1d88fa25cf5d33c474f514746583b8a" },
+    { "id": "88", "name": "d1792b3856fcd0a9c4d37aed5060977d" },
+    { "id": "89", "name": "e5df42e20907d1dd015404c25257655f" },
+    { "id": "90", "name": "a4c973de7cd1cad6a7fd96309f7251f8" },
+    { "id": "91", "name": "109e84982280068d94d40ad3c8e5954a" },
+    { "id": "92", "name": "fee9e500058a8269de4e0f3bedf94046" },
+    { "id": "93", "name": "1f4eaf4419512c0e8b4c337a0f22e5dd" },
+    { "id": "94", "name": "9cc91d204f5795048050d39859a7cab6" },
+    { "id": "95", "name": "d1dbf933a5b6913a22927ac2fb763b3c" },
+    { "id": "96", "name": "c04b6fa7a56d0da7c952442232b4f0c4" },
+    { "id": "97", "name": "1d6efdf2bbe004c7dc5483ad0a44ca30" },
+    { "id": "98", "name": "deb563564005ef6b03805fcc97a04cbe" },
+    { "id": "99", "name": "558c8720b5b05214362ab84f0a215d27" },
+    { "id": "100", "name": "b6acf90bdb44c2d3b804683b6525ec8d" },
+    { "id": "101", "name": "d88c3e9efafa6c134c03fce74fcd6873" },
+    { "id": "102", "name": "866c37703f08cc4913e30314a8075467" },
+    { "id": "103", "name": "2ae607ba615284096f49177a739fdf9a" },
+    { "id": "104", "name": "b324540f4b8f0ba32c08d08f7d4bf4e0" },
+    { "id": "105", "name": "ae70b95a170877b7638329348cc14b9a" },
+    { "id": "106", "name": "c05d2d71da2e1af6820a8ff040cb5719" }
+  ],
+  "links": [
+    { "source": "1", "target": "35" },
+    { "source": "1", "target": "43" },
+    { "source": "1", "target": "102" },
+    { "source": "8", "target": "9" },
+    { "source": "8", "target": "10" },
+    { "source": "8", "target": "70" },
+    { "source": "10", "target": "9" },
+    { "source": "10", "target": "32" },
+    { "source": "11", "target": "3" },
+    { "source": "11", "target": "17" },
+    { "source": "11", "target": "38" },
+    { "source": "11", "target": "81" },
+    { "source": "12", "target": "1" },
+    { "source": "12", "target": "3" },
+    { "source": "12", "target": "16" },
+    { "source": "12", "target": "18" },
+    { "source": "12", "target": "36" },
+    { "source": "12", "target": "50" },
+    { "source": "12", "target": "66" },
+    { "source": "12", "target": "73" },
+    { "source": "12", "target": "75" },
+    { "source": "12", "target": "77" },
+    { "source": "12", "target": "78" },
+    { "source": "12", "target": "80" },
+    { "source": "12", "target": "85" },
+    { "source": "12", "target": "86" },
+    { "source": "12", "target": "90" },
+    { "source": "13", "target": "12" },
+    { "source": "13", "target": "23" },
+    { "source": "13", "target": "42" },
+    { "source": "14", "target": "12" },
+    { "source": "14", "target": "75" },
+    { "source": "14", "target": "86" },
+    { "source": "15", "target": "12" },
+    { "source": "15", "target": "14" },
+    { "source": "15", "target": "75" },
+    { "source": "16", "target": "34" },
+    { "source": "16", "target": "57" },
+    { "source": "16", "target": "59" },
+    { "source": "16", "target": "60" },
+    { "source": "16", "target": "79" },
+    { "source": "17", "target": "53" },
+    { "source": "18", "target": "53" },
+    { "source": "19", "target": "12" },
+    { "source": "19", "target": "65" },
+    { "source": "19", "target": "75" },
+    { "source": "20", "target": "5" },
+    { "source": "20", "target": "45" },
+    { "source": "21", "target": "1" },
+    { "source": "21", "target": "3" },
+    { "source": "21", "target": "22" },
+    { "source": "23", "target": "0" },
+    { "source": "23", "target": "1" },
+    { "source": "23", "target": "6" },
+    { "source": "23", "target": "8" },
+    { "source": "23", "target": "11" },
+    { "source": "23", "target": "24" },
+    { "source": "23", "target": "39" },
+    { "source": "23", "target": "42" },
+    { "source": "23", "target": "48" },
+    { "source": "23", "target": "51" },
+    { "source": "23", "target": "54" },
+    { "source": "23", "target": "61" },
+    { "source": "23", "target": "63" },
+    { "source": "23", "target": "70" },
+    { "source": "23", "target": "71" },
+    { "source": "23", "target": "72" },
+    { "source": "23", "target": "82" },
+    { "source": "23", "target": "95" },
+    { "source": "24", "target": "6" },
+    { "source": "24", "target": "39" },
+    { "source": "25", "target": "7" },
+    { "source": "25", "target": "28" },
+    { "source": "26", "target": "7" },
+    { "source": "26", "target": "27" },
+    { "source": "26", "target": "28" },
+    { "source": "27", "target": "2" },
+    { "source": "27", "target": "7" },
+    { "source": "27", "target": "28" },
+    { "source": "27", "target": "46" },
+    { "source": "27", "target": "50" },
+    { "source": "27", "target": "69" },
+    { "source": "28", "target": "7" },
+    { "source": "30", "target": "44" },
+    { "source": "30", "target": "50" },
+    { "source": "30", "target": "70" },
+    { "source": "30", "target": "72" },
+    { "source": "35", "target": "43" },
+    { "source": "37", "target": "36" },
+    { "source": "37", "target": "70" },
+    { "source": "38", "target": "2" },
+    { "source": "38", "target": "33" },
+    { "source": "39", "target": "29" },
+    { "source": "41", "target": "96" },
+    { "source": "44", "target": "7" },
+    { "source": "46", "target": "2" },
+    { "source": "48", "target": "2" },
+    { "source": "49", "target": "35" },
+    { "source": "49", "target": "43" },
+    { "source": "52", "target": "43" },
+    { "source": "52", "target": "102" },
+    { "source": "54", "target": "48" },
+    { "source": "54", "target": "55" },
+    { "source": "54", "target": "56" },
+    { "source": "54", "target": "96" },
+    { "source": "54", "target": "101" },
+    { "source": "56", "target": "55" },
+    { "source": "57", "target": "58" },
+    { "source": "57", "target": "59" },
+    { "source": "57", "target": "60" },
+    { "source": "57", "target": "79" },
+    { "source": "57", "target": "93" },
+    { "source": "58", "target": "59" },
+    { "source": "58", "target": "60" },
+    { "source": "58", "target": "93" },
+    { "source": "59", "target": "92" },
+    { "source": "60", "target": "59" },
+    { "source": "61", "target": "2" },
+    { "source": "61", "target": "26" },
+    { "source": "61", "target": "29" },
+    { "source": "61", "target": "62" },
+    { "source": "62", "target": "25" },
+    { "source": "62", "target": "26" },
+    { "source": "62", "target": "28" },
+    { "source": "62", "target": "49" },
+    { "source": "63", "target": "64" },
+    { "source": "68", "target": "104" },
+    { "source": "70", "target": "71" },
+    { "source": "71", "target": "59" },
+    { "source": "71", "target": "60" },
+    { "source": "71", "target": "79" },
+    { "source": "72", "target": "40" },
+    { "source": "72", "target": "67" },
+    { "source": "72", "target": "70" },
+    { "source": "75", "target": "21" },
+    { "source": "75", "target": "47" },
+    { "source": "75", "target": "52" },
+    { "source": "75", "target": "74" },
+    { "source": "75", "target": "76" },
+    { "source": "75", "target": "94" },
+    { "source": "75", "target": "106" },
+    { "source": "79", "target": "59" },
+    { "source": "79", "target": "60" },
+    { "source": "79", "target": "92" },
+    { "source": "80", "target": "104" },
+    { "source": "82", "target": "70" },
+    { "source": "82", "target": "72" },
+    { "source": "83", "target": "70" },
+    { "source": "84", "target": "20" },
+    { "source": "84", "target": "38" },
+    { "source": "84", "target": "39" },
+    { "source": "84", "target": "70" },
+    { "source": "85", "target": "31" },
+    { "source": "85", "target": "50" },
+    { "source": "85", "target": "70" },
+    { "source": "85", "target": "71" },
+    { "source": "85", "target": "72" },
+    { "source": "85", "target": "80" },
+    { "source": "85", "target": "83" },
+    { "source": "86", "target": "30" },
+    { "source": "86", "target": "31" },
+    { "source": "86", "target": "36" },
+    { "source": "86", "target": "37" },
+    { "source": "86", "target": "61" },
+    { "source": "86", "target": "70" },
+    { "source": "86", "target": "73" },
+    { "source": "86", "target": "75" },
+    { "source": "86", "target": "84" },
+    { "source": "87", "target": "88" },
+    { "source": "90", "target": "87" },
+    { "source": "90", "target": "88" },
+    { "source": "90", "target": "91" },
+    { "source": "91", "target": "89" },
+    { "source": "94", "target": "43" },
+    { "source": "95", "target": "68" },
+    { "source": "95", "target": "102" },
+    { "source": "95", "target": "104" },
+    { "source": "96", "target": "7" },
+    { "source": "96", "target": "98" },
+    { "source": "97", "target": "4" },
+    { "source": "97", "target": "44" },
+    { "source": "97", "target": "50" },
+    { "source": "97", "target": "59" },
+    { "source": "97", "target": "60" },
+    { "source": "97", "target": "79" },
+    { "source": "97", "target": "100" },
+    { "source": "98", "target": "60" },
+    { "source": "98", "target": "99" },
+    { "source": "99", "target": "59" },
+    { "source": "99", "target": "60" },
+    { "source": "99", "target": "79" },
+    { "source": "99", "target": "97" },
+    { "source": "99", "target": "100" },
+    { "source": "101", "target": "41" },
+    { "source": "101", "target": "96" },
+    { "source": "102", "target": "103" },
+    { "source": "102", "target": "105" },
+    { "source": "104", "target": "102" }
+  ]
+}
diff --git a/packages/layerchart/static/data/examples/graph/tcp-state.json b/packages/layerchart/static/data/examples/graph/tcp-state.json
new file mode 100644
index 000000000..ae5d3f2f5
--- /dev/null
+++ b/packages/layerchart/static/data/examples/graph/tcp-state.json
@@ -0,0 +1,35 @@
+{
+  "nodes": [
+    { "id": "CLOSED" },
+    { "id": "LISTEN" },
+    { "id": "SYN RCVD" },
+    { "id": "SYN SENT" },
+    { "id": "ESTAB" },
+    { "id": "FINWAIT-1" },
+    { "id": "CLOSE WAIT" },
+    { "id": "FINWAIT-2" },
+    { "id": "CLOSING" },
+    { "id": "LAST-ACK" },
+    { "id": "TIME WAIT" }
+  ],
+  "links": [
+    { "source": "CLOSED", "target": "LISTEN", "label": "open" },
+    { "source": "LISTEN", "target": "SYN RCVD", "label": "rcv SYN" },
+    { "source": "LISTEN", "target": "SYN SENT", "label": "send" },
+    { "source": "LISTEN", "target": "CLOSED", "label": "close" },
+    { "source": "SYN RCVD", "target": "FINWAIT-1", "label": "close" },
+    { "source": "SYN RCVD", "target": "ESTAB", "label": "rcv ACK of SYN" },
+    { "source": "SYN SENT", "target": "SYN RCVD", "label": "rcv SYN" },
+    { "source": "SYN SENT", "target": "ESTAB", "label": "rcv SYN, ACK" },
+    { "source": "SYN SENT", "target": "CLOSED", "label": "close" },
+    { "source": "ESTAB", "target": "FINWAIT-1", "label": "close" },
+    { "source": "ESTAB", "target": "CLOSE WAIT", "label": "rcv FIN" },
+    { "source": "FINWAIT-1", "target": "FINWAIT-2", "label": "rcv ACK of FIN" },
+    { "source": "FINWAIT-1", "target": "CLOSING", "label": "rcv FIN" },
+    { "source": "CLOSE WAIT", "target": "LAST-ACK", "label": "close" },
+    { "source": "FINWAIT-2", "target": "TIME WAIT", "label": "rcv FIN" },
+    { "source": "CLOSING", "target": "TIME WAIT", "label": "rcv ACK of FIN" },
+    { "source": "LAST-ACK", "target": "CLOSED", "label": "rcv ACK of FIN" },
+    { "source": "TIME WAIT", "target": "CLOSED", "label": "timeout=2MSL" }
+  ]
+}
diff --git a/packages/layerchart/tailwind.config.cjs b/packages/layerchart/tailwind.config.cjs
index 513003c32..e2d1c2ff0 100644
--- a/packages/layerchart/tailwind.config.cjs
+++ b/packages/layerchart/tailwind.config.cjs
@@ -43,5 +43,25 @@ module.exports = {
       }),
     },
   },
-  plugins: [require('@tailwindcss/typography'), svelteUx],
+  plugins: [
+    require('@tailwindcss/typography'),
+    svelteUx,
+    plugin(function ({ addComponents }) {
+      // Consider moving to tailwind plugin
+      addComponents({
+        '.grid-cols-xs': {
+          '@apply grid-cols-[repeat(auto-fill,minmax(200px,1fr))]': {},
+        },
+        '.grid-cols-sm': {
+          '@apply grid-cols-1 sm:grid-cols-[repeat(auto-fill,minmax(300px,1fr))]': {},
+        },
+        '.grid-cols-md': {
+          '@apply grid-cols-1 sm:grid-cols-[repeat(auto-fill,minmax(400px,1fr))]': {},
+        },
+        '.grid-cols-lg': {
+          '@apply grid-cols-1 md:grid-cols-[repeat(auto-fill,minmax(600px,1fr))]': {},
+        },
+      });
+    }),
+  ],
 };
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c7fa7e07a..9c96edeaf 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -23,6 +23,9 @@ importers:
 
   packages/layerchart:
     dependencies:
+      '@dagrejs/dagre':
+        specifier: ^1.1.4
+        version: 1.1.4
       '@layerstack/svelte-actions':
         specifier: ^0.0.9
         version: 0.0.9
@@ -394,6 +397,13 @@ packages:
     resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
     engines: {node: '>=12'}
 
+  '@dagrejs/dagre@1.1.4':
+    resolution: {integrity: sha512-QUTc54Cg/wvmlEUxB+uvoPVKFazM1H18kVHBQNmK2NbrDR5ihOCR6CXLnDSZzMcSQKJtabPUWridBOlJM3WkDg==}
+
+  '@dagrejs/graphlib@2.2.4':
+    resolution: {integrity: sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==}
+    engines: {node: '>17.0.0'}
+
   '@esbuild-plugins/node-globals-polyfill@0.2.3':
     resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==}
     peerDependencies:
@@ -2822,6 +2832,12 @@ snapshots:
     dependencies:
       '@jridgewell/trace-mapping': 0.3.9
 
+  '@dagrejs/dagre@1.1.4':
+    dependencies:
+      '@dagrejs/graphlib': 2.2.4
+
+  '@dagrejs/graphlib@2.2.4': {}
+
   '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)':
     dependencies:
       esbuild: 0.17.19