@leafo/lml 0.1.1 → 0.3.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.
- package/README.md +273 -40
- package/dist/auto-chords.d.ts +33 -8
- package/dist/auto-chords.d.ts.map +1 -1
- package/dist/auto-chords.js +19 -1
- package/dist/auto-chords.js.map +1 -1
- package/dist/grammar.d.ts.map +1 -1
- package/dist/grammar.js +1371 -283
- package/dist/grammar.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/music.d.ts +502 -5
- package/dist/music.d.ts.map +1 -1
- package/dist/music.js +500 -53
- package/dist/music.js.map +1 -1
- package/dist/note-utils.d.ts +13 -0
- package/dist/note-utils.d.ts.map +1 -0
- package/dist/note-utils.js +62 -0
- package/dist/note-utils.js.map +1 -0
- package/dist/noteUtils.d.ts +25 -0
- package/dist/noteUtils.d.ts.map +1 -0
- package/dist/noteUtils.js +86 -0
- package/dist/noteUtils.js.map +1 -0
- package/dist/parser.d.ts +137 -2
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +259 -36
- package/dist/parser.js.map +1 -1
- package/dist/song.d.ts +207 -2
- package/dist/song.d.ts.map +1 -1
- package/dist/song.js +251 -15
- package/dist/song.js.map +1 -1
- package/package.json +8 -3
package/dist/parser.js
CHANGED
|
@@ -1,44 +1,188 @@
|
|
|
1
1
|
// @ts-ignore - generated file
|
|
2
2
|
import * as peg from "./grammar.js";
|
|
3
|
-
import { KeySignature } from "./music.js";
|
|
3
|
+
import { parseNote, KeySignature, OFFSETS, OCTAVE_SIZE } from "./music.js";
|
|
4
4
|
import { MultiTrackSong, SongNote } from "./song.js";
|
|
5
5
|
import { AutoChords } from "./auto-chords.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Internal tick resolution for timing calculations.
|
|
8
|
+
* 48 ticks per beat allows exact representation of common subdivisions
|
|
9
|
+
* including triplets, sixtuplets, and standard note values.
|
|
10
|
+
* Divisible by 1, 2, 3, 4, 6, 8, 12, 16, 24, 48.
|
|
11
|
+
*/
|
|
12
|
+
const TICKS_PER_BEAT = 48;
|
|
13
|
+
/**
|
|
14
|
+
* Calculates the duration multiplier for dotted notes.
|
|
15
|
+
* Each dot adds half of the previous value to the note duration.
|
|
16
|
+
* @param dots - Number of dots (1, 2, 3, etc.)
|
|
17
|
+
* @returns Duration multiplier (1 dot = 1.5x, 2 dots = 1.75x, 3 dots = 1.875x)
|
|
18
|
+
* @example
|
|
19
|
+
* dottedMultiplier(1) // 1.5
|
|
20
|
+
* dottedMultiplier(2) // 1.75
|
|
21
|
+
* dottedMultiplier(3) // 1.875
|
|
22
|
+
*/
|
|
23
|
+
function dottedMultiplier(dots) {
|
|
24
|
+
return (Math.pow(2, dots + 1) - 1) / Math.pow(2, dots);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Finds the octave that places a note closest to a reference pitch.
|
|
28
|
+
* Used for relative note entry where the octave is inferred from context.
|
|
29
|
+
* @param noteLetter - Note name without octave (e.g., "C", "F#", "Bb")
|
|
30
|
+
* @param referencePitch - MIDI pitch number to stay close to
|
|
31
|
+
* @returns Full note name with octave (e.g., "C4", "F#5")
|
|
32
|
+
* @throws Error if noteLetter is not a valid note name
|
|
33
|
+
* @example
|
|
34
|
+
* findClosestOctave("G", 60) // "G4" (closest G to middle C)
|
|
35
|
+
* findClosestOctave("C", 67) // "C5" (closest C to G4)
|
|
36
|
+
*/
|
|
37
|
+
function findClosestOctave(noteLetter, referencePitch) {
|
|
38
|
+
const match = noteLetter.match(/^([A-G])(#|b)?$/);
|
|
39
|
+
if (!match) {
|
|
40
|
+
throw new Error(`Invalid note letter: ${noteLetter}`);
|
|
41
|
+
}
|
|
42
|
+
const [, letter] = match;
|
|
43
|
+
if (OFFSETS[letter] === undefined) {
|
|
44
|
+
throw new Error(`Invalid note letter: ${letter}`);
|
|
45
|
+
}
|
|
46
|
+
// Find the reference note's octave (MIDI: C4 = 60)
|
|
47
|
+
const refOctave = Math.floor(referencePitch / OCTAVE_SIZE) - 1;
|
|
48
|
+
// Calculate pitches for octaves around the reference using parseNote for spelling rules.
|
|
49
|
+
let bestOctave = refOctave;
|
|
50
|
+
let bestPitch = parseNote(`${noteLetter}${refOctave}`);
|
|
51
|
+
let bestDistance = Math.abs(bestPitch - referencePitch);
|
|
52
|
+
const belowOctave = refOctave - 1;
|
|
53
|
+
const pitchBelow = parseNote(`${noteLetter}${belowOctave}`);
|
|
54
|
+
const distBelow = Math.abs(pitchBelow - referencePitch);
|
|
55
|
+
if (distBelow < bestDistance) {
|
|
56
|
+
bestOctave = belowOctave;
|
|
57
|
+
bestPitch = pitchBelow;
|
|
58
|
+
bestDistance = distBelow;
|
|
59
|
+
}
|
|
60
|
+
const aboveOctave = refOctave + 1;
|
|
61
|
+
const pitchAbove = parseNote(`${noteLetter}${aboveOctave}`);
|
|
62
|
+
const distAbove = Math.abs(pitchAbove - referencePitch);
|
|
63
|
+
if (distAbove < bestDistance) {
|
|
64
|
+
bestOctave = aboveOctave;
|
|
65
|
+
}
|
|
66
|
+
return `${noteLetter}${bestOctave}`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Parser and compiler for the LML (Leafo Music Language) notation format.
|
|
70
|
+
* Converts text-based music notation into a MultiTrackSong with note and timing data.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* // Quick load from string
|
|
74
|
+
* const song = SongParser.load("c d e f g")
|
|
75
|
+
*
|
|
76
|
+
* // Two-step parse and compile
|
|
77
|
+
* const parser = new SongParser()
|
|
78
|
+
* const ast = parser.parse("c d e | f g a")
|
|
79
|
+
* const song = parser.compile(ast)
|
|
80
|
+
*/
|
|
15
81
|
class SongParser {
|
|
82
|
+
/**
|
|
83
|
+
* Convenience method to parse and compile a song in one step.
|
|
84
|
+
* @param songText - LML notation string to parse
|
|
85
|
+
* @param opts - Optional parser configuration
|
|
86
|
+
* @returns Compiled MultiTrackSong
|
|
87
|
+
* @example
|
|
88
|
+
* const song = SongParser.load("c d e | f g a")
|
|
89
|
+
*/
|
|
16
90
|
static load(songText, opts) {
|
|
17
91
|
const parser = new SongParser();
|
|
18
92
|
const ast = parser.parse(songText);
|
|
19
93
|
return parser.compile(ast, opts);
|
|
20
94
|
}
|
|
21
|
-
|
|
95
|
+
/**
|
|
96
|
+
* Parses a single note string into its component parts.
|
|
97
|
+
* @param noteStr - Note string to parse (e.g., "c5", "c+5*2", "c5.")
|
|
98
|
+
* @returns ParsedNote object, or null if parsing fails
|
|
99
|
+
* @example
|
|
100
|
+
* SongParser.parseNote("c5") // { name: "C", octave: "5" }
|
|
101
|
+
* SongParser.parseNote("c+5*2") // { name: "C", accidental: "+", octave: "5", duration: 2 }
|
|
102
|
+
* SongParser.parseNote("c5.") // { name: "C", octave: "5", dots: 1 }
|
|
103
|
+
* SongParser.parseNote("c5@2") // { name: "C", octave: "5", start: 2 }
|
|
104
|
+
*/
|
|
105
|
+
static parseNote(noteStr) {
|
|
106
|
+
try {
|
|
107
|
+
const result = peg.parse(noteStr, { startRule: 'note' });
|
|
108
|
+
const [, noteName, opts] = result;
|
|
109
|
+
const parsed = {
|
|
110
|
+
name: noteName[0], // Just the letter (already uppercase from grammar)
|
|
111
|
+
octave: noteName.slice(1) || undefined,
|
|
112
|
+
accidental: opts.sharp ? '+' : opts.flat ? '-' : opts.natural ? '=' : undefined,
|
|
113
|
+
duration: opts.duration,
|
|
114
|
+
start: opts.start,
|
|
115
|
+
};
|
|
116
|
+
if (opts.dots)
|
|
117
|
+
parsed.dots = opts.dots;
|
|
118
|
+
return parsed;
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Parses LML notation text into an abstract syntax tree.
|
|
126
|
+
* @param songText - LML notation string to parse
|
|
127
|
+
* @returns Array of AST nodes representing the parsed song
|
|
128
|
+
* @throws SyntaxError if the input contains invalid syntax
|
|
129
|
+
* @example
|
|
130
|
+
* const parser = new SongParser()
|
|
131
|
+
* const ast = parser.parse("C4 D4 E4")
|
|
132
|
+
* // ast = [["note", "C", {...}], ["note", "D", {...}], ["note", "E", {...}]]
|
|
133
|
+
*/
|
|
22
134
|
parse(songText) {
|
|
23
|
-
return peg.parse(songText);
|
|
135
|
+
return peg.parse(songText, { grammarSource: "input" });
|
|
24
136
|
}
|
|
25
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Compiles an AST into a MultiTrackSong with note data.
|
|
139
|
+
* Processes all commands, resolves relative octaves, applies key signatures,
|
|
140
|
+
* and optionally generates auto-chords.
|
|
141
|
+
* @param ast - Abstract syntax tree from parse()
|
|
142
|
+
* @param opts - Optional compiler configuration
|
|
143
|
+
* @returns Compiled song with tracks, notes, and metadata
|
|
144
|
+
* @example
|
|
145
|
+
* const parser = new SongParser()
|
|
146
|
+
* const ast = parser.parse("$G | C D E | F G A |")
|
|
147
|
+
* const song = parser.compile(ast)
|
|
148
|
+
* // song.metadata.keySignature = 1 (G major)
|
|
149
|
+
*/
|
|
26
150
|
compile(ast, opts) {
|
|
151
|
+
// Extract frontmatter from AST
|
|
152
|
+
const frontmatter = {};
|
|
153
|
+
for (const node of ast) {
|
|
154
|
+
if (node[0] === "frontmatter") {
|
|
155
|
+
frontmatter[node[1]] = node[2];
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const defaultOctave = opts?.defaultOctave ?? 4;
|
|
27
159
|
const state = {
|
|
28
160
|
startPosition: 0,
|
|
29
161
|
position: 0,
|
|
30
|
-
|
|
31
|
-
|
|
162
|
+
ticksPerNote: TICKS_PER_BEAT, // 1 beat = 48 ticks
|
|
163
|
+
ticksPerMeasure: TICKS_PER_BEAT * 4, // 4 beats per measure default
|
|
32
164
|
timeScale: 1,
|
|
33
165
|
keySignature: new KeySignature(0),
|
|
34
166
|
currentTrack: 0,
|
|
167
|
+
lastMeasure: -1,
|
|
168
|
+
nextMeasureStart: 0,
|
|
169
|
+
explicitMeasureUsed: false,
|
|
170
|
+
lastNotePitch: null,
|
|
171
|
+
defaultPitch: (defaultOctave + 1) * OCTAVE_SIZE, // C at the default octave (MIDI: C4 = 60)
|
|
35
172
|
};
|
|
36
173
|
const song = new MultiTrackSong();
|
|
37
174
|
this.compileCommands(ast, state, song);
|
|
38
175
|
song.metadata = {
|
|
39
176
|
keySignature: state.keySignature.count,
|
|
40
|
-
beatsPerMeasure: state.
|
|
177
|
+
beatsPerMeasure: state.ticksPerMeasure / TICKS_PER_BEAT,
|
|
178
|
+
...(Object.keys(frontmatter).length > 0 && { frontmatter }),
|
|
41
179
|
};
|
|
180
|
+
// Ensure default 4/4 time signature at position 0 for getMeasures()
|
|
181
|
+
if (!song.timeSignatures || song.timeSignatures.length === 0 || song.timeSignatures[0][0] > 0) {
|
|
182
|
+
if (!song.timeSignatures)
|
|
183
|
+
song.timeSignatures = [];
|
|
184
|
+
song.timeSignatures.unshift([0, 4]);
|
|
185
|
+
}
|
|
42
186
|
if (song.autoChords) {
|
|
43
187
|
const settings = opts ? opts.autoChordsSettings : {};
|
|
44
188
|
if (opts && opts.autoChords) {
|
|
@@ -50,6 +194,12 @@ class SongParser {
|
|
|
50
194
|
}
|
|
51
195
|
return song;
|
|
52
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Recursively processes AST commands and updates song state.
|
|
199
|
+
* @param commands - Array of AST nodes to process
|
|
200
|
+
* @param state - Current compiler state (modified in place)
|
|
201
|
+
* @param song - Song being built (notes added to tracks)
|
|
202
|
+
*/
|
|
53
203
|
compileCommands(commands, state, song) {
|
|
54
204
|
for (const command of commands) {
|
|
55
205
|
const t = command[0];
|
|
@@ -67,23 +217,47 @@ class SongParser {
|
|
|
67
217
|
Object.setPrototypeOf(blockState, state);
|
|
68
218
|
this.compileCommands(blockCommands, blockState, song);
|
|
69
219
|
state.position = blockState.position;
|
|
220
|
+
state.lastNotePitch = blockState.lastNotePitch;
|
|
221
|
+
// If time signature changed inside block, recalculate next measure boundary
|
|
222
|
+
if (blockState.ticksPerMeasure !== state.ticksPerMeasure) {
|
|
223
|
+
const measureStart = state.nextMeasureStart - state.ticksPerMeasure;
|
|
224
|
+
state.nextMeasureStart = measureStart + blockState.ticksPerMeasure;
|
|
225
|
+
state.ticksPerMeasure = blockState.ticksPerMeasure;
|
|
226
|
+
}
|
|
70
227
|
break;
|
|
71
228
|
}
|
|
72
229
|
case "halfTime": {
|
|
73
|
-
|
|
230
|
+
const [, count = 1] = command;
|
|
231
|
+
state.timeScale *= Math.pow(2, count);
|
|
74
232
|
break;
|
|
75
233
|
}
|
|
76
234
|
case "doubleTime": {
|
|
77
|
-
|
|
235
|
+
const [, count = 1] = command;
|
|
236
|
+
state.timeScale *= Math.pow(0.5, count);
|
|
78
237
|
break;
|
|
79
238
|
}
|
|
80
239
|
case "tripleTime": {
|
|
81
|
-
|
|
240
|
+
const [, count = 1] = command;
|
|
241
|
+
state.timeScale *= Math.pow(1 / 3, count);
|
|
82
242
|
break;
|
|
83
243
|
}
|
|
84
244
|
case "measure": {
|
|
85
245
|
const [, measure] = command;
|
|
86
|
-
|
|
246
|
+
if (measure !== undefined) {
|
|
247
|
+
// Explicit measure number - calculate position (for jumps)
|
|
248
|
+
const measureNum = measure;
|
|
249
|
+
state.lastMeasure = measureNum;
|
|
250
|
+
state.position = measureNum * state.ticksPerMeasure;
|
|
251
|
+
state.nextMeasureStart = (measureNum + 1) * state.ticksPerMeasure;
|
|
252
|
+
state.explicitMeasureUsed = true;
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
// Auto-increment - always jump to next measure boundary
|
|
256
|
+
state.lastMeasure += 1;
|
|
257
|
+
state.position = state.nextMeasureStart;
|
|
258
|
+
state.nextMeasureStart = state.position + state.ticksPerMeasure;
|
|
259
|
+
state.explicitMeasureUsed = false;
|
|
260
|
+
}
|
|
87
261
|
break;
|
|
88
262
|
}
|
|
89
263
|
case "setTrack": {
|
|
@@ -97,20 +271,22 @@ class SongParser {
|
|
|
97
271
|
if (!track.clefs) {
|
|
98
272
|
track.clefs = [];
|
|
99
273
|
}
|
|
100
|
-
|
|
274
|
+
// Convert ticks to beats for storage
|
|
275
|
+
track.clefs.push([state.position / TICKS_PER_BEAT, clef]);
|
|
101
276
|
break;
|
|
102
277
|
}
|
|
103
278
|
case "note": {
|
|
104
279
|
const [, name, noteOpts] = command;
|
|
105
280
|
let noteName = name;
|
|
106
|
-
let
|
|
107
|
-
let start = null;
|
|
281
|
+
let durationTicks = state.ticksPerNote * state.timeScale;
|
|
108
282
|
let hasAccidental = false;
|
|
109
283
|
if (noteOpts) {
|
|
110
284
|
if (noteOpts.duration) {
|
|
111
|
-
|
|
285
|
+
durationTicks *= noteOpts.duration;
|
|
286
|
+
}
|
|
287
|
+
if (noteOpts.dots) {
|
|
288
|
+
durationTicks *= dottedMultiplier(noteOpts.dots);
|
|
112
289
|
}
|
|
113
|
-
start = noteOpts.start ?? null;
|
|
114
290
|
if (noteOpts.sharp) {
|
|
115
291
|
hasAccidental = true;
|
|
116
292
|
noteName = noteName.substring(0, 1) + "#" + noteName.substring(1);
|
|
@@ -123,39 +299,71 @@ class SongParser {
|
|
|
123
299
|
hasAccidental = true;
|
|
124
300
|
}
|
|
125
301
|
}
|
|
302
|
+
// Handle relative octave (note without octave number)
|
|
303
|
+
const hasOctave = /\d$/.test(noteName);
|
|
304
|
+
if (!hasOctave) {
|
|
305
|
+
const referencePitch = state.lastNotePitch ?? state.defaultPitch;
|
|
306
|
+
noteName = findClosestOctave(noteName, referencePitch);
|
|
307
|
+
}
|
|
126
308
|
if (!hasAccidental) {
|
|
127
309
|
// apply default accidental
|
|
128
310
|
noteName = state.keySignature.unconvertNote(noteName);
|
|
129
311
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
312
|
+
// Round duration to ensure integer ticks
|
|
313
|
+
durationTicks = Math.round(durationTicks);
|
|
314
|
+
// Determine start position
|
|
315
|
+
let startTicks;
|
|
316
|
+
if (noteOpts?.start != null) {
|
|
317
|
+
// Explicit @ position is in beats, convert to ticks
|
|
318
|
+
startTicks = noteOpts.start * TICKS_PER_BEAT;
|
|
133
319
|
}
|
|
134
|
-
|
|
320
|
+
else {
|
|
321
|
+
startTicks = state.position;
|
|
322
|
+
state.position += durationTicks;
|
|
323
|
+
}
|
|
324
|
+
// Update lastNotePitch for relative octave tracking
|
|
325
|
+
state.lastNotePitch = parseNote(noteName);
|
|
326
|
+
// Convert ticks to beats for SongNote
|
|
327
|
+
song.pushWithTrack(new SongNote(noteName, startTicks / TICKS_PER_BEAT, durationTicks / TICKS_PER_BEAT, noteOpts?.location), state.currentTrack);
|
|
135
328
|
break;
|
|
136
329
|
}
|
|
137
330
|
case "rest": {
|
|
138
331
|
const [, restTiming] = command;
|
|
139
|
-
let
|
|
332
|
+
let durationTicks = state.ticksPerNote * state.timeScale;
|
|
140
333
|
if (restTiming) {
|
|
141
334
|
if (restTiming.start) {
|
|
142
335
|
break; // do nothing
|
|
143
336
|
}
|
|
144
337
|
if (restTiming.duration) {
|
|
145
|
-
|
|
338
|
+
durationTicks *= restTiming.duration;
|
|
339
|
+
}
|
|
340
|
+
if (restTiming.dots) {
|
|
341
|
+
durationTicks *= dottedMultiplier(restTiming.dots);
|
|
146
342
|
}
|
|
147
343
|
}
|
|
148
|
-
state.position +=
|
|
344
|
+
state.position += Math.round(durationTicks);
|
|
149
345
|
break;
|
|
150
346
|
}
|
|
151
347
|
case "keySignature": {
|
|
152
|
-
|
|
348
|
+
const [, count, sourceLocation] = command;
|
|
349
|
+
state.keySignature = new KeySignature(count);
|
|
350
|
+
if (!song.keySignatures) {
|
|
351
|
+
song.keySignatures = [];
|
|
352
|
+
}
|
|
353
|
+
song.keySignatures.push([state.position / TICKS_PER_BEAT, count, sourceLocation]);
|
|
153
354
|
break;
|
|
154
355
|
}
|
|
155
356
|
case "timeSignature": {
|
|
156
357
|
const [, perBeat, noteValue] = command;
|
|
157
|
-
|
|
158
|
-
|
|
358
|
+
// Convert beat duration to ticks: 4/4 means quarter note = 1 beat = 48 ticks
|
|
359
|
+
// In 6/8, eighth note = 1 beat = 48 ticks, so ticksPerNote = 48 * (4/8) = 24
|
|
360
|
+
state.ticksPerNote = TICKS_PER_BEAT * (4 / noteValue);
|
|
361
|
+
state.ticksPerMeasure = state.ticksPerNote * perBeat;
|
|
362
|
+
// Track time signature changes for getMeasures()
|
|
363
|
+
if (!song.timeSignatures) {
|
|
364
|
+
song.timeSignatures = [];
|
|
365
|
+
}
|
|
366
|
+
song.timeSignatures.push([state.position / TICKS_PER_BEAT, perBeat]);
|
|
159
367
|
break;
|
|
160
368
|
}
|
|
161
369
|
case "macro": {
|
|
@@ -165,8 +373,22 @@ class SongParser {
|
|
|
165
373
|
if (!song.autoChords) {
|
|
166
374
|
song.autoChords = [];
|
|
167
375
|
}
|
|
168
|
-
|
|
376
|
+
// Convert ticks to beats for storage
|
|
377
|
+
song.autoChords.push([state.position / TICKS_PER_BEAT, chord]);
|
|
378
|
+
}
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
case "string": {
|
|
382
|
+
const [, text] = command;
|
|
383
|
+
if (!song.strings) {
|
|
384
|
+
song.strings = [];
|
|
169
385
|
}
|
|
386
|
+
// Convert ticks to beats for storage
|
|
387
|
+
song.strings.push([state.position / TICKS_PER_BEAT, text]);
|
|
388
|
+
break;
|
|
389
|
+
}
|
|
390
|
+
case "frontmatter": {
|
|
391
|
+
// Handled separately before compileCommands
|
|
170
392
|
break;
|
|
171
393
|
}
|
|
172
394
|
default: {
|
|
@@ -176,6 +398,7 @@ class SongParser {
|
|
|
176
398
|
}
|
|
177
399
|
}
|
|
178
400
|
}
|
|
401
|
+
/** The PEG.js parser module for direct access to grammar */
|
|
179
402
|
SongParser.peg = peg;
|
|
180
403
|
export default SongParser;
|
|
181
404
|
//# sourceMappingURL=parser.js.map
|
package/dist/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAA;AAEhE;;;;;GAKG;AACH,MAAM,cAAc,GAAG,EAAE,CAAA;AAEzB;;;;;;;;;GASG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AACxD,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,iBAAiB,CAAC,UAAkB,EAAE,cAAsB;IACnE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,CAAA;IACxB,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,mDAAmD;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;IAE9D,yFAAyF;IACzF,IAAI,UAAU,GAAG,SAAS,CAAA;IAC1B,IAAI,SAAS,GAAG,SAAS,CAAC,GAAG,UAAU,GAAG,SAAS,EAAE,CAAC,CAAA;IACtD,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,cAAc,CAAC,CAAA;IAEvD,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,UAAU,GAAG,WAAW,EAAE,CAAC,CAAA;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,cAAc,CAAC,CAAA;IACvD,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;QAC7B,UAAU,GAAG,WAAW,CAAA;QACxB,SAAS,GAAG,UAAU,CAAA;QACtB,YAAY,GAAG,SAAS,CAAA;IAC1B,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,UAAU,GAAG,WAAW,EAAE,CAAC,CAAA;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,cAAc,CAAC,CAAA;IACvD,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;QAC7B,UAAU,GAAG,WAAW,CAAA;IAC1B,CAAC;IAED,OAAO,GAAG,UAAU,GAAG,UAAU,EAAE,CAAA;AACrC,CAAC;AA2HD;;;;;;;;;;;;GAYG;AACH,MAAqB,UAAU;IAI7B;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CAAC,QAAgB,EAAE,IAAwB;QACpD,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAA;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClC,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,SAAS,CAAC,OAAe;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAOrD,CAAA;YAEF,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,CAAA;YAEjC,MAAM,MAAM,GAAe;gBACzB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAG,mDAAmD;gBACvE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS;gBACtC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;gBAC/E,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAA;YACD,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YACtC,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAgB;QACpB,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAA;IACxD,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,GAAQ,EAAE,IAAwB;QACxC,+BAA+B;QAC/B,MAAM,WAAW,GAA2B,EAAE,CAAA;QAC9C,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;gBAC9B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAkB;YAC3B,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,cAAc,EAAS,oBAAoB;YACzD,eAAe,EAAE,cAAc,GAAG,CAAC,EAAE,8BAA8B;YACnE,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC;YACjC,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,mBAAmB,EAAE,KAAK;YAC1B,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,WAAW,EAAG,0CAA0C;SAC7F,CAAA;QAED,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE,CAAA;QACjC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAEtC,IAAI,CAAC,QAAQ,GAAG;YACd,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK;YACtC,eAAe,EAAE,KAAK,CAAC,eAAe,GAAG,cAAc;YACvD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;SAC5D,CAAA;QAED,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9F,IAAI,CAAC,IAAI,CAAC,cAAc;gBAAE,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;YAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAA;YACpD,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAA;YACjD,CAAC;iBAAM,IAAI,IAAI,EAAE,UAAU,KAAK,KAAK,EAAE,CAAC;gBACtC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAA;YACtD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACK,eAAe,CAAC,QAAa,EAAE,KAAoB,EAAE,IAAoB;QAC/E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACpB,QAAQ,CAAC,EAAE,CAAC;gBACV,KAAK,sBAAsB,CAAC,CAAC,CAAC;oBAC5B,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAA;oBACpC,MAAK;gBACP,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,OAAO,CAAA;oBACjC,MAAM,UAAU,GAAkB;wBAChC,GAAG,KAAK;wBACR,aAAa,EAAE,KAAK,CAAC,QAAQ;qBAC9B,CAAA;oBAED,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;oBACxC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;oBAErD,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;oBACpC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAA;oBAE9C,4EAA4E;oBAC5E,IAAI,UAAU,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC;wBACzD,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,eAAe,CAAA;wBACnE,KAAK,CAAC,gBAAgB,GAAG,YAAY,GAAG,UAAU,CAAC,eAAe,CAAA;wBAClE,KAAK,CAAC,eAAe,GAAG,UAAU,CAAC,eAAe,CAAA;oBACpD,CAAC;oBAED,MAAK;gBACP,CAAC;gBACD,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAA;oBAC7B,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;oBACrC,MAAK;gBACP,CAAC;gBACD,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAA;oBAC7B,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;oBACvC,MAAK;gBACP,CAAC;gBACD,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAA;oBAC7B,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;oBACzC,MAAK;gBACP,CAAC;gBACD,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;oBAE3B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;wBAC1B,2DAA2D;wBAC3D,MAAM,UAAU,GAAG,OAAO,CAAA;wBAC1B,KAAK,CAAC,WAAW,GAAG,UAAU,CAAA;wBAC9B,KAAK,CAAC,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC,eAAe,CAAA;wBACnD,KAAK,CAAC,gBAAgB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAA;wBACjE,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAA;oBAClC,CAAC;yBAAM,CAAC;wBACN,wDAAwD;wBACxD,KAAK,CAAC,WAAW,IAAI,CAAC,CAAA;wBACtB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAA;wBACvC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAA;wBAC/D,KAAK,CAAC,mBAAmB,GAAG,KAAK,CAAA;oBACnC,CAAC;oBACD,MAAK;gBACP,CAAC;gBACD,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAA;oBACzB,KAAK,CAAC,YAAY,GAAG,CAAC,KAAK,CAAA;oBAC3B,MAAK;gBACP,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAA;oBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;oBAC/C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;wBACjB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAA;oBAClB,CAAC;oBAED,qCAAqC;oBACrC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,EAAE,IAAI,CAAC,CAAC,CAAA;oBACzD,MAAK;gBACP,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAA;oBAClC,IAAI,QAAQ,GAAG,IAAI,CAAA;oBACnB,IAAI,aAAa,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAA;oBACxD,IAAI,aAAa,GAAG,KAAK,CAAA;oBAEzB,IAAI,QAAQ,EAAE,CAAC;wBACb,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;4BACtB,aAAa,IAAI,QAAQ,CAAC,QAAQ,CAAA;wBACpC,CAAC;wBACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;4BAClB,aAAa,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;wBAClD,CAAC;wBAED,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;4BACnB,aAAa,GAAG,IAAI,CAAA;4BACpB,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;wBACnE,CAAC;6BAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;4BACzB,aAAa,GAAG,IAAI,CAAA;4BACpB,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;wBACnE,CAAC;6BAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;4BAC5B,aAAa,GAAG,IAAI,CAAA;wBACtB,CAAC;oBACH,CAAC;oBAED,sDAAsD;oBACtD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;oBACtC,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAA;wBAChE,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;oBACxD,CAAC;oBAED,IAAI,CAAC,aAAa,EAAE,CAAC;wBACnB,2BAA2B;wBAC3B,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;oBACvD,CAAC;oBAED,yCAAyC;oBACzC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;oBAEzC,2BAA2B;oBAC3B,IAAI,UAAkB,CAAA;oBACtB,IAAI,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;wBAC5B,oDAAoD;wBACpD,UAAU,GAAG,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAA;oBAC9C,CAAC;yBAAM,CAAC;wBACN,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAA;wBAC3B,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAA;oBACjC,CAAC;oBAED,oDAAoD;oBACpD,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;oBAEzC,sCAAsC;oBACtC,IAAI,CAAC,aAAa,CAChB,IAAI,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,cAAc,EAAE,aAAa,GAAG,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,EACvG,KAAK,CAAC,YAAY,CACnB,CAAA;oBACD,MAAK;gBACP,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,OAAO,CAAA;oBAE9B,IAAI,aAAa,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAA;oBAExD,IAAI,UAAU,EAAE,CAAC;wBACf,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;4BACrB,MAAK,CAAC,aAAa;wBACrB,CAAC;wBAED,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;4BACxB,aAAa,IAAI,UAAU,CAAC,QAAQ,CAAA;wBACtC,CAAC;wBACD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;4BACpB,aAAa,IAAI,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;wBACpD,CAAC;oBACH,CAAC;oBAED,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;oBAC3C,MAAK;gBACP,CAAC;gBACD,KAAK,cAAc,CAAC,CAAC,CAAC;oBACpB,MAAM,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,GAAG,OAAO,CAAA;oBACzC,KAAK,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAA;oBAE5C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;wBACxB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;oBACzB,CAAC;oBACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAA;oBACjF,MAAK;gBACP,CAAC;gBACD,KAAK,eAAe,CAAC,CAAC,CAAC;oBACrB,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,OAAO,CAAA;oBACtC,6EAA6E;oBAC7E,6EAA6E;oBAC7E,KAAK,CAAC,YAAY,GAAG,cAAc,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;oBACrD,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,YAAY,GAAG,OAAO,CAAA;oBAEpD,iDAAiD;oBACjD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;wBACzB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;oBAC1B,CAAC;oBACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,EAAE,OAAO,CAAC,CAAC,CAAA;oBACpE,MAAK;gBACP,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,OAAO,CAAA;oBAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;oBAE/C,IAAI,KAAK,EAAE,CAAC;wBACV,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;4BACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;wBACtB,CAAC;wBACD,qCAAqC;wBACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,EAAE,KAAK,CAAC,CAAC,CAAA;oBAChE,CAAC;oBAED,MAAK;gBACP,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAA;oBACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;wBAClB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;oBACnB,CAAC;oBACD,qCAAqC;oBACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,EAAE,IAAI,CAAC,CAAC,CAAA;oBAC1D,MAAK;gBACP,CAAC;gBACD,KAAK,aAAa,CAAC,CAAC,CAAC;oBACnB,4CAA4C;oBAC5C,MAAK;gBACP,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACR,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,OAAO,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;;AApWD,4DAA4D;AACrD,cAAG,GAAG,GAAG,CAAA;eAFG,UAAU"}
|