adr-kit 0.2.4 → 0.2.6

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 (60) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +57 -45
  3. package/README.zh.md +53 -41
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +10 -11
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/accept.d.ts.map +1 -1
  8. package/dist/commands/accept.js +12 -14
  9. package/dist/commands/accept.js.map +1 -1
  10. package/dist/commands/decide.d.ts.map +1 -1
  11. package/dist/commands/decide.js +3 -2
  12. package/dist/commands/decide.js.map +1 -1
  13. package/dist/commands/init.js +2 -2
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/instructions.d.ts.map +1 -1
  16. package/dist/commands/instructions.js +24 -25
  17. package/dist/commands/instructions.js.map +1 -1
  18. package/dist/commands/list.d.ts.map +1 -1
  19. package/dist/commands/list.js +14 -14
  20. package/dist/commands/list.js.map +1 -1
  21. package/dist/commands/propose.d.ts.map +1 -1
  22. package/dist/commands/propose.js +12 -5
  23. package/dist/commands/propose.js.map +1 -1
  24. package/dist/commands/reject.d.ts +1 -1
  25. package/dist/commands/reject.d.ts.map +1 -1
  26. package/dist/commands/reject.js +8 -19
  27. package/dist/commands/reject.js.map +1 -1
  28. package/dist/commands/show.d.ts.map +1 -1
  29. package/dist/commands/show.js +16 -2
  30. package/dist/commands/show.js.map +1 -1
  31. package/dist/commands/status.d.ts.map +1 -1
  32. package/dist/commands/status.js +15 -14
  33. package/dist/commands/status.js.map +1 -1
  34. package/dist/commands/supersede.d.ts.map +1 -1
  35. package/dist/commands/supersede.js +14 -5
  36. package/dist/commands/supersede.js.map +1 -1
  37. package/dist/core/adr.d.ts +24 -9
  38. package/dist/core/adr.d.ts.map +1 -1
  39. package/dist/core/adr.js +97 -65
  40. package/dist/core/adr.js.map +1 -1
  41. package/dist/core/git.d.ts +9 -0
  42. package/dist/core/git.d.ts.map +1 -0
  43. package/dist/core/git.js +22 -0
  44. package/dist/core/git.js.map +1 -0
  45. package/dist/core/repository.d.ts +11 -0
  46. package/dist/core/repository.d.ts.map +1 -1
  47. package/dist/core/repository.js +95 -18
  48. package/dist/core/repository.js.map +1 -1
  49. package/dist/core/templates.d.ts +18 -10
  50. package/dist/core/templates.d.ts.map +1 -1
  51. package/dist/core/templates.js +65 -41
  52. package/dist/core/templates.js.map +1 -1
  53. package/dist/core/tool-integrations.d.ts.map +1 -1
  54. package/dist/core/tool-integrations.js +38 -30
  55. package/dist/core/tool-integrations.js.map +1 -1
  56. package/dist/core/validate.d.ts +7 -1
  57. package/dist/core/validate.d.ts.map +1 -1
  58. package/dist/core/validate.js +109 -97
  59. package/dist/core/validate.js.map +1 -1
  60. package/package.json +3 -2
@@ -1,4 +1,5 @@
1
- import { PROPOSAL_ERA_HEADINGS, section, todayStamp } from './adr.js';
1
+ import { parse, stringify } from 'yaml';
2
+ import { FRONT_MATTER_ORDER, PROPOSAL_ERA_HEADINGS, section, todayStamp, } from './adr.js';
2
3
  /** Proposal sections that survive the mechanical accept rewrite. */
