@sagargupta1610/orrery 0.0.0-stage → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +188 -2
  3. package/SKILL.md +143 -0
  4. package/THIRD_PARTY_NOTICES.md +38 -0
  5. package/assets/fonts/Inter-OFL.txt +92 -0
  6. package/assets/fonts/Inter-Regular.ttf +0 -0
  7. package/assets/fonts/Inter-SemiBold.ttf +0 -0
  8. package/assets/fonts/metrics.json +1 -0
  9. package/assets/icons/aws.json +1 -0
  10. package/assets/icons/azure.json +1 -0
  11. package/assets/icons/gcp.json +1 -0
  12. package/assets/icons/index.json +1 -0
  13. package/assets/icons/k8s.json +1 -0
  14. package/assets/icons/simple-icons-licenses.json +1174 -0
  15. package/examples/ai-agent-mcp.yaml +51 -0
  16. package/examples/aws-data-lake.yaml +52 -0
  17. package/examples/aws-event-driven.yaml +45 -0
  18. package/examples/aws-genai-rag.yaml +44 -0
  19. package/examples/aws-hybrid-landing-zone.yaml +85 -0
  20. package/examples/aws-hybrid-network.yaml +48 -0
  21. package/examples/aws-serverless-api.yaml +34 -0
  22. package/examples/aws-three-tier-dark.yaml +55 -0
  23. package/examples/aws-three-tier.yaml +53 -0
  24. package/examples/azure-aks-platform.yaml +40 -0
  25. package/examples/azure-hub-spoke.yaml +58 -0
  26. package/examples/azure-openai-rag.yaml +60 -0
  27. package/examples/azure-web-app.yaml +45 -0
  28. package/examples/c4-container.yaml +33 -0
  29. package/examples/data-platform-oss.yaml +53 -0
  30. package/examples/gcp-gke-platform.yaml +50 -0
  31. package/examples/gcp-streaming-analytics.yaml +34 -0
  32. package/examples/gcp-vertex-mlops.yaml +65 -0
  33. package/examples/gcp-web-app.yaml +36 -0
  34. package/examples/github-actions-cicd.yaml +36 -0
  35. package/examples/gitops-kubernetes.yaml +56 -0
  36. package/examples/ibm-cloud-openshift.yaml +71 -0
  37. package/examples/k8s-workload.yaml +35 -0
  38. package/examples/ml-platform.yaml +39 -0
  39. package/examples/modern-web-stack.yaml +54 -0
  40. package/examples/multi-cloud.yaml +53 -0
  41. package/examples/observability-stack.yaml +38 -0
  42. package/examples/rag-open-source.yaml +48 -0
  43. package/examples/starter.yaml +26 -0
  44. package/examples/system-design-chat.yaml +42 -0
  45. package/examples/system-design-url-shortener.yaml +42 -0
  46. package/examples/system-design-video-streaming.yaml +53 -0
  47. package/package.json +30 -4
  48. package/references/diagram.schema.json +170 -0
  49. package/references/icons.md +87 -0
  50. package/references/outputs.md +86 -0
  51. package/references/patterns.md +138 -0
  52. package/references/review/conventions-aws.md +101 -0
  53. package/references/review/conventions-azure.md +100 -0
  54. package/references/review/conventions-c4.md +70 -0
  55. package/references/review/conventions-gcp.md +46 -0
  56. package/references/review/flow.md +53 -0
  57. package/references/review/legibility.md +53 -0
  58. package/references/review/loop.md +189 -0
  59. package/references/spec.md +170 -0
  60. package/references/styles.md +121 -0
  61. package/scripts/orrery.mjs +15239 -0
  62. package/scripts/vendor/README.md +8 -0
  63. package/scripts/vendor/elk.LICENSE.md +263 -0
  64. package/scripts/vendor/elk.bundled.cjs +6605 -0
  65. package/scripts/vendor/resvg/index.mjs +584 -0
  66. package/scripts/vendor/resvg/index_bg.wasm +0 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Sagar Gupta
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,189 @@
1
- # Temporary Holding Version
1
+ <div align="center">
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="docs/hero-dark.svg">
5
+ <source media="(prefers-color-scheme: light)" srcset="docs/hero-light.svg">
6
+ <img alt="GitOps delivery drawn by orrery: GitHub Actions bumps the manifests repository, Argo CD syncs GKE, AKS and EKS behind Cloudflare, and Grafana queries them, in official icons" src="docs/hero-light.svg" width="100%">
7
+ </picture>
8
+
9
+ # orrery
10
+
11
+ **Animated architecture and system design diagrams with official AWS, Azure, Google Cloud, Kubernetes, GitHub and IBM icons.**<br>
12
+ One YAML spec in; SVG, PNG, editable draw.io, a React component and an HTML viewer out.<br>
13
+ **[sagargupta.online/orrery](https://sagargupta.online/orrery/)**: every example in light and dark, with its spec and downloads.
14
+
15
+ [![CI](https://github.com/Sagargupta16/orrery/actions/workflows/ci.yml/badge.svg)](https://github.com/Sagargupta16/orrery/actions/workflows/ci.yml)
16
+ ![Version](https://img.shields.io/badge/version-0.6.0-2563eb)
17
+ ![Icons](https://img.shields.io/badge/official_icons-16%2C682-2563eb)
18
+ ![License](https://img.shields.io/badge/license-MIT-2563eb)
19
+
20
+ </div>
21
+
22
+ The diagram above is [docs/hero.yaml](docs/hero.yaml): 42 lines of YAML, laid out and rendered by orrery in the `stage` skin (`skin: stage`): each line draws itself in step order and every node lights up as its line arrives, on a loop. The rest of this README is the `classic` skin, the vendors' own diagram style, which animates a packet along each edge. GitHub keeps the animation; the PNG of the same spec is a still frame.
23
+
24
+ ## What you get
25
+
26
+ - **Official, current icons only.** 16,682 icons: AWS (810), Azure (636), Google Cloud (233), Kubernetes (40), GitHub Octicons (399) and IBM Carbon (2,776), plus 5,502 tech logos and 6,286 neutral symbols for system design. The cloud packs are rebuilt from each vendor's own download, pinned by checksum. Google Cloud products get the icon Google's 2026 guide assigns them; deprecated sets and unofficial redraws of cloud icons are left out.
27
+ - **Official conventions.** AWS groups follow the AWS Architecture Icons deck (borders, dashes, corner tiles, label placement, open arrowheads, numbered callouts); Google Cloud and Azure groups are measured from their own reference diagrams. Every value cites its source in [styles.md](skills/orrery/references/styles.md).
28
+ - **Automatic layout.** The Eclipse Layout Kernel places nested boundaries, routes edges at right angles, joins fan-in and fan-out into trunks and keeps the order you wrote unless that would cross edges. No coordinates to write.
29
+ - **Diagrams that move.** Animated SVG by default: packets travel every edge at one speed, numbered steps play as a story, line styles stay as drawn. `animate: flow` for marching dashes, `--static` for a still file.
30
+ - **Two skins, one layout.** `classic` follows each vendor's diagram style; `skin: stage` (or `--skin stage`) draws the same boxes and lines on a dark or light showcase canvas with a dot texture and one tint, and animates them with `relay`: each line draws itself in turn and the node it reaches lights up. Vendor colors and every position stay the same.
31
+ - **Five outputs from one spec.** SVG for READMEs and docs, PNG for slides and chat (3x by default, sharp when zoomed), `.drawio` you can keep editing, a TSX component for React sites, and a standalone HTML viewer with dark mode, pan and pinch zoom.
32
+ - **Made for agents.** A skill with a fast path and authoring rules, a JSON Schema, 392 short aliases (`aws:s3`, `azure:aks`, `k8s:deploy`), ranked icon search, and a validator whose every finding names the subject and the fix.
33
+ - **No install.** The CLI, layout engine, PNG renderer, fonts and the official cloud packs ship in the skill folder (9 MB). Logo and glyph sets are not copied in: they load from their own npm libraries the first time a diagram uses them, verified by checksum and cached. Node.js 22 or newer is all it needs.
34
+
35
+ ## How it works
36
+
37
+ <picture>
38
+ <source media="(prefers-color-scheme: dark)" srcset="docs/how-it-works-dark.svg">
39
+ <img alt="A YAML spec is validated, laid out by ELK, checked and rendered with the icon packs to SVG, PNG, draw.io, TSX and HTML" src="docs/how-it-works-light.svg" width="100%">
40
+ </picture>
41
+
42
+ ## Install
43
+
44
+ Claude Code plugin:
45
+
46
+ ```
47
+ /plugin marketplace add Sagargupta16/orrery
48
+ /plugin install orrery@orrery
49
+ ```
50
+
51
+ Any agent that reads [Agent Skills](https://agentskills.io) (Codex, Cursor, Gemini CLI, Kiro and others):
52
+
53
+ ```bash
54
+ npx skills add Sagargupta16/orrery
55
+ gh skill install Sagargupta16/orrery orrery # GitHub CLI, any supported agent
56
+ gemini extensions install https://github.com/Sagargupta16/orrery # Gemini CLI extension
57
+ ```
58
+
59
+ Only the CLI, from npm:
60
+
61
+ ```bash
62
+ npx @sagargupta1610/orrery doctor
63
+ npx @sagargupta1610/orrery render diagram.yaml -f all --theme both
64
+ ```
65
+
66
+ Or from a clone: `node orrery/skills/orrery/scripts/orrery.mjs doctor`.
67
+
68
+ ## Quick start
69
+
70
+ Ask your agent for a diagram ("draw the architecture of this repo", "a three-tier web app on AWS across two Availability Zones", "turn this Mermaid flowchart into a Google Cloud diagram"). It writes a spec, validates it, renders it and checks the picture. Or write one yourself:
71
+
72
+ ```yaml
73
+ title: Orders API
74
+ direction: right
75
+ groups:
76
+ cloud: { type: aws:cloud }
77
+ region: { type: aws:region, label: eu-west-1, in: cloud }
78
+ nodes:
79
+ users: { icon: aws:users, label: Customers }
80
+ api: { icon: aws:api-gateway, in: region }
81
+ fn: { icon: aws:lambda, label: Create order, in: region }
82
+ table: { icon: aws:dynamodb, label: Orders, in: region }
83
+ edges:
84
+ - users -> api: HTTPS
85
+ - api -> fn -> table
86
+ ```
87
+
88
+ ```bash
89
+ node skills/orrery/scripts/orrery.mjs render orders.yaml -f svg,png
90
+ ```
91
+
92
+ Labels default to the official service names, so `{ icon: aws:lambda }` reads "AWS Lambda". Edges use arrows: `->` solid, `-->` dashed, `..>` dotted, `==>` thick, `<->` both ways, `a -> b, c` to fan out. The full format is in [spec.md](skills/orrery/references/spec.md).
93
+
94
+ ## Examples
95
+
96
+ [`aws-three-tier`](skills/orrery/examples/aws-three-tier.yaml): a VPC across two Availability Zones with public, web and data subnets and an Auto Scaling group drawn across both zones, in the AWS deck's own group styles.
97
+
98
+ <a href="examples/aws-three-tier.svg"><img src="examples/aws-three-tier.svg" alt="Three-tier web application on AWS across two Availability Zones"></a>
99
+
100
+ That is one of 32 reference diagrams across AWS, Azure, Google Cloud, IBM Cloud, Kubernetes, AI and ML, data platforms, CI/CD, C4 and system design, each rendered from a spec in [skills/orrery/examples](skills/orrery/examples) and checked against the renderer by CI. Browse them all in light and dark, with each spec and every output to download, at **[sagargupta.online/orrery/gallery](https://sagargupta.online/orrery/gallery/)**, or in [examples/README.md](examples/README.md) with the command that renders each one. `orrery init <name>` copies any of them as a starting point.
101
+
102
+ ## Validation that tells you the fix
103
+
104
+ ```text
105
+ $ orrery validate orders.yaml
106
+ error DG101 node "fn" uses unknown icon "aws:lamda" {"node":"fn","icon":"aws:lamda"}
107
+ fix: use icon "aws:lambda"
108
+ fix: run `orrery icons search lamda`
109
+ error DG108 unknown key "lable" in node "db" {"where":"node \"db\"","key":"lable"}
110
+ fix: rename "lable" to "label"
111
+ failed: 2 error(s), 0 warning(s)
112
+ ```
113
+
114
+ Spec errors (DG1xx) stop the render; composition warnings (DG2xx: an edge through a node, colliding labels, a diagram too wide to read) keep it going unless `--strict` is set. `render --json` writes every file atomically and prints a receipt with the size and SHA-256 of each output.
115
+
116
+ ## A review board that measures before it judges
117
+
118
+ `orrery review` looks at the diagram at the width readers see it (880 px for a README column) and scores six dimensions: official conventions, layout, grid, arrows and flow, overlap, and size and quality.
119
+
120
+ ```text
121
+ $ git show v0.2.1:skills/orrery/examples/gitops-kubernetes.yaml > gitops-0.2.yaml
122
+ $ orrery review gitops-0.2.yaml --width 880
123
+ review gitops-0.2: 1964x786 in a 880px column, seen at 880x352 (scale 0.45, light)
124
+ score 85.3/100 FAIL (pass = no blocker or major and score >= 85)
125
+ ...
126
+ blocker quality.label-size node labels render at 5.82px at this width (1964px canvas shown at 0.45x)
127
+ fix: use direction: down so the diagram is narrower
128
+ ```
129
+
130
+ The review loop took that diagram to 98.5 and passing: it now runs top to bottom, so its labels show at full size in the README column.
131
+
132
+ In Claude Code, `/orrery:review <spec>` runs the full loop. Code measures everything that can be counted: overlaps, crossings, alignment, text size and contrast at display width. Three read-only agents run in parallel and judge what cannot be counted:
133
+
134
+ - `conventions-reviewer` checks the vendor's own rules, quoted from the AWS deck, Azure Well-Architected, Google's icon guide and the C4 notation.
135
+ - `flow-reviewer` checks the story the arrows tell.
136
+ - `legibility-reviewer` reads the PNG at display size.
137
+
138
+ A finding counts only if it cites a measured value or a vendor rule. Each round applies one to three spec patches, and a round is kept only when the score goes up and no hard count does; the loop stops after three rounds or two without progress. Vision models are weak at counting overlaps and intersections, so they never decide those. The rubrics live in [references/review](skills/orrery/references/review/loop.md), so the same passes run inline anywhere the skill is installed without subagents.
139
+
140
+ ## Commands
141
+
142
+ | Command | Does |
143
+ | --- | --- |
144
+ | `render <spec> [-o base] [-f svg,png,drawio,tsx,html\|all] [--theme light\|dark\|both] [--skin classic\|stage] [--animate packets\|flow\|relay\|none] [--static]` | Validate, lay out, render. |
145
+ | `validate <spec> [--strict] [--json]` | Spec errors and composition warnings, each with fixes. |
146
+ | `review <spec> [--width 880] [--theme light\|dark] [--strict] [--json]` | Score the diagram at the width readers see it; writes `<base>.review.json` and a PNG at that width. |
147
+ | `icons search <words> [--pack aws]` | Ranked icon ids with official names. |
148
+ | `icons show <id>`, `icons list`, `icons packs` | Browse the catalog and its sources. |
149
+ | `icons fetch` | Download and cache the logo and glyph libraries for offline renders. |
150
+ | `styles` | Every group type and node shape. |
151
+ | `init [template]` | Start from one of the examples. |
152
+ | `import mermaid <flowchart.mmd>` | Turn an existing Mermaid flowchart into a spec, with official icons where the labels name real products. |
153
+ | `doctor`, `demo` | Check the install; render every example. |
154
+
155
+ ## Icon packs
156
+
157
+ | Pack | Icons | Source | Ships |
158
+ | --- | ---: | --- | --- |
159
+ | `aws` | 810 | [AWS Architecture Icons](https://aws.amazon.com/architecture/icons/), 2026-07-31 package | bundled |
160
+ | `azure` | 636 | [Azure Architecture Icons](https://learn.microsoft.com/en-us/azure/architecture/icons/) V24 | bundled |
161
+ | `gcp` | 233 | [Google Cloud icons](https://cloud.google.com/icons), core and category icons mapped to products as in Google's May 2026 guide | bundled |
162
+ | `k8s` | 40 | [Kubernetes community icons](https://github.com/kubernetes/community/tree/master/icons) | bundled |
163
+ | `github` | 399 | [GitHub Octicons](https://primer.style/octicons) | npm `@primer/octicons` |
164
+ | `ibm` | 2,776 | [IBM Carbon icons](https://carbondesignsystem.com/elements/icons/library/), IBM's diagram node icons and product glyphs | npm `@iconify-json/carbon` |
165
+ | `logos` | 2,151 | [SVG Logos](https://github.com/gilbarbara/logos) | npm `@iconify-json/logos` |
166
+ | `si` | 3,351 | [Simple Icons](https://simpleicons.org) | npm `@iconify-json/simple-icons` |
167
+ | `tabler` | 6,286 | [Tabler Icons](https://tabler.io/icons) | npm `@iconify-json/tabler` |
168
+
169
+ Bundled packs exist only as vendor downloads, so they ship with the skill and work offline. The npm sets load at render time from a local `node_modules`, the user cache or jsDelivr, checked against a pinned SHA-256; `orrery icons fetch` caches them ahead of time, and [icons.md](skills/orrery/references/icons.md#where-icons-load-from) has the details. Renovate's monthly dependency PR also checks the vendors' pages for new releases and carries the updated packs. Icons, logos and trademarks belong to their owners and are used under the terms listed in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md); the AWS, Microsoft and Google terms allow them in architecture diagrams.
170
+
171
+ ## Development
172
+
173
+ ```bash
174
+ pnpm install
175
+ pnpm lint
176
+ pnpm typecheck
177
+ pnpm test
178
+ pnpm build # src/ -> skills/orrery/scripts/orrery.mjs
179
+ pnpm gallery # re-render examples/ and docs/
180
+ node scripts/check-repo.mjs # dashes, links, counts, doc snippets, gallery freshness
181
+ pnpm sync-icons # rebuild icon catalogs (--latest re-pins new vendor releases)
182
+ node scripts/pack-npm.mjs # stage the npm package in out/npm (a GitHub release publishes it)
183
+ ```
184
+
185
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for how the pieces fit and [SECURITY.md](SECURITY.md) for reporting issues.
186
+
187
+ ## License
188
+
189
+ Code and docs: [MIT](LICENSE). Icons, fonts and the vendored engines keep their own licenses: [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
package/SKILL.md ADDED
@@ -0,0 +1,143 @@
1
+ ---
2
+ name: orrery
3
+ description: >-
4
+ Draws professional architecture and system design diagrams with official icons (AWS, Azure,
5
+ Google Cloud, Kubernetes, GitHub Octicons, 5,500 tech logos and 6,000 generic symbols) and
6
+ renders them to SVG and PNG for docs and READMEs, plus an editable draw.io file, a React TSX
7
+ component and a standalone HTML viewer. Use when the user asks for an architecture diagram, a
8
+ cloud, infrastructure or network diagram, a system design diagram, a data, ML or CI/CD pipeline,
9
+ a Kubernetes layout, a C4 container view, "diagram this repo", "draw the architecture for the
10
+ README", or to turn a description, Terraform, Kubernetes manifests, docker-compose or a Mermaid
11
+ flowchart into a clean diagram with real vendor icons.
12
+ license: MIT
13
+ metadata:
14
+ version: "0.6.0"
15
+ author: Sagar Gupta
16
+ ---
17
+
18
+ # orrery
19
+
20
+ Write a small YAML spec (nodes with official icons, nested groups, labelled edges); the bundled CLI lays it out with ELK and renders it. No install: the CLI, the layout engine, the PNG renderer, the fonts and the official AWS, Azure, Google Cloud and Kubernetes packs ship in this folder; the logo and glyph sets (16,682 icons in all) load from their npm libraries the first time a diagram uses them and are cached. Node.js 22 or newer is the only requirement.
21
+
22
+ ```bash
23
+ node <this-skill-folder>/scripts/orrery.mjs <command>
24
+ ```
25
+
26
+ Below, `orrery` means that command.
27
+
28
+ ## Fast path
29
+
30
+ Follow this order. Write the spec early and let the validator steer; do not plan coordinates, layout is automatic.
31
+
32
+ 1. **Pin the brief** in one line before drawing: what the diagram must show, for whom (README, design doc, slide), which cloud or vendor style, light/dark, which outputs. Default: SVG + PNG, light theme, `direction: right` (`down` for tiered stacks and long chains).
33
+ 2. **Find every icon id**, never guess one:
34
+
35
+ ```bash
36
+ orrery icons search api gateway
37
+ orrery icons search postgres
38
+ orrery icons search load balancer --pack azure
39
+ ```
40
+
41
+ Official vendor icons for vendor services (`aws:`, `azure:`, `gcp:`, `k8s:`, `github:`), `logos:` (color) or `si:` (one-color brand) for third-party products, `generic:` aliases or `tabler:` for neutral concepts (user, browser, server, queue, cache). Short aliases work: `aws:s3`, `aws:alb`, `azure:aks`, `gcp:bq`, `k8s:deploy`, `generic:database`.
42
+ 3. **Start from the nearest example** when one fits (`orrery init --list`, then `orrery init aws-three-tier -o docs/architecture.yaml`), otherwise write the spec from scratch. The format is in [references/spec.md](references/spec.md); a minimal one:
43
+
44
+ ```yaml
45
+ title: Orders API
46
+ direction: right
47
+ groups:
48
+ cloud: { type: aws:cloud }
49
+ region: { type: aws:region, label: eu-west-1, in: cloud }
50
+ nodes:
51
+ users: { icon: aws:users, label: Customers }
52
+ api: { icon: aws:api-gateway, in: region }
53
+ fn: { icon: aws:lambda, label: Create order, in: region }
54
+ table: { icon: aws:dynamodb, label: Orders, in: region }
55
+ edges:
56
+ - users -> api: HTTPS
57
+ - api -> fn -> table
58
+ ```
59
+
60
+ 4. **Validate and repair**: `orrery validate docs/architecture.yaml --strict`. Each finding has a code, a subject and `fix:` lines; apply the first fix that keeps the meaning, change only the reported subject, and re-run. Two rounds without improvement means stop and report what is left.
61
+ 5. **Render**: `orrery render docs/architecture.yaml -o docs/architecture -f svg,png` (add `drawio`, `tsx`, `html` or `-f all` when asked; `--theme both` writes `-light` and `-dark` files). A non-zero exit means nothing usable was written; never describe it as success.
62
+ 6. **Review at the width readers see it**, then improve. Measure first:
63
+
64
+ ```bash
65
+ orrery review docs/architecture.yaml --width 880 --json -o docs/architecture
66
+ ```
67
+
68
+ It scores six dimensions (conventions, layout, grid, flow, overlap, quality), lists findings with evidence and fixes, and writes `docs/architecture.review.json` plus `docs/architecture.review.png`, the diagram at that width (README 880, a docs column 720 to 1000, a slide 1280, a phone 360). Then run the review loop in [references/review/loop.md](references/review/loop.md):
69
+ - With subagents, launch `orrery:conventions-reviewer`, `orrery:flow-reviewer` and `orrery:legibility-reviewer` in one message. Without them, run the three passes inline, one after another, each reading only its rubric. Skip the reviewers when the measured review passes with no findings.
70
+ - Only you edit the spec. Apply 1 to 3 non-overlapping patches per round, re-run the review, and keep the round only if the score went up and no hard count did; otherwise restore the spec.
71
+ - Stop when it passes, after 3 rounds, or after 2 rounds without a kept patch. Never trust a reviewer's claim of an overlap or crossing that the measurement does not show.
72
+ 7. **Report** the written paths, node/group/edge counts, the review score and pass, the patches kept, any findings that remain with their evidence, and the embed snippet if it goes into a README.
73
+
74
+ ## What makes it look professional
75
+
76
+ - One obvious main flow. List nodes in the order data moves through them; ELK keeps that order where it can.
77
+ - Boundaries from the outside in, with the vendor's group types: `aws:cloud` > `aws:account` > `aws:region` > `aws:vpc` > `aws:az` > `aws:public-subnet` / `aws:private-subnet`; Google Cloud `gcp:cloud` > `gcp:project` > `gcp:region` > `gcp:zone`; Azure `azure:subscription` > `azure:resource-group` > `azure:vnet` > `azure:subnet`; Kubernetes `k8s:cluster` > `k8s:namespace`. Neutral diagrams use `zone`, `box`, `dashed` and `boundary`. Run `orrery styles` for all of them.
78
+ - Official names, short. Labels default to the icon's official name; override with the name readers know ("Amazon SQS", "Orders queue") and put specifics in `note` ("t3.medium x3", "PostgreSQL 16").
79
+ - Label an edge only when it says something the endpoints do not: protocol, action, sync vs async, cross-boundary mechanism. Numbered `step:` edges for walkthroughs.
80
+ - Dashed edges for async or optional paths, thick for the hot path, `<->` for request/response only when both directions matter.
81
+ - 6 to 25 nodes. Beyond that, draw an overview plus detail diagrams; repeated workers become one node with `badge: x3`.
82
+ - `look: card` gives the boxed product-card style of Google Cloud diagrams; `shape:` nodes (cylinder, queue, person, document) give whiteboard and C4 views.
83
+ - Vendor colors are built in; do not recolor official icons. `color:` is for neutral shapes and cards.
84
+
85
+ ## Outputs
86
+
87
+ | Format | Use for |
88
+ | --- | --- |
89
+ | `svg` | READMEs, docs sites, wikis. Self-contained, scalable, with `<title>`/`<desc>` for screen readers. Animated by default: packets travel the edges, numbered steps play in order (`animate: none` or `--static` for a still file). `skin: stage` (or `--skin stage`) draws the same layout on a showcase canvas and animates it with `relay`; keep the default `classic` for vendor architecture docs and use `stage` for a README hero, a slide or a project page. |
90
+ | `png` | Slides, chat, tickets, anywhere SVG is not accepted. Always a still frame. Rendered with the bundled Inter font at 3x by default (`--scale`), so it stays sharp when zoomed or projected. |
91
+ | `drawio` | Hand-editing in diagrams.net or the VS Code Draw.io extension; every node, group and edge is an editable cell with the official icon embedded. |
92
+ | `tsx` | A React component (`export default function Name(props)`) for docs sites and apps. |
93
+ | `html` | A standalone viewer with light/dark switch, pan, pinch zoom and SVG/PNG download; opens offline. |
94
+
95
+ For a README that follows the reader's theme, render `--theme both` and embed:
96
+
97
+ ```html
98
+ <picture>
99
+ <source media="(prefers-color-scheme: dark)" srcset="docs/architecture-dark.svg">
100
+ <img alt="Orders API architecture on AWS" src="docs/architecture-light.svg">
101
+ </picture>
102
+ ```
103
+
104
+ Details, the JSON receipt and per-format notes: [references/outputs.md](references/outputs.md).
105
+
106
+ ## Diagrams from existing material
107
+
108
+ - **A repository**: read the deploy and infra files (Terraform, CDK, CloudFormation, Kubernetes manifests, Helm values, docker-compose, serverless.yml, workflow files) and draw what they create. Every node must trace to a file; when something is inferred, say so in your report rather than inventing a component.
109
+ - **Terraform**: one node per meaningful resource (`aws_lambda_function` -> `aws:lambda`, `aws_db_instance` -> `aws:rds`), groups from VPC/subnet/region/account structure; skip glue resources (policies, attachments) unless they are the point.
110
+ - **Kubernetes**: `k8s:` icons for kinds, `k8s:namespace` groups, Ingress -> Service -> Deployment -> Pods edges.
111
+ - **Mermaid flowchart**: `orrery import mermaid flow.mmd -o docs/architecture.yaml` converts nodes, subgraphs, edge styles and shapes, and sets an official icon where a label is exactly a product name (listed in a comment to check). Then swap the remaining shapes for icons, turn the `zone` groups into vendor groups and validate. Mermaid styling (`classDef`, `style`) is dropped on purpose.
112
+
113
+ Patterns with spec fragments (three-tier, serverless, event-driven, data lake, streaming, RAG, CI/CD, hybrid network, Kubernetes, system design primitives): [references/patterns.md](references/patterns.md).
114
+
115
+ ## Commands
116
+
117
+ | Command | Does |
118
+ | --- | --- |
119
+ | `render <spec> [-o base] [-f svg,png,drawio,tsx,html\|all] [--theme light\|dark\|both] [--scale 3] [--skin classic\|stage] [--animate packets\|flow\|relay\|none] [--static] [--font extra.ttf] [--strict] [--json]` | Validate, lay out, render, write atomically; `--json` prints a receipt with sha256 and size per file. |
120
+ | `validate <spec> [--strict] [--json]` | Spec errors plus layout warnings (edge through a node, label collisions, too wide). |
121
+ | `review <spec> [--width 880] [--theme light\|dark] [--skin classic\|stage] [--json] [-o base]` | Scores the diagram at a display width on six dimensions, writes `<base>.review.json` and a PNG at that width (`/orrery:review` in Claude Code runs the whole loop). |
122
+ | `icons search <words> [--pack aws] [--type service]` | Ranked icon ids with official names. |
123
+ | `icons show <id> [-o icon.png]` | One icon's metadata, optionally rendered. |
124
+ | `icons list [--pack gcp] [--category Databases]`, `icons packs` | Browse the catalog and its sources. |
125
+ | `icons fetch [pack...]` | Download and cache the logo and glyph libraries now, for offline renders later. |
126
+ | `styles` | Group types and node shapes. |
127
+ | `init [template] [-o file] [--list]` | Copy an example spec as a starting point. |
128
+ | `import mermaid <file.mmd\|-> [-o file]` | Convert a Mermaid flowchart into a spec. |
129
+ | `doctor` | Checks Node, the catalogs, the icon libraries, the layout engine and the PNG renderer. |
130
+ | `demo [dir]` | Renders every bundled example. |
131
+
132
+ Labels in scripts Inter lacks (CJK, Devanagari, Arabic) need a font for the PNG: `--font path/to/NotoSansDevanagari-Regular.ttf`. SVG output uses the viewer's fonts.
133
+
134
+ ## References
135
+
136
+ - [references/spec.md](references/spec.md): every spec field, the edge syntax and all diagnostic codes.
137
+ - [references/icons.md](references/icons.md): the icon packs, id rules, aliases, the `generic:` vocabulary, licenses.
138
+ - [references/styles.md](references/styles.md): group styles per vendor, with the colors and where they come from.
139
+ - [references/patterns.md](references/patterns.md): reference architectures as spec fragments.
140
+ - [references/outputs.md](references/outputs.md): formats, embedding, the receipt.
141
+ - [references/review/loop.md](references/review/loop.md): the review loop, the finding and patch format, scores and every measured finding id. Its rubrics, one per reviewer pass: conventions for [AWS](references/review/conventions-aws.md), [Azure](references/review/conventions-azure.md), [Google Cloud](references/review/conventions-gcp.md) and [C4](references/review/conventions-c4.md) (vendor rules with ids, quotes and sources), [flow](references/review/flow.md), [legibility](references/review/legibility.md).
142
+ - [references/diagram.schema.json](references/diagram.schema.json): JSON Schema for editors (`# yaml-language-server: $schema=...`).
143
+ - `examples/*.yaml`: complete specs for each pattern, used by `init` and `demo`.
@@ -0,0 +1,38 @@
1
+ # Third-party notices
2
+
3
+ orrery's own code and documentation are MIT licensed ([LICENSE](LICENSE)). The icons, fonts and two runtime engines it ships belong to their owners and keep their own terms, listed here. Product names, logos and icons are trademarks of their owners; their inclusion does not imply endorsement of, or affiliation with, this project.
4
+
5
+ ## Icon packs
6
+
7
+ The `aws`, `azure`, `gcp` and `k8s` packs live in `skills/orrery/assets/icons/` and are rebuilt from the sources below by `scripts/sync-icons.mjs` (download URLs and SHA-256 checksums are pinned in `scripts/icon-sources.json`). Their SVGs are normalized (inlined styles, prefixed ids); shapes and colors are not changed. The `github`, `ibm`, `logos`, `si` and `tabler` sets are not redistributed by this repository: only their names and search keywords are in `assets/icons/index.json`, and the renderer loads the icons from each set's own npm package at the pinned version, at render time (ids prefixed and monochrome glyphs colored as they are drawn).
8
+
9
+ | Pack | Source | Terms |
10
+ | --- | --- | --- |
11
+ | `aws` | [AWS Architecture Icons](https://aws.amazon.com/architecture/icons/), 2026-07-31 package | "We allow customers and partners to use these toolkits and assets to create architecture diagrams." AWS site terms apply. |
12
+ | `azure` | [Azure Architecture Icons](https://learn.microsoft.com/en-us/azure/architecture/icons/), V24 | "Microsoft permits the use of these icons in architectural diagrams, training materials, or documentation. You can copy, distribute, and display the icons only for the permitted use unless granted explicit permission by Microsoft. Microsoft reserves all other rights." |
13
+ | `gcp` | [Google Cloud icons](https://cloud.google.com/icons): core product icons and category icons, with products mapped to them as in Google's icon guide (the legacy console icons are not included) | The official library of Google Cloud product icons "for your diagrams, technical documentation, and more". Google brand guidelines apply. |
14
+ | `k8s` | [kubernetes/community icons](https://github.com/kubernetes/community/tree/master/icons) at 70a4bb2, and the [Kubernetes logo](https://github.com/kubernetes/kubernetes/tree/master/logo) | Apache License 2.0. Kubernetes is a registered trademark of The Linux Foundation. |
15
+ | `github` | [Primer Octicons](https://github.com/primer/octicons) 19.40.0, loaded from npm `@primer/octicons` | MIT License, Copyright (c) GitHub Inc. GitHub's [logo policy](https://github.com/logos) applies to the GitHub marks. |
16
+ | `ibm` | [IBM Carbon icons](https://github.com/carbon-design-system/carbon/tree/main/packages/icons) 11.89.0, loaded from npm `@iconify-json/carbon` 1.2.28 | Apache License 2.0, Copyright IBM Corp. IBM and watsonx are trademarks of IBM; the license grants no trademark rights. |
17
+ | `logos` | [SVG Logos](https://github.com/gilbarbara/logos) by Gil Barbara, loaded from npm `@iconify-json/logos` 1.2.16 | CC0 1.0 for the collection. Every logo remains its owner's trademark. |
18
+ | `si` | [Simple Icons](https://github.com/simple-icons/simple-icons) 16.35.0, loaded from npm `@iconify-json/simple-icons` 1.2.100 | CC0 1.0 for the collection ([disclaimer](https://github.com/simple-icons/simple-icons/blob/develop/DISCLAIMER.md)). Entries whose own recorded license is non-commercial, no-derivatives, share-alike, GPL, AGPL, MPL or custom are excluded. Kept entries with a recorded attribution license (CC-BY, Apache-2.0, MIT, BSD) are listed with their source in `skills/orrery/assets/icons/simple-icons-licenses.json` under `attributed`; the excluded ones under `skipped`. |
19
+ | `tabler` | [Tabler Icons](https://github.com/tabler/tabler-icons) 3.49.0, loaded from npm `@iconify-json/tabler` 1.2.42 | MIT License, Copyright (c) 2020-2024 Pawel Kuna. |
20
+
21
+ ## Fonts
22
+
23
+ | File | Source | License |
24
+ | --- | --- | --- |
25
+ | `skills/orrery/assets/fonts/Inter-Regular.ttf`, `Inter-SemiBold.ttf` | [Inter 4.1](https://github.com/rsms/inter) by Rasmus Andersson | SIL Open Font License 1.1, full text in `skills/orrery/assets/fonts/Inter-OFL.txt`. |
26
+
27
+ ## Runtime engines
28
+
29
+ Both are copied unmodified into `skills/orrery/scripts/vendor/` by `scripts/build.mjs`.
30
+
31
+ | File | Source | License |
32
+ | --- | --- | --- |
33
+ | `elk.bundled.cjs` | [elkjs](https://github.com/kieler/elkjs) 0.12.0, the Eclipse Layout Kernel compiled to JavaScript | Eclipse Public License 2.0 (`elk.LICENSE.md`). Source code: https://github.com/kieler/elkjs and https://github.com/eclipse-elk/elk |
34
+ | `resvg/index.mjs`, `resvg/index_bg.wasm` | [@resvg/resvg-wasm](https://github.com/thx/resvg-js) 2.6.2, built from [resvg](https://github.com/linebender/resvg) | Mozilla Public License 2.0, https://www.mozilla.org/MPL/2.0/. Source code: https://github.com/thx/resvg-js |
35
+
36
+ ## Bundled into the CLI
37
+
38
+ `skills/orrery/scripts/orrery.mjs` includes [yaml](https://github.com/eemeli/yaml) 2.9.1 (ISC License, Copyright Eemeli Aro).
@@ -0,0 +1,92 @@
1
+ Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+ -----------------------------------------------------------
8
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
9
+ -----------------------------------------------------------
10
+
11
+ PREAMBLE
12
+ The goals of the Open Font License (OFL) are to stimulate worldwide
13
+ development of collaborative font projects, to support the font creation
14
+ efforts of academic and linguistic communities, and to provide a free and
15
+ open framework in which fonts may be shared and improved in partnership
16
+ with others.
17
+
18
+ The OFL allows the licensed fonts to be used, studied, modified and
19
+ redistributed freely as long as they are not sold by themselves. The
20
+ fonts, including any derivative works, can be bundled, embedded,
21
+ redistributed and/or sold with any software provided that any reserved
22
+ names are not used by derivative works. The fonts and derivatives,
23
+ however, cannot be released under any other type of license. The
24
+ requirement for fonts to remain under this license does not apply
25
+ to any document created using the fonts or their derivatives.
26
+
27
+ DEFINITIONS
28
+ "Font Software" refers to the set of files released by the Copyright
29
+ Holder(s) under this license and clearly marked as such. This may
30
+ include source files, build scripts and documentation.
31
+
32
+ "Reserved Font Name" refers to any names specified as such after the
33
+ copyright statement(s).
34
+
35
+ "Original Version" refers to the collection of Font Software components as
36
+ distributed by the Copyright Holder(s).
37
+
38
+ "Modified Version" refers to any derivative made by adding to, deleting,
39
+ or substituting -- in part or in whole -- any of the components of the
40
+ Original Version, by changing formats or by porting the Font Software to a
41
+ new environment.
42
+
43
+ "Author" refers to any designer, engineer, programmer, technical
44
+ writer or other person who contributed to the Font Software.
45
+
46
+ PERMISSION AND CONDITIONS
47
+ Permission is hereby granted, free of charge, to any person obtaining
48
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
49
+ redistribute, and sell modified and unmodified copies of the Font
50
+ Software, subject to the following conditions:
51
+
52
+ 1) Neither the Font Software nor any of its individual components,
53
+ in Original or Modified Versions, may be sold by itself.
54
+
55
+ 2) Original or Modified Versions of the Font Software may be bundled,
56
+ redistributed and/or sold with any software, provided that each copy
57
+ contains the above copyright notice and this license. These can be
58
+ included either as stand-alone text files, human-readable headers or
59
+ in the appropriate machine-readable metadata fields within text or
60
+ binary files as long as those fields can be easily viewed by the user.
61
+
62
+ 3) No Modified Version of the Font Software may use the Reserved Font
63
+ Name(s) unless explicit written permission is granted by the corresponding
64
+ Copyright Holder. This restriction only applies to the primary font name as
65
+ presented to the users.
66
+
67
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
68
+ Software shall not be used to promote, endorse or advertise any
69
+ Modified Version, except to acknowledge the contribution(s) of the
70
+ Copyright Holder(s) and the Author(s) or with their explicit written
71
+ permission.
72
+
73
+ 5) The Font Software, modified or unmodified, in part or in whole,
74
+ must be distributed entirely under this license, and must not be
75
+ distributed under any other license. The requirement for fonts to
76
+ remain under this license does not apply to any document created
77
+ using the Font Software.
78
+
79
+ TERMINATION
80
+ This license becomes null and void if any of the above conditions are
81
+ not met.
82
+
83
+ DISCLAIMER
84
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
85
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
86
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
87
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
88
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
89
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
90
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
91
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
92
+ OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file
Binary file
@@ -0,0 +1 @@
1
+ {"family":"Inter","version":"4.1","weights":{"400":"0:1200,32:576,589,954,1297,1314,2011,1319,614,747,747,1026,1355,590,942,590,738,1292,833,1249,1265,1323,1215,1270,1159,1267,1270,590,618,1355,1355,1355,1047,1978,1413,1340,1496,1478,1231,1209,1528,1522,550,1169,1376,1158,1850,1543,1566,1308,1566,1318,1314,1322,1524,1413,2018,1397,1390,1288,747,738,747,965,934,661,1150,1254,1170,1254,1194,758,1256,1211,496,496,1124,496,1794,1210,1228,1254,1254,771,1081,670,1211,1151,1676,1118,1151,1131,873,681,873,1355,160:576,589,1170,1251,1484,1126,553,1164,1210,1872,929,1193,1355,174:1364,978,933,1355,905,913,661,1200,1234,590,549,623,988,1193,1643,1735,1806,1047,1413,1413,1413,1413,1413,1413,2035,1496,1231,1231,1231,1231,550,550,550,550,1505,1543,1566,1566,1566,1566,1566,1355,1566,1524,1524,1524,1524,1390,1302,1262,1150,1150,1150,1150,1150,1150,1879,1170,1194,1194,1194,1194,496,496,496,496,1193,1210,1228,1228,1228,1228,1228,1355,1228,1211,1211,1211,1211,1151,1254,1151,1413,1150,1413,1150,1413,1150,1496,1170,1496,1170,1496,1170,1496,1170,1478,1454,1505,1254,1231,1194,1231,1194,1231,1194,1231,1194,1231,1194,1528,1256,1528,1256,1528,1256,1528,1256,1522,1211,1590,1211,550,496,550,496,550,496,550,496,550,496,1719,992,1169,496,1376,1124,1076,1158,496,1158,496,1158,696,1152,736,1218,496,1543,1210,1543,1210,1543,1210,330:1543,1210,1566,1228,1566,1228,1566,1228,2058,2047,1318,771,1318,771,1318,771,1314,1081,1314,1081,1314,1081,1314,1081,1322,670,1322,770,1322,670,1524,1211,1524,1211,1524,1211,1524,1211,1524,1211,1524,1211,2018,1676,1390,1151,1390,1288,1131,1288,1131,1288,1131,644,1254,1620,1344,1254,1611,1420,1496,1496,1185,1505,1758,1298,1254,1112,1231,1528,1265,1209,798,1528,1302,1949,564,690,1389,1124,496,1314,1859,1543,1211,1566,1560,1222,1784,1307,1588,1254,1486,1314,1081,1292,1120,670,1327,661,1322,1518,1269,1567,1299,1460,1390,1288,1131,1402,1402,1270,1109,1249,1247,1115,1112,1298,546,734,496,589,453:2609,2385,2327,1654,992,2712,2039,1706,1413,1150,550,496,1566,1228,1524,1211,1524,1211,1524,1211,1524,1211,1524,1211,1194,1413,1150,1413,1150,2035,1879,1528,1376,1528,1256,1376,1124,1566,1228,1566,1228,1402,1270,496,2766,2609,2385,1528,1256,2290,1302,1543,1210,1413,1150,2035,1879,1566,1228,1413,1150,1413,1150,1231,1194,1231,1194,550,496,550,496,1566,1228,1566,1228,1318,771,1318,771,1524,1211,1524,1211,1314,1081,1322,670,1298,1113,1522,1211,1295,1574,1295,1294,1288,1131,1413,1150,1231,1194,1566,1228,1566,1228,1566,1228,1566,1228,1390,1151,816,1530,836,496,1853,1853,1413,1496,1170,1185,1322,1081,1131,1112,1113,1340,1518,1486,1231,1194,1239,496,1566,1254,1326,771,1368,1151,1150,1254,1254,1246,1111,598:1254,1254,1113,1194,1538,1100,1100,1426,1158,496,1256,1256,1148,1225,1481,1211,1210,1210,496,564,701,496,855,496,1313,1794,1794,1794,1210,1210,1298,1228,1642,1673,1309,771,742,771,638:704,704,1135,1135,1081,748,748,646:1054,670,668,1300,1294,1116,1151,1676,1151,1160,1131,658:1270,1279,1111,1111,1111,1111,1566,1157,1158,1218,1205,710,1124,988,1254,1111,1111,2229,2052,678:1530,1145,1636,1723,1511,1493,924,1108,1294,1292,891,925,406,585,550,741,923,1196,862,495,983,549,534,551,337,360,920,920,924,924,923,923,846,846,363,976,734,734,363,978,734,734,551,551,337,360,741,741,741,552,778,495,610,551,1034,1016,576,740,925,405,798,821,919,744,744,744,744,744,744,748,934,922,902,736,736,737,737,580,734,1116,1116,925,590,548,548,548,548,924,919,922,0,0,0,0,0,774:0,0,0,0,0,780:0,783:0,787:0,789:0,795:0,803:495,806:0,0,0,812:0,823:0,0,834:0,0,838:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,884:546,551,1543,890:549,1170,1170,1170,618,1169,900:553,1378,1413,590,1512,1803,831,908:1765,910:1799,1783,564,1413,1340,1185,1395,1231,1288,1522,1566,550,1376,1413,1850,1543,1344,1566,1522,1308,931:1411,1322,1390,1803,1397,1802,1577,550,1390,1360,1100,1211,564,1211,1360,1220,1151,1196,1100,1043,1211,1272,564,1076,1314,1200,1202,1144,1228,1239,1254,1166,1278,954,1211,1476,1165,1593,1648,564,1211,1228,1211,1648,1376,1298,1300,1375,1730,1375,1403,1680,1076,988:1215,1093,1008:1484,1298,1170,496,1566,922,922,1017:1496,1850,1020:1254,1496,1496,1496,1231,1231,1723,1185,1496,1314,550,550,1169,2280,2304,1811,1376,1543,1287,1479,1413,1323,1340,1185,1678,1231,1966,1265,1543,1543,1376,1532,1850,1522,1566,1522,1308,1496,1322,1287,1696,1397,1476,1434,1961,1991,1672,1808,1330,1496,2078,1318,1150,1216,1157,893,1256,1194,1659,1012,1211,1211,1110,1178,1577,1205,1228,1204,1254,1170,954,1151,1407,1118,1223,1183,1684,1714,1318,1508,1144,1170,1726,1135,1194,1194,1211,893,1170,1081,496,496,496,1893,1836,1211,1110,1211,1151,1204,1836,1652,1410,1260,1958,1601,1413,1169,1919,1589,1747,1422,2345,1963,1115,1070,1802,1593,1566,1228,1442,1214,1442,1214,2717,2339,1152:1455,1158,1294,0,0,0,0,0,0,0,1543,1211,1410,1260,1300,1248,1185,893,1185,893,1335,1109,2006,1699,1265,1012,1446,1150,1365,1199,1184:1718,1284,1552,1235,2018,1387,2269,1888,2018,1594,1496,1170,1322,954,1390,1151,1390,1151,1437,1158,1875,1350,1464,1213,1434,1183,1434,1211,1719,1462,1719,1462,550,1966,1659,1398,1202,1532,1178,1522,1205,1522,1205,1464,1213,1850,1577,496,1413,1150,1413,1150,2035,1879,1231,1194,1527,1194,1527,1194,1966,1659,1265,1012,1270,1270,1543,1211,1543,1211,1566,1228,1566,1228,1566,1228,1496,1170,1287,1151,1287,1151,1287,1151,1434,1183,1185,893,1808,1508,1212,893,1437,1067,1397,1118,1327:1208,3647:1340,7424:1097,7437:1577,7451:954,7491:822,7495:894,894,854,7501:896,7503:812,1278,7506:875,7510:894,502,891,7515:858,7522:405,585,891,858,7580:835,7584:562,7611:823,7615:925,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7676:0,0,0,0,1413,1150,1340,1254,1340,1254,1340,1254,1496,1170,1478,1254,1478,1254,1478,1254,1478,1254,1478,1254,1231,1194,1231,1194,1231,1194,1231,1194,1231,1194,1209,758,1528,1256,1522,1211,1522,1211,1522,1211,1522,1211,1522,1211,550,496,550,496,1376,1124,1376,1124,1376,1124,1158,496,1158,496,1158,496,1158,496,1850,1794,1850,1794,1850,1794,1543,1210,1543,1210,1543,1210,1543,1210,1566,1228,1566,1228,1566,1228,1566,1228,1308,1254,1308,1254,1318,771,1318,771,1318,771,1318,771,1314,1081,1314,1081,1314,1081,1314,1081,1314,1081,1322,670,1322,670,1322,670,1322,670,1524,1211,1524,1211,1524,1211,1524,1211,1524,1211,1413,1151,1413,1151,2018,1676,2018,1676,2018,1676,2018,1676,2018,1676,1397,1118,1397,1118,1390,1151,1288,1131,1288,1131,1288,1131,1211,670,1676,1151,1150,644,7837:739,1452,1106,1413,1150,1413,1150,1413,1150,1413,1150,1413,1150,1413,1150,1413,1150,1413,1150,1413,1150,1413,1150,1413,1150,1413,1150,1231,1194,1231,1194,1231,1194,1231,1194,1231,1194,1231,1194,1231,1194,1231,1194,550,496,550,496,1566,1228,1566,1228,1566,1228,1566,1228,1566,1228,1566,1228,1566,1228,1560,1222,1560,1222,1560,1222,1560,1222,1560,1222,1524,1211,1524,1211,1518,1269,1518,1269,1518,1269,1518,1269,1518,1269,1390,1151,1390,1151,1390,1151,1390,1151,1550,1128,1116,1115,1491,1304,1360,1360,1360,1360,1360,1360,1360,1360,1459,1459,1770,1794,1774,1782,1609,1609,1100,1100,1100,1100,1100,1100,7960:1577,1585,1901,1925,1905,1913,7968:1211,1211,1211,1211,1211,1211,1211,1211,1868,1876,2192,2216,2196,2204,2031,2031,564,564,564,564,564,564,564,564,896,904,1220,1244,1224,1232,1059,1059,1228,1228,1228,1228,1228,1228,8008:1830,1838,2154,2178,2158,2166,8016:1211,1211,1211,1211,1211,1211,1211,1211,8025:1872,8027:2212,8029:2200,8031:2027,1648,1648,1648,1648,1648,1648,1648,1648,1848,1856,2172,2196,2176,2184,2011,2011,1360,1360,1100,1100,1211,1211,564,564,1228,1228,1211,1211,1648,1648,8064:1360,1360,1360,1360,1360,1360,1360,1360,1459,1459,1770,1794,1774,1782,1609,1609,1211,1211,1211,1211,1211,1211,1211,1211,1868,1876,2192,2216,2196,2204,2031,2031,1648,1648,1648,1648,1648,1648,1648,1648,1848,1856,2172,2196,2176,2184,2011,2011,1360,1360,1360,1360,1360,8118:1360,1360,1413,1413,1413,1459,1413,434,549,434,1024,896,1211,1211,1211,8134:1211,1211,1411,1512,1702,1803,1522,669,743,582,564,564,564,564,8150:564,564,550,550,730,831,8157:701,751,582,1211,1211,1211,1211,1254,1254,1211,1211,1390,1390,1540,1799,1695,1378,1378,307,8178:1648,1648,1648,8182:1648,1648,1566,1765,1697,1783,1577,553,434,8192:1118,2234,1024,2048,684,512,340,1328,590,372,186,0,8208:734,734,1328,1024,2048,2048,981,927,534,534,494,534,902,902,862,902,1006,1006,1152,1152,590,1180,1770,590,8239:372,2735,3459,456,906,1356,456,906,1356,932,787,787,1310,1178,1038,1106,1673,1673,926,1481,1152,393,747,747,2094,1636,1636,910,1234,1212,1212,1026,618,1664,1106,1513,1486,1673,1125,8279:1806,8287:576,8304:941,405,8308:942,901,909,831,922,909,878,879,878,551,551,891,941,623,905,913,942,901,909,831,922,909,878,879,878,551,551,8336:822,854,875,821,923,891,812,405,1278,891,894,798,502,8352:1494,1496,1494,1236,1251,1759,1576,1978,2295,1954,1674,1254,1365,1454,1322,2848,8369:1361,1528,1413,1295,1496,8376:1322,1109,1217,8380:1488,1436,1486,1340,1028,8411:0,0,2846,2828,8424:0,8432:0,8448:1978,1941,8451:2406,8453:1991,2055,8457:2142,8467:910,8470:2237,1872,8478:1415,1310,1230,1428,1251,8486:1577,8490:1376,1413,8494:1294,8498:1209,8507:1510,8525:1808,8528:1802,1762,2305,1763,1957,1764,1958,1927,1976,1762,1935,1755,1918,1928,1681,982,550,1100,1650,1963,1413,1963,2513,3063,1947,1397,1947,2497,1158,1496,1478,1850,546,992,1488,1647,1106,1478,2143,2639,1614,1106,1614,2110,496,1170,1292,1794,8579:1299,1111,1485,1681,8585:1958,8592:1954,1708,1954,1708,2746,1708,1588,1588,1588,1588,8617:2343,2343,8624:2022,2022,8627:2022,1709,2022,8634:1954,1954,8656:1954,8658:1954,8660:2746,8670:1245,1245,8676:2078,2078,8679:2111,8682:2111,8706:1298,8709:1402,1395,8719:1480,8721:1299,1355,8730:1289,8734:1917,8747:748,8758:590,8776:1355,8800:1355,8804:1355,1355,8853:2846,2846,2846,2846,8963:1600,1600,1600,8984:2050,8997:2094,2490,2124,9003:2490,9088:1630,9095:2094,9099:1954,9166:2022,1768,9251:1486,9312:2846,2846,2846,2846,2846,2846,2846,2846,2846,9398:2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,9450:2846,9632:1872,1872,1872,9642:1152,9650:2070,2070,9654:1877,1877,9658:1877,1877,2070,2070,9664:1877,1877,9668:1877,1877,2152,2152,9674:1128,1872,9679:1872,9702:1152,9711:2846,9728:2188,9733:2140,2140,9788:2188,9825:2094,9829:2094,9834:1596,2033,9888:2100,10003:1811,10007:1815,10070:2152,10084:2094,10112:2846,2846,2846,2846,2846,2846,2846,2846,2846,10223:550,10229:2746,2746,3584,2746,2746,3584,10515:1714,10808:2846,11014:2111,11026:1872,1872,11036:2828,11044:2846,11388:406,11391:1305,11775:0,11800:1038,42655:0,43007:2415,43310:1112,57344:2152,57346:1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,1321,1329,1645,1669,1649,1657,1484,1484,903,903,1083,1256,903,903,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,1254,496,496,496,496,710,564,610,686,622,850,804,564,564,664,564,564,564,564,771,771,57450:1302,1292,816,1270,1323,1191,1191,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,747,747,747,747,873,873,1978,942,1024,1328,2048,1152,1152,1152,1152,1212,1212,590,550,550,550,550,1355,1355,1355,1355,1355,1355,1355,1355,1355,1355,1355,1355,1355,1321,405,891,551,551,894,835,894,562,896,894,1196,862,823,551,551,784,539,753,781,801,762,780,710,773,780,57544:793,781,794,491,491,57564:784,539,753,781,801,762,780,710,773,780,768,57587:496,363,367,57606:1200,57609:846,1554,57612:495,1210,1200,1083,57617:978,1024,1200,57623:1200,1210,57633:1200,495,57636:1200,57642:1024,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,57699:894,57795:1152,57810:1954,2746,5492,1954,2746,1954,2746,5492,1954,2746,2746,3584,2746,3584,57825:589,1413,1413,1413,1413,1413,1413,1340,1340,1496,1478,1478,1231,1231,1231,1231,1209,1528,1522,1522,1522,550,550,550,550,1376,1158,1158,1850,1850,1543,1543,1566,1566,1566,1566,1566,1560,1566,1308,1318,1318,1318,1314,1314,1314,1314,1322,1322,1524,1524,1524,1524,1524,1524,1524,1518,1524,1413,2018,2018,2018,1397,1397,1390,1390,1390,1288,1288,1550,903,903,903,903,1150,1150,1150,1150,1150,1150,1254,1254,1170,1254,1254,1194,1194,1194,1194,758,1256,1211,1211,1211,496,496,496,496,496,496,496,1124,736,496,496,1794,1794,1210,1210,1228,1228,1228,1228,1228,1222,1228,1254,771,771,771,1081,1081,1081,1081,1081,670,670,670,1211,1211,1211,1211,1211,1211,1211,1269,1211,1151,1676,1676,1676,1118,1118,1151,1151,1151,1131,1131,1254,1254,1254,1254,1254,1254,496,676,804,564,564,640,640,640,1211,1211,1211,1211,1211,1211,1211,1278,1211,1231,550,1527,1966,1265,1543,1566,1496,1287,1434,1808,903,1194,1659,1012,1211,1228,1170,1183,1508,1375,564,1211,1211,564,564,1211,1211,1211,590,590,590,590,590,1770,554,1047,590,590,1180,590,550,550,550,550,550,590,1366,1366,1366,896,0,0,0,0,0,0,1210,496,1630,1366,1210,530,828,828,1200,1200,1200,1200,1200,1200,1210,1210,978,978,1024,1024,710,644,496,590,60929:590,1413,1390,1150,1151,640,0,60937:2828,1100,60940:1319,676,688,608,676,1644,746,60948:992,60951:1124,60957:640,640,740,640,640,640,640,640,640,1211,1211,1300,1211,1211,1211,1211,1211,1211,1211,1211,1211,1211,1211,1211,1211,1211,1278,1278,1278,1278,1278,1278,1211,1211,1211,1211,1211,1211,1211,1211,1211,60999:550,800,800,800,800,800,800,800,800,800,800,800,800,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1328,1629,2846,2828,2828,1528,1376,1158,1543,1318,1314,1550,1124,496,1210,771,1081,670,564,640,61063:1479,590,590,590,1047,1047,612,612,612,0,1106,434,669,701,743,751,582,582,307,553,0,0,661,661,553,820,819,551,582,583,514,583,1016,661,0,0,840,840,0,0,0,0,0,0,0,1378,1210,661,0,514,0,0,0,0,0,0,978,0,0,0,337,0,0,0,0,0,0,0,530,828,828,608,608,1024,1024,1024,1204,0,0,926,61144:0,0,0,0,0,0,913,1047,518,745,63171:0,65279:0","600":"0:1200,32:516,658,1071,1318,1332,2057,1357,667,764,764,1105,1378,653,953,653,776,1351,866,1276,1303,1364,1254,1310,1180,1311,1310,653,674,1378,1378,1378,1113,2046,1490,1350,1509,1479,1240,1204,1534,1527,567,1187,1440,1158,1889,1555,1574,1321,1583,1336,1332,1352,1507,1490,2089,1474,1461,1336,764,776,764,986,961,719,1176,1278,1193,1278,1211,796,1281,1254,536,536,1166,536,1844,1253,1247,1278,1278,813,1125,723,1254,1202,1719,1165,1205,1159,931,735,931,1378,160:516,658,1193,1289,1534,1154,647,1164,1253,1872,943,1299,1378,174:1359,925,938,1378,929,949,719,1258,1229,653,680,663,998,1299,1702,1781,1858,1113,1490,1490,1490,1490,1490,1490,2075,1509,1240,1240,1240,1240,567,567,567,567,1539,1555,1574,1574,1574,1574,1574,1378,1574,1507,1507,1507,1507,1461,1347,1318,1176,1176,1176,1176,1176,1176,1869,1193,1211,1211,1211,1211,536,536,536,536,1216,1253,1247,1247,1247,1247,1247,1378,1247,1254,1254,1254,1254,1205,1278,1205,1490,1176,1490,1176,1490,1176,1509,1193,1509,1193,1509,1193,1509,1193,1479,1514,1539,1278,1240,1211,1240,1211,1240,1211,1240,1211,1240,1211,1534,1281,1534,1281,1534,1281,1534,1281,1527,1254,1632,1254,567,536,567,536,567,536,567,536,567,536,1754,1071,1187,536,1440,1166,1160,1158,536,1158,536,1158,772,1173,858,1232,536,1555,1253,1555,1253,1555,1253,330:1555,1253,1574,1247,1574,1247,1574,1247,2076,2031,1336,813,1336,813,1336,813,1332,1125,1332,1125,1332,1125,1332,1125,1352,723,1352,859,1352,723,1507,1254,1507,1254,1507,1254,1507,1254,1507,1254,1507,1254,2089,1719,1461,1205,1461,1336,1159,1336,1159,1336,1159,685,1278,1702,1343,1278,1694,1500,1509,1509,1241,1539,1831,1345,1278,1251,1240,1534,1303,1204,897,1534,1439,1990,610,728,1454,1166,536,1370,1918,1555,1254,1574,1584,1243,1865,1440,1673,1278,1534,1332,1125,1341,1253,723,1429,718,1352,1504,1323,1585,1343,1557,1440,1336,1159,1406,1406,1306,1152,1276,1283,1253,1154,1349,587,778,536,658,453:2637,2437,2345,1694,1071,2742,2090,1789,1490,1176,567,536,1574,1247,1507,1254,1507,1254,1507,1254,1507,1254,1507,1254,1211,1490,1176,1490,1176,2075,1869,1534,1400,1534,1281,1440,1166,1574,1247,1574,1247,1406,1306,536,2815,2637,2437,1534,1281,2298,1443,1555,1253,1490,1176,2075,1869,1574,1247,1490,1176,1490,1176,1240,1211,1240,1211,567,536,567,536,1574,1247,1574,1247,1336,813,1336,813,1507,1254,1507,1254,1332,1125,1352,723,1344,1155,1527,1254,1344,1598,1343,1342,1336,1159,1490,1176,1240,1211,1574,1247,1574,1247,1574,1247,1574,1247,1461,1205,856,1573,912,536,1912,1912,1490,1509,1193,1218,1352,1125,1159,1154,1155,1379,1541,1534,1240,1211,1268,536,1578,1278,1361,813,1439,1205,1176,1278,1278,1273,1152,598:1278,1278,1152,1211,1619,1128,1128,1524,1183,536,1281,1281,1155,1305,1436,1254,1253,1253,536,610,753,536,945,536,1403,1844,1844,1844,1253,1253,1307,1247,1649,1822,1445,813,774,813,638:743,743,1167,1167,1125,783,783,646:1128,723,718,1367,1342,1156,1202,1719,1205,1172,1159,658:1306,1337,1152,1152,1152,1152,1574,1173,1183,1254,1250,864,1166,996,1278,1152,1152,2305,2072,678:1661,1356,1729,1834,1600,1575,1061,1057,1365,1367,928,967,441,623,580,772,962,1225,908,508,1011,584,602,585,337,350,967,967,1063,1063,962,962,910,910,394,924,770,771,394,925,771,770,585,585,337,350,779,779,779,679,844,558,701,543,1030,1094,585,773,963,440,835,869,962,775,775,775,775,775,872,873,1064,965,1027,773,773,774,774,667,771,1176,1176,964,653,680,680,680,680,965,965,1062,0,0,0,0,0,774:0,0,0,0,0,780:0,783:0,787:0,789:0,795:0,803:558,806:0,0,0,812:0,823:0,0,834:0,0,838:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,884:581,584,1555,890:585,1193,1193,1193,674,1187,900:650,1444,1490,653,1589,1877,916,908:1845,910:1911,1857,610,1490,1350,1190,1479,1240,1336,1527,1574,567,1440,1490,1889,1555,1386,1574,1527,1321,931:1417,1352,1461,1821,1474,1821,1593,567,1461,1401,1128,1254,610,1253,1401,1239,1202,1225,1128,1077,1254,1280,610,1160,1370,1258,1240,1144,1247,1285,1278,1191,1315,1014,1253,1582,1210,1665,1688,610,1253,1247,1253,1688,1440,1347,1345,1426,1835,1426,1491,1826,1160,988:1220,1098,1008:1534,1347,1193,536,1574,961,961,1017:1509,1889,1020:1278,1509,1509,1509,1240,1240,1746,1190,1509,1332,567,567,1187,2286,2306,1825,1440,1555,1377,1486,1490,1324,1350,1190,1745,1240,2114,1303,1555,1555,1440,1534,1889,1527,1574,1527,1321,1509,1352,1377,1706,1474,1539,1444,2004,2052,1691,1857,1348,1509,2116,1336,1176,1238,1173,916,1321,1211,1733,1046,1254,1254,1166,1217,1634,1250,1247,1239,1278,1193,1014,1205,1530,1165,1303,1215,1735,1783,1366,1604,1186,1193,1759,1167,1211,1211,1254,916,1193,1125,536,536,536,1920,1874,1254,1166,1254,1205,1239,1947,1754,1440,1299,2021,1666,1490,1197,1994,1667,1788,1493,2398,2050,1151,1098,1821,1665,1574,1247,1515,1248,1515,1248,2779,2414,1152:1465,1187,1344,0,0,0,0,0,0,0,1555,1254,1440,1299,1332,1251,1190,916,1190,916,1352,1153,2176,1791,1303,1046,1521,1224,1437,1265,1184:1783,1345,1575,1298,2044,1431,2297,1912,2100,1677,1509,1193,1352,1014,1461,1202,1461,1202,1535,1223,1923,1421,1492,1263,1444,1215,1444,1254,1788,1517,1788,1517,567,2114,1733,1414,1250,1534,1217,1527,1250,1527,1250,1492,1263,1889,1634,536,1490,1176,1490,1176,2075,1869,1240,1211,1531,1211,1531,1211,2114,1733,1303,1046,1306,1306,1555,1254,1555,1254,1574,1247,1574,1247,1574,1247,1509,1193,1377,1205,1377,1205,1377,1205,1444,1215,1190,916,1857,1604,1251,916,1557,1094,1474,1165,1327:1265,3647:1350,7424:1174,7437:1634,7451:1014,7491:852,7495:924,924,879,7501:926,7503:854,1316,7506:899,7510:924,543,928,7515:902,7522:440,623,928,902,7580:865,7584:596,7611:854,7615:963,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7676:0,0,0,0,1490,1176,1350,1278,1350,1278,1350,1278,1509,1193,1479,1278,1479,1278,1479,1278,1479,1278,1479,1278,1240,1211,1240,1211,1240,1211,1240,1211,1240,1211,1204,796,1534,1281,1527,1254,1527,1254,1527,1254,1527,1254,1527,1254,567,536,567,536,1440,1166,1440,1166,1440,1166,1158,536,1158,536,1158,536,1158,536,1889,1844,1889,1844,1889,1844,1555,1253,1555,1253,1555,1253,1555,1253,1574,1247,1574,1247,1574,1247,1574,1247,1321,1278,1321,1278,1336,813,1336,813,1336,813,1336,813,1332,1125,1332,1125,1332,1125,1332,1125,1332,1125,1352,723,1352,723,1352,723,1352,723,1507,1254,1507,1254,1507,1254,1507,1254,1507,1254,1490,1202,1490,1202,2089,1719,2089,1719,2089,1719,2089,1719,2089,1719,1474,1165,1474,1165,1461,1205,1336,1159,1336,1159,1336,1159,1254,723,1719,1205,1176,685,7837:770,1476,1246,1490,1176,1490,1176,1490,1176,1490,1176,1490,1176,1490,1176,1490,1176,1490,1176,1490,1176,1490,1176,1490,1176,1490,1176,1240,1211,1240,1211,1240,1211,1240,1211,1240,1211,1240,1211,1240,1211,1240,1211,567,536,567,536,1574,1247,1574,1247,1574,1247,1574,1247,1574,1247,1574,1247,1574,1247,1584,1243,1584,1243,1584,1243,1584,1243,1584,1243,1507,1254,1507,1254,1504,1323,1504,1323,1504,1323,1504,1323,1504,1323,1461,1205,1461,1205,1461,1205,1461,1205,1762,1348,1251,1252,1532,1342,1401,1401,1401,1401,1401,1401,1401,1401,1534,1545,1891,1924,1900,1922,1713,1729,1128,1128,1128,1128,1128,1128,7960:1612,1629,1978,2010,1986,2008,7968:1254,1254,1254,1254,1254,1254,1254,1254,1899,1916,2265,2298,2273,2296,2086,2102,610,610,610,610,610,610,610,610,939,955,1305,1337,1313,1335,1126,1142,1247,1247,1247,1247,1247,1247,8008:1868,1884,2234,2266,2242,2264,8016:1253,1253,1253,1253,1253,1253,1253,1253,8025:1950,8027:2332,8029:2330,8031:2136,1688,1688,1688,1688,1688,1688,1688,1688,1879,1896,2245,2278,2253,2276,2066,2082,1401,1401,1128,1128,1254,1254,610,610,1247,1247,1253,1253,1688,1688,8064:1401,1401,1401,1401,1401,1401,1401,1401,1534,1545,1891,1924,1900,1922,1713,1729,1254,1254,1254,1254,1254,1254,1254,1254,1899,1916,2265,2298,2273,2296,2086,2102,1688,1688,1688,1688,1688,1688,1688,1688,1879,1896,2245,2278,2253,2276,2066,2082,1401,1401,1401,1401,1401,8118:1401,1401,1490,1490,1490,1553,1490,457,585,457,1024,919,1254,1254,1254,8134:1254,1254,1517,1589,1804,1877,1527,721,801,658,610,610,610,610,8150:610,610,567,567,844,916,8157:754,818,658,1253,1253,1253,1253,1278,1278,1253,1253,1461,1461,1611,1911,1738,1444,1444,358,8178:1688,1688,1688,8182:1688,1688,1574,1845,1760,1857,1593,650,457,8192:1149,2285,1024,2048,684,512,340,1325,653,339,169,0,8208:864,864,1325,1024,2048,2048,1099,959,602,602,558,602,1038,1027,983,1027,1131,1131,1031,1031,653,1305,1958,653,8239:339,2809,3561,527,1049,1572,527,1049,1572,1059,851,851,1541,1316,1107,1049,1718,1718,961,1536,1031,419,764,764,2226,1771,1771,941,1229,1235,1235,1105,674,1713,1155,1625,1534,1718,1354,8279:2095,8287:595,8304:990,440,8308:979,948,951,856,964,951,935,936,935,581,581,928,990,663,929,949,979,948,951,856,964,951,935,936,935,581,581,8336:852,879,899,869,964,928,854,440,1316,928,924,835,543,8352:1536,1509,1490,1250,1289,1766,1559,2044,2367,2071,1817,1278,1390,1578,1352,2944,8369:1430,1534,1490,1440,1509,8376:1353,1150,1286,8380:1536,1491,1534,1350,1004,8411:0,0,2846,2828,8424:0,8432:0,8448:2050,2021,8451:2416,8453:2053,2151,8457:2143,8467:997,8470:2250,1872,8478:1511,1338,1273,1492,1291,8486:1593,8490:1440,1490,8494:1347,8498:1204,8507:1576,8525:1913,8528:1843,1817,2386,1823,2025,1824,2026,1980,2031,1817,1997,1816,1972,1996,1739,1023,567,1133,1700,2057,1490,2057,2624,3190,2040,1474,2040,2607,1158,1509,1479,1889,568,1071,1607,1738,1141,1630,2274,2809,1700,1157,1700,2236,536,1193,1239,1844,8579:1440,1152,1536,1822,8585:2030,8592:1954,1805,1954,1805,2746,1740,1598,1598,1598,1598,8617:2363,2363,8624:2055,2055,8627:2055,1793,2055,8634:1954,1954,8656:1954,8658:1954,8660:2746,8670:1282,1282,8676:2126,2126,8679:2206,8682:2206,8706:1347,8709:1408,1479,8719:1540,8721:1443,1378,8730:1343,8734:1978,8747:783,8758:653,8776:1378,8800:1378,8804:1378,1378,8853:2846,2846,2846,2846,8963:1632,1632,1632,8984:2005,8997:2094,2490,2048,9003:2490,9088:1630,9095:2094,9099:1954,9166:2055,1768,9251:1534,9312:2846,2846,2846,2846,2846,2846,2846,2846,2846,9398:2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,9450:2846,9632:1872,1872,1872,9642:1031,9650:2118,2118,9654:1926,1926,9658:1926,1926,2118,2118,9664:1926,1926,9668:1926,1926,2165,2165,9674:1195,1872,9679:1872,9702:1031,9711:2846,9728:2188,9733:2140,2140,9788:2188,9825:2094,9829:2094,9834:1565,2020,9888:2100,10003:1808,10007:1811,10070:2165,10084:2094,10112:2846,2846,2846,2846,2846,2846,2846,2846,2846,10223:679,10229:2746,2746,3584,2746,2746,3584,10515:1746,10808:2846,11014:2206,11026:1872,1872,11036:2828,11044:2846,11388:441,11391:1349,11775:0,11800:1107,42655:0,43007:2482,43310:1249,57344:2165,57346:1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,1384,1400,1749,1782,1758,1780,1571,1587,952,952,1229,1361,952,952,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,1278,536,536,536,536,864,610,665,735,769,946,933,610,610,746,610,610,610,610,813,813,57450:1327,1351,848,1306,1364,1236,1236,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,764,764,764,764,931,931,2046,953,1024,1325,2048,1031,1031,1031,1031,1235,1235,653,550,550,550,550,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1378,1360,440,928,581,581,924,865,924,596,926,924,1225,908,854,581,581,811,551,758,789,812,785,793,710,793,793,57544:802,790,803,488,488,57564:811,551,758,789,812,785,793,710,793,793,863,57587:536,493,488,57606:1247,57609:910,1614,57612:558,1253,1247,1108,57617:925,1024,1247,57623:1247,1253,57633:1247,558,57636:1247,57642:1024,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2846,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,2828,57699:924,57795:1031,57810:1954,2746,5492,1954,2746,1954,2746,5492,1954,2746,2746,3584,2746,3584,57825:658,1490,1490,1490,1490,1490,1490,1350,1350,1509,1479,1479,1240,1240,1240,1240,1204,1534,1527,1527,1527,567,567,567,567,1440,1158,1158,1889,1889,1555,1555,1574,1574,1574,1574,1574,1584,1574,1321,1336,1336,1336,1332,1332,1332,1332,1352,1352,1507,1507,1507,1507,1507,1507,1507,1504,1507,1490,2089,2089,2089,1474,1474,1461,1461,1461,1336,1336,1554,952,952,952,952,1176,1176,1176,1176,1176,1176,1278,1278,1193,1278,1278,1211,1211,1211,1211,796,1281,1254,1254,1254,536,536,536,536,536,536,536,1166,858,536,536,1844,1844,1253,1253,1247,1247,1247,1247,1247,1243,1247,1278,813,813,813,1125,1125,1125,1125,1125,723,723,723,1254,1254,1254,1254,1254,1254,1254,1323,1254,1202,1719,1719,1719,1165,1165,1205,1205,1205,1159,1159,1278,1278,1278,1278,1278,1278,536,709,933,610,610,682,682,682,1253,1253,1253,1253,1253,1253,1253,1329,1253,1240,567,1531,2114,1303,1555,1574,1509,1377,1444,1857,952,1211,1733,1046,1254,1247,1193,1215,1604,1426,610,1253,1253,610,610,1253,1253,1253,653,653,653,653,653,1958,634,1113,653,653,1305,653,550,550,550,550,550,653,1447,1447,1447,919,0,0,0,0,0,0,1253,559,1688,1447,1253,589,943,943,1247,1247,1247,1247,1247,1247,1253,1253,925,925,1024,1024,864,685,559,653,60929:653,1490,1461,1176,1205,682,0,60937:2828,1133,60940:1350,709,730,644,709,1749,780,60948:1071,60951:1166,60957:682,682,818,682,682,682,682,682,682,1253,1253,1367,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1329,1329,1329,1329,1329,1329,1253,1253,1253,1253,1253,1253,1253,1253,1253,60999:550,800,800,800,800,800,800,800,800,800,800,800,800,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1688,2846,2828,2828,1534,1440,1158,1555,1336,1332,1554,1166,536,1253,813,1125,723,610,682,61063:1486,653,653,653,1127,1127,635,635,635,0,1152,457,721,754,801,818,658,658,431,650,0,0,719,719,545,856,855,543,593,593,564,593,1094,719,12,11,906,906,11,9,0,11,0,0,17,1444,1253,719,12,553,3,0,18,20,14,20,925,6,9,0,337,0,11,11,11,6,9,17,589,943,943,700,700,1024,1024,1024,1239,12,2,966,61144:16,0,14,0,14,19,952,1127,566,814,63171:0,65279:0"},"unitsPerEm":2048,"ascender":1984,"descender":-494}