3
4
  const PRESERVED_SECTIONS = [
4
5
  'Problem',
@@ -29,10 +30,23 @@ ${text}
29
30
  -->
30
31
  `;
31
32
  }
33
+ /**
34
+ * Render a YAML front matter block. Fields are written in the canonical
35
+ * order (status, date, commit, reason, superseded-by); only the fields
36
+ * present in `fields` are emitted.
37
+ */
38
+ export function frontMatter(fields) {
39
+ const ordered = {};
40
+ for (const key of FRONT_MATTER_ORDER) {
41
+ const value = fields[key];
42
+ if (value !== undefined)
43
+ ordered[key] = value;
44
+ }
45
+ return `---\n${stringify(ordered)}---\n`;
46
+ }
32
47
  export function proposalTemplate(title, context) {
33
- return `# ADR: ${title}
34
- Status: proposed
35
- Date: ${todayStamp()}
48
+ return `${frontMatter({ status: 'proposed', date: todayStamp() })}
49
+ # ADR: ${title}
36
50
 
37
51
  ${contextBlock(context)}## Problem
38
52
 
@@ -56,10 +70,12 @@ ${contextBlock(context)}## Problem
56
70
  <!-- What could go wrong, and what the change knowingly gives up. -->
57
71
  `;
58
72
  }
59
- export function decisionTemplate(number, title, context) {
60
- return `# ADR: ${number} ${title}
61
- Status: accepted
62
- Date: ${todayStamp()}
73
+ export function decisionTemplate(number, title, context, commit) {
74
+ const fields = { status: 'accepted', date: todayStamp() };
75
+ if (commit !== undefined)
76
+ fields.commit = commit;
77
+ return `${frontMatter(fields)}
78
+ # ADR: ${number} ${title}
63
79
 
64
80
  ${contextBlock(context)}## Problem
65
81
 
@@ -79,30 +95,13 @@ ${contextBlock(context)}## Problem
79
95
  <!-- What the trade-off cost and bought. -->
80
96
  `;
81
97
  }
82
- export function rejectedTemplate(title, reason) {
83
- return `# ADR: ${title}
84
- Status: rejected — ${reason}
85
- Date: ${todayStamp()}
86
-
87
- ## Problem
88
-
89
- <!-- What problem or opportunity was this proposal addressing? -->
90
-
91
- ## Proposal
92
-
93
- <!-- The rejected proposal. -->
94
-
95
- ## Alternatives considered
96
-
97
- <!-- Each genuine alternative and why it lost. -->
98
- `;
99
- }
100
98
  /**
101
- * Convert a proposal into an accepted decision using the same mechanical
99
+ * Convert a draft proposal into an accepted decision using the same mechanical
102
100
  * rewrite the format requires: Proposal becomes Decision, and the
103
- * acceptance criteria and risks are folded into Consequences.
101
+ * acceptance criteria and risks are folded into Consequences. `commit` anchors
102
+ * the decision to the code state it was recorded against.
104
103
  */
105
- export function proposalToDecision(proposal, number) {
104
+ export function proposalToDecision(proposal, number, commit) {
106
105
  const problem = sectionBody(proposal, 'Problem');
107
106
  const decision = sectionBody(proposal, 'Proposal');
108
107
  const alternatives = sectionBody(proposal, 'Alternatives considered');
@@ -124,9 +123,11 @@ export function proposalToDecision(proposal, number) {
124
123
  // being dropped: a lifecycle move must never lose written content silently.
125
124
  const passthrough = proposal.sections.filter((candidate) => !PRESERVED_SECTIONS.includes(candidate.heading) &&
126
125
  !DROPPED_SECTION_HEADINGS.includes(candidate.heading));
127
- let output = `# ADR: ${number} ${proposal.title}
128
- Status: accepted
129
- Date: ${todayStamp()}
126
+ const fields = { status: 'accepted', date: todayStamp() };
127
+ if (commit !== undefined)
128
+ fields.commit = commit;
129
+ let output = `${frontMatter(fields)}
130
+ # ADR: ${number} ${proposal.title}
130
131
 
131
132
  ## Problem
132
133
 
@@ -165,15 +166,38 @@ export function droppedSections(proposal) {
165
166
  .filter((heading) => DROPPED_SECTION_HEADINGS.includes(heading));
166
167
  }
167
168
  /**
168
- * Rewrite a record's status line and re-stamp its `Date:` line for a
169
- * lifecycle move. Every non-creating move (accept, reject, supersede) must
170
- * stamp the date so the header always reflects the current status; the body
171
- * is left untouched.
169
+ * Rewrite a record's front matter for a lifecycle move: parse the existing
170
+ * block, merge `patch` over it, and re-emit the fields in canonical order.
171
+ * Every non-creating move (accept, reject, supersede) must stamp the date so
172
+ * the front matter always reflects the current status; the Markdown body is
173
+ * left untouched. Unknown keys are preserved after the canonical ones so a
174
+ * mechanical rewrite never loses data silently (validate flags them).
172
175
  */
173
- export function stampLifecycleMove(content, statusLine) {
174
- const lines = content.split(/\r?\n/);
175
- lines[1] = statusLine;
176
- lines[2] = `Date: ${todayStamp()}`;
177
- return lines.join('\n');
176
+ export function stampLifecycleMove(content, patch) {
177
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
178
+ if (match === null) {
179
+ throw new Error('record has no YAML front matter block');
180
+ }
181
+ const existing = parse(match[1] ?? '');
182
+ const merged = {};
183
+ for (const key of FRONT_MATTER_ORDER) {
184
+ const patched = patch[key];
185
+ if (patched !== undefined) {
186
+ merged[key] = patched;
187
+ continue;
188
+ }
189
+ const kept = existing[key];
190
+ if (typeof kept === 'string' || typeof kept === 'number') {
191
+ merged[key] = kept;
192
+ }
193
+ }
194
+ for (const [key, value] of Object.entries(existing)) {
195
+ if (FRONT_MATTER_ORDER.includes(key))
196
+ continue;
197
+ if (typeof value === 'string' || typeof value === 'number') {
198
+ merged[key] = value;
199
+ }
200
+ }
201
+ return `---\n${stringify(merged)}---${content.slice(match[0].length)}`;
178
202
  }
179
203
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-integrations.d.ts","sourceRoot":"","sources":["../../src/core/tool-integrations.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,eAAe,oEAAqE,CAAC;AAClG,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAsBtD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,eAAO,MAAM,SAAS,EAAE,QAAQ,EAuM/B,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAwB9D;AAaD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CA8BtF;AAcD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAuB1E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAErF"}
1
+ {"version":3,"file":"tool-integrations.d.ts","sourceRoot":"","sources":["../../src/core/tool-integrations.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,eAAe,oEAAqE,CAAC;AAClG,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAsBtD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,eAAO,MAAM,SAAS,EAAE,QAAQ,EA+M/B,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAwB9D;AAaD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CA8BtF;AAcD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAuB1E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAErF"}
@@ -40,14 +40,16 @@ Create an \`adr/\` repository in the target directory.
40
40
  adrkit init [path]
41
41
  \`\`\`
42
42
 
43
- 3. Confirm the output lists \`adr/config.yaml\`, \`adr/decisions\`,
44
- \`adr/proposed\`, and \`adr/rejected\`.
43
+ 3. Confirm the output lists \`adr/config.yaml\`, \`adr/decisions\`, and
44
+ \`adr/.gitignore\`. Proposals are not a separate folder: they are ephemeral
45
+ drafts in \`adr/.drafts/\`, created by \`adrkit propose\`.
45
46
 
46
47
  ## Rules
47
48
 
48
49
  - Never create \`adr/\` directories by hand; use the CLI so the config and
49
50
  README stay canonical.
50
- - After init, the next action is usually \`adrkit propose "<title>"\`.`,
51
+ - After init, the next action is usually \`adrkit decide "<title>"\`, or
52
+ \`adrkit propose "<title>"\` when the decision still needs review.`,
51
53
  },
52
54
  {
53
55
  name: 'adrkit-propose',
@@ -56,8 +58,9 @@ adrkit init [path]
56
58
 
57
59
  ## Overview
58
60
 
59
- Create a proposed ADR in \`adr/proposed/\`. The proposal is a draft and is
60
- expected to fail \`adrkit validate\` until every required section is filled.
61
+ Create an ephemeral proposal draft in \`adr/.drafts/\`. A draft is temporary:
62
+ \`adrkit accept\` promotes it into a decision, \`adrkit reject\` discards it
63
+ without leaving a record.
61
64
 
62
65
  ## Steps
63
66
 
@@ -67,16 +70,17 @@ expected to fail \`adrkit validate\` until every required section is filled.
67
70
  adrkit propose "<title>"
68
71
  \`\`\`
69
72
 
70
- 2. Edit the created file. Fill every section with real content:
73
+ 2. Edit the created draft. Fill every section with real content:
71
74
  \`## Problem\`, \`## Proposal\`, \`## Alternatives considered\`,
72
75
  \`## Acceptance criteria\`, \`## Risks\`.
73
- 3. Run \`adrkit validate\` until it returns OK.
76
+ 3. Promote the completed draft with \`adrkit accept "<title>"\`; the CLI
77
+ validates it before promoting.
74
78
 
75
79
  ## Rules
76
80
 
77
81
  - Do not skip \`## Alternatives considered\`. A proposal without alternatives
78
82
  is invalid by design.
79
- - Keep the status line exactly \`Status: proposed\`.
83
+ - Keep the front matter exactly \`status: proposed\`.
80
84
  - Before proposing, run \`adrkit list\` and check whether this decision
81
85
  supersedes or overlaps an existing one; mention that in the record. Re-run
82
86
  it even if you ran it earlier in this conversation: session memory can be
@@ -89,8 +93,8 @@ adrkit propose "<title>"
89
93
 
90
94
  ## Overview
91
95
 
92
- Create an accepted decision draft directly in \`adr/decisions/\` with the
93
- next \`N\` number.
96
+ Record an already-made decision directly in \`adr/decisions/\` with the next
97
+ \`N\` number.
94
98
 
95
99
  ## Steps
96
100
 
@@ -131,24 +135,25 @@ adrkit validate [name] [--all] [--json]
131
135
  ## Rules
132
136
 
133
137
  - Treat any non-OK output as a blocker for \`adrkit accept\`.
134
- - A fresh draft is expected to fail until the required sections are
135
- filled in; fix the exact issue printed rather than deleting sections.`,
138
+ - \`adrkit validate\` checks durable decisions only; a draft in \`adr/.drafts/\`
139
+ is validated by \`adrkit accept\` right before it is promoted.`,
136
140
  },
137
141
  {
138
142
  name: 'adrkit-accept',
139
- description: 'Use when a proposed ADR is complete and validated, and the team has decided to accept it.',
143
+ description: 'Use when a proposal draft is complete, and the team has decided to accept it.',
140
144
  body: `# ADR Kit Accept
141
145
 
142
146
  ## Overview
143
147
 
144
- Accept a proposal. The CLI validates the proposal, assigns the next
145
- \`N\` decision number, rewrites \`## Proposal\` to \`## Decision\`, folds
146
- \`Acceptance criteria\` and \`Risks\` into \`## Consequences\`, and moves the
147
- file from \`adr/proposed/\` to \`adr/decisions/\`.
148
+ Promote a completed draft to a decision. The CLI validates the draft, assigns
149
+ the next \`N\` number, rewrites \`## Proposal\` to \`## Decision\`, folds
150
+ \`Acceptance criteria\` and \`Risks\` into \`## Consequences\`, writes
151
+ \`adr/decisions/N-*.md\`, and discards the draft from \`adr/.drafts/\`.
148
152
 
149
153
  ## Steps
150
154
 
151
- 1. Run \`adrkit validate\` and confirm the proposal is OK.
155
+ 1. Review the draft with \`adrkit show "<name>"\`; every section must have real
156
+ content before accepting.
152
157
  2. Run:
153
158
 
154
159
  \`\`\`bash
@@ -159,9 +164,9 @@ adrkit accept "<name>"
159
164
 
160
165
  ## Rules
161
166
 
162
- - Never accept an invalid proposal; the command refuses.
163
- - Re-run \`adrkit validate\` immediately before accepting, even if you
164
- validated earlier in this conversation; the repo may have changed since.
167
+ - Never accept an invalid draft; the command refuses.
168
+ - Re-run \`adrkit show "<name>"\` immediately before accepting, even if you
169
+ reviewed it earlier in this conversation; the repo may have changed since.
165
170
  - Review the generated \`## Consequences\` after accepting.
166
171
  - The command warns when a proposal contains sections that have no place in
167
172
  an accepted decision (for example \`## Plan\`); save their content elsewhere
@@ -169,24 +174,26 @@ adrkit accept "<name>"
169
174
  },
170
175
  {
171
176
  name: 'adrkit-reject',
172
- description: 'Use when a proposed ADR should be declined and frozen for future reference.',
177
+ description: 'Use when a proposal draft should be declined and discarded.',
173
178
  body: `# ADR Kit Reject
174
179
 
175
180
  ## Overview
176
181
 
177
- Reject a proposal. The CLI moves the file from \`adr/proposed/\` to
178
- \`adr/rejected/\` and rewrites the status line with the reason.
182
+ Discard a proposal draft. The CLI deletes the draft from \`adr/.drafts/\` and
183
+ leaves no record - rejection lives in the winning decision's
184
+ \`## Alternatives considered\`, not in a standalone rejected record.
179
185
 
180
186
  ## Steps
181
187
 
182
188
  \`\`\`bash
183
- adrkit reject "<name>" --reason "<why it was rejected>"
189
+ adrkit reject "<name>" [--reason "<why it was rejected>"]
184
190
  \`\`\`
185
191
 
186
192
  ## Rules
187
193
 
188
- - Always provide a concrete reason; the command refuses an empty one.
189
- - A rejected record is frozen history. Do not edit it afterwards.`,
194
+ - \`--reason\` is optional and is only echoed; nothing is persisted. If the
195
+ rejection matters, record it in \`## Alternatives considered\` of the decision
196
+ that won.`,
190
197
  },
191
198
  {
192
199
  name: 'adrkit-supersede',
@@ -195,9 +202,10 @@ adrkit reject "<name>" --reason "<why it was rejected>"
195
202
 
196
203
  ## Overview
197
204
 
198
- Mark an accepted decision as superseded. The CLI rewrites its status line
199
- to \`Status: superseded by N\`, stamps the superseded date on the \`Date:\`
200
- line, and leaves the record in \`adr/decisions/\` as frozen history.
205
+ Mark an accepted decision as superseded. The CLI rewrites its front matter
206
+ to \`status: superseded\` with \`superseded-by: N\`, stamps the supersede date
207
+ on the \`date\` field, and leaves the record in \`adr/decisions/\` as frozen
208
+ history.
201
209
 
202
210
  ## Steps
203
211
 
@@ -1 +1 @@
1
- {"version":3,"file":"tool-integrations.js","sourceRoot":"","sources":["../../src/core/tool-integrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-integrations.js","sourceRoot":"","sources":["../../src/core/tool-integrations.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,15 @@ export interface ValidationIssue {
4
4
  message: string;
5
5
  }
6
6
  export declare function validateRecord(root: string, record: AdrRecord): ValidationIssue[];
7
+ /**
8
+ * Validate a draft proposal in `adr/.drafts/` before `accept` promotes it.
9
+ * Drafts are ephemeral and deliberately outside the `adrkit validate` surface;
10
+ * this is the gate that keeps a half-written proposal from becoming a decision.
11
+ */
12
+ export declare function validateDraft(root: string, draft: AdrRecord): ValidationIssue[];
7
13
  export declare function validateRepository(root: string): ValidationIssue[];
8
14
  /**
9
- * Repository-level checks for a single record: a "superseded by N" reference
15
+ * Repository-level checks for a single record: a `superseded-by: N` reference
10
16
  * must point at an existing decision that is not itself superseded.
11
17
  * validateRecord only sees one file; this adds the cross-record half so
12
18
  * `adrkit validate <name>` keeps the same promise as a full validate.
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,UAAU,CAAC;AAIlB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,eAAe,EAAE,CA2HjF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAqDlE;AA0BD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,SAAS,EAAE,GACnB,eAAe,EAAE,CAQnB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAI9D"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,SAAS,EAEf,MAAM,UAAU,CAAC;AAIlB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAiED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,eAAe,EAAE,CA0DjF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,eAAe,EAAE,CA0B/E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CA+ClE;AA0BD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,SAAS,EAAE,GACnB,eAAe,EAAE,CAQnB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAI9D"}