{"version":3,"file":"static/js/main.9a44f40b.js","mappings":"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VD,EAAOC,QARG,iLCSVD,EAAOC,QATG,sMCoJVD,EAAOC,QApJqB,CAC3B,uBACA,wBACA,uBACA,kBACA,mBACA,mBACA,cACA,WAEA,UACA,eACA,YACA,aACA,UACA,YACA,gBACA,WAEA,gBACA,mBACA,aACA,eACA,aACA,YACA,YACA,kBAEA,wBACA,wBACA,uBACA,wBACA,wBACA,oBACA,oBACA,mBAEA,gBACA,uBACA,qBACA,gBACA,cACA,cACA,eACA,eAEA,SACA,QACA,QACA,aACA,kBACA,oBACA,kBACA,UAEA,oBACA,oBACA,kBACA,kBACA,aACA,aACA,cACA,gBAEA,UACA,WACA,OACA,gBACA,cACA,gBACA,gBACA,gBAEA,cACA,WACA,YACA,eACA,OACA,eACA,UACA,WAEA,UACA,QACA,WACA,YACA,eACA,aACA,UACA,UAEA,gBACA,kBACA,kBACA,eACA,iBACA,eACA,gBACA,mBAEA,gBACA,aACA,kBACA,cACA,cACA,iBACA,aACA,cAEA,YACA,kBACA,eACA,kBACA,kBACA,eACA,cACA,aAEA,QACA,QACA,WACA,OACA,UACA,UACA,SACA,SAEA,cACA,QACA,cACA,YACA,aACA,cACA,aACA,iBAEA,oBACA,eACA,WACA,aACA,iBACA,aACA,WACA,UAEA,oCC7ID,IAAI6tD,EAAc1vD,EAAQ,MAuC1B4B,EAAOC,QArCO,SAAUy0D,EAAKlwD,EAAYf,EAAM8qD,GACzCT,EAAYtpD,KAAaspD,EAAYtpD,GAAc,CAAC,GACzD,IAAImwD,EAAkB7G,EAAYtpD,GAgClC,OA9BKmwD,EAAgBlxD,KACpBkxD,EAAgBlxD,GAAQ,IAAIuF,SAAQ,SAAUC,EAASylD,GACtD,IAAIkG,EAAM,IAAIC,eACVC,EAAUJ,EAAMlwD,EAAa,QAAUf,EAAO,OAClDmxD,EAAIG,KAAK,MAAOD,GAAS,GACzBF,EAAII,aAAe,cACnBJ,EAAIK,OAAS,WACZ,GAAmB,MAAfL,EAAIrK,OAAR,CAIA,IAGI2K,EAAe3G,EAAa4G,gBAAgBP,EAAIlK,UAHlC,SAASiH,GAC1B1oD,EAAQ,CAAC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K,IAAM,EAAM,KAAM,EAAM,MAAO,KAAO,CAAC,IAAK,EAAM,EAAM,GAAO,IAAM,KAAO,KAAO,CAAC,IAAK,KAAO,KAAM,MAAO,KAAM,MAAO,MAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,KAAO,KAAO,CAAC,IAAK,IAAM,GAAO,CAAC,IAAK,GAAO,MAAO,CAAC,IAAK,GAAO,KAAM,GAAO,IAAM,KAAO,MAAO,CAAC,KAAM,CAAC,KAAM,IAAM,MAAO,CAAC,IAAK,GAAO,KAAM,GAAO,MAAO,KAAO,MAAO,CAAC,KAAM,IAAM,GAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,KAAM,MAAO,KAAM,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,MAAO,IAAM,MAAO,CAAC,IAAK,EAAM,KAAO,CAAC,IAAK,IAAM,GAAO,CAAC,IAAK,IAAM,GAAO,CAAC,IAAK,GAAO,MAAO,CAAC,KAAM,CAAC,IAAK,MAAO,MAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,KAAM,IAAM,GAAO,CAAC,IAAK,EAAM,MAAO,CAAC,IAAK,EAAM,MAAO,CAAC,IAAK,IAAM,GAAO,CAAC,IAAK,IAAM,GAAO,CAAC,IAAK,GAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,MAAO,KAAO,MAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,MAAO,KAAO,CAAC,KAAM,CAAC,KAAM,KAAM,OAAQ,CAAC,IAAK,GAAO,MAAO,CAAC,KAAM,IAAM,GAAO,CAAC,KAAM,IAAM,GAAO,CAAC,IAAK,EAAM,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,KAAM,IAAM,MAAO,CAAC,IAAK,IAAM,KAAM,IAAM,KAAM,KAAM,MAAO,CAAC,IAAK,IAAM,GAAO,CAAC,IAAK,GAAO,MAAO,CAAC,KAAM,CAAC,IAAK,MAAO,MAAO,CAAC,IAAK,GAAO,KAAO,CAAC,KAAM,IAAM,GAAO,CAAC,KAAM,IAAM,GAAO,CAAC,IAAK,EAAM,MAAO,CAAC,IAAK,EAAM,MAAO,CAAC,IAAK,IAAM,GAAO,CAAC,IAAK,MAAO,IAAM,MAAO,KAAM,MAAO,MAAO,CAAC,IAA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AAO,MAAO,KAAO,CAAC,KAAM,MAAO,KAAO,MAAO,KAAO,MAAO,MAAO,CAAC,KAAM,KAAO,KAAO,MAAO,MAAO,MAAO,MAAO,CAAC,KAAM,KAAO,IAAM,KAAO,KAAM,KAAO,MAAO,CAAC,IAAK,KAAO,IAAM,MAAO,KAAM,GAAO,MAAO,CAAC,IAAK,IAAM,IAAM,KAAM,KAAM,KAAM,MAAO,CAAC,IAAK,IAAM,MAAO,IAAM,KAAO,KAAM,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,MAAO,KAAO,CAAC,KAAM,KAAO,KAAO,CAAC,IAAK,IAAM,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,IAAM,KAAM,MAAO,CAAC,IAAK,KAAM,IAAM,KAAM,KAAM,KAAM,KAAO,CAAC,IAAK,MAAO,IAAM,MAAO,KAAM,MAAO,MAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,IAAO,MAAO,CAAC,IAAK,KAAO,IAAM,KAAO,KAAM,GAAO,GAAO,CAAC,KAAM,IAAM,GAAO,IAAM,GAAO,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,KAAM,KAAO,CAAC,KAAM,KAAM,GAAO,MAAO,KAAO,MAAO,IAAO,CAAC,KAAM,MAAO,KAAO,MAAO,MAAO,KAAO,MAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,MAAO,CAAC,IAAK,GAAO,IAAM,GAAO,KAAM,KAAO,MAAO,CAAC,IAAK,KAAO,KAAM,MAAO,KAAM,KAAO,MAAO,CAAC,IAAK,MAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,KAAO,MAAO,CAAC,IAAK,GAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,KAAM,KAAO,MAAO,MAAO,MAAO,MAAO,MAAO,CAAC,KAAM,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,CAAC,IAAK,KAAO,KAAM,MAAO,KAAM,MAAO,MAAO,CAAC,IAAK,KAAO,IAAM,KAAO,KAAM,MAAO,MAAO,CAAC,KAAM,CAAC,IAAK,KAAM,MAAO,CAAC,KAAM,KAAO,IAAO,IAAO,KAAO,IAAO,KAAO,CAAC,KAAM,IAAM,GAAO,IAAM,KAAO,GAAM,KAAO,CAAC,KAAM,IAAM,M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KAAM,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,GAAO,IAAM,GAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,MAAO,KAAO,MAAO,MAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,IAAK,GAAO,IAAM,KAAO,IAAM,KAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,GAAM,KAAO,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,IAAM,IAAM,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,IAAM,KAAM,KAAO,CAAC,IAAK,MAAO,IAAM,MAAO,KAAM,MAAO,MAAO,CAAC,IAAK,KAAO,MAAO,KAAO,MAAO,MAAO,MAAO,CAAC,KAAM,IAAM,GAAO,KAAO,KAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,IAAO,KAAO,CAAC,IAAK,KAAO,IAAM,MAAO,IAAM,KAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,KAAM,KAAO,MAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,MAAO,KAAO,CAAC,KAAM,KAAO,KAAO,CAAC,KAAM,IAAM,KAAO,CAAC,KAAM,IAAM,MAAO,KAAM,MAAO,KAAM,MAAO,CAAC,KAAM,IAAM,MAAO,IAAM,MAAO,KAAM,KAAO,CAAC,KAAM,GAAM,KAAO,IAAM,IAAO,KAAM,MAAO,CAAC,KAAM,GAAM,KAAO,IAAM,KAAO,KAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,KAAM,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,MAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,KAAM,IAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,KAAO,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,IAAM,KAAO,CAAC,IAAK,IAAM,GAAM,KAAM,IAAM,KAAM,KAAO,CAAC,IAAK,KAAO,IAAM,KAAO,IAAM,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AO,KAAO,CAAC,IAAK,IAAM,IAAM,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,KAAM,KAAO,KAAM,MAAO,KAAM,MAAO,CAAC,KAAM,IAAM,KAAO,KAAM,KAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,IAAK,GAAO,IAAM,KAAO,IAAM,IAAO,MAAO,CAAC,IAAK,KAAO,KAAM,IAAO,KAAM,KAAO,MAAO,CAAC,IAAK,KAAO,KAAO,IAAO,KAAO,KAAO,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,MAAO,GAAM,GAAO,CAAC,KAAM,GAAM,MAAO,IAAM,GAAO,KAAM,MAAO,CAAC,KAAM,IAAM,KAAO,CAAC,KAAM,IAAM,GAAO,CAAC,KAAM,GAAM,GAAO,IAAM,GAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,IAAK,GAAO,IAAM,KAAO,KAAM,KAAO,MAAO,CAAC,IAAK,KAAO,KAAM,KAAO,KAAM,KAAO,MAAO,CAAC,IAAK,KAAO,KAAO,IAAO,KAAO,KAAO,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,MAAO,KAAM,MAAO,CAAC,KAAM,IAAM,MAAO,IAAM,MAAO,IAAM,MAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,IAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,GAAM,KAAO,CAAC,KAAM,GAAM,GAAO,IAAM,GAAO,KAAO,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,CAAC,IAAK,GAAO,IAAM,KAAO,KAAM,KAAO,MAAO,CAAC,IAAK,MAAO,KAAM,MAAO,KAAM,KAAO,MAAO,CAAC,KAAM,KAAO,KAAO,KAAO,IAAO,KAAO,KAAO,CAAC,KAAM,IAAM,KAAO,KAAM,MAAO,KAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,IAAO,IAAM,KAAO,CAAC,KAAM,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,CAAC,KAAM,KAAO,KAAO,KAAO,IAAM,KA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","sources":["../node_modules/abcjs/index.js","../node_modules/abcjs/src/api/abc_animation.js","../node_modules/abcjs/src/api/abc_tablatures.js","../node_modules/abcjs/src/api/abc_timing_callbacks.js","../node_modules/abcjs/src/api/abc_tunebook.js","../node_modules/abcjs/src/api/abc_tunebook_svg.js","../node_modules/abcjs/src/const/key-accidentals.js","../node_modules/abcjs/src/const/relative-major.js","../node_modules/abcjs/src/data/abc_tune.js","../node_modules/abcjs/src/data/deline-tune.js","../node_modules/abcjs/src/edit/abc_editarea.js","../node_modules/abcjs/src/edit/abc_editor.js","../node_modules/abcjs/src/midi/abc_midi_create.js","../node_modules/abcjs/src/parse/abc_common.js","../node_modules/abcjs/src/parse/abc_parse.js","../node_modules/abcjs/src/parse/abc_parse_book.js","../node_modules/abcjs/src/parse/abc_parse_directive.js","../node_modules/abcjs/src/parse/abc_parse_header.js","../node_modules/abcjs/src/parse/abc_parse_key_voice.js","../node_modules/abcjs/src/parse/abc_parse_music.js","../node_modules/abcjs/src/parse/abc_tokenizer.js","../node_modules/abcjs/src/parse/abc_transpose.js","../node_modules/abcjs/src/parse/all-notes.js","../node_modules/abcjs/src/parse/transpose-chord.js","../node_modules/abcjs/src/parse/tune-builder.js","../node_modules/abcjs/src/parse/wrap_lines.js","../node_modules/abcjs/src/str/output.js","../node_modules/abcjs/src/synth/abc_midi_flattener.js","../node_modules/abcjs/src/synth/abc_midi_renderer.js","../node_modules/abcjs/src/synth/abc_midi_sequencer.js","../node_modules/abcjs/src/synth/active-audio-context.js","../node_modules/abcjs/src/synth/cents-to-factor.js","../node_modules/abcjs/src/synth/create-note-map.js","../node_modules/abcjs/src/synth/create-synth-control.js","../node_modules/abcjs/src/synth/create-synth.js","../node_modules/abcjs/src/synth/download-buffer.js","../node_modules/abcjs/src/synth/get-midi-file.js","../node_modules/abcjs/src/synth/images/loading.svg.js","../node_modules/abcjs/src/synth/images/loop.svg.js","../node_modules/abcjs/src/synth/images/pause.svg.js","../node_modules/abcjs/src/synth/images/play.svg.js","../node_modules/abcjs/src/synth/images/reset.svg.js","../node_modules/abcjs/src/synth/instrument-index-to-name.js","../node_modules/abcjs/src/synth/load-note.js","../node_modules/abcjs/src/synth/note-to-midi.js","../node_modules/abcjs/src/synth/pitch-to-note-name.js","../node_modules/abcjs/src/synth/pitches-to-perc.js","../node_modules/abcjs/src/synth/place-note.js","../node_modules/abcjs/src/synth/play-event.js","../node_modules/abcjs/src/synth/register-audio-context.js","../node_modules/abcjs/src/synth/sounds-cache.js","../node_modules/abcjs/src/synth/supports-audio.js","../node_modules/abcjs/src/synth/synth-controller.js","../node_modules/abcjs/src/synth/synth-sequence.js","../node_modules/abcjs/src/tablatures/instruments/guitar/guitar-patterns.js","../node_modules/abcjs/src/tablatures/instruments/guitar/tab-guitar.js","../node_modules/abcjs/src/tablatures/instruments/string-patterns.js","../node_modules/abcjs/src/tablatures/instruments/string-tablature.js","../node_modules/abcjs/src/tablatures/instruments/tab-note.js","../node_modules/abcjs/src/tablatures/instruments/tab-notes.js","../node_modules/abcjs/src/tablatures/instruments/violin/tab-violin.js","../node_modules/abcjs/src/tablatures/instruments/violin/violin-patterns.js","../node_modules/abcjs/src/tablatures/tab-absolute-elements.js","../node_modules/abcjs/src/tablatures/tab-common.js","../node_modules/abcjs/src/tablatures/tab-renderer.js","../node_modules/abcjs/src/write/creation/abstract-engraver.js","../node_modules/abcjs/src/write/creation/add-chord.js","../node_modules/abcjs/src/write/creation/add-text-if.js","../node_modules/abcjs/src/write/creation/calc-height.js","../node_modules/abcjs/src/write/creation/create-clef.js","../node_modules/abcjs/src/write/creation/create-key-signature.js","../node_modules/abcjs/src/write/creation/create-note-head.js","../node_modules/abcjs/src/write/creation/create-time-signature.js","../node_modules/abcjs/src/write/creation/decoration.js","../node_modules/abcjs/src/write/creation/elements/absolute-element.js","../node_modules/abcjs/src/write/creation/elements/beam-element.js","../node_modules/abcjs/src/write/creation/elements/bottom-text.js","../node_modules/abcjs/src/write/creation/elements/brace-element.js","../node_modules/abcjs/src/write/creation/elements/crescendo-element.js","../node_modules/abcjs/src/write/creation/elements/dynamic-decoration.js","../node_modules/abcjs/src/write/creation/elements/ending-element.js","../node_modules/abcjs/src/write/creation/elements/free-text.js","../node_modules/abcjs/src/write/creation/elements/glissando-element.js","../node_modules/abcjs/src/write/creation/elements/relative-element.js","../node_modules/abcjs/src/write/creation/elements/separator.js","../node_modules/abcjs/src/write/creation/elements/staff-group-element.js","../node_modules/abcjs/src/write/creation/elements/subtitle.js","../node_modules/abcjs/src/write/creation/elements/tempo-element.js","../node_modules/abcjs/src/write/creation/elements/tie-element.js","../node_modules/abcjs/src/write/creation/elements/top-text.js","../node_modules/abcjs/src/write/creation/elements/triplet-element.js","../node_modules/abcjs/src/write/creation/elements/voice-element.js","../node_modules/abcjs/src/write/creation/glyphs.js","../node_modules/abcjs/src/write/creation/translate-chord.js","../node_modules/abcjs/src/write/draw/absolute.js","../node_modules/abcjs/src/write/draw/beam.js","../node_modules/abcjs/src/write/draw/brace.js","../node_modules/abcjs/src/write/draw/crescendo.js","../node_modules/abcjs/src/write/draw/debug-box.js","../node_modules/abcjs/src/write/draw/draw.js","../node_modules/abcjs/src/write/draw/dynamics.js","../node_modules/abcjs/src/write/draw/ending.js","../node_modules/abcjs/src/write/draw/glissando.js","../node_modules/abcjs/src/write/draw/group-elements.js","../node_modules/abcjs/src/write/draw/non-music.js","../node_modules/abcjs/src/write/draw/print-line.js","../node_modules/abcjs/src/write/draw/print-path.js","../node_modules/abcjs/src/write/draw/print-stem.js","../node_modules/abcjs/src/write/draw/print-symbol.js","../node_modules/abcjs/src/write/draw/relative.js","../node_modules/abcjs/src/write/draw/round-number.js","../node_modules/abcjs/src/write/draw/selectables.js","../node_modules/abcjs/src/write/draw/separator.js","../node_modules/abcjs/src/write/draw/set-paper-size.js","../node_modules/abcjs/src/write/draw/sprintf.js","../node_modules/abcjs/src/write/draw/staff-group.js","../node_modules/abcjs/src/write/draw/staff-line.js","../node_modules/abcjs/src/write/draw/staff.js","../node_modules/abcjs/src/write/draw/tempo.js","../node_modules/abcjs/src/write/draw/text.js","../node_modules/abcjs/src/write/draw/tie.js","../node_modules/abcjs/src/write/draw/triplet.js","../node_modules/abcjs/src/write/draw/voice.js","../node_modules/abcjs/src/write/engraver-controller.js","../node_modules/abcjs/src/write/helpers/classes.js","../node_modules/abcjs/src/write/helpers/get-font-and-attr.js","../node_modules/abcjs/src/write/helpers/get-text-size.js","../node_modules/abcjs/src/write/helpers/set-class.js","../node_modules/abcjs/src/write/helpers/spacing.js","../node_modules/abcjs/src/write/interactive/highlight.js","../node_modules/abcjs/src/write/interactive/selection.js","../node_modules/abcjs/src/write/interactive/unhighlight.js","../node_modules/abcjs/src/write/layout/beam.js","../node_modules/abcjs/src/write/layout/get-bar-y-at.js","../node_modules/abcjs/src/write/layout/get-left-edge-of-staff.js","../node_modules/abcjs/src/write/layout/layout.js","../node_modules/abcjs/src/write/layout/set-upper-and-lower-elements.js","../node_modules/abcjs/src/write/layout/staff-group.js","../node_modules/abcjs/src/write/layout/triplet.js","../node_modules/abcjs/src/write/layout/voice-elements.js","../node_modules/abcjs/src/write/layout/voice.js","../node_modules/abcjs/src/write/renderer.js","../node_modules/abcjs/src/write/svg.js","../node_modules/abcjs/version.js","../node_modules/aos/dist/aos.js","../node_modules/classnames/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-fast-compare/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/warning/warning.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../node_modules/@remix-run/router/history.ts","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/@babel/runtime/helpers/esm/toArray.js","../node_modules/@remix-run/router/utils.ts","../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","components/AboutContent.jsx","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/reactstrap/esm/utils.js","../node_modules/reactstrap/esm/Navbar.js","../node_modules/reactstrap/esm/NavbarBrand.js","../node_modules/reactstrap/esm/NavbarToggler.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/reactstrap/esm/Collapse.js","../node_modules/reactstrap/esm/Nav.js","../node_modules/reactstrap/esm/NavItem.js","../node_modules/reactstrap/esm/NavLink.js","components/Header.jsx","components/Footer.jsx","../node_modules/reactstrap/esm/Container.js","components/Page.jsx","pages/AboutPage.jsx","components/BankruptcyAnalysisContent.jsx","pages/BankruptcyAnalysisPage.jsx","components/EvoSimContent.jsx","pages/EvolutionarySimulationPage.jsx","../node_modules/reactstrap/esm/Row.js","../node_modules/reactstrap/esm/Col.js","pages/HomePage.jsx","components/JAMIContent.jsx","pages/JAMIPage.jsx","../node_modules/react-popper/lib/esm/Manager.js","../node_modules/reactstrap/esm/DropdownContext.js","../node_modules/reactstrap/esm/InputGroupContext.js","../node_modules/reactstrap/esm/Dropdown.js","../node_modules/react-popper/lib/esm/utils.js","../node_modules/react-popper/lib/esm/Reference.js","../node_modules/reactstrap/esm/CloseButton.js","../node_modules/reactstrap/esm/Button.js","../node_modules/reactstrap/esm/DropdownToggle.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../node_modules/@popperjs/core/lib/utils/math.js","../node_modules/@popperjs/core/lib/utils/userAgent.js","../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/createPopper.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/popper.js","../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/react-popper/lib/esm/usePopper.js","../node_modules/react-popper/lib/esm/Popper.js","../node_modules/reactstrap/esm/DropdownMenu.js","../node_modules/reactstrap/esm/DropdownItem.js","../node_modules/reactstrap/esm/Input.js","assets/ABCNotations.js","assets/GeneratedTunes.js","components/Synthesizer.jsx","components/JuxComposeContent.jsx","pages/JuxComposePage.jsx","components/FileUploader.jsx","components/MusicRendererContent.jsx","pages/MusicRendererPage.jsx","../node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/reactstrap/esm/Portal.js","../node_modules/reactstrap/esm/Fade.js","../node_modules/reactstrap/esm/Modal.js","../node_modules/reactstrap/esm/ModalHeader.js","../node_modules/reactstrap/esm/ModalBody.js","../node_modules/reactstrap/esm/Form.js","../node_modules/reactstrap/esm/FormGroup.js","../node_modules/reactstrap/esm/Label.js","../node_modules/reactstrap/esm/FormText.js","../node_modules/reactstrap/esm/Alert.js","../node_modules/reactstrap/esm/ModalFooter.js","../node_modules/reactstrap/esm/TabContext.js","../node_modules/reactstrap/esm/TabContent.js","../node_modules/reactstrap/esm/TabPane.js","../node_modules/reactstrap/esm/FormFeedback.js","../node_modules/reactstrap/esm/Spinner.js","../node_modules/reactstrap/esm/Progress.js","../node_modules/reactstrap/esm/Card.js","../node_modules/reactstrap/esm/CardHeader.js","../node_modules/reactstrap/esm/CardBody.js","../node_modules/reactstrap/esm/CardFooter.js","assets/Constants.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","services/OrchestrAIAPI.jsx","../node_modules/reactstrap/esm/Table.js","components/Rubric.jsx","components/FeedbackForm.jsx","components/OrchestrAIContent.jsx","pages/OrchestrAIPage.jsx","../node_modules/reactstrap/esm/PopperContent.js","../node_modules/reactstrap/esm/TooltipPopoverWrapper.js","../node_modules/reactstrap/esm/Popover.js","../node_modules/reactstrap/esm/PopoverHeader.js","../node_modules/reactstrap/esm/PopoverBody.js","../node_modules/reactstrap/esm/Badge.js","components/ProjectsContent.jsx","pages/ProjectsPage.jsx","components/ResumeContent.jsx","pages/ResumePage.jsx","index.js"],"sourcesContent":["/**!\nCopyright (c) 2009-2023 Paul Rosen and Gregory Dyke\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n **This text is from: http://opensource.org/licenses/MIT**\n!**/\nvar version = require('./version');\nvar animation = require('./src/api/abc_animation');\nvar tuneBook = require('./src/api/abc_tunebook');\nvar sequence = require('./src/synth/abc_midi_sequencer');\nvar strTranspose = require('./src/str/output');\n\nvar abcjs = {};\n\nabcjs.signature = \"abcjs-basic v\" + version;\n\nObject.keys(animation).forEach(function (key) {\n\tabcjs[key] = animation[key];\n});\n\nObject.keys(tuneBook).forEach(function (key) {\n\tabcjs[key] = tuneBook[key];\n});\n\nabcjs.renderAbc = require('./src/api/abc_tunebook_svg');\nabcjs.TimingCallbacks = require('./src/api/abc_timing_callbacks');\n\nvar glyphs = require('./src/write/creation/glyphs');\nabcjs.setGlyph = glyphs.setSymbol;\nabcjs.strTranspose = strTranspose;\n\nvar CreateSynth = require('./src/synth/create-synth');\nvar instrumentIndexToName = require('./src/synth/instrument-index-to-name');\nvar pitchToNoteName = require('./src/synth/pitch-to-note-name');\nvar SynthSequence = require('./src/synth/synth-sequence');\nvar CreateSynthControl = require('./src/synth/create-synth-control');\nvar registerAudioContext = require('./src/synth/register-audio-context');\nvar activeAudioContext = require('./src/synth/active-audio-context');\nvar supportsAudio = require('./src/synth/supports-audio');\nvar playEvent = require('./src/synth/play-event');\nvar SynthController = require('./src/synth/synth-controller');\nvar getMidiFile = require('./src/synth/get-midi-file');\n\nabcjs.synth = {\n\tCreateSynth: CreateSynth,\n\tinstrumentIndexToName: instrumentIndexToName,\n\tpitchToNoteName: pitchToNoteName,\n\tSynthController: SynthController,\n\tSynthSequence: SynthSequence,\n\tCreateSynthControl: CreateSynthControl,\n\tregisterAudioContext: registerAudioContext,\n\tactiveAudioContext: activeAudioContext,\n\tsupportsAudio: supportsAudio,\n\tplayEvent: playEvent,\n\tgetMidiFile: getMidiFile,\n\tsequence: sequence,\n};\n\nabcjs['Editor'] = require('./src/edit/abc_editor');\nabcjs['EditArea'] = require('./src/edit/abc_editarea');\n\nmodule.exports = abcjs;\n","// abc_animation.js: handles animating the music in real time.\n\nvar TimingCallbacks = require('./abc_timing_callbacks');\n\nvar animation = {};\n\n(function() {\n\t\"use strict\";\n\n\tvar timer;\n\tvar cursor;\n\tanimation.startAnimation = function(paper, tune, options) {\n\t\t//options.bpm\n\t\t//options.showCursor\n\t\t//options.hideCurrentMeasure\n\t\t//options.hideFinishedMeasures\n\t\tif (timer) {\n\t\t\ttimer.stop();\n\t\t\ttimer = undefined;\n\t\t}\n\n\t\tif (options.showCursor) {\n\t\t\tcursor = paper.querySelector('.abcjs-cursor');\n\t\t\tif (!cursor) {\n\t\t\t\tcursor = document.createElement('DIV');\n\t\t\t\tcursor.className = 'abcjs-cursor cursor';\n\t\t\t\tcursor.style.position = 'absolute';\n\n\t\t\t\tpaper.appendChild(cursor);\n\t\t\t\tpaper.style.position = 'relative';\n\t\t\t}\n\t\t}\n\n\t\tfunction hideMeasures(elements) {\n\t\t\tfor (var i = 0; i < elements.length; i++) {\n\t\t\t\tvar element = elements[i];\n\t\t\t\tif (!element.classList.contains('abcjs-bar'))\n\t\t\t\t\telement.style.display = \"none\";\n\t\t\t}\n\t\t}\n\n\t\tvar lastMeasure;\n\t\tfunction disappearMeasuresAfter(selector) {\n\t\t\tif (lastMeasure) {\n\t\t\t\tvar elements = paper.querySelectorAll(lastMeasure);\n\t\t\t\thideMeasures(elements);\n\t\t\t}\n\t\t\tlastMeasure = selector;\n\t\t}\n\n\t\tfunction disappearMeasuresBefore(selector) {\n\t\t\tvar elements = paper.querySelectorAll(selector);\n\t\t\thideMeasures(elements);\n\t\t}\n\n\t\tfunction measureCallback(selector) {\n\t\t\tif (options.hideCurrentMeasure) {\n\t\t\t\tdisappearMeasuresBefore(selector);\n\t\t\t} else if (options.hideFinishedMeasures) {\n\t\t\t\tdisappearMeasuresAfter(selector);\n\t\t\t}\n\t\t}\n\n\t\tfunction getLineAndMeasure(element) {\n\t\t\treturn '.abcjs-l' + element.line + '.abcjs-m' + element.measureNumber;\n\t\t}\n\n\t\tfunction setCursor(range) {\n\t\t\tif (range) {\n\t\t\t\tif (range.measureStart) {\n\t\t\t\t\tvar selector = getLineAndMeasure(range);\n\t\t\t\t\tif (selector)\n\t\t\t\t\t\tmeasureCallback(selector);\n\t\t\t\t}\n\t\t\t\tif (cursor) {\n\t\t\t\t\tcursor.style.left = range.left + \"px\";\n\t\t\t\t\tcursor.style.top = range.top + \"px\";\n\t\t\t\t\tcursor.style.width = range.width + \"px\";\n\t\t\t\t\tcursor.style.height = range.height + \"px\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttimer.stop();\n\t\t\t\ttimer = undefined;\n\t\t\t}\n\t\t}\n\n\t\ttimer = new TimingCallbacks(tune, {\n\t\t\tqpm: options.bpm,\n\t\t\teventCallback: setCursor\n\t\t});\n\t\ttimer.start();\n\t};\n\n\tanimation.pauseAnimation = function(pause) {\n\t\tif (timer) {\n\t\t\tif (pause)\n\t\t\t\ttimer.pause();\n\t\t\telse\n\t\t\t\ttimer.start();\n\t\t}\n\t};\n\n\tanimation.stopAnimation = function() {\n\t\tif (timer) {\n\t\t\ttimer.stop();\n\t\t\ttimer = undefined;\n\t\t}\n\t};\n\n})();\n\nmodule.exports = animation;\n","/*\n * Tablature Plugins\n * tablature are defined dynamically and registered inside abcjs\n * by calling abcTablatures.register(plugin) \n * where plugin represents a plugin instance \n * \n */\nvar ViolinTablature = require('../tablatures/instruments/violin/tab-violin');\nvar GuitarTablature = require('../tablatures/instruments/guitar/tab-guitar');\n\n/* extend the table below when adding a new instrument plugin */\n\n// Existing tab classes \nvar pluginTab = {\n 'violin': 'ViolinTab',\n 'fiddle': 'ViolinTab',\n 'mandolin': 'ViolinTab',\n 'guitar': 'GuitarTab'\n};\n\nvar abcTablatures = {\n\n inited: false,\n plugins: {},\n\n \n /**\n * to be called once per plugin for registration \n * @param {*} plugin \n */\n register: function (plugin) {\n var name = plugin.name;\n var tablature = plugin.tablature;\n this.plugins[name] = tablature;\n },\n\n setError: function (tune, msg) {\n if (tune.warnings) {\n tune.warning.push(msg);\n } else {\n tune.warnings = [msg];\n }\n },\n\n /**\n * handle params for current processed score\n * @param {*} tune current tune \n * @param {*} tuneNumber number in tune list\n * @param {*} params params to be processed for tablature\n * @return prepared tablatures plugin instances for current tune\n */\n preparePlugins: function (tune, tuneNumber, params) {\n var returned = null;\n var nbPlugins = 0;\n if (params.tablature) {\n // validate requested plugins \n var tabs = params.tablature;\n returned = [];\n for (var ii = 0; ii < tabs.length; ii++) {\n var args = tabs[ii];\n var instrument = args['instrument'];\n if (instrument == null) {\n this.setError(tune, \"tablature 'instrument' is missing\");\n return returned;\n }\n var tabName = pluginTab[instrument];\n var plugin = null;\n if (tabName) {\n plugin = this.plugins[tabName];\n }\n if (plugin) {\n if (params.visualTranspose != 0) {\n // populate transposition request to tabs\n args.visualTranspose = params.visualTranspose;\n }\n args.abcSrc = params.tablature.abcSrc;\n var pluginInstance = {\n classz: plugin,\n tuneNumber: tuneNumber,\n params: args,\n instance: null,\n };\n // proceed with tab plugin init \n // plugin.init(tune, tuneNumber, args, ii);\n returned.push(pluginInstance);\n nbPlugins++;\n } else {\n // unknown tab plugin \n //this.emit_error('Undefined tablature plugin: ' + tabName)\n this.setError(tune, 'Undefined tablature plugin: ' + instrument);\n return returned;\n }\n }\n }\n return returned;\n },\n\n /**\n * Call requested plugin\n * @param {*} renderer \n * @param {*} abcTune \n */\n layoutTablatures: function (renderer, abcTune) {\n var tabs = abcTune.tablatures;\n // chack tabs request for each staffs\n for (var ii = 0; ii < abcTune.lines.length; ii++) {\n var line = abcTune.lines[ii];\n var curStaff = line.staff;\n if (curStaff) {\n for (var jj = 0; jj < curStaff.length; jj++) {\n if (tabs[jj]) {\n // tablature requested for staff\n var tabPlugin = tabs[jj];\n if (tabPlugin.instance == null) {\n tabPlugin.instance = new tabPlugin.classz();\n // plugin.init(tune, tuneNumber, args, ii);\n // call initer first\n tabPlugin.instance.init(abcTune,\n tabPlugin.tuneNumber,\n tabPlugin.params,\n jj\n );\n }\n // render next\n tabPlugin.instance.render(renderer, line, jj);\n }\n }\n } \n }\n },\n\n /**\n * called once internally to register internal plugins\n */\n init: function () {\n // just register plugin hosted by abcjs \n if (!this.inited) {\n this.register(new ViolinTablature());\n this.register(new GuitarTablature());\n this.inited = true;\n }\n }\n};\n\n\nmodule.exports = abcTablatures ;\n","var TimingCallbacks = function(target, params) {\n\tvar self = this;\n\tif (!params) params = {};\n\tself.qpm = params.qpm ? parseInt(params.qpm, 10) : null;\n\tif (!self.qpm) {\n\t\tvar tempo = target.metaText ? target.metaText.tempo : null;\n\t\tself.qpm = target.getBpm(tempo);\n\t}\n\tself.extraMeasuresAtBeginning = params.extraMeasuresAtBeginning ? parseInt(params.extraMeasuresAtBeginning, 10) : 0;\n\tself.beatCallback = params.beatCallback; // This is called for each beat.\n\tself.eventCallback = params.eventCallback; // This is called for each note or rest encountered.\n\tself.lineEndCallback = params.lineEndCallback; // This is called when the end of a line is approaching.\n\tself.lineEndAnticipation = params.lineEndAnticipation ? parseInt(params.lineEndAnticipation, 10) : 0; // How many milliseconds before the end should the call happen.\n\tself.beatSubdivisions = params.beatSubdivisions ? parseInt(params.beatSubdivisions, 10) : 1; // how many callbacks per beat is desired.\n\tself.joggerTimer = null;\n\n\tself.replaceTarget = function(newTarget) {\n\t\tself.noteTimings = newTarget.setTiming(self.qpm, self.extraMeasuresAtBeginning);\n\t\tif (newTarget.noteTimings.length === 0)\n\t\t\tself.noteTimings = newTarget.setTiming(0,0);\n\t\tif (self.lineEndCallback) {\n\t\t\tself.lineEndTimings = getLineEndTimings(newTarget.noteTimings, self.lineEndAnticipation);\n\t\t}\n\t\tself.startTime = null;\n\t\tself.currentBeat = 0;\n\t\tself.currentEvent = 0;\n\t\tself.currentLine = 0;\n\t\tself.currentTime = 0;\n\t\tself.isPaused = false;\n\t\tself.isRunning = false;\n\t\tself.pausedPercent = null;\n\t\tself.justUnpaused = false;\n\t\tself.newSeekPercent = 0;\n\t\tself.lastTimestamp = 0;\n\n\t\tif (self.noteTimings.length === 0)\n\t\t\treturn;\n\t\t// noteTimings contains an array of events sorted by time. Events that happen at the same time are in the same element of the array.\n\t\tself.millisecondsPerBeat = 1000 / (self.qpm / 60) / self.beatSubdivisions;\n\t\tself.lastMoment = self.noteTimings[self.noteTimings.length-1].milliseconds;\n\t\tself.totalBeats = Math.round(self.lastMoment / self.millisecondsPerBeat);\n\t};\n\n\tself.replaceTarget(target);\n\n\tself.doTiming = function (timestamp) {\n\t\t// This is called 60 times a second, that is, every 16 msecs.\n\t\t//console.log(\"doTiming\", timestamp, timestamp-self.lastTimestamp);\n\t\tif (self.lastTimestamp === timestamp)\n\t\t\treturn; // If there are multiple seeks or other calls, then we can easily get multiple callbacks for the same instant.\n\t\tself.lastTimestamp = timestamp;\n\t\tif (!self.startTime) {\n\t\t\tself.startTime = timestamp;\n\t\t}\n\n\t\tif (!self.isPaused && self.isRunning) {\n\t\t\tself.currentTime = timestamp - self.startTime;\n\t\t\tself.currentTime += 16; // Add a little slop because this function isn't called exactly.\n\t\t\twhile (self.noteTimings.length > self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < self.currentTime) {\n\t\t\t\tif (self.eventCallback && self.noteTimings[self.currentEvent].type === 'event') {\n\t\t\t\t\tvar thisStartTime = self.startTime; // the event callback can call seek and change the position from beneath us.\n\t\t\t\t\tself.eventCallback(self.noteTimings[self.currentEvent]);\n\t\t\t\t\tif (thisStartTime !== self.startTime) {\n\t\t\t\t\t\tself.currentTime = timestamp - self.startTime;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.currentEvent++;\n\t\t\t}\n\t\t\tif (self.lineEndCallback && self.lineEndTimings.length > self.currentLine && self.lineEndTimings[self.currentLine].milliseconds < self.currentTime && self.currentEvent < self.noteTimings.length) {\n\t\t\t\tvar leftEvent = self.noteTimings[self.currentEvent].milliseconds === self.currentTime ? self.noteTimings[self.currentEvent] : self.noteTimings[self.currentEvent-1]\n\t\t\t\tself.lineEndCallback(self.lineEndTimings[self.currentLine], leftEvent, { line: self.currentLine, endTimings: self.lineEndTimings, currentTime: self.currentTime });\n\t\t\t\tself.currentLine++;\n\t\t\t}\n\t\t\tif (self.currentTime < self.lastMoment) {\n\t\t\t\trequestAnimationFrame(self.doTiming);\n\t\t\t\tif (self.currentBeat * self.millisecondsPerBeat < self.currentTime) {\n\t\t\t\t\tvar ret = self.doBeatCallback(timestamp);\n\t\t\t\t\tif (ret !== null)\n\t\t\t\t\t\tself.currentTime = ret;\n\t\t\t\t}\n\t\t\t} else if (self.currentBeat <= self.totalBeats) {\n\t\t\t\t// Because of timing issues (for instance, if the browser tab isn't active), the beat callbacks might not have happened when they are supposed to. To keep the client programs from having to deal with that, this will keep calling the loop until all of them have been sent.\n\t\t\t\tif (self.beatCallback) {\n\t\t\t\t\tvar ret2 = self.doBeatCallback(timestamp);\n\t\t\t\t\tif (ret2 !== null)\n\t\t\t\t\t\tself.currentTime = ret2;\n\t\t\t\t\trequestAnimationFrame(self.doTiming);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self.currentTime >= self.lastMoment) {\n\t\t\t\tif (self.eventCallback) {\n\t\t\t\t\t// At the end, the event callback can return \"continue\" to keep from stopping.\n\t\t\t\t\t// The event callback can either be a promise or not.\n\t\t\t\t\tvar promise = self.eventCallback(null);\n\t\t\t\t\tself.shouldStop(promise).then(function(shouldStop) {\n\t\t\t\t\t\tif (shouldStop)\n\t\t\t\t\t\t\tself.stop();\n\t\t\t\t\t})\n\t\t\t\t} else\n\t\t\t\t\tself.stop();\n\t\t\t}\n\t\t}\n\t};\n\n\tself.shouldStop = function(promise) {\n\t\t// The return of the last event callback can be \"continue\" or a promise that returns \"continue\".\n\t\t// If it is then don't call stop. Any other value calls stop.\n\t\treturn new Promise(function (resolve) {\n\t\t\tif (!promise)\n\t\t\t\treturn resolve(true);\n\t\t\tif (promise === \"continue\")\n\t\t\t\treturn resolve(false);\n\t\t\tif (promise.then) {\n\t\t\t\tpromise.then(function (result) {\n\t\t\t\t\tresolve(result !== \"continue\");\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\tself.doBeatCallback = function(timestamp) {\n\t\tif (self.beatCallback) {\n\t\t\tvar next = self.currentEvent;\n\t\t\twhile (next < self.noteTimings.length && self.noteTimings[next].left === null)\n\t\t\t\tnext++;\n\t\t\tvar endMs;\n\t\t\tvar ev;\n\t\t\tif (next < self.noteTimings.length) {\n\t\t\t\tendMs = self.noteTimings[next].milliseconds;\n\t\t\t\tnext = Math.max(0, self.currentEvent - 1);\n\t\t\t\twhile (next >= 0 && self.noteTimings[next].left === null)\n\t\t\t\t\tnext--;\n\n\t\t\t\tev = self.noteTimings[next];\n\t\t\t}\n\n\t\t\tvar position = {};\n\t\t\tvar debugInfo = {};\n\t\t\tif (ev) {\n\t\t\t\tposition.top = ev.top;\n\t\t\t\tposition.height = ev.height;\n\n\t\t\t\t// timestamp = the time passed in from the animation timer\n\t\t\t\t// self.startTime = the time that the tune was started (if there was seeking or pausing, it is adjusted to keep the math the same)\n\t\t\t\t// ev = the event that is either happening now or has most recently passed.\n\t\t\t\t// ev.milliseconds = the time that the current event starts (relative to self.startTime)\n\t\t\t\t// endMs = the time that the next event starts\n\t\t\t\t// ev.endX = the x coordinate that the next event happens (or the end of the line or repeat measure)\n\t\t\t\t// ev.left = the x coordinate of the current event\n\t\t\t\t//\n\t\t\t\t// The output is the X coordinate of the current cursor location. It is calculated with the ratio of the length of the event and the width of it.\n\t\t\t\tvar offMs = Math.max(0, timestamp-self.startTime-ev.milliseconds); // Offset in time from the last beat\n\t\t\t\tvar gapMs = endMs - ev.milliseconds; // Length of this event in time\n\t\t\t\tvar gapPx = ev.endX - ev.left; // The length in pixels\n\t\t\t\tvar offPx = gapMs ? offMs * gapPx / gapMs : 0;\n\t\t\t\tposition.left = ev.left + offPx;\n\t\t\t\t// See if this is before the first event - that is the case where there are \"prep beats\"\n\t\t\t\tif (self.currentEvent === 0 && ev.milliseconds > timestamp-self.startTime)\n\t\t\t\t\tposition.left = undefined\n\t\t\t\t\n\t\t\t\tdebugInfo = {\n\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\tstartTime: self.startTime,\n\t\t\t\t\tev: ev,\n\t\t\t\t\tendMs: endMs,\n\t\t\t\t\toffMs: offMs,\n\t\t\t\t\toffPx: offPx,\n\t\t\t\t\tgapMs: gapMs,\n\t\t\t\t\tgapPx: gapPx\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tdebugInfo = {\n\t\t\t\t\ttimestamp: timestamp,\n\t\t\t\t\tstartTime: self.startTime,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar thisStartTime = self.startTime; // the beat callback can call seek and change the position from beneath us.\n\t\t\tself.beatCallback(\n\t\t\t\tself.currentBeat / self.beatSubdivisions,\n\t\t\t\tself.totalBeats / self.beatSubdivisions,\n\t\t\t\tself.lastMoment,\n\t\t\t\tposition,\n\t\t\t\tdebugInfo);\n\t\t\tif (thisStartTime !== self.startTime) {\n\t\t\t\treturn timestamp - self.startTime;\n\t\t\t} else\n\t\t\t\tself.currentBeat++;\n\t\t}\n\t\treturn null;\n\t};\n\n\t// In general music doesn't need a timer at 60 fps because notes don't happen that fast.\n\t// For instance, at 120 beats per minute, a sixteenth note takes 125ms. So just as a\n\t// compromise value between performance and jank this is set about half that.\n\tvar JOGGING_INTERVAL = 60;\n\n\tself.animationJogger = function() {\n\t\t// There are some cases where the animation timer doesn't work: for instance when\n\t\t// this isn't running in a visible tab and sometimes on mobile devices. We compensate\n\t\t// by having a backup timer using setTimeout. This won't be accurate so the performance\n\t\t// will be jerky, but without it the requestAnimationFrame might be skipped and so\n\t\t// not called again.\n\t\tif (self.isRunning) {\n\t\t\tself.doTiming(performance.now());\n\t\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t\t}\n\t};\n\n\tself.start = function(offsetPercent, units) {\n\t\tself.isRunning = true;\n\t\tif (self.isPaused) {\n\t\t\tself.isPaused = false;\n\t\t\tif (offsetPercent === undefined)\n\t\t\t\tself.justUnpaused = true;\n\t\t}\n\t\tif (offsetPercent) {\n\t\t\tself.setProgress(offsetPercent, units);\n\t\t} else if (offsetPercent === 0) {\n\t\t\tself.reset();\n\t\t} else if (self.pausedPercent !== null) {\n\t\t\tvar now = performance.now();\n\t\t\tself.currentTime = self.lastMoment * self.pausedPercent;\n\t\t\tself.startTime = now - self.currentTime;\n\t\t\tself.pausedPercent = null;\n\t\t\tself.reportNext = true;\n\t\t}\n\t\trequestAnimationFrame(self.doTiming);\n\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t};\n\tself.pause = function() {\n\t\tself.isPaused = true;\n\t\tvar now = performance.now();\n\t\tself.pausedPercent = (now - self.startTime) / self.lastMoment;\n\t\tself.isRunning = false;\n\t\tif (self.joggerTimer) {\n\t\t\tclearTimeout(self.joggerTimer);\n\t\t\tself.joggerTimer = null;\n\t\t}\n\t};\n\tself.currentMillisecond = function() {\n\t\treturn self.currentTime;\n\t};\n\tself.reset = function() {\n\t\tself.currentBeat = 0;\n\t\tself.currentEvent = 0;\n\t\tself.currentLine = 0;\n\t\tself.startTime = null;\n\t\tself.pausedPercent = null;\n\t};\n\tself.stop = function() {\n\t\tself.pause();\n\t\tself.reset();\n\t};\n\tself.setProgress = function(position, units) {\n\t\t// the effect of this function is to move startTime so that the callbacks happen correctly for the new seek.\n\t\tvar percent;\n\t\tswitch (units) {\n\t\t\tcase \"seconds\":\n\t\t\t\tself.currentTime = position * 1000;\n\t\t\t\tif (self.currentTime < 0) self.currentTime = 0;\n\t\t\t\tif (self.currentTime > self.lastMoment) self.currentTime = self.lastMoment;\n\t\t\t\tpercent = self.currentTime / self.lastMoment;\n\t\t\t\tbreak;\n\t\t\tcase \"beats\":\n\t\t\t\tself.currentTime = position * self.millisecondsPerBeat * self.beatSubdivisions;\n\t\t\t\tif (self.currentTime < 0) self.currentTime = 0;\n\t\t\t\tif (self.currentTime > self.lastMoment) self.currentTime = self.lastMoment;\n\t\t\t\tpercent = self.currentTime / self.lastMoment;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// this is \"percent\" or any illegal value\n\t\t\t\t// this is passed a value between 0 and 1.\n\t\t\t\tpercent = position;\n\t\t\t\tif (percent < 0) percent = 0;\n\t\t\t\tif (percent > 1) percent = 1;\n\t\t\t\tself.currentTime = self.lastMoment * percent;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!self.isRunning)\n\t\t\tself.pausedPercent = percent;\n\n\t\tvar now = performance.now();\n\t\tself.startTime = now - self.currentTime;\n\n\t\tvar oldEvent = self.currentEvent;\n\t\tself.currentEvent = 0;\n\t\twhile (self.noteTimings.length > self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < self.currentTime) {\n\t\t\tself.currentEvent++;\n\t\t}\n\n\t\tif (self.lineEndCallback) {\n\t\t\tself.currentLine = 0;\n\t\t\twhile (self.lineEndTimings.length > self.currentLine && self.lineEndTimings[self.currentLine].milliseconds + self.lineEndAnticipation < self.currentTime) {\n\t\t\t\tself.currentLine++;\n\t\t\t}\n\t\t}\n\n\t\tvar oldBeat = self.currentBeat;\n\t\tself.currentBeat = Math.floor(self.currentTime / self.millisecondsPerBeat);\n\t\tif (self.beatCallback && oldBeat !== self.currentBeat) // If the movement caused the beat to change, then immediately report it to the client.\n\t\t\tself.doBeatCallback(self.startTime+self.currentTime);\n\n\t\tif (self.eventCallback && self.currentEvent >= 0 && self.noteTimings[self.currentEvent].type === 'event')\n\t\t\tself.eventCallback(self.noteTimings[self.currentEvent]);\n\t\tif (self.lineEndCallback)\n\t\t\tself.lineEndCallback(self.lineEndTimings[self.currentLine], self.noteTimings[self.currentEvent], { line: self.currentLine, endTimings: self.lineEndTimings });\n\n\t\tself.joggerTimer = setTimeout(self.animationJogger, JOGGING_INTERVAL);\n\t};\n};\n\nfunction getLineEndTimings(timings, anticipation) {\n\t// Returns an array of milliseconds to call the lineEndCallback.\n\t// This figures out the timing of the beginning of each line and subtracts the anticipation from it.\n\tvar callbackTimes = [];\n\tvar lastTop = null;\n\tfor (var i = 0; i < timings.length; i++) {\n\t\tvar timing = timings[i];\n\t\tif (timing.type !== 'end' && timing.top !== lastTop) {\n\t\t\tcallbackTimes.push({ measureNumber: timing.measureNumber, milliseconds: timing.milliseconds-anticipation, top: timing.top, bottom: timing.top+timing.height });\n\t\t\tlastTop = timing.top;\n\t\t}\n\t}\n\treturn callbackTimes;\n}\n\nmodule.exports = TimingCallbacks;\n\n","// abc_tunebook.js: splits a string representing ABC Music Notation into individual tunes.\n\nvar Parse = require('../parse/abc_parse');\nvar bookParser = require('../parse/abc_parse_book');\nvar tablatures = require('./abc_tablatures');\n\n\nvar tunebook = {};\n\n(function() {\n\t\"use strict\";\n\n\ttunebook.numberOfTunes = function(abc) {\n\t\tvar tunes = abc.split(\"\\nX:\");\n\t\tvar num = tunes.length;\n\t\tif (num === 0) num = 1;\n\t\treturn num;\n\t};\n\n\tvar TuneBook = tunebook.TuneBook = function(book) {\n\t\tvar parsed = bookParser(book);\n\t\tthis.header = parsed.header;\n\t\tthis.tunes = parsed.tunes;\n\t};\n\n\tTuneBook.prototype.getTuneById = function(id) {\n\t\tfor (var i = 0; i < this.tunes.length; i++) {\n\t\t\tif (this.tunes[i].id === ''+id)\n\t\t\t\treturn this.tunes[i];\n\t\t}\n\t\treturn null;\n\t};\n\n\tTuneBook.prototype.getTuneByTitle = function(title) {\n\t\tfor (var i = 0; i < this.tunes.length; i++) {\n\t\t\tif (this.tunes[i].title === title)\n\t\t\t\treturn this.tunes[i];\n\t\t}\n\t\treturn null;\n\t};\n\n\ttunebook.parseOnly = function(abc, params) {\n\t\tvar numTunes = tunebook.numberOfTunes(abc);\n\n\t\t// this just needs to be passed in because this tells the engine how many tunes to process.\n\t\tvar output = [];\n\t\tfor (var i = 0; i < numTunes; i++) {\n\t\t\toutput.push(1);\n\t\t}\n\t\tfunction callback() {\n\t\t\t// Don't need to do anything with the parsed tunes.\n\t\t}\n\t\treturn tunebook.renderEngine(callback, output, abc, params);\n\t};\n\n\ttunebook.renderEngine = function (callback, output, abc, params) {\n\t\tvar ret = [];\n\t\tvar isArray = function(testObject) {\n\t\t\treturn testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';\n\t\t};\n\n\t\t// check and normalize input parameters\n\t\tif (output === undefined || abc === undefined)\n\t\t\treturn;\n\t\tif (!isArray(output))\n\t\t\toutput = [ output ];\n\t\tif (params === undefined)\n\t\t\tparams = {};\n\t\tvar currentTune = params.startingTune ? parseInt(params.startingTune, 10) : 0;\n\n\t\t// parse the abc string\n\t\tvar book = new TuneBook(abc);\n\t\tvar abcParser = new Parse();\n\n\t\t// output each tune, if it exists. Otherwise clear the div.\n\t\tfor (var i = 0; i < output.length; i++) {\n\t\t\tvar div = output[i];\n\t\t\tif (div === \"*\") {\n\t\t\t\t// This is for \"headless\" rendering: doing the work but not showing the svg.\n\t\t\t} else if (typeof(div) === \"string\")\n\t\t\t\tdiv = document.getElementById(div);\n\t\t\tif (div) {\n\t\t\t\tif (currentTune >= 0 && currentTune < book.tunes.length) {\n\t\t\t\t\tabcParser.parse(book.tunes[currentTune].abc, params, book.tunes[currentTune].startPos - book.header.length);\n\t\t\t\t\tvar tune = abcParser.getTune();\n\t\t\t\t\t//\n\t\t\t\t\t// Init tablatures plugins\n\t\t\t\t\t//\n\t\t\t\t\tif (params.tablature) {\n\t\t\t\t\t\ttablatures.init();\n\t\t\t\t\t\ttune.tablatures = tablatures.preparePlugins(tune, currentTune, params);\n\t\t\t\t\t}\n\t\t\t\t\tvar warnings = abcParser.getWarnings();\n\t\t\t\t\tif (warnings)\n\t\t\t\t\t\ttune.warnings = warnings;\n\t\t\t\t\tvar override = callback(div, tune, i, book.tunes[currentTune].abc);\n\t\t\t\t\tret.push(override ? override : tune);\n\t\t\t\t} else {\n\t\t\t\t\tif (div['innerHTML'])\n\t\t\t\t\t\tdiv.innerHTML = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentTune++;\n\t\t}\n\t return ret;\n\t};\n\n\tfunction flattenTune(tuneObj) {\n\t\t// This removes the line breaks and removes the non-music lines.\n\t\tvar staves = [];\n\t\tfor (var j = 0; j < tuneObj.lines.length; j++) {\n\t\t\tvar line = tuneObj.lines[j];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var k = 0; k < line.staff.length; k++) {\n\t\t\t\t\tvar staff = line.staff[k];\n\t\t\t\t\tif (!staves[k])\n\t\t\t\t\t\tstaves[k] = staff;\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor (var i = 0; i < staff.voices.length; i++) {\n\t\t\t\t\t\t\tif (staves[k].voices[i])\n\t\t\t\t\t\t\t\tstaves[k].voices[i] = staves[k].voices[i].concat(staff.voices[i]);\n\t\t\t\t\t\t\t// TODO-PER: If staves[k].voices[i] doesn't exist, that means a voice appeared in the middle of the tune. That isn't handled yet.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn staves;\n\t}\n\n\tfunction measuresParser(staff, tune) {\n\t\tvar voices = [];\n\t\tvar lastChord = null;\n\t\tvar measureStartChord = null;\n\t\tvar fragStart = null;\n\t\tvar hasNotes = false;\n\n\t\tfor (var i = 0; i < staff.voices.length; i++) {\n\t\t\tvar voice = staff.voices[i];\n\t\t\tvoices.push([]);\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar elem = voice[j];\n\t\t\t\tif (fragStart === null && elem.startChar >= 0) {\n\t\t\t\t\tfragStart = elem.startChar;\n\t\t\t\t\tif (elem.chord === undefined)\n\t\t\t\t\t\tmeasureStartChord = lastChord;\n\t\t\t\t\telse\n\t\t\t\t\t\tmeasureStartChord = null;\n\t\t\t\t}\n\t\t\t\tif (elem.chord)\n\t\t\t\t\tlastChord = elem;\n\t\t\t\tif (elem.el_type === 'bar') {\n\t\t\t\t\tif (hasNotes) {\n\t\t\t\t\t\tvar frag = tune.abc.substring(fragStart, elem.endChar);\n\t\t\t\t\t\tvar measure = {abc: frag};\n\t\t\t\t\t\tlastChord = measureStartChord && measureStartChord.chord && measureStartChord.chord.length > 0 ? measureStartChord.chord[0].name : null;\n\t\t\t\t\t\tif (lastChord)\n\t\t\t\t\t\t\tmeasure.lastChord = lastChord;\n\t\t\t\t\t\tif (elem.startEnding)\n\t\t\t\t\t\t\tmeasure.startEnding = elem.startEnding;\n\t\t\t\t\t\tif (elem.endEnding)\n\t\t\t\t\t\t\tmeasure.endEnding = elem.endEnding;\n\t\t\t\t\t\tvoices[i].push(measure);\n\t\t\t\t\t\tfragStart = null;\n\t\t\t\t\t\thasNotes = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (elem.el_type === 'note') {\n\t\t\t\t\thasNotes = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn voices;\n\t}\n\n\ttunebook.extractMeasures = function(abc) {\n\t\tvar tunes = [];\n\t\tvar book = new TuneBook(abc);\n\t\tfor (var i = 0; i < book.tunes.length; i++) {\n\t\t\tvar tune = book.tunes[i];\n\t\t\tvar arr = tune.abc.split(\"K:\");\n\t\t\tvar arr2 = arr[1].split(\"\\n\");\n\t\t\tvar header = arr[0] + \"K:\" + arr2[0] + \"\\n\";\n\t\t\tvar lastChord = null;\n\t\t\tvar measureStartChord = null;\n\t\t\tvar fragStart = null;\n\t\t\tvar measures = [];\n\t\t\tvar hasNotes = false;\n\t\t\tvar tuneObj = tunebook.parseOnly(tune.abc)[0];\n\t\t\tvar hasPickup = tuneObj.getPickupLength() > 0;\n\t\t\t// var staves = flattenTune(tuneObj);\n\t\t\t// for (var s = 0; s < staves.length; s++) {\n\t\t\t// \tvar voices = measuresParser(staves[s], tune);\n\t\t\t// \tif (s === 0)\n\t\t\t// \t\tmeasures = voices;\n\t\t\t// \telse {\n\t\t\t// \t\tfor (var ss = 0; ss < voices.length; ss++) {\n\t\t\t// \t\t\tvar voice = voices[ss];\n\t\t\t// \t\t\tif (measures.length <= ss)\n\t\t\t// \t\t\t\tmeasures.push([]);\n\t\t\t// \t\t\tvar measureVoice = measures[ss];\n\t\t\t// \t\t\tfor (var sss = 0; sss < voice.length; sss++) {\n\t\t\t// \t\t\t\tif (measureVoice.length > sss)\n\t\t\t// \t\t\t\t\tmeasureVoice[sss].abc += \"\\n\" + voice[sss].abc;\n\t\t\t// \t\t\t\telse\n\t\t\t// \t\t\t\t\tmeasures.push(voice[sss]);\n\t\t\t// \t\t\t}\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// \tconsole.log(voices);\n\t\t\t// }\n\t\t\t// measures = measures[0];\n\n\t\t\tfor (var j = 0; j < tuneObj.lines.length; j++) {\n\t\t\t\tvar line = tuneObj.lines[j];\n\t\t\t\tif (line.staff) {\n\t\t\t\t\tfor (var k = 0; k < 1 /*line.staff.length*/; k++) {\n\t\t\t\t\t\tvar staff = line.staff[k];\n\t\t\t\t\t\tfor (var kk = 0; kk < 1 /*staff.voices.length*/; kk++) {\n\t\t\t\t\t\t\tvar voice = staff.voices[kk];\n\t\t\t\t\t\t\tfor (var kkk = 0; kkk < voice.length; kkk++) {\n\t\t\t\t\t\t\t\tvar elem = voice[kkk];\n\t\t\t\t\t\t\t\tif (fragStart === null && elem.startChar >= 0) {\n\t\t\t\t\t\t\t\t\tfragStart = elem.startChar;\n\t\t\t\t\t\t\t\t\tif (elem.chord === undefined)\n\t\t\t\t\t\t\t\t\t\tmeasureStartChord = lastChord;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tmeasureStartChord = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (elem.chord)\n\t\t\t\t\t\t\t\t\tlastChord = elem;\n\t\t\t\t\t\t\t\tif (elem.el_type === 'bar') {\n\t\t\t\t\t\t\t\t\tif (hasNotes) {\n\t\t\t\t\t\t\t\t\t\tvar frag = tune.abc.substring(fragStart, elem.endChar);\n\t\t\t\t\t\t\t\t\t\tvar measure = {abc: frag};\n\t\t\t\t\t\t\t\t\t\tlastChord = measureStartChord && measureStartChord.chord && measureStartChord.chord.length > 0 ? measureStartChord.chord[0].name : null;\n\t\t\t\t\t\t\t\t\t\tif (lastChord)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.lastChord = lastChord;\n\t\t\t\t\t\t\t\t\t\tif (elem.startEnding)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.startEnding = elem.startEnding;\n\t\t\t\t\t\t\t\t\t\tif (elem.endEnding)\n\t\t\t\t\t\t\t\t\t\t\tmeasure.endEnding = elem.endEnding;\n\t\t\t\t\t\t\t\t\t\tmeasures.push(measure);\n\t\t\t\t\t\t\t\t\t\tfragStart = null;\n\t\t\t\t\t\t\t\t\t\thasNotes = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (elem.el_type === 'note') {\n\t\t\t\t\t\t\t\t\thasNotes = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttunes.push({\n\t\t\t\theader: header,\n\t\t\t\tmeasures: measures,\n\t\t\t\thasPickup: hasPickup\n\t\t\t});\n\t\t}\n\t\treturn tunes;\n\t};\n})();\n\nmodule.exports = tunebook;\n","var tunebook = require('./abc_tunebook');\nvar Tune = require('../data/abc_tune');\n\nvar EngraverController = require('../write/engraver-controller');\nvar Parse = require('../parse/abc_parse');\nvar wrap = require('../parse/wrap_lines');\n// var tablatures = require('./abc_tablatures');\n\n\nvar resizeDivs = {};\nfunction resizeOuter() {\n var width = window.innerWidth;\n for (var id in resizeDivs) {\n if (resizeDivs.hasOwnProperty(id)) {\n var outer = resizeDivs[id];\n var ofs = outer.offsetLeft;\n width -= ofs * 2;\n outer.style.width = width + \"px\";\n }\n }\n}\n\ntry {\n window.addEventListener(\"resize\", resizeOuter);\n window.addEventListener(\"orientationChange\", resizeOuter);\n} catch(e) {\n // if we aren't in a browser, this code will crash, but it is not needed then either.\n}\n\nfunction renderOne(div, tune, params, tuneNumber, lineOffset) {\n if (params.viewportHorizontal) {\n // Create an inner div that holds the music, so that the passed in div will be the viewport.\n div.innerHTML = '
';\n if (params.scrollHorizontal) {\n div.style.overflowX = \"auto\";\n div.style.overflowY = \"hidden\";\n } else\n div.style.overflow = \"hidden\";\n resizeDivs[div.id] = div; // We use a hash on the element's id so that multiple calls won't keep adding to the list.\n div = div.children[0]; // The music should be rendered in the inner div.\n }\n else if (params.viewportVertical) {\n // Create an inner div that holds the music, so that the passed in div will be the viewport.\n div.innerHTML = '
';\n div.style.overflowX = \"hidden\";\n div.style.overflowY = \"auto\";\n div = div.children[0]; // The music should be rendered in the inner div.\n }\n else\n\t div.innerHTML = \"\";\n var engraver_controller = new EngraverController(div, params);\n engraver_controller.engraveABC(tune, tuneNumber, lineOffset);\n tune.engraver = engraver_controller;\n if (params.viewportVertical || params.viewportHorizontal) {\n // If we added a wrapper around the div, then we need to size the wrapper, too.\n var parent = div.parentNode;\n parent.style.width = div.style.width;\n }\n}\n\n// A quick way to render a tune from javascript when interactivity is not required.\n// This is used when a javascript routine has some abc text that it wants to render\n// in a div or collection of divs. One tune or many can be rendered.\n//\n// parameters:\n// output: an array of divs that the individual tunes are rendered to.\n// If the number of tunes exceeds the number of divs in the array, then\n// only the first tunes are rendered. If the number of divs exceeds the number\n// of tunes, then the unused divs are cleared. The divs can be passed as either\n// elements or strings of ids. If ids are passed, then the div MUST exist already.\n// (if a single element is passed, then it is an implied array of length one.)\n// (if a null is passed for an element, or the element doesn't exist, then that tune is skipped.)\n// abc: text representing a tune or an entire tune book in ABC notation.\n// renderParams: hash of:\n// startingTune: an index, starting at zero, representing which tune to start rendering at.\n// (If this element is not present, then rendering starts at zero.)\n// width: 800 by default. The width in pixels of the output paper\nvar renderAbc = function(output, abc, parserParams, engraverParams, renderParams) {\n // Note: all parameters have been condensed into the first ones. It doesn't hurt anything to allow the old format, so just copy them here.\n var params = {};\n var key;\n if (parserParams) {\n for (key in parserParams) {\n if (parserParams.hasOwnProperty(key)) {\n params[key] = parserParams[key];\n }\n }\n if (params.warnings_id && params.tablature) {\n params.tablature.warning_id = params.warnings_id;\n }\n }\n if (engraverParams) {\n for (key in engraverParams) {\n if (engraverParams.hasOwnProperty(key)) {\n\t // There is a conflict with the name of the parameter \"listener\". If it is in the second parameter, then it is for click.\n\t if (key === \"listener\") {\n\t \tif (engraverParams[key].highlight)\n\t\t params.clickListener = engraverParams[key].highlight;\n\t } else\n params[key] = engraverParams[key];\n }\n }\n }\n if (renderParams) {\n for (key in renderParams) {\n if (renderParams.hasOwnProperty(key)) {\n params[key] = renderParams[key];\n }\n }\n }\n\n function callback(div, tune, tuneNumber, abcString) {\n var removeDiv = false;\n if (div === \"*\") {\n removeDiv = true;\n div = document.createElement(\"div\");\n div.setAttribute(\"style\", \"visibility: hidden;\");\n document.body.appendChild(div);\n }\n \tif (params.afterParsing)\n \t\tparams.afterParsing(tune, tuneNumber, abcString);\n if (!removeDiv && params.wrap && params.staffwidth) {\n\t tune = doLineWrapping(div, tune, tuneNumber, abcString, params);\n\t return tune;\n }\n renderOne(div, tune, params, tuneNumber, 0);\n if (removeDiv)\n div.parentNode.removeChild(div);\n return null;\n }\n\n return tunebook.renderEngine(callback, output, abc, params);\n};\n\nfunction doLineWrapping(div, tune, tuneNumber, abcString, params) {\n\tvar engraver_controller = new EngraverController(div, params);\n\tvar widths = engraver_controller.getMeasureWidths(tune);\n\n\tvar ret = wrap.calcLineWraps(tune, widths, params);\n\tif (ret.reParse) {\n var abcParser = new Parse();\n abcParser.parse(abcString, ret.revisedParams);\n tune = abcParser.getTune();\n var warnings = abcParser.getWarnings();\n if (warnings)\n tune.warnings = warnings;\n }\n renderOne(div, tune, ret.revisedParams, tuneNumber, 0);\n\ttune.explanation = ret.explanation;\n\treturn tune;\n}\n\nmodule.exports = renderAbc;\n","var { relativeMajor } = require(\"./relative-major\");\n\nvar key1sharp = { acc: 'sharp', note: 'f' };\nvar key2sharp = { acc: 'sharp', note: 'c' };\nvar key3sharp = { acc: 'sharp', note: 'g' };\nvar key4sharp = { acc: 'sharp', note: 'd' };\nvar key5sharp = { acc: 'sharp', note: 'A' };\nvar key6sharp = { acc: 'sharp', note: 'e' };\nvar key7sharp = { acc: 'sharp', note: 'B' };\nvar key1flat = { acc: 'flat', note: 'B' };\nvar key2flat = { acc: 'flat', note: 'e' };\nvar key3flat = { acc: 'flat', note: 'A' };\nvar key4flat = { acc: 'flat', note: 'd' };\nvar key5flat = { acc: 'flat', note: 'G' };\nvar key6flat = { acc: 'flat', note: 'c' };\nvar key7flat = { acc: 'flat', note: 'F' };\n\nvar keys = {\n\t'C#': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp],\n\t'F#': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp],\n\t'B': [key1sharp, key2sharp, key3sharp, key4sharp, key5sharp],\n\t'E': [key1sharp, key2sharp, key3sharp, key4sharp],\n\t'A': [key1sharp, key2sharp, key3sharp],\n\t'D': [key1sharp, key2sharp],\n\t'G': [key1sharp],\n\t'C': [],\n\t'F': [key1flat],\n\t'Bb': [key1flat, key2flat],\n\t'Eb': [key1flat, key2flat, key3flat],\n\t'Cm': [key1flat, key2flat, key3flat],\n\t'Ab': [key1flat, key2flat, key3flat, key4flat],\n\t'Db': [key1flat, key2flat, key3flat, key4flat, key5flat],\n\t'Gb': [key1flat, key2flat, key3flat, key4flat, key5flat, key6flat],\n\t'Cb': [key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat],\n\n\t// The following are not in the 2.0 spec, but seem normal enough.\n\t// TODO-PER: These SOUND the same as what's written, but they aren't right\n\t'A#': [key1flat, key2flat],\n\t'B#': [],\n\t'D#': [key1flat, key2flat, key3flat],\n\t'E#': [key1flat],\n\t'G#': [key1flat, key2flat, key3flat, key4flat],\n\t'none': [],\n};\n\nfunction keyAccidentals(key) {\n\tvar newKey = keys[relativeMajor(key)]\n\tif (!newKey) // If we don't recognize the key then there is no change\n\t\treturn null\n\treturn JSON.parse(JSON.stringify(newKey))\n};\n\nmodule.exports = keyAccidentals;\n","// All these keys have the same number of accidentals\nvar keys = {\n\t'C': { modes: ['CMaj', 'Amin', 'Am', 'GMix', 'DDor', 'EPhr', 'FLyd', 'BLoc'], stepsFromC: 0 },\n\t'Db': { modes: ['DbMaj', 'Bbmin', 'Bbm', 'AbMix', 'EbDor', 'FPhr', 'GbLyd', 'CLoc'], stepsFromC: 1 },\n\t'D': { modes: ['DMaj', 'Bmin', 'Bm', 'AMix', 'EDor', 'F#Phr', 'GLyd', 'C#Loc'], stepsFromC: 2 },\n\t'Eb': { modes: ['EbMaj', 'Cmin', 'Cm', 'BbMix', 'FDor', 'GPhr', 'AbLyd', 'DLoc'], stepsFromC: 3 },\n\t'E': { modes: ['EMaj', 'C#min', 'C#m', 'BMix', 'F#Dor', 'G#Phr', 'ALyd', 'D#Loc'], stepsFromC: 4 },\n\t'F': { modes: ['FMaj', 'Dmin', 'Dm', 'CMix', 'GDor', 'APhr', 'BbLyd', 'ELoc'], stepsFromC: 5 },\n\t'Gb': { modes: ['GbMaj', 'Ebmin', 'Ebm', 'DbMix', 'AbDor', 'BbPhr', 'CbLyd', 'FLoc'], stepsFromC: 6 },\n\t'G': { modes: ['GMaj', 'Emin', 'Em', 'DMix', 'ADor', 'BPhr', 'CLyd', 'F#Loc'], stepsFromC: 7 },\n\t'Ab': { modes: ['AbMaj', 'Fmin', 'Fm', 'EbMix', 'BbDor', 'CPhr', 'DbLyd', 'GLoc'], stepsFromC: 8 },\n\t'A': { modes: ['AMaj', 'F#min', 'F#m', 'EMix', 'BDor', 'C#Phr', 'DLyd', 'G#Loc'], stepsFromC: 9 },\n\t'Bb': { modes: ['BbMaj', 'Gmin', 'Gm', 'FMix', 'CDor', 'DPhr', 'EbLyd', 'ALoc'], stepsFromC: 10 },\n\t'B': { modes: ['BMaj', 'G#min', 'G#m', 'F#Mix', 'C#Dor', 'D#Phr', 'ELyd', 'A#Loc'], stepsFromC: 11 },\n\t// Enharmonic keys\n\t'C#': { modes: ['C#Maj', 'A#min', 'A#m', 'G#Mix', 'D#Dor', 'E#Phr', 'F#Lyd', 'B#Loc'], stepsFromC: 1 },\n\t'F#': { modes: ['F#Maj', 'D#min', 'D#m', 'C#Mix', 'G#Dor', 'A#Phr', 'BLyd', 'E#Loc'], stepsFromC: 6 },\n\t'Cb': { modes: ['CbMaj', 'Abmin', 'Abm', 'GbMix', 'DbDor', 'EbPhr', 'FbLyd', 'BbLoc'], stepsFromC: 11 },\n}\n\nvar keyReverse = null\n\nfunction createKeyReverse() {\n\tkeyReverse = {}\n\tvar allKeys = Object.keys(keys)\n\tfor (var i = 0 ; i < allKeys.length; i++) {\n\t\tvar keyObj = keys[allKeys[i]]\n\t\tkeyReverse[allKeys[i].toLowerCase()] = allKeys[i];\n\t\tfor (var j = 0; j < keyObj.modes.length; j++) {\n\t\t\tvar mode = keyObj.modes[j].toLowerCase()\n\t\t\tkeyReverse[mode] = allKeys[i];\n\t\t}\n\t}\n}\n\nfunction relativeMajor(key) {\n\t// Translate a key to its relative major. If it doesn't exist, do the best we can\n\t// by just returning the original key.\n\t// There are alternate spellings of these - so the search needs to be case insensitive.\n\t// To make this efficient, the first time this is called the \"keys\" object is reversed so this search is fast in the future\n\tif (!keyReverse) {\n\t\tcreateKeyReverse()\n\t}\n\t// get the key portion itself - there might be other stuff, like extra sharps and flats, or the mode written out.\n\tvar mode = key.toLowerCase().match(/([a-g][b#]?)(maj|min|mix|dor|phr|lyd|loc|m)?/)\n\tif (!mode || !mode[2])\n\t\treturn key;\n\tmode = mode[1] + mode[2]\n\tvar maj = keyReverse[mode]\n\tif (maj)\n\t\treturn maj;\n\treturn key;\n}\n\nfunction relativeMode(majorKey, mode) {\n\t// The reverse of the relativeMajor. Translate it back to the original mode.\n\t// If it isn't a recognized mode or it is already major, then just return the major key.\n\tvar group = keys[majorKey]\n\tif (!group)\n\t\treturn majorKey;\n\tif (mode === '')\n\t\treturn majorKey;\n\tvar match = mode.toLowerCase().match(/^(maj|min|mix|dor|phr|lyd|loc|m)/)\t\n\tif (!match)\n\t\treturn majorKey\n\tvar regMode = match[1]\t\n\tfor (var i = 0; i < group.modes.length; i++) {\n\t\tvar thisMode = group.modes[i]\n\t\tvar ind = thisMode.toLowerCase().indexOf(regMode)\n\t\tif (ind !== -1 && ind === thisMode.length - regMode.length)\n\t\t\treturn thisMode.substring(0, thisMode.length - regMode.length)\n\t}\n\treturn majorKey;\n}\n\nfunction transposeKey(key, steps) {\n\t// This takes a major key and adds the desired steps.\n\t// It assigns each key a number that is the number of steps from C so that there can just be arithmetic.\n\tvar match = keys[key]\n\tif (!match)\n\t\treturn key;\n\twhile (steps < 0) steps += 12;\n\tvar fromC = (match.stepsFromC + steps) % 12;\n\tfor (var i = 0; i < Object.keys(keys).length; i++) {\n\t\tvar k = Object.keys(keys)[i]\n\t\tif (keys[k].stepsFromC === fromC)\n\t\t\treturn k;\n\t}\n\treturn key;\n}\n\nmodule.exports = {relativeMajor: relativeMajor, relativeMode: relativeMode, transposeKey: transposeKey};\n","// abc_tune.js: a computer usable internal structure representing one tune.\n\nvar parseCommon = require('../parse/abc_common');\nvar spacing = require('../write/helpers/spacing');\nvar sequence = require('../synth/abc_midi_sequencer');\nvar flatten = require('../synth/abc_midi_flattener');\nvar delineTune = require(\"./deline-tune\");\n\n/**\n * This is the data for a single ABC tune. It is created and populated by the window.ABCJS.parse.Parse class.\n * Also known as the ABCJS Abstract Syntax Tree\n * @alternateClassName ABCJS.Tune\n */\nvar Tune = function() {\n\tthis.reset = function () {\n\t\tthis.version = \"1.1.0\";\n\t\tthis.media = \"screen\";\n\t\tthis.metaText = {};\n\t\tthis.metaTextInfo = {};\n\t\tthis.formatting = {};\n\t\tthis.lines = [];\n\t\tthis.staffNum = 0;\n\t\tthis.voiceNum = 0;\n\t\tthis.lineNum = 0;\n\t\tthis.runningFonts = {};\n\t\tdelete this.visualTranspose;\n\t};\n\tthis.reset();\n\n\tfunction copy(dest, src, prop, attrs) {\n\t\tfor (var i = 0; i < attrs.length; i++)\n\t\t\tdest[prop][attrs[i]] = src[prop][attrs[i]];\n\t}\n\n\tthis.copyTopInfo = function(src) {\n\t\tvar attrs = ['tempo', 'title', 'header', 'rhythm', 'origin', 'composer', 'author', 'partOrder'];\n\t\tcopy(this, src, \"metaText\", attrs);\n\t\tcopy(this, src, \"metaTextInfo\", attrs);\n\t};\n\n\tthis.copyBottomInfo = function(src) {\n\t\tvar attrs = ['unalignedWords',\n\t\t\t'book',\n\t\t\t'source',\n\t\t\t'discography',\n\t\t\t'notes',\n\t\t\t'transcription',\n\t\t\t'history',\n\t\t\t'abc-copyright',\n\t\t\t'abc-creator',\n\t\t\t'abc-edited-by',\n\t\t\t'footer']\n\t\tcopy(this, src, \"metaText\", attrs);\n\t\tcopy(this, src, \"metaTextInfo\", attrs);\n\t};\n\n\t// The structure consists of a hash with the following two items:\n\t// metaText: a hash of {key, value}, where key is one of: title, author, rhythm, source, transcription, unalignedWords, etc...\n\t// tempo: { noteLength: number (e.g. .125), bpm: number }\n\t// lines: an array of elements, or one of the following:\n\t//\n\t// STAFF: array of elements\n\t// SUBTITLE: string\n\t//\n\t// TODO: actually, the start and end char should modify each part of the note type\n\t// The elements all have a type field and a start and end char\n\t// field. The rest of the fields depend on the type and are listed below:\n\t// REST: duration=1,2,4,8; chord: string\n\t// NOTE: accidental=none,dbl_flat,flat,natural,sharp,dbl_sharp\n\t//\t\tpitch: \"C\" is 0. The numbers refer to the pitch letter.\n\t//\t\tduration: .5 (sixteenth), .75 (dotted sixteenth), 1 (eighth), 1.5 (dotted eighth)\n\t//\t\t\t2 (quarter), 3 (dotted quarter), 4 (half), 6 (dotted half) 8 (whole)\n\t//\t\tchord: { name:chord, position: one of 'default', 'above', 'below' }\n\t//\t\tend_beam = true or undefined if this is the last note in a beam.\n\t//\t\tlyric: array of { syllable: xxx, divider: one of \" -_\" }\n\t//\t\tstartTie = true|undefined\n\t//\t\tendTie = true|undefined\n\t//\t\tstartTriplet = num <- that is the number to print\n\t//\t\tendTriplet = true|undefined (the last note of the triplet)\n\t// TODO: actually, decoration should be an array.\n\t//\t\tdecoration: upbow, downbow, accent\n\t// BAR: type=bar_thin, bar_thin_thick, bar_thin_thin, bar_thick_thin, bar_right_repeat, bar_left_repeat, bar_double_repeat\n\t//\tnumber: 1 or 2: if it is the start of a first or second ending\n\t// CLEF: type=treble,bass\n\t// KEY-SIG:\n\t//\t\taccidentals[]: { acc:sharp|dblsharp|natural|flat|dblflat, note:a|b|c|d|e|f|g }\n\t// METER: type: common_time,cut_time,specified\n\t//\t\tif specified, { num: 99, den: 99 }\n\n\tthis.getBeatLength = function() {\n\t\t// This returns a fraction: for instance 1/4 for a quarter\n\t\t// There are two types of meters: compound and regular. Compound meter has 3 beats counted as one.\n\t\tvar meter = this.getMeterFraction();\n\t\tvar multiplier = 1;\n\t\tif (meter.num === 6 || meter.num === 9 || meter.num === 12)\n\t\t\tmultiplier = 3;\n\t\telse if (meter.num === 3 && meter.den === 8)\n\t\t\tmultiplier = 3;\n\n\t\treturn multiplier / meter.den;\n\t};\n\n\tfunction computePickupLength(lines, barLength) {\n\t\tvar pickupLength = 0;\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tif (lines[i].staff) {\n\t\t\t\tfor (var j = 0; j < lines[i].staff.length; j++) {\n\t\t\t\t\tfor (var v = 0; v < lines[i].staff[j].voices.length; v++) {\n\t\t\t\t\t\tvar voice = lines[i].staff[j].voices[v];\n\t\t\t\t\t\tvar tripletMultiplier = 1;\n\t\t\t\t\t\tfor (var el = 0; el < voice.length; el++) {\n\t\t\t\t\t\t\tvar isSpacer = voice[el].rest && voice[el].rest.type === \"spacer\";\n\t\t\t\t\t\t\tif (voice[el].startTriplet)\n\t\t\t\t\t\t\t\ttripletMultiplier = voice[el].tripletMultiplier;\n\t\t\t\t\t\t\tif (voice[el].duration && !isSpacer && voice[el].el_type !== \"tempo\")\n\t\t\t\t\t\t\t\tpickupLength += voice[el].duration * tripletMultiplier;\n\t\t\t\t\t\t\tif (voice[el].endTriplet)\n\t\t\t\t\t\t\t\ttripletMultiplier = 1;\n\t\t\t\t\t\t\tif (pickupLength >= barLength)\n\t\t\t\t\t\t\t\tpickupLength -= barLength;\n\t\t\t\t\t\t\tif (voice[el].el_type === 'bar')\n\t\t\t\t\t\t\t\treturn pickupLength;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn pickupLength;\n\t}\n\tthis.getPickupLength = function() {\n\t\tvar barLength = this.getBarLength();\n\t\tvar pickupLength = computePickupLength(this.lines, barLength);\n\n\t\t// If computed pickup length is very close to 0 or the bar length, we assume\n\t\t// that we actually have a full bar and hence no pickup.\n\t\treturn (pickupLength < 1e-8 || barLength-pickupLength < 1e-8) ? 0 : pickupLength;\n\t};\n\n\tthis.getBarLength = function() {\n\t\tvar meter = this.getMeterFraction();\n\t\treturn meter.num / meter.den;\n\t};\n\n\tthis.getTotalTime = function() {\n\t\treturn this.totalTime;\n\t};\n\n\tthis.getTotalBeats = function() {\n\t\treturn this.totalBeats;\n\t};\n\n\tthis.millisecondsPerMeasure = function(bpmOverride) {\n\t\tvar bpm;\n\t\tif (bpmOverride) {\n\t\t\tbpm = bpmOverride;\n\t\t} else {\n\t\t\tvar tempo = this.metaText ? this.metaText.tempo : null;\n\t\t\tbpm = this.getBpm(tempo);\n\t\t}\n\t\tif (bpm <= 0)\n\t\t\tbpm = 1; // I don't think this can happen, but we don't want a possibility of dividing by zero.\n\n\t\tvar beatsPerMeasure = this.getBeatsPerMeasure();\n\n\t\tvar minutesPerMeasure = beatsPerMeasure / bpm;\n\t\treturn minutesPerMeasure * 60000;\n\t};\n\n\tthis.getBeatsPerMeasure = function() {\n\t\tvar beatLen = this.getBeatLength();\n\t\tvar barLen = this.getBarLength();\n\t\treturn barLen / beatLen;\n\t};\n\n\tthis.getMeter = function() {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar meter = line.staff[j].meter;\n\t\t\t\t\tif (meter) {\n\t\t\t\t\t\treturn meter;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { type: \"common_time\" };\n\t};\n\n\tthis.getMeterFraction = function() {\n\t\tvar meter = this.getMeter();\n\t\tvar num = 4;\n\t\tvar den = 4;\n\t\tif (meter) {\n\t\t\tif (meter.type === 'specified') {\n\t\t\t\tnum = parseInt(meter.value[0].num, 10);\n\t\t\t\tden = parseInt(meter.value[0].den,10);\n\t\t\t} else if (meter.type === 'cut_time') {\n\t\t\t\tnum = 2;\n\t\t\t\tden = 2;\n\t\t\t} else if (meter.type === 'common_time') {\n\t\t\t\tnum = 4;\n\t\t\t\tden = 4;\n\t\t\t}\n\t\t}\n\t\tthis.meter = { num: num, den: den };\n\t\treturn this.meter; // TODO-PER: is this saved value used anywhere? A get function shouldn't change state.\n\t};\n\n\tthis.getKeySignature = function() {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tif (line.staff[j].key)\n\t\t\t\t\t\treturn line.staff[j].key;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { };\n\t};\n\n\tthis.getElementFromChar = function(char) {\n\t\tfor (var i = 0; i < this.lines.length; i++) {\n\t\t\tvar line = this.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\tfor (var ii = 0; ii < voice.length; ii++) {\n\t\t\t\t\t\t\tvar elem = voice[ii];\n\t\t\t\t\t\t\tif (elem.startChar && elem.endChar &&\n\t\t\t\t\t\t\t\telem.startChar <= char && elem.endChar > char)\n\t\t\t\t\t\t\t\treturn elem;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tfunction addVerticalInfo(timingEvents) {\n\t\t// Add vertical info to the bar events: put the next event's top, and the event after the next measure's top.\n\t\tvar lastBarTop;\n\t\tvar lastBarBottom;\n\t\tvar lastEventTop;\n\t\tvar lastEventBottom;\n\t\tfor (var e = timingEvents.length - 1; e >= 0; e--) {\n\t\t\tvar ev = timingEvents[e];\n\t\t\tif (ev.type === 'bar') {\n\t\t\t\tev.top = lastEventTop;\n\t\t\t\tev.nextTop = lastBarTop;\n\t\t\t\tlastBarTop = lastEventTop;\n\n\t\t\t\tev.bottom = lastEventBottom;\n\t\t\t\tev.nextBottom = lastBarBottom;\n\t\t\t\tlastBarBottom = lastEventBottom;\n\t\t\t} else if (ev.type === 'event') {\n\t\t\t\tlastEventTop = ev.top;\n\t\t\t\tlastEventBottom = ev.top + ev.height;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction makeSortedArray(hash) {\n\t\tvar arr = [];\n\t\tfor (var k in hash) {\n\t\t\tif (hash.hasOwnProperty(k))\n\t\t\t\tarr.push(hash[k]);\n\t\t}\n\t\tarr = arr.sort(function (a, b) {\n\t\t\tvar diff = a.milliseconds - b.milliseconds;\n\t\t\t// if the events have the same time, make sure a bar comes before a note\n\t\t\tif (diff !== 0) {\n\t\t\t\treturn diff;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn a.type === \"bar\" ? -1 : 1;\n\t\t\t}\n\t\t});\n\t\treturn arr;\n\t}\n\n\tthis.addElementToEvents = function(eventHash, element, voiceTimeMilliseconds, top, height, line, measureNumber, timeDivider, isTiedState, nextIsBar) {\n\t\tif (element.hint)\n\t\t\treturn { isTiedState: undefined, duration: 0 };\n\t\tvar realDuration = element.durationClass ? element.durationClass : element.duration;\n\t\tif (element.abcelem.rest && element.abcelem.rest.type === \"spacer\")\n\t\t\trealDuration = 0;\n\t\tif (realDuration > 0) {\n\t\t\tvar es = [];\n\t\t\t// If there is an invisible rest, then there are not elements, so don't push a null one.\n\t\t\tfor (var i = 0; i < element.elemset.length; i++) {\n\t\t\t\tif (element.elemset[i] !== null)\n\t\t\t\t\tes.push(element.elemset[i]);\n\t\t\t}\n\t\t\tvar isTiedToNext = element.startTie;\n\t\t\tif (isTiedState !== undefined) {\n\t\t\t\teventHash[\"event\" + isTiedState].elements.push(es); // Add the tied note to the first note that it is tied to\n\t\t\t\tif (nextIsBar) {\n\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds]) {\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds] = {\n\t\t\t\t\t\t\ttype: \"event\",\n\t\t\t\t\t\t\tmilliseconds: voiceTimeMilliseconds,\n\t\t\t\t\t\t\tline: line,\n\t\t\t\t\t\t\tmeasureNumber: measureNumber,\n\t\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\t\theight: height,\n\t\t\t\t\t\t\tleft: null,\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\telements: [],\n\t\t\t\t\t\t\tstartChar: null,\n\t\t\t\t\t\t\tendChar: null,\n\t\t\t\t\t\t\tstartCharArray: [],\n\t\t\t\t\t\t\tendCharArray: []\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].measureStart = true;\n\t\t\t\t\tnextIsBar = false;\n\t\t\t\t}\n\t\t\t\tif (!isTiedToNext)\n\t\t\t\t\tisTiedState = undefined;\n\t\t\t} else {\n\t\t\t\t// the last note wasn't tied.\n\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds]) {\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds] = {\n\t\t\t\t\t\ttype: \"event\",\n\t\t\t\t\t\tmilliseconds: voiceTimeMilliseconds,\n\t\t\t\t\t\tline: line,\n\t\t\t\t\t\tmeasureNumber: measureNumber,\n\t\t\t\t\t\ttop: top,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: element.x,\n\t\t\t\t\t\twidth: element.w,\n\t\t\t\t\t\telements: [es],\n\t\t\t\t\t\tstartChar: element.abcelem.startChar,\n\t\t\t\t\t\tendChar: element.abcelem.endChar,\n\t\t\t\t\t\tstartCharArray: [element.abcelem.startChar],\n\t\t\t\t\t\tendCharArray: [element.abcelem.endChar],\n\t\t\t\t\t\tmidiPitches: element.abcelem.midiPitches ? parseCommon.cloneArray(element.abcelem.midiPitches) : []\n\t\t\t\t\t};\n\t\t\t\t\tif (element.abcelem.midiGraceNotePitches)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches = parseCommon.cloneArray(element.abcelem.midiGraceNotePitches);\n\t\t\t\t} else {\n\t\t\t\t\t// If there is more than one voice then two notes can fall at the same time. Usually they would be lined up in the same place, but if it is a whole rest, then it is placed funny. In any case, the left most element wins.\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].left)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].left = Math.min(eventHash[\"event\" + voiceTimeMilliseconds].left, element.x);\n\t\t\t\t\telse\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].left = element.x;\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].elements.push(es);\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].startCharArray.push(element.abcelem.startChar);\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].endCharArray.push(element.abcelem.endChar);\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].startChar === null)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].startChar =element.abcelem.startChar;\n\t\t\t\t\tif (eventHash[\"event\" + voiceTimeMilliseconds].endChar === null)\n\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].endChar =element.abcelem.endChar;\n\t\t\t\t\tif (element.abcelem.midiPitches && element.abcelem.midiPitches.length) {\n\t\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds].midiPitches)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiPitches = [];\n\t\t\t\t\t\tfor (var i = 0; i < element.abcelem.midiPitches.length; i++)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiPitches.push(element.abcelem.midiPitches[i]);\n\t\t\t\t\t}\n\t\t\t\t\tif (element.abcelem.midiGraceNotePitches && element.abcelem.midiGraceNotePitches.length) {\n\t\t\t\t\t\tif (!eventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches = [];\n\t\t\t\t\t\tfor (var j = 0; j < element.abcelem.midiGraceNotePitches.length; j++)\n\t\t\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].midiGraceNotePitches.push(element.abcelem.midiGraceNotePitches[j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (nextIsBar) {\n\t\t\t\t\teventHash[\"event\" + voiceTimeMilliseconds].measureStart = true;\n\t\t\t\t\tnextIsBar = false;\n\t\t\t\t}\n\t\t\t\tif (isTiedToNext)\n\t\t\t\t\tisTiedState = voiceTimeMilliseconds;\n\t\t\t}\n\t\t}\n\t\treturn { isTiedState: isTiedState, duration: realDuration / timeDivider, nextIsBar: nextIsBar || element.type === 'bar' };\n\t};\n\n\tthis.makeVoicesArray = function() {\n\t\t// First make a new array that is arranged by voice so that the repeats that span different lines are handled correctly.\n\t\tvar voicesArr = [];\n\t\tvar measureNumber = [];\n\t\tvar tempos = {};\n\t\tfor (var line = 0; line < this.engraver.staffgroups.length; line++) {\n\t\t\tvar group = this.engraver.staffgroups[line];\n\t\t\tif (group && group.staffs && group.staffs.length > 0) {\n\t\t\t\tvar firstStaff = group.staffs[0];\n\t\t\t\tvar middleC = firstStaff.absoluteY;\n\t\t\t\tvar top = middleC - firstStaff.top * spacing.STEP;\n\t\t\t\tvar lastStaff = group.staffs[group.staffs.length - 1];\n\t\t\t\tmiddleC = lastStaff.absoluteY;\n\t\t\t\tvar bottom = middleC - lastStaff.bottom * spacing.STEP;\n\t\t\t\tvar height = bottom - top;\n\n\t\t\t\tvar voices = group.voices;\n\t\t\t\tfor (var v = 0; v < voices.length; v++) {\n\t\t\t\t\tif (voices[v].staff && voices[v].staff.isTabStaff)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tvar noteFound = false;\n\t\t\t\t\tif (!voicesArr[v])\n\t\t\t\t\t\tvoicesArr[v] = [];\n\t\t\t\t\tif (measureNumber[v] === undefined)\n\t\t\t\t\t\tmeasureNumber[v] = 0;\n\t\t\t\t\tvar elements = voices[v].children;\n\t\t\t\t\tfor (var elem = 0; elem < elements.length; elem++) {\n\t\t\t\t\t\tif (elements[elem].type === \"tempo\")\n\t\t\t\t\t\t\ttempos[measureNumber[v]] = this.getBpm(elements[elem].abcelem);\n\t\t\t\t\t\tvoicesArr[v].push({top: top, height: height, line: group.line, measureNumber: measureNumber[v], elem: elements[elem]});\n\t\t\t\t\t\tif (elements[elem].type === 'bar' && noteFound) // Count the measures by counting the bar lines, but skip a bar line that appears at the left of the music, before any notes.\n\t\t\t\t\t\t\tmeasureNumber[v]++;\n\t\t\t\t\t\tif (elements[elem].type === 'note' || elements[elem].type === 'rest')\n\t\t\t\t\t\t\tnoteFound = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.tempoLocations = tempos; // This should be passed back, but the function is accessible publicly so that would break the interface.\n\t\treturn voicesArr;\n\t};\n\n\tthis.setupEvents = function(startingDelay, timeDivider, startingBpm, warp) {\n\t\tif (!warp) warp = 1;\n\t\tvar timingEvents = [];\n\n\t\tvar eventHash = {};\n\t\t// The time is the number of seconds from the beginning of the piece.\n\t\t// The units we are scanning are in notation units (i.e. 0.25 is a quarter note)\n\t\tvar time = startingDelay;\n\t\tvar isTiedState;\n\t\tvar nextIsBar = true;\n\t\tvar voices = this.makeVoicesArray();\n\t\tvar maxVoiceTimeMilliseconds = 0;\n\t\tfor (var v = 0; v < voices.length; v++) {\n\t\t\tvar voiceTime = time;\n\t\t\tvar voiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\tvar startingRepeatElem = 0;\n\t\t\tvar endingRepeatElem = -1;\n\t\t\tvar elements = voices[v];\n\t\t\tvar bpm = startingBpm;\n\t\t\ttimeDivider = this.getBeatLength() * bpm / 60;\n\t\t\tvar tempoDone = -1;\n\t\t\tfor (var elem = 0; elem < elements.length; elem++) {\n\t\t\t\tvar thisMeasure = elements[elem].measureNumber;\n\t\t\t\tif (tempoDone !== thisMeasure && this.tempoLocations[thisMeasure]) {\n\t\t\t\t\tbpm = this.tempoLocations[thisMeasure];\n\t\t\t\t\ttimeDivider = warp * this.getBeatLength() * bpm / 60;\n\t\t\t\t\ttempoDone = thisMeasure;\n\t\t\t\t}\n\t\t\t\tvar element = elements[elem].elem;\n\t\t\t\tvar ret = this.addElementToEvents(eventHash, element, voiceTimeMilliseconds, elements[elem].top, elements[elem].height, elements[elem].line, elements[elem].measureNumber, timeDivider, isTiedState, nextIsBar);\n\t\t\t\tisTiedState = ret.isTiedState;\n\t\t\t\tnextIsBar = ret.nextIsBar;\n\t\t\t\tvoiceTime += ret.duration;\n\t\t\t\tvar lastHash;\n\t\t\t\tif (element.duration > 0 && eventHash[\"event\" + voiceTimeMilliseconds]) // This won't exist if this is the end of a tie.\n\t\t\t\t\tlastHash = \"event\" + voiceTimeMilliseconds;\n\t\t\t\tvoiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\t\tif (element.type === 'bar') {\n\t\t\t\t\tvar barType = element.abcelem.type;\n\t\t\t\t\tvar endRepeat = (barType === \"bar_right_repeat\" || barType === \"bar_dbl_repeat\");\n\t\t\t\t\tvar startEnding = (element.abcelem.startEnding === '1');\n\t\t\t\t\tvar startRepeat = (barType === \"bar_left_repeat\" || barType === \"bar_dbl_repeat\" || barType === \"bar_right_repeat\");\n\t\t\t\t\tif (endRepeat) {\n\t\t\t\t\t\t// Force the end of the previous note to the position of the measure - the cursor won't go past the end repeat\n\t\t\t\t\t\tif (elem > 0) {\n\t\t\t\t\t\t\teventHash[lastHash].endX = element.x;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (endingRepeatElem === -1)\n\t\t\t\t\t\t\tendingRepeatElem = elem;\n\t\t\t\t\t\tvar lastVoiceTimeMilliseconds = 0;\n\t\t\t\t\t\ttempoDone = -1;\n\t\t\t\t\t\tfor (var el2 = startingRepeatElem; el2 < endingRepeatElem; el2++) {\n\t\t\t\t\t\t\tthisMeasure = elements[el2].measureNumber;\n\t\t\t\t\t\t\tif (tempoDone !== thisMeasure && this.tempoLocations[thisMeasure]) {\n\t\t\t\t\t\t\t\tbpm = this.tempoLocations[thisMeasure];\n\t\t\t\t\t\t\t\ttimeDivider = warp * this.getBeatLength() * bpm / 60;\n\t\t\t\t\t\t\t\ttempoDone = thisMeasure;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar element2 = elements[el2].elem;\n\t\t\t\t\t\t\tret = this.addElementToEvents(eventHash, element2, voiceTimeMilliseconds, elements[el2].top, elements[el2].height, elements[el2].line, elements[el2].measureNumber, timeDivider, isTiedState, nextIsBar);\n\t\t\t\t\t\t\tisTiedState = ret.isTiedState;\n\t\t\t\t\t\t\tnextIsBar = ret.nextIsBar;\n\t\t\t\t\t\t\tvoiceTime += ret.duration;\n\t\t\t\t\t\t\tlastVoiceTimeMilliseconds = voiceTimeMilliseconds;\n\t\t\t\t\t\t\tvoiceTimeMilliseconds = Math.round(voiceTime * 1000);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (eventHash[\"event\" + lastVoiceTimeMilliseconds]) // This won't exist if it is the beginning of the next line. That's ok because we will just count the end of the last line as the end.\n\t\t\t\t\t\t\teventHash[\"event\" + lastVoiceTimeMilliseconds].endX = elements[endingRepeatElem].elem.x;\n\t\t\t\t\t\tnextIsBar = true;\n\t\t\t\t\t\tendingRepeatElem = -1;\n\t\t\t\t\t}\n\t\t\t\t\tif (startEnding)\n\t\t\t\t\t\tendingRepeatElem = elem;\n\t\t\t\t\tif (startRepeat)\n\t\t\t\t\t\tstartingRepeatElem = elem;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaxVoiceTimeMilliseconds = Math.max(maxVoiceTimeMilliseconds, voiceTimeMilliseconds)\n\t\t}\n\t\t// now we have all the events, but if there are multiple voices then there may be events out of order or duplicated, so normalize it.\n\t\ttimingEvents = makeSortedArray(eventHash);\n\t\taddVerticalInfo(timingEvents);\n\t\taddEndPoints(this.lines, timingEvents)\n\t\ttimingEvents.push({ type: \"end\", milliseconds: maxVoiceTimeMilliseconds });\n\t\tthis.addUsefulCallbackInfo(timingEvents, bpm*warp);\n\t\treturn timingEvents;\n\t};\n\n\tthis.addUsefulCallbackInfo = function(timingEvents, bpm) {\n\t\tvar millisecondsPerMeasure = this.millisecondsPerMeasure(bpm);\n\t\tfor (var i = 0; i < timingEvents.length; i++) {\n\t\t\tvar ev = timingEvents[i];\n\t\t\tev.millisecondsPerMeasure = millisecondsPerMeasure;\n\t\t}\n\t};\n\n\tfunction skipTies(elements, index) {\n\t\twhile (index < elements.length && elements[index].left === null)\n\t\t\tindex++;\n\t\treturn elements[index];\n\t}\n\tfunction addEndPoints(lines, elements) {\n\t\tif (elements.length < 1)\n\t\t\treturn;\n\t\tfor (var i = 0; i < elements.length-1; i++) {\n\t\t\tvar el = elements[i];\n\t\t\tvar next = skipTies(elements, i+1);\n\t\t\tif (el.left !== null) {\n\t\t\t\t// If there is no left element that is because this is a tie so it should be skipped.\n\t\t\t\tvar endX = (next && el.top === next.top) ? next.left : lines[el.line].staffGroup.w;\n\t\t\t\t// If this is already set, it is because the notes aren't sequential here, like the next thing is a repeat bar line.\n\t\t\t\t// In that case, the right-most position is passed in. There could still be an intervening note in another voice, so always look for the closest position.\n\t\t\t\t// If there is a repeat that stays on the same line, the endX set above won't be right because the next note will be before. In that case, use the endX that was calculated.\n\t\t\t\tif (el.endX !== undefined) {\n\t\t\t\t\tif (endX > el.left)\n\t\t\t\t\t\tel.endX = Math.min(el.endX, endX);\n\t\t\t\t} else\n\t\t\t\t\tel.endX = endX;\n\t\t\t}\n\t\t}\n\t\tvar lastEl = elements[elements.length-1];\n\t\tlastEl.endX = lines[lastEl.line].staffGroup.w;\n\t}\n\n\tthis.getBpm = function(tempo) {\n\t\tvar bpm;\n\t\tif (tempo) {\n\t\t\tbpm = tempo.bpm;\n\t\t\tvar beatLength = this.getBeatLength();\n\t\t\tvar statedBeatLength = tempo.duration && tempo.duration.length > 0 ? tempo.duration[0] : beatLength;\n\t\t\tbpm = bpm * statedBeatLength / beatLength;\n\t\t}\n\t\tif (!bpm) {\n\t\t\tbpm = 180;\n\t\t\t// Compensate for compound meter, where the beat isn't a beat.\n\t\t\tvar meter = this.getMeterFraction();\n\t\t\tif (meter && meter.num !== 3 && (meter.num % 3 === 0)) {\n\t\t\t\tbpm = 120;\n\t\t\t}\n\t\t}\n\t\treturn bpm;\n\t};\n\n\tthis.setTiming = function (bpm, measuresOfDelay) {\n\t\tmeasuresOfDelay = measuresOfDelay || 0;\n\t\tif (!this.engraver || !this.engraver.staffgroups) {\n\t\t\tconsole.log(\"setTiming cannot be called before the tune is drawn.\");\n\t\t\tthis.noteTimings = [];\n\t\t\treturn this.noteTimings;\n\t\t}\n\n\t\tvar tempo = this.metaText ? this.metaText.tempo : null;\n\t\tvar naturalBpm = this.getBpm(tempo);\n\t\tvar warp = 1;\n\t\tif (bpm) {\n\t\t\tif (tempo)\n\t\t\t\twarp = bpm / naturalBpm;\n\t\t} else\n\t\t\tbpm = naturalBpm;\n\n\t\t// Calculate the basic midi data. We only care about the qpm variable here.\n\t\t//this.setUpAudio({qpm: bpm});\n\n\t\tvar beatLength = this.getBeatLength();\n\t\tvar beatsPerSecond = bpm / 60;\n\n\t\tvar measureLength = this.getBarLength();\n\n\t\tvar startingDelay = measureLength / beatLength * measuresOfDelay / beatsPerSecond;\n\t\tif (startingDelay)\n\t\t\tstartingDelay -= this.getPickupLength() / beatLength / beatsPerSecond;\n\t\tvar timeDivider = beatLength * beatsPerSecond;\n\n\t\tthis.noteTimings = this.setupEvents(startingDelay, timeDivider, bpm, warp);\n\t\tif (this.noteTimings.length > 0) {\n\t\t\tthis.totalTime = this.noteTimings[this.noteTimings.length - 1].milliseconds / 1000;\n\t\t\tthis.totalBeats = this.totalTime * beatsPerSecond;\n\t\t} else {\n\t\t\tthis.totalTime = undefined;\n\t\t\tthis.totalBeats = undefined;\n\t\t}\n\t\treturn this.noteTimings;\n\t};\n\n\tthis.setUpAudio = function(options) {\n\t\tif (!options) options = {};\n\t\tvar seq = sequence(this, options);\n\t\treturn flatten(seq, options, this.formatting.percmap, this.formatting.midi);\n\t};\n\tthis.deline = function(options) {\n\t\treturn delineTune(this.lines, options);\n\t}\n};\n\nmodule.exports = Tune;\n","function delineTune(inputLines, options) {\n\tif (!options) options = {};\n\tvar lineBreaks = !!options.lineBreaks;\n\tvar outputLines = [];\n\tvar inMusicLine = false;\n\tvar currentMeter = [];\n\tvar currentKey = [];\n\tvar currentClef = [];\n\tvar currentVocalFont = [];\n\tvar currentGChordFont = [];\n\tvar currentTripletFont = [];\n\tvar currentAnnotationFont = [];\n\tfor (var i = 0; i < inputLines.length; i++) {\n\t\tvar inputLine = inputLines[i];\n\t\tif (inputLine.staff) {\n\t\t\tif (inMusicLine && !inputLine.vskip) {\n\t\t\t\tvar outputLine = outputLines[outputLines.length-1];\n\t\t\t\t//findMismatchKeys(inputLine, outputLine, [\"staff\", \"staffGroup\"], \"line\", i)\n\t\t\t\tfor (var s = 0; s < outputLine.staff.length; s++) {\n\t\t\t\t\tvar inputStaff = inputLine.staff[s];\n\t\t\t\t\tvar outputStaff = outputLine.staff[s];\n\t\t\t\t\tif (inputStaff) {\n\t\t\t\t\t\tif (!objEqual(inputStaff.meter, currentMeter[s])) {\n\t\t\t\t\t\t\t// The meter changed for this line, otherwise it wouldn't have been set\n\t\t\t\t\t\t\taddMeterToVoices(inputStaff.meter, inputStaff.voices)\n\t\t\t\t\t\t\tcurrentMeter[s] = inputStaff.meter;\n\t\t\t\t\t\t\tdelete inputStaff.meter;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.key, currentKey[s])) {\n\t\t\t\t\t\t\taddKeyToVoices(inputStaff.key, inputStaff.voices);\n\t\t\t\t\t\t\tcurrentKey[s] = inputStaff.key;\n\t\t\t\t\t\t\tdelete inputStaff.key;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (inputStaff.title)\n\t\t\t\t\t\t\toutputStaff.abbrevTitle = inputStaff.title;\n\t\t\t\t\t\tif (!objEqual(inputStaff.clef, currentClef[s])) {\n\t\t\t\t\t\t\taddClefToVoices(inputStaff.clef, inputStaff.voices);\n\t\t\t\t\t\t\tcurrentClef[s] = inputStaff.clef;\n\t\t\t\t\t\t\tdelete inputStaff.clef;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.vocalfont, currentVocalFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.vocalfont, inputStaff.voices, 'vocalfont')\n\t\t\t\t\t\t\tcurrentVocalFont[s] = inputStaff.vocalfont;\n\t\t\t\t\t\t\tdelete inputStaff.vocalfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.gchordfont, currentGChordFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.gchordfont, inputStaff.voices, 'gchordfont')\n\t\t\t\t\t\t\tcurrentGChordFont[s] = inputStaff.gchordfont;\n\t\t\t\t\t\t\tdelete inputStaff.gchordfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.tripletfont, currentTripletFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.tripletfont, inputStaff.voices, 'tripletfont')\n\t\t\t\t\t\t\tcurrentTripletFont[s] = inputStaff.tripletfont;\n\t\t\t\t\t\t\tdelete inputStaff.tripletfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!objEqual(inputStaff.annotationfont, currentAnnotationFont[s])) {\n\t\t\t\t\t\t\taddFontToVoices(inputStaff.annotationfont, inputStaff.voices, 'annotationfont')\n\t\t\t\t\t\t\tcurrentAnnotationFont[s] = inputStaff.annotationfont;\n\t\t\t\t\t\t\tdelete inputStaff.annotationfont;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//findMismatchKeys(inputStaff, outputStaff, [\"voices\", \"title\", \"abbrevTitle\", \"barNumber\", \"meter\", \"key\", \"clef\", \"vocalfont\", \"gchordfont\", \"tripletfont\", \"annotationfont\"], \"staff\", i + ' ' + s)\n\t\t\t\t\tif (inputStaff) {\n\t\t\t\t\t\tfor (var v = 0; v < outputStaff.voices.length; v++) {\n\t\t\t\t\t\t\tvar outputVoice = outputStaff.voices[v];\n\t\t\t\t\t\t\tvar inputVoice = inputStaff.voices[v];\n\t\t\t\t\t\t\tif (lineBreaks)\n\t\t\t\t\t\t\t\toutputVoice.push({el_type: \"break\"});\n\t\t\t\t\t\t\tif (inputVoice)\n\t\t\t\t\t\t\t\toutputStaff.voices[v] = outputVoice.concat(inputVoice)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (var ii = 0; ii < inputLine.staff.length; ii++) {\n\t\t\t\t\tcurrentKey[ii] = inputLine.staff[ii].key;\n\t\t\t\t\tcurrentMeter[ii] = inputLine.staff[ii].meter;\n\t\t\t\t\tcurrentClef[ii] = inputLine.staff[ii].clef;\n\t\t\t\t}\n\t\t\t\t// copy this because we are going to change it and we don't want to change the original.\n\t\t\t\toutputLines.push(cloneLine(inputLine));\n\t\t\t}\n\t\t\tinMusicLine = true;\n\t\t} else {\n\t\t\tinMusicLine = false;\n\t\t\toutputLines.push(inputLine);\n\t\t}\n\t}\n\treturn outputLines;\n}\n// function findMismatchKeys(input, output, ignore, context, context2) {\n// \tif (!input) {\n// \t\treturn;\n// \t}\n// \tvar outputKeys = Object.keys(output);\n// \tvar inputKeys = Object.keys(input);\n// \tfor (var ii = 0; ii < ignore.length; ii++) {\n// \t\tif (outputKeys.indexOf(ignore[ii]) >= 0) {\n// \t\t\toutputKeys.splice(outputKeys.indexOf(ignore[ii]), 1);\n// \t\t}\n// \t\tif (inputKeys.indexOf(ignore[ii]) >= 0) {\n// \t\t\tinputKeys.splice(inputKeys.indexOf(ignore[ii]), 1);\n// \t\t}\n// \t}\n// \tif (inputKeys.join(\",\") !== outputKeys.join(\",\")) {\n// \t\tconsole.log(\"keys mismatch \"+context + ' ' + context2, input, output);\n// \t}\n// \tfor (var k = 0; k < inputKeys.length; k++) {\n// \t\tvar key = inputKeys[k];\n// \t\tif (ignore.indexOf(key) < 0) {\n// \t\t\tvar inputValue = JSON.stringify(input[key], replacer);\n// \t\t\tvar outputValue = JSON.stringify(output[key], replacer);\n// \t\t\tif (inputValue !== outputValue)\n// \t\t\t\tconsole.log(\"value mismatch \"+context + ' ' + context2 + ' ' + key, inputValue, outputValue)\n// \t\t}\n// \t}\n// }\nfunction replacer(key, value) {\n\t// Filtering out properties\n\tif (key === 'abselem') {\n\t\treturn 'abselem';\n\t}\n\treturn value;\n}\n\nfunction addMeterToVoices(meter, voices) {\n\tmeter.el_type = \"meter\";\n\tmeter.startChar = -1;\n\tmeter.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(meter);\n\t}\n}\n\nfunction addKeyToVoices(key, voices) {\n\tkey.el_type = \"key\";\n\tkey.startChar = -1;\n\tkey.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(key);\n\t}\n}\n\nfunction addClefToVoices(clef, voices) {\n\tclef.el_type = \"clef\";\n\tclef.startChar = -1;\n\tclef.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(clef);\n\t}\n}\n\nfunction addFontToVoices(font, voices, type) {\n\tfont.el_type = \"font\";\n\tfont.type = type;\n\tfont.startChar = -1;\n\tfont.endChar = -1;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvoices[i].unshift(font);\n\t}\n}\n\nfunction objEqual(input, output) {\n\tif (!input)\n\t\treturn true; // the default is whatever the old output is.\n\tvar inputValue = JSON.stringify(input, replacer);\n\tvar outputValue = JSON.stringify(output, replacer);\n\treturn inputValue === outputValue;\n}\n\nfunction cloneLine(line) {\n\tvar output = {};\n\tvar keys = Object.keys(line);\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tif (keys[i] !== \"staff\")\n\t\t\toutput[keys[i]] = line[keys[i]];\n\t\telse {\n\t\t\toutput.staff = [];\n\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\tvar staff = {};\n\t\t\t\tvar keys2 = Object.keys(line.staff[j]);\n\t\t\t\tfor (var k = 0; k < keys2.length; k++) {\n\t\t\t\t\tif (keys2[k] !== \"voices\")\n\t\t\t\t\t\tstaff[keys2[k]] = line.staff[j][keys2[k]];\n\t\t\t\t\telse {\n\t\t\t\t\t\tstaff.voices = [];\n\t\t\t\t\t\tfor (var v = 0; v < line.staff[j].voices.length; v++) {\n\t\t\t\t\t\t\tstaff.voices.push([].concat(line.staff[j].voices[v]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\toutput.staff.push(staff)\n\t\t\t}\n\t\t}\n\t}\n\treturn output;\n}\n\nmodule.exports = delineTune;\n","// abc_editor.js\n\n// window.ABCJS.Editor is the interface class for the area that contains the ABC text. It is responsible for\n// holding the text of the tune and calling the parser and the rendering engines.\n//\n// EditArea is an example of using a textarea as the control that is shown to the user. As long as\n// the same interface is used, window.ABCJS.Editor can use a different type of object.\n//\n// EditArea:\n// - constructor(textareaid)\n//\t\tThis contains the id of a textarea control that will be used.\n// - addSelectionListener(listener)\n//\t\tA callback class that contains the entry point fireSelectionChanged()\n// - addChangeListener(listener)\n//\t\tA callback class that contains the entry point fireChanged()\n// - getSelection()\n//\t\treturns the object { start: , end: } with the current selection in characters\n// - setSelection(start, end)\n//\t\tstart and end are the character positions that should be selected.\n// - getString()\n//\t\treturns the ABC text that is currently displayed.\n// - setString(str)\n//\t\tsets the ABC text that is currently displayed, and resets the initialText variable\n// - getElem()\n//\t\treturns the textarea element\n// - string initialText\n//\t\tContains the starting text. This can be compared against the current text to see if anything changed.\n//\n\n// Polyfill for CustomEvent for old IE versions\ntry {\n\tif (typeof window.CustomEvent !== \"function\") {\n\t\tvar CustomEvent = function (event, params) {\n\t\t\tparams = params || {bubbles: false, cancelable: false, detail: undefined};\n\t\t\tvar evt = document.createEvent('CustomEvent');\n\t\t\tevt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n\t\t\treturn evt;\n\t\t};\n\t\tCustomEvent.prototype = window.Event.prototype;\n\t\twindow.CustomEvent = CustomEvent;\n\t}\n} catch (e) {\n\t// if we aren't in a browser, this code will crash, but it is not needed then either.\n}\n\nvar EditArea = function(textareaid) {\n this.textarea = document.getElementById(textareaid);\n this.initialText = this.textarea.value;\n this.isDragging = false;\n}\n\nEditArea.prototype.addSelectionListener = function(listener) {\n this.textarea.onmousemove = function(ev) {\n\t if (this.isDragging)\n\t listener.fireSelectionChanged();\n };\n};\n\nEditArea.prototype.addChangeListener = function(listener) {\n this.changelistener = listener;\n this.textarea.onkeyup = function() {\n listener.fireChanged();\n };\n this.textarea.onmousedown = function() {\n\tthis.isDragging = true;\n listener.fireSelectionChanged();\n };\n this.textarea.onmouseup = function() {\n\tthis.isDragging = false;\n listener.fireChanged();\n };\n this.textarea.onchange = function() {\n listener.fireChanged();\n };\n};\n\n//TODO won't work under IE?\nEditArea.prototype.getSelection = function() {\n return {start: this.textarea.selectionStart, end: this.textarea.selectionEnd};\n};\n\nEditArea.prototype.setSelection = function(start, end) {\n\tif(this.textarea.setSelectionRange)\n\t this.textarea.setSelectionRange(start, end);\n\telse if(this.textarea.createTextRange) {\n\t\t// For IE8\n\t var e = this.textarea.createTextRange();\n\t e.collapse(true);\n\t e.moveEnd('character', end);\n\t e.moveStart('character', start);\n\t e.select();\n\t}\n this.textarea.focus();\n};\n\nEditArea.prototype.getString = function() {\n return this.textarea.value;\n};\n\nEditArea.prototype.setString = function(str) {\n this.textarea.value = str;\n this.initialText = this.getString();\n if (this.changelistener) {\n this.changelistener.fireChanged();\n }\n};\n\nEditArea.prototype.getElem = function() {\n return this.textarea;\n};\n\nmodule.exports = EditArea;\n","// window.ABCJS.Editor:\n//\n// constructor(editarea, params)\n//\t\tif editarea is a string, then it is an HTML id of a textarea control.\n//\t\tOtherwise, it should be an instantiation of an object that expresses the EditArea interface.\n//\n//\t\tparams is a hash of:\n//\t\tcanvas_id: or paper_id: HTML id to draw in. If not present, then the drawing happens just below the editor.\n//\t\tgenerate_midi: if present, then midi is generated.\n//\t\tmidi_id: if present, the HTML id to place the midi control. Otherwise it is placed in the same div as the paper.\n//\t\tmidi_download_id: if present, the HTML id to place the midi download link. Otherwise it is placed in the same div as the paper.\n//\t\tgenerate_warnings: if present, then parser warnings are displayed on the page.\n//\t\twarnings_id: if present, the HTML id to place the warnings. Otherwise they are placed in the same div as the paper.\n//\t\tonchange: if present, the callback function to call whenever there has been a change.\n//\t\tgui: if present, the paper can send changes back to the editor (presumably because the user changed something directly.)\n//\t\tparser_options: options to send to the parser engine.\n//\t\tmidi_options: options to send to the midi engine.\n//\t\trender_options: options to send to the render engine.\n//\t\tindicate_changed: the dirty flag is set if this is true.\n//\n// - setReadOnly(bool)\n//\t\tadds or removes the class abc_textarea_readonly, and adds or removes the attribute readonly=yes\n// - setDirtyStyle(bool)\n//\t\tadds or removes the class abc_textarea_dirty\n// - modelChanged()\n//\t\tCalled when the model has been changed to trigger re-rendering\n// - parseABC()\n//\t\tCalled internally by fireChanged()\n//\t\treturns true if there has been a change since last call.\n// - updateSelection()\n//\t\tCalled when the user has changed the selection. This calls the engraver to show the selection.\n// - fireSelectionChanged()\n//\t\tCalled by the textarea object when the user has changed the selection.\n// - paramChanged(engraverparams)\n//\t\tCalled to signal that the engraver params have changed, so re-rendering should occur.\n// - fireChanged()\n//\t\tCalled by the textarea object when the user has changed something.\n// - setNotDirty()\n//\t\tCalled by the client app to reset the dirty flag\n// - isDirty()\n//\t\tReturns true or false, whether the textarea contains the same text that it started with.\n// - highlight(abcelem)\n//\t\tCalled by the engraver to highlight an area.\n// - pause(bool)\n//\t\tStops the automatic rendering when the user is typing.\n//\nvar parseCommon = require('../parse/abc_common');\nvar SynthController = require('../synth/synth-controller');\nvar supportsAudio = require('../synth/supports-audio');\nvar renderAbc = require('../api/abc_tunebook_svg');\nvar EditArea = require('./abc_editarea');\n\nfunction gatherAbcParams(params) {\n\t// There used to be a bunch of ways parameters can be passed in. This just simplifies it.\n\tvar abcjsParams = {};\n\tvar key;\n\tif (params.abcjsParams) {\n\t\tfor (key in params.abcjsParams) {\n\t\t\tif (params.abcjsParams.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.abcjsParams[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.midi_options) {\n\t\tfor (key in params.midi_options) {\n\t\t\tif (params.midi_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.midi_options[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.parser_options) {\n\t\tfor (key in params.parser_options) {\n\t\t\tif (params.parser_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.parser_options[key];\n\t\t\t}\n\t\t}\n\t}\n\tif (params.render_options) {\n\t\tfor (key in params.render_options) {\n\t\t\tif (params.render_options.hasOwnProperty(key)) {\n\t\t\t\tabcjsParams[key] = params.render_options[key];\n\t\t\t}\n\t\t}\n\t}\n\t/*\n\tif (params.tablature_options) {\n\t\tabcjsParams['tablatures'] = params.tablature_options;\n\t}\n\t*/\n\tif (abcjsParams.tablature) {\n\t\tif (params.warnings_id) {\n\t\t\t// store for plugin error handling\n\t\t\tabcjsParams.tablature.warnings_id = params.warnings_id;\n\t\t}\n\t}\n\treturn abcjsParams;\n}\n\nvar Editor = function(editarea, params) {\n\t// Copy all the options that will be passed through\n\tthis.abcjsParams = gatherAbcParams(params);\n\n\tif (params.indicate_changed)\n\t\tthis.indicate_changed = true;\n if (typeof editarea === \"string\") {\n this.editarea = new EditArea(editarea);\n } else {\n this.editarea = editarea;\n }\n this.editarea.addSelectionListener(this);\n this.editarea.addChangeListener(this);\n\n if (params.canvas_id) {\n this.div = params.canvas_id;\n } else if (params.paper_id) {\n this.div = params.paper_id;\n } else {\n this.div = document.createElement(\"DIV\");\n this.editarea.getElem().parentNode.insertBefore(this.div, this.editarea.getElem());\n }\n if (typeof this.div === 'string')\n\t this.div = document.getElementById(this.div);\n\n if (params.selectionChangeCallback) {\n \tthis.selectionChangeCallback = params.selectionChangeCallback;\n }\n\n this.clientClickListener = this.abcjsParams.clickListener;\n this.abcjsParams.clickListener = this.highlight.bind(this);\n\n if (params.synth) {\n \tif (supportsAudio()) {\n\t this.synth = {\n\t\t el: params.synth.el,\n\t\t cursorControl: params.synth.cursorControl,\n\t\t options: params.synth.options\n\t };\n }\n }\n\t// If the user wants midi, then store the elements that it will be written to. The element could either be passed in as an id,\n\t// an element, or nothing. If nothing is passed in, then just put the midi on top of the generated music.\n\tif (params.generate_midi) {\n\t \tthis.generate_midi = params.generate_midi;\n\t\tif (this.abcjsParams.generateDownload) {\n\t\t\tif (typeof params.midi_download_id === 'string')\n\t\t\t\tthis.downloadMidi = document.getElementById(params.midi_download_id);\n\t\t\telse if (params.midi_download_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough.\n\t\t\t\tthis.downloadMidi = params.midi_download_id;\n\t\t}\n\t\tif (this.abcjsParams.generateInline !== false) { // The default for this is true, so undefined is also true.\n\t\t\tif (typeof params.midi_id === 'string')\n\t\t\t\tthis.inlineMidi = document.getElementById(params.midi_id);\n\t\t\telse if (params.midi_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough.\n\t\t\t\tthis.inlineMidi = params.midi_id;\n\t\t}\n\t}\n\n if (params.warnings_id) {\n \tif (typeof(params.warnings_id) === \"string\")\n this.warningsdiv = document.getElementById(params.warnings_id);\n \telse\n\t\tthis.warningsdiv = params.warnings_id;\n } else if (params.generate_warnings) {\n\t this.warningsdiv = document.createElement(\"div\");\n\t this.div.parentNode.insertBefore(this.warningsdiv, this.div);\n }\n\n this.onchangeCallback = params.onchange;\n\n this.currentAbc = \"\";\n this.tunes = [];\n this.bReentry = false;\n this.parseABC();\n this.modelChanged();\n\n this.addClassName = function(element, className) {\n var hasClassName = function(element, className) {\n var elementClassName = element.className;\n return (elementClassName.length > 0 && (elementClassName === className ||\n new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\").test(elementClassName)));\n };\n\n if (!hasClassName(element, className))\n element.className += (element.className ? ' ' : '') + className;\n return element;\n };\n\n this.removeClassName = function(element, className) {\n element.className = parseCommon.strip(element.className.replace(\n new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), ' '));\n return element;\n };\n\n this.setReadOnly = function(readOnly) {\n\t var readonlyClass = 'abc_textarea_readonly';\n\t var el = this.editarea.getElem();\n if (readOnly) {\n el.setAttribute('readonly', 'yes');\n\t this.addClassName(el, readonlyClass);\n\t} else {\n el.removeAttribute('readonly');\n\t this.removeClassName(el, readonlyClass);\n }\n };\n};\n\nEditor.prototype.redrawMidi = function() {\n\tif (this.generate_midi && !this.midiPause) {\n\t\tvar event = new window.CustomEvent(\"generateMidi\", {\n\t\t\tdetail: {\n\t\t\t\ttunes: this.tunes,\n\t\t\t\tabcjsParams: this.abcjsParams,\n\t\t\t\tdownloadMidiEl: this.downloadMidi,\n\t\t\t\tinlineMidiEl: this.inlineMidi,\n\t\t\t\tengravingEl: this.div\n\t\t\t}\n\t\t});\n\t\twindow.dispatchEvent(event);\n\t}\n\tif (this.synth) {\n\t\tvar userAction = this.synth.synthControl; // Can't really tell if there was a user action before drawing, but we assume that if the synthControl was created already there was a user action.\n\t\tif (!this.synth.synthControl) {\n\t\t\tthis.synth.synthControl = new SynthController();\n\t\t\tthis.synth.synthControl.load(this.synth.el, this.synth.cursorControl, this.synth.options);\n\t\t}\n\t\tthis.synth.synthControl.setTune(this.tunes[0], userAction, this.synth.options);\n\t}\n};\n\nEditor.prototype.modelChanged = function() {\n if (this.bReentry)\n return; // TODO is this likely? maybe, if we rewrite abc immediately w/ abc2abc\n\tthis.bReentry = true;\n\ttry {\n\t\tthis.timerId = null;\n\t\tif (this.synth && this.synth.synthControl)\n\t\t\tthis.synth.synthControl.disable(true);\n\n\t\tthis.tunes = renderAbc(this.div, this.currentAbc, this.abcjsParams);\n\t\tif (this.tunes.length > 0) {\n\t\t\tthis.warnings = this.tunes[0].warnings;\n\t\t}\n\t\tthis.redrawMidi();\n\t} catch(error) {\n\t\tconsole.error(\"ABCJS error: \", error);\n\t\tif (!this.warnings)\n\t\t\tthis.warnings = [];\n\t\tthis.warnings.push(error.message);\n\t}\n\n if (this.warningsdiv) {\n this.warningsdiv.innerHTML = (this.warnings) ? this.warnings.join(\"
\") : \"No errors\";\n }\n this.updateSelection();\n this.bReentry = false;\n};\n\n// Call this to reparse in response to the client changing the parameters on the fly\nEditor.prototype.paramChanged = function(engraverParams) {\n\tif (engraverParams) {\n\t\tfor (var key in engraverParams) {\n\t\t\tif (engraverParams.hasOwnProperty(key)) {\n\t\t\t\tthis.abcjsParams[key] = engraverParams[key];\n\t\t\t}\n\t\t}\n\t}\n\tthis.currentAbc = \"\";\n\tthis.fireChanged();\n};\n\nEditor.prototype.synthParamChanged = function(options) {\n\tif (!this.synth)\n\t\treturn;\n\tthis.synth.options = {};\n\tif (options) {\n\t\tfor (var key in options) {\n\t\t\tif (options.hasOwnProperty(key)) {\n\t\t\t\tthis.synth.options[key] = options[key];\n\t\t\t}\n\t\t}\n\t}\n\tthis.currentAbc = \"\";\n\tthis.fireChanged();\n};\n\n// return true if the model has changed\nEditor.prototype.parseABC = function() {\n var t = this.editarea.getString();\n if (t===this.currentAbc) {\n this.updateSelection();\n return false;\n }\n\n this.currentAbc = t;\n return true;\n};\n\nEditor.prototype.updateSelection = function() {\n var selection = this.editarea.getSelection();\n try {\n \tif (this.tunes.length > 0 && this.tunes[0].engraver)\n\t this.tunes[0].engraver.rangeHighlight(selection.start, selection.end);\n } catch (e) {} // maybe printer isn't defined yet?\n\tif (this.selectionChangeCallback)\n\t\tthis.selectionChangeCallback(selection.start, selection.end);\n};\n\n// Called when the textarea's selection is in the process of changing (after mouse down, dragging, or keyboard arrows)\nEditor.prototype.fireSelectionChanged = function() {\n this.updateSelection();\n};\n\nEditor.prototype.setDirtyStyle = function(isDirty) {\n\tif (this.indicate_changed === undefined)\n\t\treturn;\n var addClassName = function(element, className) {\n var hasClassName = function(element, className) {\n var elementClassName = element.className;\n return (elementClassName.length > 0 && (elementClassName === className ||\n new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\").test(elementClassName)));\n };\n\n if (!hasClassName(element, className))\n element.className += (element.className ? ' ' : '') + className;\n return element;\n };\n\n var removeClassName = function(element, className) {\n element.className = parseCommon.strip(element.className.replace(\n new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), ' '));\n return element;\n };\n\n\tvar readonlyClass = 'abc_textarea_dirty';\n\tvar el = this.editarea.getElem();\n\tif (isDirty) {\n\t\taddClassName(el, readonlyClass);\n\t} else {\n\t\tremoveClassName(el, readonlyClass);\n }\n};\n\n// call when the textarea alerts us that the abc text is changed and needs re-parsing\nEditor.prototype.fireChanged = function() {\n if (this.bIsPaused)\n return;\n if (this.parseABC()) {\n var self = this;\n if (this.timerId)\t// If the user is still typing, cancel the update\n clearTimeout(this.timerId);\n this.timerId = setTimeout(function () {\n self.modelChanged();\n }, 300);\t// Is this a good compromise between responsiveness and not redrawing too much?\n\t var isDirty = this.isDirty();\n\t if (this.wasDirty !== isDirty) {\n\t\t this.wasDirty = isDirty;\n\t\t this.setDirtyStyle(isDirty);\n\t }\n\t if (this.onchangeCallback)\n\t\t this.onchangeCallback(this);\n\t }\n};\n\nEditor.prototype.setNotDirty = function() {\n\tthis.editarea.initialText = this.editarea.getString();\n\tthis.wasDirty = false;\n\tthis.setDirtyStyle(false);\n};\n\nEditor.prototype.isDirty = function() {\n\tif (this.indicate_changed === undefined)\n\t\treturn false;\n\treturn this.editarea.initialText !== this.editarea.getString();\n};\n\nEditor.prototype.highlight = function(abcelem, tuneNumber, classes, analysis, drag, mouseEvent) {\n\t// TODO-PER: The marker appears to get off by one for each tune parsed. I'm not sure why, but adding the tuneNumber in corrects it for the time being.\n//\tvar offset = (tuneNumber !== undefined) ? this.startPos[tuneNumber] + tuneNumber : 0;\n\n this.editarea.setSelection(abcelem.startChar, abcelem.endChar);\n\tif (this.selectionChangeCallback)\n\t\tthis.selectionChangeCallback(abcelem.startChar, abcelem.endChar);\n\tif (this.clientClickListener)\n\t\tthis.clientClickListener(abcelem, tuneNumber, classes, analysis, drag, mouseEvent);\n};\n\nEditor.prototype.pause = function(shouldPause) {\n\tthis.bIsPaused = shouldPause;\n\tif (!shouldPause)\n\t\tthis.fireChanged();\n};\n\nEditor.prototype.millisecondsPerMeasure = function() {\n\tif (!this.synth || !this.synth.synthControl || !this.synth.synthControl.visualObj)\n\t\treturn 0;\n\treturn this.synth.synthControl.visualObj.millisecondsPerMeasure();\n};\n\nEditor.prototype.pauseMidi = function(shouldPause) {\n\tthis.midiPause = shouldPause;\n\tif (!shouldPause)\n\t\tthis.redrawMidi();\n};\n\nmodule.exports = Editor;\n","// abc_midi_create.js: Turn a linear series of events into a midi file.\n\nvar rendererFactory = require('../synth/abc_midi_renderer');\n\nvar create;\n\n(function() {\n\t\"use strict\";\n\n\tvar baseDuration = 480*4; // nice and divisible, equals 1 whole note\n\n\tcreate = function(abcTune, options) {\n\t\tif (options === undefined) options = {};\n\t\tvar commands = abcTune.setUpAudio(options);\n\t\tvar midi = rendererFactory();\n\n\t\tvar title = abcTune.metaText ? abcTune.metaText.title : undefined;\n\t\tif (title && title.length > 128)\n\t\t\ttitle = title.substring(0,124) + '...';\n\t\tvar key = abcTune.getKeySignature();\n\t\tvar time = abcTune.getMeterFraction();\n\t\tvar beatsPerSecond = commands.tempo / 60;\n\t\t//var beatLength = abcTune.getBeatLength();\n\t\tmidi.setGlobalInfo(commands.tempo, title, key, time);\n\n\t\tfor (var i = 0; i < commands.tracks.length; i++) {\n\t\t\tmidi.startTrack();\n\t\t\tvar notePlacement = {};\n\t\t\tfor (var j = 0; j < commands.tracks[i].length; j++) {\n\t\t\t\tvar event = commands.tracks[i][j];\n\t\t\t\tswitch (event.cmd) {\n\t\t\t\t\tcase 'text':\n\t\t\t\t\t\tmidi.setText(event.type, event.text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'program':\n\t\t\t\t\t\tvar pan = 0;\n\t\t\t\t\t\tif (options.pan && options.pan.length > i)\n\t\t\t\t\t\t\tpan = options.pan[i];\n\t\t\t\t\t\tif (event.instrument === 128) {\n\t\t\t\t\t\t\t// If we're using the percussion voice, change to Channel 10\n\t\t\t\t\t\t\tmidi.setChannel(9, pan);\n\t\t\t\t\t\t\tmidi.setInstrument(0);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmidi.setChannel(event.channel, pan);\n\t\t\t\t\t\t\tmidi.setInstrument(event.instrument);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'note':\n\t\t\t\t\t\tvar gapLengthInBeats = event.gap * beatsPerSecond;\n\t\t\t\t\t\tvar start = event.start;\n\t\t\t\t\t\t// The staccato and legato are indicated by event.gap.\n\t\t\t\t\t\t// event.gap is in seconds but the durations are in whole notes.\n\t\t\t\t\t\tvar end = start + event.duration - gapLengthInBeats;\n\t\t\t\t\t\tif (!notePlacement[start])\n\t\t\t\t\t\t\tnotePlacement[start] = [];\n\t\t\t\t\t\tnotePlacement[start].push({ pitch: event.pitch, volume: event.volume, cents: event.cents });\n\t\t\t\t\t\tif (!notePlacement[end])\n\t\t\t\t\t\t\tnotePlacement[end] = [];\n\t\t\t\t\t\tnotePlacement[end].push({ pitch: event.pitch, volume: 0 });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log(\"MIDI create Unknown: \" + event.cmd);\n\t\t\t\t}\n\t\t\t}\n\t\t\taddNotes(midi, notePlacement, baseDuration);\n\t\t\tmidi.endTrack();\n\t\t}\n\n\t\treturn midi.getData();\n\t};\n\n\tfunction addNotes(midi, notePlacement, baseDuration) {\n\t\tvar times = Object.keys(notePlacement);\n\t\tfor (var h = 0; h < times.length; h++)\n\t\t\ttimes[h] = parseFloat(times[h]);\n\t\ttimes.sort(function(a,b) {\n\t\t\treturn a - b;\n\t\t});\n\t\tvar lastTime = 0;\n\t\tfor (var i = 0; i < times.length; i++) {\n\t\t\tvar events = notePlacement[times[i]];\n\t\t\tif (times[i] > lastTime) {\n\t\t\t\tvar distance = (times[i] - lastTime) * baseDuration;\n\t\t\t\tmidi.addRest(distance);\n\t\t\t\tlastTime = times[i];\n\t\t\t}\n\t\t\tfor (var j = 0; j < events.length; j++) {\n\t\t\t\tvar event = events[j];\n\t\t\t\tif (event.volume) {\n\t\t\t\t\tmidi.startNote(event.pitch, event.volume, event.cents);\n\t\t\t\t} else {\n\t\t\t\t\tmidi.endNote(event.pitch);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n})();\n\nmodule.exports = create;\n","// abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = {};\n\nparseCommon.clone = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = source[property];\n\treturn destination;\n};\n\nparseCommon.cloneArray = function(source) {\n\tvar destination = [];\n\tfor (var i = 0; i < source.length; i++) {\n\t\tdestination.push(parseCommon.clone(source[i]));\n\t}\n\treturn destination;\n};\n\nparseCommon.cloneHashOfHash = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = parseCommon.clone(source[property]);\n\treturn destination;\n};\n\nparseCommon.cloneHashOfArrayOfHash = function(source) {\n\tvar destination = {};\n\tfor (var property in source)\n\t\tif (source.hasOwnProperty(property))\n\t\t\tdestination[property] = parseCommon.cloneArray(source[property]);\n\treturn destination;\n};\n\nparseCommon.strip = function(str) {\n\treturn str.replace(/^\\s+/, '').replace(/\\s+$/, '');\n};\n\nparseCommon.startsWith = function(str, pattern) {\n\treturn str.indexOf(pattern) === 0;\n};\n\nparseCommon.endsWith = function(str, pattern) {\n\tvar d = str.length - pattern.length;\n\treturn d >= 0 && str.lastIndexOf(pattern) === d;\n};\n\nparseCommon.last = function(arr) {\n\tif (arr.length === 0)\n\t\treturn null;\n\treturn arr[arr.length-1];\n};\n\n\nmodule.exports = parseCommon;\n","// abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar ParseHeader = require('./abc_parse_header');\nvar ParseMusic = require('./abc_parse_music');\nvar Tokenizer = require('./abc_tokenizer');\nvar wrap = require('./wrap_lines');\n\nvar Tune = require('../data/abc_tune');\nvar TuneBuilder = require('../parse/tune-builder');\n\nvar Parse = function() {\n\t\"use strict\";\n\tvar tune = new Tune();\n\tvar tuneBuilder = new TuneBuilder(tune);\n\tvar tokenizer;\n\tvar wordsContinuation = '';\n\tvar symbolContinuation = '';\n\n\tthis.getTune = function() {\n\t\tvar t = {\n\t\t\tformatting: tune.formatting,\n\t\t\tlines: tune.lines,\n\t\t\tmedia: tune.media,\n\t\t\tmetaText: tune.metaText,\n\t\t\tmetaTextInfo: tune.metaTextInfo,\n\t\t\tversion: tune.version,\n\n\t\t\taddElementToEvents: tune.addElementToEvents,\n\t\t\taddUsefulCallbackInfo: tune.addUsefulCallbackInfo,\n\t\t\tgetTotalTime: tune.getTotalTime,\n\t\t\tgetTotalBeats: tune.getTotalBeats,\n\t\t\tgetBarLength: tune.getBarLength,\n\t\t\tgetBeatLength: tune.getBeatLength,\n\t\t\tgetBeatsPerMeasure: tune.getBeatsPerMeasure,\n\t\t\tgetBpm: tune.getBpm,\n\t\t\tgetMeter: tune.getMeter,\n\t\t\tgetMeterFraction: tune.getMeterFraction,\n\t\t\tgetPickupLength: tune.getPickupLength,\n\t\t\tgetKeySignature: tune.getKeySignature,\n\t\t\tgetElementFromChar: tune.getElementFromChar,\n\t\t\tmakeVoicesArray: tune.makeVoicesArray,\n\t\t\tmillisecondsPerMeasure: tune.millisecondsPerMeasure,\n\t\t\tsetupEvents: tune.setupEvents,\n\t\t\tsetTiming: tune.setTiming,\n\t\t\tsetUpAudio: tune.setUpAudio,\n\t\t\tdeline: tune.deline,\n\t\t};\n\t\tif (tune.lineBreaks)\n\t\t\tt.lineBreaks = tune.lineBreaks;\n\t\tif (tune.visualTranspose)\n\t\t\tt.visualTranspose = tune.visualTranspose;\n\t\treturn t;\n\t};\n\n\tfunction addPositioning(el, type, value) {\n\t\tif (!el.positioning) el.positioning = {};\n\t\tel.positioning[type] = value;\n\t}\n\n\tfunction addFont(el, type, value) {\n\t\tif (!el.fonts) el.fonts = {};\n\t\tel.fonts[type] = value;\n\t}\n\n\tvar multilineVars = {\n\t\treset: function() {\n\t\t\tfor (var property in this) {\n\t\t\t\tif (this.hasOwnProperty(property) && typeof this[property] !== \"function\") {\n\t\t\t\t\tdelete this[property];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.iChar = 0;\n\t\t\tthis.key = {accidentals: [], root: 'none', acc: '', mode: '' };\n\t\t\tthis.meter = null; // if no meter is specified, free meter is assumed\n\t\t\tthis.origMeter = null;\t// this is for new voices that are created after we set the meter.\n\t\t\tthis.hasMainTitle = false;\n\t\t\tthis.default_length = 0.125;\n\t\t\tthis.clef = { type: 'treble', verticalPos: 0 };\n\t\t\tthis.octave = 0;\n\t\t\tthis.next_note_duration = 0;\n\t\t\tthis.start_new_line = true;\n\t\t\tthis.is_in_header = true;\n\t\t\tthis.partForNextLine = {};\n\t\t\tthis.tempoForNextLine = [];\n\t\t\tthis.havent_set_length = true;\n\t\t\tthis.voices = {};\n\t\t\tthis.staves = [];\n\t\t\tthis.macros = {};\n\t\t\tthis.currBarNumber = 1;\n\t\t\tthis.barCounter = {};\n\t\t\tthis.ignoredDecorations = [];\n\t\t\tthis.score_is_present = false;\t// Can't have original V: lines when there is the score directive\n\t\t\tthis.inEnding = false;\n\t\t\tthis.inTie = [];\n\t\t\tthis.inTieChord = {};\n\t\t\tthis.vocalPosition = \"auto\";\n\t\t\tthis.dynamicPosition = \"auto\";\n\t\t\tthis.chordPosition = \"auto\";\n\t\t\tthis.ornamentPosition = \"auto\";\n\t\t\tthis.volumePosition = \"auto\";\n\t\t\tthis.openSlurs = [];\n\t\t\tthis.freegchord = false;\n\t\t\tthis.endingHoldOver = {};\n\t\t},\n\t\tdifferentFont: function(type, defaultFonts) {\n\t\t\tif (this[type].decoration !== defaultFonts[type].decoration) return true;\n\t\t\tif (this[type].face !== defaultFonts[type].face) return true;\n\t\t\tif (this[type].size !== defaultFonts[type].size) return true;\n\t\t\tif (this[type].style !== defaultFonts[type].style) return true;\n\t\t\tif (this[type].weight !== defaultFonts[type].weight) return true;\n\t\t\treturn false;\n\t\t},\n\t\taddFormattingOptions: function(el, defaultFonts, elType) {\n\t\t\tif (elType === 'note') {\n\t\t\t\tif (this.vocalPosition !== 'auto') addPositioning(el, 'vocalPosition', this.vocalPosition);\n\t\t\t\tif (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition);\n\t\t\t\tif (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition);\n\t\t\t\tif (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition);\n\t\t\t\tif (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition);\n\t\t\t\tif (this.differentFont(\"annotationfont\", defaultFonts)) addFont(el, 'annotationfont', this.annotationfont);\n\t\t\t\tif (this.differentFont(\"gchordfont\", defaultFonts)) addFont(el, 'gchordfont', this.gchordfont);\n\t\t\t\tif (this.differentFont(\"vocalfont\", defaultFonts)) addFont(el, 'vocalfont', this.vocalfont);\n\t\t\t\tif (this.differentFont(\"tripletfont\", defaultFonts)) addFont(el, 'tripletfont', this.tripletfont);\n\t\t\t} else if (elType === 'bar') {\n\t\t\t\tif (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition);\n\t\t\t\tif (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition);\n\t\t\t\tif (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition);\n\t\t\t\tif (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition);\n\t\t\t\tif (this.differentFont(\"measurefont\", defaultFonts)) addFont(el, 'measurefont', this.measurefont);\n\t\t\t\tif (this.differentFont(\"repeatfont\", defaultFonts)) addFont(el, 'repeatfont', this.repeatfont);\n\t\t\t}\n\t\t},\n\t\tduplicateStartEndingHoldOvers: function() {\n\t\t\tthis.endingHoldOver = {\n\t\t\t\tinTie: [],\n\t\t\t\tinTieChord: {}\n\t\t\t};\n\t\t\tfor (var i = 0; i < this.inTie.length; i++) {\n\t\t\t\tthis.endingHoldOver.inTie.push([]);\n\t\t\t\tif (this.inTie[i]) { // if a voice is suppressed there might be a gap in the array.\n\t\t\t\t\tfor (var j = 0; j < this.inTie[i].length; j++) {\n\t\t\t\t\t\tthis.endingHoldOver.inTie[i].push(this.inTie[i][j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in this.inTieChord) {\n\t\t\t\tif (this.inTieChord.hasOwnProperty(key))\n\t\t\t\t\tthis.endingHoldOver.inTieChord[key] = this.inTieChord[key];\n\t\t\t}\n\t\t},\n\t\trestoreStartEndingHoldOvers: function() {\n\t\t\tif (!this.endingHoldOver.inTie)\n\t\t\t\treturn;\n\t\t\tthis.inTie = [];\n\t\t\tthis.inTieChord = {};\n\t\t\tfor (var i = 0; i < this.endingHoldOver.inTie.length; i++) {\n\t\t\t\tthis.inTie.push([]);\n\t\t\t\tfor (var j = 0; j < this.endingHoldOver.inTie[i].length; j++) {\n\t\t\t\t\tthis.inTie[i].push(this.endingHoldOver.inTie[i][j]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in this.endingHoldOver.inTieChord) {\n\t\t\t\tif (this.endingHoldOver.inTieChord.hasOwnProperty(key))\n\t\t\t\t\tthis.inTieChord[key] = this.endingHoldOver.inTieChord[key];\n\t\t\t}\n\t\t},\n\t};\n\n\tvar addWarning = function(str) {\n\t\tif (!multilineVars.warnings)\n\t\t\tmultilineVars.warnings = [];\n\t\tmultilineVars.warnings.push(str);\n\t};\n\n\tvar addWarningObject = function(warningObject) {\n\t\tif (!multilineVars.warningObjects)\n\t\t\tmultilineVars.warningObjects = [];\n\t\tmultilineVars.warningObjects.push(warningObject);\n\t};\n\n\tvar encode = function(str) {\n\t\tvar ret = str.replace(/\\x12/g, ' ');\n\t\tret = ret.replace(/&/g, '&');\n\t\tret = ret.replace(//g, '>');\n\t};\n\n\tvar warn = function(str, line, col_num) {\n\t\tif (!line) line = \" \";\n\t\tvar bad_char = line[col_num];\n\t\tif (bad_char === ' ' || !bad_char)\n\t\t\tbad_char = \"SPACE\";\n\t\tvar clean_line = encode(line.substring(col_num - 64, col_num)) + '' + bad_char + '' + encode(line.substring(col_num + 1).substring(0,64));\n\t\taddWarning(\"Music Line:\" + tokenizer.lineIndex + \":\" + (col_num+1) + ': ' + str + \": \" + clean_line);\n\t\taddWarningObject({message:str, line:line, startChar: multilineVars.iChar + col_num, column: col_num});\n\t};\n\n\tvar header;\n\tvar music;\n\n\tthis.getWarnings = function() {\n\t\treturn multilineVars.warnings;\n\t};\n\tthis.getWarningObjects = function() {\n\t\treturn multilineVars.warningObjects;\n\t};\n\n\tvar addWords = function(line, words) {\n\t\tif (words.indexOf('\\x12') >= 0) {\n\t\t\twordsContinuation += words\n\t\t\treturn\n\t\t}\n\t\twords = wordsContinuation + words\n\t\twordsContinuation = ''\n\n\t\tif (!line) { warn(\"Can't add words before the first line of music\", line, 0); return; }\n\t\twords = parseCommon.strip(words);\n\t\tif (words[words.length-1] !== '-')\n\t\t\twords = words + ' ';\t// Just makes it easier to parse below, since every word has a divider after it.\n\t\tvar word_list = [];\n\t\t// first make a list of words from the string we are passed. A word is divided on either a space or dash.\n\t\tvar last_divider = 0;\n\t\tvar replace = false;\n\t\tvar addWord = function(i) {\n\t\t\tvar word = parseCommon.strip(words.substring(last_divider, i));\n\t\t\tword = word.replace(/\\\\([-_*|~])/g, '$1')\n\t\t\tlast_divider = i+1;\n\t\t\tif (word.length > 0) {\n\t\t\t\tif (replace)\n\t\t\t\t\tword = word.replace(/~/g, ' ');\n\t\t\t\tvar div = words[i];\n\t\t\t\tif (div !== '_' && div !== '-')\n\t\t\t\t\tdiv = ' ';\n\t\t\t\tword_list.push({syllable: tokenizer.translateString(word), divider: div});\n\t\t\t\treplace = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tvar escNext = false;\n\t\tfor (var i = 0; i < words.length; i++) {\n\t\t\tswitch (words[i]) {\n\t\t\t\tcase ' ':\n\t\t\t\tcase '\\x12':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '-':\n\t\t\t\t\tif (!escNext && !addWord(i) && word_list.length > 0) {\n\t\t\t\t\t\tparseCommon.last(word_list).divider = '-';\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '_':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'slur'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '*':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '|':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\taddWord(i);\n\t\t\t\t\t\tword_list.push({skip: true, to: 'bar'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '~':\n\t\t\t\t\tif (!escNext) {\n\t\t\t\t\t\treplace = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tescNext = words[i] === '\\\\'\n\t\t}\n\n\t\tvar inSlur = false;\n\t\tline.forEach(function(el) {\n\t\t\tif (word_list.length !== 0) {\n\t\t\t\tif (word_list[0].skip) {\n\t\t\t\t\tswitch (word_list[0].to) {\n\t\t\t\t\t\tcase 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break;\n\t\t\t\t\t\tcase 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break;\n\t\t\t\t\t\tcase 'bar': if (el.el_type === 'bar') word_list.shift(); break;\n\t\t\t\t\t}\n\t\t\t\t\tif (el.el_type !== 'bar') {\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [{syllable: \"\", divider: \" \"}];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push({syllable: \"\", divider: \" \"});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (el.el_type === 'note' && el.rest === undefined && !inSlur) {\n\t\t\t\t\t\tvar lyric = word_list.shift();\n\t\t\t\t\t\tif (lyric.syllable)\n\t\t\t\t\t\t\tlyric.syllable = lyric.syllable.replace(/ +/g,'\\xA0');\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [ lyric ];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push(lyric);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tvar addSymbols = function(line, words) {\n\t\tif (words.indexOf('\\x12') >= 0) {\n\t\t\tsymbolContinuation += words\n\t\t\treturn\n\t\t}\n\t\twords = symbolContinuation + words\n\t\tsymbolContinuation = ''\n\n\t\t// TODO-PER: Currently copied from w: line. This needs to be read as symbols instead.\n\t\tif (!line) { warn(\"Can't add symbols before the first line of music\", line, 0); return; }\n\t\twords = parseCommon.strip(words);\n\t\tif (words[words.length-1] !== '-')\n\t\t\twords = words + ' ';\t// Just makes it easier to parse below, since every word has a divider after it.\n\t\tvar word_list = [];\n\t\t// first make a list of words from the string we are passed. A word is divided on either a space or dash.\n\t\tvar last_divider = 0;\n\t\tvar replace = false;\n\t\tvar addWord = function(i) {\n\t\t\tvar word = parseCommon.strip(words.substring(last_divider, i));\n\t\t\tlast_divider = i+1;\n\t\t\tif (word.length > 0) {\n\t\t\t\tif (replace)\n\t\t\t\t\tword = word.replace(/~/g, ' ');\n\t\t\t\tvar div = words[i];\n\t\t\t\tif (div !== '_' && div !== '-')\n\t\t\t\t\tdiv = ' ';\n\t\t\t\tword_list.push({syllable: tokenizer.translateString(word), divider: div});\n\t\t\t\treplace = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tfor (var i = 0; i < words.length; i++) {\n\t\t\tswitch (words[i]) {\n\t\t\t\tcase ' ':\n\t\t\t\tcase '\\x12':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '-':\n\t\t\t\t\tif (!addWord(i) && word_list.length > 0) {\n\t\t\t\t\t\tparseCommon.last(word_list).divider = '-';\n\t\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '_':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'slur'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '*':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'next'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '|':\n\t\t\t\t\taddWord(i);\n\t\t\t\t\tword_list.push({skip: true, to: 'bar'});\n\t\t\t\t\tbreak;\n\t\t\t\tcase '~':\n\t\t\t\t\treplace = true;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar inSlur = false;\n\t\tline.forEach(function(el) {\n\t\t\tif (word_list.length !== 0) {\n\t\t\t\tif (word_list[0].skip) {\n\t\t\t\t\tswitch (word_list[0].to) {\n\t\t\t\t\t\tcase 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break;\n\t\t\t\t\t\tcase 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break;\n\t\t\t\t\t\tcase 'bar': if (el.el_type === 'bar') word_list.shift(); break;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (el.el_type === 'note' && el.rest === undefined && !inSlur) {\n\t\t\t\t\t\tvar lyric = word_list.shift();\n\t\t\t\t\t\tif (el.lyric === undefined)\n\t\t\t\t\t\t\tel.lyric = [ lyric ];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.lyric.push(lyric);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tvar parseLine = function(line) {\n\t\tif (parseCommon.startsWith(line, '%%')) {\n\t\t\tvar err = parseDirective.addDirective(line.substring(2));\n\t\t\tif (err) warn(err, line, 2);\n\t\t\treturn;\n\t\t}\n\n\t\tvar i = line.indexOf('%');\n\t\tif (i >= 0)\n\t\t\tline = line.substring(0, i);\n\t\tline = line.replace(/\\s+$/, '');\n\n\t\tif (line.length === 0)\n\t\t\treturn;\n\n\t\tif (wordsContinuation) {\n\t\t\taddWords(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\t\treturn\n\t\t}\n\t\tif (symbolContinuation) {\n\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\t\treturn\n\t\t}\n\t\tif (line.length < 2 || line[1] !== ':' || music.lineContinuation) {\n\t\t\tmusic.parseMusic(line);\n\t\t\treturn\n\t\t}\n\n\t\tvar ret = header.parseHeader(line);\n\t\tif (ret.regular)\n\t\t\tmusic.parseMusic(line);\n\t\tif (ret.newline)\n\t\t\tmusic.startNewLine();\n\t\tif (ret.words)\n\t\t\taddWords(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t\tif (ret.symbols)\n\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), line.substring(2));\n\t};\n\n\tfunction appendLastMeasure(voice, nextVoice) {\n\t\tvoice.push({\n\t\t\tel_type: 'hint'\n\t\t});\n\t\tfor (var i = 0; i < nextVoice.length; i++) {\n\t\t\tvar element = nextVoice[i];\n\t\t\tvar hint = parseCommon.clone(element);\n\t\t\tvoice.push(hint);\n\t\t\tif (element.el_type === 'bar')\n\t\t\t\t\treturn;\n\t\t}\n\t}\n\n\tfunction addHintMeasure(staff, nextStaff) {\n\t\tfor (var i = 0; i < staff.length; i++) {\n\t\t\tvar stave = staff[i];\n\t\t\tvar nextStave = nextStaff[i];\n\t\t\tif (nextStave) { // Be sure there is the same number of staves on the next line.\n\t\t\t\tfor (var j = 0; j < nextStave.voices.length; j++) {\n\t\t\t\t\tvar nextVoice = nextStave.voices[j];\n\t\t\t\t\tvar voice = stave.voices[j];\n\t\t\t\t\tif (voice) { // Be sure there are the same number of voices on the previous line.\n\t\t\t\t\t\tappendLastMeasure(voice, nextVoice);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addHintMeasures() {\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tvar line = tune.lines[i].staff;\n\t\t\tif (line) {\n\t\t\t\tvar j = i+1;\n\t\t\t\twhile (j < tune.lines.length && tune.lines[j].staff === undefined)\n\t\t\t\t\tj++;\n\t\t\t\tif (j < tune.lines.length) {\n\t\t\t\t\tvar nextLine = tune.lines[j].staff;\n\t\t\t\t\taddHintMeasure(line, nextLine);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.parse = function(strTune, switches, startPos) {\n\t\t// the switches are optional and cause a difference in the way the tune is parsed.\n\t\t// switches.header_only : stop parsing when the header is finished\n\t\t// switches.stop_on_warning : stop at the first warning encountered.\n\t\t// switches.print: format for the page instead of the browser.\n\t\t// switches.format: a hash of the desired formatting commands.\n\t\t// switches.hint_measures: put the next measure at the end of the current line.\n\t\t// switches.transpose: change the key signature, chords, and notes by a number of half-steps.\n\t\tif (!switches) switches = {};\n\t\tif (!startPos) startPos = 0;\n\t\ttune.reset();\n\n\t\t// Take care of whatever line endings come our way\n\t\t// Tack on newline temporarily to make the last line continuation work\n\t\tstrTune = strTune.replace(/\\r\\n?/g, '\\n') + '\\n';\n\n\t\t// get rid of latex commands. If a line starts with a backslash, then it is replaced by spaces to keep the character count the same.\n\t\tvar arr = strTune.split(\"\\n\\\\\");\n\t\tif (arr.length > 1) {\n\t\t\tfor (var i2 = 1; i2 < arr.length; i2++) {\n\t\t\t\twhile (arr[i2].length > 0 && arr[i2][0] !== \"\\n\") {\n\t\t\t\t\tarr[i2] = arr[i2].substr(1);\n\t\t\t\t\tarr[i2-1] += ' ';\n\t\t\t\t}\n\t\t\t}\n\t\t\tstrTune = arr.join(\" \"); //. the split removed two characters, so this puts them back\n\t\t}\n\t\t// take care of line continuations right away, but keep the same number of characters\n\t\tstrTune = strTune.replace(/\\\\([ \\t]*)(%.*)*\\n/g, function(all, backslash, comment){\n\t\t\tvar padding = comment ? Array(comment.length +1).join(' ') : \"\";\n\t\t\treturn backslash + \"\\x12\" + padding + '\\n';\n\t\t});\n\t\tvar lines = strTune.split('\\n')\n\t\tif (parseCommon.last(lines).length === 0)\t// remove the blank line we added above.\n\t\t\tlines.pop();\n\t\ttokenizer = new Tokenizer(lines, multilineVars);\n\t\theader = new ParseHeader(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t\tmusic = new ParseMusic(tokenizer, warn, multilineVars, tune, tuneBuilder, header);\n\n\t\tif (switches.print)\n\t\t\ttune.media = 'print';\n\t\tmultilineVars.reset();\n\t\tmultilineVars.iChar = startPos;\n\t\tif (switches.visualTranspose) {\n\t\t\tmultilineVars.globalTranspose = parseInt(switches.visualTranspose);\n\t\t\tif (multilineVars.globalTranspose === 0)\n\t\t\t\tmultilineVars.globalTranspose = undefined;\n\t\t\telse\n\t\t\t\ttuneBuilder.setVisualTranspose(switches.visualTranspose);\n\t\t} else\n\t\t\tmultilineVars.globalTranspose = undefined;\n\t\tif (switches.lineBreaks) {\n\t\t\t// The line break numbers are 0-based and they reflect the last measure of the current line.\n\t\t\tmultilineVars.lineBreaks = switches.lineBreaks;\n\t\t\t//multilineVars.continueall = true;\n\t\t}\n\t\theader.reset(tokenizer, warn, multilineVars, tune);\n\n\t\ttry {\n\t\t\tif (switches.format) {\n\t\t\t\tparseDirective.globalFormatting(switches.format);\n\t\t\t}\n\t\t\tvar line = tokenizer.nextLine();\n\t\t\twhile (line) {\n\t\t\t\tif (switches.header_only && multilineVars.is_in_header === false)\n\t\t\t\t\tthrow \"normal_abort\";\n\t\t\t\tif (switches.stop_on_warning && multilineVars.warnings)\n\t\t\t\t\tthrow \"normal_abort\";\n\n\t\t\t\tvar wasInHeader = multilineVars.is_in_header;\n\t\t\t\tparseLine(line);\n\t\t\t\tif (wasInHeader && !multilineVars.is_in_header) {\n\t\t\t\t\ttuneBuilder.setRunningFont(\"annotationfont\", multilineVars.annotationfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"gchordfont\", multilineVars.gchordfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"tripletfont\", multilineVars.tripletfont);\n\t\t\t\t\ttuneBuilder.setRunningFont(\"vocalfont\", multilineVars.vocalfont);\n\t\t\t\t}\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t}\n\n\t\t\tif (wordsContinuation) {\n\t\t\t\taddWords(tuneBuilder.getCurrentVoice(), '');\n\t\t\t}\n\t\t\tif (symbolContinuation) {\n\t\t\t\taddSymbols(tuneBuilder.getCurrentVoice(), '');\n\t\t\t}\n\t\t\tmultilineVars.openSlurs = tuneBuilder.cleanUp(multilineVars.barsperstaff, multilineVars.staffnonote, multilineVars.openSlurs);\n\n\t\t} catch (err) {\n\t\t\tif (err !== \"normal_abort\")\n\t\t\t\tthrow err;\n\t\t}\n\n\t\tvar ph = 11*72;\n\t\tvar pl = 8.5*72;\n\t\tswitch (multilineVars.papersize) {\n\t\t\t//case \"letter\": ph = 11*72; pl = 8.5*72; break;\n\t\t\tcase \"legal\": ph = 14*72; pl = 8.5*72; break;\n\t\t\tcase \"A4\": ph = 11.7*72; pl = 8.3*72; break;\n\t\t}\n\t\tif (multilineVars.landscape) {\n\t\t\tvar x = ph;\n\t\t\tph = pl;\n\t\t\tpl = x;\n\t\t}\n\t\tif (!tune.formatting.pagewidth)\n\t\t\ttune.formatting.pagewidth = pl;\n\t\tif (!tune.formatting.pageheight)\n\t\t\ttune.formatting.pageheight = ph;\n\n\t\tif (switches.hint_measures) {\n\t\t\taddHintMeasures();\n\t\t}\n\n\t\twrap.wrapLines(tune, multilineVars.lineBreaks, multilineVars.barNumbers);\n\t};\n};\n\nmodule.exports = Parse;\n","// abc_parse_book.js: parses a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\n\nvar bookParser = function(book) {\n\t\"use strict\";\n\n\tvar directives = \"\";\n\tvar initialWhiteSpace = book.match(/(\\s*)/)\n\tbook = parseCommon.strip(book);\n\tvar tuneStrings = book.split(\"\\nX:\");\n\t// Put back the X: that we lost when splitting the tunes.\n\tfor (var i = 1; i < tuneStrings.length; i++)\n\t\ttuneStrings[i] = \"X:\" + tuneStrings[i];\n\t// Keep track of the character position each tune starts with. If the string starts with white space, count that, too.\n\tvar pos = initialWhiteSpace ? initialWhiteSpace[0].length : 0;\n\tvar tunes = [];\n\ttuneStrings.forEach(function(tune) {\n\t\ttunes.push({ abc: tune, startPos: pos});\n\t\tpos += tune.length + 1; // We also lost a newline when splitting, so count that.\n\t});\n\tif (tunes.length > 1 && !parseCommon.startsWith(tunes[0].abc, 'X:')) {\t// If there is only one tune, the X: might be missing, otherwise assume the top of the file is \"intertune\"\n\t\t// There could be file-wide directives in this, if so, we need to insert it into each tune. We can probably get away with\n\t\t// just looking for file-wide directives here (before the first tune) and inserting them at the bottom of each tune, since\n\t\t// the tune is parsed all at once. The directives will be seen before the engraver begins processing.\n\t\tvar dir = tunes.shift();\n\t\tvar arrDir = dir.abc.split('\\n');\n\t\tarrDir.forEach(function(line) {\n\t\t\tif (parseCommon.startsWith(line, '%%'))\n\t\t\t\tdirectives += line + '\\n';\n\t\t});\n\t}\n\tvar header = directives;\n\n\t// Now, the tune ends at a blank line, so truncate it if needed. There may be \"intertune\" stuff.\n\ttunes.forEach(function(tune) {\n\t\tvar end = tune.abc.indexOf('\\n\\n');\n\t\tif (end > 0)\n\t\t\ttune.abc = tune.abc.substring(0, end);\n\t\ttune.pure = tune.abc;\n\t\ttune.abc = directives + tune.abc;\n\n\t\t// for the user's convenience, parse and store the title separately. The title is between the first T: and the next \\n\n\t\ttune.title = \"\";\n\t\tvar title = tune.pure.split(\"T:\");\n\t\tif (title.length > 1) {\n\t\t\ttitle = title[1].split(\"\\n\");\n\t\t\ttune.title = parseCommon.strip(title[0]);\n\t\t}\n\n\t\t// for the user's convenience, parse and store the id separately. The id is between the first X: and the next \\n\n\t\tvar id = tune.pure.substring(2, tune.pure.indexOf(\"\\n\"));\n\t\ttune.id = parseCommon.strip(id);\n\t});\n\n\treturn {\n\t\theader: header,\n\t\ttunes: tunes\n\t};\n};\n\nmodule.exports = bookParser;\n\n","var parseCommon = require('./abc_common');\n\nvar parseDirective = {};\n\n(function() {\n\t\"use strict\";\n\tvar tokenizer;\n\tvar warn;\n\tvar multilineVars;\n\tvar tune;\n\tvar tuneBuilder;\n\tparseDirective.initialize = function(tokenizer_, warn_, multilineVars_, tune_, tuneBuilder_) {\n\t\ttokenizer = tokenizer_;\n\t\twarn = warn_;\n\t\tmultilineVars = multilineVars_;\n\t\ttune = tune_;\n\t\ttuneBuilder = tuneBuilder_;\n\t\tinitializeFonts();\n\t};\n\n\tfunction initializeFonts() {\n\t\tmultilineVars.annotationfont = { face: \"Helvetica\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.gchordfont = { face: \"Helvetica\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.historyfont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.infofont = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\tmultilineVars.measurefont = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\tmultilineVars.partsfont = { face: \"\\\"Times New Roman\\\"\", size: 15, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.repeatfont = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.textfont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.tripletfont = {face: \"Times\", size: 11, weight: \"normal\", style: \"italic\", decoration: \"none\"};\n\t\tmultilineVars.vocalfont = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\tmultilineVars.wordsfont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\n\t\t// These fonts are global for the entire tune.\n\t\ttune.formatting.composerfont = { face: \"\\\"Times New Roman\\\"\", size: 14, weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\ttune.formatting.subtitlefont = { face: \"\\\"Times New Roman\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tempofont = { face: \"\\\"Times New Roman\\\"\", size: 15, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.titlefont = { face: \"\\\"Times New Roman\\\"\", size: 20, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.footerfont = { face: \"\\\"Times New Roman\\\"\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.headerfont = { face: \"\\\"Times New Roman\\\"\", size: 12, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.voicefont = { face: \"\\\"Times New Roman\\\"\", size: 13, weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tablabelfont = { face: \"\\\"Trebuchet MS\\\"\", size: 16, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tabnumberfont = { face: \"\\\"Arial\\\"\", size: 11, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\ttune.formatting.tabgracefont = { face: \"\\\"Arial\\\"\", size: 8, weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\n\t\t// these are the default fonts for these element types. In the printer, these fonts might change as the tune progresses.\n\t\ttune.formatting.annotationfont = multilineVars.annotationfont;\n\t\ttune.formatting.gchordfont = multilineVars.gchordfont;\n\t\ttune.formatting.historyfont = multilineVars.historyfont;\n\t\ttune.formatting.infofont = multilineVars.infofont;\n\t\ttune.formatting.measurefont = multilineVars.measurefont;\n\t\ttune.formatting.partsfont = multilineVars.partsfont;\n\t\ttune.formatting.repeatfont = multilineVars.repeatfont;\n\t\ttune.formatting.textfont = multilineVars.textfont;\n\t\ttune.formatting.tripletfont = multilineVars.tripletfont;\n\t\ttune.formatting.vocalfont = multilineVars.vocalfont;\n\t\ttune.formatting.wordsfont = multilineVars.wordsfont;\n\t}\n\n\tvar fontTypeCanHaveBox = { gchordfont: true, measurefont: true, partsfont: true, annotationfont: true, composerfont: true, historyfont: true, infofont: true, subtitlefont: true, textfont: true, titlefont: true, voicefont: true };\n\n\tvar fontTranslation = function(fontFace) {\n\t\t// This translates Postscript fonts for a web alternative.\n\t\t// Note that the postscript fonts contain italic and bold info in them, so what is returned is a hash.\n\n\t\tswitch (fontFace) {\n\t\t\tcase \"Arial-Italic\":\n\t\t\t\treturn { face: \"Arial\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Arial-Bold\":\n\t\t\t\treturn { face: \"Arial\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-Demi\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-DemiItalic\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Bookman-Light\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Bookman-LightItalic\":\n\t\t\t\treturn { face: \"Bookman,serif\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Courier\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Courier-Oblique\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Courier-Bold\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Courier-BoldOblique\":\n\t\t\t\treturn { face: \"\\\"Courier New\\\"\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-Book\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-BookOblique\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-Demi\":\n\t\t\tcase \"Avant-Garde-Demi\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"AvantGarde-DemiOblique\":\n\t\t\t\treturn { face: \"AvantGarde,Arial\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Oblique\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Bold\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-BoldOblique\":\n\t\t\t\treturn { face: \"Helvetica\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-Oblique\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-Bold\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Helvetica-Narrow-BoldOblique\":\n\t\t\t\treturn { face: \"\\\"Helvetica Narrow\\\",Helvetica\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Roman\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Italic\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Palatino-Bold\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Palatino-BoldItalic\":\n\t\t\t\treturn { face: \"Palatino\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Roman\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Italic\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-Bold\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"NewCenturySchlbk-BoldItalic\":\n\t\t\t\treturn { face: \"\\\"New Century\\\",serif\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Times\":\n\t\t\tcase \"Times-Roman\":\n\t\t\tcase \"Times-Narrow\":\n\t\t\tcase \"Times-Courier\":\n\t\t\tcase \"Times-New-Roman\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Times-Italic\":\n\t\t\tcase \"Times-Italics\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"Times-Bold\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"bold\", style: \"normal\", decoration: \"none\" };\n\t\t\tcase \"Times-BoldItalic\":\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"bold\", style: \"italic\", decoration: \"none\" };\n\t\t\tcase \"ZapfChancery-MediumItalic\":\n\t\t\t\treturn { face: \"\\\"Zapf Chancery\\\",cursive,serif\", weight: \"normal\", style: \"normal\", decoration: \"none\" };\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t};\n\n\tvar getFontParameter = function(tokens, currentSetting, str, position, cmd) {\n\t\t// Every font parameter has the following format:\n\t\t// \n\t\t// Where:\n\t\t// face: either a standard web font name, or a postscript font, enumerated in fontTranslation. This could also be an * or be missing if the face shouldn't change.\n\t\t// utf8: This is optional, and specifies utf8. That's all that is supported so the field is just silently ignored.\n\t\t// size: The size, in pixels. This may be omitted if the size is not changing.\n\t\t// modifiers: zero or more of \"bold\", \"italic\", \"underline\"\n\t\t// box: Only applies to the measure numbers, gchords, and the parts. If present, then a box is drawn around the characters.\n\t\t// If face is present, then all the modifiers are cleared. If face is absent, then the modifiers are illegal.\n\t\t// The face can be a single word, a set of words separated by hyphens, or a quoted string.\n\t\t//\n\t\t// So, in practicality, there are three types of font definitions: a number only, an asterisk and a number only, or the full definition (with an optional size).\n\t\tfunction processNumberOnly() {\n\t\t\tvar size = parseInt(tokens[0].token);\n\t\t\ttokens.shift();\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Can't set just the size of the font since there is no default value.\", str, position);\n\t\t\t\treturn { face: \"\\\"Times New Roman\\\"\", weight: \"normal\", style: \"normal\", decoration: \"none\", size: size};\n\t\t\t}\n\t\t\tif (tokens.length === 0) {\n\t\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size};\n\t\t\t}\n\t\t\tif (tokens.length === 1 && tokens[0].token === \"box\" && fontTypeCanHaveBox[cmd])\n\t\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size, box: true};\n\t\t\twarn(\"Extra parameters in font definition.\", str, position);\n\t\t\treturn { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size};\n\t\t}\n\n\t\t// format 1: asterisk and number only\n\t\tif (tokens[0].token === '*') {\n\t\t\ttokens.shift();\n\t\t\tif (tokens[0].type === 'number')\n\t\t\t\treturn processNumberOnly();\n\t\t\telse {\n\t\t\t\twarn(\"Expected font size number after *.\", str, position);\n\t\t\t}\n\t\t}\n\n\t\t// format 2: number only\n\t\tif (tokens[0].type === 'number') {\n\t\t\treturn processNumberOnly();\n\t\t}\n\n\t\t// format 3: whole definition\n\t\tvar face = [];\n\t\tvar size;\n\t\tvar weight = \"normal\";\n\t\tvar style = \"normal\";\n\t\tvar decoration = \"none\";\n\t\tvar box = false;\n\t\tvar state = 'face';\n\t\tvar hyphenLast = false;\n\t\twhile (tokens.length) {\n\t\t\tvar currToken = tokens.shift();\n\t\t\tvar word = currToken.token.toLowerCase();\n\t\t\tswitch (state) {\n\t\t\t\tcase 'face':\n\t\t\t\t\tif (hyphenLast || (word !== 'utf' && currToken.type !== 'number' && word !== \"bold\" && word !== \"italic\" && word !== \"underline\" && word !== \"box\")) {\n\t\t\t\t\t\tif (face.length > 0 && currToken.token === '-') {\n\t\t\t\t\t\t\thyphenLast = true;\n\t\t\t\t\t\t\tface[face.length-1] = face[face.length-1] + currToken.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (hyphenLast) {\n\t\t\t\t\t\t\t\thyphenLast = false;\n\t\t\t\t\t\t\t\tface[face.length-1] = face[face.length-1] + currToken.token;\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\tface.push(currToken.token);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (currToken.type === 'number') {\n\t\t\t\t\t\t\tif (size) {\n\t\t\t\t\t\t\t\twarn(\"Font size specified twice in font definition.\", str, position);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsize = currToken.token;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstate = 'modifier';\n\t\t\t\t\t\t} else if (word === \"bold\")\n\t\t\t\t\t\t\tweight = \"bold\";\n\t\t\t\t\t\telse if (word === \"italic\")\n\t\t\t\t\t\t\tstyle = \"italic\";\n\t\t\t\t\t\telse if (word === \"underline\")\n\t\t\t\t\t\t\tdecoration = \"underline\";\n\t\t\t\t\t\telse if (word === \"box\") {\n\t\t\t\t\t\t\tif (fontTypeCanHaveBox[cmd])\n\t\t\t\t\t\t\t\tbox = true;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\twarn(\"This font style doesn't support \\\"box\\\"\", str, position);\n\t\t\t\t\t\t\tstate = \"finished\";\n\t\t\t\t\t\t} else if (word === \"utf\") {\n\t\t\t\t\t\t\tcurrToken = tokens.shift(); // this gets rid of the \"8\" after \"utf\"\n\t\t\t\t\t\t\tstate = \"size\";\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\twarn(\"Unknown parameter \" + currToken.token + \" in font definition.\", str, position);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"size\":\n\t\t\t\t\tif (currToken.type === 'number') {\n\t\t\t\t\t\tif (size) {\n\t\t\t\t\t\t\twarn(\"Font size specified twice in font definition.\", str, position);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsize = currToken.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twarn(\"Expected font size in font definition.\", str, position);\n\t\t\t\t\t}\n\t\t\t\t\tstate = 'modifier';\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"modifier\":\n\t\t\t\t\tif (word === \"bold\")\n\t\t\t\t\t\tweight = \"bold\";\n\t\t\t\t\telse if (word === \"italic\")\n\t\t\t\t\t\tstyle = \"italic\";\n\t\t\t\t\telse if (word === \"underline\")\n\t\t\t\t\t\tdecoration = \"underline\";\n\t\t\t\t\telse if (word === \"box\") {\n\t\t\t\t\t\tif (fontTypeCanHaveBox[cmd])\n\t\t\t\t\t\t\tbox = true;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"This font style doesn't support \\\"box\\\"\", str, position);\n\t\t\t\t\t\tstate = \"finished\";\n\t\t\t\t\t} else\n\t\t\t\t\t\twarn(\"Unknown parameter \" + currToken.token + \" in font definition.\", str, position);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"finished\":\n\t\t\t\t\twarn(\"Extra characters found after \\\"box\\\" in font definition.\", str, position);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (size === undefined) {\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Must specify the size of the font since there is no default value.\", str, position);\n\t\t\t\tsize = 12;\n\t\t\t} else\n\t\t\t\tsize = currentSetting.size;\n\t\t} else\n\t\t\tsize = parseFloat(size);\n\n\t\tface = face.join(' ');\n\t\tif (face === '') {\n\t\t\tif (!currentSetting) {\n\t\t\t\twarn(\"Must specify the name of the font since there is no default value.\", str, position);\n\t\t\t\tface = \"sans-serif\";\n\t\t\t} else\n\t\t\t\tface = currentSetting.face;\n\t\t}\n\t\tvar psFont = fontTranslation(face);\n\t\tvar font = {};\n\t\tif (psFont) {\n\t\t\tfont.face = psFont.face;\n\t\t\tfont.weight = psFont.weight;\n\t\t\tfont.style = psFont.style;\n\t\t\tfont.decoration = psFont.decoration;\n\t\t\tfont.size = size;\n\t\t\tif (box)\n\t\t\t\tfont.box = true;\n\t\t\treturn font;\n\t\t}\n\t\tfont.face = face;\n\t\tfont.weight = weight;\n\t\tfont.style = style;\n\t\tfont.decoration = decoration;\n\t\tfont.size = size;\n\t\tif (box)\n\t\t\tfont.box = true;\n\t\treturn font;\n\t};\n\n\tvar getChangingFont = function(cmd, tokens, str) {\n\t\tif (tokens.length === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a font as a parameter.\";\n\t\tmultilineVars[cmd] = getFontParameter(tokens, multilineVars[cmd], str, 0, cmd);\n\t\tif (multilineVars.is_in_header) // If the font appears in the header, then it becomes the default font.\n\t\t\ttune.formatting[cmd] = multilineVars[cmd];\n\t\treturn null;\n\t};\n\tvar getGlobalFont = function(cmd, tokens, str) {\n\t\tif (tokens.length === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a font as a parameter.\";\n\t\ttune.formatting[cmd] = getFontParameter(tokens, tune.formatting[cmd], str, 0, cmd);\n\t\treturn null;\n\t};\n\n\tvar setScale = function(cmd, tokens) {\n\t\tvar scratch = \"\";\n\t\ttokens.forEach(function(tok) {\n\t\t\tscratch += tok.token;\n\t\t});\n\t\tvar num = parseFloat(scratch);\n\t\tif (isNaN(num) || num === 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\";\n\t\ttune.formatting.scale = num;\n\n\t};\n\t// starts at 35\n\tvar drumNames = [\n\t\t\"acoustic-bass-drum\",\n\t\t\"bass-drum-1\",\n\t\t\"side-stick\",\n\t\t\"acoustic-snare\",\n\t\t\"hand-clap\",\n\t\t\"electric-snare\",\n\t\t\"low-floor-tom\",\n\t\t\"closed-hi-hat\",\n\t\t\"high-floor-tom\",\n\t\t\"pedal-hi-hat\",\n\t\t\"low-tom\",\n\t\t\"open-hi-hat\",\n\t\t\"low-mid-tom\",\n\t\t\"hi-mid-tom\",\n\t\t\"crash-cymbal-1\",\n\t\t\"high-tom\",\n\t\t\"ride-cymbal-1\",\n\t\t\"chinese-cymbal\",\n\t\t\"ride-bell\",\n\t\t\"tambourine\",\n\t\t\"splash-cymbal\",\n\t\t\"cowbell\",\n\t\t\"crash-cymbal-2\",\n\t\t\"vibraslap\",\n\t\t\"ride-cymbal-2\",\n\t\t\"hi-bongo\",\n\t\t\"low-bongo\",\n\t\t\"mute-hi-conga\",\n\t\t\"open-hi-conga\",\n\t\t\"low-conga\",\n\t\t\"high-timbale\",\n\t\t\"low-timbale\",\n\t\t\"high-agogo\",\n\t\t\"low-agogo\",\n\t\t\"cabasa\",\n\t\t\"maracas\",\n\t\t\"short-whistle\",\n\t\t\"long-whistle\",\n\t\t\"short-guiro\",\n\t\t\"long-guiro\",\n\t\t\"claves\",\n\t\t\"hi-wood-block\",\n\t\t\"low-wood-block\",\n\t\t\"mute-cuica\",\n\t\t\"open-cuica\",\n\t\t\"mute-triangle\",\n\t\t\"open-triangle\",\n\t];\n\n\tvar interpretPercMap = function(restOfString) {\n\t\tvar tokens = restOfString.split(/\\s+/); // Allow multiple spaces.\n\t\tif (tokens.length !== 2 && tokens.length !== 3)\n\t\t\treturn { error: 'Expected parameters \"abc-note\", \"drum-sound\", and optionally \"note-head\"'};\n\t\tvar key = tokens[0];\n\t\t// The percussion sound can either be a MIDI number or a drum name. If it is not a number then check for a name.\n\t\tvar pitch = parseInt(tokens[1], 10);\n\t\tif ((isNaN(pitch) || pitch < 35 || pitch > 81) && tokens[1]) {\n\t\t\tpitch = drumNames.indexOf(tokens[1].toLowerCase()) + 35;\n\t\t}\n\t\tif ((isNaN(pitch) || pitch < 35 || pitch > 81))\n\t\t\treturn { error: 'Expected drum name, received \"' + tokens[1] + '\"' };\n\t\tvar value = { sound: pitch };\n\t\tif (tokens.length === 3)\n\t\t\tvalue.noteHead = tokens[2];\n\t\treturn { key: key, value: value };\n\t};\n\n\tvar getRequiredMeasurement = function(cmd, tokens) {\n\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\treturn { error: \"Directive \\\"\" + cmd + \"\\\" requires a measurement as a parameter.\"};\n\t\treturn points.value;\n\t};\n\tvar oneParameterMeasurement = function(cmd, tokens) {\n\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a measurement as a parameter.\";\n\t\ttune.formatting[cmd] = points.value;\n\t\treturn null;\n\t};\n\n\tvar addMultilineVar = function(key, cmd, tokens, min, max) {\n\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\";\n\t\tvar i = tokens[0].intt;\n\t\tif (min !== undefined && i < min)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number greater than or equal to \" + min + \" as a parameter.\";\n\t\tif (max !== undefined && i > max)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires a number less than or equal to \" + max + \" as a parameter.\";\n\t\tmultilineVars[key] = i;\n\t\treturn null;\n\t};\n\n\tvar addMultilineVarBool = function(key, cmd, tokens) {\n\t\tif (tokens.length === 1 && (tokens[0].token === 'true' || tokens[0].token === 'false')) {\n\t\t\tmultilineVars[key] = tokens[0].token === 'true';\n\t\t\treturn null;\n\t\t}\n\t\tvar str = addMultilineVar(key, cmd, tokens, 0, 1);\n\t\tif (str !== null) return str;\n\t\tmultilineVars[key] = (multilineVars[key] === 1);\n\t\treturn null;\n\t};\n\n\tvar addMultilineVarOneParamChoice = function(key, cmd, tokens, choices) {\n\t\tif (tokens.length !== 1)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires one of [ \" + choices.join(\", \") + \" ] as a parameter.\";\n\t\tvar choice = tokens[0].token;\n\t\tvar found = false;\n\t\tfor (var i = 0; !found && i < choices.length; i++) {\n\t\t\tif (choices[i] === choice)\n\t\t\t\tfound = true;\n\t\t}\n\t\tif (!found)\n\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires one of [ \" + choices.join(\", \") + \" ] as a parameter.\";\n\t\tmultilineVars[key] = choice;\n\t\treturn null;\n\t};\n\n\tvar midiCmdParam0 = [\n\t\t\"nobarlines\",\n\t\t\"barlines\",\n\t\t\"beataccents\",\n\t\t\"nobeataccents\",\n\t\t\"droneon\",\n\t\t\"droneoff\",\n\t\t\"drumon\",\n\t\t\"drumoff\",\n\t\t\"fermatafixed\",\n\t\t\"fermataproportional\",\n\t\t\"gchordon\",\n\t\t\"gchordoff\",\n\t\t\"controlcombo\",\n\t\t\"temperamentnormal\",\n\t\t\"noportamento\"\n\t];\n\tvar midiCmdParam1String = [\n\t\t\"gchord\",\n\t\t\"ptstress\",\n\t\t\"beatstring\"\n\t];\n\tvar midiCmdParam1Integer = [\n\t\t\"bassvol\",\n\t\t\"chordvol\",\n\t\t\"bassprog\",\n\t\t\"chordprog\",\n\t\t\"c\",\n\t\t\"channel\",\n\t\t\"beatmod\",\n\t\t\"deltaloudness\",\n\t\t\"drumbars\",\n\t\t\"gracedivider\",\n\t\t\"makechordchannels\",\n\t\t\"randomchordattack\",\n\t\t\"chordattack\",\n\t\t\"stressmodel\",\n\t\t\"transpose\",\n\t\t\"rtranspose\",\n\t\t\"vol\",\n\t\t\"volinc\"\n\t];\n\tvar midiCmdParam1Integer1OptionalInteger = [\n\t\t\"program\"\n\t];\n\tvar midiCmdParam2Integer = [\n\t\t\"ratio\",\n\t\t\"snt\",\n\t\t\"bendvelocity\",\n\t\t\"pitchbend\",\n\t\t\"control\",\n\t\t\"temperamentlinear\"\n\t];\n\tvar midiCmdParam4Integer = [\n\t\t\"beat\"\n\t];\n\tvar midiCmdParam5Integer = [\n\t\t\"drone\"\n\t];\n\tvar midiCmdParam1String1Integer = [\n\t\t\"portamento\"\n\t];\n\tvar midiCmdParamFraction = [\n\t\t\"expand\",\n\t\t\"grace\",\n\t\t\"trim\"\n\t];\n\tvar midiCmdParam1StringVariableIntegers = [\n\t\t\"drum\",\n\t\t\"chordname\"\n\t];\n\n\tvar parseMidiCommand = function(midi, tune, restOfString) {\n\t\tvar midi_cmd = midi.shift().token;\n\t\tvar midi_params = [];\n\t\tif (midiCmdParam0.indexOf(midi_cmd) >= 0) {\n\t\t\t// NO PARAMETERS\n\t\t\tif (midi.length !== 0)\n\t\t\t\twarn(\"Unexpected parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t} else if (midiCmdParam1String.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING PARAMETER\n\t\t\tif (midi.length !== 1)\n\t\t\t\twarn(\"Expected one parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse\n\t\t\t\tmidi_params.push(midi[0].token);\n\t\t} else if (midiCmdParam1Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER\n\t\t\tif (midi.length !== 1)\n\t\t\t\twarn(\"Expected one parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t} else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER, ONE OPTIONAL PARAMETER\n\t\t\tif (midi.length !== 1 && midi.length !== 2)\n\t\t\t\twarn(\"Expected one or two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi.length === 2 && midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tif (midi.length === 2)\n\t\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam2Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// TWO INT PARAMETERS\n\t\t\tif (midi.length !== 2)\n\t\t\t\twarn(\"Expected two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected two integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1String1Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING PARAMETER, ONE INT PARAMETER\n\t\t\tif (midi.length !== 2)\n\t\t\t\twarn(\"Expected two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"alpha\" || midi[1].type !== \"number\")\n\t\t\t\twarn(\"Expected one string and one integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].token);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t}\n\t\t} else if (midi_cmd === 'drummap') {\n\t\t\t// BUILD AN OBJECT OF ABC NOTE => MIDI NOTE\n\t\t\tif (midi.length === 2 && midi[0].type === 'alpha' && midi[1].type === 'number') {\n\t\t\t\tif (!tune.formatting) tune.formatting = {};\n\t\t\t\tif (!tune.formatting.midi) tune.formatting.midi = {};\n\t\t\t\tif (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {};\n\t\t\t\ttune.formatting.midi.drummap[midi[0].token] = midi[1].intt;\n\t\t\t\tmidi_params = tune.formatting.midi.drummap;\n\t\t\t} else if (midi.length === 3 && midi[0].type === 'punct' && midi[1].type === 'alpha' && midi[2].type === 'number') {\n\t\t\t\tif (!tune.formatting) tune.formatting = {};\n\t\t\t\tif (!tune.formatting.midi) tune.formatting.midi = {};\n\t\t\t\tif (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {};\n\t\t\t\ttune.formatting.midi.drummap[midi[0].token+midi[1].token] = midi[2].intt;\n\t\t\t\tmidi_params = tune.formatting.midi.drummap;\n\t\t\t} else {\n\t\t\t\twarn(\"Expected one note name and one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t}\n\t\t} else if (midiCmdParamFraction.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE FRACTION PARAMETER\n\t\t\tif (midi.length !== 3)\n\t\t\t\twarn(\"Expected fraction parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].token !== \"/\" || midi[2].type !== \"number\")\n\t\t\t\twarn(\"Expected fraction parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam4Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// FOUR INT PARAMETERS\n\t\t\tif (midi.length !== 4)\n\t\t\t\twarn(\"Expected four parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\" || midi[2].type !== \"number\" || midi[3].type !== \"number\")\n\t\t\t\twarn(\"Expected four integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam5Integer.indexOf(midi_cmd) >= 0) {\n\t\t\t// FIVE INT PARAMETERS\n\t\t\tif (midi.length !== 5)\n\t\t\t\twarn(\"Expected five parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\" || midi[1].type !== \"number\" || midi[2].type !== \"number\" || midi[3].type !== \"number\" || midi[4].type !== \"number\")\n\t\t\t\twarn(\"Expected five integer parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tmidi_params.push(midi[1].intt);\n\t\t\t\tmidi_params.push(midi[2].intt);\n\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t\tmidi_params.push(midi[4].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE INT PARAMETER, ONE OPTIONAL OCTAVE PARAMETER\n\t\t\tif (midi.length !== 1 || midi.length !== 4)\n\t\t\t\twarn(\"Expected one or two parameters in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"number\")\n\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi.length === 4) {\n\t\t\t\tif (midi[1].token !== \"octave\")\n\t\t\t\t\twarn(\"Expected octave parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\tif (midi[2].token !== \"=\")\n\t\t\t\t\twarn(\"Expected octave parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\tif (midi[3].type !== \"number\")\n\t\t\t\t\twarn(\"Expected integer parameter for octave in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t} else {\n\t\t\t\tmidi_params.push(midi[0].intt);\n\t\t\t\tif (midi.length === 4)\n\t\t\t\t\tmidi_params.push(midi[3].intt);\n\t\t\t}\n\t\t} else if (midiCmdParam1StringVariableIntegers.indexOf(midi_cmd) >= 0) {\n\t\t\t// ONE STRING, VARIABLE INT PARAMETERS\n\t\t\tif (midi.length < 2)\n\t\t\t\twarn(\"Expected string parameter and at least one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse if (midi[0].type !== \"alpha\")\n\t\t\t\twarn(\"Expected string parameter and at least one integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\telse {\n\t\t\t\tvar p = midi.shift();\n\t\t\t\tmidi_params.push(p.token);\n\t\t\t\twhile (midi.length > 0) {\n\t\t\t\t\tp = midi.shift();\n\t\t\t\t\tif (p.type !== \"number\")\n\t\t\t\t\t\twarn(\"Expected integer parameter in MIDI \" + midi_cmd, restOfString, 0);\n\t\t\t\t\tmidi_params.push(p.intt);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\ttuneBuilder.appendElement('midi', -1, -1, { cmd: midi_cmd, params: midi_params });\n\t\telse {\n\t\t\tif (tune.formatting['midi'] === undefined)\n\t\t\t\ttune.formatting['midi'] = {};\n\t\t\ttune.formatting['midi'][midi_cmd] = midi_params;\n\t\t}\n\t};\n\n\tparseDirective.parseFontChangeLine = function(textstr) {\n\t\tvar textParts = textstr.split('$');\n\t\tif (textParts.length > 1 && multilineVars.setfont) {\n\t\t\tvar textarr = [ { text: textParts[0] }];\n\t\t\tfor (var i = 1; i < textParts.length; i++) {\n\t\t\t\tif (textParts[i][0] === '0')\n\t\t\t\t\ttextarr.push({ text: textParts[i].substring(1) });\n\t\t\t\telse if (textParts[i][0] === '1' && multilineVars.setfont[1])\n\t\t\t\t\ttextarr.push({font: multilineVars.setfont[1], text: textParts[i].substring(1) });\n\t\t\t\telse if (textParts[i][0] === '2' && multilineVars.setfont[2])\n\t\t\t\t\ttextarr.push({font: multilineVars.setfont[2], text: textParts[i].substring(1) });\n\t\t\t\telse if (textParts[i][0] === '3' && multilineVars.setfont[3])\n\t\t\t\t\ttextarr.push({font: multilineVars.setfont[3], text: textParts[i].substring(1) });\n\t\t\t\telse if (textParts[i][0] === '4' && multilineVars.setfont[4])\n\t\t\t\t\ttextarr.push({font: multilineVars.setfont[4], text: textParts[i].substring(1) });\n\t\t\t\telse\n\t\t\t\t\ttextarr[textarr.length-1].text += '$' + textParts[i];\n\t\t\t}\n\t\t\tif (textarr.length > 1)\n\t\t\t\treturn textarr;\n\t\t}\n\t\treturn textstr;\n\t};\n\n\tvar positionChoices = [ 'auto', 'above', 'below', 'hidden' ];\n\tparseDirective.addDirective = function(str) {\n\t\tvar tokens = tokenizer.tokenize(str, 0, str.length);\t// 3 or more % in a row, or just spaces after %% is just a comment\n\t\tif (tokens.length === 0 || tokens[0].type !== 'alpha') return null;\n\t\tvar restOfString = str.substring(str.indexOf(tokens[0].token)+tokens[0].token.length);\n\t\trestOfString = tokenizer.stripComment(restOfString);\n\t\tvar cmd = tokens.shift().token.toLowerCase();\n\t\tvar scratch = \"\";\n\t\tvar line;\n\t\tswitch (cmd)\n\t\t{\n\t\t\t// The following directives were added to abc_parser_lint, but haven't been implemented here.\n\t\t\t// Most of them are direct translations from the directives that will be parsed in. See abcm2ps's format.txt for info on each of these.\n\t\t\t//\t\t\t\t\talignbars: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\taligncomposer: { type: \"string\", Enum: [ 'left', 'center','right' ], optional: true },\n\t\t\t//\t\t\t\t\tbstemdown: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tcontinueall: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tdynalign: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\texprabove: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\texprbelow: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tgchordbox: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tgracespacebefore: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tgracespaceinside: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tgracespaceafter: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tinfospace: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tlineskipfac: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxshrink: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxstaffsep: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tmaxsysstaffsep: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tnotespacingfactor: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tparskipfac: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tslurheight: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tsplittune: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tsquarebreve: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tstemheight: { type: \"number\", optional: true },\n\t\t\t//\t\t\t\t\tstraightflags: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\tstretchstaff: { type: \"boolean\", optional: true },\n\t\t\t//\t\t\t\t\ttitleformat: { type: \"string\", optional: true },\n\t\t\tcase \"bagpipes\":tune.formatting.bagpipes = true;break;\n\t\t\tcase \"flatbeams\":tune.formatting.flatbeams = true;break;\n\t\t\tcase \"jazzchords\":tune.formatting.jazzchords = true;break;\n\t\t\tcase \"germanAlphabet\":tune.formatting.germanAlphabet = true;break;\n\t\t\tcase \"landscape\":multilineVars.landscape = true;break;\n\t\t\tcase \"papersize\":multilineVars.papersize = restOfString;break;\n\t\t\tcase \"graceslurs\":\n\t\t\t\tif (tokens.length !== 1)\n\t\t\t\t\treturn \"Directive graceslurs requires one parameter: 0 or 1\";\n\t\t\t\tif (tokens[0].token === '0' || tokens[0].token === 'false')\n\t\t\t\t\ttune.formatting.graceSlurs = false;\n\t\t\t\telse if (tokens[0].token === '1' || tokens[0].token === 'true')\n\t\t\t\t\ttune.formatting.graceSlurs = true;\n\t\t\t\telse\n\t\t\t\t\treturn \"Directive graceslurs requires one parameter: 0 or 1 (received \" + tokens[0].token + ')';\n\t\t\t\tbreak;\n\t\t\tcase \"lineThickness\":\n\t\t\t\tvar lt = parseStretchLast(tokens);\n\t\t\t\tif (lt.value !== undefined)\n\t\t\t\t\ttune.formatting.lineThickness = lt.value;\n\t\t\t\tif (lt.error)\n\t\t\t\t\treturn lt.error;\n\t\t\t\tbreak;\n\t\t\tcase \"stretchlast\":\n\t\t\t\tvar sl = parseStretchLast(tokens);\n\t\t\t\tif (sl.value !== undefined)\n\t\t\t\t\ttune.formatting.stretchlast = sl.value;\n\t\t\t\tif (sl.error)\n\t\t\t\t\treturn sl.error;\n\t\t\t\tbreak;\n\t\t\tcase \"titlecaps\":multilineVars.titlecaps = true;break;\n\t\t\tcase \"titleleft\":tune.formatting.titleleft = true;break;\n\t\t\tcase \"measurebox\":tune.formatting.measurebox = true;break;\n\n\t\t\tcase \"vocal\": return addMultilineVarOneParamChoice(\"vocalPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"dynamic\": return addMultilineVarOneParamChoice(\"dynamicPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"gchord\": return addMultilineVarOneParamChoice(\"chordPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"ornament\": return addMultilineVarOneParamChoice(\"ornamentPosition\", cmd, tokens, positionChoices);\n\t\t\tcase \"volume\": return addMultilineVarOneParamChoice(\"volumePosition\", cmd, tokens, positionChoices);\n\n\t\t\tcase \"botmargin\":\n\t\t\tcase \"botspace\":\n\t\t\tcase \"composerspace\":\n\t\t\tcase \"indent\":\n\t\t\tcase \"leftmargin\":\n\t\t\tcase \"linesep\":\n\t\t\tcase \"musicspace\":\n\t\t\tcase \"partsspace\":\n\t\t\tcase \"pageheight\":\n\t\t\tcase \"pagewidth\":\n\t\t\tcase \"rightmargin\":\n\t\t\tcase \"staffsep\":\n\t\t\tcase \"staffwidth\":\n\t\t\tcase \"subtitlespace\":\n\t\t\tcase \"sysstaffsep\":\n\t\t\tcase \"systemsep\":\n\t\t\tcase \"textspace\":\n\t\t\tcase \"titlespace\":\n\t\t\tcase \"topmargin\":\n\t\t\tcase \"topspace\":\n\t\t\tcase \"vocalspace\":\n\t\t\tcase \"wordsspace\":\n\t\t\t\treturn oneParameterMeasurement(cmd, tokens);\n\t\t\tcase \"voicescale\":\n\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\treturn \"voicescale requires one float as a parameter\";\n\t\t\t\tvar voiceScale = tokens.shift();\n\t\t\t\tif (multilineVars.currentVoice) {\n\t\t\t\t\tmultilineVars.currentVoice.scale = voiceScale.floatt;\n\t\t\t\t\ttuneBuilder.changeVoiceScale(multilineVars.currentVoice.scale);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\tcase \"voicecolor\":\n\t\t\t\tif (tokens.length !== 1) // this could either be of type alpha or quote, but it's ok if it is a number\n\t\t\t\t\treturn \"voicecolor requires one string as a parameter\";\n\t\t\t\tvar voiceColor = tokens.shift();\n\t\t\t\tif (multilineVars.currentVoice) {\n\t\t\t\t\tmultilineVars.currentVoice.color = voiceColor.token;\n\t\t\t\t\ttuneBuilder.changeVoiceColor(multilineVars.currentVoice.color);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\tcase \"vskip\":\n\t\t\t\tvar vskip = Math.round(getRequiredMeasurement(cmd, tokens));\n\t\t\t\tif (vskip.error)\n\t\t\t\t\treturn vskip.error;\n\t\t\t\ttuneBuilder.addSpacing(vskip);\n\t\t\t\treturn null;\n\t\t\tcase \"scale\":\n\t\t\t\tsetScale(cmd, tokens);\n\t\t\t\tbreak;\n\t\t\tcase \"sep\":\n\t\t\t\tif (tokens.length === 0)\n\t\t\t\t\ttuneBuilder.addSeparator(14,14,85, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+5}); // If no parameters are given, then there is a default size.\n\t\t\t\telse {\n\t\t\t\t\tvar points = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar spaceAbove = points.value;\n\n\t\t\t\t\tpoints = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar spaceBelow = points.value;\n\n\t\t\t\t\tpoints = tokenizer.getMeasurement(tokens);\n\t\t\t\t\tif (points.used === 0 || tokens.length !== 0)\n\t\t\t\t\t\treturn \"Directive \\\"\" + cmd + \"\\\" requires 3 numbers: space above, space below, length of line\";\n\t\t\t\t\tvar lenLine = points.value;\n\t\t\t\t\ttuneBuilder.addSeparator(spaceAbove, spaceBelow, lenLine, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"barsperstaff\":\n\t\t\t\tscratch = addMultilineVar('barsperstaff', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"staffnonote\":\n\t\t\t\t// The sense of the boolean is opposite here. \"0\" means true.\n\t\t\t\tif (tokens.length !== 1)\n\t\t\t\t\treturn \"Directive staffnonote requires one parameter: 0 or 1\";\n\t\t\t\tif (tokens[0].token === '0')\n\t\t\t\t\tmultilineVars.staffnonote = true;\n\t\t\t\telse if (tokens[0].token === '1')\n\t\t\t\t\tmultilineVars.staffnonote = false;\n\t\t\t\telse\n\t\t\t\t\treturn \"Directive staffnonote requires one parameter: 0 or 1 (received \" + tokens[0].token + ')';\n\t\t\t\tbreak;\n\t\t\tcase \"printtempo\":\n\t\t\t\tscratch = addMultilineVarBool('printTempo', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"partsbox\":\n\t\t\t\tscratch = addMultilineVarBool('partsBox', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tmultilineVars.partsfont.box = multilineVars.partsBox;\n\t\t\t\tbreak;\n\t\t\tcase \"freegchord\":\n\t\t\t\tscratch = addMultilineVarBool('freegchord', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"measurenb\":\n\t\t\tcase \"barnumbers\":\n\t\t\t\tscratch = addMultilineVar('barNumbers', cmd, tokens);\n\t\t\t\tif (scratch !== null) return scratch;\n\t\t\t\tbreak;\n\t\t\tcase \"setbarnb\":\n\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number') {\n\t\t\t\t\treturn 'Directive setbarnb requires a number as a parameter.';\n\t\t\t\t}\n\t\t\t\tmultilineVars.currBarNumber = tuneBuilder.setBarNumberImmediate(tokens[0].intt);\n\t\t\t\tbreak;\n\t\t\tcase \"begintext\":\n\t\t\t\tvar textBlock = '';\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\twhile(line && line.indexOf('%%endtext') !== 0) {\n\t\t\t\t\tif (parseCommon.startsWith(line, \"%%\"))\n\t\t\t\t\t\ttextBlock += line.substring(2) + \"\\n\";\n\t\t\t\t\telse\n\t\t\t\t\t\ttextBlock += line + \"\\n\";\n\t\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\t}\n\t\t\t\ttuneBuilder.addText(textBlock, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+textBlock.length+7});\n\t\t\t\tbreak;\n\t\t\tcase \"continueall\":\n\t\t\t\tmultilineVars.continueall = true;\n\t\t\t\tbreak;\n\t\t\tcase \"beginps\":\n\t\t\t\tline = tokenizer.nextLine();\n\t\t\t\twhile(line && line.indexOf('%%endps') !== 0) {\n\t\t\t\t\ttokenizer.nextLine();\n\t\t\t\t}\n\t\t\t\twarn(\"Postscript ignored\", str, 0);\n\t\t\t\tbreak;\n\t\t\tcase \"deco\":\n\t\t\t\tif (restOfString.length > 0)\n\t\t\t\t\tmultilineVars.ignoredDecorations.push(restOfString.substring(0, restOfString.indexOf(' ')));\n\t\t\t\twarn(\"Decoration redefinition ignored\", str, 0);\n\t\t\t\tbreak;\n\t\t\tcase \"text\":\n\t\t\t\tvar textstr = tokenizer.translateString(restOfString);\n\t\t\t\ttuneBuilder.addText(parseDirective.parseFontChangeLine(textstr), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length+7});\n\t\t\t\tbreak;\n\t\t\tcase \"center\":\n\t\t\t\tvar centerstr = tokenizer.translateString(restOfString);\n\t\t\t\ttuneBuilder.addCentered(parseDirective.parseFontChangeLine(centerstr));\n\t\t\t\tbreak;\n\t\t\tcase \"font\":\n\t\t\t\t// don't need to do anything for this; it is a useless directive\n\t\t\t\tbreak;\n\t\t\tcase \"setfont\":\n\t\t\t\tvar sfTokens = tokenizer.tokenize(restOfString, 0, restOfString.length);\n//\t\t\t\tvar sfDone = false;\n\t\t\t\tif (sfTokens.length >= 4) {\n\t\t\t\t\tif (sfTokens[0].token === '-' && sfTokens[1].type === 'number') {\n\t\t\t\t\t\tvar sfNum = parseInt(sfTokens[1].token);\n\t\t\t\t\t\tif (sfNum >= 1 && sfNum <= 4) {\n\t\t\t\t\t\t\tif (!multilineVars.setfont)\n\t\t\t\t\t\t\t\tmultilineVars.setfont = [];\n\t\t\t\t\t\t\tsfTokens.shift();\n\t\t\t\t\t\t\tsfTokens.shift();\n\t\t\t\t\t\t\tmultilineVars.setfont[sfNum] = getFontParameter(sfTokens, multilineVars.setfont[sfNum], str, 0, 'setfont');\n//\t\t\t\t\t\t\tvar sfSize = sfTokens.pop();\n//\t\t\t\t\t\t\tif (sfSize.type === 'number') {\n//\t\t\t\t\t\t\t\tsfSize = parseInt(sfSize.token);\n//\t\t\t\t\t\t\t\tvar sfFontName = '';\n//\t\t\t\t\t\t\t\tfor (var sfi = 2; sfi < sfTokens.length; sfi++)\n//\t\t\t\t\t\t\t\t\tsfFontName += sfTokens[sfi].token;\n//\t\t\t\t\t\t\t\tmultilineVars.setfont[sfNum] = { face: sfFontName, size: sfSize };\n//\t\t\t\t\t\t\t\tsfDone = true;\n//\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n//\t\t\t\tif (!sfDone)\n//\t\t\t\t\treturn \"Bad parameters: \" + cmd;\n\t\t\t\tbreak;\n\t\t\tcase \"gchordfont\":\n\t\t\tcase \"partsfont\":\n\t\t\tcase \"tripletfont\":\n\t\t\tcase \"vocalfont\":\n\t\t\tcase \"textfont\":\n\t\t\tcase \"annotationfont\":\n\t\t\tcase \"historyfont\":\n\t\t\tcase \"infofont\":\n\t\t\tcase \"measurefont\":\n\t\t\tcase \"repeatfont\":\n\t\t\tcase \"wordsfont\":\n\t\t\t\treturn getChangingFont(cmd, tokens, str);\n\t\t\tcase \"composerfont\":\n\t\t\tcase \"subtitlefont\":\n\t\t\tcase \"tempofont\":\n\t\t\tcase \"titlefont\":\n\t\t\tcase \"voicefont\":\n\t\t\tcase \"footerfont\":\n\t\t\tcase \"headerfont\":\n\t\t\t\treturn getGlobalFont(cmd, tokens, str);\n\t\t\tcase \"barlabelfont\":\n\t\t\tcase \"barnumberfont\":\n\t\t\tcase \"barnumfont\":\n\t\t\t\treturn getChangingFont(\"measurefont\", tokens, str);\n\t\t\tcase \"staves\":\n\t\t\tcase \"score\":\n\t\t\t\tmultilineVars.score_is_present = true;\n\t\t\t\tvar addVoice = function(id, newStaff, bracket, brace, continueBar) {\n\t\t\t\t\tif (newStaff || multilineVars.staves.length === 0) {\n\t\t\t\t\t\tmultilineVars.staves.push({index: multilineVars.staves.length, numVoices: 0});\n\t\t\t\t\t}\n\t\t\t\t\tvar staff = parseCommon.last(multilineVars.staves);\n\t\t\t\t\tif (bracket !== undefined && staff.bracket === undefined) staff.bracket = bracket;\n\t\t\t\t\tif (brace !== undefined && staff.brace === undefined) staff.brace = brace;\n\t\t\t\t\tif (continueBar) staff.connectBarLines = 'end';\n\t\t\t\t\tif (multilineVars.voices[id] === undefined) {\n\t\t\t\t\t\tmultilineVars.voices[id] = {staffNum: staff.index, index: staff.numVoices};\n\t\t\t\t\t\tstaff.numVoices++;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar openParen = false;\n\t\t\t\tvar openBracket = false;\n\t\t\t\tvar openBrace = false;\n\t\t\t\tvar justOpenParen = false;\n\t\t\t\tvar justOpenBracket = false;\n\t\t\t\tvar justOpenBrace = false;\n\t\t\t\tvar continueBar = false;\n\t\t\t\tvar lastVoice;\n\t\t\t\tvar addContinueBar = function() {\n\t\t\t\t\tcontinueBar = true;\n\t\t\t\t\tif (lastVoice) {\n\t\t\t\t\t\tvar ty = 'start';\n\t\t\t\t\t\tif (lastVoice.staffNum > 0) {\n\t\t\t\t\t\t\tif (multilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'start' ||\n\t\t\t\t\t\t\t\tmultilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'continue')\n\t\t\t\t\t\t\t\tty = 'continue';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmultilineVars.staves[lastVoice.staffNum].connectBarLines = ty;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\twhile (tokens.length) {\n\t\t\t\t\tvar t = tokens.shift();\n\t\t\t\t\tswitch (t.token) {\n\t\t\t\t\t\tcase '(':\n\t\t\t\t\t\t\tif (openParen) warn(\"Can't nest parenthesis in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openParen = true;justOpenParen = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ')':\n\t\t\t\t\t\t\tif (!openParen || justOpenParen) warn(\"Unexpected close parenthesis in %%score\", str, t.start);\n\t\t\t\t\t\t\telse openParen = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '[':\n\t\t\t\t\t\t\tif (openBracket) warn(\"Can't nest brackets in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBracket = true;justOpenBracket = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ']':\n\t\t\t\t\t\t\tif (!openBracket || justOpenBracket) warn(\"Unexpected close bracket in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBracket = false;multilineVars.staves[lastVoice.staffNum].bracket = 'end';}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '{':\n\t\t\t\t\t\t\tif (openBrace ) warn(\"Can't nest braces in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBrace = true;justOpenBrace = true;}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '}':\n\t\t\t\t\t\t\tif (!openBrace || justOpenBrace) warn(\"Unexpected close brace in %%score\", str, t.start);\n\t\t\t\t\t\t\telse {openBrace = false;multilineVars.staves[lastVoice.staffNum].brace = 'end';}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '|':\n\t\t\t\t\t\t\taddContinueBar();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tvar vc = \"\";\n\t\t\t\t\t\t\twhile (t.type === 'alpha' || t.type === 'number') {\n\t\t\t\t\t\t\t\tvc += t.token;\n\t\t\t\t\t\t\t\tif (t.continueId)\n\t\t\t\t\t\t\t\t\tt = tokens.shift();\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar newStaff = !openParen || justOpenParen;\n\t\t\t\t\t\t\tvar bracket = justOpenBracket ? 'start' : openBracket ? 'continue' : undefined;\n\t\t\t\t\t\t\tvar brace = justOpenBrace ? 'start' : openBrace ? 'continue' : undefined;\n\t\t\t\t\t\t\taddVoice(vc, newStaff, bracket, brace, continueBar);\n\t\t\t\t\t\t\tjustOpenParen = false;\n\t\t\t\t\t\t\tjustOpenBracket = false;\n\t\t\t\t\t\t\tjustOpenBrace = false;\n\t\t\t\t\t\t\tcontinueBar = false;\n\t\t\t\t\t\t\tlastVoice = multilineVars.voices[vc];\n\t\t\t\t\t\t\tif (cmd === 'staves')\n\t\t\t\t\t\t\t\taddContinueBar();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"newpage\":\n\t\t\t\tvar pgNum = tokenizer.getInt(restOfString);\n\t\t\t\ttuneBuilder.addNewPage(pgNum.digits === 0 ? -1 : pgNum.value);\n\t\t\t\tbreak;\n\n\t\t\tcase \"abc\":\n\t\t\t\tvar arr = restOfString.split(' ');\n\t\t\t\tswitch (arr[0]) {\n\t\t\t\t\tcase \"-copyright\":\n\t\t\t\t\tcase \"-creator\":\n\t\t\t\t\tcase \"-edited-by\":\n\t\t\t\t\tcase \"-version\":\n\t\t\t\t\tcase \"-charset\":\n\t\t\t\t\t\tvar subCmd = arr.shift();\n\t\t\t\t\t\ttuneBuilder.addMetaText(cmd+subCmd, arr.join(' '), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+restOfString.length+5});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn \"Unknown directive: \" + cmd+arr[0];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"header\":\n\t\t\tcase \"footer\":\n\t\t\t\tvar footerStr = tokenizer.getMeat(restOfString, 0, restOfString.length);\n\t\t\t\tfooterStr = restOfString.substring(footerStr.start, footerStr.end);\n\t\t\t\tif (footerStr[0] === '\"' && footerStr[footerStr.length-1] === '\"' )\n\t\t\t\t\tfooterStr = footerStr.substring(1, footerStr.length-1);\n\t\t\t\tvar footerArr = footerStr.split('\\t');\n\t\t\t\tvar footer = {};\n\t\t\t\tif (footerArr.length === 1)\n\t\t\t\t\tfooter = { left: \"\", center: footerArr[0], right: \"\" };\n\t\t\t\telse if (footerArr.length === 2)\n\t\t\t\t\tfooter = { left: footerArr[0], center: footerArr[1], right: \"\" };\n\t\t\t\telse\n\t\t\t\t\tfooter = { left: footerArr[0], center: footerArr[1], right: footerArr[2] };\n\t\t\t\tif (footerArr.length > 3)\n\t\t\t\t\twarn(\"Too many tabs in \" + cmd + \": \" + footerArr.length + \" found.\", restOfString, 0);\n\n\t\t\t\ttuneBuilder.addMetaTextObj(cmd, footer, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+str.length});\n\t\t\t\tbreak;\n\n\t\t\tcase \"midi\":\n\t\t\t\tvar midi = tokenizer.tokenize(restOfString, 0, restOfString.length, true);\n\t\t\t\tif (midi.length > 0 && midi[0].token === '=')\n\t\t\t\t\tmidi.shift();\n\t\t\t\tif (midi.length === 0)\n\t\t\t\t\twarn(\"Expected midi command\", restOfString, 0);\n\t\t\t\telse\n\t\t\t\t\tparseMidiCommand(midi, tune, restOfString);\n\t\t\t\tbreak;\n\t\t\tcase \"percmap\":\n\t\t\t\tvar percmap = interpretPercMap(restOfString);\n\t\t\t\tif (percmap.error)\n\t\t\t\t\twarn(percmap.error, str, 8);\n\t\t\t\telse {\n\t\t\t\t\tif (!tune.formatting.percmap)\n\t\t\t\t\t\ttune.formatting.percmap = {};\n\t\t\t\t\ttune.formatting.percmap[percmap.key] = percmap.value;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"map\":\n\t\t\tcase \"playtempo\":\n\t\t\tcase \"auquality\":\n\t\t\tcase \"continuous\":\n\t\t\tcase \"nobarcheck\":\n\t\t\t\t// TODO-PER: Actually handle the parameters of these\n\t\t\t\ttune.formatting[cmd] = restOfString;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn \"Unknown directive: \" + cmd;\n\t\t}\n\t\treturn null;\n\t};\n\tparseDirective.globalFormatting = function(formatHash) {\n\t\tfor (var cmd in formatHash) {\n\t\t\tif (formatHash.hasOwnProperty(cmd)) {\n\t\t\t\tvar value = ''+formatHash[cmd];\n\t\t\t\tvar tokens = tokenizer.tokenize(value, 0, value.length);\n\t\t\t\tvar scratch;\n\t\t\t\tswitch (cmd) {\n\t\t\t\t\tcase \"titlefont\":\n\t\t\t\t\tcase \"gchordfont\":\n\t\t\t\t\tcase \"composerfont\":\n\t\t\t\t\tcase \"footerfont\":\n\t\t\t\t\tcase \"headerfont\":\n\t\t\t\t\tcase \"historyfont\":\n\t\t\t\t\tcase \"infofont\":\n\t\t\t\t\tcase \"measurefont\":\n\t\t\t\t\tcase \"partsfont\":\n\t\t\t\t\tcase \"repeatfont\":\n\t\t\t\t\tcase \"subtitlefont\":\n\t\t\t\t\tcase \"tempofont\":\n\t\t\t\t\tcase \"textfont\":\n\t\t\t\t\tcase \"voicefont\":\n\t\t\t\t\tcase \"tripletfont\":\n\t\t\t\t\tcase \"vocalfont\":\n\t\t\t\t\tcase \"wordsfont\":\n\t\t\t\t\tcase \"annotationfont\":\n\t\t\t\t\tcase \"tablabelfont\":\n\t\t\t\t\tcase \"tabnumberfont\":\n\t\t\t\t\tcase \"tabgracefont\":\n\t\t\t\t\t\tgetChangingFont(cmd, tokens, value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"scale\":\n\t\t\t\t\t\tsetScale(cmd, tokens);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"partsbox\":\n\t\t\t\t\t\tscratch = addMultilineVarBool('partsBox', cmd, tokens);\n\t\t\t\t\t\tif (scratch !== null) warn(scratch);\n\t\t\t\t\t\tmultilineVars.partsfont.box = multilineVars.partsBox;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"freegchord\":\n\t\t\t\t\t\tscratch = addMultilineVarBool('freegchord', cmd, tokens);\n\t\t\t\t\t\tif (scratch !== null) warn(scratch);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fontboxpadding\":\n\t\t\t\t\t\tif (tokens.length !== 1 || tokens[0].type !== 'number')\n\t\t\t\t\t\t\twarn(\"Directive \\\"\" + cmd + \"\\\" requires a number as a parameter.\");\n\t\t\t\t\t\ttune.formatting.fontboxpadding = tokens[0].floatt;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"stretchlast\":\n\t\t\t\t\t\tvar sl = parseStretchLast(tokens);\n\t\t\t\t\t\tif (sl.value !== undefined)\n\t\t\t\t\t\t\ttune.formatting.stretchlast = sl.value;\n\t\t\t\t\t\tif (sl.error)\n\t\t\t\t\t\t\treturn sl.error;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\twarn(\"Formatting directive unrecognized: \", cmd, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction parseStretchLast(tokens) {\n\t\tif (tokens.length === 0)\n\t\t\treturn { value: 1 }; // if there is no value then the presence of this is the same as \"true\"\n\t\telse if (tokens.length === 1) {\n\t\t\tif (tokens[0].type === \"number\") {\n\t\t\t\tif (tokens[0].floatt >= 0 || tokens[0].floatt <= 1)\n\t\t\t\t\treturn {value: tokens[0].floatt};\n\t\t\t} else if (tokens[0].token === 'false') {\n\t\t\t\treturn { value: 0 };\n\t\t\t} else if (tokens[0].token === 'true') {\n\t\t\t\treturn {value: 1};\n\t\t\t}\n\t\t}\n\t\treturn { error: \"Directive stretchlast requires zero or one parameter: false, true, or number between 0 and 1 (received \" + tokens[0].token + ')' };\n\t}\n})();\n\nmodule.exports = parseDirective;\n","// abc_parse_header.js: parses a the header fields from a string representing ABC Music Notation into a usable internal structure.\n\nvar parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar parseKeyVoice = require('./abc_parse_key_voice');\n\nvar ParseHeader = function(tokenizer, warn, multilineVars, tune, tuneBuilder) {\n\tthis.reset = function(tokenizer, warn, multilineVars, tune) {\n\t\tparseKeyVoice.initialize(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t\tparseDirective.initialize(tokenizer, warn, multilineVars, tune, tuneBuilder);\n\t};\n\tthis.reset(tokenizer, warn, multilineVars, tune);\n\n\tthis.setTitle = function(title) {\n\t\tif (multilineVars.hasMainTitle)\n\t\t\ttuneBuilder.addSubtitle(tokenizer.translateString(tokenizer.stripComment(title)), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+title.length+2});\t// display secondary title\n\t\telse\n\t\t{\n\t\t\tvar titleStr = tokenizer.translateString(tokenizer.theReverser(tokenizer.stripComment(title)));\n\t\t\tif (multilineVars.titlecaps)\n\t\t\t\ttitleStr = titleStr.toUpperCase();\n\t\t\ttuneBuilder.addMetaText(\"title\", titleStr, { startChar: multilineVars.iChar, endChar: multilineVars.iChar+title.length+2});\n\t\t\tmultilineVars.hasMainTitle = true;\n\t\t}\n\t};\n\n\tthis.setMeter = function(line) {\n\t\tline = tokenizer.stripComment(line);\n\t\tif (line === 'C') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'common_time'};\n\t\t} else if (line === 'C|') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'cut_time'};\n\t\t} else if (line === 'o') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_perfectum'};\n\t\t} else if (line === 'c') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_imperfectum'};\n\t\t} else if (line === 'o.') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_perfectum_prolatio'};\n\t\t} else if (line === 'c.') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn {type: 'tempus_imperfectum_prolatio'};\n\t\t} else if (line.length === 0 || line.toLowerCase() === 'none') {\n\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\tmultilineVars.default_length = 0.125;\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar tokens = tokenizer.tokenize(line, 0, line.length);\n\t\t\t// the form is [open_paren] decimal [ plus|dot decimal ]... [close_paren] slash decimal [plus same_as_before]\n\t\t\ttry {\n\t\t\t\tvar parseNum = function() {\n\t\t\t\t\t// handles this much: [open_paren] decimal [ plus|dot decimal ]... [close_paren]\n\t\t\t\t\tvar ret = {value: 0, num: \"\"};\n\n\t\t\t\t\tvar tok = tokens.shift();\n\t\t\t\t\tif (tok.token === '(')\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\twhile (1) {\n\t\t\t\t\t\tif (tok.type !== 'number') throw \"Expected top number of meter\";\n\t\t\t\t\t\tret.value += parseInt(tok.token);\n\t\t\t\t\t\tret.num += tok.token;\n\t\t\t\t\t\tif (tokens.length === 0 || tokens[0].token === '/') return ret;\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\t\tif (tok.token === ')') {\n\t\t\t\t\t\t\tif (tokens.length === 0 || tokens[0].token === '/') return ret;\n\t\t\t\t\t\t\tthrow \"Unexpected paren in meter\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tok.token !== '.' && tok.token !== '+') throw \"Expected top number of meter\";\n\t\t\t\t\t\tret.num += tok.token;\n\t\t\t\t\t\tif (tokens.length === 0) throw \"Expected top number of meter\";\n\t\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\treturn ret;\t// just to suppress warning\n\t\t\t\t};\n\n\t\t\t\tvar parseFraction = function() {\n\t\t\t\t\t// handles this much: parseNum slash decimal\n\t\t\t\t\tvar ret = parseNum();\n\t\t\t\t\tif (tokens.length === 0) return ret;\n\t\t\t\t\tvar tok = tokens.shift();\n\t\t\t\t\tif (tok.token !== '/') throw \"Expected slash in meter\";\n\t\t\t\t\ttok = tokens.shift();\n\t\t\t\t\tif (tok.type !== 'number') throw \"Expected bottom number of meter\";\n\t\t\t\t\tret.den = tok.token;\n\t\t\t\t\tret.value = ret.value / parseInt(ret.den);\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\n\t\t\t\tif (tokens.length === 0) throw \"Expected meter definition in M: line\";\n\t\t\t\tvar meter = {type: 'specified', value: [ ]};\n\t\t\t\tvar totalLength = 0;\n\t\t\t\twhile (1) {\n\t\t\t\t\tvar ret = parseFraction();\n\t\t\t\t\ttotalLength += ret.value;\n\t\t\t\t\tvar mv = { num: ret.num };\n\t\t\t\t\tif (ret.den !== undefined)\n\t\t\t\t\t\tmv.den = ret.den;\n\t\t\t\t\tmeter.value.push(mv);\n\t\t\t\t\tif (tokens.length === 0) break;\n\t\t\t\t\t//var tok = tokens.shift();\n\t\t\t\t\t//if (tok.token !== '+') throw \"Extra characters in M: line\";\n\t\t\t\t}\n\n\t\t\t\tif (multilineVars.havent_set_length === true) {\n\t\t\t\t\tmultilineVars.default_length = totalLength < 0.75 ? 0.0625 : 0.125;\n\t\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t\t}\n\t\t\t\treturn meter;\n\t\t\t} catch (e) {\n\t\t\t\twarn(e, line, 0);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tthis.calcTempo = function(relTempo) {\n\t\tvar dur = 1/4;\n\t\tif (multilineVars.meter && multilineVars.meter.type === 'specified') {\n\t\t\tdur = 1 / parseInt(multilineVars.meter.value[0].den);\n\t\t} else if (multilineVars.origMeter && multilineVars.origMeter.type === 'specified') {\n\t\t\tdur = 1 / parseInt(multilineVars.origMeter.value[0].den);\n\t\t}\n\t\t//var dur = multilineVars.default_length ? multilineVars.default_length : 1;\n\t\tfor (var i = 0; i < relTempo.duration; i++)\n\t\t\trelTempo.duration[i] = dur * relTempo.duration[i];\n\t\treturn relTempo;\n\t};\n\n\tthis.resolveTempo = function() {\n\t\tif (multilineVars.tempo) {\t// If there's a tempo waiting to be resolved\n\t\t\tthis.calcTempo(multilineVars.tempo);\n\t\t\ttune.metaText.tempo = multilineVars.tempo;\n\t\t\tdelete multilineVars.tempo;\n\t\t}\n\t};\n\n\tthis.addUserDefinition = function(line, start, end) {\n\t\tvar equals = line.indexOf('=', start);\n\t\tif (equals === -1) {\n\t\t\twarn(\"Need an = in a macro definition\", line, start);\n\t\t\treturn;\n\t\t}\n\n\t\tvar before = parseCommon.strip(line.substring(start, equals));\n\t\tvar after = parseCommon.strip(line.substring(equals+1));\n\n\t\tif (before.length !== 1) {\n\t\t\twarn(\"Macro definitions can only be one character\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tvar legalChars = \"HIJKLMNOPQRSTUVWXYhijklmnopqrstuvw~\";\n\t\tif (legalChars.indexOf(before) === -1) {\n\t\t\twarn(\"Macro definitions must be H-Y, h-w, or tilde\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tif (after.length === 0) {\n\t\t\twarn(\"Missing macro definition\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tif (multilineVars.macros === undefined)\n\t\t\tmultilineVars.macros = {};\n\t\tmultilineVars.macros[before] = after;\n\t};\n\n\tthis.setDefaultLength = function(line, start, end) {\n\t\tvar len = line.substring(start, end).replace(/ /g, \"\");\n\t\tvar len_arr = len.split('/');\n\t\tif (len_arr.length === 2) {\n\t\t\tvar n = parseInt(len_arr[0]);\n\t\t\tvar d = parseInt(len_arr[1]);\n\t\t\tif (d > 0) {\n\t\t\t\tmultilineVars.default_length = n / d;\t// a whole note is 1\n\t\t\t\tmultilineVars.havent_set_length = false;\n\t\t\t}\n\t\t} else if (len_arr.length === 1 && len_arr[0] === '1') {\n\t\t\tmultilineVars.default_length = 1;\n\t\t\tmultilineVars.havent_set_length = false;\n\t\t}\n\t};\n\n\n\tvar tempoString = {\n\n\t\tlarghissimo: 20,\n\t\tadagissimo: 24,\n\t\tsostenuto: 28,\n\t\tgrave: 32,\n\t\tlargo: 40,\n\t\tlento: 50,\n\t\tlarghetto: 60,\n\t\tadagio: 68,\n\t\tadagietto: 74,\n\t\tandante: 80,\n\t\tandantino: 88,\n\t\t\"marcia moderato\": 84,\n\t\t\"andante moderato\": 100,\n\t\tmoderato: 112,\n\t\tallegretto: 116,\n\t\t\"allegro moderato\": 120,\n\t\tallegro: 126,\n\t\tanimato: 132,\n\t\tagitato: 140,\n\t\tveloce: 148,\n\t\t\"mosso vivo\": 156,\n\t\tvivace: 164,\n\t\tvivacissimo: 172,\n\t\tallegrissimo: 176,\n\t\tpresto: 184,\n\t\tprestissimo: 210,\n\t};\n\n\tthis.setTempo = function(line, start, end, iChar) {\n\t\t//Q - tempo; can be used to specify the notes per minute, e.g. If\n\t\t//the meter denominator is a 4 note then Q:120 or Q:C=120\n\t\t//is 120 quarter notes per minute. Similarly Q:C3=40 would be 40\n\t\t//dotted half notes per minute. An absolute tempo may also be\n\t\t//set, e.g. Q:1/8=120 is 120 eighth notes per minute,\n\t\t//irrespective of the meter's denominator.\n\t\t//\n\t\t// This is either a number, \"C=number\", \"Cnumber=number\", or fraction [fraction...]=number\n\t\t// It depends on the M: field, which may either not be present, or may appear after this.\n\t\t// If M: is not present, an eighth note is used.\n\t\t// That means that this field can't be calculated until the end, if it is the first three types, since we don't know if we'll see an M: field.\n\t\t// So, if it is the fourth type, set it here, otherwise, save the info in the multilineVars.\n\t\t// The temporary variables we keep are the duration and the bpm. In the first two forms, the duration is 1.\n\t\t// In addition, a quoted string may both precede and follow. If a quoted string is present, then the duration part is optional.\n\t\ttry {\n\t\t\tvar tokens = tokenizer.tokenize(line, start, end);\n\n\t\t\tif (tokens.length === 0) throw \"Missing parameter in Q: field\";\n\n\t\t\tvar tempo = { startChar: iChar+start-2, endChar: iChar+end };\n\t\t\tvar delaySet = true;\n\t\t\tvar token = tokens.shift();\n\t\t\tif (token.type === 'quote') {\n\t\t\t\ttempo.preString = token.token;\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (tokens.length === 0) {\t// It's ok to just get a string for the tempo\n\t\t\t\t\t// If the string is a well-known tempo, put in the bpm\n\t\t\t\t\tif (tempoString[tempo.preString.toLowerCase()]) {\n\t\t\t\t\t\ttempo.bpm = tempoString[tempo.preString.toLowerCase()];\n\t\t\t\t\t\ttempo.suppressBpm = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn {type: 'immediate', tempo: tempo};\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (token.type === 'alpha' && token.token === 'C')\t { // either type 2 or type 3\n\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after C in Q: field\";\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (token.type === 'punct' && token.token === '=') {\n\t\t\t\t\t// This is a type 2 format. The duration is an implied 1\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected number after = in Q: field\";\n\t\t\t\t\ttempo.duration = [1];\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t} else if (token.type === 'number') {\n\t\t\t\t\t// This is a type 3 format.\n\t\t\t\t\ttempo.duration = [parseInt(token.token)];\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing = after duration in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' || token.token !== '=') throw \"Expected = after duration in Q: field\";\n\t\t\t\t\tif (tokens.length === 0) throw \"Missing tempo after = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected number after = in Q: field\";\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t} else throw \"Expected number or equal after C in Q: field\";\n\n\t\t\t} else if (token.type === 'number') {\t// either type 1 or type 4\n\t\t\t\tvar num = parseInt(token.token);\n\t\t\t\tif (tokens.length === 0 || tokens[0].type === 'quote') {\n\t\t\t\t\t// This is type 1\n\t\t\t\t\ttempo.duration = [1];\n\t\t\t\t\ttempo.bpm = num;\n\t\t\t\t} else {\t// This is type 4\n\t\t\t\t\tdelaySet = false;\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' && token.token !== '/') throw \"Expected fraction in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\tvar den = parseInt(token.token);\n\t\t\t\t\ttempo.duration = [num/den];\n\t\t\t\t\t// We got the first fraction, keep getting more as long as we find them.\n\t\t\t\t\twhile (tokens.length > 0 && tokens[0].token !== '=' && tokens[0].type !== 'quote') {\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\tnum = parseInt(token.token);\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'punct' && token.token !== '/') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\t\tif (token.type !== 'number') throw \"Expected fraction in Q: field\";\n\t\t\t\t\t\tden = parseInt(token.token);\n\t\t\t\t\t\ttempo.duration.push(num/den);\n\t\t\t\t\t}\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'punct' && token.token !== '=') throw \"Expected = in Q: field\";\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.type !== 'number') throw \"Expected tempo in Q: field\";\n\t\t\t\t\ttempo.bpm = parseInt(token.token);\n\t\t\t\t}\n\t\t\t} else throw \"Unknown value in Q: field\";\n\t\t\tif (tokens.length !== 0) {\n\t\t\t\ttoken = tokens.shift();\n\t\t\t\tif (token.type === 'quote') {\n\t\t\t\t\ttempo.postString = token.token;\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t}\n\t\t\t\tif (tokens.length !== 0) throw \"Unexpected string at end of Q: field\";\n\t\t\t}\n\t\t\tif (multilineVars.printTempo === false)\n\t\t\t\ttempo.suppress = true;\n\t\t\treturn {type: delaySet?'delaySet':'immediate', tempo: tempo};\n\t\t} catch (msg) {\n\t\t\twarn(msg, line, start);\n\t\t\treturn {type: 'none'};\n\t\t}\n\t};\n\n\tthis.letter_to_inline_header = function(line, i, startLine)\n\t{\n\t\tvar ws = tokenizer.eatWhiteSpace(line, i);\n\t\ti +=ws;\n\t\tif (line.length >= i+5 && line[i] === '[' && line[i+2] === ':') {\n\t\t\tvar e = line.indexOf(']', i);\n\t\t\tvar startChar = multilineVars.iChar + i;\n\t\t\tvar endChar = multilineVars.iChar + e + 1;\n\t\t\tswitch(line.substring(i, i+3))\n\t\t\t{\n\t\t\t\tcase \"[I:\":\n\t\t\t\t\tvar err = parseDirective.addDirective(line.substring(i+3, e));\n\t\t\t\t\tif (err) warn(err, line, i);\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[M:\":\n\t\t\t\t\tvar meter = this.setMeter(line.substring(i+3, e));\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic() && meter)\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('meter', startChar, endChar, meter);\n\t\t\t\t\telse\n\t\t\t\t\t\tmultilineVars.meter = meter;\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[K:\":\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(i+3, e), true);\n\t\t\t\t\tif (result.foundClef && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', startChar, endChar, multilineVars.clef);\n\t\t\t\t\tif (result.foundKey && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', startChar, endChar, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[P:\":\n\t\t\t\t\tif (startLine || tune.lines.length <= tune.lineNum)\n\t\t\t\t\t\tmultilineVars.partForNextLine = { title: line.substring(i+3, e), startChar: startChar, endChar: endChar };\n\t\t\t\t\telse\n\t\t\t\t\t\ttuneBuilder.appendElement('part', startChar, endChar, {title: line.substring(i+3, e)});\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[L:\":\n\t\t\t\t\tthis.setDefaultLength(line, i+3, e);\n\t\t\t\t\treturn [ e-i+1+ws ];\n\t\t\t\tcase \"[Q:\":\n\t\t\t\t\tif (e > 0) {\n\t\t\t\t\t\tvar tempo = this.setTempo(line, i+3, e, multilineVars.iChar);\n\t\t\t\t\t\tif (tempo.type === 'delaySet') {\n\t\t\t\t\t\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('tempo', startChar, endChar, this.calcTempo(tempo.tempo));\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, this.calcTempo(tempo.tempo)]\n\t\t\t\t\t\t} else if (tempo.type === 'immediate') {\n\t\t\t\t\t\t\tif (!startLine && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('tempo', startChar, endChar, tempo.tempo);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, tempo.tempo]\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [ e-i+1+ws, line[i+1], line.substring(i+3, e)];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[V:\":\n\t\t\t\t\tif (e > 0) {\n\t\t\t\t\t\tparseKeyVoice.parseVoice(line, i+3, e);\n\t\t\t\t\t\t//startNewLine();\n\t\t\t\t\t\treturn [ e-i+1+ws, line[i+1], line.substring(i+3, e)];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[r:\":\n\t\t\t\t\treturn [ e-i+1+ws ];\n\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO: complain about unhandled header\n\t\t\t}\n\t\t}\n\t\treturn [ 0 ];\n\t};\n\n\tthis.letter_to_body_header = function(line, i)\n\t{\n\t\tif (line.length >= i+3) {\n\t\t\tswitch(line.substring(i, i+2))\n\t\t\t{\n\t\t\t\tcase \"I:\":\n\t\t\t\t\tvar err = parseDirective.addDirective(line.substring(i+2));\n\t\t\t\t\tif (err) warn(err, line, i);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"M:\":\n\t\t\t\t\tvar meter = this.setMeter(line.substring(i+2));\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic() && meter)\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('meter', multilineVars.iChar + i, multilineVars.iChar + line.length, meter);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"K:\":\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(i+2), tuneBuilder.hasBeginMusic());\n\t\t\t\t\tif (result.foundClef && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', multilineVars.iChar + i, multilineVars.iChar + line.length, multilineVars.clef);\n\t\t\t\t\tif (result.foundKey && tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', multilineVars.iChar + i, multilineVars.iChar + line.length, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"P:\":\n\t\t\t\t\tif (tuneBuilder.hasBeginMusic())\n\t\t\t\t\t\ttuneBuilder.appendElement('part', multilineVars.iChar + i, multilineVars.iChar + line.length, {title: line.substring(i+2)});\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"L:\":\n\t\t\t\t\tthis.setDefaultLength(line, i+2, line.length);\n\t\t\t\t\treturn [ line.length ];\n\t\t\t\tcase \"Q:\":\n\t\t\t\t\tvar e = line.indexOf('\\x12', i+2);\n\t\t\t\t\tif (e === -1) e = line.length;\n\t\t\t\t\tvar tempo = this.setTempo(line, i+2, e, multilineVars.iChar);\n\t\t\t\t\tif (tempo.type === 'delaySet') tuneBuilder.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, this.calcTempo(tempo.tempo));\n\t\t\t\t\telse if (tempo.type === 'immediate') tuneBuilder.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, tempo.tempo);\n\t\t\t\treturn [ e, line[i], parseCommon.strip(line.substring(i+2))];\n\t\t\t\tcase \"V:\":\n\t\t\t\t\tparseKeyVoice.parseVoice(line, i+2, line.length);\n//\t\t\t\t\t\tstartNewLine();\n\t\t\t\t\treturn [ line.length, line[i], parseCommon.strip(line.substring(i+2))];\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO: complain about unhandled header\n\t\t\t}\n\t\t}\n\t\treturn [ 0 ];\n\t};\n\n\tvar metaTextHeaders = {\n\t\tA: 'author',\n\t\tB: 'book',\n\t\tC: 'composer',\n\t\tD: 'discography',\n\t\tF: 'url',\n\t\tG: 'group',\n\t\tI: 'instruction',\n\t\tN: 'notes',\n\t\tO: 'origin',\n\t\tR: 'rhythm',\n\t\tS: 'source',\n\t\tW: 'unalignedWords',\n\t\tZ: 'transcription'\n\t};\n\n\tthis.parseHeader = function(line) {\n\t\tvar field = metaTextHeaders[line[0]];\n\t\tif (field !== undefined) {\n\t\t\tif (field === 'unalignedWords')\n\t\t\t\ttuneBuilder.addMetaTextArray(field, parseDirective.parseFontChangeLine(tokenizer.translateString(tokenizer.stripComment(line.substring(2)))), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\telse\n\t\t\t\ttuneBuilder.addMetaText(field, tokenizer.translateString(tokenizer.stripComment(line.substring(2))), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\treturn {};\n\t\t} else {\n\t\t\tvar startChar = multilineVars.iChar;\n\t\t\tvar endChar = startChar + line.length;\n\t\t\tswitch(line[0])\n\t\t\t{\n\t\t\t\tcase 'H':\n\t\t\t\t\ttuneBuilder.addMetaText(\"history\", tokenizer.translateString(tokenizer.stripComment(line.substring(2))), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\tline = tokenizer.peekLine()\n\t\t\t\t\twhile (line && line[1] !== ':') {\n\t\t\t\t\t\ttokenizer.nextLine()\n\t\t\t\t\t\ttuneBuilder.addMetaText(\"history\", tokenizer.translateString(tokenizer.stripComment(line)), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\t\tline = tokenizer.peekLine()\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'K':\n\t\t\t\t\t// since the key is the last thing that can happen in the header, we can resolve the tempo now\n\t\t\t\t\tthis.resolveTempo();\n\t\t\t\t\tvar result = parseKeyVoice.parseKey(line.substring(2), false);\n\t\t\t\t\tif (!multilineVars.is_in_header && tuneBuilder.hasBeginMusic()) {\n\t\t\t\t\t\tif (result.foundClef)\n\t\t\t\t\t\t\ttuneBuilder.appendStartingElement('clef', startChar, endChar, multilineVars.clef);\n\t\t\t\t\t\tif (result.foundKey)\n\t\t\t\t\t\t\ttuneBuilder.appendStartingElement('key', startChar, endChar, parseKeyVoice.fixKey(multilineVars.clef, multilineVars.key));\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.is_in_header = false;\t// The first key signifies the end of the header.\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'L':\n\t\t\t\t\tthis.setDefaultLength(line, 2, line.length);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'M':\n\t\t\t\t\tmultilineVars.origMeter = multilineVars.meter = this.setMeter(line.substring(2));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'P':\n\t\t\t\t\t// TODO-PER: There is more to do with parts, but the writer doesn't care.\n\t\t\t\t\tif (multilineVars.is_in_header)\n\t\t\t\t\t\ttuneBuilder.addMetaText(\"partOrder\", tokenizer.translateString(tokenizer.stripComment(line.substring(2))), { startChar: multilineVars.iChar, endChar: multilineVars.iChar+line.length});\n\t\t\t\t\telse\n\t\t\t\t\t\tmultilineVars.partForNextLine = { title: tokenizer.translateString(tokenizer.stripComment(line.substring(2))), startChar: startChar, endChar: endChar};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Q':\n\t\t\t\t\tvar tempo = this.setTempo(line, 2, line.length, multilineVars.iChar);\n\t\t\t\t\tif (tempo.type === 'delaySet') multilineVars.tempo = tempo.tempo;\n\t\t\t\t\telse if (tempo.type === 'immediate') {\n\t\t\t\t\t\tif (!tune.metaText.tempo)\n\t\t\t\t\t\t\ttune.metaText.tempo = tempo.tempo;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmultilineVars.tempoForNextLine = ['tempo', startChar, endChar, tempo.tempo]\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T':\n\t\t\t\t\tthis.setTitle(line.substring(2));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'U':\n\t\t\t\t\tthis.addUserDefinition(line, 2, line.length);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'V':\n\t\t\t\t\tparseKeyVoice.parseVoice(line, 2, line.length);\n\t\t\t\t\tif (!multilineVars.is_in_header)\n\t\t\t\t\t\treturn {newline: true};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\treturn {symbols: true};\n\t\t\t\tcase 'w':\n\t\t\t\t\treturn {words: true};\n\t\t\t\tcase 'X':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'E':\n\t\t\t\tcase 'm':\n\t\t\t\t\twarn(\"Ignored header\", line, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {regular: true};\n\t\t\t}\n\t\t}\n\t\treturn {};\n\t};\n};\n\nmodule.exports = ParseHeader;\n","var parseCommon = require('./abc_common');\nvar parseDirective = require('./abc_parse_directive');\nvar transpose = require('./abc_transpose');\n\nvar parseKeyVoice = {};\n\n(function() {\n\tvar tokenizer;\n\tvar warn;\n\tvar multilineVars;\n\tvar tune;\n\tvar tuneBuilder;\n\tparseKeyVoice.initialize = function(tokenizer_, warn_, multilineVars_, tune_, tuneBuilder_) {\n\t\ttokenizer = tokenizer_;\n\t\twarn = warn_;\n\t\tmultilineVars = multilineVars_;\n\t\ttune = tune_;\n\t\ttuneBuilder = tuneBuilder_;\n\t};\n\n\tparseKeyVoice.standardKey = function(keyName, root, acc, localTranspose) {\n\t\treturn transpose.keySignature(multilineVars, keyName, root, acc, localTranspose);\n\t};\n\n\tvar clefLines = {\n\t\t'treble': { clef: 'treble', pitch: 4, mid: 0 },\n\t\t'treble+8': { clef: 'treble+8', pitch: 4, mid: 0 },\n\t\t'treble-8': { clef: 'treble-8', pitch: 4, mid: 0 },\n\t\t'treble^8': { clef: 'treble+8', pitch: 4, mid: 0 },\n\t\t'treble_8': { clef: 'treble-8', pitch: 4, mid: 0 },\n\t\t'treble1': { clef: 'treble', pitch: 2, mid: 2 },\n\t\t'treble2': { clef: 'treble', pitch: 4, mid: 0 },\n\t\t'treble3': { clef: 'treble', pitch: 6, mid: -2 },\n\t\t'treble4': { clef: 'treble', pitch: 8, mid: -4 },\n\t\t'treble5': { clef: 'treble', pitch: 10, mid: -6 },\n\t\t'perc': { clef: 'perc', pitch: 6, mid: 0 },\n\t\t'none': { clef: 'none', mid: 0 },\n\t\t'bass': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass+8': { clef: 'bass+8', pitch: 8, mid: -12 },\n\t\t'bass-8': { clef: 'bass-8', pitch: 8, mid: -12 },\n\t\t'bass^8': { clef: 'bass+8', pitch: 8, mid: -12 },\n\t\t'bass_8': { clef: 'bass-8', pitch: 8, mid: -12 },\n\t\t'bass+16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass-16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass^16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass_16': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass1': { clef: 'bass', pitch: 2, mid: -6 },\n\t\t'bass2': { clef: 'bass', pitch: 4, mid: -8 },\n\t\t'bass3': { clef: 'bass', pitch: 6, mid: -10 },\n\t\t'bass4': { clef: 'bass', pitch: 8, mid: -12 },\n\t\t'bass5': { clef: 'bass', pitch: 10, mid: -14 },\n\t\t'tenor': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'tenor1': { clef: 'alto', pitch: 2, mid: -2 },\n\t\t'tenor2': { clef: 'alto', pitch: 4, mid: -4 },\n\t\t'tenor3': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'tenor4': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'tenor5': { clef: 'alto', pitch: 10, mid: -10 },\n\t\t'alto': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'alto1': { clef: 'alto', pitch: 2, mid: -2 },\n\t\t'alto2': { clef: 'alto', pitch: 4, mid: -4 },\n\t\t'alto3': { clef: 'alto', pitch: 6, mid: -6 },\n\t\t'alto4': { clef: 'alto', pitch: 8, mid: -8 },\n\t\t'alto5': { clef: 'alto', pitch: 10, mid: -10 },\n\t\t'alto+8': { clef: 'alto+8', pitch: 6, mid: -6 },\n\t\t'alto-8': { clef: 'alto-8', pitch: 6, mid: -6 },\n\t\t'alto^8': { clef: 'alto+8', pitch: 6, mid: -6 },\n\t\t'alto_8': { clef: 'alto-8', pitch: 6, mid: -6 }\n\t};\n\n\tvar calcMiddle = function(clef, oct) {\n\t\tvar value = clefLines[clef];\n\t\tvar mid = value ? value.mid : 0;\n\t\treturn mid+oct;\n\t};\n\n\tparseKeyVoice.fixClef = function(clef) {\n\t\tvar value = clefLines[clef.type];\n\t\tif (value) {\n\t\t\tclef.clefPos = value.pitch;\n\t\t\tclef.type = value.clef;\n\t\t}\n\t};\n\n\tparseKeyVoice.deepCopyKey = function(key) {\n\t\tvar ret = { accidentals: [], root: key.root, acc: key.acc, mode: key.mode };\n\t\tkey.accidentals.forEach(function(k) {\n\t\tret.accidentals.push(parseCommon.clone(k));\n\t\t});\n\t\treturn ret;\n\t};\n\n\tvar pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11};\n\n\tparseKeyVoice.addPosToKey = function(clef, key) {\n\t\t// Shift the key signature from the treble positions to whatever position is needed for the clef.\n\t\t// This may put the key signature unnaturally high or low, so if it does, then shift it.\n\t\tvar mid = clef.verticalPos;\n\t\tkey.accidentals.forEach(function(acc) {\n\t\t\tvar pitch = pitches[acc.note];\n\t\t\tpitch = pitch - mid;\n\t\t\tacc.verticalPos = pitch;\n\t\t});\n\t\tif (key.impliedNaturals)\n\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\tvar pitch = pitches[acc.note];\n\t\t\t\tpitch = pitch - mid;\n\t\t\t\tacc.verticalPos = pitch;\n\t\t\t});\n\n\t\tif (mid < -10) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat'))\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (acc.note === 'A' && acc.acc === 'sharp' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\tif ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat'))\n\t\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (acc.note === 'A' && acc.acc === 'sharp' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t\tif ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t});\n\t\t} else if (mid < -4) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\tif (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' )\n\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos -= 7;\n\t\t\t\t\tif (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' )\n\t\t\t\t\t\tacc.verticalPos -=7;\n\t\t\t\t});\n\t\t} else if (mid >= 7) {\n\t\t\tkey.accidentals.forEach(function(acc) {\n\t\t\t\tacc.verticalPos += 7;\n\t\t\t});\n\t\t\tif (key.impliedNaturals)\n\t\t\t\tkey.impliedNaturals.forEach(function(acc) {\n\t\t\t\t\tacc.verticalPos += 7;\n\t\t\t\t});\n\t\t}\n\t};\n\n\tparseKeyVoice.fixKey = function(clef, key) {\n\t\tvar fixedKey = parseCommon.clone(key);\n\t\tparseKeyVoice.addPosToKey(clef, fixedKey);\n\t\treturn fixedKey;\n\t};\n\n\tvar parseMiddle = function(str) {\n\t\tvar i = 0;\n\t\tvar p = str[i++];\n\t\tif (p === '^' || p === '_')\n\t\t\tp = str[i++];\n\t var mid = pitches[p];\n\t\tif (mid === undefined)\n\t\t\tmid = 6; // If a legal middle note wasn't received, just ignore it.\n\t\tfor ( ; i < str.length; i++) {\n\t\t\tif (str[i] === ',') mid -= 7;\n\t\t\telse if (str[i] === \"'\") mid += 7;\n\t\t\telse break;\n\t\t}\n\t\treturn { mid: mid - 6, str: str.substring(i) };\t// We get the note in the middle of the staff. We want the note that appears as the first ledger line below the staff.\n\t};\n\n\tvar normalizeAccidentals = function(accs) {\n\t\tfor (var i = 0; i < accs.length; i++) {\n\t\t\tif (accs[i].note === 'b')\n\t\t\t\taccs[i].note = 'B';\n\t\t\telse if (accs[i].note === 'a')\n\t\t\t\taccs[i].note = 'A';\n\t\t\telse if (accs[i].note === 'F')\n\t\t\t\taccs[i].note = 'f';\n\t\t\telse if (accs[i].note === 'E')\n\t\t\t\taccs[i].note = 'e';\n\t\t\telse if (accs[i].note === 'D')\n\t\t\t\taccs[i].note = 'd';\n\t\t\telse if (accs[i].note === 'C')\n\t\t\t\taccs[i].note = 'c';\n\t\t\telse if (accs[i].note === 'G' && accs[i].acc === 'sharp')\n\t\t\t\taccs[i].note = 'g';\n\t\t\telse if (accs[i].note === 'g' && accs[i].acc === 'flat')\n\t\t\t\taccs[i].note = 'G';\n\t\t}\n\t};\n\n\tparseKeyVoice.parseKey = function(str, isInline)\t// (and clef)\n\t{\n\t\t// returns:\n\t\t//\t\t{ foundClef: true, foundKey: true }\n\t\t// Side effects:\n\t\t//\t\tcalls warn() when there is a syntax error\n\t\t//\t\tsets these members of multilineVars:\n\t\t//\t\t\tclef\n\t\t//\t\t\tkey\n\t\t//\t\t\tstyle\n\t\t//\n\t\t// The format is:\n\t\t// K: [⟨key⟩] [⟨modifiers⟩*]\n\t\t// modifiers are any of the following in any order:\n\t\t// [⟨clef⟩] [middle=⟨pitch⟩] [transpose=[-]⟨number⟩] [stafflines=⟨number⟩] [staffscale=⟨number⟩][style=⟨style⟩]\n\t\t// key is none|HP|Hp|⟨specified_key⟩\n\t\t// clef is [clef=] [⟨clef type⟩] [⟨line number⟩] [+8|-8]\n\t\t// specified_key is ⟨pitch⟩[#|b][mode(first three chars are significant)][accidentals*]\n\t\tif (str.length === 0) {\n\t\t\t// an empty K: field is the same as K:none\n\t\t\tstr = 'none';\n\t\t}\n\t\tvar tokens = tokenizer.tokenize(str, 0, str.length);\n\t\tvar ret = {};\n\n\t\t// Be sure that a key was passed in\n\t\tif (tokens.length === 0) {\n\t\t\twarn(\"Must pass in key signature.\", str, 0);\n\t\t\treturn ret;\n\t\t}\n\n\t\t// first the key\n\t\tswitch (tokens[0].token) {\n\t\t\tcase 'HP':\n\t\t\t\tparseDirective.addDirective(\"bagpipes\");\n\t\t\t\tmultilineVars.key = { root: \"HP\", accidentals: [], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tcase 'Hp':\n\t\t\t\tparseDirective.addDirective(\"bagpipes\");\n\t\t\t\tmultilineVars.key = { root: \"Hp\", accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tcase 'none':\n\t\t\t\t// we got the none key - that's the same as C to us\n\t\t\t\tmultilineVars.key = { root: \"none\", accidentals: [], acc: \"\", mode: \"\" };\n\t\t\t\tret.foundKey = true;\n\t\t\t\ttokens.shift();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tvar retPitch = tokenizer.getKeyPitch(tokens[0].token);\n\t\t\t\tif (retPitch.len > 0) {\n\t\t\t\t\tret.foundKey = true;\n\t\t\t\t\tvar acc = \"\";\n\t\t\t\t\tvar mode = \"\";\n\t\t\t\t\t// The accidental and mode might be attached to the pitch, so we might want to just remove the first character.\n\t\t\t\t\tif (tokens[0].token.length > 1)\n\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\telse\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\tvar key = retPitch.token;\n\t\t\t\t\t// We got a pitch to start with, so we might also have an accidental and a mode\n\t\t\t\t\tif (tokens.length > 0) {\n\t\t\t\t\t\tvar retAcc = tokenizer.getSharpFlat(tokens[0].token);\n\t\t\t\t\t\tif (retAcc.len > 0) {\n\t\t\t\t\t\t\tif (tokens[0].token.length > 1)\n\t\t\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\tkey += retAcc.token;\n\t\t\t\t\t\t\tacc = retAcc.token;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tokens.length > 0) {\n\t\t\t\t\t\t\tvar retMode = tokenizer.getMode(tokens[0].token);\n\t\t\t\t\t\t\tif (retMode.len > 0) {\n\t\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\t\tkey += retMode.token;\n\t\t\t\t\t\t\t\tmode = retMode.token;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Be sure that the key specified is in the list: not all keys are physically possible, like Cbmin.\n\t\t\t\t\t\tif (parseKeyVoice.standardKey(key, retPitch.token, acc, 0) === undefined) {\n\t\t\t\t\t\t\twarn(\"Unsupported key signature: \" + key, str, 0);\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// We need to do a deep copy because we are going to modify it\n\t\t\t\t\tvar oldKey = parseKeyVoice.deepCopyKey(multilineVars.key);\n\t\t\t\t\t//TODO-PER: HACK! To get the local transpose to work, the transposition is done for each line. This caused the global transposition variable to be factored in twice, so, instead of rewriting that right now, I'm just subtracting one of them here.\n\t\t\t\t\tvar keyCompensate = !isInline && multilineVars.globalTranspose ? -multilineVars.globalTranspose : 0;\n\t\t\t\t\t//console.log(\"parse\", JSON.stringify(multilineVars), isInline)\n\t\t\t\t\tvar savedOrigKey;\n\t\t\t\t\tif (isInline)\n\t\t\t\t\t\tsavedOrigKey = multilineVars.globalTransposeOrigKeySig\n\t\t\t\t\tmultilineVars.key = parseKeyVoice.deepCopyKey(parseKeyVoice.standardKey(key, retPitch.token, acc, keyCompensate));\n\t\t\t\t\tif (isInline)\n\t\t\t\t\t\tmultilineVars.globalTransposeOrigKeySig = savedOrigKey\n\t\t\t\t\tmultilineVars.key.mode = mode;\n\t\t\t\t\tif (oldKey) {\n\t\t\t\t\t\t// Add natural in all places that the old key had an accidental.\n\t\t\t\t\t\tvar kk;\n\t\t\t\t\t\tfor (var k = 0; k < multilineVars.key.accidentals.length; k++) {\n\t\t\t\t\t\t\tfor (kk = 0; kk < oldKey.accidentals.length; kk++) {\n\t\t\t\t\t\t\t\tif (oldKey.accidentals[kk].note && multilineVars.key.accidentals[k].note.toLowerCase() === oldKey.accidentals[kk].note.toLowerCase())\n\t\t\t\t\t\t\t\t\toldKey.accidentals[kk].note = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (kk = 0; kk < oldKey.accidentals.length; kk++) {\n\t\t\t\t\t\t\tif (oldKey.accidentals[kk].note) {\n\t\t\t\t\t\t\t\tif (!multilineVars.key.impliedNaturals)\n\t\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals = [];\n\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals.push({ acc: 'natural', note: oldKey.accidentals[kk].note });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// There are two special cases of deprecated syntax. Ignore them if they occur\n\t\tif (tokens.length === 0) return ret;\n\t\tif (tokens[0].token === 'exp') tokens.shift();\n\t\tif (tokens.length === 0) return ret;\n\t\tif (tokens[0].token === 'oct') tokens.shift();\n\n\t\t// now see if there are extra accidentals\n\t\tif (tokens.length === 0) return ret;\n\t\tvar accs = tokenizer.getKeyAccidentals2(tokens);\n\t\tif (accs.warn)\n\t\t\twarn(accs.warn, str, 0);\n\t\t// If we have extra accidentals, first replace ones that are of the same pitch before adding them to the end.\n\t\tif (accs.accs) {\n\t\t\tif (!ret.foundKey) {\t\t// if there are only extra accidentals, make sure this is set.\n\t\t\t\tret.foundKey = true;\n\t\t\t\tmultilineVars.key = { root: \"none\", acc: \"\", mode: \"\", accidentals: [] };\n\t\t\t}\n\t\t\tnormalizeAccidentals(accs.accs);\n\t\t\tfor (var i = 0; i < accs.accs.length; i++) {\n\t\t\t\tvar found = false;\n\t\t\t\tfor (var j = 0; j < multilineVars.key.accidentals.length && !found; j++) {\n\t\t\t\t\tif (multilineVars.key.accidentals[j].note === accs.accs[i].note) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tif (multilineVars.key.accidentals[j].acc !== accs.accs[i].acc) {\n\t\t\t\t\t\t\t// If the accidental is different, then replace it. If it is the same, then the declaration was redundant, so just ignore it.\n\t\t\t\t\t\t\tmultilineVars.key.accidentals[j].acc = accs.accs[i].acc;\n\t\t\t\t\t\t\tif (!multilineVars.key.explicitAccidentals)\n\t\t\t\t\t\t\t\tmultilineVars.key.explicitAccidentals = [];\n\t\t\t\t\t\t\tmultilineVars.key.explicitAccidentals.push(accs.accs[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!found) {\n\t\t\t\t\tif (!multilineVars.key.explicitAccidentals)\n\t\t\t\t\t\tmultilineVars.key.explicitAccidentals = [];\n\t\t\t\t\tmultilineVars.key.explicitAccidentals.push(accs.accs[i]);\n\t\t\t\t\tmultilineVars.key.accidentals.push(accs.accs[i]);\n\t\t\t\t\tif (multilineVars.key.impliedNaturals) {\n\t\t\t\t\t\tfor (var kkk = 0; kkk < multilineVars.key.impliedNaturals.length; kkk++) {\n\t\t\t\t\t\t\tif (multilineVars.key.impliedNaturals[kkk].note === accs.accs[i].note)\n\t\t\t\t\t\t\t\tmultilineVars.key.impliedNaturals.splice(kkk, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Now see if any optional parameters are present. They have the form \"key=value\", except that \"clef=\" is optional\n\t\tvar token;\n\t\twhile (tokens.length > 0) {\n\t\t\tswitch (tokens[0].token) {\n\t\t\t\tcase \"m\":\n\t\t\t\tcase \"middle\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after middle\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after middle\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after middle=\", str, 0); return ret; }\n\t\t\t\t\tvar pitch = tokenizer.getPitchFromTokens(tokens);\n\t\t\t\t\tif (pitch.warn)\n\t\t\t\t\t\twarn(pitch.warn, str, 0);\n\t\t\t\t\tif (pitch.position)\n\t\t\t\t\t\tmultilineVars.clef.verticalPos = pitch.position - 6;\t// we get the position from the middle line, but want to offset it to the first ledger line.\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"transpose\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after transpose\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after transpose\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after transpose=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after transpose\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.transpose = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"stafflines\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after stafflines\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after stafflines\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after stafflines=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after stafflines\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.stafflines = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"staffscale\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after staffscale\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after staffscale\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after staffscale=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after staffscale\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.clef.staffscale = tokens[0].floatt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"octave\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after octave\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after octave\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after octave=\", str, 0); return ret; }\n\t\t\t\t\tif (tokens[0].type !== 'number') { warn(\"Expected number after octave\", str, tokens[0].start); break; }\n\t\t\t\t\tmultilineVars.octave = tokens[0].intt;\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"style\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after style\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after style\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after style=\", str, 0); return ret; }\n\t\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\t\tcase \"normal\":\n\t\t\t\t\t\tcase \"harmonic\":\n\t\t\t\t\t\tcase \"rhythm\":\n\t\t\t\t\t\tcase \"x\":\n\t\t\t\t\t\tcase \"triangle\":\n\t\t\t\t\t\t\tmultilineVars.style = tokens[0].token;\n\t\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\twarn(\"error parsing style element: \" + tokens[0].token, str, tokens[0].start);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"clef\":\n\t\t\t\t\ttokens.shift();\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected = after clef\", str, 0); return ret; }\n\t\t\t\t\ttoken = tokens.shift();\n\t\t\t\t\tif (token.token !== \"=\") { warn(\"Expected = after clef\", str, token.start); break; }\n\t\t\t\t\tif (tokens.length === 0) { warn(\"Expected parameter after clef=\", str, 0); return ret; }\n\t\t\t\t\t//break; yes, we want to fall through. That allows \"clef=\" to be optional.\n\t\t\t\tcase \"treble\":\n\t\t\t\tcase \"bass\":\n\t\t\t\tcase \"alto\":\n\t\t\t\tcase \"tenor\":\n\t\t\t\tcase \"perc\":\n\t\t\t\tcase \"none\":\n\t\t\t\t\t// clef is [clef=] [⟨clef type⟩] [⟨line number⟩] [+8|-8]\n\t\t\t\t\tvar clef = tokens.shift();\n\t\t\t\t\tswitch (clef.token) {\n\t\t\t\t\t\tcase 'treble':\n\t\t\t\t\t\tcase 'tenor':\n\t\t\t\t\t\tcase 'alto':\n\t\t\t\t\t\tcase 'bass':\n\t\t\t\t\t\tcase 'perc':\n\t\t\t\t\t\tcase 'none':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'C': clef.token = 'alto'; break;\n\t\t\t\t\t\tcase 'F': clef.token = 'bass'; break;\n\t\t\t\t\t\tcase 'G': clef.token = 'treble'; break;\n\t\t\t\t\t\tcase 'c': clef.token = 'alto'; break;\n\t\t\t\t\t\tcase 'f': clef.token = 'bass'; break;\n\t\t\t\t\t\tcase 'g': clef.token = 'treble'; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\twarn(\"Expected clef name. Found \" + clef.token, str, clef.start);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (tokens.length > 0 && tokens[0].type === 'number') {\n\t\t\t\t\t\tclef.token += tokens[0].token;\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\tif (tokens.length > 1 && (tokens[0].token === '-' || tokens[0].token === '+' || tokens[0].token === '^' || tokens[0].token === '_') && tokens[1].token === '8') {\n\t\t\t\t\t\tclef.token += tokens[0].token + tokens[1].token;\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.clef = {type: clef.token, verticalPos: calcMiddle(clef.token, 0)};\n\t\t\t\t\tif (multilineVars.currentVoice && multilineVars.currentVoice.transpose !== undefined)\n\t\t\t\t\t\tmultilineVars.clef.transpose = multilineVars.currentVoice.transpose;\n\t\t\t\t\tret.foundClef = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\twarn(\"Unknown parameter: \" + tokens[0].token, str, tokens[0].start);\n\t\t\t\t\ttokens.shift();\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\tvar setCurrentVoice = function(id) {\n\t\tmultilineVars.currentVoice = multilineVars.voices[id];\n\t\ttuneBuilder.setCurrentVoice(multilineVars.currentVoice.staffNum, multilineVars.currentVoice.index);\n\t};\n\n\tparseKeyVoice.parseVoice = function(line, i, e) {\n\t\t//First truncate the string to the first non-space character after V: through either the\n\t\t//end of the line or a % character. Then remove trailing spaces, too.\n\t\tvar ret = tokenizer.getMeat(line, i, e);\n\t\tvar start = ret.start;\n\t\tvar end = ret.end;\n\t\t//The first thing on the line is the ID. It can be any non-space string and terminates at the\n\t\t//first space.\n\t\tvar id = tokenizer.getToken(line, start, end);\n\t\tif (id.length === 0) {\n\t\t\twarn(\"Expected a voice id\", line, start);\n\t\t\treturn;\n\t\t}\n\t\tvar isNew = false;\n\t\tif (multilineVars.voices[id] === undefined) {\n\t\t\tmultilineVars.voices[id] = {};\n\t\t\tisNew = true;\n\t\t\tif (multilineVars.score_is_present)\n\t\t\t\twarn(\"Can't have an unknown V: id when the %score directive is present\", line, start);\n\t\t}\n\t\tstart += id.length;\n\t\tstart += tokenizer.eatWhiteSpace(line, start);\n\n\t\tvar staffInfo = {startStaff: isNew};\n\t\tvar addNextTokenToStaffInfo = function(name) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse\n\t\t\t\tstaffInfo[name] = attr.token;\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar addNextTokenToVoiceInfo = function(id, name, type) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tif (type === 'number')\n\t\t\t\t\tattr.token = parseFloat(attr.token);\n\t\t\t\tmultilineVars.voices[id][name] = attr.token;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar getNextToken = function(name, type) {\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.err !== undefined)\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice: \" + attr.err, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected value for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tif (type === 'number')\n\t\t\t\t\tattr.token = parseFloat(attr.token);\n\t\t\t\treturn attr.token;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\t\tvar addNextNoteTokenToVoiceInfo = function(id, name) {\n\t\t\tvar noteToTransposition = {\n\t\t\t\t\"_B\": 2,\n\t\t\t\t\"_E\": 9,\n\t\t\t\t\"_b\": -10,\n\t\t\t\t\"_e\": -3\n\t\t\t};\n\t\t\tvar attr = tokenizer.getVoiceToken(line, start, end);\n\t\t\tif (attr.warn !== undefined)\n\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice: \" + attr.warn, line, start);\n\t\t\telse if (attr.token.length === 0 && line[start] !== '\"')\n\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice\", line, start);\n\t\t\telse {\n\t\t\t\tvar t = noteToTransposition[attr.token];\n\t\t\t\tif (!t)\n\t\t\t\t\twarn(\"Expected one of (_B, _E, _b, _e) for \" + name + \" in voice\", line, start);\n\t\t\t\telse\n\t\t\t\t\tmultilineVars.voices[id][name] = t;\n\t\t\t}\n\t\t\tstart += attr.len;\n\t\t};\n\n\t\t//Then the following items can occur in any order:\n\t\twhile (start < end) {\n\t\t\tvar token = tokenizer.getVoiceToken(line, start, end);\n\t\t\tstart += token.len;\n\n\t\t\tif (token.warn) {\n\t\t\t\twarn(\"Error parsing voice: \" + token.warn, line, start);\n\t\t\t} else {\n\t\t\t\tvar attr = null;\n\t\t\t\tswitch (token.token) {\n\t\t\t\t\tcase 'clef':\n\t\t\t\t\tcase 'cl':\n\t\t\t\t\t\taddNextTokenToStaffInfo('clef');\n\t\t\t\t\t\t// TODO-PER: check for a legal clef; do octavizing\n\t\t\t\t\t\tvar oct = 0;\n\t//\t\t\t\t\t\t\tfor (var ii = 0; ii < staffInfo.clef.length; ii++) {\n\t//\t\t\t\t\t\t\t\tif (staffInfo.clef[ii] === ',') oct -= 7;\n\t//\t\t\t\t\t\t\t\telse if (staffInfo.clef[ii] === \"'\") oct += 7;\n\t//\t\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staffInfo.clef !== undefined) {\n\t\t\t\t\t\t staffInfo.clef = staffInfo.clef.replace(/[',]/g, \"\"); //'//comment for emacs formatting of regexp\n\t\t\t\t\t\t\tif (staffInfo.clef.indexOf('+16') !== -1) {\n\t\t\t\t\t\t\t\toct += 14;\n\t\t\t\t\t\t\t\tstaffInfo.clef = staffInfo.clef.replace('+16', '');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstaffInfo.verticalPos = calcMiddle(staffInfo.clef, oct);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'treble':\n\t\t\t\t\tcase 'bass':\n\t\t\t\t\tcase 'tenor':\n\t\t\t\t\tcase 'alto':\n\t\t\t\t\tcase 'perc':\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'treble\\'':\n\t\t\t\t\tcase 'bass\\'':\n\t\t\t\t\tcase 'tenor\\'':\n\t\t\t\t\tcase 'alto\\'':\n\t\t\t\t\tcase 'none\\'':\n\t\t\t\t\tcase 'treble\\'\\'':\n\t\t\t\t\tcase 'bass\\'\\'':\n\t\t\t\t\tcase 'tenor\\'\\'':\n\t\t\t\t\tcase 'alto\\'\\'':\n\t\t\t\t\tcase 'none\\'\\'':\n\t\t\t\t\tcase 'treble,':\n\t\t\t\t\tcase 'bass,':\n\t\t\t\t\tcase 'tenor,':\n\t\t\t\t\tcase 'alto,':\n\t\t\t\t\tcase 'none,':\n\t\t\t\t\tcase 'treble,,':\n\t\t\t\t\tcase 'bass,,':\n\t\t\t\t\tcase 'tenor,,':\n\t\t\t\t\tcase 'alto,,':\n\t\t\t\t\tcase 'none,,':\n\t\t\t\t\t\t// TODO-PER: handle the octave indicators on the clef by changing the middle property\n\t\t\t\t\t\tvar oct2 = 0;\n\t//\t\t\t\t\t\t\tfor (var iii = 0; iii < token.token.length; iii++) {\n\t//\t\t\t\t\t\t\t\tif (token.token[iii] === ',') oct2 -= 7;\n\t//\t\t\t\t\t\t\t\telse if (token.token[iii] === \"'\") oct2 += 7;\n\t//\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t staffInfo.clef = token.token.replace(/[',]/g, \"\"); //'//comment for emacs formatting of regexp\n\t\t\t\t\t\tstaffInfo.verticalPos = calcMiddle(staffInfo.clef, oct2);\n\t\t\t\t\t\tmultilineVars.voices[id].clef = token.token;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'staves':\n\t\t\t\t\tcase 'stave':\n\t\t\t\t\tcase 'stv':\n\t\t\t\t\t\taddNextTokenToStaffInfo('staves');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'brace':\n\t\t\t\t\tcase 'brc':\n\t\t\t\t\t\taddNextTokenToStaffInfo('brace');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bracket':\n\t\t\t\t\tcase 'brk':\n\t\t\t\t\t\taddNextTokenToStaffInfo('bracket');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'name':\n\t\t\t\t\tcase 'nm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('name');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'subname':\n\t\t\t\t\tcase 'sname':\n\t\t\t\t\tcase 'snm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('subname');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'merge':\n\t\t\t\t\t\tstaffInfo.startStaff = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'stem':\n\t\t\t\t\tcase 'stems':\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.warn !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for stems in voice: \" + attr.warn, line, start);\n\t\t\t\t\t\telse if (attr.err !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for stems in voice: \" + attr.err, line, start);\n\t\t\t\t\t\telse if (attr.token === 'up' || attr.token === 'down')\n\t\t\t\t\t\t\tmultilineVars.voices[id].stem = attr.token;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"Expected up or down for voice stem\", line, start);\n\t\t\t\t\t\tstart += attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'up':\n\t\t\t\t\tcase 'down':\n\t\t\t\t\t\tmultilineVars.voices[id].stem = token.token;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'middle':\n\t\t\t\t\tcase 'm':\n\t\t\t\t\t\taddNextTokenToStaffInfo('verticalPos');\n\t\t\t\t\t\tstaffInfo.verticalPos = parseMiddle(staffInfo.verticalPos).mid;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'gchords':\n\t\t\t\t\tcase 'gch':\n\t\t\t\t\t\tmultilineVars.voices[id].suppressChords = true;\n\t\t\t\t\t\t// gchords can stand on its own, or it could be gchords=0.\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.token === \"0\")\n\t\t\t\t\t\t\tstart = start + attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'space':\n\t\t\t\t\tcase 'spc':\n\t\t\t\t\t\taddNextTokenToStaffInfo('spacing');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'scale', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'score':\n\t\t\t\t\t\taddNextNoteTokenToVoiceInfo(id, 'scoreTranspose');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transpose':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'transpose', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'stafflines':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'stafflines', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'staffscale':\n\t\t\t\t\t\t// TODO-PER: This is passed to the engraver, but the engraver ignores it.\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'staffscale', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'octave':\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'octave', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'volume':\n\t\t\t\t\t\t// TODO-PER: This is accepted, but not implemented, yet.\n\t\t\t\t\t\taddNextTokenToVoiceInfo(id, 'volume', 'number');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cue':\n\t\t\t\t\t\t// TODO-PER: This is accepted, but not implemented, yet.\n\t\t\t\t\t\tvar cue = getNextToken('cue', 'string');\n\t\t\t\t\t\tif (cue === 'on')\n\t\t\t\t\t\t\tmultilineVars.voices[id].scale = 0.6;\n\t\t\t\t\t\telse multilineVars.voices[id].scale = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\tattr = tokenizer.getVoiceToken(line, start, end);\n\t\t\t\t\t\tif (attr.warn !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for style in voice: \" + attr.warn, line, start);\n\t\t\t\t\t\telse if (attr.err !== undefined)\n\t\t\t\t\t\t\twarn(\"Expected value for style in voice: \" + attr.err, line, start);\n\t\t\t\t\t\telse if (attr.token === 'normal' || attr.token === 'harmonic' || attr.token === 'rhythm' || attr.token === 'x' || attr.token === 'triangle')\n\t\t\t\t\t\t\tmultilineVars.voices[id].style = attr.token;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twarn(\"Expected one of [normal, harmonic, rhythm, x, triangle] for voice style\", line, start);\n\t\t\t\t\t\tstart += attr.len;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t// default:\n\t\t\t\t\t// Use this to find V: usages that aren't handled.\n\t\t\t\t\t// \tconsole.log(\"parse voice\", token, tune.metaText.title);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstart += tokenizer.eatWhiteSpace(line, start);\n\t\t}\n\n\t\t// now we've filled up staffInfo, figure out what to do with this voice\n\t\t// TODO-PER: It is unclear from the standard and the examples what to do with brace, bracket, and staves, so they are ignored for now.\n\t\tif (staffInfo.startStaff || multilineVars.staves.length === 0) {\n\t\t\tmultilineVars.staves.push({index: multilineVars.staves.length, meter: multilineVars.origMeter});\n\t\t\tif (!multilineVars.score_is_present)\n\t\t\t\tmultilineVars.staves[multilineVars.staves.length-1].numVoices = 0;\n\t\t}\n\t\tif (multilineVars.voices[id].staffNum === undefined) {\n\t\t\t// store where to write this for quick access later.\n\t\t\tmultilineVars.voices[id].staffNum = multilineVars.staves.length-1;\n\t\t\tvar vi = 0;\n\t\t\tfor(var v in multilineVars.voices) {\n\t\t\t\tif(multilineVars.voices.hasOwnProperty(v)) {\n\t\t\t\t\tif (multilineVars.voices[v].staffNum === multilineVars.voices[id].staffNum)\n\t\t\t\t\t\tvi++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmultilineVars.voices[id].index = vi-1;\n\t\t}\n\t\tvar s = multilineVars.staves[multilineVars.voices[id].staffNum];\n\t\tif (!multilineVars.score_is_present)\n\t\t\ts.numVoices++;\n\t\tif (staffInfo.clef) s.clef = {type: staffInfo.clef, verticalPos: staffInfo.verticalPos};\n\t\tif (staffInfo.spacing) s.spacing_below_offset = staffInfo.spacing;\n\t\tif (staffInfo.verticalPos) s.verticalPos = staffInfo.verticalPos;\n\n\t\tif (staffInfo.name) {if (s.name) s.name.push(staffInfo.name); else s.name = [ staffInfo.name ];}\n\t\tif (staffInfo.subname) {if (s.subname) s.subname.push(staffInfo.subname); else s.subname = [ staffInfo.subname ];}\n\n\t\tsetCurrentVoice(id);\n\t};\n\n})();\n\nmodule.exports = parseKeyVoice;\n","var parseCommon = require('./abc_common');\nvar parseKeyVoice = require('./abc_parse_key_voice');\nvar transpose = require('./abc_transpose');\n\nvar tokenizer;\nvar warn;\nvar multilineVars;\nvar tune;\nvar tuneBuilder;\nvar header;\n\nvar MusicParser = function(_tokenizer, _warn, _multilineVars, _tune, _tuneBuilder, _header) {\n\ttokenizer = _tokenizer;\n\twarn = _warn;\n\tmultilineVars = _multilineVars;\n\ttune = _tune;\n\ttuneBuilder = _tuneBuilder;\n\theader = _header;\n\tthis.lineContinuation = false;\n}\n\n//\n// Parse line of music\n//\n// This is a stream of <(bar-marking|header|note-group)...> in any order, with optional spaces between each element\n// core-note is with no spaces within that\n// chord is with no spaces within that\n// grace-notes is spaces are allowed\n// note-group is spaces are allowed between items\n// bar-marking is or spaces allowed\n// header is spaces can occur between the colon, in the field, and before the close bracket\n// header can also be the only thing on a line. This is true even if it is a continuation line. In this case the brackets are not required.\n// a space is a back-tick, a space, or a tab. If it is a back-tick, then there is no end-beam.\n\n// Line preprocessing: anything after a % is ignored (the double %% should have been taken care of before this)\n// Then, all leading and trailing spaces are ignored.\n// If there was a line continuation, the \\n was replaced by a \\r and the \\ was replaced by a space. This allows the construct\n// of having a header mid-line conceptually, but actually be at the start of the line. This is equivolent to putting the header in [ ].\n\n// TODO-PER: How to handle ! for line break?\n// TODO-PER: dots before bar, dots before slur\n// TODO-PER: U: redefinable symbols.\n\n// Ambiguous symbols:\n// \"[\" can be the start of a chord, the start of a header element or part of a bar line.\n// --- if it is immediately followed by \"|\", it is a bar line\n// --- if it is immediately followed by K: L: M: V: it is a header (note: there are other headers mentioned in the standard, but I'm not sure how they would be used.)\n// --- otherwise it is the beginning of a chord\n// \"(\" can be the start of a slur or a triplet\n// --- if it is followed by a number from 2-9, then it is a triplet\n// --- otherwise it is a slur\n// \"]\"\n// --- if there is a chord open, then this is the close\n// --- if it is after a [|, then it is an invisible bar line\n// --- otherwise, it is par of a bar\n// \".\" can be a bar modifier or a slur modifier, or a decoration\n// --- if it comes immediately before a bar, it is a bar modifier\n// --- if it comes immediately before a slur, it is a slur modifier\n// --- otherwise it is a decoration for the next note.\n// number:\n// --- if it is after a bar, with no space, it is an ending marker\n// --- if it is after a ( with no space, it is a triplet count\n// --- if it is after a pitch or octave or slash, then it is a duration\n\n// Unambiguous symbols (except inside quoted strings):\n// vertical-bar, colon: part of a bar\n// ABCDEFGabcdefg: pitch\n// xyzZ: rest\n// comma, prime: octave\n// close-paren: end-slur\n// hyphen: tie\n// tilde, v, u, bang, plus, THLMPSO: decoration\n// carat, underscore, equal: accidental\n// ampersand: time reset\n// open-curly, close-curly: grace notes\n// double-quote: chord symbol\n// less-than, greater-than, slash: duration\n// back-tick, space, tab: space\nvar nonDecorations = \"ABCDEFGabcdefgxyzZ[]|^_{\";\t// use this to prescreen so we don't have to look for a decoration at every note.\n\nvar isInTie = function(multilineVars, overlayLevel, el) {\n\tif (multilineVars.inTie[overlayLevel] === undefined)\n\t\treturn false;\n\t// If this is single voice music then the voice index isn't set, so we use the first voice.\n\tvar voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.staffNum * 100 + multilineVars.currentVoice.index : 0;\n\tif (multilineVars.inTie[overlayLevel][voiceIndex]) {\n\t\tif (el.pitches !== undefined || el.rest.type !== 'spacer')\n\t\t\treturn true;\n\t}\n\treturn false;\n};\n\nvar el = { };\nMusicParser.prototype.parseMusic = function(line) {\n\theader.resolveTempo();\n\t//multilineVars.havent_set_length = false;\t// To late to set this now.\n\tmultilineVars.is_in_header = false;\t// We should have gotten a key header by now, but just in case, this is definitely out of the header.\n\tvar i = 0;\n\tvar startOfLine = multilineVars.iChar;\n\t// see if there is nothing but a comment on this line. If so, just ignore it. A full line comment is optional white space followed by %\n\twhile (tokenizer.isWhiteSpace(line[i]) && i < line.length)\n\t\ti++;\n\tif (i === line.length || line[i] === '%')\n\t\treturn;\n\n\t// Start with the standard staff, clef and key symbols on each line\n\tvar delayStartNewLine = multilineVars.start_new_line;\n\tif (multilineVars.continueall === undefined)\n\t\tmultilineVars.start_new_line = true;\n\telse\n\t\tmultilineVars.start_new_line = false;\n\tvar tripletNotesLeft = 0;\n\n\t// See if the line starts with a header field\n\tvar retHeader = header.letter_to_body_header(line, i);\n\tif (retHeader[0] > 0) {\n\t\ti += retHeader[0];\n\t\t// fixes bug on this: c[V:2]d\n\t\tif (retHeader[1] === 'V')\n\t\t\tthis.startNewLine();\n\t\t\t// delayStartNewLine = true;\n\t\t// TODO-PER: Handle inline headers\n\t}\n\n\tvar overlayLevel = 0;\n\twhile (i < line.length)\n\t{\n\t\tvar startI = i;\n\t\tif (line[i] === '%')\n\t\t\tbreak;\n\n\t\tvar retInlineHeader = header.letter_to_inline_header(line, i, delayStartNewLine);\n\t\tif (retInlineHeader[0] > 0) {\n\t\t\ti += retInlineHeader[0];\n\t\t\tif (retInlineHeader[1] === 'V')\n\t\t\t\tdelayStartNewLine = true; // fixes bug on this: c[V:2]d\n\t\t\t// TODO-PER: Handle inline headers\n\t\t\t//multilineVars.start_new_line = false;\n\t\t} else {\n\t\t\t// Wait until here to actually start the line because we know we're past the inline statements.\n\t\t\tif (!tuneBuilder.hasBeginMusic() || (delayStartNewLine && !this.lineContinuation)) {\n\t\t\t\tthis.startNewLine();\n\t\t\t\tdelayStartNewLine = false;\n\t\t\t}\n\n\t\t\t// We need to decide if the following characters are a bar-marking or a note-group.\n\t\t\t// Unfortunately, that is ambiguous. Both can contain chord symbols and decorations.\n\t\t\t// If there is a grace note either before or after the chord symbols and decorations, then it is definitely a note-group.\n\t\t\t// If there is a bar marker, it is definitely a bar-marking.\n\t\t\t// If there is either a core-note or chord, it is definitely a note-group.\n\t\t\t// So, loop while we find grace-notes, chords-symbols, or decorations. [It is an error to have more than one grace-note group in a row; the others can be multiple]\n\t\t\t// Then, if there is a grace-note, we know where to go.\n\t\t\t// Else see if we have a chord, core-note, slur, triplet, or bar.\n\n\t\t\tvar ret;\n\t\t\twhile (1) {\n\t\t\t\tret = tokenizer.eatWhiteSpace(line, i);\n\t\t\t\tif (ret > 0) {\n\t\t\t\t\ti += ret;\n\t\t\t\t}\n\t\t\t\tif (i > 0 && line[i-1] === '\\x12') {\n\t\t\t\t\t// there is one case where a line continuation isn't the same as being on the same line, and that is if the next character after it is a header.\n\t\t\t\t\tret = header.letter_to_body_header(line, i);\n\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\tif (ret[1] === 'V')\n\t\t\t\t\t\t\tthis.startNewLine(); // fixes bug on this: c\\\\nV:2]\\\\nd\n\t\t\t\t\t\t// TODO: insert header here\n\t\t\t\t\t\ti = ret[0];\n\t\t\t\t\t\tmultilineVars.start_new_line = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// gather all the grace notes, chord symbols and decorations\n\t\t\t\tret = letter_to_spacer(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\ti += ret[0];\n\t\t\t\t}\n\n\t\t\t\tret = letter_to_chord(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t// There could be more than one chord here if they have different positions.\n\t\t\t\t\t// If two chords have the same position, then connect them with newline.\n\t\t\t\t\tif (!el.chord)\n\t\t\t\t\t\tel.chord = [];\n\t\t\t\t\tvar chordName = tokenizer.translateString(ret[1]);\n\t\t\t\t\tchordName = chordName.replace(/;/g, \"\\n\");\n\t\t\t\t\tvar addedChord = false;\n\t\t\t\t\tfor (var ci = 0; ci < el.chord.length; ci++) {\n\t\t\t\t\t\tif (el.chord[ci].position === ret[2]) {\n\t\t\t\t\t\t\taddedChord = true;\n\t\t\t\t\t\t\tel.chord[ci].name += \"\\n\" + chordName;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (addedChord === false) {\n\t\t\t\t\t\tif (ret[2] === null && ret[3])\n\t\t\t\t\t\t\tel.chord.push({name: chordName, rel_position: ret[3]});\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel.chord.push({name: chordName, position: ret[2]});\n\t\t\t\t\t}\n\n\t\t\t\t\ti += ret[0];\n\t\t\t\t\tvar ii = tokenizer.skipWhiteSpace(line.substring(i));\n\t\t\t\t\tif (ii > 0)\n\t\t\t\t\t\tel.force_end_beam_last = true;\n\t\t\t\t\ti += ii;\n\t\t\t\t} else {\n\t\t\t\t\tif (nonDecorations.indexOf(line[i]) === -1)\n\t\t\t\t\t\tret = letter_to_accent(line, i);\n\t\t\t\t\telse ret = [ 0 ];\n\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\tif (ret[1] === null) {\n\t\t\t\t\t\t\tif (i + 1 < line.length)\n\t\t\t\t\t\t\t\tthis.startNewLine();\t// There was a ! in the middle of the line. Start a new line if there is anything after it.\n\t\t\t\t\t\t} else if (ret[1].length > 0) {\n\t\t\t\t\t\t\tif (ret[1].indexOf(\"style=\") === 0) {\n\t\t\t\t\t\t\t\tel.style = ret[1].substr(6);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (el.decoration === undefined)\n\t\t\t\t\t\t\t\t\tel.decoration = [];\n\t\t\t\t\t\t\t\tif (ret[1] === 'beambr1')\n\t\t\t\t\t\t\t\t\tel.beambr = 1;\n\t\t\t\t\t\t\t\telse if (ret[1] === \"beambr2\")\n\t\t\t\t\t\t\t\t\tel.beambr = 2;\n\t\t\t\t\t\t\t\telse el.decoration.push(ret[1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ti += ret[0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tret = letter_to_grace(line, i);\n\t\t\t\t\t\t// TODO-PER: Be sure there aren't already grace notes defined. That is an error.\n\t\t\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\t\t\tel.gracenotes = ret[1];\n\t\t\t\t\t\t\ti += ret[0];\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tret = letter_to_bar(line, i);\n\t\t\tif (ret[0] > 0) {\n\t\t\t\t// This is definitely a bar\n\t\t\t\toverlayLevel = 0;\n\t\t\t\tif (el.gracenotes !== undefined) {\n\t\t\t\t\t// Attach the grace note to an invisible note\n\t\t\t\t\tel.rest = { type: 'spacer' };\n\t\t\t\t\tel.duration = 0.125; // TODO-PER: I don't think the duration of this matters much, but figure out if it does.\n\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+i, startOfLine+i+ret[0], el);\n\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\tel = {};\n\t\t\t\t}\n\t\t\t\tvar bar = {type: ret[1]};\n\t\t\t\tif (bar.type.length === 0)\n\t\t\t\t\twarn(\"Unknown bar type\", line, i);\n\t\t\t\telse {\n\t\t\t\t\tif (multilineVars.inEnding && bar.type !== 'bar_thin') {\n\t\t\t\t\t\tbar.endEnding = true;\n\t\t\t\t\t\tmultilineVars.inEnding = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (ret[2]) {\n\t\t\t\t\t\tbar.startEnding = ret[2];\n\t\t\t\t\t\tif (multilineVars.inEnding)\n\t\t\t\t\t\t\tbar.endEnding = true;\n\t\t\t\t\t\tmultilineVars.inEnding = true;\n\t\t\t\t\t\tif (ret[1] === \"bar_right_repeat\") {\n\t\t\t\t\t\t\t// restore the tie and slur state from the start repeat\n\t\t\t\t\t\t\tmultilineVars.restoreStartEndingHoldOvers();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// save inTie, inTieChord\n\t\t\t\t\t\t\tmultilineVars.duplicateStartEndingHoldOvers();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (el.decoration !== undefined)\n\t\t\t\t\t\tbar.decoration = el.decoration;\n\t\t\t\t\tif (el.chord !== undefined)\n\t\t\t\t\t\tbar.chord = el.chord;\n\t\t\t\t\tif (bar.startEnding && multilineVars.barFirstEndingNum === undefined)\n\t\t\t\t\t\tmultilineVars.barFirstEndingNum = multilineVars.currBarNumber;\n\t\t\t\t\telse if (bar.startEnding && bar.endEnding && multilineVars.barFirstEndingNum)\n\t\t\t\t\t\tmultilineVars.currBarNumber = multilineVars.barFirstEndingNum;\n\t\t\t\t\telse if (bar.endEnding)\n\t\t\t\t\t\tmultilineVars.barFirstEndingNum = undefined;\n\t\t\t\t\tif (bar.type !== 'bar_invisible' && multilineVars.measureNotEmpty) {\n\t\t\t\t\t\tvar isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum === 0 && multilineVars.currentVoice.index === 0);\n\t\t\t\t\t\tif (isFirstVoice) {\n\t\t\t\t\t\t\tmultilineVars.currBarNumber++;\n\t\t\t\t\t\t\tif (multilineVars.barNumbers && multilineVars.currBarNumber % multilineVars.barNumbers === 0)\n\t\t\t\t\t\t\t\tbar.barNumber = multilineVars.currBarNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'bar');\n\t\t\t\t\ttuneBuilder.appendElement('bar', startOfLine+startI, startOfLine+i+ret[0], bar);\n\t\t\t\t\tmultilineVars.measureNotEmpty = false;\n\t\t\t\t\tel = {};\n\t\t\t\t}\n\t\t\t\ti += ret[0];\n\t\t\t} else if (line[i] === '&') {\t// backtrack to beginning of measure\n\t\t\t\tret = letter_to_overlay(line, i);\n\t\t\t\tif (ret[0] > 0) {\n\t\t\t\t\ttuneBuilder.appendElement('overlay', startOfLine, startOfLine+1, {});\n\t\t\t\t\ti += 1;\n\t\t\t\t\toverlayLevel++;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// This is definitely a note group\n\t\t\t\t//\n\t\t\t\t// Look for as many open slurs and triplets as there are. (Note: only the first triplet is valid.)\n\t\t\t\tret = letter_to_open_slurs_and_triplets(line, i);\n\t\t\t\tif (ret.consumed > 0) {\n\t\t\t\t\tif (ret.startSlur !== undefined)\n\t\t\t\t\t\tel.startSlur = ret.startSlur;\n\t\t\t\t\tif (ret.dottedSlur)\n\t\t\t\t\t\tel.dottedSlur = true;\n\t\t\t\t\tif (ret.triplet !== undefined) {\n\t\t\t\t\t\tif (tripletNotesLeft > 0)\n\t\t\t\t\t\t\twarn(\"Can't nest triplets\", line, i);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tel.startTriplet = ret.triplet;\n\t\t\t\t\t\t\tel.tripletMultiplier = ret.tripletQ / ret.triplet;\n\t\t\t\t\t\t\tel.tripletR = ret.num_notes;\n\t\t\t\t\t\t\ttripletNotesLeft = ret.num_notes === undefined ? ret.triplet : ret.num_notes;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti += ret.consumed;\n\t\t\t\t}\n\n\t\t\t\t// handle chords.\n\t\t\t\tif (line[i] === '[') {\n\t\t\t\t\tvar chordStartChar = i;\n\t\t\t\t\ti++;\n\t\t\t\t\tvar chordDuration = null;\n\t\t\t\t\tvar rememberEndBeam = false;\n\n\t\t\t\t\tvar done = false;\n\t\t\t\t\twhile (!done) {\n\t\t\t\t\t\tvar accent = letter_to_accent(line, i);\n\t\t\t\t\t\tif (accent[0] > 0) {\n\t\t\t\t\t\t\ti += accent[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar chordNote = getCoreNote(line, i, {}, false);\n\t\t\t\t\t\tif (chordNote !== null && chordNote.pitch !== undefined) {\n\t\t\t\t\t\t\tif (accent[0] > 0) { // If we found a decoration above, it modifies the entire chord. \"style\" is handled below.\n\t\t\t\t\t\t\t\tif (accent[1].indexOf(\"style=\") !== 0) {\n\t\t\t\t\t\t\t\t\tif (el.decoration === undefined)\n\t\t\t\t\t\t\t\t\t\tel.decoration = [];\n\t\t\t\t\t\t\t\t\tel.decoration.push(accent[1]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (chordNote.end_beam) {\n\t\t\t\t\t\t\t\tel.end_beam = true;\n\t\t\t\t\t\t\t\tdelete chordNote.end_beam;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (el.pitches === undefined) {\n\t\t\t\t\t\t\t\tel.duration = chordNote.duration;\n\t\t\t\t\t\t\t\tel.pitches = [ chordNote ];\n\t\t\t\t\t\t\t} else\t// Just ignore the note lengths of all but the first note. The standard isn't clear here, but this seems less confusing.\n\t\t\t\t\t\t\t\tel.pitches.push(chordNote);\n\t\t\t\t\t\t\tdelete chordNote.duration;\n\t\t\t\t\t\t\tif (accent[0] > 0) { // If we found a style above, it modifies the individual pitch, not the entire chord.\n\t\t\t\t\t\t\t\tif (accent[1].indexOf(\"style=\") === 0) {\n\t\t\t\t\t\t\t\t\tel.pitches[el.pitches.length-1].style = accent[1].substr(6);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (multilineVars.inTieChord[el.pitches.length]) {\n\t\t\t\t\t\t\t\tchordNote.endTie = true;\n\t\t\t\t\t\t\t\tmultilineVars.inTieChord[el.pitches.length] = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (chordNote.startTie)\n\t\t\t\t\t\t\t\tmultilineVars.inTieChord[el.pitches.length] = true;\n\n\t\t\t\t\t\t\ti = chordNote.endChar;\n\t\t\t\t\t\t\tdelete chordNote.endChar;\n\t\t\t\t\t\t} else if (line[i] === ' ') {\n\t\t\t\t\t\t\t// Spaces are not allowed in chords, but we can recover from it by ignoring it.\n\t\t\t\t\t\t\twarn(\"Spaces are not allowed in chords\", line, i);\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (i < line.length && line[i] === ']') {\n\t\t\t\t\t\t\t\t// consume the close bracket\n\t\t\t\t\t\t\t\ti++;\n\n\t\t\t\t\t\t\t\tif (multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\t\t\t\tel.duration = el.duration * multilineVars.next_note_duration;\n\t\t\t\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (isInTie(multilineVars, overlayLevel, el)) {\n\t\t\t\t\t\t\t\t\tel.pitches.forEach(function(pitch) { pitch.endTie = true; });\n\t\t\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, false);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (tripletNotesLeft > 0 && !(el.rest && el.rest.type === \"spacer\")) {\n\t\t\t\t\t\t\t\t\ttripletNotesLeft--;\n\t\t\t\t\t\t\t\t\tif (tripletNotesLeft === 0) {\n\t\t\t\t\t\t\t\t\t\tel.endTriplet = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar postChordDone = false;\n\t\t\t\t\t\t\t\twhile (i < line.length && !postChordDone) {\n\t\t\t\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\t\t\t\tcase ' ':\n\t\t\t\t\t\t\t\t\t\tcase '\\t':\n\t\t\t\t\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase ')':\n\t\t\t\t\t\t\t\t\t\t\tif (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '-':\n\t\t\t\t\t\t\t\t\t\t\tel.pitches.forEach(function(pitch) { pitch.startTie = {}; });\n\t\t\t\t\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, true);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '>':\n\t\t\t\t\t\t\t\t\t\tcase '<':\n\t\t\t\t\t\t\t\t\t\t\tvar br2 = getBrokenRhythm(line, i);\n\t\t\t\t\t\t\t\t\t\t\ti += br2[0] - 1;\t// index gets incremented below, so we'll let that happen\n\t\t\t\t\t\t\t\t\t\t\tmultilineVars.next_note_duration = br2[2];\n\t\t\t\t\t\t\t\t\t\t\tif (chordDuration)\n\t\t\t\t\t\t\t\t\t\t\t\tchordDuration = chordDuration * br2[1];\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\tchordDuration = br2[1];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase '1':\n\t\t\t\t\t\t\t\t\t\tcase '2':\n\t\t\t\t\t\t\t\t\t\tcase '3':\n\t\t\t\t\t\t\t\t\t\tcase '4':\n\t\t\t\t\t\t\t\t\t\tcase '5':\n\t\t\t\t\t\t\t\t\t\tcase '6':\n\t\t\t\t\t\t\t\t\t\tcase '7':\n\t\t\t\t\t\t\t\t\t\tcase '8':\n\t\t\t\t\t\t\t\t\t\tcase '9':\n\t\t\t\t\t\t\t\t\t\tcase '/':\n\t\t\t\t\t\t\t\t\t\t\tvar fraction = tokenizer.getFraction(line, i);\n\t\t\t\t\t\t\t\t\t\t\tchordDuration = fraction.value;\n\t\t\t\t\t\t\t\t\t\t\ti = fraction.index;\n\t\t\t\t\t\t\t\t\t\t\tvar ch = line[i]\n\t\t\t\t\t\t\t\t\t\t\tif (ch === ' ')\n\t\t\t\t\t\t\t\t\t\t\t\trememberEndBeam = true;\n\t\t\t\t\t\t\t\t\t\t\tif (ch === '-' || ch === ')' || ch === ' ' || ch === '<' || ch === '>')\n\t\t\t\t\t\t\t\t\t\t\t\ti--; // Subtracting one because one is automatically added below\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t\tpostChordDone = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tpostChordDone = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!postChordDone) {\n\t\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\twarn(\"Expected ']' to end the chords\", line, i);\n\n\t\t\t\t\t\t\tif (el.pitches !== undefined) {\n\t\t\t\t\t\t\t\tif (chordDuration !== null) {\n\t\t\t\t\t\t\t\t\tel.duration = el.duration * chordDuration;\n\t\t\t\t\t\t\t\t\tif (rememberEndBeam)\n\t\t\t\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+startI, startOfLine+i, el);\n\t\t\t\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\t\t\t\tel = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\t// Single pitch\n\t\t\t\t\tvar el2 = {};\n\t\t\t\t\tvar core = getCoreNote(line, i, el2, true);\n\t\t\t\t\tif (el2.endTie !== undefined) setIsInTie(multilineVars, overlayLevel, true);\n\t\t\t\t\tif (core !== null) {\n\t\t\t\t\t\tif (core.pitch !== undefined) {\n\t\t\t\t\t\t\tel.pitches = [ { } ];\n\t\t\t\t\t\t\t// TODO-PER: straighten this out so there is not so much copying: getCoreNote shouldn't change e'\n\t\t\t\t\t\t\tif (core.accidental !== undefined) el.pitches[0].accidental = core.accidental;\n\t\t\t\t\t\t\tel.pitches[0].pitch = core.pitch;\n\t\t\t\t\t\t\tel.pitches[0].name = core.name;\n\t\t\t\t\t\t\tif (core.midipitch || core.midipitch === 0)\n\t\t\t\t\t\t\t\tel.pitches[0].midipitch = core.midipitch;\n\t\t\t\t\t\t\tif (core.endSlur !== undefined) el.pitches[0].endSlur = core.endSlur;\n\t\t\t\t\t\t\tif (core.endTie !== undefined) el.pitches[0].endTie = core.endTie;\n\t\t\t\t\t\t\tif (core.startSlur !== undefined) el.pitches[0].startSlur = core.startSlur;\n\t\t\t\t\t\t\tif (el.startSlur !== undefined) el.pitches[0].startSlur = el.startSlur;\n\t\t\t\t\t\t\tif (el.dottedSlur !== undefined) el.pitches[0].dottedSlur = true;\n\t\t\t\t\t\t\tif (core.startTie !== undefined) el.pitches[0].startTie = core.startTie;\n\t\t\t\t\t\t\tif (el.startTie !== undefined) el.pitches[0].startTie = el.startTie;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.rest = core.rest;\n\t\t\t\t\t\t\tif (core.endSlur !== undefined) el.endSlur = core.endSlur;\n\t\t\t\t\t\t\tif (core.endTie !== undefined) el.rest.endTie = core.endTie;\n\t\t\t\t\t\t\tif (core.startSlur !== undefined) el.startSlur = core.startSlur;\n\t\t\t\t\t\t\tif (core.startTie !== undefined) el.rest.startTie = core.startTie;\n\t\t\t\t\t\t\tif (el.startTie !== undefined) el.rest.startTie = el.startTie;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (core.chord !== undefined) el.chord = core.chord;\n\t\t\t\t\t\tif (core.duration !== undefined) el.duration = core.duration;\n\t\t\t\t\t\tif (core.decoration !== undefined) el.decoration = core.decoration;\n\t\t\t\t\t\tif (core.graceNotes !== undefined) el.graceNotes = core.graceNotes;\n\t\t\t\t\t\tdelete el.startSlur;\n\t\t\t\t\t\tdelete el.dottedSlur;\n\t\t\t\t\t\tif (isInTie(multilineVars, overlayLevel, el)) {\n\t\t\t\t\t\t\tif (el.pitches !== undefined) {\n\t\t\t\t\t\t\t\tel.pitches[0].endTie = true;\n\t\t\t\t\t\t\t} else if (el.rest.type !== 'spacer') {\n\t\t\t\t\t\t\t\tel.rest.endTie = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (core.startTie || el.startTie)\n\t\t\t\t\t\t\tsetIsInTie(multilineVars, overlayLevel, true);\n\t\t\t\t\t\ti = core.endChar;\n\n\t\t\t\t\t\tif (tripletNotesLeft > 0 && !(core.rest && core.rest.type === \"spacer\")) {\n\t\t\t\t\t\t\ttripletNotesLeft--;\n\t\t\t\t\t\t\tif (tripletNotesLeft === 0) {\n\t\t\t\t\t\t\t\tel.endTriplet = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (core.end_beam)\n\t\t\t\t\t\t\taddEndBeam(el);\n\n\t\t\t\t\t\t// If there is a whole rest, then it should be the duration of the measure, not it's own duration. We need to special case it.\n\t\t\t\t\t\t// If the time signature length is greater than 4/4, though, then a whole rest has no special treatment.\n\t\t\t\t\t\tif (el.rest && el.rest.type === 'rest' && el.duration === 1 && durationOfMeasure(multilineVars) <= 1) {\n\t\t\t\t\t\t\tel.rest.type = 'whole';\n\n\t\t\t\t\t\t\tel.duration = durationOfMeasure(multilineVars);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Create a warning if this is not a displayable duration.\n\t\t\t\t\t\t// The first item on a line is a regular note value, each item after that represents a dot placed after the previous note.\n\t\t\t\t\t\t// Only durations less than a whole note are tested because whole note durations have some tricky rules.\n\t\t\t\t\t\tvar durations = [\n\t\t\t\t\t\t\t0.5, 0.75, 0.875, 0.9375, 0.96875, 0.984375,\n\t\t\t\t\t\t\t0.25, 0.375, 0.4375, 0.46875, 0.484375, 0.4921875,\n\t\t\t\t\t\t\t0.125, 0.1875, 0.21875, 0.234375, 0.2421875, 0.24609375,\n\t\t\t\t\t\t\t0.0625, 0.09375, 0.109375, 0.1171875, 0.12109375, 0.123046875,\n\t\t\t\t\t\t\t0.03125, 0.046875, 0.0546875, 0.05859375, 0.060546875, 0.0615234375,\n\t\t\t\t\t\t\t0.015625, 0.0234375, 0.02734375, 0.029296875, 0.0302734375, 0.03076171875,\n\t\t\t\t\t\t];\n\t\t\t\t\t\tif (el.duration < 1 && durations.indexOf(el.duration) === -1 && el.duration !== 0) {\n\t\t\t\t\t\t\tif (!el.rest || el.rest.type !== 'spacer')\n\t\t\t\t\t\t\t\twarn(\"Duration not representable: \" + line.substring(startI, i), line, i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmultilineVars.addFormattingOptions(el, tune.formatting, 'note');\n\t\t\t\t\t\ttuneBuilder.appendElement('note', startOfLine+startI, startOfLine+i, el);\n\t\t\t\t\t\tmultilineVars.measureNotEmpty = true;\n\t\t\t\t\t\tel = {};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (i === startI) {\t// don't know what this is, so ignore it.\n\t\t\t\t\tif (line[i] !== ' ' && line[i] !== '`')\n\t\t\t\t\t\twarn(\"Unknown character ignored\", line, i);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tthis.lineContinuation = line.indexOf('\\x12') >= 0 || (retHeader[0] > 0)\n\tif (!this.lineContinuation) { el = { } }\n};\n\nvar setIsInTie =function(multilineVars, overlayLevel, value) {\n\t// If this is single voice music then the voice index isn't set, so we use the first voice.\n\tvar voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.staffNum * 100 + multilineVars.currentVoice.index : 0;\n\tif (multilineVars.inTie[overlayLevel] === undefined)\n\t\tmultilineVars.inTie[overlayLevel] = [];\n\tmultilineVars.inTie[overlayLevel][voiceIndex] = value;\n};\n\nvar letter_to_chord = function(line, i) {\n\tif (line[i] === '\"')\n\t{\n\t\tvar chord = tokenizer.getBrackettedSubstring(line, i, 5);\n\t\tif (!chord[2])\n\t\t\twarn(\"Missing the closing quote while parsing the chord symbol\", line , i);\n\t\t// If it starts with ^, then the chord appears above.\n\t\t// If it starts with _ then the chord appears below.\n\t\t// (note that the 2.0 draft standard defines them as not chords, but annotations and also defines @.)\n\t\tif (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '^') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'above';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '_') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'below';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '<') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'left';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '>') {\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tchord[2] = 'right';\n\t\t} else if (chord[0] > 0 && chord[1].length > 0 && chord[1][0] === '@') {\n\t\t\t// @-15,5.7\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tvar x = tokenizer.getFloat(chord[1]);\n\t\t\tif (x.digits === 0)\n\t\t\t\twarn(\"Missing first position in absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(x.digits);\n\t\t\tif (chord[1][0] !== ',')\n\t\t\t\twarn(\"Missing comma absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(1);\n\t\t\tvar y = tokenizer.getFloat(chord[1]);\n\t\t\tif (y.digits === 0)\n\t\t\t\twarn(\"Missing second position in absolutely positioned annotation.\", line , i);\n\t\t\tchord[1] = chord[1].substring(y.digits);\n\t\t\tvar ws = tokenizer.skipWhiteSpace(chord[1]);\n\t\t\tchord[1] = chord[1].substring(ws);\n\t\t\tchord[2] = null;\n\t\t\tchord[3] = { x: x.value, y: y.value };\n\t\t} else {\n\t\t\tif (multilineVars.freegchord !== true) {\n\t\t\t\tchord[1] = chord[1].replace(/([ABCDEFG0-9])b/g, \"$1♭\");\n\t\t\t\tchord[1] = chord[1].replace(/([ABCDEFG0-9])#/g, \"$1♯\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)o([^A-Za-z])/g, \"$1$2°$3\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)o$/g, \"$1$2°\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)0([^A-Za-z])/g, \"$1$2ø$3\");\n\t\t\t\tchord[1] = chord[1].replace(/^([ABCDEFG])([♯♭]?)\\^([^A-Za-z])/g, \"$1$2∆$3\");\n\t\t\t}\n\t\t\tchord[2] = 'default';\n\t\t\tchord[1] = transpose.chordName(multilineVars, chord[1]);\n\t\t}\n\t\treturn chord;\n\t}\n\treturn [0, \"\"];\n};\n\nvar letter_to_grace = function(line, i) {\n\t// Grace notes are an array of: startslur, note, endslur, space; where note is accidental, pitch, duration\n\tif (line[i] === '{') {\n\t\t// fetch the gracenotes string and consume that into the array\n\t\tvar gra = tokenizer.getBrackettedSubstring(line, i, 1, '}');\n\t\tif (!gra[2])\n\t\t\twarn(\"Missing the closing '}' while parsing grace note\", line, i);\n\t\t// If there is a slur after the grace construction, then move it to the last note inside the grace construction\n\t\tif (line[i+gra[0]] === ')') {\n\t\t\tgra[0]++;\n\t\t\tgra[1] += ')';\n\t\t}\n\n\t\tvar gracenotes = [];\n\t\tvar ii = 0;\n\t\tvar inTie = false;\n\t\twhile (ii < gra[1].length) {\n\t\t\tvar acciaccatura = false;\n\t\t\tif (gra[1][ii] === '/') {\n\t\t\t\tacciaccatura = true;\n\t\t\t\tii++;\n\t\t\t}\n\t\t\tvar note = getCoreNote(gra[1], ii, {}, false);\n\t\t\tif (note !== null) {\n\t\t\t\t// The grace note durations should not be affected by the default length: they should be based on 1/16, so if that isn't the default, then multiply here.\n\t\t\t\tnote.duration = note.duration / (multilineVars.default_length * 8);\n\t\t\t\tif (acciaccatura)\n\t\t\t\t\tnote.acciaccatura = true;\n\t\t\t\tgracenotes.push(note);\n\n\t\t\t\tif (inTie) {\n\t\t\t\t\tnote.endTie = true;\n\t\t\t\t\tinTie = false;\n\t\t\t\t}\n\t\t\t\tif (note.startTie)\n\t\t\t\t\tinTie = true;\n\n\t\t\t\tii = note.endChar;\n\t\t\t\tdelete note.endChar;\n\n\t\t\t\tif (note.end_beam) {\n\t\t\t\t\tnote.endBeam = true;\n\t\t\t\t\tdelete note.end_beam;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// We shouldn't get anything but notes or a space here, so report an error\n\t\t\t\tif (gra[1][ii] === ' ') {\n\t\t\t\t\tif (gracenotes.length > 0)\n\t\t\t\t\t\tgracenotes[gracenotes.length-1].endBeam = true;\n\t\t\t\t} else\n\t\t\t\t\twarn(\"Unknown character '\" + gra[1][ii] + \"' while parsing grace note\", line, i);\n\t\t\t\tii++;\n\t\t\t}\n\t\t}\n\t\tif (gracenotes.length)\n\t\t\treturn [gra[0], gracenotes];\n\t}\n\treturn [ 0 ];\n};\n\nfunction letter_to_overlay(line, i) {\n\tif (line[i] === '&') {\n\t\tvar start = i;\n\t\twhile (line[i] && line[i] !== ':' && line[i] !== '|')\n\t\t\ti++;\n\t\treturn [ i-start, line.substring(start+1, i) ];\n\t}\n\treturn [ 0 ];\n}\n\nfunction durationOfMeasure(multilineVars) {\n\t// TODO-PER: This could be more complicated if one of the unusual measures is used.\n\tvar meter = multilineVars.origMeter;\n\tif (!meter || meter.type !== 'specified')\n\t\treturn 1;\n\tif (!meter.value || meter.value.length === 0)\n\t\treturn 1;\n\treturn parseInt(meter.value[0].num, 10) / parseInt(meter.value[0].den, 10);\n}\n\nvar legalAccents = [\n\t\"trill\", \"lowermordent\", \"uppermordent\", \"mordent\", \"pralltriller\", \"accent\",\n\t\"fermata\", \"invertedfermata\", \"tenuto\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"+\", \"wedge\",\n\t\"open\", \"thumb\", \"snap\", \"turn\", \"roll\", \"breath\", \"shortphrase\", \"mediumphrase\", \"longphrase\",\n\t\"segno\", \"coda\", \"D.S.\", \"D.C.\", \"fine\", \"beambr1\", \"beambr2\",\n\t\"slide\", \"marcato\",\n\t\"upbow\", \"downbow\", \"/\", \"//\", \"///\", \"////\", \"trem1\", \"trem2\", \"trem3\", \"trem4\",\n\t\"turnx\", \"invertedturn\", \"invertedturnx\", \"trill(\", \"trill)\", \"arpeggio\", \"xstem\", \"mark\", \"umarcato\",\n\t\"style=normal\", \"style=harmonic\", \"style=rhythm\", \"style=x\", \"style=triangle\", \"D.C.alcoda\", \"D.C.alfine\", \"D.S.alcoda\", \"D.S.alfine\", \"editorial\", \"courtesy\"\n];\n\nvar volumeDecorations = [\n\t\"p\", \"pp\", \"f\", \"ff\", \"mf\", \"mp\", \"ppp\", \"pppp\", \"fff\", \"ffff\", \"sfz\"\n];\n\nvar dynamicDecorations = [\n\t\"crescendo(\", \"crescendo)\", \"diminuendo(\", \"diminuendo)\", \"glissando(\", \"glissando)\"\n];\n\nvar accentPseudonyms = [\n\t[\"<\", \"accent\"], [\">\", \"accent\"], [\"tr\", \"trill\"],\n\t[\"plus\", \"+\"], [ \"emphasis\", \"accent\"],\n\t[ \"^\", \"umarcato\" ], [ \"marcato\", \"umarcato\" ]\n];\n\nvar accentDynamicPseudonyms = [\n\t[\"<(\", \"crescendo(\"], [\"<)\", \"crescendo)\"],\n\t[\">(\", \"diminuendo(\"], [\">)\", \"diminuendo)\"]\n];\n\nvar letter_to_accent = function(line, i) {\n\tvar macro = multilineVars.macros[line[i]];\n\n\tif (macro !== undefined) {\n\t\tif (macro[0] === '!' || macro[0] === '+')\n\t\t\tmacro = macro.substring(1);\n\t\tif (macro[macro.length-1] === '!' || macro[macro.length-1] === '+')\n\t\t\tmacro = macro.substring(0, macro.length-1);\n\t\tif (legalAccents.includes(macro))\n\t\t\treturn [ 1, macro ];\n\t\telse if (volumeDecorations.includes(macro)) {\n\t\t\tif (multilineVars.volumePosition === 'hidden')\n\t\t\t\tmacro = \"\";\n\t\t\treturn [1, macro];\n\t\t} else if (dynamicDecorations.includes(macro)) {\n\t\t\tif (multilineVars.dynamicPosition === 'hidden')\n\t\t\t\tmacro = \"\";\n\t\t\treturn [1, macro];\n\t\t} else {\n\t\t\tif (!multilineVars.ignoredDecorations.includes(macro))\n\t\t\t\twarn(\"Unknown macro: \" + macro, line, i);\n\t\t\treturn [1, '' ];\n\t\t}\n\t}\n\tswitch (line[i])\n\t{\n\t\tcase '.':\n\t\t\tif (line[i+1] === '(' || line[i+1] === '-') // a dot then open paren is a dotted slur; likewise dot dash is dotted tie.\n\t\t\t\tbreak;\n\t\t\treturn [1, 'staccato'];\n\t\tcase 'u':return [1, 'upbow'];\n\t\tcase 'v':return [1, 'downbow'];\n\t\tcase '~':return [1, 'irishroll'];\n\t\tcase '!':\n\t\tcase '+':\n\t\t\tvar ret = tokenizer.getBrackettedSubstring(line, i, 5);\n\t\t\t// Be sure that the accent is recognizable.\n\t\t\tif (ret[1].length > 1 && (ret[1][0] === '^' || ret[1][0] ==='_'))\n\t\t\t\tret[1] = ret[1].substring(1);\t// TODO-PER: The test files have indicators forcing the ornament to the top or bottom, but that isn't in the standard. We'll just ignore them.\n\t\t\tif (legalAccents.includes(ret[1]))\n\t\t\t\treturn ret;\n\t\t\tif (volumeDecorations.includes(ret[1])) {\n\t\t\t\tif (multilineVars.volumePosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t\tif (dynamicDecorations.includes(ret[1])) {\n\t\t\t\tif (multilineVars.dynamicPosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tvar ind = accentPseudonyms.findIndex(function (acc) { return ret[1] === acc[0]})\n\t\t\tif (ind >= 0) {\n\t\t\t\tret[1] = accentPseudonyms[ind][1];\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tind = accentDynamicPseudonyms.findIndex(function (acc) { return ret[1] === acc[0]})\n\t\t\tif (ind >= 0) {\n\t\t\t\tret[1] = accentDynamicPseudonyms[ind][1];\n\t\t\t\tif (multilineVars.dynamicPosition === 'hidden' )\n\t\t\t\t\tret[1] = '';\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// We didn't find the accent in the list, so consume the space, but don't return an accent.\n\t\t\t// Although it is possible that ! was used as a line break, so accept that.\n\t\t\tif (line[i] === '!' && (ret[0] === 1 || line[i+ret[0]-1] !== '!'))\n\t\t\t\treturn [1, null ];\n\t\t\twarn(\"Unknown decoration: \" + ret[1], line, i);\n\t\t\tret[1] = \"\";\n\t\t\treturn ret;\n\t\tcase 'H':return [1, 'fermata'];\n\t\tcase 'J':return [1, 'slide'];\n\t\tcase 'L':return [1, 'accent'];\n\t\tcase 'M':return [1, 'mordent'];\n\t\tcase 'O':return[1, 'coda'];\n\t\tcase 'P':return[1, 'pralltriller'];\n\t\tcase 'R':return [1, 'roll'];\n\t\tcase 'S':return [1, 'segno'];\n\t\tcase 'T':return [1, 'trill'];\n\t}\n\treturn [0, 0];\n};\n\nvar letter_to_spacer = function(line, i) {\n\tvar start = i;\n\twhile (tokenizer.isWhiteSpace(line[i]))\n\t\ti++;\n\treturn [ i-start ];\n};\n\n// returns the class of the bar line\n// the number of the repeat\n// and the number of characters used up\n// if 0 is returned, then the next element was not a bar line\nvar letter_to_bar = function(line, curr_pos) {\n\tvar ret = tokenizer.getBarLine(line, curr_pos);\n\tif (ret.len === 0)\n\t\treturn [0,\"\"];\n\tif (ret.warn) {\n\t\twarn(ret.warn, line, curr_pos);\n\t\treturn [ret.len,\"\"];\n\t}\n\n\t// Now see if this is a repeated ending\n\t// A repeated ending is all of the characters 1,2,3,4,5,6,7,8,9,0,-, and comma\n\t// It can also optionally start with '[', which is ignored.\n\t// Also, it can have white space before the '['.\n\tfor (var ws = 0; ws < line.length; ws++)\n\t\tif (line[curr_pos + ret.len + ws] !== ' ')\n\t\t\tbreak;\n\tvar orig_bar_len = ret.len;\n\tif (line[curr_pos+ret.len+ws] === '[') {\n\t\tret.len += ws + 1;\n\t}\n\n\t// It can also be a quoted string. It is unclear whether that construct requires '[', but it seems like it would. otherwise it would be confused with a regular chord.\n\tif (line[curr_pos+ret.len] === '\"' && line[curr_pos+ret.len-1] === '[') {\n\t\tvar ending = tokenizer.getBrackettedSubstring(line, curr_pos+ret.len, 5);\n\t\treturn [ret.len+ending[0], ret.token, ending[1]];\n\t}\n\tvar retRep = tokenizer.getTokenOf(line.substring(curr_pos+ret.len), \"1234567890-,\");\n\tif (retRep.len === 0 || retRep.token[0] === '-')\n\t\treturn [orig_bar_len, ret.token];\n\n\treturn [ret.len+retRep.len, ret.token, retRep.token];\n};\n\nvar tripletQ = {\n\t2: 3,\n\t3: 2,\n\t4: 3,\n\t5: 2, // TODO-PER: not handling 6/8 rhythm yet\n\t6: 2,\n\t7: 2, // TODO-PER: not handling 6/8 rhythm yet\n\t8: 3,\n\t9: 2 // TODO-PER: not handling 6/8 rhythm yet\n};\n\nvar letter_to_open_slurs_and_triplets = function(line, i) {\n\t// consume spaces, and look for all the open parens. If there is a number after the open paren,\n\t// that is a triplet. Otherwise that is a slur. Collect all the slurs and the first triplet.\n\tvar ret = {};\n\tvar start = i;\n\tif (line[i] === '.' && line[i+1] === '(') {\n\t\tret.dottedSlur = true;\n\t\ti++;\n\t}\n\twhile (line[i] === '(' || tokenizer.isWhiteSpace(line[i])) {\n\t\tif (line[i] === '(') {\n\t\t\tif (i+1 < line.length && (line[i+1] >= '2' && line[i+1] <= '9')) {\n\t\t\t\tif (ret.triplet !== undefined)\n\t\t\t\t\twarn(\"Can't nest triplets\", line, i);\n\t\t\t\telse {\n\t\t\t\t\tret.triplet = line[i+1] - '0';\n\t\t\t\t\tret.tripletQ = tripletQ[ret.triplet];\n\t\t\t\t\tret.num_notes = ret.triplet;\n\t\t\t\t\tif (i+2 < line.length && line[i+2] === ':') {\n\t\t\t\t\t\t// We are expecting \"(p:q:r\" or \"(p:q\" or \"(p::r\"\n\t\t\t\t\t\t// That is: \"put p notes into the time of q for the next r notes\"\n\t\t\t\t\t\t// if r is missing, then it is equal to p.\n\t\t\t\t\t\t// if q is missing, it is determined from this table:\n\t\t\t\t\t\t// (2 notes in the time of 3\n\t\t\t\t\t\t// (3 notes in the time of 2\n\t\t\t\t\t\t// (4 notes in the time of 3\n\t\t\t\t\t\t// (5 notes in the time of n | if time sig is (6/8, 9/8, 12/8), n=3, else n=2\n\t\t\t\t\t\t// (6 notes in the time of 2\n\t\t\t\t\t\t// (7 notes in the time of n\n\t\t\t\t\t\t// (8 notes in the time of 3\n\t\t\t\t\t\t// (9 notes in the time of n\n\t\t\t\t\t\tif (i+3 < line.length && line[i+3] === ':') {\n\t\t\t\t\t\t\t// The second number, 'q', is not present.\n\t\t\t\t\t\t\tif (i+4 < line.length && (line[i+4] >= '1' && line[i+4] <= '9')) {\n\t\t\t\t\t\t\t\tret.num_notes = line[i+4] - '0';\n\t\t\t\t\t\t\t\ti += 3;\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\twarn(\"expected number after the two colons after the triplet to mark the duration\", line, i);\n\t\t\t\t\t\t} else if (i+3 < line.length && (line[i+3] >= '1' && line[i+3] <= '9')) {\n\t\t\t\t\t\t\tret.tripletQ = line[i+3] - '0';\n\t\t\t\t\t\t\tif (i+4 < line.length && line[i+4] === ':') {\n\t\t\t\t\t\t\t\tif (i+5 < line.length && (line[i+5] >= '1' && line[i+5] <= '9')) {\n\t\t\t\t\t\t\t\t\tret.num_notes = line[i+5] - '0';\n\t\t\t\t\t\t\t\t\ti += 4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\twarn(\"expected number after the triplet to mark the duration\", line, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (ret.startSlur === undefined)\n\t\t\t\t\tret.startSlur = 1;\n\t\t\t\telse\n\t\t\t\t\tret.startSlur++;\n\t\t\t}\n\t\t}\n\t\ti++;\n\t}\n\tret.consumed = i-start;\n\treturn ret;\n};\n\nMusicParser.prototype.startNewLine = function() {\n\tvar params = { startChar: -1, endChar: -1};\n\tif (multilineVars.partForNextLine.title)\n\t\tparams.part = multilineVars.partForNextLine;\n\tparams.clef = multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].clef !== undefined ? parseCommon.clone(multilineVars.staves[multilineVars.currentVoice.staffNum].clef) : parseCommon.clone(multilineVars.clef);\n\tvar scoreTranspose = multilineVars.currentVoice ? multilineVars.currentVoice.scoreTranspose : 0;\n\tparams.key = parseKeyVoice.standardKey(multilineVars.key.root+multilineVars.key.acc+multilineVars.key.mode, multilineVars.key.root, multilineVars.key.acc, scoreTranspose);\n\tparams.key.mode = multilineVars.key.mode;\n\tif (multilineVars.key.impliedNaturals)\n\t\tparams.key.impliedNaturals = multilineVars.key.impliedNaturals;\n\tif (multilineVars.key.explicitAccidentals) {\n\t\tfor (var i = 0; i < multilineVars.key.explicitAccidentals.length; i++) {\n\t\t\tvar found = false;\n\t\t\tfor (var j = 0; j < params.key.accidentals.length; j++) {\n\t\t\t\tif (params.key.accidentals[j].note === multilineVars.key.explicitAccidentals[i].note) {\n\t\t\t\t\t// If the note is already in the list, override it with the new value\n\t\t\t\t\tparams.key.accidentals[j].acc = multilineVars.key.explicitAccidentals[i].acc;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found)\n\t\t\t\tparams.key.accidentals.push(multilineVars.key.explicitAccidentals[i]);\n\t\t}\n\t}\n\tmultilineVars.targetKey = params.key;\n\tif (params.key.explicitAccidentals)\n\t\tdelete params.key.explicitAccidentals;\n\tparseKeyVoice.addPosToKey(params.clef, params.key);\n\tif (multilineVars.meter !== null) {\n\t\tif (multilineVars.currentVoice) {\n\t\t\tmultilineVars.staves.forEach(function(st) {\n\t\t\t\tst.meter = multilineVars.meter;\n\t\t\t});\n\t\t\tparams.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter;\n\t\t\tmultilineVars.staves[multilineVars.currentVoice.staffNum].meter = null;\n\t\t} else\n\t\t\tparams.meter = multilineVars.meter;\n\t\tmultilineVars.meter = null;\n\t} else if (multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].meter) {\n\t\t// Make sure that each voice gets the meter marking.\n\t\tparams.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter;\n\t\tmultilineVars.staves[multilineVars.currentVoice.staffNum].meter = null;\n\t}\n\tif (multilineVars.currentVoice && multilineVars.currentVoice.name)\n\t\tparams.name = multilineVars.currentVoice.name;\n\tif (multilineVars.vocalfont)\n\t\tparams.vocalfont = multilineVars.vocalfont;\n\tif (multilineVars.tripletfont)\n\t\tparams.tripletfont = multilineVars.tripletfont;\n\tif (multilineVars.gchordfont)\n\t\tparams.gchordfont = multilineVars.gchordfont;\n\tif (multilineVars.style)\n\t\tparams.style = multilineVars.style;\n\tif (multilineVars.currentVoice) {\n\t\tvar staff = multilineVars.staves[multilineVars.currentVoice.staffNum];\n\t\tif (staff.brace) params.brace = staff.brace;\n\t\tif (staff.bracket) params.bracket = staff.bracket;\n\t\tif (staff.connectBarLines) params.connectBarLines = staff.connectBarLines;\n\t\tif (staff.name) params.name = staff.name[multilineVars.currentVoice.index];\n\t\tif (staff.subname) params.subname = staff.subname[multilineVars.currentVoice.index];\n\t\tif (multilineVars.currentVoice.stem)\n\t\t\tparams.stem = multilineVars.currentVoice.stem;\n\t\tif (multilineVars.currentVoice.stafflines)\n\t\t\tparams.stafflines = multilineVars.currentVoice.stafflines;\n\t\tif (multilineVars.currentVoice.staffscale)\n\t\t\tparams.staffscale = multilineVars.currentVoice.staffscale;\n\t\tif (multilineVars.currentVoice.scale)\n\t\t\tparams.scale = multilineVars.currentVoice.scale;\n\t\tif (multilineVars.currentVoice.color)\n\t\t\tparams.color = multilineVars.currentVoice.color;\n\t\tif (multilineVars.currentVoice.style)\n\t\t\tparams.style = multilineVars.currentVoice.style;\n\t\tif (multilineVars.currentVoice.transpose)\n\t\t\tparams.clef.transpose = multilineVars.currentVoice.transpose;\n\t}\n\tvar isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum === 0 && multilineVars.currentVoice.index === 0);\n\tif (multilineVars.barNumbers === 0 && isFirstVoice && multilineVars.currBarNumber !== 1)\n\t\tparams.barNumber = multilineVars.currBarNumber;\n\ttuneBuilder.startNewLine(params);\n\tif (multilineVars.key.impliedNaturals)\n\t\tdelete multilineVars.key.impliedNaturals;\n\n\tmultilineVars.partForNextLine = {};\n\tif (multilineVars.tempoForNextLine.length === 4)\n\t\ttuneBuilder.appendElement(multilineVars.tempoForNextLine[0],multilineVars.tempoForNextLine[1],multilineVars.tempoForNextLine[2],multilineVars.tempoForNextLine[3]);\n\tmultilineVars.tempoForNextLine = [];\n}\n\n// TODO-PER: make this a method in el.\nvar addEndBeam = function(el) {\n\tif (el.duration !== undefined && el.duration < 0.25)\n\t\tel.end_beam = true;\n\treturn el;\n};\n\nvar pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11};\nvar rests = {x: 'invisible', X: 'invisible-multimeasure', y: 'spacer', z: 'rest', Z: 'multimeasure' };\nvar accMap = { 'dblflat': '__', 'flat': '_', 'natural': '=', 'sharp': '^', 'dblsharp': '^^', 'quarterflat': '_/', 'quartersharp': '^/'};\nvar getCoreNote = function(line, index, el, canHaveBrokenRhythm) {\n\t//var el = { startChar: index };\n\tvar isComplete = function(state) {\n\t\treturn (state === 'octave' || state === 'duration' || state === 'Zduration' || state === 'broken_rhythm' || state === 'end_slur');\n\t};\n\tvar dottedTie;\n\tif (line[index] === '.' && line[index+1] === '-') {\n\t\tdottedTie = true;\n\t\tindex++;\n\t}\n\tvar state = 'startSlur';\n\tvar durationSetByPreviousNote = false;\n\twhile (1) {\n\t\tswitch(line[index]) {\n\t\t\tcase '(':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\tif (el.startSlur === undefined) el.startSlur = 1; else el.startSlur++;\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ')':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tif (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++;\n\t\t\t\t} else return null;\n\t\t\t\tbreak;\n\t\t\tcase '^':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'sharp';state = 'sharp2';}\n\t\t\t\telse if (state === 'sharp2') {el.accidental = 'dblsharp';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '_':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'flat';state = 'flat2';}\n\t\t\t\telse if (state === 'flat2') {el.accidental = 'dblflat';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '=':\n\t\t\t\tif (state === 'startSlur') {el.accidental = 'natural';state = 'pitch';}\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\tcase 'B':\n\t\t\tcase 'C':\n\t\t\tcase 'D':\n\t\t\tcase 'E':\n\t\t\tcase 'F':\n\t\t\tcase 'G':\n\t\t\tcase 'a':\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'e':\n\t\t\tcase 'f':\n\t\t\tcase 'g':\n\t\t\t\tif (state === 'startSlur' || state === 'sharp2' || state === 'flat2' || state === 'pitch') {\n\t\t\t\t\tel.pitch = pitches[line[index]];\n\t\t\t\t\tel.pitch += 7 * (multilineVars.currentVoice && multilineVars.currentVoice.octave !== undefined ? multilineVars.currentVoice.octave : multilineVars.octave);\n\t\t\t\t\tel.name = line[index];\n\t\t\t\t\tif (el.accidental)\n\t\t\t\t\t\tel.name = accMap[el.accidental] + el.name;\n\t\t\t\t\ttranspose.note(multilineVars, el);\n\t\t\t\t\tstate = 'octave';\n\t\t\t\t\t// At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below\n\t\t\t\t\tif (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\tel.duration = multilineVars.default_length * multilineVars.next_note_duration;\n\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\tdurationSetByPreviousNote = true;\n\t\t\t\t\t} else\n\t\t\t\t\t\tel.duration = multilineVars.default_length;\n\t\t\t\t\t// If the clef is percussion, there is probably some translation of the pitch to a particular drum kit item.\n\t\t\t\t\tif ((multilineVars.clef && multilineVars.clef.type === \"perc\") ||\n\t\t\t\t\t\t(multilineVars.currentVoice && multilineVars.currentVoice.clef === \"perc\")) {\n\t\t\t\t\t\tvar key = line[index];\n\t\t\t\t\t\tif (el.accidental) {\n\t\t\t\t\t\t\tkey = accMap[el.accidental] + key;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tune.formatting && tune.formatting.midi && tune.formatting.midi.drummap)\n\t\t\t\t\t\tel.midipitch = tune.formatting.midi.drummap[key];\n\t\t\t\t\t}\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ',':\n\t\t\t\tif (state === 'octave') {el.pitch -= 7; el.name += ','; }\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '\\'':\n\t\t\t\tif (state === 'octave') {el.pitch += 7; el.name += \"'\"; }\n\t\t\t\telse if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase 'x':\n\t\t\tcase 'X':\n\t\t\tcase 'y':\n\t\t\tcase 'z':\n\t\t\tcase 'Z':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\tel.rest = { type: rests[line[index]] };\n\t\t\t\t\t// There shouldn't be some of the properties that notes have. If some sneak in due to bad syntax in the abc file,\n\t\t\t\t\t// just nix them here.\n\t\t\t\t\tdelete el.accidental;\n\t\t\t\t\tdelete el.startSlur;\n\t\t\t\t\tdelete el.startTie;\n\t\t\t\t\tdelete el.endSlur;\n\t\t\t\t\tdelete el.endTie;\n\t\t\t\t\tdelete el.end_beam;\n\t\t\t\t\tdelete el.grace_notes;\n\t\t\t\t\t// At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below\n\t\t\t\t\tif (el.rest.type.indexOf('multimeasure') >= 0) {\n\t\t\t\t\t\tel.duration = tune.getBarLength();\n\t\t\t\t\t\tel.rest.text = 1;\n\t\t\t\t\t\tstate = 'Zduration';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) {\n\t\t\t\t\t\t\tel.duration = multilineVars.default_length * multilineVars.next_note_duration;\n\t\t\t\t\t\t\tmultilineVars.next_note_duration = 0;\n\t\t\t\t\t\t\tdurationSetByPreviousNote = true;\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tel.duration = multilineVars.default_length;\n\t\t\t\t\t\tstate = 'duration';\n\t\t\t\t\t}\n\t\t\t\t} else if (isComplete(state)) {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '1':\n\t\t\tcase '2':\n\t\t\tcase '3':\n\t\t\tcase '4':\n\t\t\tcase '5':\n\t\t\tcase '6':\n\t\t\tcase '7':\n\t\t\tcase '8':\n\t\t\tcase '9':\n\t\t\tcase '0':\n\t\t\tcase '/':\n\t\t\t\tif (state === 'octave' || state === 'duration') {\n\t\t\t\t\tvar fraction = tokenizer.getFraction(line, index);\n\t\t\t\t\t//if (!durationSetByPreviousNote)\n\t\t\t\t\tel.duration = el.duration * fraction.value;\n\t\t\t\t\t// TODO-PER: We can test the returned duration here and give a warning if it isn't the one expected.\n\t\t\t\t\tel.endChar = fraction.index;\n\t\t\t\t\twhile (fraction.index < line.length && (tokenizer.isWhiteSpace(line[fraction.index]) || line[fraction.index] === '-')) {\n\t\t\t\t\t\tif (line[fraction.index] === '-')\n\t\t\t\t\t\t\tel.startTie = {};\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tel = addEndBeam(el);\n\t\t\t\t\t\tfraction.index++;\n\t\t\t\t\t}\n\t\t\t\t\tindex = fraction.index-1;\n\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t} else if (state === 'sharp2') {\n\t\t\t\t\tel.accidental = 'quartersharp';state = 'pitch';\n\t\t\t\t} else if (state === 'flat2') {\n\t\t\t\t\tel.accidental = 'quarterflat';state = 'pitch';\n\t\t\t\t} else if (state === 'Zduration') {\n\t\t\t\t\tvar num = tokenizer.getNumber(line, index);\n\t\t\t\t\tel.duration = num.num * tune.getBarLength();\n\t\t\t\t\tel.rest.text = num.num;\n\t\t\t\t\tel.endChar = num.index;\n\t\t\t\t\treturn el;\n\t\t\t\t} else return null;\n\t\t\t\tbreak;\n\t\t\tcase '-':\n\t\t\t\tif (state === 'startSlur') {\n\t\t\t\t\t// This is the first character, so it must have been meant for the previous note. Correct that here.\n\t\t\t\t\ttuneBuilder.addTieToLastNote(dottedTie);\n\t\t\t\t\tel.endTie = true;\n\t\t\t\t} else if (state === 'octave' || state === 'duration' || state === 'end_slur') {\n\t\t\t\t\tel.startTie = {};\n\t\t\t\t\tif (!durationSetByPreviousNote && canHaveBrokenRhythm)\n\t\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Peek ahead to the next character. If it is a space, then we have an end beam.\n\t\t\t\t\t\tif (tokenizer.isWhiteSpace(line[index + 1]))\n\t\t\t\t\t\t\taddEndBeam(el);\n\t\t\t\t\t\tel.endChar = index+1;\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t} else if (state === 'broken_rhythm') {el.endChar = index;return el;}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase ' ':\n\t\t\tcase '\\t':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tel.end_beam = true;\n\t\t\t\t\t// look ahead to see if there is a tie\n\t\t\t\t\tdottedTie = false;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (line[index] === '.' && line[index+1] === '-') {\n\t\t\t\t\t\t\tdottedTie = true;\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (line[index] === '-') {\n\t\t\t\t\t\t\tel.startTie = {};\n\t\t\t\t\t\t\tif (dottedTie)\n\t\t\t\t\t\t\t\tel.startTie.style = \"dotted\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t} while (index < line.length &&\n\t\t\t\t\t\t(tokenizer.isWhiteSpace(line[index]) || line[index] === '-') ||\n\t\t\t\t\t\t(line[index] === '.' && line[index+1] === '-'));\n\t\t\t\t\tel.endChar = index;\n\t\t\t\t\tif (!durationSetByPreviousNote && canHaveBrokenRhythm && (line[index] === '<' || line[index] === '>')) {\t// TODO-PER: Don't need the test for < and >, but that makes the endChar work out for the regression test.\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t\tstate = 'broken_rhythm';\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t\telse return null;\n\t\t\t\tbreak;\n\t\t\tcase '>':\n\t\t\tcase '<':\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tif (canHaveBrokenRhythm) {\n\t\t\t\t\t\tvar br2 = getBrokenRhythm(line, index);\n\t\t\t\t\t\tindex += br2[0] - 1;\t// index gets incremented below, so we'll let that happen\n\t\t\t\t\t\tmultilineVars.next_note_duration = br2[2];\n\t\t\t\t\t\tel.duration = br2[1]*el.duration;\n\t\t\t\t\t\tstate = 'end_slur';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.endChar = index;\n\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\t\treturn null;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (isComplete(state)) {\n\t\t\t\t\tel.endChar = index;\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t}\n\t\tindex++;\n\t\tif (index === line.length) {\n\t\t\tif (isComplete(state)) {el.endChar = index;return el;}\n\t\t\telse return null;\n\t\t}\n\t}\n\treturn null;\n};\n\nvar getBrokenRhythm = function(line, index) {\n\tswitch (line[index]) {\n\t\tcase '>':\n\t\t\tif (index < line.length - 2 && line[index + 1] === '>' && line[index + 2] === '>')\t// triple >>>\n\t\t\t\treturn [3, 1.875, 0.125];\n\t\t\telse if (index < line.length - 1 && line[index + 1] === '>')\t// double >>\n\t\t\t\treturn [2, 1.75, 0.25];\n\t\t\telse\n\t\t\t\treturn [1, 1.5, 0.5];\n\t\tcase '<':\n\t\t\tif (index < line.length - 2 && line[index + 1] === '<' && line[index + 2] === '<')\t// triple <<<\n\t\t\t\treturn [3, 0.125, 1.875];\n\t\t\telse if (index < line.length - 1 && line[index + 1] === '<')\t// double <<\n\t\t\t\treturn [2, 0.25, 1.75];\n\t\t\telse\n\t\t\t\treturn [1, 0.5, 1.5];\n\t}\n\treturn null;\n};\n\nmodule.exports = MusicParser;\n","// abc_tokenizer.js: tokenizes an ABC Music Notation string to support abc_parse.\n\nvar parseCommon = require('./abc_common');\n\n// this is a series of functions that get a particular element out of the passed stream.\n// the return is the number of characters consumed, so 0 means that the element wasn't found.\n// also returned is the element found. This may be a different length because spaces may be consumed that aren't part of the string.\n// The return structure for most calls is { len: num_chars_consumed, token: str }\nvar Tokenizer = function(lines, multilineVars) {\n\tthis.lineIndex = 0\n\tthis.lines = lines\n\tthis.multilineVars = multilineVars;\n\n\tthis.skipWhiteSpace = function(str) {\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t if (!this.isWhiteSpace(str[i]))\n\t\t\t\treturn i;\n\t\t}\n\t\treturn str.length;\t// It must have been all white space\n\t};\n\tvar finished = function(str, i) {\n\t\treturn i >= str.length;\n\t};\n\tthis.eatWhiteSpace = function(line, index) {\n\t\tfor (var i = index; i < line.length; i++) {\n\t\t if (!this.isWhiteSpace(line[i]))\n\t\t\t\treturn i-index;\n\t\t}\n\t\treturn i-index;\n\t};\n\n\t// This just gets the basic pitch letter, ignoring leading spaces, and normalizing it to a capital\n\tthis.getKeyPitch = function(str) {\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tswitch (str[i]) {\n\t\t\tcase 'A':return {len: i+1, token: 'A'};\n\t\t\tcase 'B':return {len: i+1, token: 'B'};\n\t\t\tcase 'C':return {len: i+1, token: 'C'};\n\t\t\tcase 'D':return {len: i+1, token: 'D'};\n\t\t\tcase 'E':return {len: i+1, token: 'E'};\n\t\t\tcase 'F':return {len: i+1, token: 'F'};\n\t\t\tcase 'G':return {len: i+1, token: 'G'};\n//\t\t\tcase 'a':return {len: i+1, token: 'A'};\n//\t\t\tcase 'b':return {len: i+1, token: 'B'};\n//\t\t\tcase 'c':return {len: i+1, token: 'C'};\n//\t\t\tcase 'd':return {len: i+1, token: 'D'};\n//\t\t\tcase 'e':return {len: i+1, token: 'E'};\n//\t\t\tcase 'f':return {len: i+1, token: 'F'};\n//\t\t\tcase 'g':return {len: i+1, token: 'G'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\t// This just gets the basic accidental, ignoring leading spaces, and only the ones that appear in a key\n\tthis.getSharpFlat = function(str) {\n\t\tif (str === 'bass')\n\t\t\treturn {len: 0};\n\t\tswitch (str[0]) {\n\t\t\tcase '#':return {len: 1, token: '#'};\n\t\t\tcase 'b':return {len: 1, token: 'b'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\tthis.getMode = function(str) {\n\t\tvar skipAlpha = function(str, start) {\n\t\t\t// This returns the index of the next non-alphabetic char, or the entire length of the string if not found.\n\t\t while (start < str.length && ((str[start] >= 'a' && str[start] <= 'z') || (str[start] >= 'A' && str[start] <= 'Z')))\n\t\t\t\tstart++;\n\t\t\treturn start;\n\t\t};\n\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tvar firstThree = str.substring(i,i+3).toLowerCase();\n\t\tif (firstThree.length > 1 && firstThree[1] === ' ' || firstThree[1] === '^' || firstThree[1] === '_' || firstThree[1] === '=') firstThree = firstThree[0];\t// This will handle the case of 'm'\n\t\tswitch (firstThree) {\n\t\t\tcase 'mix':return {len: skipAlpha(str, i), token: 'Mix'};\n\t\t\tcase 'dor':return {len: skipAlpha(str, i), token: 'Dor'};\n\t\t\tcase 'phr':return {len: skipAlpha(str, i), token: 'Phr'};\n\t\t\tcase 'lyd':return {len: skipAlpha(str, i), token: 'Lyd'};\n\t\t\tcase 'loc':return {len: skipAlpha(str, i), token: 'Loc'};\n\t\t\tcase 'aeo':return {len: skipAlpha(str, i), token: 'm'};\n\t\t\tcase 'maj':return {len: skipAlpha(str, i), token: ''};\n\t\t\tcase 'ion':return {len: skipAlpha(str, i), token: ''};\n\t\t\tcase 'min':return {len: skipAlpha(str, i), token: 'm'};\n\t\t\tcase 'm':return {len: skipAlpha(str, i), token: 'm'};\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\tthis.getClef = function(str, bExplicitOnly) {\n\t\tvar strOrig = str;\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\t// The word 'clef' is optional, but if it appears, a clef MUST appear\n\t\tvar needsClef = false;\n\t\tvar strClef = str.substring(i);\n\t\tif (parseCommon.startsWith(strClef, 'clef=')) {\n\t\t\tneedsClef = true;\n\t\t\tstrClef = strClef.substring(5);\n\t\t\ti += 5;\n\t\t}\n\t\tif (strClef.length === 0 && needsClef)\n\t\t\treturn {len: i+5, warn: \"No clef specified: \" + strOrig};\n\n\t\tvar j = this.skipWhiteSpace(strClef);\n\t\tif (finished(strClef, j))\n\t\t\treturn {len: 0};\n\t\tif (j > 0) {\n\t\t\ti += j;\n\t\t\tstrClef = strClef.substring(j);\n\t\t}\n\t\tvar name = null;\n\t\tif (parseCommon.startsWith(strClef, 'treble'))\n\t\t\tname = 'treble';\n\t\telse if (parseCommon.startsWith(strClef, 'bass3'))\n\t\t\tname = 'bass3';\n\t\telse if (parseCommon.startsWith(strClef, 'bass'))\n\t\t\tname = 'bass';\n\t\telse if (parseCommon.startsWith(strClef, 'tenor'))\n\t\t\tname = 'tenor';\n\t\telse if (parseCommon.startsWith(strClef, 'alto2'))\n\t\t\tname = 'alto2';\n\t\telse if (parseCommon.startsWith(strClef, 'alto1'))\n\t\t\tname = 'alto1';\n\t\telse if (parseCommon.startsWith(strClef, 'alto'))\n\t\t\tname = 'alto';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'none')))\n\t\t\tname = 'none';\n\t\telse if (parseCommon.startsWith(strClef, 'perc'))\n\t\t\tname = 'perc';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'C')))\n\t\t\tname = 'tenor';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'F')))\n\t\t\tname = 'bass';\n\t\telse if (!bExplicitOnly && (needsClef && parseCommon.startsWith(strClef, 'G')))\n\t\t\tname = 'treble';\n\t\telse\n\t\t\treturn {len: i+5, warn: \"Unknown clef specified: \" + strOrig};\n\n\t\tstrClef = strClef.substring(name.length);\n\t\tj = this.isMatch(strClef, '+8');\n\t\tif (j > 0)\n\t\t\tname += \"+8\";\n\t\telse {\n\t\t\tj = this.isMatch(strClef, '-8');\n\t\t\tif (j > 0)\n\t\t\t\tname += \"-8\";\n\t\t}\n\t\treturn {len: i+name.length, token: name, explicit: needsClef};\n\t};\n\n\t// This returns one of the legal bar lines\n\t// This is called alot and there is no obvious tokenable items, so this is broken apart.\n\tthis.getBarLine = function(line, i) {\n\t\tswitch (line[i]) {\n\t\t\tcase ']':\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase '|': return {len: 2, token: \"bar_thick_thin\"};\n\t\t\t\t\tcase '[':\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tif ((line[i] >= '1' && line[i] <= '9') || line[i] === '\"')\n\t\t\t\t\t\t\treturn {len: 2, token: \"bar_invisible\"};\n\t\t\t\t\t\treturn {len: 1, warn: \"Unknown bar symbol\"};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 1, token: \"bar_invisible\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ':':\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase ':': return {len: 2, token: \"bar_dbl_repeat\"};\n\t\t\t\t\tcase '|':\t// :|\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\tcase ']':\t// :|]\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\t\t\t\tcase '|':\t// :|]|\n\t\t\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\t\t\tif (line[i] === ':') return {len: 5, token: \"bar_dbl_repeat\"};\n\t\t\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase '|':\t// :||\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tif (line[i] === ':') return {len: 4, token: \"bar_dbl_repeat\"};\n\t\t\t\t\t\t\t\treturn {len: 3, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn {len: 2, token: \"bar_right_repeat\"};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 1, warn: \"Unknown bar symbol\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '[':\t// [\n\t\t\t\t++i;\n\t\t\t\tif (line[i] === '|') {\t// [|\n\t\t\t\t\t++i;\n\t\t\t\t\tswitch (line[i]) {\n\t\t\t\t\t\tcase ':': return {len: 3, token: \"bar_left_repeat\"};\n\t\t\t\t\t\tcase ']': return {len: 3, token: \"bar_invisible\"};\n\t\t\t\t\t\tdefault: return {len: 2, token: \"bar_thick_thin\"};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ((line[i] >= '1' && line[i] <= '9') || line[i] === '\"')\n\t\t\t\t\t\treturn {len: 1, token: \"bar_invisible\"};\n\t\t\t\t\treturn {len: 0};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '|':\t// |\n\t\t\t\t++i;\n\t\t\t\tswitch (line[i]) {\n\t\t\t\t\tcase ']': return {len: 2, token: \"bar_thin_thick\"};\n\t\t\t\t\tcase '|': // ||\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tif (line[i] === ':') return {len: 3, token: \"bar_left_repeat\"};\n\t\t\t\t\t\treturn {len: 2, token: \"bar_thin_thin\"};\n\t\t\t\t\tcase ':':\t// |:\n\t\t\t\t\t\tvar colons = 0;\n\t\t\t\t\t\twhile (line[i+colons] === ':') colons++;\n\t\t\t\t\t\treturn { len: 1+colons, token: \"bar_left_repeat\"};\n\t\t\t\t\tdefault: return {len: 1, token: \"bar_thin\"};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\treturn {len: 0};\n\t};\n\n\t// this returns all the characters in the string that match one of the characters in the legalChars string\n\tthis.getTokenOf = function(str, legalChars) {\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t\tif (legalChars.indexOf(str[i]) < 0)\n\t\t\t\treturn {len: i, token: str.substring(0, i)};\n\t\t}\n\t\treturn {len: i, token: str};\n\t};\n\n\tthis.getToken = function(str, start, end) {\n\t\t// This returns the next set of chars that doesn't contain spaces\n\t\tvar i = start;\n\t\twhile (i < end && !this.isWhiteSpace(str[i]))\n\t\t\ti++;\n\t\treturn str.substring(start, i);\n\t};\n\n\t// This just sees if the next token is the word passed in, with possible leading spaces\n\tthis.isMatch = function(str, match) {\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn 0;\n\t\tif (parseCommon.startsWith(str.substring(i), match))\n\t\t\treturn i+match.length;\n\t\treturn 0;\n\t};\n\n\tthis.getPitchFromTokens = function(tokens) {\n\t\tvar ret = { };\n\t\tvar pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11};\n\t\tret.position = pitches[tokens[0].token];\n\t\tif (ret.position === undefined)\n\t\t\treturn { warn: \"Pitch expected. Found: \" + tokens[0].token };\n\t\ttokens.shift();\n\t\twhile (tokens.length) {\n\t\t\tswitch (tokens[0].token) {\n\t\t\t\tcase ',': ret.position -= 7; tokens.shift(); break;\n\t\t\t\tcase '\\'': ret.position += 7; tokens.shift(); break;\n\t\t\t\tdefault: return ret;\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\tthis.getKeyAccidentals2 = function(tokens) {\n\t\tvar accs;\n\t\t// find and strip off all accidentals in the token list\n\t\twhile (tokens.length > 0) {\n\t\t\tvar acc;\n\t\t\tif (tokens[0].token === '^') {\n\t\t\t\tacc = 'sharp';\n\t\t\t\ttokens.shift();\n\t\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\tcase '^': acc = 'dblsharp'; tokens.shift(); break;\n\t\t\t\t\tcase '/': acc = 'quartersharp'; tokens.shift(); break;\n\t\t\t\t}\n\t\t\t} else if (tokens[0].token === '=') {\n\t\t\t\tacc = 'natural';\n\t\t\t\ttokens.shift();\n\t\t\t} else if (tokens[0].token === '_') {\n\t\t\t\tacc = 'flat';\n\t\t\t\ttokens.shift();\n\t\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\t\tswitch (tokens[0].token) {\n\t\t\t\t\tcase '_': acc = 'dblflat'; tokens.shift(); break;\n\t\t\t\t\tcase '/': acc = 'quarterflat'; tokens.shift(); break;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Not an accidental, we'll assume that a later parse will recognize it.\n\t\t\t\treturn { accs: accs };\n\t\t\t}\n\t\t\tif (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc};\n\t\t\tswitch (tokens[0].token[0])\n\t\t\t{\n\t\t\t\tcase 'a':\n\t\t\t\tcase 'b':\n\t\t\t\tcase 'c':\n\t\t\t\tcase 'd':\n\t\t\t\tcase 'e':\n\t\t\t\tcase 'f':\n\t\t\t\tcase 'g':\n\t\t\t\tcase 'A':\n\t\t\t\tcase 'B':\n\t\t\t\tcase 'C':\n\t\t\t\tcase 'D':\n\t\t\t\tcase 'E':\n\t\t\t\tcase 'F':\n\t\t\t\tcase 'G':\n\t\t\t\t\tif (accs === undefined)\n\t\t\t\t\t\taccs = [];\n\t\t\t\t\taccs.push({ acc: acc, note: tokens[0].token[0] });\n\t\t\t\t\tif (tokens[0].token.length === 1)\n\t\t\t\t\t\ttokens.shift();\n\t\t\t\t\telse\n\t\t\t\t\t\ttokens[0].token = tokens[0].token.substring(1);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {accs: accs, warn: 'Expected note name after ' + acc + ' Found: ' + tokens[0].token };\n\t\t\t}\n\t\t}\n\t\treturn { accs: accs };\n\t};\n\n\t// This gets an accidental marking for the key signature. It has the accidental then the pitch letter.\n\tthis.getKeyAccidental = function(str) {\n\t\tvar accTranslation = {\n\t\t\t'^': 'sharp',\n\t\t\t'^^': 'dblsharp',\n\t\t\t'=': 'natural',\n\t\t\t'_': 'flat',\n\t\t\t'__': 'dblflat',\n\t\t\t'_/': 'quarterflat',\n\t\t\t'^/': 'quartersharp'\n\t\t};\n\t\tvar i = this.skipWhiteSpace(str);\n\t\tif (finished(str, i))\n\t\t\treturn {len: 0};\n\t\tvar acc = null;\n\t\tswitch (str[i])\n\t\t{\n\t\t\tcase '^':\n\t\t\tcase '_':\n\t\t\tcase '=':\n\t\t\t\tacc = str[i];\n\t\t\t\tbreak;\n\t\t\tdefault:return {len: 0};\n\t\t}\n\t\ti++;\n\t\tif (finished(str, i))\n\t\t\treturn {len: 1, warn: 'Expected note name after accidental'};\n\t\tswitch (str[i])\n\t\t{\n\t\t\tcase 'a':\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'e':\n\t\t\tcase 'f':\n\t\t\tcase 'g':\n\t\t\tcase 'A':\n\t\t\tcase 'B':\n\t\t\tcase 'C':\n\t\t\tcase 'D':\n\t\t\tcase 'E':\n\t\t\tcase 'F':\n\t\t\tcase 'G':\n\t\t\t\treturn {len: i+1, token: {acc: accTranslation[acc], note: str[i]}};\n\t\t\tcase '^':\n\t\t\tcase '_':\n\t\t\tcase '/':\n\t\t\t\tacc += str[i];\n\t\t\t\ti++;\n\t\t\t\tif (finished(str, i))\n\t\t\t\t\treturn {len: 2, warn: 'Expected note name after accidental'};\n\t\t\t\tswitch (str[i])\n\t\t\t\t{\n\t\t\t\t\tcase 'a':\n\t\t\t\t\tcase 'b':\n\t\t\t\t\tcase 'c':\n\t\t\t\t\tcase 'd':\n\t\t\t\t\tcase 'e':\n\t\t\t\t\tcase 'f':\n\t\t\t\t\tcase 'g':\n\t\t\t\t\tcase 'A':\n\t\t\t\t\tcase 'B':\n\t\t\t\t\tcase 'C':\n\t\t\t\t\tcase 'D':\n\t\t\t\t\tcase 'E':\n\t\t\t\t\tcase 'F':\n\t\t\t\t\tcase 'G':\n\t\t\t\t\t\treturn {len: i+1, token: {acc: accTranslation[acc], note: str[i]}};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn {len: 2, warn: 'Expected note name after accidental'};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn {len: 1, warn: 'Expected note name after accidental'};\n\t\t}\n\t};\n\n\tthis.isWhiteSpace = function(ch) {\n\t\treturn ch === ' ' || ch === '\\t' || ch === '\\x12';\n\t};\n\n\tthis.getMeat = function(line, start, end) {\n\t\t// This removes any comments starting with '%' and trims the ends of the string so that there are no leading or trailing spaces.\n\t\t// it returns just the start and end characters that contain the meat.\n\t\tvar comment = line.indexOf('%', start);\n\t\tif (comment >= 0 && comment < end)\n\t\t\tend = comment;\n\t\twhile (start < end && (line[start] === ' ' || line[start] === '\\t' || line[start] === '\\x12'))\n\t\t\tstart++;\n\t\twhile (start < end && (line[end-1] === ' ' || line[end-1] === '\\t' || line[end-1] === '\\x12'))\n\t\t\tend--;\n\t\treturn {start: start, end: end};\n\t};\n\n\tvar isLetter = function(ch) {\n\t\treturn (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');\n\t};\n\n\tvar isNumber = function(ch) {\n\t\treturn (ch >= '0' && ch <= '9');\n\t};\n\n\tthis.tokenize = function(line, start, end, alphaUntilWhiteSpace) {\n\t\t// this returns all the tokens inside the passed string. A token is a punctuation mark, a string of digits, a string of letters.\n\t\t// Quoted strings are one token.\n\t\t// If there is a minus sign next to a number, then it is included in the number.\n\t\t// If there is a period immediately after a number, with a number immediately following, then a float is returned.\n\t\t// The type of token is returned: quote, alpha, number, punct\n\t\t// If alphaUntilWhiteSpace is true, then the behavior of the alpha token changes.\n\n\t\tvar ret = this.getMeat(line, start, end);\n\t\tstart = ret.start;\n\t\tend = ret.end;\n\t\tvar tokens = [];\n\t\tvar i;\n\t\twhile (start < end) {\n\t\t\tif (line[start] === '\"') {\n\t\t\t\ti = start+1;\n\t\t\t\twhile (i < end && line[i] !== '\"') i++;\n\t\t\t\ttokens.push({ type: 'quote', token: line.substring(start+1, i), start: start+1, end: i});\n\t\t\t\ti++;\n\t\t\t} else if (isLetter(line[start])) {\n\t\t\t\ti = start+1;\n\t\t\t\tif (alphaUntilWhiteSpace)\n\t\t\t\t\twhile (i < end && !this.isWhiteSpace(line[i])) i++;\n\t\t\t\telse\n\t\t\t\t\twhile (i < end && isLetter(line[i])) i++;\n\t\t\t\ttokens.push({ type: 'alpha', token: line.substring(start, i), continueId: isNumber(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (line[start] === '.' && isNumber(line[i+1])) {\n\t\t\t\ti = start+1;\n\t\t\t\tvar int2 = null;\n\t\t\t\tvar float2 = null;\n\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\n\t\t\t\tfloat2 = parseFloat(line.substring(start, i));\n\t\t\t\ttokens.push({ type: 'number', token: line.substring(start, i), intt: int2, floatt: float2, continueId: isLetter(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (isNumber(line[start]) || (line[start] === '-' && isNumber(line[i+1]))) {\n\t\t\t\ti = start+1;\n\t\t\t\tvar intt = null;\n\t\t\t\tvar floatt = null;\n\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\t\t\t\tif (line[i] === '.' && isNumber(line[i+1])) {\n\t\t\t\t\ti++;\n\t\t\t\t\twhile (i < end && isNumber(line[i])) i++;\n\t\t\t\t} else\n\t\t\t\t\tintt = parseInt(line.substring(start, i));\n\n\t\t\t\tfloatt = parseFloat(line.substring(start, i));\n\t\t\t\ttokens.push({ type: 'number', token: line.substring(start, i), intt: intt, floatt: floatt, continueId: isLetter(line[i]), start: start, end: i});\n\t\t\t\tstart = i + 1;\n\t\t\t} else if (line[start] === ' ' || line[start] === '\\t') {\n\t\t\t\ti = start+1;\n\t\t\t} else {\n\t\t\t\ttokens.push({ type: 'punct', token: line[start], start: start, end: start+1});\n\t\t\t\ti = start+1;\n\t\t\t}\n\t\t\tstart = i;\n\t\t}\n\t\treturn tokens;\n\t};\n\n\tthis.getVoiceToken = function(line, start, end) {\n\t\t// This finds the next token. A token is delimited by a space or an equal sign. If it starts with a quote, then the portion between the quotes is returned.\n\t\tvar i = start;\n\t\twhile (i < end && this.isWhiteSpace(line[i]) || line[i] === '=')\n\t\t\ti++;\n\n\t\tif (line[i] === '\"') {\n\t\t\tvar close = line.indexOf('\"', i+1);\n\t\t\tif (close === -1 || close >= end)\n\t\t\t\treturn {len: 1, err: \"Missing close quote\"};\n\t\t\treturn {len: close-start+1, token: this.translateString(line.substring(i+1, close))};\n\t\t} else {\n\t\t\tvar ii = i;\n\t\t\twhile (ii < end && !this.isWhiteSpace(line[ii]) && line[ii] !== '=')\n\t\t\t\tii++;\n\t\t\treturn {len: ii-start+1, token: line.substring(i, ii)};\n\t\t}\n\t};\n\n\tvar charMap = {\n\t\t\"`a\": 'à', \"'a\": \"á\", \"^a\": \"â\", \"~a\": \"ã\", \"\\\"a\": \"ä\", \"oa\": \"å\", \"aa\": \"å\", \"=a\": \"ā\", \"ua\": \"ă\", \";a\": \"ą\",\n\t\t\"`e\": 'è', \"'e\": \"é\", \"^e\": \"ê\", \"\\\"e\": \"ë\", \"=e\": \"ē\", \"ue\": \"ĕ\", \";e\": \"ę\", \".e\": \"ė\",\n\t\t\"`i\": 'ì', \"'i\": \"í\", \"^i\": \"î\", \"\\\"i\": \"ï\", \"=i\": \"ī\", \"ui\": \"ĭ\", \";i\": \"į\",\n\t\t\"`o\": 'ò', \"'o\": \"ó\", \"^o\": \"ô\", \"~o\": \"õ\", \"\\\"o\": \"ö\", \"=o\": \"ō\", \"uo\": \"ŏ\", \"/o\": \"ø\",\n\t\t\"`u\": 'ù', \"'u\": \"ú\", \"^u\": \"û\", \"~u\": \"ũ\", \"\\\"u\": \"ü\", \"ou\": \"ů\", \"=u\": \"ū\", \"uu\": \"ŭ\", \";u\": \"ų\",\n\t\t\"`A\": 'À', \"'A\": \"Á\", \"^A\": \"Â\", \"~A\": \"Ã\", \"\\\"A\": \"Ä\", \"oA\": \"Å\", \"AA\": \"Å\", \"=A\": \"Ā\", \"uA\": \"Ă\", \";A\": \"Ą\",\n\t\t\"`E\": 'È', \"'E\": \"É\", \"^E\": \"Ê\", \"\\\"E\": \"Ë\", \"=E\": \"Ē\", \"uE\": \"Ĕ\", \";E\": \"Ę\", \".E\": \"Ė\",\n\t\t\"`I\": 'Ì', \"'I\": \"Í\", \"^I\": \"Î\", \"~I\": \"Ĩ\", \"\\\"I\": \"Ï\", \"=I\": \"Ī\", \"uI\": \"Ĭ\", \";I\": \"Į\", \".I\": \"İ\",\n\t\t\"`O\": 'Ò', \"'O\": \"Ó\", \"^O\": \"Ô\", \"~O\": \"Õ\", \"\\\"O\": \"Ö\", \"=O\": \"Ō\", \"uO\": \"Ŏ\", \"/O\": \"Ø\",\n\t\t\"`U\": 'Ù', \"'U\": \"Ú\", \"^U\": \"Û\", \"~U\": \"Ũ\", \"\\\"U\": \"Ü\", \"oU\": \"Ů\", \"=U\": \"Ū\", \"uU\": \"Ŭ\", \";U\": \"Ų\",\n\t\t\"ae\": \"æ\", \"AE\": \"Æ\", \"oe\": \"œ\", \"OE\": \"Œ\", \"ss\": \"ß\",\n\t\t\"'c\": \"ć\", \"^c\": \"ĉ\", \"uc\": \"č\", \"cc\": \"ç\", \".c\": \"ċ\", \"cC\": \"Ç\", \"'C\": \"Ć\", \"^C\": \"Ĉ\", \"uC\": \"Č\", \".C\": \"Ċ\",\n\t\t\"~N\": \"Ñ\", \"~n\": \"ñ\",\n\t\t\"=s\": \"š\", \"vs\": \"š\",\n\t\t\"DH\": \"Ð\", \"dh\": \"ð\",\n\t\t\"HO\": \"Ő\", \"Ho\": \"ő\", \"HU\": \"Ű\", \"Hu\": \"ű\",\n\t\t\"'Y\": \"Ý\", \"'y\": \"ý\", \"^Y\": \"Ŷ\", \"^y\": \"ŷ\", \"\\\"Y\": \"Ÿ\", \"\\\"y\": \"ÿ\",\n\t\t\"vS\": \"Š\", \"vZ\": \"Ž\", \"vz\": 'ž'\n\n// More chars: IJ ij Ď ď Đ đ Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š Ţ ţ Ť ť Ŧ ŧ Ŵ ŵ Ź ź Ż ż Ž\n\t};\n\tvar charMap1 = {\n\t\t\"#\": \"♯\",\n\t\t\"b\": \"♭\",\n\t\t\"=\": \"♮\"\n\t};\n\tvar charMap2 = {\n\t\t\"201\": \"♯\",\n\t\t\"202\": \"♭\",\n\t\t\"203\": \"♮\",\n\t\t\"241\": \"¡\",\n\t\t\"242\": \"¢\", \"252\": \"a\", \"262\": \"2\", \"272\": \"o\", \"302\": \"Â\", \"312\": \"Ê\", \"322\": \"Ò\", \"332\": \"Ú\", \"342\": \"â\", \"352\": \"ê\", \"362\": \"ò\", \"372\": \"ú\",\n\t\t\"243\": \"£\", \"253\": \"«\", \"263\": \"3\", \"273\": \"»\", \"303\": \"Ã\", \"313\": \"Ë\", \"323\": \"Ó\", \"333\": \"Û\", \"343\": \"ã\", \"353\": \"ë\", \"363\": \"ó\", \"373\": \"û\",\n\t\t\"244\": \"¤\", \"254\": \"¬\", \"264\": \" ́\", \"274\": \"1⁄4\", \"304\": \"Ä\", \"314\": \"Ì\", \"324\": \"Ô\", \"334\": \"Ü\", \"344\": \"ä\", \"354\": \"ì\", \"364\": \"ô\", \"374\": \"ü\",\n\t\t\"245\": \"¥\", \"255\": \"-\", \"265\": \"μ\", \"275\": \"1⁄2\", \"305\": \"Å\", \"315\": \"Í\", \"325\": \"Õ\", \"335\": \"Ý\", \"345\": \"å\", \"355\": \"í\", \"365\": \"õ\", \"375\": \"ý\",\n\t\t\"246\": \"¦\", \"256\": \"®\", \"266\": \"¶\", \"276\": \"3⁄4\", \"306\": \"Æ\", \"316\": \"Î\", \"326\": \"Ö\", \"336\": \"Þ\", \"346\": \"æ\", \"356\": \"î\", \"366\": \"ö\", \"376\": \"þ\",\n\t\t\"247\": \"§\", \"257\": \" ̄\", \"267\": \"·\", \"277\": \"¿\", \"307\": \"Ç\", \"317\": \"Ï\", \"327\": \"×\", \"337\": \"ß\", \"347\": \"ç\", \"357\": \"ï\", \"367\": \"÷\", \"377\": \"ÿ\",\n\t\t\"250\": \" ̈\", \"260\": \"°\", \"270\": \" ̧\", \"300\": \"À\", \"310\": \"È\", \"320\": \"Ð\", \"330\": \"Ø\", \"340\": \"à\", \"350\": \"è\", \"360\": \"ð\", \"370\": \"ø\",\n\t\t\"251\": \"©\", \"261\": \"±\", \"271\": \"1\", \"301\": \"Á\", \"311\": \"É\", \"321\": \"Ñ\", \"331\": \"Ù\", \"341\": \"á\", \"351\": \"é\", \"361\": \"ñ\", \"371\": \"ù\" };\n\tthis.translateString = function(str) {\n\t\tvar arr = str.split('\\\\');\n\t\tif (arr.length === 1) return str;\n\t\tvar out = null;\n\t\tarr.forEach(function(s) {\n\t\t\tif (out === null)\n\t\t\t\tout = s;\n\t\t\telse {\n\t\t\t\tvar c = charMap[s.substring(0, 2)];\n\t\t\t\tif (c !== undefined)\n\t\t\t\t\tout += c + s.substring(2);\n\t\t\t\telse {\n\t\t\t\t\tc = charMap2[s.substring(0, 3)];\n\t\t\t\t\tif (c !== undefined)\n\t\t\t\t\t\tout += c + s.substring(3);\n\t\t\t\t\telse {\n\t\t\t\t\t\tc = charMap1[s.substring(0, 1)];\n\t\t\t\t\t\tif (c !== undefined)\n\t\t\t\t\t\t\tout += c + s.substring(1);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tout += \"\\\\\" + s;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn out;\n\t};\n\tthis.getNumber = function(line, index) {\n\t\tvar num = 0;\n\t\twhile (index < line.length) {\n\t\t\tswitch (line[index]) {\n\t\t\t\tcase '0':num = num*10;index++;break;\n\t\t\t\tcase '1':num = num*10+1;index++;break;\n\t\t\t\tcase '2':num = num*10+2;index++;break;\n\t\t\t\tcase '3':num = num*10+3;index++;break;\n\t\t\t\tcase '4':num = num*10+4;index++;break;\n\t\t\t\tcase '5':num = num*10+5;index++;break;\n\t\t\t\tcase '6':num = num*10+6;index++;break;\n\t\t\t\tcase '7':num = num*10+7;index++;break;\n\t\t\t\tcase '8':num = num*10+8;index++;break;\n\t\t\t\tcase '9':num = num*10+9;index++;break;\n\t\t\t\tdefault:\n\t\t\t\t\treturn {num: num, index: index};\n\t\t\t}\n\t\t}\n\t\treturn {num: num, index: index};\n\t};\n\n\tthis.getFraction = function(line, index) {\n\t\tvar num = 1;\n\t\tvar den = 1;\n\t\tif (line[index] !== '/') {\n\t\t\tvar ret = this.getNumber(line, index);\n\t\t\tnum = ret.num;\n\t\t\tindex = ret.index;\n\t\t}\n\t\tif (line[index] === '/') {\n\t\t\tindex++;\n\t\t\tif (line[index] === '/') {\n\t\t\t\tvar div = 0.5;\n\t\t\t\twhile (line[index++] === '/')\n\t\t\t\t\tdiv = div /2;\n\t\t\t\treturn {value: num * div, index: index-1};\n\t\t\t} else {\n\t\t\t\tvar iSave = index;\n\t\t\t\tvar ret2 = this.getNumber(line, index);\n\t\t\t\tif (ret2.num === 0 && iSave === index)\t// If we didn't use any characters, it is an implied 2\n\t\t\t\t\tret2.num = 2;\n\t\t\t\tif (ret2.num !== 0)\n\t\t\t\t\tden = ret2.num;\n\t\t\t\tindex = ret2.index;\n\t\t\t}\n\t\t}\n\n\t\treturn {value: num/den, index: index};\n\t};\n\n\tthis.theReverser = function(str) {\n\t\tif (parseCommon.endsWith(str, \", The\"))\n\t\t\treturn \"The \" + str.substring(0, str.length-5);\n\t\tif (parseCommon.endsWith(str, \", A\"))\n\t\t\treturn \"A \" + str.substring(0, str.length-3);\n\t\treturn str;\n\t};\n\n\tthis.stripComment = function(str) {\n\t\tvar i = str.indexOf('%');\n\t\tif (i >= 0)\n\t\t\treturn parseCommon.strip(str.substring(0, i));\n\t\treturn parseCommon.strip(str);\n\t};\n\n\tthis.getInt = function(str) {\n\t\t// This parses the beginning of the string for a number and returns { value: num, digits: num }\n\t\t// If digits is 0, then the string didn't point to a number.\n\t\tvar x = parseInt(str);\n\t\tif (isNaN(x))\n\t\t\treturn {digits: 0};\n\t\tvar s = \"\" + x;\n\t\tvar i = str.indexOf(s);\t// This is to account for leading spaces\n\t\treturn {value: x, digits: i+s.length};\n\t};\n\n\tthis.getFloat = function(str) {\n\t\t// This parses the beginning of the string for a number and returns { value: num, digits: num }\n\t\t// If digits is 0, then the string didn't point to a number.\n\t\tvar x = parseFloat(str);\n\t\tif (isNaN(x))\n\t\t\treturn {digits: 0};\n\t\tvar s = \"\" + x;\n\t\tvar i = str.indexOf(s);\t// This is to account for leading spaces\n\t\treturn {value: x, digits: i+s.length};\n\t};\n\n\tthis.getMeasurement = function(tokens) {\n\t\tif (tokens.length === 0) return { used: 0 };\n\t\tvar used = 1;\n\t\tvar num = '';\n\t\tif (tokens[0].token === '-') {\n\t\t\ttokens.shift();\n\t\t\tnum = '-';\n\t\t\tused++;\n\t\t}\n\t\telse if (tokens[0].type !== 'number') return { used: 0 };\n\t\tnum += tokens.shift().token;\n\t\tif (tokens.length === 0) return { used: 1, value: parseInt(num) };\n\t\tvar x = tokens.shift();\n\t\tif (x.token === '.') {\n\t\t\tused++;\n\t\t\tif (tokens.length === 0) return { used: used, value: parseInt(num) };\n\t\t\tif (tokens[0].type === 'number') {\n\t\t\t\tx = tokens.shift();\n\t\t\t\tnum = num + '.' + x.token;\n\t\t\t\tused++;\n\t\t\t\tif (tokens.length === 0) return { used: used, value: parseFloat(num) };\n\t\t\t}\n\t\t\tx = tokens.shift();\n\t\t}\n\t\tswitch (x.token) {\n\t\t\tcase 'pt': return { used: used+1, value: parseFloat(num) };\n\t\t\tcase 'px': return { used: used+1, value: parseFloat(num) };\n\t\t\tcase 'cm': return { used: used+1, value: parseFloat(num)/2.54*72 };\n\t\t\tcase 'in': return { used: used+1, value: parseFloat(num)*72 };\n\t\t\tdefault: tokens.unshift(x); return { used: used, value: parseFloat(num) };\n\t\t}\n\t};\n\tvar substInChord = function(str) {\n\t\tstr = str.replace(/\\\\n/g, \"\\n\");\n\t\tstr = str.replace(/\\\\\"/g, '\"');\n\t\treturn str;\n\t};\n\tthis.getBrackettedSubstring = function(line, i, maxErrorChars, _matchChar)\n\t{\n\t\t// This extracts the sub string by looking at the first character and searching for that\n\t\t// character later in the line (or search for the optional _matchChar).\n\t\t// For instance, if the first character is a quote it will look for\n\t\t// the end quote. If the end of the line is reached, then only up to the default number\n\t\t// of characters are returned, so that a missing end quote won't eat up the entire line.\n\t\t// It returns the substring and the number of characters consumed.\n\t\t// The number of characters consumed is normally two more than the size of the substring,\n\t\t// but in the error case it might not be.\n\t\tvar matchChar = _matchChar || line[i];\n\t\tvar pos = i+1;\n\t\tvar esc = false;\n\t\twhile ((pos < line.length) && (esc || line[pos] !== matchChar)) {\n\t\t\tesc = line[pos] === '\\\\';\n\t\t\t++pos;\n\t\t}\n\t\tif (line[pos] === matchChar)\n\t\t\treturn [pos-i+1,substInChord(line.substring(i+1, pos)), true];\n\t\telse\t// we hit the end of line, so we'll just pick an arbitrary num of chars so the line doesn't disappear.\n\t\t{\n\t\t\tpos = i+maxErrorChars;\n\t\t\tif (pos > line.length-1)\n\t\t\t\tpos = line.length-1;\n\t\t\treturn [pos-i+1, substInChord(line.substring(i+1, pos)), false];\n\t\t}\n\t};\n};\n\nTokenizer.prototype.peekLine = function() {\n\treturn this.lines[this.lineIndex]\n}\n\nTokenizer.prototype.nextLine = function() {\n\tif (this.lineIndex > 0) {\n\t\tthis.multilineVars.iChar += this.lines[this.lineIndex-1].length + 1;\n\t}\n\tif (this.lineIndex < this.lines.length) {\n\t\tvar result = this.lines[this.lineIndex]\n\t\tthis.lineIndex++\n\t\treturn result\n\t}\n\treturn null\n}\n\nmodule.exports = Tokenizer;\n","// abc_transpose.js: Handles the automatic transposition of key signatures, chord symbols, and notes.\n\nvar allNotes = require(\"./all-notes\");\nvar transposeChordName = require(\"../parse/transpose-chord\")\nvar keyAccidentals = require('../const/key-accidentals');\nvar transpose = {};\n\nvar keyIndex = {\n\t'C': 0,\n\t'C#': 1,\n\t'Db': 1,\n\t'D': 2,\n\t'D#': 3,\n\t'Eb': 3,\n\t'E': 4,\n\t'F': 5,\n\t'F#': 6,\n\t'Gb': 6,\n\t'G': 7,\n\t'G#': 8,\n\t'Ab': 8,\n\t'A': 9,\n\t'A#': 10,\n\t'Bb': 10,\n\t'B': 11\n};\nvar newKey = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'F#', 'G', 'Ab', 'A', 'Bb', 'B'];\nvar newKeyMinor = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'Bb', 'B'];\n\ntranspose.keySignature = function(multilineVars, keyName, root, acc, localTranspose) {\n\tif (multilineVars.clef.type === \"perc\" || multilineVars.clef.type === \"none\")\n\t\treturn { accidentals: keyAccidentals(keyName), root: root, acc: acc };\n\tif (!localTranspose) localTranspose = 0;\n\tmultilineVars.localTransposeVerticalMovement = 0;\n\tmultilineVars.localTransposePreferFlats = false;\n\tvar k = keyAccidentals(keyName);\n\tif (!k) return multilineVars.key; // If the key isn't in the list, it is non-standard. We won't attempt to transpose it.\n\tmultilineVars.localTranspose = (multilineVars.globalTranspose ? multilineVars.globalTranspose : 0) + localTranspose;\n\n\tif (!multilineVars.localTranspose)\n\t\treturn { accidentals: k, root: root, acc: acc };\n\tmultilineVars.globalTransposeOrigKeySig = k;\n\tif (multilineVars.localTranspose % 12 === 0) {\n\t\tmultilineVars.localTransposeVerticalMovement = (multilineVars.localTranspose / 12) * 7;\n\t\treturn { accidentals: k, root: root, acc: acc };\n\t}\n\n\tvar baseKey = keyName[0];\n\tif (keyName[1] === 'b' || keyName[1] === '#') {\n\t\tbaseKey += keyName[1];\n\t\tkeyName = keyName.substr(2);\n\t} else\n\t\tkeyName = keyName.substr(1);\n\tvar thisKeyIndex = keyIndex[baseKey]\n\tvar recognized = thisKeyIndex !== undefined\n\tif (!recognized) {\n\t\t// Either the key sig is \"none\" or we don't recognize it. Either way we don't change it, and we assume key of C for the purposes of this calculation.\n\t\tthisKeyIndex = 0\n\t\tbaseKey = \"C\"\n\t\tkeyName = \"\"\n\t}\n\tvar index = thisKeyIndex + multilineVars.localTranspose;\n\twhile (index < 0) index += 12;\n\tif (index > 11) index = index % 12;\n\tvar newKeyName = (keyName[0] === 'm' ? newKeyMinor[index] : newKey[index]);\n\tvar transposedKey = newKeyName + keyName;\n\tvar newKeySig = keyAccidentals(transposedKey);\n\tif (newKeySig.length > 0 && newKeySig[0].acc === 'flat')\n\t\tmultilineVars.localTransposePreferFlats = true;\n\tvar distance = transposedKey.charCodeAt(0) - baseKey.charCodeAt(0);\n\tif (multilineVars.localTranspose > 0) {\n\t\tif (distance < 0)\n\t\t\tdistance += 7;\n\t\telse if (distance === 0) {\n\t\t\t// There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A.\n\t\t\t// If the distance is positive (we are raising pitch), and the change is higher (that is, Ab -> A), then raise an octave.\n\t\t\t// This test is easier because we know the keys are not equal (or we wouldn't get this far), so if the base key is a flat key, then\n\t\t\t// the transposed key must be higher. Likewise, if the transposed key is sharp, then the base key must be lower. And one\n\t\t\t// of those two things must be true because they are not both natural.\n\t\t\tif (baseKey[1] === '#' || transposedKey[1] === 'b')\n\t\t\t\tdistance += 7;\n\t\t}\n\t} else if (multilineVars.localTranspose < 0) {\n\t\tif (distance > 0)\n\t\t\tdistance -= 7;\n\t\telse if (distance === 0) {\n\t\t\t// There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A.\n\t\t\t// If the distance is negative (we are dropping pitch), and the change is lower (that is, A -> Ab), then drop an octave.\n\t\t\tif (baseKey[1] === 'b' || transposedKey[1] === '#')\n\t\t\t\tdistance -= 7;\n\t\t}\n\t}\n\n\tif (multilineVars.localTranspose > 0)\n\t\tmultilineVars.localTransposeVerticalMovement = distance + Math.floor(multilineVars.localTranspose / 12) * 7;\n\telse\n\t\tmultilineVars.localTransposeVerticalMovement = distance + Math.ceil(multilineVars.localTranspose / 12) * 7;\n\tif (recognized)\n\t\treturn { accidentals: newKeySig, root: newKeyName[0], acc: newKeyName.length > 1 ? newKeyName[1] : \"\" };\n\telse\n\t\treturn { accidentals: [], root: root, acc: acc };\n};\n\ntranspose.chordName = function(multilineVars, chord) {\n\treturn transposeChordName(chord, multilineVars.localTranspose, multilineVars.localTransposePreferFlats, multilineVars.freegchord)\n};\n\nvar pitchToLetter = [ 'c', 'd', 'e', 'f', 'g', 'a', 'b' ];\nfunction accidentalChange(origPitch, newPitch, accidental, origKeySig, newKeySig) {\n\tvar origPitchLetter = pitchToLetter[(origPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing.\n\tvar origAccidental = 0;\n\tfor (var i = 0; i < origKeySig.length; i++) {\n\t\tif (origKeySig[i].note.toLowerCase() === origPitchLetter)\n\t\t\torigAccidental = accidentals[origKeySig[i].acc];\n\t}\n\n\tvar currentAccidental = accidentals[accidental];\n\tvar delta = currentAccidental - origAccidental;\n\n\tvar newPitchLetter = pitchToLetter[(newPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing.\n\tvar newAccidental = 0;\n\tfor (var j = 0; j < newKeySig.accidentals.length; j++) {\n\t\tif (newKeySig.accidentals[j].note.toLowerCase() === newPitchLetter)\n\t\t\tnewAccidental = accidentals[newKeySig.accidentals[j].acc];\n\t}\n\tvar calcAccidental = delta + newAccidental;\n\tif (calcAccidental < -2) {\n\t\tnewPitch--;\n\t\tcalcAccidental += (newPitchLetter === 'c' || newPitchLetter === 'f') ? 1 : 2;\n\t}\n\tif (calcAccidental > 2) {\n\t\tnewPitch++;\n\t\tcalcAccidental -= (newPitchLetter === 'b' || newPitchLetter === 'e') ? 1 : 2;\n\t}\n\treturn [newPitch, calcAccidental];\n}\n\nvar accidentals = {\n\tdblflat: -2,\n\tflat: -1,\n\tnatural: 0,\n\tsharp: 1,\n\tdblsharp: 2\n};\nvar accidentals2 = {\n\t\"-2\": \"dblflat\",\n\t\"-1\": \"flat\",\n\t\"0\": \"natural\",\n\t\"1\": \"sharp\",\n\t\"2\": \"dblsharp\"\n};\nvar accidentals3 = {\n\t\"-2\": \"__\",\n\t\"-1\": \"_\",\n\t\"0\": \"=\",\n\t\"1\": \"^\",\n\t\"2\": \"^^\"\n};\n//var count = 0\ntranspose.note = function(multilineVars, el) {\n\t// the \"el\" that is passed in has el.name, el.accidental, and el.pitch. \"pitch\" is the vertical position (0=middle C)\n\t// localTranspose is the number of half steps\n\t// localTransposeVerticalMovement is the vertical distance to move.\n\t//console.log(count++,multilineVars.localTranspose, el)\n\tif (!multilineVars.localTranspose || multilineVars.clef.type === \"perc\")\n\t\treturn;\n\tvar origPitch = el.pitch;\n\tif (multilineVars.localTransposeVerticalMovement) {\n\t\tel.pitch = el.pitch + multilineVars.localTransposeVerticalMovement;\n\t\tif (el.name) {\n\t\t\tvar actual = el.accidental ? el.name.substring(1) : el.name\n\t\t\tvar acc = el.accidental ? el.name[0] : ''\n\t\t\tvar p = allNotes.pitchIndex(actual)\n\t\t\tel.name = acc + allNotes.noteName(p+multilineVars.localTransposeVerticalMovement)\n\t\t}\n\t}\n\n\tif (el.accidental) {\n\t\tvar ret = accidentalChange(origPitch, el.pitch, el.accidental, multilineVars.globalTransposeOrigKeySig, multilineVars.targetKey);\n\t\tel.pitch = ret[0];\n\t\tel.accidental = accidentals2[ret[1]];\n\t\tif (el.name) {\n\t\t\tel.name = accidentals3[ret[1]] + el.name.replace(/[_^=]/g,'');\n\t\t}\n\t}\n\n};\n\nmodule.exports = transpose;\n","var allNotes = {};\n\nconst allPitches = [\n\t'C,,,', 'D,,,', 'E,,,', 'F,,,', 'G,,,', 'A,,,', 'B,,,',\n\t'C,,', 'D,,', 'E,,', 'F,,', 'G,,', 'A,,', 'B,,',\n\t'C,', 'D,', 'E,', 'F,', 'G,', 'A,', 'B,',\n\t'C', 'D', 'E', 'F', 'G', 'A', 'B',\n\t'c', 'd', 'e', 'f', 'g', 'a', 'b',\n\t\"c'\", \"d'\", \"e'\", \"f'\", \"g'\", \"a'\", \"b'\",\n\t\"c''\", \"d''\", \"e''\", \"f''\", \"g''\", \"a''\", \"b''\",\n\t\"c'''\", \"d'''\", \"e'''\", \"f'''\", \"g'''\", \"a'''\", \"b'''\",\n];\n\nallNotes.pitchIndex = function(noteName) {\n\treturn allPitches.indexOf(noteName)\n}\n\nallNotes.noteName = function(pitchIndex) {\n\treturn allPitches[pitchIndex]\n}\n\nmodule.exports = allNotes;\n","var sharpChords = ['C', 'C♯', 'D', \"D♯\", 'E', 'F', \"F♯\", 'G', 'G♯', 'A', 'A♯', 'B'];\nvar flatChords = ['C', 'D♭', 'D', 'E♭', 'E', 'F', 'G♭', 'G', 'A♭', 'A', 'B♭', 'B'];\nvar sharpChordsFree = ['C', 'C#', 'D', \"D#\", 'E', 'F', \"F#\", 'G', 'G#', 'A', 'A#', 'B'];\nvar flatChordsFree = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'];\n\nfunction transposeChordName(chord, steps, preferFlats, freeGCchord) {\n\tif (!steps || (steps % 12 === 0)) // The chords are the same if it is an exact octave change.\n\t\treturn chord;\n\n\t// There are two things in the chord that might need to be transposed:\n\t// The chord will start with a letter from A-G, and might have one accidental after it.\n\t// That accidental might be an actual sharp or flat char, or it might be a pound sign or lower case \"b\".\n\t// Then there is a bunch of stuff that isn't transposed and should just be copied. That is stuff like \"7\" and more complicated chords.\n\t// But there is one other exception: right after a slash there will be a bass note and possibly an accidental. That should also be transposed.\n\n\twhile (steps < 0) steps += 12;\n\tif (steps > 11) steps = steps % 12;\n\n\t// (chord name w/accidental) (a bunch of stuff) (/) (bass note) (anything else)\n\tvar match = chord.match(/^([A-G][b#♭♯]?)([^\\/]+)?\\/?([A-G][b#♭♯]?)?(.+)?/)\n\tif (!match)\n\t\treturn chord; // We don't recognize the format of the chord, so skip it.\n\tvar name = match[1]\n\tvar extra1 = match[2]\n\tvar bass = match[3]\n\tvar extra2 = match[4]\n\tvar index = sharpChords.indexOf(name)\n\tif (index < 0)\n\t\tindex = flatChords.indexOf(name)\n\tif (index < 0)\n\t\tindex = sharpChordsFree.indexOf(name)\n\tif (index < 0)\n\t\tindex = flatChordsFree.indexOf(name)\n\tif (index < 0)\n\t\treturn chord; // This should never happen, but if we can't find the chord just bail.\t\n\n\tindex += steps\n\tindex = index % 12\n\n\tif (preferFlats) {\n\t\tif (freeGCchord) chord = flatChordsFree[index]\n\t\telse chord = flatChords[index]\n\t} else {\n\t\tif (freeGCchord) chord = sharpChordsFree[index]\n\t\telse chord = sharpChords[index]\n\t}\n\n\tif (extra1)\n\t\tchord += extra1\n\n\tif (bass) {\n\t\tvar index = sharpChords.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = flatChords.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = sharpChordsFree.indexOf(bass)\n\t\tif (index < 0)\n\t\t\tindex = flatChordsFree.indexOf(bass)\n\t\tchord += '/'\n\t\tif (index >= 0) {\n\t\t\tindex += steps\n\t\t\tindex = index % 12\n\t\t\tif (preferFlats) {\n\t\t\t\tif (freeGCchord) chord += flatChordsFree[index]\n\t\t\t\telse chord += flatChords[index]\n\t\t\t} else {\n\t\t\t\tif (freeGCchord) chord += sharpChordsFree[index]\n\t\t\t\telse chord += sharpChords[index]\n\t\t\t}\n\t\t} else\n\t\t\tchord += bass; // Don't know what to do so do nothing\n\t}\n\n\tif (extra2)\n\t\tchord += extra2\n\n\treturn chord;\n}\n\nmodule.exports = transposeChordName","var parseKeyVoice = require('../parse/abc_parse_key_voice');\nvar parseCommon = require('../parse/abc_common');\n\nvar TuneBuilder = function(tune) {\n\tvar self = this;\n\n\tthis.setVisualTranspose = function(visualTranspose) {\n\t\tif (visualTranspose)\n\t\t\ttune.visualTranspose = visualTranspose;\n\t};\n\n\tthis.resolveOverlays = function() {\n\t\tvar madeChanges = false;\n\t\tvar durationsPerLines = [];\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tvar line = tune.lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tvar overlayVoice = [];\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\toverlayVoice.push({ hasOverlay: false, voice: [], snip: []});\n\t\t\t\t\t\tdurationsPerLines[i] = 0;\n\t\t\t\t\t\tvar durationThisBar = 0;\n\t\t\t\t\t\tvar inOverlay = false;\n\t\t\t\t\t\tvar overlayDuration = 0;\n\t\t\t\t\t\tvar snipStart = -1;\n\t\t\t\t\t\tfor (var kk = 0; kk < voice.length; kk++) {\n\t\t\t\t\t\t\tvar event = voice[kk];\n\t\t\t\t\t\t\tif (event.el_type === \"overlay\" && !inOverlay) {\n\t\t\t\t\t\t\t\tmadeChanges = true;\n\t\t\t\t\t\t\t\tinOverlay = true;\n\t\t\t\t\t\t\t\tsnipStart = kk;\n\t\t\t\t\t\t\t\toverlayVoice[k].hasOverlay = true;\n\t\t\t\t\t\t\t\tif (overlayDuration === 0)\n\t\t\t\t\t\t\t\t\toverlayDuration = durationsPerLines[i];\n\t\t\t\t\t\t\t\t// If this isn't the first line, we also need invisible rests on the previous lines.\n\t\t\t\t\t\t\t\t// So, if the next voice doesn't appear in a previous line, create it\n\t\t\t\t\t\t\t\tfor (var ii = 0; ii < i; ii++) {\n\t\t\t\t\t\t\t\t\tif (durationsPerLines[ii] && tune.lines[ii].staff && staff.voices.length >= tune.lines[ii].staff[0].voices.length) {\n\t\t\t\t\t\t\t\t\t\ttune.lines[ii].staff[0].voices.push([{\n\t\t\t\t\t\t\t\t\t\t\tel_type: \"note\",\n\t\t\t\t\t\t\t\t\t\t\tduration: durationsPerLines[ii],\n\t\t\t\t\t\t\t\t\t\t\trest: {type: \"invisible\"},\n\t\t\t\t\t\t\t\t\t\t\tstartChar: event.startChar,\n\t\t\t\t\t\t\t\t\t\t\tendChar: event.endChar\n\t\t\t\t\t\t\t\t\t\t}]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (event.el_type === \"bar\") {\n\t\t\t\t\t\t\t\tif (inOverlay) {\n\t\t\t\t\t\t\t\t\t// delete the overlay events from this array without messing up this loop.\n\t\t\t\t\t\t\t\t\tinOverlay = false;\n\t\t\t\t\t\t\t\t\toverlayVoice[k].snip.push({ start: snipStart, len: kk - snipStart});\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event); // Also end the overlay with the barline.\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// This keeps the voices lined up: if the overlay isn't in the first measure then we need a bunch of invisible rests.\n\t\t\t\t\t\t\t\t\tif (durationThisBar > 0)\n\t\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push({ el_type: \"note\", duration: durationThisBar, rest: {type: \"invisible\"}, startChar: event.startChar, endChar: event.endChar });\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdurationThisBar = 0;\n\t\t\t\t\t\t\t} else if (event.el_type === \"note\") {\n\t\t\t\t\t\t\t\tif (inOverlay) {\n\t\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdurationThisBar += event.duration;\n\t\t\t\t\t\t\t\t\tdurationsPerLines[i] += event.duration;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (event.el_type === \"scale\" || event.el_type === \"stem\" || event.el_type === \"overlay\" || event.el_type === \"style\" || event.el_type === \"transpose\" || event.el_type === \"color\") {\n\t\t\t\t\t\t\t\t// These types of events are duplicated on the overlay layer.\n\t\t\t\t\t\t\t\toverlayVoice[k].voice.push(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (overlayVoice[k].hasOverlay && overlayVoice[k].snip.length === 0) {\n\t\t\t\t\t\t\t// there was no closing bar, so we didn't set the snip amount.\n\t\t\t\t\t\t\toverlayVoice[k].snip.push({ start: snipStart, len: voice.length - snipStart});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (k = 0; k < overlayVoice.length; k++) {\n\t\t\t\t\t\tvar ov = overlayVoice[k];\n\t\t\t\t\t\tif (ov.hasOverlay) {\n\t\t\t\t\t\t\tov.voice.splice(0, 0, {el_type: \"stem\", direction: \"down\"})\n\t\t\t\t\t\t\tstaff.voices.push(ov.voice);\n\t\t\t\t\t\t\tfor (var kkk = ov.snip.length-1; kkk >= 0; kkk--) {\n\t\t\t\t\t\t\t\tvar snip = ov.snip[kkk];\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(snip.start, snip.len);\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(snip.start+1, 0, { el_type: \"stem\", direction: \"auto\" });\n\t\t\t\t\t\t\t\tvar indexOfLastBar = findLastBar(staff.voices[k], snip.start);\n\t\t\t\t\t\t\t\tstaff.voices[k].splice(indexOfLastBar, 0, { el_type: \"stem\", direction: \"up\" });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// remove ending marks from the overlay voice so they are not repeated\n\t\t\t\t\t\t\tfor (kkk = 0; kkk < staff.voices[staff.voices.length-1].length; kkk++) {\n\t\t\t\t\t\t\t\tstaff.voices[staff.voices.length-1][kkk] = parseCommon.clone(staff.voices[staff.voices.length-1][kkk]);\n\t\t\t\t\t\t\t\tvar el = staff.voices[staff.voices.length-1][kkk];\n\t\t\t\t\t\t\t\tif (el.el_type === 'bar' && el.startEnding) {\n\t\t\t\t\t\t\t\t\tdelete el.startEnding;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (el.el_type === 'bar' && el.endEnding)\n\t\t\t\t\t\t\t\t\tdelete el.endEnding;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn madeChanges;\n\t};\n\n\tfunction findLastBar(voice, start) {\n\t\tfor (var i = start-1; i > 0 && voice[i].el_type !== \"bar\"; i--) {\n\n\t\t}\n\t\treturn i;\n\t}\n\tfunction fixTitles(lines) {\n\t\t// We might have name and subname defined. We now know what line everything is on, so we can determine which to use.\n\t\tvar firstMusicLine = true;\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tvar line = lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\t\tvar staff = line.staff[j];\n\t\t\t\t\tif (staff.title) {\n\t\t\t\t\t\tvar hasATitle = false;\n\t\t\t\t\t\tfor (var k = 0; k < staff.title.length; k++) {\n\t\t\t\t\t\t\tif (staff.title[k]) {\n\t\t\t\t\t\t\t\tstaff.title[k] = (firstMusicLine) ? staff.title[k].name : staff.title[k].subname;\n\t\t\t\t\t\t\t\tif (staff.title[k])\n\t\t\t\t\t\t\t\t\thasATitle = true;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tstaff.title[k] = '';\n\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\tstaff.title[k] = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!hasATitle)\n\t\t\t\t\t\t\tdelete staff.title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfirstMusicLine = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.cleanUp = function(barsperstaff, staffnonote, currSlur) {\n\t\tthis.closeLine();\t// Close the last line.\n\t\tdelete tune.runningFonts;\n\n\t\t// If the tempo was created with a string like \"Allegro\", then the duration of a beat needs to be set at the last moment, when it is most likely known.\n\t\tif (tune.metaText.tempo && tune.metaText.tempo.bpm && !tune.metaText.tempo.duration)\n\t\t\ttune.metaText.tempo.duration = [ tune.getBeatLength() ];\n\n\t\t// Remove any blank lines\n\t\tvar anyDeleted = false;\n\t\tvar i, s, v;\n\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff !== undefined) {\n\t\t\t\tvar hasAny = false;\n\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++) {\n\t\t\t\t\tif (tune.lines[i].staff[s] === undefined) {\n\t\t\t\t\t\tanyDeleted = true;\n\t\t\t\t\t\ttune.lines[i].staff[s] = null;\n\t\t\t\t\t\t//tune.lines[i].staff[s] = { voices: []};\t// TODO-PER: There was a part missing in the abc music. How should we recover?\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (v = 0; v < tune.lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tif (tune.lines[i].staff[s].voices[v] === undefined)\n\t\t\t\t\t\t\t\ttune.lines[i].staff[s].voices[v] = [];\t// TODO-PER: There was a part missing in the abc music. How should we recover?\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\tif (this.containsNotes(tune.lines[i].staff[s].voices[v])) hasAny = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!hasAny) {\n\t\t\t\t\ttune.lines[i] = null;\n\t\t\t\t\tanyDeleted = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (anyDeleted) {\n\t\t\ttune.lines = tune.lines.filter(function (line) { return !!line });\n\t\t\ttune.lines.forEach(function(line) {\n\t\t\t\tif (line.staff)\n\t\t\t\t\tline.staff = line.staff.filter(function (line) { return !!line });\n\t\t\t});\n\t\t}\n\n\t\t// if we exceeded the number of bars allowed on a line, then force a new line\n\t\tif (barsperstaff) {\n\t\t\twhile (wrapMusicLines(tune.lines, barsperstaff)) {\n\t\t\t\t// This will keep wrapping until the end of the piece.\n\t\t\t}\n\t\t}\n\n\t\t// If we were passed staffnonote, then we want to get rid of all staffs that contain only rests.\n\t\tif (staffnonote) {\n\t\t\tanyDeleted = false;\n\t\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\t\tif (tune.lines[i].staff !== undefined) {\n\t\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++) {\n\t\t\t\t\t\tvar keepThis = false;\n\t\t\t\t\t\tfor (v = 0; v < tune.lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tif (this.containsNotesStrict(tune.lines[i].staff[s].voices[v])) {\n\t\t\t\t\t\t\t\tkeepThis = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!keepThis) {\n\t\t\t\t\t\t\tanyDeleted = true;\n\t\t\t\t\t\t\ttune.lines[i].staff[s] = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (anyDeleted) {\n\t\t\t\ttune.lines.forEach(function(line) {\n\t\t\t\t\tif (line.staff)\n\t\t\t\t\t\tline.staff = line.staff.filter(function (staff) { return !!staff });\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfixTitles(tune.lines);\n\n\t\t// Remove the temporary working variables\n\t\tfor (i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff) {\n\t\t\t\tfor (s = 0; s < tune.lines[i].staff.length; s++)\n\t\t\t\t\tdelete tune.lines[i].staff[s].workingClef;\n\t\t\t}\n\t\t}\n\n\t\t// If there are overlays, create new voices for them.\n\t\twhile (this.resolveOverlays()) {\n\t\t\t// keep resolving overlays as long as any are found.\n\t\t}\n\n\t\tfunction cleanUpSlursInLine(line, staffNum, voiceNum) {\n\t\t\tif (!currSlur[staffNum])\n\t\t\t\tcurrSlur[staffNum] = [];\n\t\t\tif (!currSlur[staffNum][voiceNum])\n\t\t\t\tcurrSlur[staffNum][voiceNum] = [];\n\t\t\tvar x;\n//\t\t\tvar lyr = null;\t// TODO-PER: debugging.\n\n\t\t\tvar addEndSlur = function(obj, num, chordPos) {\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\t// There isn't an exact match for note position, but we'll take any other open slur.\n\t\t\t\t\tfor (x = 0; x < currSlur[staffNum][voiceNum].length; x++) {\n\t\t\t\t\t\tif (currSlur[staffNum][voiceNum][x] !== undefined) {\n\t\t\t\t\t\t\tchordPos = x;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\t\tvar offNum = chordPos*100+1;\n\t\t\t\t\t\tobj.endSlur.forEach(function(x) { if (offNum === x) --offNum; });\n\t\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos] = [offNum];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar slurNum;\n\t\t\t\tfor (var i = 0; i < num; i++) {\n\t\t\t\t\tslurNum = currSlur[staffNum][voiceNum][chordPos].pop();\n\t\t\t\t\tobj.endSlur.push(slurNum);\n//\t\t\t\t\tlyr.syllable += '<' + slurNum;\t// TODO-PER: debugging\n\t\t\t\t}\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos].length === 0)\n\t\t\t\t\tdelete currSlur[staffNum][voiceNum][chordPos];\n\t\t\t\treturn slurNum;\n\t\t\t};\n\n\t\t\tvar addStartSlur = function(obj, num, chordPos, usedNums) {\n\t\t\t\tobj.startSlur = [];\n\t\t\t\tif (currSlur[staffNum][voiceNum][chordPos] === undefined) {\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos] = [];\n\t\t\t\t}\n\t\t\t\tvar nextNum = chordPos*100+1;\n\t\t\t\tfor (var i = 0; i < num; i++) {\n\t\t\t\t\tif (usedNums) {\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t\tusedNums.forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\t}\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].forEach(function(x) { if (nextNum === x) ++nextNum; });\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].forEach(function(x) { if (nextNum === x) ++nextNum; });\n\n\t\t\t\t\tcurrSlur[staffNum][voiceNum][chordPos].push(nextNum);\n\t\t\t\t\tobj.startSlur.push({ label: nextNum });\n\t\t\t\t\tif (obj.dottedSlur) {\n\t\t\t\t\t\tobj.startSlur[obj.startSlur.length-1].style = 'dotted';\n\t\t\t\t\t\tdelete obj.dottedSlur;\n\t\t\t\t\t}\n//\t\t\t\t\tlyr.syllable += ' ' + nextNum + '>';\t// TODO-PER:debugging\n\t\t\t\t\tnextNum++;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor (var i = 0; i < line.length; i++) {\n\t\t\t\tvar el = line[i];\n//\t\t\t\tif (el.lyric === undefined)\t// TODO-PER: debugging\n//\t\t\t\t\tel.lyric = [{ divider: '-' }];\t// TODO-PER: debugging\n//\t\t\t\tlyr = el.lyric[0];\t// TODO-PER: debugging\n//\t\t\t\tlyr.syllable = '';\t// TODO-PER: debugging\n\t\t\t\tif (el.el_type === 'note') {\n\t\t\t\t\tif (el.gracenotes) {\n\t\t\t\t\t\tfor (var g = 0; g < el.gracenotes.length; g++) {\n\t\t\t\t\t\t\tif (el.gracenotes[g].endSlur) {\n\t\t\t\t\t\t\t\tvar gg = el.gracenotes[g].endSlur;\n\t\t\t\t\t\t\t\tel.gracenotes[g].endSlur = [];\n\t\t\t\t\t\t\t\tfor (var ggg = 0; ggg < gg; ggg++)\n\t\t\t\t\t\t\t\t\taddEndSlur(el.gracenotes[g], 1, 20);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (el.gracenotes[g].startSlur) {\n\t\t\t\t\t\t\t\tx = el.gracenotes[g].startSlur;\n\t\t\t\t\t\t\t\taddStartSlur(el.gracenotes[g], x, 20);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (el.endSlur) {\n\t\t\t\t\t\tx = el.endSlur;\n\t\t\t\t\t\tel.endSlur = [];\n\t\t\t\t\t\taddEndSlur(el, x, 0);\n\t\t\t\t\t}\n\t\t\t\t\tif (el.startSlur) {\n\t\t\t\t\t\tx = el.startSlur;\n\t\t\t\t\t\taddStartSlur(el, x, 0);\n\t\t\t\t\t}\n\t\t\t\t\tif (el.pitches) {\n\t\t\t\t\t\tvar usedNums = [];\n\t\t\t\t\t\tfor (var p = 0; p < el.pitches.length; p++) {\n\t\t\t\t\t\t\tif (el.pitches[p].endSlur) {\n\t\t\t\t\t\t\t\tvar k = el.pitches[p].endSlur;\n\t\t\t\t\t\t\t\tel.pitches[p].endSlur = [];\n\t\t\t\t\t\t\t\tfor (var j = 0; j < k; j++) {\n\t\t\t\t\t\t\t\t\tvar slurNum = addEndSlur(el.pitches[p], 1, p+1);\n\t\t\t\t\t\t\t\t\tusedNums.push(slurNum);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (p = 0; p < el.pitches.length; p++) {\n\t\t\t\t\t\t\tif (el.pitches[p].startSlur) {\n\t\t\t\t\t\t\t\tx = el.pitches[p].startSlur;\n\t\t\t\t\t\t\t\taddStartSlur(el.pitches[p], x, p+1, usedNums);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Correct for the weird gracenote case where ({g}a) should match.\n\t\t\t\t\t\t// The end slur was already assigned to the note, and needs to be moved to the first note of the graces.\n\t\t\t\t\t\tif (el.gracenotes && el.pitches[0].endSlur && el.pitches[0].endSlur[0] === 100 && el.pitches[0].startSlur) {\n\t\t\t\t\t\t\tif (el.gracenotes[0].endSlur)\n\t\t\t\t\t\t\t\tel.gracenotes[0].endSlur.push(el.pitches[0].startSlur[0].label);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tel.gracenotes[0].endSlur = [el.pitches[0].startSlur[0].label];\n\t\t\t\t\t\t\tif (el.pitches[0].endSlur.length === 1)\n\t\t\t\t\t\t\t\tdelete el.pitches[0].endSlur;\n\t\t\t\t\t\t\telse if (el.pitches[0].endSlur[0] === 100)\n\t\t\t\t\t\t\t\tel.pitches[0].endSlur.shift();\n\t\t\t\t\t\t\telse if (el.pitches[0].endSlur[el.pitches[0].endSlur.length-1] === 100)\n\t\t\t\t\t\t\t\tel.pitches[0].endSlur.pop();\n\t\t\t\t\t\t\tif (currSlur[staffNum][voiceNum][1].length === 1)\n\t\t\t\t\t\t\t\tdelete currSlur[staffNum][voiceNum][1];\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tcurrSlur[staffNum][voiceNum][1].pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// TODO-PER: This could be done faster as we go instead of as the last step.\n\t\tfunction fixClefPlacement(el) {\n\t\t\tparseKeyVoice.fixClef(el);\n\t\t}\n\n\t\tfunction wrapMusicLines(lines, barsperstaff) {\n\t\t\tfor (i = 0; i < lines.length; i++) {\n\t\t\t\tif (lines[i].staff !== undefined) {\n\t\t\t\t\tfor (s = 0; s < lines[i].staff.length; s++) {\n\t\t\t\t\t\tvar permanentItems = [];\n\t\t\t\t\t\tfor (v = 0; v < lines[i].staff[s].voices.length; v++) {\n\t\t\t\t\t\t\tvar voice = lines[i].staff[s].voices[v];\n\t\t\t\t\t\t\tvar barNumThisLine = 0;\n\t\t\t\t\t\t\tfor (var n = 0; n < voice.length; n++) {\n\t\t\t\t\t\t\t\tif (voice[n].el_type === 'bar') {\n\t\t\t\t\t\t\t\t\tbarNumThisLine++;\n\t\t\t\t\t\t\t\t\tif (barNumThisLine >= barsperstaff) {\n\t\t\t\t\t\t\t\t\t\t// push everything else to the next line, if there is anything else,\n\t\t\t\t\t\t\t\t\t\t// and there is a next line. If there isn't a next line, create one.\n\t\t\t\t\t\t\t\t\t\tif (n < voice.length - 1) {\n\t\t\t\t\t\t\t\t\t\t\tvar nextLine = getNextMusicLine(lines, i);\n\t\t\t\t\t\t\t\t\t\t\tif (!nextLine) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar cp = JSON.parse(JSON.stringify(lines[i]));\n\t\t\t\t\t\t\t\t\t\t\t\tlines.push(parseCommon.clone(cp));\n\t\t\t\t\t\t\t\t\t\t\t\tnextLine = lines[lines.length - 1];\n\t\t\t\t\t\t\t\t\t\t\t\tfor (var ss = 0; ss < nextLine.staff.length; ss++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor (var vv = 0; vv < nextLine.staff[ss].voices.length; vv++)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnextLine.staff[ss].voices[vv] = [];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvar startElement = n + 1;\n\t\t\t\t\t\t\t\t\t\t\tvar section = lines[i].staff[s].voices[v].slice(startElement);\n\t\t\t\t\t\t\t\t\t\t\tlines[i].staff[s].voices[v] = lines[i].staff[s].voices[v].slice(0, startElement);\n\t\t\t\t\t\t\t\t\t\t\tnextLine.staff[s].voices[v] = permanentItems.concat(section.concat(nextLine.staff[s].voices[v]));\n\t\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (!voice[n].duration) {\n\t\t\t\t\t\t\t\t\tpermanentItems.push(voice[n]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getNextMusicLine(lines, currentLine) {\n\t\t\tcurrentLine++;\n\t\t\twhile (lines.length > currentLine) {\n\t\t\t\tif (lines[currentLine].staff)\n\t\t\t\t\treturn lines[currentLine];\n\t\t\t\tcurrentLine++;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (tune.lineNum = 0; tune.lineNum < tune.lines.length; tune.lineNum++) {\n\t\t\tvar staff = tune.lines[tune.lineNum].staff;\n\t\t\tif (staff) {\n\t\t\t\tfor (tune.staffNum = 0; tune.staffNum < staff.length; tune.staffNum++) {\n\t\t\t\t\tif (staff[tune.staffNum].clef)\n\t\t\t\t\t\tfixClefPlacement(staff[tune.staffNum].clef);\n\t\t\t\t\tfor (tune.voiceNum = 0; tune.voiceNum < staff[tune.staffNum].voices.length; tune.voiceNum++) {\n\t\t\t\t\t\tvar voice = staff[tune.staffNum].voices[tune.voiceNum];\n\t\t\t\t\t\tcleanUpSlursInLine(voice, tune.staffNum, tune.voiceNum);\n\t\t\t\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\t\t\t\tif (voice[j].el_type === 'clef')\n\t\t\t\t\t\t\t\tfixClefPlacement(voice[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (voice.length > 0 && voice[voice.length-1].barNumber) {\n\t\t\t\t\t\t\t// Don't hang a bar number on the last bar line: it should go on the next line.\n\t\t\t\t\t\t\tvar nextLine = getNextMusicLine(tune.lines, tune.lineNum);\n\t\t\t\t\t\t\tif (nextLine)\n\t\t\t\t\t\t\t\tnextLine.staff[0].barNumber = voice[voice.length-1].barNumber;\n\t\t\t\t\t\t\tdelete voice[voice.length-1].barNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove temporary variables that the outside doesn't need to know about\n\t\tdelete tune.staffNum;\n\t\tdelete tune.voiceNum;\n\t\tdelete tune.lineNum;\n\t\tdelete tune.potentialStartBeam;\n\t\tdelete tune.potentialEndBeam;\n\t\tdelete tune.vskipPending;\n\n\t\treturn currSlur;\n\t};\n\n\ttune.reset();\n\n\tthis.getLastNote = function() {\n\t\tif (tune.lines[tune.lineNum] && tune.lines[tune.lineNum].staff && tune.lines[tune.lineNum].staff[tune.staffNum] &&\n\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum]) {\n\t\t\tfor (var i = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum].length-1; i >= 0; i--) {\n\t\t\t\tvar el = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum][i];\n\t\t\t\tif (el.el_type === 'note') {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tthis.addTieToLastNote = function(dottedTie) {\n\t\t// TODO-PER: if this is a chord, which note?\n\t\tvar el = this.getLastNote();\n\t\tif (el && el.pitches && el.pitches.length > 0) {\n\t\t\tel.pitches[0].startTie = {};\n\t\t\tif (dottedTie)\n\t\t\t\tel.pitches[0].startTie.style = 'dotted';\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.getDuration = function(el) {\n\t\tif (el.duration) return el.duration;\n\t\t//if (el.pitches && el.pitches.length > 0) return el.pitches[0].duration;\n\t\treturn 0;\n\t};\n\n\tthis.closeLine = function() {\n\t\tif (tune.potentialStartBeam && tune.potentialEndBeam) {\n\t\t\ttune.potentialStartBeam.startBeam = true;\n\t\t\ttune.potentialEndBeam.endBeam = true;\n\t\t}\n\t\tdelete tune.potentialStartBeam;\n\t\tdelete tune.potentialEndBeam;\n\t};\n\n\tthis.appendElement = function(type, startChar, endChar, hashParams)\n\t{\n\t\tvar This = tune;\n\t\tvar pushNote = function(hp) {\n\t\t\tvar currStaff = This.lines[This.lineNum].staff[This.staffNum];\n\t\t\tif (!currStaff) {\n\t\t\t\t// TODO-PER: This prevents a crash, but it drops the element. Need to figure out how to start a new line, or delay adding this.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (hp.pitches !== undefined) {\n\t\t\t\tvar mid = currStaff.workingClef.verticalPos;\n\t\t\t\thp.pitches.forEach(function(p) { p.verticalPos = p.pitch - mid; });\n\t\t\t}\n\t\t\tif (hp.gracenotes !== undefined) {\n\t\t\t\tvar mid2 = currStaff.workingClef.verticalPos;\n\t\t\t\thp.gracenotes.forEach(function(p) { p.verticalPos = p.pitch - mid2; });\n\t\t\t}\n\t\t\tcurrStaff.voices[This.voiceNum].push(hp);\n\t\t};\n\t\thashParams.el_type = type;\n\t\tif (startChar !== null)\n\t\t\thashParams.startChar = startChar;\n\t\tif (endChar !== null)\n\t\t\thashParams.endChar = endChar;\n\t\tvar endBeamHere = function() {\n\t\t\tThis.potentialStartBeam.startBeam = true;\n\t\t\thashParams.endBeam = true;\n\t\t\tdelete This.potentialStartBeam;\n\t\t\tdelete This.potentialEndBeam;\n\t\t};\n\t\tvar endBeamLast = function() {\n\t\t\tif (This.potentialStartBeam !== undefined && This.potentialEndBeam !== undefined) {\t// Do we have a set of notes to beam?\n\t\t\t\tThis.potentialStartBeam.startBeam = true;\n\t\t\t\tThis.potentialEndBeam.endBeam = true;\n\t\t\t}\n\t\t\tdelete This.potentialStartBeam;\n\t\t\tdelete This.potentialEndBeam;\n\t\t};\n\t\tif (type === 'note') { // && (hashParams.rest !== undefined || hashParams.end_beam === undefined)) {\n\t\t\t// Now, add the startBeam and endBeam where it is needed.\n\t\t\t// end_beam is already set on the places where there is a forced end_beam. We'll remove that here after using that info.\n\t\t\t// this.potentialStartBeam either points to null or the start beam.\n\t\t\t// this.potentialEndBeam either points to null or the start beam.\n\t\t\t// If we have a beam break (note is longer than a quarter, or an end_beam is on this element), then set the beam if we have one.\n\t\t\t// reset the variables for the next notes.\n\t\t\tvar dur = self.getDuration(hashParams);\n\t\t\tif (dur >= 0.25) {\t// The beam ends on the note before this.\n\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.force_end_beam_last && This.potentialStartBeam !== undefined) {\n\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.end_beam && This.potentialStartBeam !== undefined) {\t// the beam is forced to end on this note, probably because of a space in the ABC\n\t\t\t\tif (hashParams.rest === undefined)\n\t\t\t\t\tendBeamHere();\n\t\t\t\telse\n\t\t\t\t\tendBeamLast();\n\t\t\t} else if (hashParams.rest === undefined) {\t// this a short note and we aren't about to end the beam\n\t\t\t\tif (This.potentialStartBeam === undefined) {\t// We aren't collecting notes for a beam, so start here.\n\t\t\t\t\tif (!hashParams.end_beam) {\n\t\t\t\t\t\tThis.potentialStartBeam = hashParams;\n\t\t\t\t\t\tdelete This.potentialEndBeam;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tThis.potentialEndBeam = hashParams;\t// Continue the beaming, look for the end next note.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// end_beam goes on rests and notes which precede rests _except_ when a rest (or set of adjacent rests) has normal notes on both sides (no spaces)\n//\t\t\tif (hashParams.rest !== undefined)\n//\t\t\t{\n//\t\t\t\thashParams.end_beam = true;\n//\t\t\t\tvar el2 = this.getLastNote();\n//\t\t\t\tif (el2) el2.end_beam = true;\n//\t\t\t\t// TODO-PER: implement exception mentioned in the comment.\n//\t\t\t}\n\t\t} else {\t// It's not a note, so there definitely isn't beaming after it.\n\t\t\tendBeamLast();\n\t\t}\n\t\tdelete hashParams.end_beam;\t// We don't want this temporary variable hanging around.\n\t\tdelete hashParams.force_end_beam_last;\t// We don't want this temporary variable hanging around.\n\t\tpushNote(hashParams);\n\t};\n\n\tthis.appendStartingElement = function(type, startChar, endChar, hashParams2)\n\t{\n\t\t// If we're in the middle of beaming, then end the beam.\n\t\tthis.closeLine();\n\n\t\t// We only ever want implied naturals the first time.\n\t\tvar impliedNaturals;\n\t\tif (type === 'key') {\n\t\t\timpliedNaturals = hashParams2.impliedNaturals;\n\t\t\tdelete hashParams2.impliedNaturals;\n\t\t\tdelete hashParams2.explicitAccidentals;\n\t\t}\n\n\t\t// Clone the object because it will be sticking around for the next line and we don't want the extra fields in it.\n\t\tvar hashParams = parseCommon.clone(hashParams2);\n\n\t\tif (tune.lines[tune.lineNum] && tune.lines[tune.lineNum].staff) { // be sure that we are on a music type line before doing the following.\n\t\t\t// If tune is the first item in tune staff, then we might have to initialize the staff, first.\n\t\t\tif (tune.lines[tune.lineNum].staff.length <= tune.staffNum) {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum] = {};\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].clef = parseCommon.clone(tune.lines[tune.lineNum].staff[0].clef);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].key = parseCommon.clone(tune.lines[tune.lineNum].staff[0].key);\n\t\t\t\tif (tune.lines[tune.lineNum].staff[0].meter)\n\t\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].meter = parseCommon.clone(tune.lines[tune.lineNum].staff[0].meter);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].workingClef = parseCommon.clone(tune.lines[tune.lineNum].staff[0].workingClef);\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].voices = [[]];\n\t\t\t}\n\t\t\t// If tune is a clef type, then we replace the working clef on the line. This is kept separate from\n\t\t\t// the clef in case there is an inline clef field. We need to know what the current position for\n\t\t\t// the note is.\n\t\t\tif (type === 'clef') {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum].workingClef = hashParams;\n\t\t\t}\n\n\t\t\t// These elements should not be added twice, so if the element exists on tune line without a note or bar before it, just replace the staff version.\n\t\t\tvar voice = tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum];\n\t\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\t\tif (voice[i].el_type === 'note' || voice[i].el_type === 'bar') {\n\t\t\t\t\thashParams.el_type = type;\n\t\t\t\t\thashParams.startChar = startChar;\n\t\t\t\t\thashParams.endChar = endChar;\n\t\t\t\t\tif (impliedNaturals)\n\t\t\t\t\t\thashParams.accidentals = impliedNaturals.concat(hashParams.accidentals);\n\t\t\t\t\tvoice.push(hashParams);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (voice[i].el_type === type) {\n\t\t\t\t\thashParams.el_type = type;\n\t\t\t\t\thashParams.startChar = startChar;\n\t\t\t\t\thashParams.endChar = endChar;\n\t\t\t\t\tif (impliedNaturals)\n\t\t\t\t\t\thashParams.accidentals = impliedNaturals.concat(hashParams.accidentals);\n\t\t\t\t\tvoice[i] = hashParams;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// We didn't see either that type or a note, so replace the element to the staff.\n\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum][type] = hashParams2;\n\t\t}\n\t};\n\n\tthis.pushLine = function(hash) {\n\t\tif (tune.vskipPending) {\n\t\t\thash.vskip = tune.vskipPending;\n\t\t\tdelete tune.vskipPending;\n\t\t}\n\t\ttune.lines.push(hash);\n\t};\n\n\tthis.addSubtitle = function(str, info) {\n\t\tthis.pushLine({subtitle: { text: str, startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addSpacing = function(num) {\n\t\ttune.vskipPending = num;\n\t};\n\n\tthis.addNewPage = function(num) {\n\t\tthis.pushLine({newpage: num});\n\t};\n\n\tthis.addSeparator = function(spaceAbove, spaceBelow, lineLength, info) {\n\t\tthis.pushLine({separator: {spaceAbove: Math.round(spaceAbove), spaceBelow: Math.round(spaceBelow), lineLength: Math.round(lineLength), startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addText = function(str, info) {\n\t\tthis.pushLine({text: { text: str, startChar: info.startChar, endChar: info.endChar}});\n\t};\n\n\tthis.addCentered = function(str) {\n\t\tthis.pushLine({text: [{text: str, center: true }]});\n\t};\n\n\tthis.containsNotes = function(voice) {\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === 'note' || voice[i].el_type === 'bar')\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.containsNotesStrict = function(voice) {\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === 'note' && (voice[i].rest === undefined || voice[i].chord !== undefined))\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\t//\tanyVoiceContainsNotes: function(line) {\n//\t\tfor (var i = 0; i < line.staff.voices.length; i++) {\n//\t\t\tif (this.containsNotes(line.staff.voices[i]))\n//\t\t\t\treturn true;\n//\t\t}\n//\t\treturn false;\n//\t},\n\tthis.changeVoiceScale = function(scale) {\n\t\tself.appendElement('scale', null, null, { size: scale} );\n\t};\n\tthis.changeVoiceColor = function(color) {\n\t\tself.appendElement('color', null, null, { color: color} );\n\t};\n\n\tthis.startNewLine = function(params) {\n\t\t// If the pointed to line doesn't exist, just create that. If the line does exist, but doesn't have any music on it, just use it.\n\t\t// If it does exist and has music, then increment the line number. If the new element doesn't exist, create it.\n\t\tvar This = tune;\n\t\tthis.closeLine();\t// Close the previous line.\n\t\tvar createVoice = function(params) {\n\t\t\tvar thisStaff = This.lines[This.lineNum].staff[This.staffNum];\n\t\t\tthisStaff.voices[This.voiceNum] = [];\n\t\t\tif (!thisStaff.title)\n\t\t\t\tthisStaff.title = [];\n\t\t\tthisStaff.title[This.voiceNum] = { name: params.name, subname: params.subname };\n\t\t\tif (params.style)\n\t\t\t\tself.appendElement('style', null, null, {head: params.style});\n\t\t\tif (params.stem)\n\t\t\t\tself.appendElement('stem', null, null, {direction: params.stem});\n\t\t\telse if (This.voiceNum > 0) {\n\t\t\t\tif (thisStaff.voices[0]!== undefined) {\n\t\t\t\t\tvar found = false;\n\t\t\t\t\tfor (var i = 0; i < thisStaff.voices[0].length; i++) {\n\t\t\t\t\t\tif (thisStaff.voices[0].el_type === 'stem')\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!found) {\n\t\t\t\t\t\tvar stem = { el_type: 'stem', direction: 'up' };\n\t\t\t\t\t\tthisStaff.voices[0].splice(0,0,stem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.appendElement('stem', null, null, {direction: 'down'});\n\t\t\t}\n\t\t\tif (params.scale)\n\t\t\t\tself.appendElement('scale', null, null, { size: params.scale} );\n\t\t\tif (params.color)\n\t\t\t\tself.appendElement('color', null, null, { color: params.color} );\n\t\t};\n\t\tvar createStaff = function(params) {\n\t\t\tif (params.key && params.key.impliedNaturals) {\n\t\t\t\tparams.key.accidentals = params.key.accidentals.concat(params.key.impliedNaturals);\n\t\t\t\tdelete params.key.impliedNaturals;\n\t\t\t}\n\n\t\t\tThis.lines[This.lineNum].staff[This.staffNum] = {voices: [ ], clef: params.clef, key: params.key, workingClef: params.clef };\n\t\t\tif (params.stafflines !== undefined) {\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].clef.stafflines = params.stafflines;\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].workingClef.stafflines = params.stafflines;\n\t\t\t}\n\t\t\tif (params.staffscale) {\n\t\t\t\tThis.lines[This.lineNum].staff[This.staffNum].staffscale = params.staffscale;\n\t\t\t}\n\t\t\tif (params.annotationfont) self.setLineFont(\"annotationfont\", params.annotationfont);\n\t\t\tif (params.gchordfont) self.setLineFont(\"gchordfont\", params.gchordfont);\n\t\t\tif (params.tripletfont) self.setLineFont(\"tripletfont\", params.tripletfont);\n\t\t\tif (params.vocalfont) self.setLineFont(\"vocalfont\", params.vocalfont);\n\t\t\tif (params.bracket) This.lines[This.lineNum].staff[This.staffNum].bracket = params.bracket;\n\t\t\tif (params.brace) This.lines[This.lineNum].staff[This.staffNum].brace = params.brace;\n\t\t\tif (params.connectBarLines) This.lines[This.lineNum].staff[This.staffNum].connectBarLines = params.connectBarLines;\n\t\t\tif (params.barNumber) This.lines[This.lineNum].staff[This.staffNum].barNumber = params.barNumber;\n\t\t\tcreateVoice(params);\n\t\t\t// Some stuff just happens for the first voice\n\t\t\tif (params.part)\n\t\t\t\tself.appendElement('part', params.part.startChar, params.part.endChar, {title: params.part.title});\n\t\t\tif (params.meter !== undefined) This.lines[This.lineNum].staff[This.staffNum].meter = params.meter;\n\t\t\tif (This.vskipPending) {\n\t\t\t\tThis.lines[This.lineNum].vskip = This.vskipPending;\n\t\t\t\tdelete This.vskipPending;\n\t\t\t}\n\t\t};\n\t\tvar createLine = function(params) {\n\t\t\tThis.lines[This.lineNum] = {staff: []};\n\t\t\tcreateStaff(params);\n\t\t};\n\t\tif (tune.lines[tune.lineNum] === undefined) createLine(params);\n\t\telse if (tune.lines[tune.lineNum].staff === undefined) {\n\t\t\ttune.lineNum++;\n\t\t\tthis.startNewLine(params);\n\t\t} else if (tune.lines[tune.lineNum].staff[tune.staffNum] === undefined) createStaff(params);\n\t\telse if (tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum] === undefined) createVoice(params);\n\t\telse if (!this.containsNotes(tune.lines[tune.lineNum].staff[tune.staffNum].voices[tune.voiceNum])) {\n\t\t\t// We don't need a new line but we might need to update parts of it.\n\t\t\tif (params.part)\n\t\t\t\tself.appendElement('part', params.part.startChar, params.part.endChar, {title: params.part.title});\n\t\t} else {\n\t\t\ttune.lineNum++;\n\t\t\tthis.startNewLine(params);\n\t\t}\n\t};\n\n\tthis.setRunningFont = function(type, font) {\n\t\t// This is called at tune start to set the current default fonts so we know whether to record a change.\n\t\ttune.runningFonts[type] = font;\n\t};\n\n\tthis.setLineFont = function(type, font) {\n\t\t// If we haven't encountered the font type yet then we are using the default font so it doesn't\n\t\t// need to be noted. If we have encountered it, then only record it if it is different from the last time.\n\t\tif (tune.runningFonts[type]) {\n\t\t\tvar isDifferent = false;\n\t\t\tvar keys = Object.keys(font);\n\t\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\t\tif (tune.runningFonts[type][keys[i]] !== font[keys[i]])\n\t\t\t\t\tisDifferent = true;\n\t\t\t}\n\t\t\tif (isDifferent) {\n\t\t\t\ttune.lines[tune.lineNum].staff[tune.staffNum][type] = font;\n\t\t\t}\n\t\t}\n\t\ttune.runningFonts[type] = font;\n\t}\n\n\tthis.setBarNumberImmediate = function(barNumber) {\n\t\t// If tune is called right at the beginning of a line, then correct the measure number that is already written.\n\t\t// If tune is called at the beginning of a measure, then correct the measure number that was just created.\n\t\t// If tune is called in the middle of a measure, then subtract one from it, because it will be incremented before applied.\n\t\tvar currentVoice = this.getCurrentVoice();\n\t\tif (currentVoice && currentVoice.length > 0) {\n\t\t\tvar lastElement = currentVoice[currentVoice.length-1];\n\t\t\tif (lastElement.el_type === 'bar') {\n\t\t\t\tif (lastElement.barNumber !== undefined) // the measure number might not be written for tune bar, don't override that.\n\t\t\t\t\tlastElement.barNumber = barNumber;\n\t\t\t} else\n\t\t\t\treturn barNumber-1;\n\t\t}\n\t\treturn barNumber;\n\t};\n\n\tthis.hasBeginMusic = function() {\n\t\t// return true if there exists at least one line that contains \"staff\"\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tthis.isFirstLine = function(index) {\n\t\tfor (var i = index-1; i >= 0; i--) {\n\t\t\tif (tune.lines[i].staff !== undefined) return false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tthis.getCurrentVoice = function() {\n\t\tvar currLine = tune.lines[tune.lineNum];\n\t\tif (!currLine)\n\t\t\treturn null;\n\t\tvar currStaff = currLine.staff[tune.staffNum];\n\t\tif (!currStaff)\n\t\t\treturn null;\n\t\tif (currStaff.voices[tune.voiceNum] !== undefined)\n\t\t\treturn currStaff.voices[tune.voiceNum];\n\t\telse return null;\n\t};\n\n\tthis.setCurrentVoice = function(staffNum, voiceNum) {\n\t\ttune.staffNum = staffNum;\n\t\ttune.voiceNum = voiceNum;\n\t\tfor (var i = 0; i < tune.lines.length; i++) {\n\t\t\tif (tune.lines[i].staff) {\n\t\t\t\tif (tune.lines[i].staff[staffNum] === undefined || tune.lines[i].staff[staffNum].voices[voiceNum] === undefined ||\n\t\t\t\t\t!this.containsNotes(tune.lines[i].staff[staffNum].voices[voiceNum] )) {\n\t\t\t\t\ttune.lineNum = i;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttune.lineNum = i;\n\t};\n\n\tthis.addMetaText = function(key, value, info) {\n\t\tif (tune.metaText[key] === undefined) {\n\t\t\ttune.metaText[key] = value;\n\t\t\ttune.metaTextInfo[key] = info;\n\t\t} else {\n\t\t\ttune.metaText[key] += \"\\n\" + value;\n\t\t\ttune.metaTextInfo[key].endChar = info.endChar;\n\t\t}\n\t};\n\n\tthis.addMetaTextArray = function(key, value, info) {\n\t\tif (tune.metaText[key] === undefined) {\n\t\t\ttune.metaText[key] = [value];\n\t\t\ttune.metaTextInfo[key] = info;\n\t\t} else {\n\t\t\ttune.metaText[key].push(value);\n\t\t\ttune.metaTextInfo[key].endChar = info.endChar;\n\t\t}\n\t};\n\tthis.addMetaTextObj = function(key, value, info) {\n\t\ttune.metaText[key] = value;\n\t\ttune.metaTextInfo[key] = info;\n\t};\n};\n\nmodule.exports = TuneBuilder;\n","// wrap_lines.js: does line wrap on an already parsed tune.\n\nfunction wrapLines(tune, lineBreaks, barNumbers) {\n\tif (!lineBreaks || tune.lines.length === 0)\n\t\treturn;\n\n\t// tune.lines contains nested arrays: there is an array of lines (that's the part this function rewrites),\n\t// there is an array of staffs per line (for instance, piano will have 2, orchestra will have many)\n\t// there is an array of voices per staff (for instance, 4-part harmony might have bass and tenor on a single staff)\n\tvar lines = tune.deline({lineBreaks: false});\n\tvar linesBreakElements = findLineBreaks(lines, lineBreaks);\n\t//console.log(JSON.stringify(linesBreakElements))\n\ttune.lines = addLineBreaks(lines, linesBreakElements, barNumbers);\n\ttune.lineBreaks = linesBreakElements;\n}\n\nfunction addLineBreaks(lines, linesBreakElements, barNumbers) {\n\t// linesBreakElements is an array of all of the elements that break for a new line\n\t// The objects in the array look like:\n\t// {\"ogLine\":0,\"line\":0,\"staff\":0,\"voice\":0,\"start\":0, \"end\":21}\n\t// ogLine is the original line that it came from,\n\t// line is the target line.\n\t// then copy all the elements from start to end for the staff and voice specified.\n\t// If the item doesn't contain \"staff\" then it is a non music line and should just be copied.\n\tvar outputLines = [];\n\tvar lastKeySig = []; // This is per staff - if the key changed then this will be populated.\n\tvar lastStem = [];\n\tvar currentBarNumber = 1;\n\tfor (var i = 0; i < linesBreakElements.length; i++) {\n\t\tvar action = linesBreakElements[i];\n\t\tif (lines[action.ogLine].staff) {\n\t\t\tvar inputStaff = lines[action.ogLine].staff[action.staff];\n\t\t\tif (!outputLines[action.line]) {\n\t\t\t\toutputLines[action.line] = {staff: []}\n\t\t\t}\n\t\t\tif (!outputLines[action.line].staff[action.staff]) {\n\t\t\t\toutputLines[action.line].staff[action.staff] = {voices: []};\n\t\t\t\tif (barNumbers !== undefined && action.staff === 0 && action.line > 0) {\n\t\t\t\t\toutputLines[action.line].staff[action.staff].barNumber = currentBarNumber;\n\t\t\t\t}\n\t\t\t\tvar keys = Object.keys(inputStaff)\n\t\t\t\tfor (var k = 0; k < keys.length; k++) {\n\t\t\t\t\tvar skip = keys[k] === \"voices\";\n\t\t\t\t\tif (keys[k] === \"meter\" && action.line !== 0)\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\tif (!skip)\n\t\t\t\t\t\toutputLines[action.line].staff[action.staff][keys[k]] = inputStaff[keys[k]];\n\t\t\t\t}\n\t\t\t\tif (lastKeySig[action.staff])\n\t\t\t\t\toutputLines[action.line].staff[action.staff].key = lastKeySig[action.staff];\n\n\t\t\t}\n\t\t\tif (!outputLines[action.line].staff[action.staff].voices[action.voice]) {\n\t\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice] = [];\n\t\t\t}\n\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice] =\n\t\t\t\tlines[action.ogLine].staff[action.staff].voices[action.voice].slice(action.start, action.end+1);\n\t\t\tif (lastStem[action.staff*10+action.voice])\n\t\t\t\toutputLines[action.line].staff[action.staff].voices[action.voice].unshift({el_type: \"stem\", direction: lastStem[action.staff*10+action.voice].direction})\n\t\t\tvar currVoice = outputLines[action.line].staff[action.staff].voices[action.voice];\n\t\t\tfor (var kk = currVoice.length-1; kk >= 0; kk--) {\n\t\t\t\tif (currVoice[kk].el_type === \"key\") {\n\t\t\t\t\tlastKeySig[action.staff] = {\n\t\t\t\t\t\troot: currVoice[kk].root,\n\t\t\t\t\t\tacc: currVoice[kk].acc,\n\t\t\t\t\t\tmode: currVoice[kk].mode,\n\t\t\t\t\t\taccidentals: currVoice[kk].accidentals.filter(function (acc) { return acc.acc !== 'natural' })\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (kk = currVoice.length-1; kk >= 0; kk--) {\n\t\t\t\tif (currVoice[kk].el_type === \"stem\") {\n\t\t\t\t\tlastStem[action.staff*10+action.voice] = {\n\t\t\t\t\t\tdirection: currVoice[kk].direction,\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (barNumbers !== undefined && action.staff === 0 && action.voice === 0) {\n\t\t\t\tfor (kk = 0; kk < currVoice.length; kk++) {\n\t\t\t\t\tif (currVoice[kk].el_type === 'bar') {\n\t\t\t\t\t\tcurrentBarNumber++\n\t\t\t\t\t\tif (kk === currVoice.length-1)\n\t\t\t\t\t\t\tdelete currVoice[kk].barNumber\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tcurrVoice[kk].barNumber = currentBarNumber\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\toutputLines[action.line] = lines[action.ogLine];\n\t\t}\n\t}\n\t// There could be some missing info - if the tune passed in was incomplete or had different lengths for different voices or was missing a voice altogether - just fill in the gaps.\n\tfor (var ii = 0; ii < outputLines.length; ii++) {\n\t\tif (outputLines[ii].staff) {\n\t\t\toutputLines[ii].staff = outputLines[ii].staff.filter(function (el) {\n\t\t\t\treturn el != null;\n\t\t\t});\n\t\t}\n\t}\n\treturn outputLines;\n}\n\n\nfunction findLineBreaks(lines, lineBreakArray) {\n\t// lineBreakArray is an array of all of the sections of the tune - often there will just be one\n\t// section unless there is a subtitle or other non-music lines. Each of the elements of\n\t// Each element of lineBreakArray is an array of the zero-based last measure of the line.\n\tvar lineBreakIndexes = [];\n\tvar lbai = 0;\n\tvar lineCounter = 0;\n\tvar outputLine = 0;\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tvar line = lines[i];\n\t\tif (line.staff) {\n\t\t\tvar lineStart = lineCounter;\n\t\t\tvar lineBreaks = lineBreakArray[lbai];\n\t\t\tlbai++;\n\t\t\tfor (var j = 0; j < line.staff.length; j++) {\n\t\t\t\tvar staff = line.staff[j];\n\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\toutputLine = lineStart;\n\t\t\t\t\tvar measureNumber = 0;\n\t\t\t\t\tvar lbi = 0;\n\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\tvar start = 0;\n\t\t\t\t\tfor (var e = 0; e < voice.length; e++) {\n\t\t\t\t\t\tvar el = voice[e];\n\n\t\t\t\t\t\tif (el.el_type === 'bar') {\n\t\t\t\t\t\t\tif (lineBreaks[lbi] === measureNumber) {\n\t\t\t\t\t\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine, staff: j, voice: k, start: start, end: e})\n\t\t\t\t\t\t\t\tstart = e + 1;\n\t\t\t\t\t\t\t\toutputLine++;\n\t\t\t\t\t\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t\t\t\t\t\t\tlbi++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmeasureNumber++;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine, staff: j, voice: k, start: start, end: voice.length})\n\t\t\t\t\toutputLine++;\n\t\t\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tlineBreakIndexes.push({ ogLine: i, line: outputLine })\n\t\t\toutputLine++;\n\t\t\tlineCounter = Math.max(lineCounter, outputLine)\n\t\t}\n\t}\n\treturn lineBreakIndexes;\n}\n\n\nfunction freeFormLineBreaks(widths, lineBreakPoint) {\n\tvar lineBreaks = [];\n\tvar totals = [];\n\tvar totalThisLine = 0;\n\t// run through each measure and see if the accumulation is less than the ideal.\n\t// if it passes the ideal, then see whether the last or this one is closer to the ideal.\n\tfor (var i = 0; i < widths.length; i++) {\n\t\tvar width = widths[i];\n\t\tvar attemptedWidth = totalThisLine + width;\n\t\tif (attemptedWidth < lineBreakPoint)\n\t\t\ttotalThisLine = attemptedWidth;\n\t\telse {\n\t\t\t// This just passed the ideal, so see whether the previous or the current number of measures is closer.\n\t\t\tvar oldDistance = lineBreakPoint - totalThisLine;\n\t\t\tvar newDistance = attemptedWidth - lineBreakPoint;\n\t\t\tif (oldDistance < newDistance && totalThisLine > 0) {\n\t\t\t\tlineBreaks.push(i - 1);\n\t\t\t\ttotals.push(Math.round(totalThisLine - width));\n\t\t\t\ttotalThisLine = width;\n\t\t\t} else {\n\t\t\t\tif (i < widths.length-1) {\n\t\t\t\t\tlineBreaks.push(i);\n\t\t\t\t\ttotals.push(Math.round(totalThisLine));\n\t\t\t\t\ttotalThisLine = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ttotals.push(Math.round(totalThisLine));\n\treturn { lineBreaks: lineBreaks, totals: totals };\n}\n\nfunction clone(arr) {\n\tvar newArr = [];\n\tfor (var i = 0; i < arr.length; i++)\n\t\tnewArr.push(arr[i]);\n\treturn newArr;\n}\n\nfunction oneTry(measureWidths, idealWidths, accumulator, lineAccumulator, lineWidths, lastVariance, highestVariance, currLine, lineBreaks, startIndex, otherTries) {\n\tfor (var i = startIndex; i < measureWidths.length; i++) {\n\t\tvar measureWidth = measureWidths[i];\n\t\taccumulator += measureWidth;\n\t\tlineAccumulator += measureWidth;\n\t\tvar thisVariance = Math.abs(accumulator - idealWidths[currLine]);\n\t\tvar varianceIsClose = Math.abs(thisVariance - lastVariance) < idealWidths[0] / 10; // see if the difference is less than 10%, if so, run the test both ways.\n\t\tif (varianceIsClose) {\n\t\t\tif (thisVariance < lastVariance) {\n\t\t\t\t// Also attempt one less measure on the current line - sometimes that works out better.\n\t\t\t\tvar newWidths = clone(lineWidths);\n\t\t\t\tvar newBreaks = clone(lineBreaks);\n\t\t\t\tnewBreaks.push(i-1);\n\t\t\t\tnewWidths.push(lineAccumulator - measureWidth);\n\t\t\t\totherTries.push({\n\t\t\t\t\taccumulator: accumulator,\n\t\t\t\t\tlineAccumulator: measureWidth,\n\t\t\t\t\tlineWidths: newWidths,\n\t\t\t\t\tlastVariance: Math.abs(accumulator - idealWidths[currLine+1]),\n\t\t\t\t\thighestVariance: Math.max(highestVariance, lastVariance),\n\t\t\t\t\tcurrLine: currLine+1,\n\t\t\t\t\tlineBreaks: newBreaks,\n\t\t\t\t\tstartIndex: i+1});\n\t\t\t} else if (thisVariance > lastVariance && i < measureWidths.length-1) {\n\t\t\t\t// Also attempt one extra measure on this line.\n\t\t\t\tnewWidths = clone(lineWidths);\n\t\t\t\tnewBreaks = clone(lineBreaks);\n\t\t\t\t// newBreaks[newBreaks.length-1] = i;\n\t\t\t\t// newWidths[newWidths.length-1] = lineAccumulator;\n\t\t\t\totherTries.push({\n\t\t\t\t\taccumulator: accumulator,\n\t\t\t\t\tlineAccumulator: lineAccumulator,\n\t\t\t\t\tlineWidths: newWidths,\n\t\t\t\t\tlastVariance: thisVariance,\n\t\t\t\t\thighestVariance: Math.max(highestVariance, thisVariance),\n\t\t\t\t\tcurrLine: currLine,\n\t\t\t\t\tlineBreaks: newBreaks,\n\t\t\t\t\tstartIndex: i+1});\n\t\t\t}\n\t\t}\n\t\tif (thisVariance > lastVariance) {\n\t\t\tlineBreaks.push(i - 1);\n\t\t\tcurrLine++;\n\t\t\thighestVariance = Math.max(highestVariance, lastVariance);\n\t\t\tlastVariance = Math.abs(accumulator - idealWidths[currLine]);\n\t\t\tlineWidths.push(lineAccumulator - measureWidth);\n\t\t\tlineAccumulator = measureWidth;\n\t\t} else {\n\t\t\tlastVariance = thisVariance;\n\t\t}\n\t}\n\tlineWidths.push(lineAccumulator);\n}\n\nfunction optimizeLineWidths(widths, lineBreakPoint, lineBreaks, explanation) {\n\t//\tfigure out how many lines\n\tvar numLines = Math.ceil(widths.total / lineBreakPoint); // + 1 TODO-PER: this used to be plus one - not sure why\n\n\t//\tget the ideal width for a line (cumulative width / num lines) - approx the same as lineBreakPoint except for rounding\n\tvar idealWidth = Math.floor(widths.total / numLines);\n\n\t//\tget each ideal line width (1*ideal, 2*ideal, 3*ideal, etc)\n\tvar idealWidths = [];\n\tfor (var i = 0; i < numLines; i++)\n\t\tidealWidths.push(idealWidth*(i+1));\n\n\t//\tfrom first measure, step through accum. Widths until the abs of the ideal is greater than the last one.\n\t// This can sometimes look funny in edge cases, so when the length is within 10%, try one more or one less to see which is better.\n\t// This is better than trying all the possibilities because that would get to be a huge number for even a medium size piece.\n\t// This method seems to never generate more than about 16 tries and it is usually 4 or less.\n\tvar otherTries = [];\n\totherTries.push({\n\t\taccumulator: 0,\n\t\tlineAccumulator: 0,\n\t\tlineWidths: [],\n\t\tlastVariance: 999999,\n\t\thighestVariance: 0,\n\t\tcurrLine: 0,\n\t\tlineBreaks: [], // These are the zero-based last measure on each line\n\t\tstartIndex: 0});\n\tvar index = 0;\n\twhile (index < otherTries.length) {\n\t\toneTry(widths.measureWidths,\n\t\t\tidealWidths,\n\t\t\totherTries[index].accumulator,\n\t\t\totherTries[index].lineAccumulator,\n\t\t\totherTries[index].lineWidths,\n\t\t\totherTries[index].lastVariance,\n\t\t\totherTries[index].highestVariance,\n\t\t\totherTries[index].currLine,\n\t\t\totherTries[index].lineBreaks,\n\t\t\totherTries[index].startIndex,\n\t\t\totherTries);\n\t\tindex++;\n\t}\n\tfor (i = 0; i < otherTries.length; i++) {\n\t\tvar otherTry = otherTries[i];\n\t\totherTry.variances = [];\n\t\totherTry.aveVariance = 0;\n\t\tfor (var j = 0; j < otherTry.lineWidths.length; j++) {\n\t\t\tvar lineWidth = otherTry.lineWidths[j];\n\t\t\totherTry.variances.push(lineWidth - idealWidths[0]);\n\t\t\totherTry.aveVariance += Math.abs(lineWidth - idealWidths[0]);\n\t\t}\n\t\totherTry.aveVariance = otherTry.aveVariance / otherTry.lineWidths.length;\n\t\texplanation.attempts.push({ type: \"optimizeLineWidths\", lineBreaks: otherTry.lineBreaks, variances: otherTry.variances, aveVariance: otherTry.aveVariance, widths: widths.measureWidths });\n\t}\n\tvar smallest = 9999999;\n\tvar smallestIndex = -1;\n\tfor (i = 0; i < otherTries.length; i++) {\n\t\totherTry = otherTries[i];\n\t\tif (otherTry.aveVariance < smallest) {\n\t\t\tsmallest = otherTry.aveVariance;\n\t\t\tsmallestIndex = i;\n\t\t}\n\t}\n\treturn { failed: false, lineBreaks: otherTries[smallestIndex].lineBreaks, variance: otherTries[smallestIndex].highestVariance };\n}\n\nfunction fixedMeasureLineBreaks(widths, lineBreakPoint, preferredMeasuresPerLine) {\n\tvar lineBreaks = [];\n\tvar totals = [];\n\tvar thisWidth = 0;\n\tvar failed = false;\n\tfor (var i = 0; i < widths.length; i++) {\n\t\tthisWidth += widths[i];\n\t\tif (thisWidth > lineBreakPoint) {\n\t\t\tfailed = true;\n\t\t}\n\t\tif (i % preferredMeasuresPerLine === (preferredMeasuresPerLine-1)) {\n\t\t\tif (i !== widths.length-1) // Don't bother putting a line break for the last line - it's already a break.\n\t\t\t\tlineBreaks.push(i);\n\t\t\ttotals.push(Math.round(thisWidth));\n\t\t\tthisWidth = 0;\n\t\t}\n\t}\n\treturn { failed: failed, totals: totals, lineBreaks: lineBreaks };\n}\n\nfunction getRevisedTuneParams(lineBreaks, staffWidth, params) {\n\n\tvar revisedParams = {\n\t\tlineBreaks: lineBreaks,\n\t\tstaffwidth: staffWidth\n\t};\n\tfor (var key in params) {\n\t\tif (params.hasOwnProperty(key) && key !== 'wrap' && key !== 'staffwidth') {\n\t\t\trevisedParams[key] = params[key];\n\t\t}\n\t}\n\n\treturn { revisedParams: revisedParams };\n}\n\nfunction calcLineWraps(tune, widths, params) {\n\t// For calculating how much can go on the line, it depends on the width of the line. It is a convenience to just divide it here\n\t// by the minimum spacing instead of multiplying the min spacing later.\n\t// The scaling works differently: this is done by changing the scaling of the outer SVG, so the scaling needs to be compensated\n\t// for here, because the actual width will be different from the calculated numbers.\n\n\t// If the desired width is less than the margin, just punt and return the original tune\n\t//console.log(widths)\n\tif (widths.length === 0 || params.staffwidth < widths[0].left) {\n\t\treturn {\n\t\t\treParse: false,\n\t\t\texplanation: \"Staff width is narrower than the margin\",\n\t\t\trevisedParams: params\n\t\t};\n\t}\n\tvar scale = params.scale ? Math.max(params.scale, 0.1) : 1;\n\tvar minSpacing = params.wrap.minSpacing ? Math.max(parseFloat(params.wrap.minSpacing), 1) : 1;\n\tvar minSpacingLimit = params.wrap.minSpacingLimit ? Math.max(parseFloat(params.wrap.minSpacingLimit), 1) : minSpacing - 0.1;\n\tvar maxSpacing = params.wrap.maxSpacing ? Math.max(parseFloat(params.wrap.maxSpacing), 1) : undefined;\n\tif (params.wrap.lastLineLimit && !maxSpacing)\n\t\tmaxSpacing = Math.max(parseFloat(params.wrap.lastLineLimit), 1);\n\t// var targetHeight = params.wrap.targetHeight ? Math.max(parseInt(params.wrap.targetHeight, 10), 100) : undefined;\n\tvar preferredMeasuresPerLine = params.wrap.preferredMeasuresPerLine ? Math.max(parseInt(params.wrap.preferredMeasuresPerLine, 10), 0) : undefined;\n\n\tvar accumulatedLineBreaks = [];\n\tvar explanations = [];\n\tfor (var s = 0; s < widths.length; s++) {\n\t\tvar section = widths[s];\n\t\tvar usableWidth = params.staffwidth - section.left;\n\t\tvar lineBreakPoint = usableWidth / minSpacing / scale;\n\t\tvar minLineSize = usableWidth / maxSpacing / scale;\n\t\tvar allowableVariance = usableWidth / minSpacingLimit / scale;\n\t\tvar explanation = {\n\t\t\twidths: section,\n\t\t\tlineBreakPoint: lineBreakPoint,\n\t\t\tminLineSize: minLineSize,\n\t\t\tattempts: [],\n\t\t\tstaffWidth: params.staffwidth,\n\t\t\tminWidth: Math.round(allowableVariance)\n\t\t};\n\n\t\t// If there is a preferred number of measures per line, test that first. If none of the lines is too long, then we're finished.\n\t\tvar lineBreaks = null;\n\t\tif (preferredMeasuresPerLine) {\n\t\t\tvar f = fixedMeasureLineBreaks(section.measureWidths, lineBreakPoint, preferredMeasuresPerLine);\n\t\t\texplanation.attempts.push({\n\t\t\t\ttype: \"Fixed Measures Per Line\",\n\t\t\t\tpreferredMeasuresPerLine: preferredMeasuresPerLine,\n\t\t\t\tlineBreaks: f.lineBreaks,\n\t\t\t\tfailed: f.failed,\n\t\t\t\ttotals: f.totals\n\t\t\t});\n\t\t\tif (!f.failed)\n\t\t\t\tlineBreaks = f.lineBreaks;\n\t\t}\n\n\t\t// If we don't have lineBreaks yet, use the free form method of line breaks.\n\t\t// This will be called either if Preferred Measures is not used, or if the music is just weird - like a single measure is way too crowded.\n\t\tif (!lineBreaks) {\n\t\t\tvar ff = freeFormLineBreaks(section.measureWidths, lineBreakPoint);\n\t\t\texplanation.attempts.push({type: \"Free Form\", lineBreaks: ff.lineBreaks, totals: ff.totals});\n\t\t\tlineBreaks = ff.lineBreaks;\n\n\t\t\t// We now have an acceptable number of lines, but the measures may not be optimally distributed. See if there is a better distribution.\n\t\t\tif (lineBreaks.length > 0 && section.measureWidths.length < 25) {\n\t\t\t\t// Only do this if everything doesn't fit on one line.\n\t\t\t\t// This is an intensive operation and it is optional so just do it for shorter music.\n\t\t\t\tff = optimizeLineWidths(section, lineBreakPoint, lineBreaks, explanation);\n\t\t\t\texplanation.attempts.push({\n\t\t\t\t\ttype: \"Optimize\",\n\t\t\t\t\tfailed: ff.failed,\n\t\t\t\t\treason: ff.reason,\n\t\t\t\t\tlineBreaks: ff.lineBreaks,\n\t\t\t\t\ttotals: ff.totals\n\t\t\t\t});\n\t\t\t\tif (!ff.failed)\n\t\t\t\t\tlineBreaks = ff.lineBreaks;\n\t\t\t}\n\t\t}\n\t\taccumulatedLineBreaks.push(lineBreaks);\n\t\texplanations.push(explanation);\n\t}\n\t// If the vertical space exceeds targetHeight, remove a line and try again. If that is too crowded, then don't use it.\n\tvar staffWidth = params.staffwidth;\n\tvar ret = getRevisedTuneParams(accumulatedLineBreaks, staffWidth, params);\n\tret.explanation = explanations;\n\tret.reParse = true;\n\treturn ret;\n}\n\nmodule.exports = { wrapLines: wrapLines, calcLineWraps: calcLineWraps };\n","var keyAccidentals = require(\"../const/key-accidentals\");\nvar { relativeMajor, transposeKey, relativeMode } = require(\"../const/relative-major\");\nvar transposeChordName = require(\"../parse/transpose-chord\")\n\nvar strTranspose;\n\n(function () {\n\t\"use strict\";\n\tstrTranspose = function (abc, abcTune, steps) {\n\t\tif (abcTune === \"TEST\") // Backdoor way to get entry points for unit tests\n\t\t\treturn { keyAccidentals: keyAccidentals, relativeMajor: relativeMajor, transposeKey: transposeKey, relativeMode: relativeMode, transposeChordName: transposeChordName}\n\t\tsteps = parseInt(steps, 10)\n\t\tvar changes = [];\n\t\tvar i;\n\t\tfor (i = 0; i < abcTune.length; i++)\n\t\t\tchanges = changes.concat(transposeOneTune(abc, abcTune[i], steps))\n\n\t\t// Reverse sort so that we are replacing strings from the end to the beginning so that the indexes aren't invalidated as we go.\n\t\t// (Because voices can be written in different ways we can't count on the notes being encountered in the order they appear in the string.)\n\t\tchanges = changes.sort(function (a, b) {\n\t\t\treturn b.start - a.start\n\t\t})\n\t\tvar output = abc.split('')\n\t\tfor (i = 0; i < changes.length; i++) {\n\t\t\tvar ch = changes[i]\n\t\t\toutput.splice(ch.start, ch.end - ch.start, ch.note)\n\t\t}\n\t\treturn output.join('')\n\t}\n\n\tfunction transposeOneTune(abc, abcTune, steps) {\n\t\tvar changes = []\n\n\t\t// Don't transpose bagpipe music - that is a special case and is always a particular key\n\t\tvar key = abcTune.getKeySignature()\n\t\tif (key.root === 'Hp' || key.root === \"HP\")\n\t\t\treturn changes;\n\n\t\tchanges = changes.concat(changeAllKeySigs(abc, steps))\n\n\t\tfor (var i = 0; i < abcTune.lines.length; i++) {\n\t\t\tvar staves = abcTune.lines[i].staff\n\t\t\tif (staves) {\n\t\t\t\tfor (var j = 0; j < staves.length; j++) {\n\t\t\t\t\tvar staff = staves[j]\n\t\t\t\t\tif (staff.clef.type !== \"perc\")\n\t\t\t\t\t\tchanges = changes.concat(transposeVoices(abc, staff.voices, staff.key, steps))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction changeAllKeySigs(abc, steps) {\n\t\tvar changes = [];\n\t\tvar arr = abc.split(\"K:\")\n\t\t// now each line except the first one will start with whatever is right after \"K:\"\n\t\tvar count = arr[0].length\n\t\tfor (var i = 1; i < arr.length; i++) {\n\t\t\tvar segment = arr[i]\n\t\t\tvar match = segment.match(/^( *)([A-G])([#b]?)(\\w*)/)\n\t\t\tif (match) {\n\t\t\t\tvar start = count + 2 + match[1].length // move past the 'K:' and optional white space\n\t\t\t\tvar key = match[2] + match[3] + match[4] // key name, accidental, and mode\n\t\t\t\tvar destinationKey = newKey({ root: match[2], acc: match[3], mode: match[4] }, steps)\n\t\t\t\tvar dest = destinationKey.root + destinationKey.acc + destinationKey.mode\n\t\t\t\tchanges.push({ start: start, end: start + key.length, note: dest })\n\t\t\t}\n\t\t\tcount += segment.length + 2\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction transposeVoices(abc, voices, key, steps) {\n\t\tvar changes = [];\n\t\tvar destinationKey = newKey(key, steps)\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tchanges = changes.concat(transposeVoice(abc, voices[i], key.root, createKeyAccidentals(key), destinationKey, steps))\n\t\t}\n\t\treturn changes\n\t}\n\n\tfunction createKeyAccidentals(key) {\n\t\tvar ret = {}\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tvar acc = key.accidentals[i];\n\t\t\tif (acc.acc === 'flat')\n\t\t\t\tret[acc.note.toUpperCase()] = '_'\n\t\t\telse if (acc.acc === 'sharp')\n\t\t\t\tret[acc.note.toUpperCase()] = '^'\n\t\t}\n\t\treturn ret\n\t}\n\n\tfunction setLetterDistance(destinationKey, keyRoot, steps) {\n\t\tvar letterDistance = letters.indexOf(destinationKey.root) - letters.indexOf(keyRoot)\n\t\tif (keyRoot === \"none\")\n\t\t\tletterDistance = letters.indexOf(destinationKey.root)\n\t\tif (letterDistance === 0) {\n\t\t\t// This could either be a half step (like Eb => E) or almost an octave (like E => Eb)\n\t\t\tif (steps > 2) // If it is a large leap, then we are going up an octave\n\t\t\t\tletterDistance += 7\n\t\t\telse if (steps === -12) // If it is a large leap, then we are going down an octave\t\n\t\t\t \tletterDistance -= 7\n\t\t} else if (steps > 0 && letterDistance < 0) \n\t\t\tletterDistance += 7\n\t\telse if (steps < 0 && letterDistance > 0) \n\t\t\tletterDistance -= 7\n\n\t\tif (steps > 12)\n\t\t\tletterDistance += 7\n\t\telse if (steps < -12)\n\t\t\tletterDistance -= 7\n\n\t\treturn letterDistance\n\t}\n\n\tfunction transposeVoice(abc, voice, keyRoot, keyAccidentals, destinationKey, steps) {\n\t\tvar changes = []\n\t\tvar letterDistance = setLetterDistance(destinationKey, keyRoot, steps)\n\n\t\tvar measureAccidentals = {}\n\t\tvar transposedMeasureAccidentals = {}\n\t\tfor (var i = 0; i < voice.length; i++) {\n\t\t\tvar el = voice[i];\n\t\t\tif (el.chord) {\n\t\t\t\tfor (var c = 0; c < el.chord.length; c++) {\n\t\t\t\t\tvar ch = el.chord[c]\n\t\t\t\t\tif (ch.position === 'default') {\n\t\t\t\t\t\tvar prefersFlats = destinationKey.accidentals.length && destinationKey.accidentals[0].acc === 'flat'\n\t\t\t\t\t\tvar newChord = transposeChordName(ch.name, steps, prefersFlats, true)\n\t\t\t\t\t\tnewChord = newChord.replace(/♭/g, \"b\").replace(/♯/g, \"#\")\n\t\t\t\t\t\tif (newChord !== ch.name) // If we didn't recognize the chord the input is returned unchanged and there is nothing to replace\n\t\t\t\t\t\t\tchanges.push(replaceChord(abc, el.startChar, el.endChar, newChord))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (el.el_type === 'note' && el.pitches) {\n\t\t\t\tfor (var j = 0; j < el.pitches.length; j++) {\n\t\t\t\t\tvar note = parseNote(el.pitches[j].name, keyRoot, keyAccidentals, measureAccidentals)\n\t\t\t\t\tif (note.acc)\n\t\t\t\t\t\tmeasureAccidentals[note.name.toUpperCase()] = note.acc\n\t\t\t\t\tvar newPitch = transposePitch(note, destinationKey, letterDistance, transposedMeasureAccidentals)\n\t\t\t\t\tif (newPitch.acc)\n\t\t\t\t\t\ttransposedMeasureAccidentals[newPitch.upper] = newPitch.acc\n\t\t\t\t\tchanges.push(replaceNote(abc, el.startChar, el.endChar, newPitch.acc + newPitch.name, j))\n\t\t\t\t}\n\t\t\t\tif (el.gracenotes) {\n\t\t\t\t\tfor (var g = 0; g < el.gracenotes.length; g++) {\n\t\t\t\t\t\tvar grace = parseNote(el.gracenotes[g].name, keyRoot, keyAccidentals, measureAccidentals)\n\t\t\t\t\t\tif (grace.acc)\n\t\t\t\t\t\t\tmeasureAccidentals[grace.name.toUpperCase()] = grace.acc\n\t\t\t\t\t\tvar newGrace = transposePitch(grace, destinationKey, letterDistance, measureAccidentals)\n\t\t\t\t\t\tif (newGrace.acc)\n\t\t\t\t\t\t\ttransposedMeasureAccidentals[newGrace.upper] = newGrace.acc\n\t\t\t\t\t\tchanges.push(replaceGrace(abc, el.startChar, el.endChar, newGrace.acc + newGrace.name, g))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (el.el_type === \"bar\") {\n\t\t\t\tmeasureAccidentals = {}\n\t\t\t\ttransposedMeasureAccidentals = {}\n\t\t\t} else if (el.el_type === \"keySignature\") {\n\t\t\t\tkeyRoot = el.root\n\t\t\t\tkeyAccidentals = createKeyAccidentals(el)\n\t\t\t\tdestinationKey = newKey(el, steps)\n\t\t\t\tletterDistance = setLetterDistance(destinationKey, keyRoot, steps)\n\t\t\t}\n\t\t}\n\t\treturn changes\n\t}\n\n\tvar letters = \"CDEFGAB\"\n\tvar octaves = [\",,,,\", \",,,\", \",,\", \",\", \"\", \"'\", \"''\", \"'''\", \"''''\"]\n\n\tfunction newKey(key, steps) {\n\t\tif (key.root === \"none\") {\n\t\t\treturn { root: transposeKey(\"C\", steps), mode: \"\", acc: \"\", accidentals: [] }\n\t\t}\n\t\tvar major = relativeMajor(key.root + key.acc + key.mode)\n\t\tvar newMajor = transposeKey(major, steps)\n\t\tvar newMode = relativeMode(newMajor, key.mode)\n\t\tvar acc = keyAccidentals(newMajor)\n\t\treturn { root: newMode[0], mode: key.mode, acc: newMode.length > 1 ? newMode[1] : '', accidentals: acc }\n\t}\n\n\tfunction transposePitch(note, key, letterDistance, measureAccidentals) {\n\t\t// Depending on what the current note and new note are, the octave might have changed\n\t\t// The letterDistance is how far the change is to see if we passed \"C\" when transposing.\n\n\t\tvar pitch = note.pitch\n\t\tvar origDistFromC = letters.indexOf(note.name)\n\t\tvar root = letters.indexOf(key.root)\n\t\tvar index = (root + pitch) % 7\n\t\t// if the note crosses \"c\" then the octave changes, so that is true of \"B\" when going up one step, \"A\" and \"B\" when going up two steps, etc., and reverse when going down.\n\t\tvar newDistFromC = origDistFromC + letterDistance\n\t\tvar oct = note.oct\n\t\twhile (newDistFromC > 6) {\n\t\t\toct++\n\t\t\tnewDistFromC -= 7\n\t\t}\n\t\twhile (newDistFromC < 0) {\n\t\t\toct--\n\t\t\tnewDistFromC += 7\n\t\t}\n\n\t\tvar name = letters[index]\n\n\t\tvar acc = '';\n\t\tvar adj = note.adj\n\t\t// the amount of adjustment depends on the key - if there is a sharp in the key sig, then -1 is a natural, if there isn't, then -1 is a flat.\n\t\tvar keyAcc = '=';\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tif (key.accidentals[i].note.toLowerCase() === name.toLowerCase()) {\n\t\t\t\tadj = adj + (key.accidentals[i].acc === 'flat' ? -1 : 1)\n\t\t\t\tkeyAcc = (key.accidentals[i].acc === 'flat' ? '_' : '^')\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tswitch (adj) {\n\t\t\tcase -2: acc = \"__\"; break;\n\t\t\tcase -1: acc = \"_\"; break;\n\t\t\tcase 0: acc = \"=\"; break;\n\t\t\tcase 1: acc = \"^\"; break;\n\t\t\tcase 2: acc = \"^^\"; break;\n\t\t\tcase -3:\n\t\t\t\t// This requires a triple flat, so bump down the pitch and try again\n\t\t\t\tvar newNote = {}\n\t\t\t\tnewNote.pitch = note.pitch - 1\n\t\t\t\tnewNote.oct = note.oct\n\t\t\t\tnewNote.name = letters[letters.indexOf(note.name) - 1]\n\t\t\t\tif (!newNote.name) {\n\t\t\t\t\tnewNote.name = \"B\"\n\t\t\t\t\tnewNote.oct--\n\t\t\t\t}\n\t\t\t\tif (newNote.name === \"B\" || newNote.name === \"E\")\n\t\t\t\t\tnewNote.adj = note.adj + 1;\n\t\t\t\telse\n\t\t\t\t\tnewNote.adj = note.adj + 2;\n\t\t\t\treturn transposePitch(newNote, key, letterDistance + 1, measureAccidentals)\n\t\t\tcase 3:\n\t\t\t\t// This requires a triple sharp, so bump up the pitch and try again\n\t\t\t\tvar newNote = {}\n\t\t\t\tnewNote.pitch = note.pitch + 1\n\t\t\t\tnewNote.oct = note.oct\n\t\t\t\tnewNote.name = letters[letters.indexOf(note.name) + 1]\n\t\t\t\tif (!newNote.name) {\n\t\t\t\t\tnewNote.name = \"C\"\n\t\t\t\t\tnewNote.oct++\n\t\t\t\t}\n\t\t\t\tif (newNote.name === \"C\" || newNote.name === \"F\")\n\t\t\t\t\tnewNote.adj = note.adj - 1;\n\t\t\t\telse\n\t\t\t\t\tnewNote.adj = note.adj - 2;\n\t\t\t\treturn transposePitch(newNote, key, letterDistance + 1, measureAccidentals)\n\t\t}\n\t\tif ((measureAccidentals[name] === acc || (!measureAccidentals[name] && acc === keyAcc)) && !note.courtesy)\n\t\t\tacc = \"\"\n\n\t\tswitch (oct) {\n\t\t\tcase 0: name = name + \",,,\"; break;\n\t\t\tcase 1: name = name + \",,\"; break;\n\t\t\tcase 2: name = name + \",\"; break;\n\t\t\t// case 3: it is already correct\n\t\t\tcase 4: name = name.toLowerCase(); break;\n\t\t\tcase 5: name = name.toLowerCase() + \"'\"; break;\n\t\t\tcase 6: name = name.toLowerCase() + \"''\"; break;\n\t\t\tcase 7: name = name.toLowerCase() + \"'''\"; break;\n\t\t\tcase 8: name = name.toLowerCase() + \"''''\"; break;\n\t\t}\n\t\tif (oct > 4)\n\t\t\tname = name.toLowerCase();\n\n\t\treturn { acc: acc, name: name, upper: name.toUpperCase() }\n\t}\n\n\tvar regPitch = /([_^=]*)([A-Ga-g])([,']*)/\n\tvar regNote = /([_^=]*[A-Ga-g][,']*)(\\d*\\/*\\d*)([\\>\\<\\-\\)\\.\\s\\\\]*)/\n\tvar regOptionalNote = /([_^=]*[A-Ga-g][,']*)?(\\d*\\/*\\d*)?([\\>\\<\\-\\)]*)?/\n\tvar regSpace = /(\\s*)$/\n\n\t// This the relationship of the note to the tonic and an octave. So what is returned is a distance in steps from the tonic and the amount of adjustment from\n\t// a normal scale. That is - in the key of D an F# is two steps from the tonic and no adjustment. A G# is three steps from the tonic and one half-step higher.\n\t// I don't think there is any adjustment needed for minor keys since the adjustment is based on the key signature and the accidentals.\n\tfunction parseNote(note, keyRoot, keyAccidentals, measureAccidentals) {\n\t\tvar root = keyRoot === \"none\" ? 0 : letters.indexOf(keyRoot)\n\t\tvar reg = note.match(regPitch)\n\t\t// reg[1] : \"__\", \"_\", \"\", \"=\", \"^\", or \"^^\"\n\t\t// reg[2] : A-G a-g\n\t\t// reg[3] : commas or apostrophes\n\t\tvar name = reg[2].toUpperCase()\n\t\tvar pos = letters.indexOf(name) - root;\n\t\tif (pos < 0) pos += 7\n\t\tvar oct = octaves.indexOf(reg[3])\n\t\tif (name === reg[2]) // See if it is a capital letter and subtract an octave if so.\n\t\t\toct--;\n\t\tvar currentAcc = measureAccidentals[name] || keyAccidentals[name] || \"=\" // use the key accidentals if they exist, but override with the measure accidentals, and if neither of them exist, use a natural.\n\t\treturn { acc: reg[1], name: name, pitch: pos, oct: oct, adj: calcAdjustment(reg[1], keyAccidentals[name], measureAccidentals[name]), courtesy: reg[1] === currentAcc }\n\t}\n\n\tfunction replaceNote(abc, start, end, newPitch, index) {\n\t\t// There may be more than just the note between the start and end - there could be spaces, there could be a chord symbol, there could be a decoration.\n\t\t// This could also be a part of a chord. If so, then the particular note needs to be teased out.\n\t\tvar note = abc.substring(start, end)\n\t\tvar match = note.match(new RegExp(regNote.source + regSpace.source), '')\n\t\tif (match) {\n\t\t\t// This will match a single note\n\t\t\tvar noteLen = match[1].length\n\t\t\tvar trailingLen = match[2].length + match[3].length + match[4].length\n\t\t\tvar leadingLen = end - start - noteLen - trailingLen\n\t\t\tstart += leadingLen\n\t\t\tend -= trailingLen\n\t\t} else {\n\t\t\t// I don't know how to capture more than one note, so I'm separating them. There is a limit of the number of notes in a chord depending on the repeats I have here, but it is unlikely to happen in real music.\n\t\t\tvar regPreBracket = /([^\\[]*)/\n\t\t\tvar regOpenBracket = /\\[/\n\t\t\tvar regCloseBracket = /\\-?](\\d*\\/*\\d*)?([\\>\\<\\-\\)]*)/\n\t\t\tmatch = note.match(new RegExp(regPreBracket.source + regOpenBracket.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regOptionalNote.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regOptionalNote.source + regOptionalNote.source +\n\t\t\t\tregOptionalNote.source + regCloseBracket.source + regSpace.source))\n\n\t\t\tif (match) {\n\t\t\t\t// This will match a chord\n\t\t\t\t// Get the number of chars used by the previous notes in this chord\n\t\t\t\tvar count = 1 + match[1].length // one character for the open bracket\n\t\t\t\tfor (var i = 0; i < index; i++) { // index is the iteration through the chord. This function gets called for each one.\n\t\t\t\t\tif (match[i * 3 + 2])\n\t\t\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\t\t\tif (match[i * 3 + 3])\n\t\t\t\t\t\tcount += match[i * 3 + 3].length\n\t\t\t\t\tif (match[i * 3 + 4])\n\t\t\t\t\t\tcount += match[i * 3 + 4].length\n\t\t\t\t}\n\t\t\t\tstart += count\n\t\t\t\tvar endLen = match[index * 3 + 2] ? match[index * 3 + 2].length : 0\n\t\t\t\t// endLen += match[index * 3 + 3] ? match[index * 3 + 3].length : 0\n\t\t\t\t// endLen += match[index * 3 + 4] ? match[index * 3 + 4].length : 0\n\n\t\t\t\tend = start + endLen\n\t\t\t}\n\t\t}\n\t\treturn { start: start, end: end, note: newPitch }\n\t}\n\n\tfunction replaceGrace(abc, start, end, newGrace, index) {\n\t\tvar note = abc.substring(start, end)\n\t\t// I don't know how to capture more than one note, so I'm separating them. There is a limit of the number of notes in a chord depending on the repeats I have here, but it is unlikely to happen in real music.\n\t\tvar regOpenBrace = /\\{/\n\t\tvar regCloseBrace = /\\}/\n\t\tvar regPreBrace = /([^\\{]*)/\n\t\tvar regPreNote = /(\\/*)/\n\t\tvar match = note.match(new RegExp(regPreBrace.source + regOpenBrace.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source + regPreNote.source + regOptionalNote.source +\n\t\t\tregPreNote.source + regOptionalNote.source + regCloseBrace.source))\n\t\tif (match) {\n\t\t\t// This will match all notes inside a grace symbol\n\t\t\t// Get the number of chars used by the previous graces\n\t\t\tvar count = 1 + match[1].length // one character for the open brace, and whatever comes before the brace\n\t\t\tfor (var i = 0; i < index; i++) { // index is the iteration through the chord. This function gets called for each one.\n\t\t\t\tif (match[i * 3 + 2])\n\t\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\t\tif (match[i * 3 + 3])\n\t\t\t\t\tcount += match[i * 3 + 3].length\n\t\t\t\tif (match[i * 3 + 4])\n\t\t\t\t\tcount += match[i * 3 + 4].length\n\t\t\t\tif (match[i * 3 + 5])\n\t\t\t\t\tcount += match[i * 3 + 5].length\n\t\t\t}\n\t\t\tif (match[index * 3 + 2])\n\t\t\t\tcount += match[i * 3 + 2].length\n\t\t\tstart += count\n\t\t\tvar endLen = match[index * 3 + 3] ? match[index * 3 + 3].length : 0\n\t\t\tendLen += match[index * 3 + 4] ? match[index * 3 + 4].length : 0\n\t\t\tendLen += match[index * 3 + 5] ? match[index * 3 + 5].length : 0\n\n\t\t\tend = start + endLen\n\t\t}\n\t\treturn { start: start, end: end, note: newGrace }\n\t}\n\n\tfunction replaceChord(abc, start, end, newChord) {\n\t\t// Isolate the chord and just replace that\n\t\tvar match = abc.substring(start, end).match(/([^\"]+)?(\".+\")+/)\n\t\tif (match[1])\n\t\t\tstart += match[1].length\n\t\tend = start + match[2].length\n\t\t// leave the quote in, so skip one more\n\t\treturn { start: start + 1, end: end - 1, note: newChord }\n\t}\n\n\tfunction calcAdjustment(thisAccidental, keyAccidental, measureAccidental) {\n\t\tif (!thisAccidental && measureAccidental) {\n\t\t\t// There was no accidental on this note, but there was earlier in the measure, so we'll use that\n\t\t\tthisAccidental = measureAccidental\n\t\t}\n\t\tif (!thisAccidental)\n\t\t\treturn 0; // there is no deviation from the key.\n\n\t\tswitch (keyAccidental) {\n\t\t\tcase undefined:\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -2;\n\t\t\t\t\tcase '_': return -1;\n\t\t\t\t\tcase '=': return 0;\n\t\t\t\t\tcase '^': return 1;\n\t\t\t\t\tcase '^^': return 2;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t\tcase '_':\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -1;\n\t\t\t\t\tcase '_': return 0;\n\t\t\t\t\tcase '=': return 1;\n\t\t\t\t\tcase '^': return 2;\n\t\t\t\t\tcase '^^': return 3;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t\tcase '^':\n\t\t\t\tswitch (thisAccidental) {\n\t\t\t\t\tcase '__': return -3;\n\t\t\t\t\tcase '_': return -2;\n\t\t\t\t\tcase '=': return -1;\n\t\t\t\t\tcase '^': return 0;\n\t\t\t\t\tcase '^^': return 1;\n\t\t\t\t\tdefault: return 0; // this should never happen\n\t\t\t\t}\n\t\t}\n\t\treturn 0// this should never happen\n\t}\n})();\n\nmodule.exports = strTranspose;\n","// abc_midi_flattener.js: Turn a linear series of events into a series of MIDI commands.\n\n// We input a set of voices, but the notes are still complex. This pass changes the logical definitions\n// of the grace notes, decorations, ties, triplets, rests, transpositions, keys, and accidentals into actual note durations.\n// It also extracts guitar chords to a separate voice and resolves their rhythm.\n\nvar flatten;\nvar parseCommon = require(\"../parse/abc_common\");\nvar pitchesToPerc = require('./pitches-to-perc');\n\n(function() {\n\t\"use strict\";\n\n\tvar barAccidentals;\n\tvar accidentals;\n\tvar transpose;\n\tvar bagpipes;\n\tvar tracks;\n\tvar startingTempo;\n\tvar startingMeter;\n\tvar tempoChangeFactor = 1;\n\tvar instrument;\n\tvar currentInstrument;\n\t// var channel;\n\tvar currentTrack;\n\tvar lastNoteDurationPosition;\n\tvar currentTrackName;\n\tvar lastEventTime;\n\n\tvar meter = { num: 4, den: 4 };\n\tvar chordTrack;\n\tvar chordSourceTrack;\n\tvar chordTrackFinished;\n\tvar chordChannel;\n\tvar bassInstrument = 0;\n\tvar chordInstrument = 0;\n\tvar drumInstrument = 128;\n\tvar boomVolume = 64;\n\tvar chickVolume = 48;\n\tvar currentChords;\n\tvar lastChord;\n\tvar chordLastBar;\n\tvar lastBarTime;\n\tvar gChordTacet = false;\n\tvar hasRhythmHead = false;\n\tvar doBeatAccents = true;\n\tvar stressBeat1 = 105;\n\tvar stressBeatDown = 95;\n\tvar stressBeatUp = 85;\n\tvar beatFraction = 0.25;\n\tvar nextVolume;\n\tvar nextVolumeDelta;\n\tvar slurCount = 0;\n\n\tvar drumTrack;\n\tvar drumTrackFinished;\n\tvar drumDefinition = {};\n\tvar drumBars;\n\n\tvar pickupLength = 0;\n\tvar percmap;\n\n\t// The gaps per beat. The first two are in seconds, the third is in fraction of a duration.\n\tvar normalBreakBetweenNotes = 0; //0.000520833333325*1.5; // for articulation (matches muse score value)\n\tvar slurredBreakBetweenNotes = -0.001; // make the slurred notes actually overlap\n\tvar staccatoBreakBetweenNotes = 0.4; // some people say staccato is half duration, some say 3/4 so this splits it\n\n\tflatten = function(voices, options, percmap_, midiOptions) {\n\t\tif (!options) options = {};\n\t\tif (!midiOptions) midiOptions = {};\n\t\tbarAccidentals = [];\n\t\taccidentals = [0,0,0,0,0,0,0];\n\t\tbagpipes = false;\n\t\ttracks = [];\n\t\tstartingTempo = options.qpm;\n\t\tstartingMeter = undefined;\n\t\ttempoChangeFactor = 1;\n\t\tinstrument = undefined;\n\t\tcurrentInstrument = undefined;\n\t\t// channel = undefined;\n\t\tcurrentTrack = undefined;\n\t\tcurrentTrackName = undefined;\n\t\tlastEventTime = 0;\n\t\tpercmap = percmap_;\n\n\t\t// For resolving chords.\n\t\tmeter = { num: 4, den: 4 };\n\t\tchordTrack = [];\n\t\tchordSourceTrack = false;\n\t\tchordChannel = voices.length; // first free channel for chords\n\t\tchordTrackFinished = false;\n\t\tcurrentChords = [];\n\t\tbassInstrument = midiOptions.bassprog && midiOptions.bassprog.length === 1 ? midiOptions.bassprog[0] : 0;\n\t\tchordInstrument = midiOptions.chordprog && midiOptions.chordprog.length === 1 ? midiOptions.chordprog[0] : 0;\n\t\tboomVolume = midiOptions.bassvol && midiOptions.bassvol.length === 1 ? midiOptions.bassvol[0] : 64;\n\t\tchickVolume = midiOptions.chordvol && midiOptions.chordvol.length === 1 ? midiOptions.chordvol[0] : 48;\n\t\tlastChord = undefined;\n\t\tchordLastBar = undefined;\n\t\tgChordTacet = options.chordsOff ? true : false;\n\t\thasRhythmHead = false;\n\n\t\tdoBeatAccents = true;\n\t\tstressBeat1 = 105;\n\t\tstressBeatDown = 95;\n\t\tstressBeatUp = 85;\n\t\tbeatFraction = 0.25;\n\t\tnextVolume = undefined;\n\t\tnextVolumeDelta = undefined;\n\t\tslurCount = 0;\n\n\t\t// For the drum/metronome track.\n\t\tdrumTrack = [];\n\t\tdrumTrackFinished = false;\n\t\tdrumDefinition = {};\n\t\tdrumBars = 1;\n\n\t\tif (voices.length > 0 && voices[0].length > 0)\n\t\t\tpickupLength = voices[0][0].pickupLength;\n\n\t\t// First adjust the input to resolve ties, set the starting time for each note, etc. That will make the rest of the logic easier\n\t\tpreProcess(voices, options);\n\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\ttranspose = 0;\n\t\t\tlastNoteDurationPosition = -1;\n\t\t\tvar voice = voices[i];\n\t\t\tcurrentTrack = [{ cmd: 'program', channel: i, instrument: instrument }];\n\t\t\tcurrentTrackName = undefined;\n\t\t\tlastBarTime = 0;\n\t\t\tvar voiceOff = false;\n\t\t\tif (options.voicesOff === true)\n\t\t\t\tvoiceOff = true;\n\t\t\telse if (options.voicesOff && options.voicesOff.length && options.voicesOff.indexOf(i) >= 0)\n\t\t\t\tvoiceOff = true;\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar element = voice[j];\n\t\t\t\tswitch (element.el_type) {\n\t\t\t\t\tcase \"name\":\n\t\t\t\t\t\tcurrentTrackName = {cmd: 'text', type: \"name\", text: element.trackName };\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"note\":\n\t\t\t\t\t\tvar setChordTrack = writeNote(element, voiceOff);\n\t\t\t\t\t\tif (setChordTrack)\n\t\t\t\t\t\t\tchordSourceTrack = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"key\":\n\t\t\t\t\t\taccidentals = setKeySignature(element);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"meter\":\n\t\t\t\t\t\tif (!startingMeter)\n\t\t\t\t\t\t\tstartingMeter = element;\n\t\t\t\t\t\tmeter = element;\n\t\t\t\t\t\tbeatFraction = getBeatFraction(meter);\n\t\t\t\t\t\talignDrumToMeter();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tempo\":\n\t\t\t\t\t\tif (!startingTempo)\n\t\t\t\t\t\t\tstartingTempo = element.qpm;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttempoChangeFactor = element.qpm ? startingTempo / element.qpm : 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"transpose\":\n\t\t\t\t\t\ttranspose = element.transpose;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bar\":\n\t\t\t\t\t\tif (chordTrack.length > 0 && (chordSourceTrack === false || i === chordSourceTrack)) {\n\t\t\t\t\t\t\tresolveChords(lastBarTime, timeToRealTime(element.time));\n\t\t\t\t\t\t\tcurrentChords = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbarAccidentals = [];\n\t\t\t\t\t\tif (i === 0) // Only write the drum part on the first voice so that it is not duplicated.\n\t\t\t\t\t\t\twriteDrum(voices.length+1);\n\t\t\t\t\t\thasRhythmHead = false; // decide whether there are rhythm heads each measure.\n\t\t\t\t\t\tchordLastBar = lastChord;\n\t\t\t\t\t\tlastBarTime = timeToRealTime(element.time);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bagpipes\":\n\t\t\t\t\t\tbagpipes = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"instrument\":\n\t\t\t\t\t\tif (instrument === undefined)\n\t\t\t\t\t\t\tinstrument = element.program;\n\t\t\t\t\t\tcurrentInstrument = element.program;\n\t\t\t\t\t\tif (currentTrack.length > 0 && currentTrack[currentTrack.length-1].cmd === 'program')\n\t\t\t\t\t\t\tcurrentTrack[currentTrack.length-1].instrument = element.program;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar ii;\n\t\t\t\t\t\t\tfor (ii = currentTrack.length-1; ii >= 0 && currentTrack[ii].cmd !== 'program'; ii--)\n\t\t\t\t\t\t\t\t;\n\t\t\t\t\t\t\tif (ii < 0 || currentTrack[ii].instrument !== element.program)\n\t\t\t\t\t\t\t\tcurrentTrack.push({cmd: 'program', channel: 0, instrument: element.program});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"channel\":\n\t\t\t\t\t\tsetChannel(element.channel);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"drum\":\n\t\t\t\t\t\tdrumDefinition = normalizeDrumDefinition(element.params);\n\t\t\t\t\t\talignDrumToMeter();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gchord\":\n\t\t\t\t\t\tif (!options.chordsOff)\n\t\t\t\t\t\t\tgChordTacet = element.tacet;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"beat\":\n\t\t\t\t\t\tstressBeat1 = element.beats[0];\n\t\t\t\t\t\tstressBeatDown = element.beats[1];\n\t\t\t\t\t\tstressBeatUp = element.beats[2];\n\t\t\t\t\t\t// TODO-PER: also use the last parameter - which changes which beats are strong.\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"vol\":\n\t\t\t\t\t\tnextVolume = element.volume;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"volinc\":\n\t\t\t\t\t\tnextVolumeDelta = element.volume;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"beataccents\":\n\t\t\t\t\t\tdoBeatAccents = element.value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// This should never happen\n\t\t\t\t\t\tconsole.log(\"MIDI creation. Unknown el_type: \" + element.el_type + \"\\n\");// jshint ignore:line\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (currentTrack[0].instrument === undefined)\n\t\t\t\tcurrentTrack[0].instrument = instrument ? instrument : 0;\n\t\t\tif (currentTrackName)\n\t\t\t\tcurrentTrack.unshift(currentTrackName);\n\t\t\ttracks.push(currentTrack);\n\t\t\tif (!chordTrackEmpty()) // Don't do chords on more than one track, so turn off chord detection after we create it.\n\t\t\t\tchordTrackFinished = true;\n\t\t\tif (drumTrack.length > 0) // Don't do drums on more than one track, so turn off drum after we create it.\n\t\t\t\tdrumTrackFinished = true;\n\t\t}\n\t\t// See if any notes are octaves played at the same time. If so, raise the pitch of the higher one.\n\t\tif (options.detuneOctave)\n\t\t\tfindOctaves(tracks, parseInt(options.detuneOctave, 10));\n\n\t\tif (!chordTrackEmpty())\n\t\t\ttracks.push(chordTrack);\n\t\tif (drumTrack.length > 0)\n\t\t\ttracks.push(drumTrack);\n\n\t\treturn { tempo: startingTempo, instrument: instrument, tracks: tracks, totalDuration: lastEventTime };\n\t};\n\n\tfunction setChannel(channel) {\n\t\tfor (var i = currentTrack.length-1; i>=0; i--) {\n\t\t\tif (currentTrack[i].cmd === \"program\") {\n\t\t\t\tcurrentTrack[i].channel = channel;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction chordTrackEmpty() {\n\t\tvar isEmpty = true;\n\t\tfor (var i = 0; i < chordTrack.length && isEmpty; i++) {\n\t\t\tif (chordTrack[i].cmd === 'note')\n\t\t\t\tisEmpty = false\n\t\t}\n\t\treturn isEmpty;\n\t}\n\n\tfunction timeToRealTime(time) {\n\t\treturn time/1000000;\n\t}\n\n\tfunction durationRounded(duration) {\n\t\treturn Math.round(duration*tempoChangeFactor*1000000)/1000000;\n\t}\n\n\tfunction preProcess(voices, options) {\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar ties = {};\n\t\t\tvar startingTempo = options.qpm;\n\t\t\tvar timeCounter = 0;\n\t\t\tvar tempoMultiplier = 1;\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar element = voice[j];\n\n\t\t\t\tif (element.el_type === 'tempo') {\n\t\t\t\t\tif (!startingTempo)\n\t\t\t\t\t\tstartingTempo = element.qpm;\n\t\t\t\t\telse\n\t\t\t\t\t\ttempoMultiplier = element.qpm ? startingTempo / element.qpm : 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// For convenience, put the current time in each event so that it doesn't have to be calculated in the complicated stuff that follows.\n\t\t\t\telement.time = timeCounter;\n\t\t\t\tvar thisDuration = element.duration ? element.duration : 0;\n\t\t\t\ttimeCounter += Math.round(thisDuration*tempoMultiplier*1000000); // To compensate for JS rounding problems, do all intermediate calcs on integers.\n\n\t\t\t\t// If there are pitches then put the duration in the pitch object and if there are ties then change the duration of the first note in the tie.\n\t\t\t\tif (element.pitches) {\n\t\t\t\t\tfor (var k = 0; k < element.pitches.length; k++) {\n\t\t\t\t\t\tvar pitch = element.pitches[k];\n\t\t\t\t\t\tif (pitch) {\n\t\t\t\t\t\t\tpitch.duration = element.duration;\n\t\t\t\t\t\t\tif (pitch.startTie) {\n\t\t\t\t\t\t\t\t//console.log(element)\n\t\t\t\t\t\t\t\tif (ties[pitch.pitch] === undefined) // We might have three notes tied together - if so just add this duration.\n\t\t\t\t\t\t\t\t\tties[pitch.pitch] = {el: j, pitch: k};\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tvoice[ties[pitch.pitch].el].pitches[ties[pitch.pitch].pitch].duration += pitch.duration;\n\t\t\t\t\t\t\t\t\telement.pitches[k] = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//console.log(\">>> START\", JSON.stringify(ties));\n\t\t\t\t\t\t\t} else if (pitch.endTie) {\n\t\t\t\t\t\t\t\t//console.log(element)\n\t\t\t\t\t\t\t\tvar tie = ties[pitch.pitch];\n\t\t\t\t\t\t\t\t//console.log(\">>> END\", pitch.pitch, tie, JSON.stringify(ties));\n\t\t\t\t\t\t\t\tif (tie) {\n\t\t\t\t\t\t\t\t\tvar dur = pitch.duration;\n\t\t\t\t\t\t\t\t\tdelete voice[tie.el].pitches[tie.pitch].startTie;\n\t\t\t\t\t\t\t\t\tvoice[tie.el].pitches[tie.pitch].duration += dur;\n\t\t\t\t\t\t\t\t\telement.pitches[k] = null;\n\t\t\t\t\t\t\t\t\tdelete ties[pitch.pitch];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdelete pitch.endTie;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdelete element.duration;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var key in ties) {\n\t\t\t\tif (ties.hasOwnProperty(key)) {\n\t\t\t\t\tvar item = ties[key];\n\t\t\t\t\tdelete voice[item.el].pitches[item.pitch].startTie;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// voices[0].forEach(v => delete v.elem)\n\t\t\t// voices[1].forEach(v => delete v.elem)\n\t\t\t// console.log(JSON.stringify(voices))\n\t\t}\n\t}\n\n\tfunction getBeatFraction(meter) {\n\t\tswitch (parseInt(meter.den,10)) {\n\t\t\tcase 2: return 0.5;\n\t\t\tcase 4: return 0.25;\n\t\t\tcase 8:\n\t\t\t\tif (meter.num % 3 === 0)\n\t\t\t\t\treturn 0.375;\n\t\t\t\telse\n\t\t\t\t\treturn 0.125;\n\t\t\tcase 16: return 0.125;\n\t\t}\n\t\treturn 0.25;\n\t}\n\t//\n\t// The algorithm for chords is:\n\t// - The chords are done in a separate track.\n\t// - If there are notes before the first chord, then put that much silence to start the track.\n\t// - The pattern of chord expression depends on the meter, and how many chords are in a measure.\n\t// - There is a possibility that a measure will have an incorrect number of beats, if that is the case, then\n\t// start the pattern anew on the next measure number.\n\t// - If a chord root is not A-G, then ignore it as if the chord wasn't there at all.\n\t// - If a chord modification isn't in our supported list, change it to a major triad.\n\t//\n\t// - If there is only one chord in a measure:\n\t//\t\t- If 2/4, play root chord\n\t//\t\t- If cut time, play root(1) chord(3)\n\t//\t\t- If 3/4, play root chord chord\n\t//\t\t- If 4/4 or common time, play root chord fifth chord\n\t//\t\t- If 6/8, play root(1) chord(3) fifth(4) chord(6)\n\t//\t\t- For any other meter, play the full chord on each beat. (TODO-PER: expand this as more support is added.)\n\t//\n\t//\t- If there is a chord specified that is not on a beat, move it earlier to the previous beat, unless there is already a chord on that beat.\n\t//\t- Otherwise, move it later, unless there is already a chord on that beat.\n\t// \t- Otherwise, ignore it. (TODO-PER: expand this as more support is added.)\n\t//\n\t// - If there is a chord on the second beat, play a chord for the first beat instead of a bass note.\n\t// - Likewise, if there is a chord on the fourth beat of 4/4, play a chord on the third beat instead of a bass note.\n\t//\n\t// If there is any note in the melody that has a rhythm head, then assume the melody controls the rhythm, so that is\n\t// the same as a break.\n\tvar breakSynonyms = [ 'break', '(break)', 'no chord', 'n.c.', 'tacet'];\n\n\tfunction findChord(elem) {\n\t\tif (gChordTacet)\n\t\t\treturn 'break';\n\n\t\t// TODO-PER: Just using the first chord if there are more than one.\n\t\tif (chordTrackFinished || !elem.chord || elem.chord.length === 0)\n\t\t\treturn null;\n\n\t\t// Return the first annotation that is a regular chord: that is, it is in the default place or is a recognized \"tacet\" phrase.\n\t\tfor (var i = 0; i < elem.chord.length; i++) {\n\t\t\tvar ch = elem.chord[i];\n\t\t\tif (ch.position === 'default')\n\t\t\t\treturn ch.name;\n\t\t\tif (breakSynonyms.indexOf(ch.name.toLowerCase()) >= 0)\n\t\t\t\treturn 'break';\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction calcBeat(measureStart, beatLength, currTime) {\n\t\tvar distanceFromStart = currTime - measureStart;\n\t\treturn distanceFromStart / beatLength;\n\t}\n\n\tfunction processVolume(beat, voiceOff) {\n\t\tif (voiceOff)\n\t\t\treturn 0;\n\n\t\tvar volume;\n\t\tif (nextVolume) {\n\t\t\tvolume = nextVolume;\n\t\t\tnextVolume = undefined;\n\t\t} else if (!doBeatAccents) {\n\t\t\tvolume = stressBeatDown;\n\t\t} else if (pickupLength > beat) {\n\t\t\tvolume = stressBeatUp;\n\t\t} else {\n\t\t\tvar barLength = meter.num / meter.den;\n\t\t\tvar barBeat = calcBeat(lastBarTime, getBeatFraction(meter), beat);\n\t\t\tif (barBeat === 0)\n\t\t\t\tvolume = stressBeat1;\n\t\t\telse if (parseInt(barBeat,10) === barBeat)\n\t\t\t\tvolume = stressBeatDown;\n\t\t\telse\n\t\t\t\tvolume = stressBeatUp;\n\t\t}\n\t\tif (nextVolumeDelta) {\n\t\t\tvolume += nextVolumeDelta;\n\t\t\tnextVolumeDelta = undefined;\n\t\t}\n\t\tif (volume < 0)\n\t\t\tvolume = 0;\n\t\tif (volume > 127)\n\t\t\tvolume = 127;\n\t\treturn voiceOff ? 0 : volume;\n\t}\n\n\tfunction processChord(elem) {\n\n\t\tvar firstChord = false;\n\t\tvar chord = findChord(elem);\n\t\tif (chord) {\n\t\t\tvar c = interpretChord(chord);\n\t\t\t// If this isn't a recognized chord, just completely ignore it.\n\t\t\tif (c) {\n\t\t\t\t// If we ever have a chord in this voice, then we add the chord track.\n\t\t\t\t// However, if there are chords on more than one voice, then just use the first voice.\n\t\t\t\tif (chordTrack.length === 0) {\n\t\t\t\t\tfirstChord = true;\n\t\t\t\t\tchordTrack.push({cmd: 'program', channel: chordChannel, instrument: chordInstrument});\n\t\t\t\t}\n\n\t\t\t\tlastChord = c;\n\t\t\t\tvar barBeat = calcBeat(lastBarTime, getBeatFraction(meter), timeToRealTime(elem.time));\n\t\t\t\tcurrentChords.push({chord: lastChord, beat: barBeat, start: timeToRealTime(elem.time)});\n\t\t\t}\n\t\t}\n\t\treturn firstChord;\n\t}\n\n\tfunction findNoteModifications(elem, velocity) {\n\t\tvar ret = { };\n\t\tif (elem.decoration) {\n\t\t\tfor (var d = 0; d < elem.decoration.length; d++) {\n\t\t\t\tif (elem.decoration[d] === 'staccato')\n\t\t\t\t\tret.thisBreakBetweenNotes = 'staccato';\n\t\t\t\telse if (elem.decoration[d] === 'tenuto')\n\t\t\t\t\tret.thisBreakBetweenNotes = 'tenuto';\n\t\t\t\telse if (elem.decoration[d] === 'accent')\n\t\t\t\t\tret.velocity = Math.min(127, velocity * 1.5);\n\t\t\t\telse if (elem.decoration[d] === 'trill')\n\t\t\t\t\tret.noteModification = \"trill\";\n\t\t\t\telse if (elem.decoration[d] === 'lowermordent')\n\t\t\t\t\tret.noteModification = \"lowermordent\";\n\t\t\t\telse if (elem.decoration[d] === 'uppermordent')\n\t\t\t\t\tret.noteModification = \"mordent\";\n\t\t\t\telse if (elem.decoration[d] === 'mordent')\n\t\t\t\t\tret.noteModification = \"mordent\";\n\t\t\t\telse if (elem.decoration[d] === 'turn')\n\t\t\t\t\tret.noteModification = \"turn\";\n\t\t\t\telse if (elem.decoration[d] === 'roll')\n\t\t\t\t\tret.noteModification = \"roll\";\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction doModifiedNotes(noteModification, p) {\n\t\tvar noteTime;\n\t\tvar numNotes;\n\t\tvar start = p.start;\n\t\tvar pp;\n\t\tvar runningDuration = p.duration;\n\t\tvar shortestNote = durationRounded(1.0 / 32);\n\n\t\tswitch (noteModification) {\n\t\t\tcase \"trill\":\n\t\t\t\tvar note = 1;\n\t\t\t\twhile (runningDuration > 0) {\n\t\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+note, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\t\tnote = (note === 1) ? 0 : 1;\n\t\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\t\tstart += shortestNote;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"mordent\":\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: runningDuration, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"lowermordent\":\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch-1, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\trunningDuration -= shortestNote;\n\t\t\t\tstart += shortestNote;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: runningDuration, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"turn\":\n\t\t\t\tshortestNote = p.duration / 5;\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start+shortestNote, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start+shortestNote*2, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch+1, volume: p.volume, start: start+shortestNote*3, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start+shortestNote*4, duration: shortestNote, gap: 0, instrument: currentInstrument });\n\t\t\t\tbreak;\n\t\t\tcase \"roll\":\n\t\t\t\twhile (runningDuration > 0) {\n\t\t\t\t\tcurrentTrack.push({ cmd: 'note', pitch: p.pitch, volume: p.volume, start: start, duration: shortestNote, gap: 0, instrument: currentInstrument, style: 'decoration' });\n\t\t\t\t\trunningDuration -= shortestNote*2;\n\t\t\t\t\tstart += shortestNote*2;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfunction writeNote(elem, voiceOff) {\n\t\t//\n\t\t// Create a series of note events to append to the current track.\n\t\t// The output event is one of: { pitchStart: pitch_in_abc_units, volume: from_1_to_64 }\n\t\t// { pitchStop: pitch_in_abc_units }\n\t\t// { moveTime: duration_in_abc_units }\n\t\t// If there are guitar chords, then they are put in a separate track, but they have the same format.\n\t\t//\n\n\t\tvar trackStartingIndex = currentTrack.length;\n\n\t\tvar velocity = processVolume(timeToRealTime(elem.time), voiceOff);\n\t\tvar setChordTrack = processChord(elem);\n\n\t\t// if there are grace notes, then also play them.\n\t\t// I'm not sure there is an exact rule for the length of the notes. My rule, unless I find\n\t\t// a better one is: the grace notes cannot take more than 1/2 of the main note's value.\n\t\t// A grace note (of 1/8 note duration) takes 1/8 of the main note's value.\n\t\tvar graces;\n\t\tif (elem.gracenotes && elem.pitches && elem.pitches.length > 0 && elem.pitches[0]) {\n\t\t\tgraces = processGraceNotes(elem.gracenotes, elem.pitches[0].duration);\n\t\t\tif (elem.elem)\n\t\t\t\telem.elem.midiGraceNotePitches = writeGraceNotes(graces, timeToRealTime(elem.time), velocity*2/3, currentInstrument); // make the graces a little quieter.\n\t\t}\n\n\t\t// The beat fraction is the note that gets a beat (.25 is a quarter note)\n\t\t// The tempo is in minutes and we want to get to milliseconds.\n\t\t// If the element is inside a repeat, there may be more than one value. If there is one value,\n\t\t// then just store that as a number. If there are more than one value, then change that to\n\t\t// an array and return all of them.\n\t\tif (elem.elem) {\n\t\t\tvar rt = timeToRealTime(elem.time);\n\t\t\tvar ms = rt / beatFraction / startingTempo * 60 * 1000;\n\t\t\tif (elem.elem.currentTrackMilliseconds === undefined) {\n\t\t\t\telem.elem.currentTrackMilliseconds = ms;\n\t\t\t\telem.elem.currentTrackWholeNotes = rt;\n\t\t\t} else {\n\t\t\t\tif (elem.elem.currentTrackMilliseconds.length === undefined) {\n\t\t\t\t\tif (elem.elem.currentTrackMilliseconds !== ms) {\n\t\t\t\t\t\telem.elem.currentTrackMilliseconds = [elem.elem.currentTrackMilliseconds, ms];\n\t\t\t\t\t\telem.elem.currentTrackWholeNotes = [elem.elem.currentTrackWholeNotes, rt];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// There can be duplicates if there are multiple voices\n\t\t\t\t\tvar found = false;\n\t\t\t\t\tfor (var j = 0; j < elem.elem.currentTrackMilliseconds.length; j++) {\n\t\t\t\t\t\tif (elem.elem.currentTrackMilliseconds[j] === ms)\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!found) {\n\t\t\t\t\t\telem.elem.currentTrackMilliseconds.push(ms);\n\t\t\t\t\t\telem.elem.currentTrackWholeNotes.push(rt);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t//var tieAdjustment = 0;\n\t\tif (elem.pitches) {\n\t\t\tvar thisBreakBetweenNotes = '';\n\t\t\tvar ret = findNoteModifications(elem, velocity);\n\t\t\tif (ret.thisBreakBetweenNotes)\n\t\t\t\tthisBreakBetweenNotes = ret.thisBreakBetweenNotes;\n\t\t\tif (ret.velocity)\n\t\t\t\tvelocity = ret.velocity;\n\n\t\t\t// TODO-PER: Can also make a different sound on style=x and style=harmonic\n\t\t\tvar ePitches = elem.pitches;\n\t\t\tif (elem.style === \"rhythm\") {\n\t\t\t\thasRhythmHead = true;\n\t\t\t\tif (lastChord && lastChord.chick) {\n\t\t\t\t\tePitches = [];\n\t\t\t\t\tfor (var i2 = 0; i2 < lastChord.chick.length; i2++) {\n\t\t\t\t\t\tvar note2 = parseCommon.clone(elem.pitches[0]);\n\t\t\t\t\t\tnote2.actualPitch = lastChord.chick[i2];\n\t\t\t\t\t\tePitches.push(note2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (elem.elem)\n\t\t\t\telem.elem.midiPitches = [];\n\t\t\tfor (var i=0; i 0)\n\t\t\t\t\t\tp.endType = 'tenuto';\n\t\t\t\t\telse if (thisBreakBetweenNotes)\n\t\t\t\t\t\tp.endType = thisBreakBetweenNotes;\n\n\t\t\t\t\tswitch (p.endType) {\n\t\t\t\t\t\tcase \"tenuto\":\n\t\t\t\t\t\t\tp.gap = slurredBreakBetweenNotes;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"staccato\":\n\t\t\t\t\t\t\tvar d = p.duration * staccatoBreakBetweenNotes;\n\t\t\t\t\t\t\tp.gap = startingTempo / 60 * d;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tp.gap = normalBreakBetweenNotes;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentTrack.push(p);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlastNoteDurationPosition = currentTrack.length-1;\n\n\t\t}\n\t\tvar realDur = getRealDuration(elem);\n\t\tlastEventTime = Math.max(lastEventTime, timeToRealTime(elem.time)+durationRounded(realDur));\n\n\t\treturn setChordTrack;\n\t}\n\tfunction getRealDuration(elem) {\n\t\tif (elem.pitches && elem.pitches.length > 0 && elem.pitches[0])\n\t\t\treturn elem.pitches[0].duration;\n\t\tif (elem.elem)\n\t\t\treturn elem.elem.duration;\n\t\treturn elem.duration;\n\t}\n\n\tvar scale = [0,2,4,5,7,9,11];\n\tfunction adjustPitch(note) {\n\t\tif (note.midipitch !== undefined)\n\t\t\treturn note.midipitch; // The pitch might already be known, for instance if there is a drummap.\n\t\tvar pitch = note.pitch;\n\t\tif (note.accidental) {\n\t\t\tswitch(note.accidental) { // change that pitch (not other octaves) for the rest of the bar\n\t\t\t\tcase \"sharp\":\n\t\t\t\t\tbarAccidentals[pitch]=1; break;\n\t\t\t\tcase \"flat\":\n\t\t\t\t\tbarAccidentals[pitch]=-1; break;\n\t\t\t\tcase \"natural\":\n\t\t\t\t\tbarAccidentals[pitch]=0; break;\n\t\t\t\tcase \"dblsharp\":\n\t\t\t\t\tbarAccidentals[pitch]=2; break;\n\t\t\t\tcase \"dblflat\":\n\t\t\t\t\tbarAccidentals[pitch]=-2; break;\n\t\t\t\tcase \"quartersharp\":\n\t\t\t\t\tbarAccidentals[pitch]=0.25; break;\n\t\t\t\tcase \"quarterflat\":\n\t\t\t\t\tbarAccidentals[pitch]=-0.25; break;\n\t\t\t}\n\t\t}\n\n\t\tvar actualPitch = extractOctave(pitch) *12 + scale[extractNote(pitch)] + 60;\n\n\t\tif ( barAccidentals[pitch]!==undefined) {\n\t\t\t// An accidental is always taken at face value and supersedes the key signature.\n\t\t\tactualPitch += barAccidentals[pitch];\n\t\t} else { // use normal accidentals\n\t\t\tactualPitch += accidentals[extractNote(pitch)];\n\t\t}\n\t\tactualPitch += transpose;\n\t\treturn actualPitch;\n\t}\n\n\tfunction setKeySignature(elem) {\n\t\tvar accidentals = [0,0,0,0,0,0,0];\n\t\tif (!elem.accidentals) return accidentals;\n\t\tfor (var i = 0; i < elem.accidentals.length; i++) {\n\t\t\tvar acc = elem.accidentals[i];\n\t\t\tvar d;\n\t\t\tswitch (acc.acc) {\n\t\t\t\tcase \"flat\": d = -1; break;\n\t\t\t\tcase \"quarterflat\": d = -0.25; break;\n\t\t\t\tcase \"sharp\": d = 1; break;\n\t\t\t\tcase \"quartersharp\": d = 0.25; break;\n\t\t\t\tdefault: d = 0; break;\n\t\t\t}\n\n\t\t\tvar lowercase = acc.note.toLowerCase();\n\t\t\tvar note = extractNote(lowercase.charCodeAt(0)-'c'.charCodeAt(0));\n\t\t\taccidentals[note]+=d;\n\t\t}\n\t\treturn accidentals;\n\t}\n\n\tfunction processGraceNotes(graces, companionDuration) {\n\t\t// Grace notes take up half of the note value. So if there are many of them they are all real short.\n\t\tvar graceDuration = 0;\n\t\tvar ret = [];\n\t\tvar grace;\n\t\tfor (var g = 0; g < graces.length; g++) {\n\t\t\tgrace = graces[g];\n\t\t\tgraceDuration += grace.duration;\n\t\t}\n\t\tvar multiplier = companionDuration/2 / graceDuration;\n\n\t\tfor (g = 0; g < graces.length; g++) {\n\t\t\tgrace = graces[g];\n\t\t\tvar actualPitch = adjustPitch(grace);\n\t\t\tif (currentInstrument === drumInstrument && percmap) {\n\t\t\t\tvar name = pitchesToPerc(grace)\n\t\t\t\tif (name && percmap[name])\n\t\t\t\t\tactualPitch = percmap[name].sound;\n\t\t\t}\n\t\t\tvar pitch = { pitch: actualPitch, duration: grace.duration*multiplier };\n\t\t\tpitch = adjustForMicroTone(pitch);\n\t\t\tret.push(pitch);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction writeGraceNotes(graces, start, velocity, currentInstrument) {\n\t\tvar midiGrace = [];\n\t\tvelocity = Math.round(velocity)\n\t\tfor (var g = 0; g < graces.length; g++) {\n\t\t\tvar gp = graces[g];\n\t\t\tcurrentTrack.push({cmd: 'note', pitch: gp.pitch, volume: velocity, start: start, duration: gp.duration, gap: 0, instrument:currentInstrument, style: 'grace'});\n\t\t\tmidiGrace.push({\n\t\t\t\tpitch: gp.pitch,\n\t\t\t\tdurationInMeasures: gp.duration,\n\t\t\t\tvolume: velocity,\n\t\t\t\tinstrument: currentInstrument\n\t\t\t});\n\t\t\tstart += gp.duration;\n\t\t}\n\t\treturn midiGrace;\n\t}\n\n\tvar quarterToneFactor = 0.02930223664349;\n\tfunction adjustForMicroTone(description) {\n\t\t// if the pitch is not a whole number then make it a whole number and add a tuning factor\n\t\tvar pitch = ''+description.pitch;\n\t\tif (pitch.indexOf(\".75\") >= 0) {\n\t\t\tdescription.pitch = Math.round(description.pitch);\n\t\t\tdescription.cents = -50;\n\t\t} else if (pitch.indexOf(\".25\") >= 0) {\n\t\t\tdescription.pitch = Math.round(description.pitch);\n\t\t\tdescription.cents = 50;\n\t\t}\n\n\t\treturn description;\n\t}\n\n\tfunction extractOctave(pitch) {\n\t\treturn Math.floor(pitch/7);\n\t}\n\n\tfunction extractNote(pitch) {\n\t\tpitch = pitch%7;\n\t\tif (pitch<0) pitch+=7;\n\t\treturn pitch;\n\t}\n\n\tvar basses = {\n\t\t'A': 33, 'B': 35, 'C': 36, 'D': 38, 'E': 40, 'F': 41, 'G': 43\n\t};\n\tfunction interpretChord(name) {\n\t\t// chords have the format:\n\t\t// [root][acc][modifier][/][bass][acc]\n\t\t// (The chord might be surrounded by parens. Just ignore them.)\n\t\t// root must be present and must be from A-G.\n\t\t// acc is optional and can be # or b\n\t\t// The modifier can be a wide variety of things, like \"maj7\". As they are discovered, more are supported here.\n\t\t// If there is a slash, then there is a bass note, which can be from A-G, with an optional acc.\n\t\t// If the root is unrecognized, then \"undefined\" is returned and there is no chord.\n\t\t// If the modifier is unrecognized, a major triad is returned.\n\t\t// If the bass notes is unrecognized, it is ignored.\n\t\tif (name.length === 0)\n\t\t\treturn undefined;\n\t\tif (name === 'break')\n\t\t\treturn { chick: []};\n\t\tvar root = name.substring(0,1);\n\t\tif (root === '(') {\n\t\t\tname = name.substring(1,name.length-2);\n\t\t\tif (name.length === 0)\n\t\t\t\treturn undefined;\n\t\t\troot = name.substring(0,1);\n\t\t}\n\t\tvar bass = basses[root];\n\t\tif (!bass)\t// If the bass note isn't listed, then this was an unknown root. Only A-G are accepted.\n\t\t\treturn undefined;\n\t\t// Don't transpose the chords more than an octave.\n\t\tvar chordTranspose = transpose;\n\t\twhile (chordTranspose < -8)\n\t\t\tchordTranspose += 12;\n\t\twhile (chordTranspose > 8)\n\t\t\tchordTranspose -= 12;\n\t\tbass += chordTranspose;\n\t\tvar bass2 = bass - 5;\t// The alternating bass is a 4th below\n\t\tvar chick;\n\t\tif (name.length === 1)\n\t\t\tchick = chordNotes(bass, '');\n\t\tvar remaining = name.substring(1);\n\t\tvar acc = remaining.substring(0,1);\n\t\tif (acc === 'b' || acc === '♭') {\n\t\t\tbass--;\n\t\t\tbass2--;\n\t\t\tremaining = remaining.substring(1);\n\t\t} else if (acc === '#' || acc === '♯') {\n\t\t\tbass++;\n\t\t\tbass2++;\n\t\t\tremaining = remaining.substring(1);\n\t\t}\n\t\tvar arr = remaining.split('/');\n\t\tchick = chordNotes(bass, arr[0]);\n\t\t// If the 5th is altered then the bass is altered. Normally the bass is 7 from the root, so adjust if it isn't.\n\t\tif (chick.length >= 3) {\n\t\t\tvar fifth = chick[2] - chick[0];\n\t\t\tbass2 = bass2 + fifth - 7;\n\t\t}\n\n\t\tif (arr.length === 2) {\n\t\t\tvar explicitBass = basses[arr[1].substring(0,1)];\n\t\t\tif (explicitBass) {\n\t\t\t\tvar bassAcc = arr[1].substring(1);\n\t\t\t\tvar bassShift = {'#': 1, '♯': 1, 'b': -1, '♭': -1}[bassAcc] || 0;\n\t\t\t\tbass = basses[arr[1].substring(0,1)] + bassShift + chordTranspose;\n\t\t\t\tbass2 = bass;\n\t\t\t}\n\t\t}\n\t\treturn { boom: bass, boom2: bass2, chick: chick };\n\t}\n\n\tvar chordIntervals = {\n\t\t// diminished (all flat 5 chords)\n\t\t'dim': [ 0, 3, 6 ],\n\t\t'°': [ 0, 3, 6 ],\n\t\t'˚': [ 0, 3, 6 ],\n\n\t\t'dim7': [ 0, 3, 6, 9 ],\n\t\t'°7': [ 0, 3, 6, 9 ],\n\t\t'˚7': [ 0, 3, 6, 9 ],\n\n\t\t'ø7': [ 0, 3, 6, 10 ],\n\t\t'm7(b5)': [ 0, 3, 6, 10 ],\n\t\t'm7b5': [ 0, 3, 6, 10 ],\n\t\t'm7♭5': [ 0, 3, 6, 10 ],\n\t\t'-7(b5)': [ 0, 3, 6, 10 ],\n\t\t'-7b5': [ 0, 3, 6, 10 ],\n\n\t\t'7b5': [ 0, 4, 6, 10 ],\n\t\t'7(b5)': [ 0, 4, 6, 10 ],\n\t\t'7♭5': [ 0, 4, 6, 10 ],\n\n\t\t'7(b9,b5)': [ 0, 4, 6, 10, 13 ],\n\t\t'7b9,b5': [ 0, 4, 6, 10, 13 ],\n\t\t'7(#9,b5)': [ 0, 4, 6, 10, 15 ],\n\t\t'7#9b5': [ 0, 4, 6, 10, 15 ],\n\t\t'maj7(b5)': [ 0, 4, 6, 11 ],\n\t\t'maj7b5': [ 0, 4, 6, 11 ],\n\t\t'13(b5)': [ 0, 4, 6, 10, 14, 21 ],\n\t\t'13b5': [ 0, 4, 6, 10, 14, 21 ],\n\n\t\t// minor (all normal 5, minor 3 chords)\n\t\t'm': [ 0, 3, 7 ],\n\t\t'-': [ 0, 3, 7 ],\n\t\t'm6': [ 0, 3, 7, 9 ],\n\t\t'-6': [ 0, 3, 7, 9 ],\n\t\t'm7': [ 0, 3, 7, 10 ],\n\t\t'-7': [ 0, 3, 7, 10 ],\n\n\t\t'-(b6)': [ 0, 3, 7, 8 ],\n\t\t'-b6': [ 0, 3, 7, 8 ],\n\t\t'-6/9': [ 0, 3, 7, 9, 14 ],\n\t\t'-7(b9)': [ 0, 3, 7, 10, 13 ],\n\t\t'-7b9': [ 0, 3, 7, 10, 13 ],\n\t\t'-maj7': [ 0, 3, 7, 11 ],\n\t\t'-9+7': [ 0, 3, 7, 11, 13 ],\n\t\t'-11': [ 0, 3, 7, 11, 14, 17 ],\n\t\t'm11': [ 0, 3, 7, 11, 14, 17 ],\n\t\t'-maj9': [ 0, 3, 7, 11, 14 ],\n\t\t'-∆9': [ 0, 3, 7, 11, 14 ],\n\t\t'mM9': [ 0, 3, 7, 11, 14 ],\n\n\t\t// major (all normal 5, major 3 chords)\n\t\t'M': [ 0, 4, 7 ],\n\t\t'6': [ 0, 4, 7, 9 ],\n\t\t'6/9': [ 0, 4, 7, 9, 14 ],\n\t\t'6add9': [ 0, 4, 7, 9, 14 ],\n\t\t'69': [ 0, 4, 7, 9, 14 ],\n\n\t\t'7': [ 0, 4, 7, 10 ],\n\t\t'9': [ 0, 4, 7, 10, 14 ],\n\t\t'11': [ 0, 7, 10, 14, 17 ],\n\t\t'13': [ 0, 4, 7, 10, 14, 21 ],\n\t\t'7b9': [ 0, 4, 7, 10, 13 ],\n\t\t'7♭9': [ 0, 4, 7, 10, 13 ],\n\t\t'7(b9)': [ 0, 4, 7, 10, 13 ],\n\t\t'7(#9)': [ 0, 4, 7, 10, 15 ],\n\t\t'7#9': [ 0, 4, 7, 10, 15 ],\n\t\t'(13)': [ 0, 4, 7, 10, 14, 21 ],\n\t\t'7(9,13)': [ 0, 4, 7, 10, 14, 21 ],\n\t\t'7(#9,b13)': [ 0, 4, 7, 10, 15, 20 ],\n\t\t'7(#11)': [ 0, 4, 7, 10, 14, 18 ],\n\t\t'7#11': [ 0, 4, 7, 10, 14, 18 ],\n\t\t'7(b13)': [ 0, 4, 7, 10, 20 ],\n\t\t'7b13': [ 0, 4, 7, 10, 20 ],\n\t\t'9(#11)': [ 0, 4, 7, 10, 14, 18 ],\n\t\t'9#11': [ 0, 4, 7, 10, 14, 18 ],\n\t\t'13(#11)': [ 0, 4, 7, 10, 18, 21 ],\n\t\t'13#11': [ 0, 4, 7, 10, 18, 21 ],\n\n\t\t'maj7': [ 0, 4, 7, 11 ],\n\t\t'∆7': [ 0, 4, 7, 11 ],\n\t\t'Δ7': [ 0, 4, 7, 11 ],\n\t\t'maj9': [ 0, 4, 7, 11, 14 ],\n\t\t'maj7(9)': [ 0, 4, 7, 11, 14 ],\n\t\t'maj7(11)': [ 0, 4, 7, 11, 17 ],\n\t\t'maj7(#11)': [ 0, 4, 7, 11, 18 ],\n\t\t'maj7(13)': [ 0, 4, 7, 14, 21 ],\n\t\t'maj7(9,13)': [ 0, 4, 7, 11, 14, 21 ],\n\n\t\t'7sus4': [ 0, 5, 7, 10 ],\n\t\t'm7sus4': [ 0, 3, 7, 10, 17 ],\n\t\t'sus4': [ 0, 5, 7 ],\n\t\t'sus2': [ 0, 2, 7 ],\n\t\t'7sus2': [ 0, 2, 7, 10 ],\n\t\t'9sus4': [ 0, 5, 7, 10, 14 ],\n\t\t'13sus4': [ 0, 5, 7, 10, 14, 21 ],\n\n\t\t// augmented (all sharp 5 chords)\n\t\t'aug7': [ 0, 4, 8, 10 ],\n\t\t'+7': [ 0, 4, 8, 10 ],\n\t\t'+': [ 0, 4, 8 ],\n\t\t'7#5': [ 0, 4, 8, 10 ],\n\t\t'7♯5': [ 0, 4, 8, 10 ],\n\t\t'7+5': [ 0, 4, 8, 10 ],\n\t\t'9#5': [ 0, 4, 8, 10, 14 ],\n\t\t'9♯5': [ 0, 4, 8, 10, 14 ],\n\t\t'9+5': [ 0, 4, 8, 10, 14 ],\n\t\t'-7(#5)': [ 0, 3, 8, 10 ],\n\t\t'-7#5': [ 0, 3, 8, 10 ],\n\t\t'7(#5)': [ 0, 4, 8, 10 ],\n\t\t'7(b9,#5)': [ 0, 4, 8, 10, 13 ],\n\t\t'7b9#5': [ 0, 4, 8, 10, 13 ],\n\t\t'maj7(#5)': [ 0, 4, 8, 11 ],\n\t\t'maj7#5': [ 0, 4, 8, 11 ],\n\t\t'maj7(#5,#11)': [ 0, 4, 8, 11, 18 ],\n\t\t'maj7#5#11': [ 0, 4, 8, 11, 18 ],\n\t\t'9(#5)': [ 0, 4, 8, 10, 14 ],\n\t\t'13(#5)': [ 0, 4, 8, 10, 14, 21 ],\n\t\t'13#5': [ 0, 4, 8, 10, 14, 21 ]\n};\n\tfunction chordNotes(bass, modifier) {\n\t\tvar intervals = chordIntervals[modifier];\n\t\tif (!intervals) {\n\t\t\tif (modifier.slice(0,2).toLowerCase() === 'ma' || modifier[0] === 'M')\n\t\t\t\tintervals = chordIntervals.M;\n\t\t\telse if (modifier[0] === 'm' || modifier[0] === '-')\n\t\t\t\tintervals = chordIntervals.m;\n\t\t\telse\n\t\t\t\tintervals = chordIntervals.M;\n\t\t}\n\t\tbass += 12;\t// the chord is an octave above the bass note.\n\t\tvar notes = [ ];\n\t\tfor (var i = 0; i < intervals.length; i++) {\n\t\t\tnotes.push(bass + intervals[i]);\n\t\t}\n\t\treturn notes;\n\t}\n\n\tfunction writeBoom(boom, beatLength, volume, beat, noteLength) {\n\t\t// undefined means there is a stop time.\n\t\tif (boom !== undefined)\n\t\t\tchordTrack.push({cmd: 'note', pitch: boom, volume: volume, start: lastBarTime+beat*durationRounded(beatLength), duration: durationRounded(noteLength), gap: 0, instrument: bassInstrument});\n\t}\n\n\tfunction writeChick(chick, beatLength, volume, beat, noteLength) {\n\t\tfor (var c = 0; c < chick.length; c++)\n\t\t\tchordTrack.push({cmd: 'note', pitch: chick[c], volume: volume, start: lastBarTime+beat*durationRounded(beatLength), duration: durationRounded(noteLength), gap: 0, instrument: chordInstrument});\n\t}\n\n\tvar rhythmPatterns = { \"2/2\": [ 'boom', 'chick' ],\n\t\t\"2/4\": [ 'boom', 'chick' ],\n\t\t\"3/4\": [ 'boom', 'chick', 'chick' ],\n\t\t\"4/4\": [ 'boom', 'chick', 'boom2', 'chick' ],\n\t\t\"5/4\": [ 'boom', 'chick', 'chick', 'boom2', 'chick' ],\n\t\t\"6/8\": [ 'boom', '', 'chick', 'boom2', '', 'chick' ],\n\t\t\"9/8\": [ 'boom', '', 'chick', 'boom2', '', 'chick', 'boom2', '', 'chick' ],\n\t\t\"12/8\": [ 'boom', '', 'chick', 'boom2', '', 'chick', 'boom', '', 'chick', 'boom2', '', 'chick' ],\n\t};\n\n\tfunction resolveChords(startTime, endTime) {\n\t\tvar num = meter.num;\n\t\tvar den = meter.den;\n\t\tvar beatLength = 1/den;\n\t\tvar noteLength = beatLength/2;\n\t\tvar pattern = rhythmPatterns[num+'/'+den];\n\t\tvar thisMeasureLength = parseInt(num,10)/parseInt(den,10);\n\t\tvar portionOfAMeasure = thisMeasureLength - (endTime-startTime)/tempoChangeFactor;\n\t\tif (Math.abs(portionOfAMeasure) < 0.00001)\n\t\t\tportionOfAMeasure = false;\n\t\tif (!pattern || portionOfAMeasure) { // If it is an unsupported meter, or this isn't a full bar, just chick on each beat.\n\t\t\tpattern = [];\n\t\t\tvar beatsPresent = ((endTime-startTime)/tempoChangeFactor) / beatLength;\n\t\t\tfor (var p = 0; p < beatsPresent; p++)\n\t\t\t\tpattern.push(\"chick\");\n\t\t}\n\t\t//console.log(startTime, pattern, currentChords, lastChord, portionOfAMeasure)\n\n\t\tif (currentChords.length === 0) { // there wasn't a new chord this measure, so use the last chord declared.\n\t\t\tcurrentChords.push({ beat: 0, chord: lastChord});\n\t\t}\n\t\tif (currentChords[0].beat !== 0 && lastChord) { // this is the case where there is a chord declared in the measure, but not on its first beat.\n\t\t\tif (chordLastBar)\n\t\t\t\tcurrentChords.unshift({ beat: 0, chord: chordLastBar});\n\t\t}\n\t\tif (currentChords.length === 1) {\n\t\t\tfor (var m = currentChords[0].beat; m < pattern.length; m++) {\n\t\t\t\tif (!hasRhythmHead) {\n\t\t\t\t\tswitch (pattern[m]) {\n\t\t\t\t\t\tcase 'boom':\n\t\t\t\t\t\t\twriteBoom(currentChords[0].chord.boom, beatLength, boomVolume, m, noteLength);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'boom2':\n\t\t\t\t\t\t\twriteBoom(currentChords[0].chord.boom2, beatLength, boomVolume, m, noteLength);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'chick':\n\t\t\t\t\t\t\twriteChick(currentChords[0].chord.chick, beatLength, chickVolume, m, noteLength);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If we are here it is because more than one chord was declared in the measure, so we have to sort out what chord goes where.\n\n\t\t// First, normalize the chords on beats.\n\t\tvar mult = beatLength === 0.125 ? 3 : 1; // If this is a compound meter then the beats in the currentChords is 1/3 of the true beat\n\t\tvar beats = {};\n\t\tfor (var i = 0; i < currentChords.length; i++) {\n\t\t\tvar cc = currentChords[i];\n\t\t\tvar b = Math.round(cc.beat*mult);\n\t\t\tbeats[''+b] = cc;\n\t\t}\n\n\t\t// - If there is a chord on the second beat, play a chord for the first beat instead of a bass note.\n\t\t// - Likewise, if there is a chord on the fourth beat of 4/4, play a chord on the third beat instead of a bass note.\n\t\tfor (var m2 = 0; m2 < pattern.length; m2++) {\n\t\t\tvar thisChord;\n\t\t\tif (beats[''+m2])\n\t\t\t\tthisChord = beats[''+m2];\n\t\t\tvar lastBoom;\n\t\t\tif (!hasRhythmHead && thisChord) {\n\t\t\t\tswitch (pattern[m2]) {\n\t\t\t\t\tcase 'boom':\n\t\t\t\t\t\tif (beats['' + (m2 + 1)]) // If there is not a chord change on the next beat, play a bass note.\n\t\t\t\t\t\t\twriteChick(thisChord.chord.chick, beatLength, chickVolume, m2, noteLength);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\twriteBoom(thisChord.chord.boom, beatLength, boomVolume, m2, noteLength);\n\t\t\t\t\t\t\tlastBoom = thisChord.chord.boom;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'boom2':\n\t\t\t\t\t\tif (beats['' + (m2 + 1)])\n\t\t\t\t\t\t\twriteChick(thisChord.chord.chick, beatLength, chickVolume, m2, noteLength);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// If there is the same root as the last chord, use the alternating bass, otherwise play the root.\n\t\t\t\t\t\t\tif (lastBoom === thisChord.chord.boom) {\n\t\t\t\t\t\t\t\twriteBoom(thisChord.chord.boom2, beatLength, boomVolume, m2, noteLength);\n\t\t\t\t\t\t\t\tlastBoom = undefined;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twriteBoom(thisChord.chord.boom, beatLength, boomVolume, m2, noteLength);\n\t\t\t\t\t\t\t\tlastBoom = thisChord.chord.boom;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'chick':\n\t\t\t\t\t\twriteChick(thisChord.chord.chick, beatLength, chickVolume, m2, noteLength);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '':\n\t\t\t\t\t\tif (beats['' + m2])\t// If there is an explicit chord on this beat, play it.\n\t\t\t\t\t\t\twriteChick(thisChord.chord.chick, beatLength, chickVolume, m2, noteLength);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction normalizeDrumDefinition(params) {\n\t\t// Be very strict with the drum definition. If anything is not perfect,\n\t\t// just turn the drums off.\n\t\t// Perhaps all of this logic belongs in the parser instead.\n\t\tif (params.pattern.length === 0 || params.on === false)\n\t\t\treturn { on: false };\n\n\t\tvar str = params.pattern[0];\n\t\tvar events = [];\n\t\tvar event = \"\";\n\t\tvar totalPlay = 0;\n\t\tfor (var i = 0; i < str.length; i++) {\n\t\t\tif (str[i] === 'd')\n\t\t\t\ttotalPlay++;\n\t\t\tif (str[i] === 'd' || str[i] === 'z') {\n\t\t\t\tif (event.length !== 0) {\n\t\t\t\t\tevents.push(event);\n\t\t\t\t\tevent = str[i];\n\t\t\t\t} else\n\t\t\t\t\tevent = event + str[i];\n\t\t\t} else {\n\t\t\t\tif (event.length === 0) {\n\t\t\t\t\t// there was an error: the string should have started with d or z\n\t\t\t\t\treturn {on: false};\n\t\t\t\t}\n\t\t\t\tevent = event + str[i];\n\t\t\t}\n\t\t}\n\n\t\tif (event.length !== 0)\n\t\t\tevents.push(event);\n\n\t\t// Now the events array should have one item per event.\n\t\t// There should be two more params for each event: the volume and the pitch.\n\t\tif (params.pattern.length !== totalPlay*2 + 1)\n\t\t\treturn { on: false };\n\n\t\tvar ret = { on: true, bars: params.bars, pattern: []};\n\t\tvar beatLength = getBeatFraction(meter);\n\t\tvar playCount = 0;\n\t\tfor (var j = 0; j < events.length; j++) {\n\t\t\tevent = events[j];\n\t\t\tvar len = 1;\n\t\t\tvar div = false;\n\t\t\tvar num = 0;\n\t\t\tfor (var k = 1; k < event.length; k++) {\n\t\t\t\tswitch(event[k]) {\n\t\t\t\t\tcase \"/\":\n\t\t\t\t\t\tif (num !== 0)\n\t\t\t\t\t\t\tlen *= num;\n\t\t\t\t\t\tnum = 0;\n\t\t\t\t\t\tdiv = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"1\":\n\t\t\t\t\tcase \"2\":\n\t\t\t\t\tcase \"3\":\n\t\t\t\t\tcase \"4\":\n\t\t\t\t\tcase \"5\":\n\t\t\t\t\tcase \"6\":\n\t\t\t\t\tcase \"7\":\n\t\t\t\t\tcase \"8\":\n\t\t\t\t\tcase \"9\":\n\t\t\t\t\t\tnum = num*10 +event[k];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn { on: false };\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (div) {\n\t\t\t\tif (num === 0) num = 2; // a slash by itself is interpreted as \"/2\"\n\t\t\t\tlen /= num;\n\t\t\t} else if (num)\n\t\t\t\tlen *= num;\n\t\t\tif (event[0] === 'd') {\n\t\t\t\tret.pattern.push({ len: len * beatLength, pitch: params.pattern[1 + playCount], velocity: params.pattern[1 + playCount + totalPlay]});\n\t\t\t\tplayCount++;\n\t\t\t} else\n\t\t\t\tret.pattern.push({ len: len * beatLength, pitch: null});\n\t\t}\n\t\tdrumBars = params.bars ? params.bars : 1;\n\t\treturn ret;\n\t}\n\n\tfunction alignDrumToMeter() {\n\t\tif (!drumDefinition ||!drumDefinition.pattern) {\n\t\t\treturn;\n\t\t}\n\t\tvar ret = drumDefinition;\n\t\t// Now normalize the pattern to cover the correct number of measures. The note lengths passed are relative to each other and need to be scaled to fit a measure.\n\t\tvar totalTime = 0;\n\t\tvar measuresPerBeat = meter.num/meter.den;\n\t\tfor (var ii = 0; ii < ret.pattern.length; ii++)\n\t\t\ttotalTime += ret.pattern[ii].len;\n\t\tvar factor = totalTime / drumBars / measuresPerBeat;\n\t\tfor (ii = 0; ii < ret.pattern.length; ii++)\n\t\t\tret.pattern[ii].len = ret.pattern[ii].len / factor;\n\t\tdrumDefinition = ret;\n\t}\n\n\tfunction writeDrum(channel) {\n\t\tif (drumTrack.length === 0 && !drumDefinition.on)\n\t\t\treturn;\n\n\t\tvar measureLen = meter.num/meter.den;\n\t\tif (drumTrack.length === 0) {\n\t\t\tif (lastEventTime < measureLen)\n\t\t\t\treturn; // This is true if there are pickup notes. The drum doesn't start until the first full measure.\n\t\t\tdrumTrack.push({cmd: 'program', channel: channel, instrument: drumInstrument});\n\t\t}\n\n\t\tif (!drumDefinition.on) {\n\t\t\t// this is the case where there has been a drum track, but it was specifically turned off.\n\t\t\treturn;\n\t\t}\n\t\tvar start = lastBarTime;\n\t\tfor (var i = 0; i < drumDefinition.pattern.length; i++) {\n\t\t\tvar len = durationRounded(drumDefinition.pattern[i].len);\n\t\t\tif (drumDefinition.pattern[i].pitch) {\n\t\t\t\tdrumTrack.push({\n\t\t\t\t\tcmd: 'note',\n\t\t\t\t\tpitch: drumDefinition.pattern[i].pitch,\n\t\t\t\t\tvolume: drumDefinition.pattern[i].velocity,\n\t\t\t\t\tstart: start,\n\t\t\t\t\tduration: len,\n\t\t\t\t\tgap: 0,\n\t\t\t\t\tinstrument: drumInstrument});\n\t\t\t}\n\t\t\tstart += len;\n\t\t}\n\t}\n\n\tfunction findOctaves(tracks, detuneCents) {\n\t\tvar timing = {};\n\t\tfor (var i = 0; i < tracks.length; i++) {\n\t\t\tfor (var j = 0; j < tracks[i].length; j++) {\n\t\t\t\tvar note = tracks[i][j];\n\t\t\t\tif (note.cmd === \"note\") {\n\t\t\t\t\tif (timing[note.start] === undefined)\n\t\t\t\t\t\ttiming[note.start] = [];\n\t\t\t\t\ttiming[note.start].push({track: i, event: j, pitch: note.pitch});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar keys = Object.keys(timing);\n\t\tfor (i = 0; i < keys.length; i++) {\n\t\t\tvar arr = timing[keys[i]];\n\t\t\tif (arr.length > 1) {\n\t\t\t\tarr = arr.sort(function(a,b) {\n\t\t\t\t\treturn a.pitch - b.pitch;\n\t\t\t\t});\n\t\t\t\tvar topEvent = arr[arr.length-1];\n\t\t\t\tvar topNote = topEvent.pitch % 12;\n\t\t\t\tvar found = false;\n\t\t\t\tfor (j = 0; !found && j < arr.length-1; j++) {\n\t\t\t\t\tif (arr[j].pitch % 12 === topNote)\n\t\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t\tif (found) {\n\t\t\t\t\tvar event = tracks[topEvent.track][topEvent.event];\n\t\t\t\t\tif (!event.cents)\n\t\t\t\t\t\tevent.cents = 0;\n\t\t\t\t\tevent.cents += detuneCents;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n})();\n\nmodule.exports = flatten;\n","// abc_midi_renderer.js: Create the actual format for the midi.\n\nvar centsToFactor = require(\"./cents-to-factor\");\nvar rendererFactory;\n\n(function() {\n\t\"use strict\";\n\tfunction setAttributes(elm, attrs) {\n\t\tfor (var attr in attrs)\n\t\t\tif (attrs.hasOwnProperty(attr))\n\t\t\t\telm.setAttribute(attr, attrs[attr]);\n\t\treturn elm;\n\t}\n\n\tfunction Midi() {\n\t\tthis.trackstrings = \"\";\n\t\tthis.trackcount = 0;\n\t\tthis.noteOnAndChannel = \"%90\";\n\t\tthis.noteOffAndChannel = \"%80\";\n\t}\n\n\tMidi.prototype.setTempo = function(qpm) {\n\t\tif (this.trackcount === 0) {\n\t\t\tthis.startTrack();\n\t\t\tthis.track += \"%00%FF%51%03\" + toHex(Math.round(60000000 / qpm), 6);\n\t\t\tthis.endTrack();\n\t\t}\n\t};\n\n\tMidi.prototype.setGlobalInfo = function(qpm, name, key, time) {\n\t\tif (this.trackcount === 0) {\n\t\t\tthis.startTrack();\n\t\t\tvar divisions = Math.round(60000000 / qpm);\n\t\t\t// Add the tempo\n\t\t\tthis.track += \"%00%FF%51%03\" + toHex(divisions, 6);\n\n\t\t\tif (key)\n\t\t\t\tthis.track += keySignature(key);\n\t\t\tif (time)\n\t\t\t\tthis.track += timeSignature(time);\n\t\t\tif (name) {\n\t\t\t\tthis.track += encodeString(name, \"%01\");\n\t\t\t}\n\t\t\tthis.endTrack();\n\t\t}\n\t};\n\n\tMidi.prototype.startTrack = function() {\n\t\tthis.noteWarped = {};\n\t\tthis.track = \"\";\n\t\tthis.trackName = \"\";\n\t\tthis.trackInstrument = \"\";\n\t\tthis.silencelength = 0;\n\t\tthis.trackcount++;\n\t\tif (this.instrument) {\n\t\t\tthis.setInstrument(this.instrument);\n\t\t}\n\t};\n\n\tMidi.prototype.endTrack = function() {\n\t\tthis.track = this.trackName + this.trackInstrument + this.track;\n\t\tvar tracklength = toHex(this.track.length / 3 + 4, 8);\n\t\tthis.track = \"MTrk\" + tracklength + // track header\n\t\t\tthis.track +\n\t\t\t'%00%FF%2F%00'; // track end\n\t\tthis.trackstrings += this.track;\n\t};\n\n\tMidi.prototype.setText = function(type, text) {\n\t\t// MIDI defines the following types of events:\n\t\t//FF 01 len text Text Event\n\t\t//FF 02 len text Copyright Notice\n\t\t//FF 03 len text Sequence/Track Name\n\t\t//FF 04 len text Instrument Name\n\t\t//FF 05 len text Lyric\n\t\t//FF 06 len text Marker\n\t\t//FF 07 len text Cue Point\n\t\tswitch(type) {\n\t\t\tcase 'name':\n\t\t\t\tthis.trackName = encodeString(text, \"%03\");\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tMidi.prototype.setInstrument = function(number) {\n\t\tthis.trackInstrument = \"%00%C0\" + toHex(number, 2);\n\t\tthis.instrument = number;\n\t};\n\n\tMidi.prototype.setChannel = function(number, pan) {\n\t\tthis.channel = number;\n\t\tvar ccPrefix = \"%00%B\" + this.channel.toString(16);\n\t\t// Reset midi, in case it was set previously.\n\t\tthis.track += ccPrefix + \"%79%00\"; // Reset All Controllers\n\t\tthis.track += ccPrefix + \"%40%00\"; // Damper pedal\n\t\tthis.track += ccPrefix + \"%5B%30\"; // Effect 1 Depth (reverb)\n\t\t// Translate pan as -1 to 1 to 0 to 127\n\t\tif (!pan)\n\t\t\tpan = 0;\n\t\tpan = Math.round((pan + 1) * 64);\n\t\tthis.track += ccPrefix + \"%0A\" + toHex(pan, 2); // Pan\n\t\tthis.track += ccPrefix + \"%07%64\"; // Channel Volume\n\n\t\tthis.noteOnAndChannel = \"%9\" + this.channel.toString(16);\n\t\tthis.noteOffAndChannel = \"%8\" + this.channel.toString(16);\n\t};\n\n\tvar HALF_STEP = 4096; // For the pitch wheel - (i.e. the distance from C to C#)\n\tMidi.prototype.startNote = function(pitch, loudness, cents) {\n\t\tthis.track += toDurationHex(this.silencelength); // only need to shift by amount of silence (if there is any)\n\t\tthis.silencelength = 0;\n\t\tif (cents) {\n\t\t\t// the pitch is altered so send a midi pitch wheel event\n\t\t\tthis.track += \"%e\" + this.channel.toString(16);\n\t\t\tvar bend = Math.round(centsToFactor(cents)*HALF_STEP);\n\t\t\tthis.track += to7BitHex(0x2000 + bend);\n\t\t\tthis.track += toDurationHex(0); // this all happens at once so there is a zero length here\n\t\t\tthis.noteWarped[pitch] = true;\n\t\t}\n\t\tthis.track += this.noteOnAndChannel;\n\t\tthis.track += \"%\" + pitch.toString(16) + toHex(loudness, 2); //note\n\t};\n\n\tMidi.prototype.endNote = function(pitch) {\n\t\tthis.track += toDurationHex(this.silencelength); // only need to shift by amount of silence (if there is any)\n\t\tthis.silencelength = 0;\n\t\tif (this.noteWarped[pitch]) {\n\t\t\t// the pitch was altered so alter it back.\n\t\t\tthis.track += \"%e\" + this.channel.toString(16);\n\t\t\tthis.track += to7BitHex(0x2000);\n\t\t\tthis.track += toDurationHex(0); // this all happens at once so there is a zero length here\n\t\t\tthis.noteWarped[pitch] = false;\n\t\t}\n\t\tthis.track += this.noteOffAndChannel;\n\t\tthis.track += \"%\" + pitch.toString(16) + \"%00\";//end note\n\t};\n\n\tMidi.prototype.addRest = function(length) {\n\t\tthis.silencelength += length;\n\t\tif (this.silencelength < 0)\n\t\t\tthis.silencelength = 0;\n\t};\n\n\tMidi.prototype.getData = function() {\n\t\treturn \"data:audio/midi,\" +\n\t\t\t\"MThd%00%00%00%06%00%01\" + toHex(this.trackcount, 4) + \"%01%e0\" + // header\n\t\t\tthis.trackstrings;\n\t};\n\n\tMidi.prototype.embed = function(parent, noplayer) {\n\n\t\tvar data = this.getData();\n\n\t\tvar link = setAttributes(document.createElement('a'), {\n\t\t\thref: data\n\t\t});\n\t\tlink.innerHTML = \"download midi\";\n\t\tparent.insertBefore(link, parent.firstChild);\n\n\t\tif (noplayer) return;\n\n\t\tvar embed = setAttributes(document.createElement('embed'), {\n\t\t\tsrc: data,\n\t\t\ttype: 'video/quicktime',\n\t\t\tcontroller: 'true',\n\t\t\tautoplay: 'false',\n\t\t\tloop: 'false',\n\t\t\tenablejavascript: 'true',\n\t\t\tstyle: 'display:block; height: 20px;'\n\t\t});\n\t\tparent.insertBefore(embed, parent.firstChild);\n\t};\n\n\tfunction encodeString(str, cmdType) {\n\t\t// If there are multi-byte chars, we don't know how long the string will be until we create it.\n\t\tvar nameArray = \"\";\n\t\tfor (var i = 0; i < str.length; i++)\n\t\t\tnameArray += toHex(str.charCodeAt(i), 2);\n\t\treturn \"%00%FF\" + cmdType + toHex(nameArray.length/3, 2) + nameArray; // Each byte is represented by three chars \"%XX\", so divide by 3 to get the length.\n\t}\n\n\tfunction keySignature(key) {\n\t\t//00 FF 5902 03 00 - key signature\n\t\tif (!key || !key.accidentals)\n\t\t\treturn \"\";\n\t\tvar hex = \"%00%FF%59%02\";\n\t\tvar sharpCount = 0;\n\t\tvar flatCount = 256;\n\t\tfor (var i = 0; i < key.accidentals.length; i++) {\n\t\t\tif (key.accidentals[i].acc === \"sharp\") sharpCount++;\n\t\t\telse if (key.accidentals[i].acc === \"flat\") flatCount--;\n\t\t}\n\t\tvar sig = flatCount !== 256 ? toHex(flatCount, 2) : toHex(sharpCount, 2);\n\t\tvar mode = (key.mode === \"m\") ? \"%01\" : \"%00\";\n\t\treturn hex + sig + mode;\n\t}\n\n\tfunction timeSignature(time) {\n\t\t//00 FF 58 04 04 02 30 08 - time signature\n\t\tvar hex = \"%00%FF%58%04\" + toHex(time.num,2);\n\t\tvar dens = { 1: 0, 2: 1, 4: 2, 8: 3, 16: 4, 32: 5 };\n\t\tvar den = dens[time.den];\n\t\tif (!den)\n\t\t\treturn \"\"; // the denominator is not supported, so just don't include this.\n\t\thex += toHex(den, 2);\n\n\t\tvar clocks;\n\t\tswitch (time.num+\"/\"+time.den) {\n\t\t\tcase \"2/4\":\n\t\t\tcase \"3/4\":\n\t\t\tcase \"4/4\":\n\t\t\tcase \"5/4\":\n\t\t\t\tclocks = 24;\n\t\t\t\tbreak;\n\t\t\tcase \"6/4\":\n\t\t\t\tclocks = 72;\n\t\t\t\tbreak;\n\t\t\tcase \"2/2\":\n\t\t\tcase \"3/2\":\n\t\t\tcase \"4/2\":\n\t\t\t\tclocks = 48;\n\t\t\t\tbreak;\n\t\t\tcase \"3/8\":\n\t\t\tcase \"6/8\":\n\t\t\tcase \"9/8\":\n\t\t\tcase \"12/8\":\n\t\t\t\tclocks = 36;\n\t\t\t\tbreak;\n\t\t}\n\t\tif (!clocks)\n\t\t\treturn \"\"; // time sig is not supported.\n\t\thex += toHex(clocks, 2);\n\t\treturn hex + \"%08\";\n\t}\n\n\t// s is assumed to be of even length\n\tfunction encodeHex(s) {\n\t\tvar ret = \"\";\n\t\tfor (var i = 0; i < s.length; i += 2) {\n\t\t\tret += \"%\";\n\t\t\tret += s.substr(i, 2);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction toHex(n, padding) {\n\t\tvar s = n.toString(16);\n\t\ts = s.split(\".\")[0];\n\t\twhile (s.length < padding) {\n\t\t\ts = \"0\" + s;\n\t\t}\n\t\tif (s.length > padding)\n\t\t\ts = s.substring(0,padding)\n\t\treturn encodeHex(s);\n\t}\n\n\tfunction to7BitHex(n) {\n\t\t// this takes a number and shifts all digits from the 7th one to the left.\n\t\tn = Math.round(n);\n\t\tvar lower = n % 128;\n\t\tvar higher = n - lower;\n\t\treturn toHex(higher*2+lower, 4);\n\t}\n\n\tfunction toDurationHex(n) {\n\t\tvar res = 0;\n\t\tvar a = [];\n\n\t\t// cut up into 7 bit chunks;\n\t\tn = Math.round(n);\n\t\twhile (n !== 0) {\n\t\t\ta.push(n & 0x7F);\n\t\t\tn = n >> 7;\n\t\t}\n\n\t\t// join the 7 bit chunks together, all but last chunk get leading 1\n\t\tfor (var i = a.length - 1; i >= 0; i--) {\n\t\t\tres = res << 8;\n\t\t\tvar bits = a[i];\n\t\t\tif (i !== 0) {\n\t\t\t\tbits = bits | 0x80;\n\t\t\t}\n\t\t\tres = res | bits;\n\t\t}\n\n\t\tvar padding = res.toString(16).length;\n\t\tpadding += padding % 2;\n\n\t\treturn toHex(res, padding);\n\t}\n\n\trendererFactory = function() {\n\t\treturn new Midi();\n\t};\n})();\n\nmodule.exports = rendererFactory;\n","// abc_midi_sequencer.js: Turn parsed abc into a linear series of events.\n\nvar sequence;\nvar parseCommon = require(\"../parse/abc_common\");\n\n(function() {\n\t\"use strict\";\n\n\tvar measureLength = 1; // This should be set by the meter, but just in case that is missing, we'll take a guess.\n\t// The abc is provided to us line by line. It might have repeats in it. We want to re arrange the elements to\n\t// be an array of voices with all the repeats embedded, and no lines. Then it is trivial to go through the events\n\t// one at a time and turn it into midi.\n\n\tvar PERCUSSION_PROGRAM = 128;\n\n\tsequence = function(abctune, options) {\n\t\t// Global options\n\t\toptions = options || {};\n\t\tvar qpm;\n\t\tvar program = options.program || 0;\t// The program if there isn't a program specified.\n\t\tvar transpose = options.midiTranspose || 0;\n\t\t// If the tune has a visual transpose then that needs to be subtracted out because we are getting the visual object.\n\t\tif (abctune.visualTranspose)\n\t\t\ttranspose -= abctune.visualTranspose;\n\t\tvar channel = options.channel || 0;\n\t\tvar channelExplicitlySet = false;\n\t\tvar drumPattern = options.drum || \"\";\n\t\tvar drumBars = options.drumBars || 1;\n\t\tvar drumIntro = options.drumIntro || 0;\n\t\tvar drumOn = drumPattern !== \"\";\n\t\tvar style = []; // The note head style for each voice.\n\t\tvar rhythmHeadThisBar = false; // Rhythm notation was detected.\n\t\tvar crescendoSize = 50; // how much to increase or decrease volume when crescendo/diminuendo is encountered.\n\n\t\t// All of the above overrides need to be integers\n\t\tprogram = parseInt(program, 10);\n\t\ttranspose = parseInt(transpose, 10);\n\t\tchannel = parseInt(channel, 10);\n\t\tif (channel === 10)\n\t\t\tprogram = PERCUSSION_PROGRAM;\n\t\tdrumPattern = drumPattern.split(\" \");\n\t\tdrumBars = parseInt(drumBars, 10);\n\t\tdrumIntro = parseInt(drumIntro, 10);\n\n\t\tvar bagpipes = abctune.formatting.bagpipes; // If it is bagpipes, then the gracenotes are played on top of the main note.\n\t\tif (bagpipes)\n\t\t\tprogram = 71;\n\n\t\t// %%MIDI fermatafixed\n\t\t// %%MIDI fermataproportional\n\t\t// %%MIDI deltaloudness n\n\t\t// %%MIDI gracedivider b\n\t\t// %%MIDI ratio n m\n\t\t// %%MIDI beat a b c n\n\t\t// %%MIDI grace a/b\n\t\t// %%MIDI trim x/y\n\n\t\t// %MIDI gchordon\n\t\t// %MIDI gchordoff\n\t\t// %%MIDI bassprog 45\n\t\t// %%MIDI chordprog 24\n\t\t// %%MIDI chordname name n1 n2 n3 n4 n5 n6\n\n\t\t//%%MIDI beat ⟨int1⟩ ⟨int2⟩ ⟨int3⟩ ⟨int4⟩: controls the volumes of the notes in a measure. The first note in a bar has volume ⟨int1⟩; other ‘strong’ notes have volume ⟨int2⟩ and all the rest have volume ⟨int3⟩. These values must be in the range 0–127. The parameter ⟨int4⟩ determines which notes are ‘strong’. If the time signature is x/y, then each note is given a position number k = 0, 1, 2. . . x-1 within each bar. If k is a multiple of ⟨int4⟩, then the note is ‘strong’.\n\n\t\tvar startingMidi = [];\n\t\tif (abctune.formatting.midi) {\n\t\t\t//console.log(\"MIDI Formatting:\", abctune.formatting.midi);\n\t\t\tvar globals = abctune.formatting.midi;\n\t\t\tif (globals.program && globals.program.length > 0) {\n\t\t\t\tprogram = globals.program[0];\n\t\t\t\tif (globals.program.length > 1) {\n\t\t\t\t\tprogram = globals.program[1];\n\t\t\t\t\tchannel = globals.program[0];\n\t\t\t\t}\n\t\t\t\tchannelExplicitlySet = true;\n\t\t\t}\n\t\t\tif (globals.transpose)\n\t\t\t\ttranspose = globals.transpose[0];\n\t\t\tif (globals.channel) {\n\t\t\t\tchannel = globals.channel[0];\n\t\t\t\tchannelExplicitlySet = true;\n\t\t\t}\n\t\t\tif (globals.drum)\n\t\t\t\tdrumPattern = globals.drum;\n\t\t\tif (globals.drumbars)\n\t\t\t\tdrumBars = globals.drumbars[0];\n\t\t\tif (globals.drumon)\n\t\t\t\tdrumOn = true;\n\t\t\tif (channel === 10)\n\t\t\t\tprogram = PERCUSSION_PROGRAM;\n\t\t\tif (globals.beat)\n\t\t\t\tstartingMidi.push({ el_type: 'beat', beats: globals.beat })\n\t\t\tif (globals.nobeataccents)\n\t\t\t\tstartingMidi.push({ el_type: 'beataccents', value: false });\n\n\t\t}\n\n\t\t// Specified options in abc string.\n\n\t\t// If the tempo was passed in, use that.\n\t\t// If the tempo is specified, use that.\n\t\t// If there is a default, use that.\n\t\t// Otherwise, use the default.\n\t\tif (options.qpm)\n\t\t\tqpm = parseInt(options.qpm, 10);\n\t\telse if (abctune.metaText.tempo)\n\t\t\tqpm = interpretTempo(abctune.metaText.tempo, abctune.getBeatLength());\n\t\telse if (options.defaultQpm)\n\t\t\tqpm = options.defaultQpm;\n\t\telse\n\t\t\tqpm = 180; \t// The tempo if there isn't a tempo specified.\n\n\t\tvar startVoice = [];\n\t\tif (bagpipes)\n\t\t\tstartVoice.push({ el_type: 'bagpipes' });\n\t\tstartVoice.push({ el_type: 'instrument', program: program });\n\t\tif (channel)\n\t\t\tstartVoice.push({ el_type: 'channel', channel: channel });\n\t\tif (transpose)\n\t\t\tstartVoice.push({ el_type: 'transpose', transpose: transpose });\n\t\tstartVoice.push({ el_type: 'tempo', qpm: qpm });\n\t\tfor (var ss = 0; ss < startingMidi.length;ss++)\n\t\t\tstartVoice.push(startingMidi[ss]);\n\n\t\t// the relevant part of the input structure is:\n\t\t// abctune\n\t\t//\t\tarray lines\n\t\t//\t\t\tarray staff\n\t\t//\t\t\t\tobject key\n\t\t//\t\t\t\tobject meter\n\t\t//\t\t\t\tarray voices\n\t\t//\t\t\t\t\tarray abcelem\n\n\t\t// visit each voice completely in turn\n\t\tvar voices = [];\n\t\tvar inCrescendo = [];\n\t\tvar inDiminuendo = [];\n\t\tvar durationCounter = [0];\n\t\tvar tempoChanges = {};\n\t\ttempoChanges[\"0\"] = { el_type: 'tempo', qpm: qpm, timing: 0 };\n\t\tvar currentVolume;\n\t\tvar startRepeatPlaceholder = []; // There is a place holder for each voice.\n\t\tvar skipEndingPlaceholder = []; // This is the place where the first ending starts.\n\t\tvar startingDrumSet = false;\n\t\tvar lines = abctune.lines; //abctune.deline(); TODO-PER: can switch to this, then simplify the loops below.\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\t// For each group of staff lines in the tune.\n\t\t\tvar line = lines[i];\n\t\t\tif (line.staff) {\n\t\t\t\tvar staves = line.staff;\n\t\t\t\tvar voiceNumber = 0;\n\t\t\t\tfor (var j = 0; j < staves.length; j++) {\n\t\t\t\t\tvar staff = staves[j];\n\t\t\t\t\tif (staff.clef && staff.clef.type === \"TAB\")\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t// For each staff line\n\t\t\t\t\tfor (var k = 0; k < staff.voices.length; k++) {\n\t\t\t\t\t\t// For each voice in a staff line\n\t\t\t\t\t\tvar voice = staff.voices[k];\n\t\t\t\t\t\tif (!voices[voiceNumber]) {\n\t\t\t\t\t\t\tvoices[voiceNumber] = [].concat(JSON.parse(JSON.stringify(startVoice)));\n\t\t\t\t\t\t\tvar voiceName = getTrackTitle(line.staff, voiceNumber);\n\t\t\t\t\t\t\tif (voiceName)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].unshift({el_type: \"name\", trackName: voiceName});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Negate any transposition for the percussion staff.\n\t\t\t\t\t\tif (transpose && staff.clef.type === \"perc\")\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 0 });\n\n\t\t\t\t\t\tif (staff.clef && staff.clef.type === 'perc' && !channelExplicitlySet) {\n\t\t\t\t\t\t\tfor (var cl = 0; cl < voices[voiceNumber].length; cl++) {\n\t\t\t\t\t\t\t\tif (voices[voiceNumber][cl].el_type === 'instrument')\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber][cl].program = PERCUSSION_PROGRAM;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (staff.key) {\n\t\t\t\t\t\t\taddKey(voices[voiceNumber], staff.key);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.meter) {\n\t\t\t\t\t\t\taddMeter(voices[voiceNumber], staff.meter);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!startingDrumSet && drumOn) { // drum information is only needed once, so use the first line and track 0.\n\t\t\t\t\t\t\tvoices[voiceNumber].push({el_type: 'drum', params: {pattern: drumPattern, bars: drumBars, on: drumOn, intro: drumIntro}});\n\t\t\t\t\t\t\tstartingDrumSet = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.clef && staff.clef.type !== \"perc\" && staff.clef.transpose) {\n\t\t\t\t\t\t\tstaff.clef.el_type = 'clef';\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: staff.clef.transpose });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (staff.clef && staff.clef.type) {\n\t\t\t\t\t\t\tif (staff.clef.type.indexOf(\"-8\") >= 0)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: -12 });\n\t\t\t\t\t\t\telse if (staff.clef.type.indexOf(\"+8\") >= 0)\n\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 12 });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (abctune.formatting.midi && abctune.formatting.midi.drumoff) {\n\t\t\t\t\t\t\t// If there is a drum off command right at the beginning it is put in the metaText instead of the stream,\n\t\t\t\t\t\t\t// so we will just insert it here.\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'bar' });\n\t\t\t\t\t\t\tvoices[voiceNumber].push({el_type: 'drum', params: {pattern: \"\", on: false }});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar noteEventsInBar = 0;\n\t\t\t\t\t\tvar tripletMultiplier = 0;\n\t\t\t\t\t\tvar tripletDurationTotal = 0; // try to mitigate the js rounding problems.\n\t\t\t\t\t\tvar tripletDurationCount = 0;\n\t\t\t\t\t\tcurrentVolume = [105, 95, 85, 1];\n\n\t\t\t\t\t\tfor (var v = 0; v < voice.length; v++) {\n\t\t\t\t\t\t\t// For each element in a voice\n\t\t\t\t\t\t\tvar elem = voice[v];\n\t\t\t\t\t\t\tswitch (elem.el_type) {\n\t\t\t\t\t\t\t\tcase \"note\":\n\t\t\t\t\t\t\t\t\tif (inCrescendo[k]) {\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[0] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[1] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[2] += inCrescendo[k];\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (inDiminuendo[k]) {\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[0] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[1] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tcurrentVolume[2] += inDiminuendo[k];\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tsetDynamics(elem);\n\n\t\t\t\t\t\t\t\t\t// regular items are just pushed.\n\t\t\t\t\t\t\t\t\tif (!elem.rest || elem.rest.type !== 'spacer') {\n\t\t\t\t\t\t\t\t\t\tvar noteElem = { elem: elem, el_type: \"note\", timing: durationCounter[voiceNumber] }; // Make a copy so that modifications aren't kept except for adding the midiPitches\n\t\t\t\t\t\t\t\t\t\tif (elem.style)\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.style = elem.style;\n\t\t\t\t\t\t\t\t\t\telse if (style[voiceNumber])\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.style = style[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tnoteElem.duration = (elem.duration === 0) ? 0.25 : elem.duration;\n\t\t\t\t\t\t\t\t\t\tif (elem.startTriplet) {\n\t\t\t\t\t\t\t\t\t\t\ttripletMultiplier = elem.tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\ttripletDurationTotal = elem.startTriplet * tripletMultiplier * elem.duration;\n\t\t\t\t\t\t\t\t\t\t\tif (elem.startTriplet !== elem.tripletR) { // most commonly (3:2:2\n\t\t\t\t\t\t\t\t\t\t\t\tif (v + elem.tripletR <= voice.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar durationTotal = 0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor (var w = v; w < v + elem.tripletR; w++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdurationTotal += voice[w].duration;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttripletDurationTotal = tripletMultiplier * durationTotal;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = noteElem.duration * tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round(noteElem.duration*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\ttripletDurationCount = noteElem.duration;\n\t\t\t\t\t\t\t\t\t\t} else if (tripletMultiplier) {\n\t\t\t\t\t\t\t\t\t\t\tif (elem.endTriplet) {\n\t\t\t\t\t\t\t\t\t\t\t\ttripletMultiplier = 0;\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round((tripletDurationTotal - tripletDurationCount)*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = noteElem.duration * tripletMultiplier;\n\t\t\t\t\t\t\t\t\t\t\t\tnoteElem.duration = Math.round(noteElem.duration*1000000)/1000000;\n\t\t\t\t\t\t\t\t\t\t\t\ttripletDurationCount += noteElem.duration;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (elem.rest) noteElem.rest = elem.rest;\n\t\t\t\t\t\t\t\t\t\tif (elem.decoration) noteElem.decoration = elem.decoration.slice(0);\n\t\t\t\t\t\t\t\t\t\tif (elem.pitches) noteElem.pitches = parseCommon.cloneArray(elem.pitches);\n\t\t\t\t\t\t\t\t\t\tif (elem.gracenotes) noteElem.gracenotes = parseCommon.cloneArray(elem.gracenotes);\n\t\t\t\t\t\t\t\t\t\tif (elem.chord) noteElem.chord = parseCommon.cloneArray(elem.chord);\n\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(noteElem);\n\t\t\t\t\t\t\t\t\t\tif (elem.style === \"rhythm\") {\n\t\t\t\t\t\t\t\t\t\t\trhythmHeadThisBar = true;\n\t\t\t\t\t\t\t\t\t\t\tchordVoiceOffThisBar(voices)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tnoteEventsInBar++;\n\t\t\t\t\t\t\t\t\t\tdurationCounter[voiceNumber] += noteElem.duration;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"key\":\n\t\t\t\t\t\t\t\tcase \"keySignature\":\n\t\t\t\t\t\t\t\t\taddKey(voices[voiceNumber], elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"meter\":\n\t\t\t\t\t\t\t\t\taddMeter(voices[voiceNumber], elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"clef\": // need to keep this to catch the \"transpose\" element.\n\t\t\t\t\t\t\t\t\tif (elem.transpose)\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: elem.transpose });\n\t\t\t\t\t\t\t\t\tif (elem.type) {\n\t\t\t\t\t\t\t\t\t\tif (elem.type.indexOf(\"-8\") >= 0)\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: -12 });\n\t\t\t\t\t\t\t\t\t\telse if (elem.type.indexOf(\"+8\") >= 0)\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: 12 });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"tempo\":\n\t\t\t\t\t\t\t\t\tqpm = interpretTempo(elem, abctune.getBeatLength());\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'tempo', qpm: qpm, timing: durationCounter[voiceNumber] });\n\t\t\t\t\t\t\t\t\ttempoChanges[''+durationCounter[voiceNumber]] = { el_type: 'tempo', qpm: qpm, timing: durationCounter[voiceNumber] };\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"bar\":\n\t\t\t\t\t\t\t\t\tif (noteEventsInBar > 0) // don't add two bars in a row.\n\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'bar' }); // We need the bar marking to reset the accidentals.\n\t\t\t\t\t\t\t\t\tsetDynamics(elem);\n\t\t\t\t\t\t\t\t\tnoteEventsInBar = 0;\n\t\t\t\t\t\t\t\t\t// figure out repeats and endings --\n\t\t\t\t\t\t\t\t\t// The important part is where there is a start repeat, and end repeat, or a first ending.\n\t\t\t\t\t\t\t\t\tvar endRepeat = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\");\n\t\t\t\t\t\t\t\t\tvar startEnding = (elem.startEnding === '1');\n\t\t\t\t\t\t\t\t\tvar startRepeat = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_dbl_repeat\" || elem.type === \"bar_right_repeat\");\n\t\t\t\t\t\t\t\t\tif (endRepeat) {\n\t\t\t\t\t\t\t\t\t\tvar s = startRepeatPlaceholder[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tif (!s) s = 0; // If there wasn't a left repeat, then we repeat from the beginning.\n\t\t\t\t\t\t\t\t\t\tvar e = skipEndingPlaceholder[voiceNumber];\n\t\t\t\t\t\t\t\t\t\tif (!e) e = voices[voiceNumber].length; // If there wasn't a first ending marker, then we copy everything.\n\t\t\t\t\t\t\t\t\t\t// duplicate each of the elements - this has to be a deep copy.\n\t\t\t\t\t\t\t\t\t\tfor (var z = s; z < e; z++) {\n\t\t\t\t\t\t\t\t\t\t\tvar item = parseCommon.clone(voices[voiceNumber][z]);\n\t\t\t\t\t\t\t\t\t\t\tif (item.pitches)\n\t\t\t\t\t\t\t\t\t\t\t\titem.pitches = parseCommon.cloneArray(item.pitches);\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(item);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// reset these in case there is a second repeat later on.\n\t\t\t\t\t\t\t\t\t\tskipEndingPlaceholder[voiceNumber] = undefined;\n\t\t\t\t\t\t\t\t\t\tstartRepeatPlaceholder[voiceNumber] = undefined;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (startEnding)\n\t\t\t\t\t\t\t\t\t\tskipEndingPlaceholder[voiceNumber] = voices[voiceNumber].length;\n\t\t\t\t\t\t\t\t\tif (startRepeat)\n\t\t\t\t\t\t\t\t\t\tstartRepeatPlaceholder[voiceNumber] = voices[voiceNumber].length;\n\t\t\t\t\t\t\t\t\trhythmHeadThisBar = false;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'style':\n\t\t\t\t\t\t\t\t\tstyle[voiceNumber] = elem.head;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push(interpretMeter(elem));\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'part':\n\t\t\t\t\t\t\t\t\t// TODO-PER: If there is a part section in the header, then this should probably affect the repeats.\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'stem':\n\t\t\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\t\tcase 'break':\n\t\t\t\t\t\t\t\tcase 'font':\n\t\t\t\t\t\t\t\t\t// These elements don't affect sound\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'midi':\n\t\t\t\t\t\t\t\t\t//console.log(\"MIDI inline\", elem); // TODO-PER: for debugging. Remove this.\n\t\t\t\t\t\t\t\t\tvar drumChange = false;\n\t\t\t\t\t\t\t\t\tswitch (elem.cmd) {\n\t\t\t\t\t\t\t\t\t\tcase \"drumon\": drumOn = true; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drumoff\": drumOn = false; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drum\": drumPattern = elem.params; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drumbars\": drumBars = elem.params[0]; drumChange = true; break;\n\t\t\t\t\t\t\t\t\t\tcase \"drummap\":\n\t\t\t\t\t\t\t\t\t\t\t// This is handled before getting here so it can be ignored.\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"channel\":\n\t\t\t\t\t\t\t\t\t\t\t// There's not much needed for the channel except to look out for the percussion channel\n\t\t\t\t\t\t\t\t\t\t\tif (elem.params[0] === 10)\n\t\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'instrument', program: PERCUSSION_PROGRAM });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"program\":\n\t\t\t\t\t\t\t\t\t\t\taddIfDifferent(voices[voiceNumber], { el_type: 'instrument', program: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tchannelExplicitlySet = true;\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"transpose\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'transpose', transpose: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"gchordoff\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'gchord', tacet: true });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"gchordon\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'gchord', tacet: false });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"beat\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: elem.params });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"nobeataccents\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beataccents', value: false });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"beataccents\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beataccents', value: true });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"vol\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'vol', volume: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tcase \"volinc\":\n\t\t\t\t\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'volinc', volume: elem.params[0] });\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"MIDI seq: midi cmd not handled: \", elem.cmd, elem);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (drumChange) {\n\t\t\t\t\t\t\t\t\t\tvoices[0].push({el_type: 'drum', params: { pattern: drumPattern, bars: drumBars, intro: drumIntro, on: drumOn}});\n\t\t\t\t\t\t\t\t\t\tstartingDrumSet = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tconsole.log(\"MIDI: element type \" + elem.el_type + \" not handled.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvoiceNumber++;\n\t\t\t\t\t\tif (!durationCounter[voiceNumber])\n\t\t\t\t\t\t\tdurationCounter[voiceNumber] = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction setDynamics(elem) {\n\t\t\t\t\tvar volumes = {\n\t\t\t\t\t\t'pppp': [15, 10, 5, 1],\n\t\t\t\t\t\t'ppp': [30, 20, 10, 1],\n\t\t\t\t\t\t'pp': [45, 35, 20, 1],\n\t\t\t\t\t\t'p': [60, 50, 35, 1],\n\t\t\t\t\t\t'mp': [75, 65, 50, 1],\n\t\t\t\t\t\t'mf': [90, 80, 65, 1],\n\t\t\t\t\t\t'f': [105, 95, 80, 1],\n\t\t\t\t\t\t'ff': [120, 110, 95, 1],\n\t\t\t\t\t\t'fff': [127, 125, 110, 1],\n\t\t\t\t\t\t'ffff': [127, 125, 110, 1]\n\t\t\t\t\t};\n\n\t\t\t\t\tvar dynamicType;\n\t\t\t\t\tif (elem.decoration) {\n\t\t\t\t\t\tif (elem.decoration.indexOf('pppp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'pppp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ppp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ppp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('pp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'pp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('p') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'p';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('mp') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'mp';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('mf') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'mf';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('f') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'f';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ff';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('fff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'fff';\n\t\t\t\t\t\telse if (elem.decoration.indexOf('ffff') >= 0)\n\t\t\t\t\t\t\tdynamicType = 'ffff';\n\n\t\t\t\t\t\tif (dynamicType) {\n\t\t\t\t\t\t\tcurrentVolume = volumes[dynamicType].slice(0);\n\t\t\t\t\t\t\tvoices[voiceNumber].push({ el_type: 'beat', beats: currentVolume.slice(0) });\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (elem.decoration.indexOf(\"crescendo(\") >= 0) {\n\t\t\t\t\t\t\tvar n = numNotesToDecoration(voice, v, \"crescendo)\");\n\t\t\t\t\t\t\tvar top = Math.min(127, currentVolume[0] + crescendoSize);\n\t\t\t\t\t\t\tvar endDec = endingVolume(voice, v+n+1, Object.keys(volumes));\n\t\t\t\t\t\t\tif (endDec)\n\t\t\t\t\t\t\t\ttop = volumes[endDec][0];\n\t\t\t\t\t\t\tif (n > 0)\n\t\t\t\t\t\t\t\tinCrescendo[k] = Math.floor((top - currentVolume[0]) / n);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"crescendo)\") >= 0) {\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"diminuendo(\") >= 0) {\n\t\t\t\t\t\t\tvar n2 = numNotesToDecoration(voice, v, \"diminuendo)\");\n\t\t\t\t\t\t\tvar bottom = Math.max(15, currentVolume[0] - crescendoSize);\n\t\t\t\t\t\t\tvar endDec2 = endingVolume(voice, v+n2+1, Object.keys(volumes));\n\t\t\t\t\t\t\tif (endDec2)\n\t\t\t\t\t\t\t\tbottom = volumes[endDec2][0];\n\t\t\t\t\t\t\tinCrescendo[k] = false;\n\t\t\t\t\t\t\tif (n2 > 0)\n\t\t\t\t\t\t\t\tinDiminuendo[k] = Math.floor((bottom - currentVolume[0]) / n2);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t} else if (elem.decoration.indexOf(\"diminuendo)\") >= 0) {\n\t\t\t\t\t\t\tinDiminuendo[k] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// If there are tempo changes, make sure they are in all the voices. This must be done post process because all the elements in all the voices need to be created first.\n\t\tinsertTempoChanges(voices, tempoChanges);\n\n\t\tif (drumIntro) {\n\t\t\tvar pickups = abctune.getPickupLength();\n\t\t\t// add some measures of rests to the start of each track.\n\t\t\tfor (var vv = 0; vv < voices.length; vv++) {\n\t\t\t\tvar insertPoint = 0;\n\t\t\t\twhile (voices[vv][insertPoint].el_type !== \"note\" && voices[vv].length > insertPoint)\n\t\t\t\t\tinsertPoint++;\n\t\t\t\tif (voices[vv].length > insertPoint) {\n\t\t\t\t\tfor (var w = 0; w < drumIntro; w++) {\n\t\t\t\t\t\t// If it is the last measure of intro, subtract the pickups.\n\t\t\t\t\t\tif (pickups === 0 || w < drumIntro-1)\n\t\t\t\t\t\t\tvoices[vv].splice(insertPoint, 0, {el_type: \"note\", rest: {type: \"rest\"}, duration: measureLength},\n\t\t\t\t\t\t\t\t{ el_type: \"bar\" });\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvoices[vv].splice(insertPoint, 0, {el_type: \"note\", rest: {type: \"rest\"}, duration: measureLength-pickups});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (voices.length > 0 && voices[0].length > 0) {\n\t\t\tvoices[0][0].pickupLength = abctune.getPickupLength();\n\t\t}\n\t\treturn voices;\n\t};\n\n\tfunction numNotesToDecoration(voice, start, decoration) {\n\t\tvar counter = 0;\n\t\tfor (var i = start+1; i < voice.length; i++) {\n\t\t\tif (voice[i].el_type === \"note\")\n\t\t\t\tcounter++;\n\t\t\tif (voice[i].decoration && voice[i].decoration.indexOf(decoration) >= 0)\n\t\t\t\treturn counter;\n\t\t}\n\t\treturn counter;\n\t}\n\tfunction endingVolume(voice, start, volumeDecorations) {\n\t\tvar end = Math.min(voice.length, start + 3); // If we have a volume within a couple notes of the end then assume that is the destination.\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tif (voice[i].el_type === \"note\") {\n\t\t\t\tif (voice[i].decoration) {\n\t\t\t\t\tfor (var j = 0; j < voice[i].decoration.length; j++) {\n\t\t\t\t\t\tif (volumeDecorations.indexOf(voice[i].decoration[j]) >= 0)\n\t\t\t\t\t\t\treturn voice[i].decoration[j];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction insertTempoChanges(voices, tempoChanges) {\n\t\tif (!tempoChanges || tempoChanges.length === 0)\n\t\t\treturn;\n\t\tvar changePositions = Object.keys(tempoChanges);\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar lastTempo = tempoChanges['0'] ? tempoChanges['0'].qpm : 0; // Don't insert redundant changes. This happens normally when repeating from the beginning, but could happen anywhere that there is a tempo marking that is the same as the last one.\n\t\t\tfor (var j = 0; j < voice.length; j++) {\n\t\t\t\tvar el = voice[j];\n\t\t\t\tif (el.el_type === \"tempo\")\n\t\t\t\t\tlastTempo = el.qpm;\n\t\t\t\tif (changePositions.indexOf(''+el.timing) >= 0 && lastTempo !== tempoChanges[''+el.timing].qpm) {\n\t\t\t\t\tlastTempo = tempoChanges[''+el.timing].qpm;\n\t\t\t\t\tif (el.el_type === \"tempo\") {\n\t\t\t\t\t\tel.qpm = tempoChanges[''+el.timing].qpm;\n\t\t\t\t\t\tj++; // when there is a tempo element the next element has the same timing and we don't want it to match the second time.\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//console.log(\"tempo position\", i, j, el);\n\t\t\t\t\t\tvoices[i].splice(j, 0, {el_type: \"tempo\", qpm: tempoChanges[''+el.timing].qpm, timing: el.timing});\n\t\t\t\t\t\tj +=2; // skip the element we just inserted.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction chordVoiceOffThisBar(voices) {\n\t\tfor (var i = 0; i < voices.length; i++) {\n\t\t\tvar voice = voices[i];\n\t\t\tvar j = voice.length-1;\n\t\t\twhile (j >= 0 && voice[j].el_type !== 'bar') {\n\t\t\t\tvoice[j].noChordVoice = true;\n\t\t\t\tj--;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getTrackTitle(staff, voiceNumber) {\n\t\tif (!staff || staff.length <= voiceNumber || !staff[voiceNumber].title)\n\t\t\treturn undefined;\n\t\treturn staff[voiceNumber].title.join(\" \");\n\t}\n\n\tfunction interpretTempo(element, beatLength) {\n\t\tvar duration = 1/4;\n\t\tif (element.duration) {\n\t\t\tduration = element.duration[0];\n\t\t}\n\t\tvar bpm = 60;\n\t\tif (element.bpm) {\n\t\t\tbpm = element.bpm;\n\t\t}\n\t\t// The tempo is defined with a beat length of \"duration\". If that isn't the natural beat length then there is a translation.\n\t\treturn duration * bpm / beatLength;\n\t}\n\n\tfunction interpretMeter(element) {\n\t\tvar meter;\n\t\tswitch (element.type) {\n\t\t\tcase \"common_time\":\n\t\t\t\tmeter = { el_type: 'meter', num: 4, den: 4 };\n\t\t\t\tbreak;\n\t\t\tcase \"cut_time\":\n\t\t\t\tmeter = { el_type: 'meter', num: 2, den: 2 };\n\t\t\t\tbreak;\n\t\t\tcase \"specified\":\n\t\t\t\t// TODO-PER: only taking the first meter, so the complex meters are not handled.\n\t\t\t\tmeter = { el_type: 'meter', num: element.value[0].num, den: element.value[0].den };\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// This should never happen.\n\t\t\t\tmeter = { el_type: 'meter' };\n\t\t}\n\t\tmeasureLength = meter.num/meter.den;\n\t\treturn meter;\n\t}\n\n\tfunction removeNaturals(accidentals) {\n\t\tvar acc = [];\n\t\tfor (var i = 0; i < accidentals.length; i++) {\n\t\t\tif (accidentals[i].acc !== \"natural\")\n\t\t\t\tacc.push(accidentals[i])\n\t\t}\n\t\treturn acc;\n\t}\n\tfunction addKey(arr, key) {\n\t\tvar newKey;\n\t\tif (key.root === 'HP')\n\t\t\tnewKey = {el_type: 'key', accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}]};\n\t\telse\n\t\t\tnewKey = {el_type: 'key', accidentals: removeNaturals(key.accidentals) };\n\t\taddIfDifferent(arr, newKey);\n\t}\n\tfunction addMeter(arr, meter) {\n\t\tvar newMeter = interpretMeter(meter);\n\t\taddIfDifferent(arr, newMeter);\n\t}\n\tfunction addIfDifferent(arr, item) {\n\t\tfor (var i = arr.length-1; i >= 0; i--) {\n\t\t\tif (arr[i].el_type === item.el_type) {\n\t\t\t\tif (JSON.stringify(arr[i]) !== JSON.stringify(item))\n\t\t\t\t\tarr.push(item);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tarr.push(item);\n\t}\n\n})();\n\nmodule.exports = sequence;\n","var registerAudioContext = require('./register-audio-context.js');\n\nfunction activeAudioContext() {\n\tif (!window.abcjsAudioContext)\n\t\tregisterAudioContext();\n\treturn window.abcjsAudioContext;\n}\n\nmodule.exports = activeAudioContext;\n","// This turns the number of cents to detune into a value that is convenient to use in pitch calculations\n// A cent is 1/100 of a musical half step and is calculated exponentially over the course of an octave.\n// The equation is:\n// Two to the power of cents divided by 1200\n\nfunction centsToFactor(cents) {\n\treturn Math.pow(2, cents/1200);\n}\n\nmodule.exports = centsToFactor;\n","// Convert the input structure to a more useful structure where each item has a length of its own.\n\nvar instrumentIndexToName = require('./instrument-index-to-name');\n\nvar createNoteMap = function(sequence) {\n\tvar map = [];\n\tfor (var i = 0; i < sequence.tracks.length; i++)\n\t\tmap.push([]);\n\n\t// TODO-PER: handle more than one note in a track\n\tvar nextNote = {};\n\tvar currentInstrument = instrumentIndexToName[0];\n\t// ev.start and ev.duration are in whole notes. Need to turn them into\n\tsequence.tracks.forEach(function(track, i) {\n\t\ttrack.forEach(function(ev) {\n\t\t\tswitch (ev.cmd) {\n\t\t\t\tcase \"note\":\n\t\t\t\t\t// ev contains:\n\t\t\t\t\t// {\"cmd\":\"note\",\"pitch\":72,\"volume\":95,\"start\":0.125,\"duration\":0.25,\"instrument\":0,\"gap\":0}\n\t\t\t\t\t// where start and duration are in whole notes, gap is in 1/1920 of a second (i.e. MIDI ticks)\n\t\t\t\t\tif (ev.duration > 0) {\n\t\t\t\t\t\tvar gap = ev.gap ? ev.gap : 0;\n\t\t\t\t\t\tvar len = ev.duration;\n\t\t\t\t\t\tgap = Math.min(gap, len * 2 / 3);\n\t\t\t\t\t\tvar obj = {\n\t\t\t\t\t\t\tpitch: ev.pitch,\n\t\t\t\t\t\t\tinstrument: currentInstrument,\n\t\t\t\t\t\t\tstart: Math.round((ev.start) * 1000000)/1000000,\n\t\t\t\t\t\t\tend: Math.round((ev.start + len - gap) * 1000000)/1000000,\n\t\t\t\t\t\t\tvolume: ev.volume\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ev.startChar)\n\t\t\t\t\t\t\tobj.startChar = ev.startChar;\n\t\t\t\t\t\tif (ev.endChar)\n\t\t\t\t\t\t\tobj.endChar = ev.endChar;\n\t\t\t\t\t\tif (ev.style)\n\t\t\t\t\t\t\tobj.style = ev.style;\n\t\t\t\t\t\tif (ev.cents)\n\t\t\t\t\t\t\tobj.cents = ev.cents;\n\t\t\t\t\t\tmap[i].push(obj);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"program\":\n\t\t\t\t\tcurrentInstrument = instrumentIndexToName[ev.instrument];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\t// Ignore the track names - that is just for midi files.\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// TODO-PER: handle other event types\n\t\t\t\t\tconsole.log(\"Unhandled midi event\", ev);\n\t\t\t}\n\t\t});\n\t});\n\treturn map;\n};\n\nmodule.exports = createNoteMap;\n","var supportsAudio = require('./supports-audio');\nvar registerAudioContext = require('./register-audio-context');\nvar activeAudioContext = require('./active-audio-context');\nvar parseCommon = require('../parse/abc_common');\n\nvar loopImage = require('./images/loop.svg.js');\nvar playImage = require('./images/play.svg.js');\nvar pauseImage = require('./images/pause.svg.js');\nvar loadingImage = require('./images/loading.svg.js');\nvar resetImage = require('./images/reset.svg.js');\n\nfunction CreateSynthControl(parent, options) {\n\tvar self = this;\n\t// parent is either an element or a selector.\n\tif (typeof parent === \"string\") {\n\t\tvar selector = parent;\n\t\tparent = document.querySelector(selector);\n\t\tif (!parent)\n\t\t\tthrow new Error(\"Cannot find element \\\"\" + selector + \"\\\" in the DOM.\");\n\t} else if (!(parent instanceof HTMLElement))\n\t\tthrow new Error(\"The first parameter must be a valid element or selector in the DOM.\");\n\n\tself.parent = parent;\n\tself.options = {};\n\tif (options)\n\t\tself.options = parseCommon.clone(options);\n\n\t// This can be called in the following cases:\n\t// AC already registered and not suspended\n\t// AC already registered and suspended\n\t// AC not registered and not passed in\n\t// AC not registered but passed in (but suspended)\n\t// AC not registered but passed in (not suspended)\n\t// If the AC is already registered, then just use it - ignore what is passed in\n\t// Create the AC if necessary if there isn't one already.\n\t// We don't care right now if the AC is suspended - whenever a button is clicked then we check it.\n\tif (self.options.ac)\n\t\tregisterAudioContext(self.options.ac);\n\tbuildDom(self.parent, self.options);\n\tattachListeners(self);\n\n\tself.disable = function(isDisabled) {\n\t\tvar el = self.parent.querySelector(\".abcjs-inline-audio\");\n\t\tif (isDisabled)\n\t\t\tel.classList.add(\"abcjs-disabled\");\n\t\telse\n\t\t\tel.classList.remove(\"abcjs-disabled\");\n\t};\n\tself.setWarp = function(tempo, warp) {\n\t\tvar el = self.parent.querySelector(\".abcjs-midi-tempo\");\n\t\tel.value = Math.round(warp);\n\t\tself.setTempo(tempo)\n\t};\n\tself.setTempo = function(tempo) {\n\t\tvar el = self.parent.querySelector(\".abcjs-midi-current-tempo\");\n\t\tif (el)\n\t\t\tel.innerHTML = Math.round(tempo);\n\t};\n\tself.resetAll = function() {\n\t\tvar pushedButtons = self.parent.querySelectorAll(\".abcjs-pushed\");\n\t\tfor (var i = 0; i < pushedButtons.length; i++) {\n\t\t\tvar button = pushedButtons[i];\n\t\t\tbutton.classList.remove(\"abcjs-pushed\");\n\t\t}\n\t};\n\tself.pushPlay = function(push) {\n\t\tvar startButton = self.parent.querySelector(\".abcjs-midi-start\");\n\t\tif (!startButton)\n\t\t\treturn;\n\t\tif (push)\n\t\t\tstartButton.classList.add(\"abcjs-pushed\");\n\t\telse\n\t\t\tstartButton.classList.remove(\"abcjs-pushed\");\n\t};\n\tself.pushLoop = function(push) {\n\t\tvar loopButton = self.parent.querySelector(\".abcjs-midi-loop\");\n\t\tif (!loopButton)\n\t\t\treturn;\n\t\tif (push)\n\t\t\tloopButton.classList.add(\"abcjs-pushed\");\n\t\telse\n\t\t\tloopButton.classList.remove(\"abcjs-pushed\");\n\t};\n\n\tself.setProgress = function (percent, totalTime) {\n\t\tvar progressBackground = self.parent.querySelector(\".abcjs-midi-progress-background\");\n\t\tvar progressThumb = self.parent.querySelector(\".abcjs-midi-progress-indicator\");\n\t\tif (!progressBackground || !progressThumb)\n\t\t\treturn;\n\t\tvar width = progressBackground.clientWidth;\n\t\tvar left = width * percent;\n\t\tprogressThumb.style.left = left + \"px\";\n\n\t\tvar clock = self.parent.querySelector(\".abcjs-midi-clock\");\n\t\tif (clock) {\n\t\t\tvar totalSeconds = (totalTime * percent) / 1000;\n\t\t\tvar minutes = Math.floor(totalSeconds / 60);\n\t\t\tvar seconds = Math.floor(totalSeconds % 60);\n\t\t\tvar secondsFormatted = seconds < 10 ? \"0\" + seconds : seconds;\n\t\t\tclock.innerHTML = minutes + \":\" + secondsFormatted;\n\t\t}\n\t};\n\n\tif (self.options.afterResume) {\n\t\tvar isResumed = false;\n\t\tif (self.options.ac) {\n\t\t\tisResumed = self.options.ac.state !== \"suspended\";\n\t\t} else if (activeAudioContext()) {\n\t\t\tisResumed = activeAudioContext().state !== \"suspended\";\n\t\t}\n\t\tif (isResumed)\n\t\t\tself.options.afterResume();\n\t}\n}\n\nfunction buildDom(parent, options) {\n\tvar hasLoop = !!options.loopHandler;\n\tvar hasRestart = !!options.restartHandler;\n\tvar hasPlay = !!options.playHandler || !!options.playPromiseHandler;\n\tvar hasProgress = !!options.progressHandler;\n\tvar hasWarp = !!options.warpHandler;\n\tvar hasClock = options.hasClock !== false;\n\n\tvar html = '
\\n';\n\tif (hasLoop) {\n\t\tvar repeatTitle = options.repeatTitle ? options.repeatTitle : \"Click to toggle play once/repeat.\";\n\t\tvar repeatAria = options.repeatAria ? options.repeatAria : repeatTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasRestart) {\n\t\tvar restartTitle = options.restartTitle ? options.restartTitle : \"Click to go to beginning.\";\n\t\tvar restartAria = options.restartAria ? options.restartAria : restartTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasPlay) {\n\t\tvar playTitle = options.playTitle ? options.playTitle : \"Click to play/pause.\";\n\t\tvar playAria = options.playAria ? options.playAria : playTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasProgress) {\n\t\tvar randomTitle = options.randomTitle ? options.randomTitle : \"Click to change the playback position.\";\n\t\tvar randomAria = options.randomAria ? options.randomAria : randomTitle;\n\t\thtml += '\\n';\n\t}\n\tif (hasClock) {\n\t\thtml += '\\n';\n\t}\n\tif (hasWarp) {\n\t\tvar warpTitle = options.warpTitle ? options.warpTitle : \"Change the playback speed.\";\n\t\tvar warpAria = options.warpAria ? options.warpAria : warpTitle;\n\t\tvar bpm = options.bpm ? options.bpm : \"BPM\";\n\t\thtml += ' ( ' + bpm + ')\\n';\n\t}\n\thtml += '
CSS required: load abcjs-audio.css
';\n\thtml += '
\\n';\n\tparent.innerHTML = html;\n}\n\nfunction acResumerMiddleWare(next, ev, playBtn, afterResume, isPromise) {\n\tvar needsInit = true;\n\tif (!activeAudioContext()) {\n\t\tregisterAudioContext();\n\t} else {\n\t\tneedsInit = activeAudioContext().state === \"suspended\";\n\t}\n\tif (!supportsAudio()) {\n\t\tthrow { status: \"NotSupported\", message: \"This browser does not support audio.\"};\n\t}\n\n\tif ((needsInit || isPromise) && playBtn)\n\t\tplayBtn.classList.add(\"abcjs-loading\");\n\n\tif (needsInit) {\n\t\tactiveAudioContext().resume().then(function () {\n\t\t\tif (afterResume) {\n\t\t\t\tafterResume().then(function (response) {\n\t\t\t\t\tdoNext(next, ev, playBtn, isPromise);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdoNext(next, ev, playBtn, isPromise);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tdoNext(next, ev, playBtn, isPromise);\n\t}\n}\n\nfunction doNext(next, ev, playBtn, isPromise) {\n\tif (isPromise) {\n\t\tnext(ev).then(function() {\n\t\t\tif (playBtn)\n\t\t\t\tplayBtn.classList.remove(\"abcjs-loading\");\n\t\t});\n\t} else {\n\t\tnext(ev);\n\t\tif (playBtn)\n\t\t\tplayBtn.classList.remove(\"abcjs-loading\");\n\t}\n}\n\nfunction attachListeners(self) {\n\tvar hasLoop = !!self.options.loopHandler;\n\tvar hasRestart = !!self.options.restartHandler;\n\tvar hasPlay = !!self.options.playHandler || !!self.options.playPromiseHandler;\n\tvar hasProgress = !!self.options.progressHandler;\n\tvar hasWarp = !!self.options.warpHandler;\n\tvar playBtn = self.parent.querySelector(\".abcjs-midi-start\");\n\n\tif (hasLoop)\n\t\tself.parent.querySelector(\".abcjs-midi-loop\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.loopHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasRestart)\n\t\tself.parent.querySelector(\".abcjs-midi-reset\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.restartHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasPlay)\n\t\tplayBtn.addEventListener(\"click\", function(ev){\n\t\t\tacResumerMiddleWare(\n\t\t\t\tself.options.playPromiseHandler || self.options.playHandler,\n\t\t\t\tev,\n\t\t\t\tplayBtn,\n\t\t\t\tself.options.afterResume,\n\t\t\t\t!!self.options.playPromiseHandler)\n\t\t});\n\tif (hasProgress)\n\t\tself.parent.querySelector(\".abcjs-midi-progress-background\").addEventListener(\"click\", function(ev){acResumerMiddleWare(self.options.progressHandler, ev, playBtn, self.options.afterResume)});\n\tif (hasWarp)\n\t\tself.parent.querySelector(\".abcjs-midi-tempo\").addEventListener(\"change\", function(ev){acResumerMiddleWare(self.options.warpHandler, ev, playBtn, self.options.afterResume)});\n}\nmodule.exports = CreateSynthControl;\n","var getNote = require('./load-note');\nvar createNoteMap = require('./create-note-map');\nvar registerAudioContext = require('./register-audio-context');\nvar activeAudioContext = require('./active-audio-context');\nvar supportsAudio = require('./supports-audio');\nvar pitchToNoteName = require('./pitch-to-note-name');\nvar instrumentIndexToName = require('./instrument-index-to-name');\nvar downloadBuffer = require('./download-buffer');\nvar placeNote = require('./place-note');\nvar soundsCache = require('./sounds-cache');\n\n// TODO-PER: remove the midi tests from here: I don't think the object can be constructed unless it passes.\nvar notSupportedMessage = \"MIDI is not supported in this browser.\";\n\nvar originalSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/abcjs/\";\n// These are the original soundfonts supplied. They will need a volume boost:\nvar defaultSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/FluidR3_GM/\";\nvar alternateSoundFontUrl = \"https://paulrosen.github.io/midi-js-soundfonts/MusyngKite/\";\n\nfunction CreateSynth() {\n\tvar self = this;\n\tself.audioBufferPossible = undefined;\n\tself.directSource = []; // type: AudioBufferSourceNode\n\tself.startTimeSec = undefined; // the time (in seconds) that the audio started: used for pause to get the pausedTimeSec.\n\tself.pausedTimeSec = undefined; // the position (in seconds) that the audio was paused: used for resume.\n\tself.audioBuffers = []; // cache of the buffers so starting play can be fast.\n\tself.duration = undefined; // the duration of the tune in seconds.\n\tself.isRunning = false; // whether there is currently a sound buffer running.\n//\tself.options = undefined\n\n\t// Load and cache all needed sounds\n\tself.init = function(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n//\t\tself.options = options\n\t\tregisterAudioContext(options.audioContext); // This works no matter what - if there is already an ac it is a nop; if the context is not passed in, then it creates one.\n\t\tvar startTime = activeAudioContext().currentTime;\n\t\tself.debugCallback = options.debugCallback;\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"init called\");\n\t\tself.audioBufferPossible = self._deviceCapable();\n\t\tif (!self.audioBufferPossible)\n\t\t\treturn Promise.reject({ status: \"NotSupported\", message: notSupportedMessage});\n\t\tvar params = options.options ? options.options : {};\n\t\tself.soundFontUrl = params.soundFontUrl ? params.soundFontUrl : defaultSoundFontUrl;\n\t\tif (self.soundFontUrl[self.soundFontUrl.length-1] !== '/')\n\t\t\tself.soundFontUrl += '/';\n\t\tif (params.soundFontVolumeMultiplier || params.soundFontVolumeMultiplier === 0)\n\t\t\tself.soundFontVolumeMultiplier = params.soundFontVolumeMultiplier;\n\t\telse if (self.soundFontUrl === defaultSoundFontUrl || self.soundFontUrl === alternateSoundFontUrl)\n\t\t\tself.soundFontVolumeMultiplier = 3.0;\n\t\telse if (self.soundFontUrl === originalSoundFontUrl)\n\t\t\tself.soundFontVolumeMultiplier = 0.4;\n\t\telse\n\t\t\tself.soundFontVolumeMultiplier = 1.0;\n\t\tif (params.programOffsets)\n\t\t\tself.programOffsets = params.programOffsets;\n\t\telse if (self.soundFontUrl === originalSoundFontUrl)\n\t\t\tself.programOffsets = {\n\t\t\t\t\"bright_acoustic_piano\": 20,\n\t\t\t\t\"honkytonk_piano\": 20,\n\t\t\t\t\"electric_piano_1\": 30,\n\t\t\t\t\"electric_piano_2\": 30,\n\t\t\t\t\"harpsichord\": 40,\n\t\t\t\t\"clavinet\": 20,\n\t\t\t\t\"celesta\": 20,\n\t\t\t\t\"glockenspiel\": 40,\n\t\t\t\t\"vibraphone\": 30,\n\t\t\t\t\"marimba\": 35,\n\t\t\t\t\"xylophone\": 30,\n\t\t\t\t\"tubular_bells\": 35,\n\t\t\t\t\"dulcimer\": 30,\n\t\t\t\t\"drawbar_organ\": 20,\n\t\t\t\t\"percussive_organ\": 25,\n\t\t\t\t\"rock_organ\": 20,\n\t\t\t\t\"church_organ\": 40,\n\t\t\t\t\"reed_organ\": 40,\n\t\t\t\t\"accordion\": 40,\n\t\t\t\t\"harmonica\": 40,\n\t\t\t\t\"acoustic_guitar_nylon\": 20,\n\t\t\t\t\"acoustic_guitar_steel\": 30,\n\t\t\t\t\"electric_guitar_jazz\": 25,\n\t\t\t\t\"electric_guitar_clean\": 15,\n\t\t\t\t\"electric_guitar_muted\": 35,\n\t\t\t\t\"overdriven_guitar\": 25,\n\t\t\t\t\"distortion_guitar\": 20,\n\t\t\t\t\"guitar_harmonics\": 30,\n\t\t\t\t\"electric_bass_finger\": 15,\n\t\t\t\t\"electric_bass_pick\": 30,\n\t\t\t\t\"fretless_bass\": 40,\n\t\t\t\t\"violin\": 105,\n\t\t\t\t\"viola\": 50,\n\t\t\t\t\"cello\": 40,\n\t\t\t\t\"contrabass\": 60,\n\t\t\t\t\"trumpet\": 10,\n\t\t\t\t\"trombone\": 90,\n\t\t\t\t\"alto_sax\": 20,\n\t\t\t\t\"tenor_sax\": 20,\n\t\t\t\t\"clarinet\": 20,\n\t\t\t\t\"flute\": 50,\n\t\t\t\t\"banjo\": 50,\n\t\t\t\t\"woodblock\": 20,\n\t\t\t};\n\t\telse\n\t\t\tself.programOffsets = {};\n\t\tvar p = params.fadeLength !== undefined ? parseInt(params.fadeLength,10) : NaN;\n\t\tself.fadeLength = isNaN(p) ? 200 : p;\n\t\tp = params.noteEnd !== undefined ? parseInt(params.noteEnd,10) : NaN;\n\t\tself.noteEnd = isNaN(p) ? 0 : p;\n\n\t\tself.pan = params.pan;\n\t\tself.meterSize = 1;\n\t\tif (options.visualObj) {\n\t\t\tself.flattened = options.visualObj.setUpAudio(params);\n\t\t\tvar meter = options.visualObj.getMeterFraction();\n\t\t\tif (meter.den)\n\t\t\t\tself.meterSize = options.visualObj.getMeterFraction().num / options.visualObj.getMeterFraction().den;\n\t\t} else if (options.sequence)\n\t\t\tself.flattened = options.sequence;\n\t\telse\n\t\t\treturn Promise.reject(new Error(\"Must pass in either a visualObj or a sequence\"));\n\t\tself.millisecondsPerMeasure = options.millisecondsPerMeasure ? options.millisecondsPerMeasure : (options.visualObj ? options.visualObj.millisecondsPerMeasure(self.flattened.tempo) : 1000);\n\t\tself.beatsPerMeasure = options.visualObj ? options.visualObj.getBeatsPerMeasure() : 4;\n\t\tself.sequenceCallback = params.sequenceCallback;\n\t\tself.callbackContext = params.callbackContext;\n\t\tself.onEnded = params.onEnded;\n\n\t\tvar allNotes = {};\n\t\tvar cached = [];\n\t\tvar errorNotes = [];\n\t\tvar currentInstrument = instrumentIndexToName[0];\n\t\tself.flattened.tracks.forEach(function(track) {\n\t\t\ttrack.forEach(function(event) {\n\t\t\t\tif (event.cmd === \"program\" && instrumentIndexToName[event.instrument])\n\t\t\t\t\tcurrentInstrument = instrumentIndexToName[event.instrument];\n\t\t\t\tif (event.pitch !== undefined) {\n\t\t\t\t\tvar pitchNumber = event.pitch;\n\t\t\t\t\tvar noteName = pitchToNoteName[pitchNumber];\n\t\t\t\t\tif (noteName) {\n\t\t\t\t\t\tif (!allNotes[currentInstrument])\n\t\t\t\t\t\t\tallNotes[currentInstrument] = {};\n\t\t\t\t\t\tif (!soundsCache[currentInstrument] || !soundsCache[currentInstrument][noteName])\n\t\t\t\t\t\t\tallNotes[currentInstrument][noteName] = true;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar label2 = currentInstrument+\":\"+noteName\n\t\t\t\t\t\t\tif (cached.indexOf(label2) < 0)\n\t\t\t\t\t\t\t\tcached.push(label2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar label = currentInstrument+\":\"+noteName\n\t\t\t\t\t\tconsole.log(\"Can't find note: \", pitchNumber, label);\n\t\t\t\t\t\tif (errorNotes.indexOf(label) < 0)\n\t\t\t\t\t\t\terrorNotes.push(label)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"note gathering time = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000)+\"ms\");\n\t\tstartTime = activeAudioContext().currentTime;\n\n\t\tvar notes = [];\n\t\tObject.keys(allNotes).forEach(function(instrument) {\n\t\t\tObject.keys(allNotes[instrument]).forEach(function(note) {\n\t\t\t\tnotes.push({ instrument: instrument, note: note });\n\t\t\t});\n\t\t});\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"notes \"+JSON.stringify(notes));\n\n\t\t// If there are lots of notes, load them in batches\n\t\tvar batches = [];\n\t\tvar CHUNK = 256;\n\t\tfor (var i=0; i < notes.length; i += CHUNK) {\n\t\t\tbatches.push(notes.slice(i, i + CHUNK));\n\t\t}\n\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tvar results = {\n\t\t\t\tcached: cached,\n\t\t\t\terror: errorNotes,\n\t\t\t\tloaded: []\n\t\t\t};\n\n\t\t\tvar index = 0;\n\t\t\tvar next = function() {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"loadBatch idx=\"+index+ \" len=\"+batches.length);\n\t\n\t\t\t\tif (index < batches.length) {\n\t\t\t\t\tself._loadBatch(batches[index], self.soundFontUrl, startTime).then(function(data) {\n\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\tself.debugCallback(\"loadBatch then\");\n\t\t\t\t\t\tstartTime = activeAudioContext().currentTime;\n\t\t\t\t\t\tif (data) {\n\t\t\t\t\t\t\tif (data.error)\n\t\t\t\t\t\t\t\tresults.error = results.error.concat(data.error);\n\t\t\t\t\t\t\tif (data.loaded)\n\t\t\t\t\t\t\t\tresults.loaded = results.loaded.concat(data.loaded);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}, reject);\n\t\t\t\t} else {\n\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\tself.debugCallback(\"resolve init\");\n\t\t\n\t\t\t\t\tresolve(results);\n\t\t\t\t}\n\t\t\t};\n\t\t\tnext();\n\t\t});\n\t};\n\n\tself._loadBatch = (function(batch, soundFontUrl, startTime, delay) {\n\t\t// This is called recursively to see if the sounds have loaded. The \"delay\" parameter is how long it has been since the original call.\n\t\tvar promises = [];\n\t\tbatch.forEach(function(item) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"getNote \" + item.instrument+':'+item.note);\n\t\t\tpromises.push(getNote(soundFontUrl, item.instrument, item.note, activeAudioContext()));\n\t\t});\n\t\treturn Promise.all(promises).then(function(response) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"mp3 load time = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000)+\"ms\");\n\t\t\tvar loaded = [];\n\t\t\tvar cached = [];\n\t\t\tvar pending = [];\n\t\t\tvar error = [];\n\t\t\tfor (var i = 0; i < response.length; i++) {\n\t\t\t\tvar oneResponse = response[i];\n\t\t\t\tvar which = oneResponse.instrument + \":\" + oneResponse.name;\n\t\t\t\tif (oneResponse.status === \"loaded\")\n\t\t\t\t\tloaded.push(which);\n\t\t\t\telse if (oneResponse.status === \"pending\")\n\t\t\t\t\tpending.push(which);\n\t\t\t\telse if (oneResponse.status === \"cached\")\n\t\t\t\t\tcached.push(which);\n\t\t\t\telse\n\t\t\t\t\terror.push(which + ' ' + oneResponse.message);\n\t\t\t}\n\t\t\tif (pending.length > 0) {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"pending \" + JSON.stringify(pending));\n\t\t\t\t// There was probably a second call for notes before the first one finished, so just retry a few times to see if they stop being pending.\n\t\t\t\t// Retry quickly at first so that there isn't an unnecessary delay, but increase the delay each time.\n\t\t\t\tif (!delay)\n\t\t\t\t\tdelay = 50;\n\t\t\t\telse\n\t\t\t\t\tdelay = delay * 2;\n\t\t\t\tif (delay < 90000) {\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tvar newBatch = [];\n\t\t\t\t\t\t\tfor (i = 0; i < pending.length; i++) {\n\t\t\t\t\t\t\t\twhich = pending[i].split(\":\");\n\t\t\t\t\t\t\t\tnewBatch.push({instrument: which[0], note: which[1]});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\t\tself.debugCallback(\"retry \" + JSON.stringify(newBatch));\n\t\t\t\t\t\t\t\t\tself._loadBatch(newBatch, soundFontUrl, startTime, delay).then(function (response) {\n\t\t\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, delay);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tvar list = [];\n\t\t\t\t\tfor (var j = 0; j < batch.length; j++)\n\t\t\t\t\t\tlist.push(batch[j].instrument+'/'+batch[j].note)\n\t\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\t\tself.debugCallback(\"loadBatch timeout\")\n\t\t\t\t\t\treturn Promise.reject(new Error(\"timeout attempting to load: \" + list.join(\", \")));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (self.debugCallback)\n\t\t\t\t\tself.debugCallback(\"loadBatch resolve\")\n\t\t\t\treturn Promise.resolve({loaded: loaded, cached: cached, error: error});\n\t\t\t}\n\t\t}).catch(function (error) {\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(\"loadBatch catch \"+error.message)\n\t\t});\n\t});\n\n\tself.prime = function() {\n\t\t// At this point all of the notes are loaded. This function writes them into the output buffer.\n\t\t// Most music has a lot of repeating notes. If a note is the same pitch, volume, length, etc. as another one,\n\t\t// It saves a lot of time to just create it once and place it repeatedly where ever it needs to be.\n\t\tvar fadeTimeSec = self.fadeLength/1000;\n\t\tself.isRunning = false;\n\t\tif (!self.audioBufferPossible)\n\t\t\treturn Promise.reject(new Error(notSupportedMessage));\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"prime called\");\n\t\treturn new Promise(function(resolve) {\n\t\t\tvar startTime = activeAudioContext().currentTime;\n\t\t\tvar tempoMultiplier = self.millisecondsPerMeasure / 1000 / self.meterSize;\n\t\t\tself.duration = self.flattened.totalDuration * tempoMultiplier;\n\t\t\tif(self.duration <= 0) {\n\t\t\t\tself.audioBuffers = [];\n\t\t\t\treturn resolve({ status: \"empty\", seconds: 0});\n\t\t\t}\n\t\t\tself.duration += fadeTimeSec;\n\t\t\tvar totalSamples = Math.floor(activeAudioContext().sampleRate * self.duration);\n\n\t\t\t// There might be a previous run that needs to be turned off.\n\t\t\tself.stop();\n\n\t\t\tvar noteMapTracks = createNoteMap(self.flattened);\n\t\t\t// if (self.options.swing)\n\t\t\t// \taddSwing(noteMapTracks, self.options.swing, self.beatsPerMeasure)\n\t\t\tif (self.sequenceCallback)\n\t\t\t\tself.sequenceCallback(noteMapTracks, self.callbackContext);\n\n\t\t\tvar panDistances = setPan(noteMapTracks.length, self.pan);\n\n\t\t\t// Create a simple list of all the unique sounds in this music and where they should be placed.\n\t\t\t// There appears to be a limit on how many audio buffers can be created at once so this technique limits the number needed.\n\t\t\tvar uniqueSounds = {};\n\t\t\tnoteMapTracks.forEach(function(noteMap, trackNumber) {\n\t\t\t\tvar panDistance = panDistances && panDistances.length > trackNumber ? panDistances[trackNumber] : 0;\n\t\t\t\tnoteMap.forEach(function(note) {\n\t\t\t\t\tvar key = note.instrument + ':' + note.pitch + ':' +note.volume + ':' + Math.round((note.end-note.start)*1000)/1000 + ':' + panDistance + ':' + tempoMultiplier + ':' + (note.cents ? note.cents : 0);\n\t\t\t\t\tif (self.debugCallback)\n\t\t\t\t\t\tself.debugCallback(\"noteMapTrack \"+key)\n\t\t\t\t\tif (!uniqueSounds[key])\n\t\t\t\t\t\tuniqueSounds[key] = [];\n\t\t\t\t\tuniqueSounds[key].push(note.start);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Now that we know what we are trying to create, construct the audio buffer by creating each sound and placing it.\n\t\t\tvar allPromises = [];\n\t\t\tvar audioBuffer = activeAudioContext().createBuffer(2, totalSamples, activeAudioContext().sampleRate);\n\t\t\tfor (var key2 = 0; key2 < Object.keys(uniqueSounds).length; key2++) {\n\t\t\t\tvar k = Object.keys(uniqueSounds)[key2];\n\t\t\t\tvar parts = k.split(\":\");\n\t\t\t\tvar cents = parts[6] !== undefined ? parseFloat(parts[6]) : 0;\n\t\t\t\tparts = {instrument: parts[0], pitch: parseInt(parts[1], 10), volume: parseInt(parts[2], 10), len: parseFloat(parts[3]), pan: parseFloat(parts[4]), tempoMultiplier: parseFloat(parts[5]), cents: cents};\n\t\t\t\tallPromises.push(placeNote(audioBuffer, activeAudioContext().sampleRate, parts, uniqueSounds[k], self.soundFontVolumeMultiplier, self.programOffsets[parts.instrument], fadeTimeSec, self.noteEnd/1000, self.debugCallback));\n\t\t\t}\n\t\t\tself.audioBuffers = [audioBuffer];\n\n\t\t\tif (self.debugCallback) {\n\t\t\t\tself.debugCallback(\"sampleRate = \" + activeAudioContext().sampleRate);\n\t\t\t\tself.debugCallback(\"totalSamples = \" + totalSamples);\n\t\t\t\tself.debugCallback(\"creationTime = \" + Math.floor((activeAudioContext().currentTime - startTime)*1000) + \"ms\");\n\t\t\t}\n\t\t\tfunction resolveData(me) {\n\t\t\t\tvar duration = me && me.audioBuffers && me.audioBuffers.length > 0 ? me.audioBuffers[0].duration : 0;\n\t\t\t\treturn { status: activeAudioContext().state, duration: duration}\n\t\t\t}\n\t\t\tPromise.all(allPromises).then(function() {\n\t\t\t\t// Safari iOS can mess with the audioContext state, so resume if needed.\n\t\t\t\tif (activeAudioContext().state === \"suspended\") {\n\t\t\t\t\tactiveAudioContext().resume().then(function () {\n\t\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t\t})\n\t\t\t\t} else if (activeAudioContext().state === \"interrupted\") {\n\t\t\t\t\tactiveAudioContext().suspend().then(function () {\n\t\t\t\t\t\tactiveAudioContext().resume().then(function () {\n\t\t\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tresolve(resolveData(self));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n\n\tfunction setPan(numTracks, panParam) {\n\t\t// panParam, if it is set, can be either a number representing the separation between each track,\n\t\t// or an array, which is the absolute pan position for each track.\n\t\tif (panParam === null || panParam === undefined)\n\t\t\treturn null;\n\n\t\tvar panDistances = [];\n\t\tif (panParam.length) {\n\t\t\t// We received an array. If there are the same number of items in the pan array as the number of tracks,\n\t\t\t// it all lines up perfectly. If there are more items in the pan array than the tracks then the excess items are ignored.\n\t\t\t// If there are more tracks than items in the pan array then the remaining tracks are placed in the middle.\n\t\t\t// If any of the pan numbers are out of range then they are adjusted.\n\t\t\tfor (var pp = 0; pp < numTracks; pp++) {\n\t\t\t\tif (pp < panParam.length) {\n\t\t\t\t\tvar x = parseFloat(panParam[pp]);\n\t\t\t\t\tif (x < -1)\n\t\t\t\t\t\tx = -1;\n\t\t\t\t\telse if (x > 1)\n\t\t\t\t\t\tx = 1;\n\t\t\t\t\tpanDistances.push(x);\n\t\t\t\t} else\n\t\t\t\t\tpanDistances.push(0)\n\t\t\t}\n\t\t\treturn panDistances;\n\t\t} else {\n\t\t\tvar panNumber = parseFloat(panParam);\n\t\t\t// the separation needs to be no further than 2 (i.e. -1 to 1) so test to see if there are too many tracks for the passed in distance\n\t\t\tif (panNumber*(numTracks-1) > 2)\n\t\t\t\treturn null;\n\n\t\t\t// If there are an even number of tracks, then offset so that the first two are centered around the middle\n\t\t\tvar even = numTracks % 2 === 0;\n\t\t\tvar currLow = even ? 0 - panNumber/2 : 0;\n\t\t\tvar currHigh = currLow+panNumber;\n\t\t\t// Now add the tracks to either side\n\t\t\tfor (var p = 0; p < numTracks; p++) {\n\t\t\t\teven = p % 2 === 0;\n\t\t\t\tif (even) {\n\t\t\t\t\tpanDistances.push(currLow);\n\t\t\t\t\tcurrLow -= panNumber;\n\t\t\t\t} else {\n\t\t\t\t\tpanDistances.push(currHigh);\n\t\t\t\t\tcurrHigh += panNumber;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn panDistances;\n\t\t}\n\t\t// There was either no panning, or the parameters were illegal\n\t\treturn null;\n\t}\n\n\t// This is called after everything is set up, so it can quickly make sound\n\tself.start = function() {\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"start called\");\n\n\t\tvar resumePosition = self.pausedTimeSec ? self.pausedTimeSec : 0;\n\t\tself._kickOffSound(resumePosition);\n\t\tself.startTimeSec = activeAudioContext().currentTime - resumePosition;\n\t\tself.pausedTimeSec = undefined;\n\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"MIDI STARTED\", self.startTimeSec);\n\t};\n\n\tself.pause = function() {\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"pause called\");\n\n\t\tself.pausedTimeSec = self.stop();\n\t\treturn self.pausedTimeSec;\n\t};\n\n\tself.resume = function() {\n\t\tself.start();\n\t};\n\n\tself.seek = function(position, units) {\n\t\tvar offset;\n\t\tswitch (units) {\n\t\t\tcase \"seconds\":\n\t\t\t\toffset = position;\n\t\t\t\tbreak;\n\t\t\tcase \"beats\":\n\t\t\t\toffset = position * self.millisecondsPerMeasure / self.beatsPerMeasure / 1000;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// this is \"percent\" or any illegal value\n\t\t\t\toffset = (self.duration-self.fadeLength/1000) * position;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// TODO-PER: can seek when paused or when playing\n\t\tif (!self.audioBufferPossible)\n\t\t\tthrow new Error(notSupportedMessage);\n\t\tif (self.debugCallback)\n\t\t\tself.debugCallback(\"seek called sec=\" + offset);\n\n\t\tif (self.isRunning) {\n\t\t\tself.stop();\n\t\t\tself._kickOffSound(offset);\n\t\t} else {\n\t\t\tself.pausedTimeSec = offset;\n\t\t}\n\t\tself.pausedTimeSec = offset;\n\t};\n\n\tself.stop = function() {\n\t\tself.isRunning = false;\n\t\tself.pausedTimeSec = undefined;\n\t\tself.directSource.forEach(function(source) {\n\t\t\ttry {\n\t\t\t\tsource.stop();\n\t\t\t} catch (error) {\n\t\t\t\t// We don't care if self succeeds: it might fail if something else turned off the sound or it ended for some reason.\n\t\t\t\tconsole.log(\"direct source didn't stop:\", error)\n\t\t\t}\n\t\t});\n\t\tself.directSource = [];\n\t\tvar elapsed = activeAudioContext().currentTime - self.startTimeSec;\n\t\treturn elapsed;\n\t};\n\tself.finished = function() {\n\t\tself.startTimeSec = undefined;\n\t\tself.pausedTimeSec = undefined;\n\t\tself.isRunning = false;\n\t};\n\n\tself.download = function() {\n\t\treturn downloadBuffer(self);\n\t};\n\n\tself.getAudioBuffer = function() {\n\t\treturn self.audioBuffers[0];\n\t};\n\n\t/////////////// Private functions //////////////\n\n\tself._deviceCapable = function() {\n\t\tif (!supportsAudio()) {\n\t\t\tconsole.warn(notSupportedMessage);\n\t\t\tif (self.debugCallback)\n\t\t\t\tself.debugCallback(notSupportedMessage);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tself._kickOffSound = function(seconds) {\n\t\tself.isRunning = true;\n\t\tself.directSource = [];\n\t\tself.audioBuffers.forEach(function(audioBuffer, trackNum) {\n\t\t\tself.directSource[trackNum] = activeAudioContext().createBufferSource(); // creates a sound source\n\t\t\tself.directSource[trackNum].buffer = audioBuffer; // tell the source which sound to play\n\t\t\tself.directSource[trackNum].connect(activeAudioContext().destination); // connect the source to the context's destination (the speakers)\n\t\t});\n\t\tself.directSource.forEach(function(source) {\n\t\t\tsource.start(0, seconds);\n\t\t});\n\t\tif (self.onEnded) {\n\t\t\tself.directSource[0].onended = function () {\n\t\t\t\tself.onEnded(self.callbackContext);\n\t\t\t};\n\t\t}\n\t};\n\n\t// // this is a first attempt at adding a little bit of swing to the output, but the algorithm isn't correct.\n\t// function addSwing(noteMapTracks, swing, beatsPerMeasure) {\n\t// \tconsole.log(\"addSwing\", noteMapTracks, swing, beatsPerMeasure)\n\t// \t// Swing should be between -0.9 and 0.9. Make sure the input is between them.\n\t// \t// Then that is the percentage to add to the first beat, so a negative number moves the second beat earlier.\n\t// \t// A value of zero is the same as no swing at all.\n\t// \t// This only works when there are an even number of beats in a measure.\n\t// \tif (beatsPerMeasure % 2 !== 0)\n\t// \t\treturn;\n\t// \tswing = parseFloat(swing)\n\t// \tif (isNaN(swing))\n\t// \t\treturn\n\t// \tif (swing < -0.9)\n\t// \t\tswing = -0.9\n\t// \tif (swing > 0.9)\n\t// \t\tswing = 0.9\n\t// \tvar beatLength = (1 / beatsPerMeasure)*2\n\t// \tswing = beatLength * swing\n\t// \tfor (var t = 0; t < noteMapTracks.length; t++) {\n\t// \t\tvar track = noteMapTracks[t];\n\t// \t\tfor (var i = 0; i < track.length; i++) {\n\t// \t\t\tvar event = track[i];\n\t// \t\t\tif (event.start % beatLength) {\n\t// \t\t\t\t// This is the off beat\n\t// \t\t\t\tevent.start += swing;\n\t// \t\t\t} else {\n\t// \t\t\t\t// This is the beat\n\t// \t\t\t\tevent.end += swing;\n\t// \t\t\t}\n\t// \t\t}\n\t// \t}\n\t// }\n}\n\nmodule.exports = CreateSynth;\n","var downloadBuffer = function(buffer) {\n\treturn window.URL.createObjectURL(bufferToWave(buffer.audioBuffers));\n};\n\n// Convert an AudioBuffer to a Blob using WAVE representation\nfunction bufferToWave(audioBuffers) {\n\tvar audioBuffer = audioBuffers[0];\n\tvar numOfChan = audioBuffer.numberOfChannels;\n\tvar length = audioBuffer.length * numOfChan * 2 + 44;\n\tvar buffer = new ArrayBuffer(length);\n\tvar view = new DataView(buffer);\n\tvar channels = [];\n\tvar i;\n\tvar sample;\n\tvar offset = 0;\n\tvar pos = 0;\n\n\t// write WAVE header\n\tsetUint32(0x46464952); // \"RIFF\"\n\tsetUint32(length - 8); // file length - 8\n\tsetUint32(0x45564157); // \"WAVE\"\n\n\tsetUint32(0x20746d66); // \"fmt \" chunk\n\tsetUint32(16); // length = 16\n\tsetUint16(1); // PCM (uncompressed)\n\tsetUint16(numOfChan);\n\tsetUint32(audioBuffer.sampleRate);\n\tsetUint32(audioBuffer.sampleRate * 2 * numOfChan); // avg. bytes/sec\n\tsetUint16(numOfChan * 2); // block-align\n\tsetUint16(16); // 16-bit (hardcoded in this demo)\n\n\tsetUint32(0x61746164); // \"data\" - chunk\n\tsetUint32(length - pos - 4); // chunk length\n\n\t// write interleaved data\n\tfor(i = 0; i < numOfChan; i++)\n\t\tchannels.push(audioBuffer.getChannelData(i));\n\n\twhile(pos < length) {\n\t\tfor(i = 0; i < channels.length; i++) { // interleave channels\n\t\t\tsample = Math.max(-1, Math.min(1, channels[i][offset])); // clamp\n\t\t\tsample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767)|0; // scale to 16-bit signed int\n\t\t\tview.setInt16(pos, sample, true); // write 16-bit sample\n\t\t\tpos += 2;\n\t\t}\n\t\toffset++; // next source sample\n\t}\n\n\t// create Blob\n\treturn new Blob([buffer], {type: \"audio/wav\"});\n\n\tfunction setUint16(data) {\n\t\tview.setUint16(pos, data, true);\n\t\tpos += 2;\n\t}\n\n\tfunction setUint32(data) {\n\t\tview.setUint32(pos, data, true);\n\t\tpos += 4;\n\t}\n}\n\nmodule.exports = downloadBuffer;\n","var tunebook = require('../api/abc_tunebook');\nvar midiCreate = require('../midi/abc_midi_create');\n\nvar getMidiFile = function(source, options) {\n\tvar params = {};\n\tif (options) {\n\t\tfor (var key in options) {\n\t\t\tif (options.hasOwnProperty(key)) {\n\t\t\t\tparams[key] = options[key];\n\t\t\t}\n\t\t}\n\t}\n\tparams.generateInline = false;\n\n\tfunction callback(div, tune, index) {\n\t\tvar downloadMidi = midiCreate(tune, params);\n\t\tswitch (params.midiOutputType) {\n\t\t\tcase \"encoded\":\n\t\t\t\treturn downloadMidi;\n\t\t\tcase \"binary\":\n\t\t\t\tvar decoded = downloadMidi.replace(\"data:audio/midi,\", \"\");\n\t\t\t\tdecoded = decoded.replace(/MThd/g,\"%4d%54%68%64\");\n\t\t\t\tdecoded = decoded.replace(/MTrk/g,\"%4d%54%72%6b\");\n\t\t\t\tvar buffer = new ArrayBuffer(decoded.length/3);\n\t\t\t\tvar output = new Uint8Array(buffer);\n\t\t\t\tfor (var i = 0; i < decoded.length/3; i++) {\n\t\t\t\t\tvar p = i*3+1;\n\t\t\t\t\tvar d = parseInt(decoded.substring(p, p+2), 16);\n\t\t\t\t\toutput[i] = d;\n\t\t\t\t}\n\t\t\t\treturn output;\n\t\t\tcase \"link\":\n\t\t\tdefault:\n\t\t\t\treturn generateMidiDownloadLink(tune, params, downloadMidi, index);\n\t\t}\n\t}\n\n\tif (typeof source === \"string\")\n\t\treturn tunebook.renderEngine(callback, \"*\", source, params);\n\telse\n\t\treturn callback(null, source, 0);\n};\n\nfunction isFunction(functionToCheck) {\n\tvar getType = {};\n\treturn functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\nvar generateMidiDownloadLink = function(tune, midiParams, midi, index) {\n\tvar divClasses = ['abcjs-download-midi', 'abcjs-midi-' + index]\n\tif (midiParams.downloadClass)\n\t\tdivClasses.push(midiParams.downloadClass)\n\tvar html = '
';\n\tif (midiParams.preTextDownload)\n\t\thtml += midiParams.preTextDownload;\n\tvar title = tune.metaText && tune.metaText.title ? tune.metaText.title : 'Untitled';\n\tvar label;\n\tif (midiParams.downloadLabel && isFunction(midiParams.downloadLabel))\n\t\tlabel = midiParams.downloadLabel(tune, index);\n\telse if (midiParams.downloadLabel)\n\t\tlabel = midiParams.downloadLabel.replace(/%T/, title);\n\telse\n\t\tlabel = \"Download MIDI for \\\"\" + title + \"\\\"\";\n\ttitle = title.toLowerCase().replace(/'/g, '').replace(/\\W/g, '_').replace(/__/g, '_');\n\tvar filename = (midiParams.fileName) ? midiParams.fileName : title + '.midi';\n\thtml += '' + label + '';\n\tif (midiParams.postTextDownload)\n\t\thtml += midiParams.postTextDownload;\n\treturn html + \"
\";\n};\n\n\nmodule.exports = getMidiFile;\n","var svg = `\n\n \n\n`\n\nmodule.exports = svg\n","var svg = `\n\n\t\n\t\n\t\n\t\n\n`\n\nmodule.exports = svg\n","var svg = `\n\n \n \n \n \n\n`\n\nmodule.exports = svg\n","var svg = `\n\n \n \n \n\n`\n\nmodule.exports = svg\n","var svg = `\n\n \n \n \n \n\n`\n\nmodule.exports = svg\n","var instrumentIndexToName = [\n\t\"acoustic_grand_piano\",\n\t\"bright_acoustic_piano\",\n\t\"electric_grand_piano\",\n\t\"honkytonk_piano\",\n\t\"electric_piano_1\",\n\t\"electric_piano_2\",\n\t\"harpsichord\",\n\t\"clavinet\",\n\n\t\"celesta\",\n\t\"glockenspiel\",\n\t\"music_box\",\n\t\"vibraphone\",\n\t\"marimba\",\n\t\"xylophone\",\n\t\"tubular_bells\",\n\t\"dulcimer\",\n\n\t\"drawbar_organ\",\n\t\"percussive_organ\",\n\t\"rock_organ\",\n\t\"church_organ\",\n\t\"reed_organ\",\n\t\"accordion\",\n\t\"harmonica\",\n\t\"tango_accordion\",\n\n\t\"acoustic_guitar_nylon\",\n\t\"acoustic_guitar_steel\",\n\t\"electric_guitar_jazz\",\n\t\"electric_guitar_clean\",\n\t\"electric_guitar_muted\",\n\t\"overdriven_guitar\",\n\t\"distortion_guitar\",\n\t\"guitar_harmonics\",\n\n\t\"acoustic_bass\",\n\t\"electric_bass_finger\",\n\t\"electric_bass_pick\",\n\t\"fretless_bass\",\n\t\"slap_bass_1\",\n\t\"slap_bass_2\",\n\t\"synth_bass_1\",\n\t\"synth_bass_2\",\n\n\t\"violin\",\n\t\"viola\",\n\t\"cello\",\n\t\"contrabass\",\n\t\"tremolo_strings\",\n\t\"pizzicato_strings\",\n\t\"orchestral_harp\",\n\t\"timpani\",\n\n\t\"string_ensemble_1\",\n\t\"string_ensemble_2\",\n\t\"synth_strings_1\",\n\t\"synth_strings_2\",\n\t\"choir_aahs\",\n\t\"voice_oohs\",\n\t\"synth_choir\",\n\t\"orchestra_hit\",\n\n\t\"trumpet\",\n\t\"trombone\",\n\t\"tuba\",\n\t\"muted_trumpet\",\n\t\"french_horn\",\n\t\"brass_section\",\n\t\"synth_brass_1\",\n\t\"synth_brass_2\",\n\n\t\"soprano_sax\",\n\t\"alto_sax\",\n\t\"tenor_sax\",\n\t\"baritone_sax\",\n\t\"oboe\",\n\t\"english_horn\",\n\t\"bassoon\",\n\t\"clarinet\",\n\n\t\"piccolo\",\n\t\"flute\",\n\t\"recorder\",\n\t\"pan_flute\",\n\t\"blown_bottle\",\n\t\"shakuhachi\",\n\t\"whistle\",\n\t\"ocarina\",\n\n\t\"lead_1_square\",\n\t\"lead_2_sawtooth\",\n\t\"lead_3_calliope\",\n\t\"lead_4_chiff\",\n\t\"lead_5_charang\",\n\t\"lead_6_voice\",\n\t\"lead_7_fifths\",\n\t\"lead_8_bass_lead\",\n\n\t\"pad_1_new_age\",\n\t\"pad_2_warm\",\n\t\"pad_3_polysynth\",\n\t\"pad_4_choir\",\n\t\"pad_5_bowed\",\n\t\"pad_6_metallic\",\n\t\"pad_7_halo\",\n\t\"pad_8_sweep\",\n\n\t\"fx_1_rain\",\n\t\"fx_2_soundtrack\",\n\t\"fx_3_crystal\",\n\t\"fx_4_atmosphere\",\n\t\"fx_5_brightness\",\n\t\"fx_6_goblins\",\n\t\"fx_7_echoes\",\n\t\"fx_8_scifi\",\n\n\t\"sitar\",\n\t\"banjo\",\n\t\"shamisen\",\n\t\"koto\",\n\t\"kalimba\",\n\t\"bagpipe\",\n\t\"fiddle\",\n\t\"shanai\",\n\n\t\"tinkle_bell\",\n\t\"agogo\",\n\t\"steel_drums\",\n\t\"woodblock\",\n\t\"taiko_drum\",\n\t\"melodic_tom\",\n\t\"synth_drum\",\n\t\"reverse_cymbal\",\n\n\t\"guitar_fret_noise\",\n\t\"breath_noise\",\n\t\"seashore\",\n\t\"bird_tweet\",\n\t\"telephone_ring\",\n\t\"helicopter\",\n\t\"applause\",\n\t\"gunshot\",\n\n\t\"percussion\"\n];\n\nmodule.exports = instrumentIndexToName;\n","// Load one mp3 file for one note.\n// url = the base url for the soundfont\n// instrument = the instrument name (e.g. \"acoustic_grand_piano\")\n// name = the pitch name (e.g. \"A3\")\nvar soundsCache = require(\"./sounds-cache\");\n\nvar getNote = function (url, instrument, name, audioContext) {\n\tif (!soundsCache[instrument]) soundsCache[instrument] = {};\n\tvar instrumentCache = soundsCache[instrument];\n\n\tif (!instrumentCache[name])\n\t\tinstrumentCache[name] = new Promise(function (resolve, reject) {\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\tlet noteUrl = url + instrument + \"-mp3/\" + name + \".mp3\";\n\t\t\txhr.open(\"GET\", noteUrl, true);\n\t\t\txhr.responseType = \"arraybuffer\";\n\t\t\txhr.onload = function () {\n\t\t\t\tif (xhr.status !== 200) {\n\t\t\t\t\treject(Error(\"Can't load sound at \" + noteUrl + ' status=' + xhr.status));\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tvar noteDecoded = function(audioBuffer) {\n\t\t\t\t\tresolve({instrument: instrument, name: name, status: \"loaded\", audioBuffer: audioBuffer})\n\t\t\t\t}\n\t\t\t\tvar maybePromise = audioContext.decodeAudioData(xhr.response, noteDecoded, function () {\n\t\t\t\t\treject(Error(\"Can't decode sound at \" + noteUrl));\n\t\t\t\t});\n\t\t\t\t// In older browsers `BaseAudioContext.decodeAudio()` did not return a promise\n\t\t\t\tif (maybePromise && typeof maybePromise.catch === \"function\") maybePromise.catch(reject);\n\t\t\t};\n\t\t\txhr.onerror = function () {\n\t\t\t\treject(Error(\"Can't load sound at \" + noteUrl));\n\t\t\t};\n\t\t\txhr.send();\n\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tconsole.error(\"Didn't load note\", instrument, name, \":\", err.message);\n\t\t\t\tthrow err;\n\t\t\t});\n\n\treturn instrumentCache[name];\n};\n\nmodule.exports = getNote;\n","var accidentals = {\n\t\"__\": -2,\n\t\"_\": -1,\n\t\"_/\": -0.5,\n\t\"=\": 0,\n\t\"\": 0,\n\t\"^/\": 0.5,\n\t\"^\": 1,\n\t\"^^\": 2\n}\n\nvar notesInOrder = ['C', '-', 'D', '-', 'E', 'F', '-', 'G', '-', 'A', '-', 'B', 'c', '-', 'd', '-', 'e', 'f', '-', 'g', '-', 'a', '-', 'b']\n\nfunction noteToMidi(note) {\n\tvar reg = note.match(/([_^\\/]*)([ABCDEFGabcdefg])(,*)('*)/)\n\tif (reg && reg.length === 5) {\n\t\tvar acc = accidentals[reg[1]]\n\t\tvar pitch = notesInOrder.indexOf(reg[2])\n\t\tvar octave = reg[4].length - reg[3].length\n\t\treturn 48 + pitch + acc + octave * 12;\n\t}\n\treturn 0;\n}\n\nfunction midiToNote(midi) {\n\tmidi = parseInt(midi, 10) // TODO-PER: not sure how to handle quarter sharps and flats, so strip them for now.\n\tvar octave = Math.floor(midi / 12)\n\tvar pitch = midi % 12\n\tvar name = notesInOrder[pitch]\n\tif (name === '-') {\n\t\tname = '^' + notesInOrder[pitch-1]\n\t}\n\t\n\tif (octave > 4) {\n\t\tname = name.toLowerCase()\n\t\toctave -= 5\n\t\twhile (octave > 0) {\n\t\t\tname += \"'\"\n\t\t\toctave--\n\t\t}\n\t} else {\n\t\twhile (octave < 4) {\n\t\t\tname += ','\n\t\t\toctave++\n\t\t}\n\t}\t\n\treturn name\n}\n\nmodule.exports = {noteToMidi: noteToMidi, midiToNote: midiToNote};\n","var pitchToNoteName = {\n\t21: 'A0',\n\t22: 'Bb0',\n\t23: 'B0',\n\t24: 'C1',\n\t25: 'Db1',\n\t26: 'D1',\n\t27: 'Eb1',\n\t28: 'E1',\n\t29: 'F1',\n\t30: 'Gb1',\n\t31: 'G1',\n\t32: 'Ab1',\n\t33: 'A1',\n\t34: 'Bb1',\n\t35: 'B1',\n\t36: 'C2',\n\t37: 'Db2',\n\t38: 'D2',\n\t39: 'Eb2',\n\t40: 'E2',\n\t41: 'F2',\n\t42: 'Gb2',\n\t43: 'G2',\n\t44: 'Ab2',\n\t45: 'A2',\n\t46: 'Bb2',\n\t47: 'B2',\n\t48: 'C3',\n\t49: 'Db3',\n\t50: 'D3',\n\t51: 'Eb3',\n\t52: 'E3',\n\t53: 'F3',\n\t54: 'Gb3',\n\t55: 'G3',\n\t56: 'Ab3',\n\t57: 'A3',\n\t58: 'Bb3',\n\t59: 'B3',\n\t60: 'C4',\n\t61: 'Db4',\n\t62: 'D4',\n\t63: 'Eb4',\n\t64: 'E4',\n\t65: 'F4',\n\t66: 'Gb4',\n\t67: 'G4',\n\t68: 'Ab4',\n\t69: 'A4',\n\t70: 'Bb4',\n\t71: 'B4',\n\t72: 'C5',\n\t73: 'Db5',\n\t74: 'D5',\n\t75: 'Eb5',\n\t76: 'E5',\n\t77: 'F5',\n\t78: 'Gb5',\n\t79: 'G5',\n\t80: 'Ab5',\n\t81: 'A5',\n\t82: 'Bb5',\n\t83: 'B5',\n\t84: 'C6',\n\t85: 'Db6',\n\t86: 'D6',\n\t87: 'Eb6',\n\t88: 'E6',\n\t89: 'F6',\n\t90: 'Gb6',\n\t91: 'G6',\n\t92: 'Ab6',\n\t93: 'A6',\n\t94: 'Bb6',\n\t95: 'B6',\n\t96: 'C7',\n\t97: 'Db7',\n\t98: 'D7',\n\t99: 'Eb7',\n\t100: 'E7',\n\t101: 'F7',\n\t102: 'Gb7',\n\t103: 'G7',\n\t104: 'Ab7',\n\t105: 'A7',\n\t106: 'Bb7',\n\t107: 'B7',\n\t108: 'C8',\n\t109: 'Db8',\n\t110: 'D8',\n\t111: 'Eb8',\n\t112: 'E8',\n\t113: 'F8',\n\t114: 'Gb8',\n\t115: 'G8',\n\t116: 'Ab8',\n\t117: 'A8',\n\t118: 'Bb8',\n\t119: 'B8',\n\t120: 'C9',\n\t121: 'Db9'\n};\n\nmodule.exports = pitchToNoteName;\n","var pitchMap = {\n\tf0: \"_C\",\n\tn0: \"=C\",\n\ts0: \"^C\",\n\tx0: \"C\",\n\tf1: \"_D\",\n\tn1: \"=D\",\n\ts1: \"^D\",\n\tx1: \"D\",\n\tf2: \"_E\",\n\tn2: \"=E\",\n\ts2: \"^E\",\n\tx2: \"E\",\n\tf3: \"_F\",\n\tn3: \"=F\",\n\ts3: \"^F\",\n\tx3: \"F\",\n\tf4: \"_G\",\n\tn4: \"=G\",\n\ts4: \"^G\",\n\tx4: \"G\",\n\tf5: \"_A\",\n\tn5: \"=A\",\n\ts5: \"^A\",\n\tx5: \"A\",\n\tf6: \"_B\",\n\tn6: \"=B\",\n\ts6: \"^B\",\n\tx6: \"B\",\n\tf7: \"_c\",\n\tn7: \"=c\",\n\ts7: \"^c\",\n\tx7: \"c\",\n\tf8: \"_d\",\n\tn8: \"=d\",\n\ts8: \"^d\",\n\tx8: \"d\",\n\tf9: \"_e\",\n\tn9: \"=e\",\n\ts9: \"^e\",\n\tx9: \"e\",\n\tf10: \"_f\",\n\tn10: \"=f\",\n\ts10: \"^f\",\n\tx10: \"f\",\n\tf11: \"_g\",\n\tn11: \"=g\",\n\ts11: \"^g\",\n\tx11: \"g\",\n\tf12: \"_a\",\n\tn12: \"=a\",\n\ts12: \"^a\",\n\tx12: \"a\",\n\tf13: \"_b\",\n\tn13: \"=b\",\n\ts13: \"^b\",\n\tx13: \"b\",\n\tf14: \"_c'\",\n\tn14: \"=c'\",\n\ts14: \"^c'\",\n\tx14: \"c'\",\n\tf15: \"_d'\",\n\tn15: \"=d'\",\n\ts15: \"^d'\",\n\tx15: \"d'\",\n\tf16: \"_e'\",\n\tn16: \"=e'\",\n\ts16: \"^e'\",\n\tx16: \"e'\",\n}\n\nfunction pitchesToPerc(pitchObj) {\n\tvar pitch = (pitchObj.accidental ? pitchObj.accidental[0] : 'x') + pitchObj.verticalPos;\n\treturn pitchMap[pitch];\n}\nmodule.exports = pitchesToPerc;\n","var soundsCache = require('./sounds-cache');\nvar pitchToNoteName = require('./pitch-to-note-name');\nvar centsToFactor = require(\"./cents-to-factor\");\n\nfunction placeNote(outputAudioBuffer, sampleRate, sound, startArray, volumeMultiplier, ofsMs, fadeTimeSec, noteEndSec, debugCallback) {\n\t// sound contains { instrument, pitch, volume, len, pan, tempoMultiplier\n\t// len is in whole notes. Multiply by tempoMultiplier to get seconds.\n\t// ofsMs is an offset to subtract from the note to line up programs that have different length onsets.\n\tvar OfflineAC = window.OfflineAudioContext ||\n\t\twindow.webkitOfflineAudioContext;\n\n\tvar len = sound.len * sound.tempoMultiplier;\n\tif (ofsMs)\n\t\tlen +=ofsMs/1000;\n\tlen -= noteEndSec;\n\tif (len < 0)\n\t\tlen = 0.005; // Have some small audible length no matter how short the note is.\n\tvar offlineCtx = new OfflineAC(2,Math.floor((len+fadeTimeSec)*sampleRate),sampleRate);\n\tvar noteName = pitchToNoteName[sound.pitch];\n\tvar noteBufferPromise = soundsCache[sound.instrument][noteName];\n\n\tif (!noteBufferPromise) {\n\t\t// if the note isn't present then just skip it - it will leave a blank spot in the audio.\n\t\tif (debugCallback)\n\t\t\tdebugCallback('placeNote skipped: '+sound.instrument+':'+noteName)\n\t\treturn Promise.resolve();\n\t}\n\n\treturn noteBufferPromise\n\t\t.then(function (response) {\n\t\t\t// create audio buffer\n\t\t\tvar source = offlineCtx.createBufferSource();\n\t\t\tsource.buffer = response.audioBuffer;\n\n\t\t\t// add gain\n\t\t\t// volume can be between 1 to 127. This translation to gain is just trial and error.\n\t\t\t// The smaller the first number, the more dynamic range between the quietest to loudest.\n\t\t\t// The larger the second number, the louder it will be in general.\n\t\t\tvar volume = (sound.volume / 96) * volumeMultiplier;\n\t\t\tsource.gainNode = offlineCtx.createGain();\n\n\t\t\t// add pan if supported and present\n\t\t\tif (sound.pan && offlineCtx.createStereoPanner) {\n\t\t\t\tsource.panNode = offlineCtx.createStereoPanner();\n\t\t\t\tsource.panNode.pan.setValueAtTime(sound.pan, 0);\n\t\t\t}\n\t\t\tsource.gainNode.gain.value = volume; // Math.min(2, Math.max(0, volume));\n\t\t\tsource.gainNode.gain.linearRampToValueAtTime(source.gainNode.gain.value, len);\n\t\t\tsource.gainNode.gain.linearRampToValueAtTime(0.0, len + fadeTimeSec);\n\n\t\t\tif (sound.cents) {\n\t\t\t\tsource.playbackRate.value = centsToFactor(sound.cents);\n\t\t\t}\n\n\t\t\t// connect all the nodes\n\t\t\tif (source.panNode) {\n\t\t\t\tsource.panNode.connect(offlineCtx.destination);\n\t\t\t\tsource.gainNode.connect(source.panNode);\n\t\t\t} else {\n\t\t\t\tsource.gainNode.connect(offlineCtx.destination);\n\t\t\t}\n\t\t\tsource.connect(source.gainNode);\n\n\t\t\t// Do the process of creating the sound and placing it in the buffer\n\t\t\tsource.start(0);\n\n\t\t\tif (source.noteOff) {\n\t\t\t\tsource.noteOff(len + fadeTimeSec);\n\t\t\t} else {\n\t\t\t\tsource.stop(len + fadeTimeSec);\n\t\t\t}\n\t\t\tvar fnResolve;\n\t\t\tofflineCtx.oncomplete = function(e) {\n\t\t\t\tif (e.renderedBuffer && e.renderedBuffer.getChannelData) { // If the system gets overloaded or there are network problems then this can start failing. Just drop the note if so.\n\t\t\t\t\tfor (var i = 0; i < startArray.length; i++) {\n\t\t\t\t\t\t//Math.floor(startArray[i] * sound.tempoMultiplier * sampleRate)\n\t\t\t\t\t\tvar start = startArray[i] * sound.tempoMultiplier;\n\t\t\t\t\t\tif (ofsMs)\n\t\t\t\t\t\t\tstart -=ofsMs/1000;\n\t\t\t\t\t\tif (start < 0)\n\t\t\t\t\t\t\tstart = 0; // If the item that is moved back is at the very beginning of the buffer then don't move it back. To do that would be to push everything else forward. TODO-PER: this should probably be done at some point but then it would change timing in existing apps.\n\t\t\t\t\t\tstart = Math.floor(start*sampleRate);\n\t\t\t\t\t\tcopyToChannel(outputAudioBuffer, e.renderedBuffer, start);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (debugCallback)\n\t\t\t\t\tdebugCallback('placeNote: '+sound.instrument+':'+noteName)\n\t\t\t\tfnResolve();\n\t\t\t};\n\t\t\tofflineCtx.startRendering();\n\t\t\treturn new Promise(function(resolve) {\n\t\t\t\tfnResolve = resolve;\n\t\t\t});\n\t\t})\n\t\t.catch(function (error) {\n\t\t\tif (debugCallback)\n\t\t\t\tdebugCallback('placeNote catch: '+error.message)\n\t\t\treturn Promise.resolve()\n\t\t});\n}\n\nvar copyToChannel = function(toBuffer, fromBuffer, start) {\n\tfor (var ch = 0; ch < 2; ch++) {\n\t\tvar fromData = fromBuffer.getChannelData(ch);\n\t\tvar toData = toBuffer.getChannelData(ch);\n\n\t\t// Mix the current note into the existing track\n\t\tfor (var n = 0; n < fromData.length; n++) {\n\t\t\ttoData[n + start] += fromData[n];\n\t\t}\n\t}\n};\n\nmodule.exports = placeNote;\n","var SynthSequence = require('./synth-sequence');\nvar CreateSynth = require('./create-synth');\nvar activeAudioContext = require(\"./active-audio-context\");\n\nfunction playEvent(midiPitches, midiGracePitches, millisecondsPerMeasure) {\n\tvar sequence = new SynthSequence();\n\n\tfor (var i = 0; i < midiPitches.length; i++) {\n\t\tvar note = midiPitches[i];\n\t\tvar trackNum = sequence.addTrack();\n\t\tsequence.setInstrument(trackNum, note.instrument);\n\t\tif (i === 0 && midiGracePitches) {\n\t\t\tfor (var j = 0; j < midiGracePitches.length; j++) {\n\t\t\t\tvar grace = midiGracePitches[j];\n\t\t\t\tsequence.appendNote(trackNum, grace.pitch, 1 / 64, grace.volume, grace.cents);\n\t\t\t}\n\t\t}\n\t\tsequence.appendNote(trackNum, note.pitch, note.duration, note.volume, note.cents);\n\t}\n\n\tvar ac = activeAudioContext();\n\tif (ac.state === \"suspended\") {\n\t\treturn ac.resume().then(function () {\n\t\t\treturn doPlay(sequence, millisecondsPerMeasure);\n\t\t});\n\t} else {\n\t\treturn doPlay(sequence, millisecondsPerMeasure);\n\t}\n}\n\nfunction doPlay(sequence, millisecondsPerMeasure) {\n\tvar buffer = new CreateSynth();\n\treturn buffer.init({\n\t\tsequence: sequence,\n\t\tmillisecondsPerMeasure: millisecondsPerMeasure\n\t}).then(function () {\n\t\treturn buffer.prime();\n\t}).then(function () {\n\t\tbuffer.start();\n\t\treturn Promise.resolve();\n\t});\n}\n\nmodule.exports = playEvent;\n","// Call this when it is safe for the abcjs to produce sound. This is after the first user gesture on the page.\n// If you call it with no parameters, then an AudioContext is created and stored.\n// If you call it with a parameter, that is used as an already created AudioContext.\n\nfunction registerAudioContext(ac) {\n\t// If one is passed in, that is the one to use even if there was already one created.\n\tif (ac)\n\t\twindow.abcjsAudioContext = ac;\n\telse {\n\t\t// no audio context passed in, so create it unless there is already one from before.\n\t\tif (!window.abcjsAudioContext) {\n\t\t\tvar AudioContext = window.AudioContext || window.webkitAudioContext;\n\t\t\tif (AudioContext)\n\t\t\t\twindow.abcjsAudioContext = new AudioContext();\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\t}\n\treturn window.abcjsAudioContext.state !== \"suspended\";\n}\n\nmodule.exports = registerAudioContext;\n","var soundsCache = {\n};\n\nmodule.exports = soundsCache;\n","var activeAudioContext = require('./active-audio-context');\n\n//\n// Support for audio depends on three things: support for Promise, support for AudioContext, and support for AudioContext.resume.\n// Unfortunately, AudioContext.resume cannot be detected unless an AudioContext is created, and creating an AudioContext can't\n// be done until a user click, so there is no way to know for sure if audio is supported until the user tries.\n// We can get close, though - we can test for Promises and AudioContext - there are just a few evergreen browsers that supported\n// that before supporting resume, so we'll test what we can.\n\n// The best use of this routine is to call it before doing any audio related stuff to decide whether to bother.\n// But then, call it again after a user interaction to test for resume.\n\nfunction supportsAudio() {\n\tif (!window.Promise)\n\t\treturn false;\n\n\tif (!window.AudioContext &&\n\t\t!window.webkitAudioContext &&\n\t\t!navigator.mozAudioContext &&\n\t\t!navigator.msAudioContext)\n\t\treturn false;\n\n\tvar aac = activeAudioContext();\n\tif (aac)\n\t\treturn aac.resume !== undefined;\n}\n\nmodule.exports = supportsAudio;\n","var CreateSynthControl = require('./create-synth-control');\nvar CreateSynth = require('./create-synth');\nvar TimingCallbacks = require('../api/abc_timing_callbacks');\nvar activeAudioContext = require('./active-audio-context');\n\nfunction SynthController() {\n\tvar self = this;\n\tself.warp = 100;\n\tself.cursorControl = null;\n\tself.visualObj = null;\n\tself.timer = null;\n\tself.midiBuffer = null;\n\tself.options = null;\n\tself.currentTempo = null;\n\tself.control = null;\n\tself.isLooping = false;\n\tself.isStarted = false;\n\tself.isLoaded = false;\n\tself.isLoading = false;\n\n\tself.load = function (selector, cursorControl, visualOptions) {\n\t\tif (!visualOptions)\n\t\t\tvisualOptions = {};\n\t\tself.control = new CreateSynthControl(selector, {\n\t\t\tloopHandler: visualOptions.displayLoop ? self.toggleLoop : undefined,\n\t\t\trestartHandler: visualOptions.displayRestart ? self.restart : undefined,\n\t\t\tplayPromiseHandler: visualOptions.displayPlay ? self.play : undefined,\n\t\t\tprogressHandler: visualOptions.displayProgress ? self.randomAccess : undefined,\n\t\t\twarpHandler: visualOptions.displayWarp ? self.onWarp : undefined,\n\t\t\tafterResume: self.init\n\t\t});\n\t\tself.cursorControl = cursorControl;\n\t\tself.disable(true);\n\t};\n\n\tself.disable = function(isDisabled) {\n\t\tif (self.control)\n\t\t\tself.control.disable(isDisabled);\n\t};\n\n\tself.setTune = function(visualObj, userAction, audioParams) {\n\t\tself.visualObj = visualObj;\n\t\tself.disable(false);\n\t\tself.options = audioParams;\n\n\t\tif (self.control) {\n\t\t\tself.pause();\n\t\t\tself.setProgress(0, 1);\n\t\t\tself.control.resetAll();\n\t\t\tself.restart();\n\t\t\tself.isStarted = false;\n\t\t}\n\t\tself.isLooping = false;\n\n\t\tif (userAction)\n\t\t\treturn self.go();\n\t\telse {\n\t\t\treturn Promise.resolve({status: \"no-audio-context\"});\n\t\t}\n\t};\n\n\tself.go = function () {\n\t\tself.isLoading = true;\n\t\tvar millisecondsPerMeasure = self.visualObj.millisecondsPerMeasure() * 100 / self.warp;\n\t\tself.currentTempo = Math.round(self.visualObj.getBeatsPerMeasure() / millisecondsPerMeasure * 60000);\n\t\tif (self.control)\n\t\t\tself.control.setTempo(self.currentTempo);\n\t\tself.percent = 0;\n\t\tvar loadingResponse;\n\n\t\tif (!self.midiBuffer)\n\t\t\tself.midiBuffer = new CreateSynth();\n\t\treturn activeAudioContext().resume().then(function (response) {\n\t\t\treturn self.midiBuffer.init({\n\t\t\t\tvisualObj: self.visualObj,\n\t\t\t\toptions: self.options,\n\t\t\t\tmillisecondsPerMeasure: millisecondsPerMeasure\n\t\t\t});\n\t\t}).then(function (response) {\n\t\t\tloadingResponse = response;\n\t\t\treturn self.midiBuffer.prime();\n\t\t}).then(function () {\n\t\t\tvar subdivisions = 16;\n\t\t\tif (self.cursorControl &&\n\t\t\t\tself.cursorControl.beatSubdivisions !== undefined &&\n\t\t\t\tparseInt(self.cursorControl.beatSubdivisions, 10) >= 1 &&\n\t\t\t\tparseInt(self.cursorControl.beatSubdivisions, 10) <= 64)\n\t\t\t\tsubdivisions = parseInt(self.cursorControl.beatSubdivisions, 10);\n\n\t\t\t// Need to create the TimingCallbacks after priming the midi so that the midi data is available for the callbacks.\n\t\t\tself.timer = new TimingCallbacks(self.visualObj, {\n\t\t\t\tbeatCallback: self.beatCallback,\n\t\t\t\teventCallback: self.eventCallback,\n\t\t\t\tlineEndCallback: self.lineEndCallback,\n\t\t\t\tqpm: self.currentTempo,\n\n\t\t\t\textraMeasuresAtBeginning: self.cursorControl ? self.cursorControl.extraMeasuresAtBeginning : undefined,\n\t\t\t\tlineEndAnticipation: self.cursorControl ? self.cursorControl.lineEndAnticipation : 0,\n\t\t\t\tbeatSubdivisions: subdivisions,\n\t\t\t});\n\t\t\tif (self.cursorControl && self.cursorControl.onReady && typeof self.cursorControl.onReady === 'function')\n\t\t\t\tself.cursorControl.onReady(self);\n\t\t\tself.isLoaded = true;\n\t\t\tself.isLoading = false;\n\t\t\treturn Promise.resolve({ status: \"created\", notesStatus: loadingResponse });\n\t\t});\n\t};\n\n\tself.destroy = function () {\n\t\tif (self.timer) {\n\t\t\tself.timer.reset();\n\t\t\tself.timer.stop();\n\t\t\tself.timer = null;\n\t\t}\n\t\tif (self.midiBuffer) {\n\t\t\tself.midiBuffer.stop();\n\t\t\tself.midiBuffer = null;\n\t\t}\n\t\tself.setProgress(0, 1);\n\t\tif (self.control)\n\t\t\tself.control.resetAll();\n\t};\n\n\tself.play = function () {\n\t\treturn self.runWhenReady(self._play, undefined);\n\t};\n\n\tfunction sleep(ms) {\n\t\treturn new Promise(function (resolve) {\n\t\t\tsetTimeout(resolve, ms)\n\t\t});\n\t}\n\n\tself.runWhenReady = function(fn, arg1) {\n\t\tif (!self.visualObj)\n\t\t\treturn Promise.resolve({status: \"loading\"});\n\t\tif (self.isLoading) {\n\t\t\t// Some other promise is waiting for the tune to be loaded, so just wait.\n\t\t\treturn sleep(500).then(function() {\n\t\t\t\tif (self.isLoading)\n\t\t\t\t\treturn self.runWhenReady(fn, arg1);\n\t\t\t\treturn fn(arg1);\n\t\t\t})\n\t\t} else if (!self.isLoaded) {\n\t\t\treturn self.go().then(function () {\n\t\t\t\treturn fn(arg1);\n\t\t\t});\n\t\t} else {\n\t\t\treturn fn(arg1);\n\t\t}\n\t};\n\n\tself._play = function () {\n\t\treturn activeAudioContext().resume().then(function () {\n\t\t\tself.isStarted = !self.isStarted;\n\t\t\tif (self.isStarted) {\n\t\t\t\tif (self.cursorControl && self.cursorControl.onStart && typeof self.cursorControl.onStart === 'function')\n\t\t\t\t\tself.cursorControl.onStart();\n\t\t\t\tself.midiBuffer.start();\n\t\t\t\tself.timer.start(self.percent);\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.pushPlay(true);\n\t\t\t} else {\n\t\t\t\tself.pause();\n\t\t\t}\n\t\t\treturn Promise.resolve({status: \"ok\"});\n\t\t})\n\t};\n\n\tself.pause = function() {\n\t\tif (self.timer) {\n\t\t\tself.timer.pause();\n\t\t\tself.midiBuffer.pause();\n\t\t\tif (self.control)\n\t\t\t\tself.control.pushPlay(false);\n\t\t}\n\t};\n\n\tself.toggleLoop = function () {\n\t\tself.isLooping = !self.isLooping;\n\t\tif (self.control)\n\t\t\tself.control.pushLoop(self.isLooping);\n\t};\n\n\tself.restart = function () {\n\t\tif (self.timer) {\n\t\t\tself.timer.setProgress(0);\n\t\t\tself.midiBuffer.seek(0);\n\t\t}\n\t};\n\n\tself.randomAccess = function (ev) {\n\t\treturn self.runWhenReady(self._randomAccess, ev);\n\t};\n\n\tself._randomAccess = function (ev) {\n\t\tvar background = (ev.target.classList.contains('abcjs-midi-progress-indicator')) ? ev.target.parentNode : ev.target;\n\t\tvar percent = (ev.x - background.offsetLeft) / background.offsetWidth;\n\t\tif (percent < 0)\n\t\t\tpercent = 0;\n\t\tif (percent > 1)\n\t\t\tpercent = 1;\n\t\tself.seek(percent);\n\t\treturn Promise.resolve({status: \"ok\"});\n\t};\n\n\tself.seek = function (percent, units) {\n\t\tif (self.timer && self.midiBuffer) {\n\t\t\tself.timer.setProgress(percent, units);\n\t\t\tself.midiBuffer.seek(percent, units);\n\t\t}\n\t};\n\n\tself.setWarp = function (newWarp) {\n\t\tif (parseInt(newWarp, 10) > 0) {\n\t\t\tself.warp = parseInt(newWarp, 10);\n\t\t\tvar wasPlaying = self.isStarted;\n\t\t\tvar startPercent = self.percent;\n\t\t\tself.destroy();\n\t\t\tself.isStarted = false;\n\t\t\treturn self.go().then(function () {\n\t\t\t\tself.setProgress(startPercent, self.midiBuffer.duration * 1000);\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.setWarp(self.currentTempo, self.warp);\n\t\t\t\tif (wasPlaying) {\n\t\t\t\t\treturn self.play().then(function () {\n\t\t\t\t\t\tself.seek(startPercent);\n\t\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.seek(startPercent);\n\t\t\t\treturn Promise.resolve();\n\t\t\t});\n\t\t}\n\t\treturn Promise.resolve();\n\t};\n\n\tself.onWarp = function (ev) {\n\t\tvar newWarp = ev.target.value;\n\t\treturn self.setWarp(newWarp);\n\t};\n\n\tself.setProgress = function (percent, totalTime) {\n\t\tself.percent = percent;\n\t\tif (self.control)\n\t\t\tself.control.setProgress(percent, totalTime);\n\t};\n\n\tself.finished = function () {\n\t\tself.timer.reset();\n\t\tif (self.isLooping) {\n\t\t\tself.timer.start(0);\n\t\t\tself.midiBuffer.finished();\n\t\t\tself.midiBuffer.start();\n\t\t\treturn \"continue\";\n\t\t} else {\n\t\t\tself.timer.stop();\n\t\t\tif (self.isStarted) {\n\t\t\t\tif (self.control)\n\t\t\t\t\tself.control.pushPlay(false);\n\t\t\t\tself.isStarted = false;\n\t\t\t\tself.midiBuffer.finished();\n\t\t\t\tif (self.cursorControl && self.cursorControl.onFinished && typeof self.cursorControl.onFinished === 'function')\n\t\t\t\t\tself.cursorControl.onFinished();\n\t\t\t\tself.setProgress(0, 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tself.beatCallback = function (beatNumber, totalBeats, totalTime, position) {\n\t\tvar percent = beatNumber / totalBeats;\n\t\tself.setProgress(percent, totalTime);\n\t\tif (self.cursorControl && self.cursorControl.onBeat && typeof self.cursorControl.onBeat === 'function')\n\t\t\tself.cursorControl.onBeat(beatNumber, totalBeats, totalTime, position);\n\t};\n\n\tself.eventCallback = function (event) {\n\t\tif (event) {\n\t\t\tif (self.cursorControl && self.cursorControl.onEvent && typeof self.cursorControl.onEvent === 'function')\n\t\t\t\tself.cursorControl.onEvent(event);\n\t\t} else {\n\t\t\treturn self.finished();\n\t\t}\n\t};\n\n\tself.lineEndCallback = function (lineEvent, leftEvent) {\n\t\tif (self.cursorControl && self.cursorControl.onLineEnd && typeof self.cursorControl.onLineEnd === 'function')\n\t\t\tself.cursorControl.onLineEnd(lineEvent, leftEvent);\n\t};\n\n\tself.getUrl = function () {\n\t\treturn self.midiBuffer.download();\n\t};\n\n\tself.download = function(fileName) {\n\t\tvar url = self.getUrl();\n\t\tvar link = document.createElement('a');\n\t\tdocument.body.appendChild(link);\n\t\tlink.setAttribute(\"style\",\"display: none;\");\n\t\tlink.href = url;\n\t\tlink.download = fileName ? fileName : 'output.wav';\n\t\tlink.click();\n\t\twindow.URL.revokeObjectURL(url);\n\t\tdocument.body.removeChild(link);\n\t};\n}\n\nmodule.exports = SynthController;\n","var SynthSequence = function() {\n\tvar self = this;\n\tself.tracks = [];\n\tself.totalDuration = 0;\n\tself.currentInstrument = [];\n\tself.starts = [];\n\n\tself.addTrack = function() {\n\t\tself.tracks.push([]);\n\t\tself.currentInstrument.push(0);\n\t\tself.starts.push(0);\n\t\treturn self.tracks.length - 1;\n\t};\n\n\tself.setInstrument = function(trackNumber, instrumentNumber) {\n\t\tself.tracks[trackNumber].push({\n\t\t\tchannel: 0,\n\t\t\tcmd: \"program\",\n\t\t\tinstrument: instrumentNumber\n\t\t});\n\t\tself.currentInstrument[trackNumber] = instrumentNumber;\n\t};\n\n\tself.appendNote = function(trackNumber, pitch, durationInMeasures, volume, cents) {\n\t\tvar note = {\n\t\t\tcmd: \"note\",\n\t\t\tduration: durationInMeasures,\n\t\t\tgap: 0,\n\t\t\tinstrument: self.currentInstrument[trackNumber],\n\t\t\tpitch: pitch,\n\t\t\tstart: self.starts[trackNumber],\n\t\t\tvolume: volume\n\t\t};\n\t\tif (cents)\n\t\t\tnote.cents = cents;\n\t\tself.tracks[trackNumber].push(note);\n\t\tself.starts[trackNumber] += durationInMeasures;\n\n\t\tself.totalDuration = Math.max(self.totalDuration, self.starts[trackNumber]);\n\t};\n};\n\nmodule.exports = SynthSequence;\n","var StringPatterns = require('../string-patterns');\n\nfunction GuitarPatterns(plugin) {\n this.tuning = plugin._super.params.tuning;\n if (!this.tuning) {\n this.tuning = ['E,', 'A,', 'D', 'G' , 'B' , 'e'];\n }\n plugin.tuning = this.tuning;\n this.strings = new StringPatterns(plugin);\n}\n\nGuitarPatterns.prototype.notesToNumber = function (notes, graces) {\n var converter = this.strings;\n return converter.notesToNumber(notes, graces);\n};\n\nGuitarPatterns.prototype.stringToPitch = function (stringNumber) {\n var converter = this.strings;\n return converter.stringToPitch(stringNumber);\n};\n\n\nmodule.exports = GuitarPatterns;\n","/*\nEmit tab for Guitar staff\n*/\nvar StringTablature = require('../string-tablature');\nvar TabCommon = require('../../tab-common');\nvar TabRenderer = require('../../tab-renderer');\nvar GuitarPatterns = require('./guitar-patterns');\n\n/**\n* upon init mainly store provided instances for later usage\n* @param {*} abcTune the parsed tune AST tree\n* @param {*} tuneNumber the parsed tune AST tree\n* @param {*} params complementary args provided to Tablature Plugin\n*/\nPlugin.prototype.init = function (abcTune, tuneNumber, params) {\n var _super = new TabCommon(abcTune, tuneNumber, params);\n this._super = _super;\n this.abcTune = abcTune;\n this.linePitch = 3;\n this.nbLines = 6;\n this.isTabBig = true;\n this.capo = params.capo;\n this.transpose = params.visualTranspose;\n this.tablature = new StringTablature(this.nbLines,\n this.linePitch);\n\n var semantics = new GuitarPatterns(this);\n this.semantics = semantics;\n};\n\nPlugin.prototype.render = function (renderer, line, staffIndex) {\n if (this._super.inError) return;\n if (this.tablature.bypass(line)) return;\n var rndrer = new TabRenderer(this, renderer, line, staffIndex);\n rndrer.doLayout();\n};\n\nfunction Plugin() {}\n\n//\n// Tablature plugin definition\n//\nvar AbcGuitarTab = function () {\n return { name: 'GuitarTab', tablature: Plugin };\n};\n\n\nmodule.exports = AbcGuitarTab;","const {noteToMidi} = require('../../synth/note-to-midi');\nvar TabNote = require('./tab-note');\nvar TabNotes = require('./tab-notes');\n\n\nfunction buildCapo(self) {\n var capoTuning = null;\n var tuning = self.tuning;\n if (self.capo > 0) {\n capoTuning = [];\n for (var iii = 0; iii < tuning.length; iii++) {\n var curNote = new TabNote.TabNote(tuning[iii]);\n for (var jjj = 0; jjj < self.capo; jjj++) {\n curNote = curNote.nextNote();\n }\n capoTuning[iii] = curNote.emit();\n }\n }\n return capoTuning;\n}\n\nfunction buildPatterns(self) {\n var strings = [];\n var tuning = self.tuning;\n if (self.capo > 0) {\n tuning = self.capoTuning;\n }\n var pos = tuning.length - 1;\n for (var iii = 0; iii < tuning.length; iii++) {\n var nextNote = self.highestNote; // highest handled note\n if (iii != tuning.length - 1) {\n nextNote = tuning[iii + 1];\n }\n var tabNotes = new TabNotes(tuning[iii],nextNote);\n var stringNotes = tabNotes.build();\n if (stringNotes.error) {\n return stringNotes;\n }\n strings[pos--] = stringNotes;\n }\n return strings;\n}\n\n\nfunction buildSecond(first) {\n var seconds = [];\n seconds[0] = [];\n var strings = first.strings;\n for (var iii = 1; iii < strings.length; iii++) {\n seconds[iii] = strings[iii - 1];\n }\n return seconds;\n}\n\nfunction sameString(self, chord) {\n for (var jjjj = 0; jjjj < chord.length - 1; jjjj++) {\n var curPos = chord[jjjj];\n var nextPos = chord[jjjj + 1];\n if (curPos.str == nextPos.str) {\n // same String\n // => change lower pos \n if (curPos.str == self.strings.length - 1) {\n // Invalid tab Chord position for instrument\n curPos.num = \"?\";\n nextPos.num = \"?\"; \n return; \n }\n // change lower pitch on lowest string\n if (nextPos.num < curPos.num) {\n nextPos.str++;\n nextPos = noteToNumber(self,\n nextPos.note,\n nextPos.str,\n self.secondPos,\n self.strings[nextPos.str].length\n );\n } else {\n curPos.str++;\n curPos = noteToNumber(self,\n curPos.note,\n curPos.str,\n self.secondPos,\n self.strings[curPos.str].length\n );\n }\n // update table\n chord[jjjj] = curPos;\n chord[jjjj + 1] = nextPos;\n }\n }\n return null;\n}\n\nfunction handleChordNotes(self, notes) {\n var retNotes = [];\n for (var iiii = 0; iiii < notes.length; iiii++) {\n if (notes[iiii].endTie)\n continue;\n var note = new TabNote.TabNote(notes[iiii].name, self.clefTranspose);\n note.checkKeyAccidentals(self.accidentals, self.measureAccidentals)\n var curPos = toNumber(self, note);\n retNotes.push(curPos);\n }\n sameString(self, retNotes);\n return retNotes;\n}\n\nfunction noteToNumber(self, note, stringNumber, secondPosition , firstSize) {\n var strings = self.strings;\n note.checkKeyAccidentals(self.accidentals, self.measureAccidentals) ;\n if (secondPosition) {\n strings = secondPosition;\n }\n var noteName = note.emitNoAccidentals();\n var num = strings[stringNumber].indexOf(noteName);\n var acc = note.acc;\n if (num != -1) {\n if (secondPosition) {\n num += firstSize;\n }\n if ( (note.isFlat || note.acc == -1) && (num == 0)) {\n // flat on 0 pos => previous string 7th position\n var noteEquiv = note.getAccidentalEquiv();\n stringNumber++;\n num = strings[stringNumber].indexOf(noteEquiv.emit());\n acc = 0;\n }\n return {\n num: (num + acc),\n str: stringNumber,\n note: note\n };\n }\n return null;\n}\n\nfunction toNumber(self, note) {\n if (note.isAltered || note.natural) {\n var acc;\n if (note.isFlat) {\n if (note.isDouble)\n acc = \"__\"\n else\n acc = \"_\" \n } else if (note.isSharp) {\n if (note.isDouble)\n acc = \"^^\"\n else\n acc = \"^\" \n } else if (note.natural)\n acc = \"=\"\n self.measureAccidentals[note.name.toUpperCase()] = acc \n }\n for (var i = self.stringPitches.length-1; i >= 0; i--) {\n if (note.pitch + note.pitchAltered >= self.stringPitches[i]) {\n var num = note.pitch + note.pitchAltered - self.stringPitches[i]\n if (note.quarter === '^') num -= 0.5\n else if (note.quarter === \"v\") num += 0.5\n return {\n num: Math.round(num),\n str: self.stringPitches.length-1-i, // reverse the strings because string 0 is on the bottom\n note: note\n }\n }\n }\n return {\n num: \"?\",\n str: self.stringPitches.length-1,\n note: note,\n };\n}\n\nStringPatterns.prototype.stringToPitch = function (stringNumber) {\n var startingPitch = 5.3;\n var bottom = this.strings.length - 1;\n return startingPitch + ((bottom - stringNumber) * this.linePitch);\n};\n\nfunction invalidNumber( retNotes , note ) {\n var number = {\n num: \"?\",\n str: 0,\n note: note\n };\n retNotes.push(number);\n retNotes.error = note.emit() + ': unexpected note for instrument' ;\n} \n\nStringPatterns.prototype.notesToNumber = function (notes, graces) {\n var note;\n var number;\n var error = null; \n var retNotes = null;\n if (notes) {\n retNotes = [];\n if (notes.length > 1) {\n retNotes = handleChordNotes(this, notes);\n if (retNotes.error) {\n error = retNotes.error;\n }\n } else {\n if (!notes[0].endTie) {\n note = new TabNote.TabNote(notes[0].name, this.clefTranspose);\n note.checkKeyAccidentals(this.accidentals, this.measureAccidentals)\n number = toNumber(this, note);\n if (number) {\n retNotes.push(number);\n } else {\n invalidNumber(retNotes, note);\n error = retNotes.error;\n }\n }\n }\n } \n if (error) return retNotes;\n var retGraces = null;\n if (graces) {\n retGraces = [];\n for (var iiii = 0; iiii < graces.length; iiii++) {\n note = new TabNote.TabNote(graces[iiii].name, this.clefTranspose);\n note.checkKeyAccidentals(this.accidentals, this.measureAccidentals)\n number = toNumber(this, note);\n if (number) {\n retGraces.push(number);\n } else {\n invalidNumber(retGraces, note);\n error = retNotes.error;\n }\n }\n }\n \n return {\n notes: retNotes,\n graces: retGraces,\n error: error\n };\n};\n\nStringPatterns.prototype.toString = function () {\n var arr = []\n for (var i = 0; i < this.tuning.length; i++) {\n var str = this.tuning[i].replaceAll(',', '').replaceAll(\"'\", '').toUpperCase();\n if (str[0] === '_') str = str[1] + 'b '\n else if (str[0] === '^') str = str[1] + \"# \"\n arr.push(str)\n }\n return arr.join('');\n};\n\nStringPatterns.prototype.tabInfos = function (plugin) {\n var _super = plugin._super;\n var name = _super.params.label;\n if (name) {\n var tunePos = name.indexOf('%T');\n var tuning = \"\";\n if (tunePos != -1) {\n tuning = this.toString();\n if (plugin.capo > 0) {\n tuning += ' capo:' + plugin.capo;\n }\n name = name.replace('%T', tuning);\n }\n return name;\n }\n return '';\n};\n\n/**\n * Common patterns for all string instruments\n * @param {} plugin\n * @param {} tuning\n * @param {*} capo\n * @param {*} highestNote \n */\nfunction StringPatterns(plugin) {\n var tuning = plugin.tuning;\n var capo = plugin.capo;\n var highestNote = plugin._super.params.highestNote;\n this.linePitch = plugin.linePitch;\n this.highestNote = \"a'\";\n if (highestNote) {\n // override default\n this.highestNote = highestNote;\n }\n this.measureAccidentals = {}\n this.capo = 0;\n if (capo) {\n this.capo = parseInt(capo,10);\n }\n this.transpose = plugin.transpose ? plugin.transpose : 0\n this.tuning = tuning;\n this.stringPitches = []\n for (var i = 0; i < this.tuning.length; i++) {\n var pitch = noteToMidi(this.tuning[i]) + this.capo\n this.stringPitches.push(pitch)\n }\n if (this.capo > 0) {\n this.capoTuning = buildCapo(this);\n }\n this.strings = buildPatterns(this);\n if (this.strings.error) {\n plugin._super.setError(this.strings.error);\n plugin.inError = true;\n return;\n }\n // second position pattern per string\n this.secondPos = buildSecond(this);\n}\n\n\n\nmodule.exports = StringPatterns;","\n/**\n * Layout tablature informations for draw\n * @param {*} numLines \n * @param {*} lineSpace \n */\n\nfunction StringTablature(numLines, lineSpace) {\n this.numLines = numLines;\n this.lineSpace = lineSpace;\n this.verticalSize = this.numLines * this.lineSpace;\n var pitch = 3;\n this.bar = {\n pitch: pitch,\n pitch2: lineSpace * numLines,\n height: 5,\n };\n}\n\n/**\n * return true if current line should not produce a tab\n * @param {} line \n */\nStringTablature.prototype.bypass = function (line) {\n var voices = line.staffGroup.voices;\n if (voices.length > 0) {\n if (voices[0].isPercussion) return true;\n }\n return false;\n}; \n\n\nStringTablature.prototype.setRelative = function (child, relative, first) {\n switch (child.type) {\n case 'bar':\n relative.pitch = this.bar.pitch;\n relative.pitch2 = this.bar.pitch2;\n relative.height = this.height;\n break;\n case 'symbol':\n var top = this.bar.pitch2 / 2;\n if (child.name == 'dots.dot') {\n if (first) {\n relative.pitch = top;\n return false;\n } else {\n relative.pitch = top + this.lineSpace;\n return true;\n }\n }\n break;\n }\n return first;\n};\n\nmodule.exports = StringTablature;","var {noteToMidi, midiToNote} = require('../../synth/note-to-midi');\n\n/**\n * \n * Note structure for Tabs\n * \n */\nvar notes = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];\n\n\nfunction TabNote(note, clefTranspose) {\n var pitch = noteToMidi(note)\n if (clefTranspose)\n pitch += clefTranspose\n var newNote = midiToNote(pitch);\n var isFlat = false;\n var isSharp = false;\n var isAltered = false;\n var natural = null;\n var quarter = null;\n var isDouble = false;\n var acc = 0;\n\n if (note.startsWith('_')) {\n isFlat = true;\n acc = -1;\n // check quarter flat\n if (note[1] == '/') {\n isFlat = false;\n quarter = \"v\";\n acc = 0;\n } else if (note[1] == '_') {\n // double flat\n isDouble = true;\n acc -= 1;\n }\n } else if (note.startsWith('^')) {\n isSharp = true;\n acc = +1;\n // check quarter sharp\n if (note[1] == '/') {\n isSharp = false;\n quarter = \"^\";\n acc = 0;\n } else if (note[1] == '^') {\n // double sharp\n isDouble = true;\n acc += 1;\n }\n } else if (note.startsWith('=')) {\n natural = true;\n acc = 0;\n }\n isAltered = isFlat || isSharp || (quarter != null);\n if (isAltered || natural) {\n if ((quarter != null) || (isDouble)) {\n newNote = note.slice(2);\n } else {\n newNote = note.slice(1);\n }\n }\n var hasComma = (newNote.match(/,/g) || []).length;\n var hasQuote = (newNote.match(/'/g) || []).length;\n\n this.pitch = pitch\n this.pitchAltered = 0\n this.name = newNote;\n this.acc = acc;\n this.isSharp = isSharp;\n this.isKeySharp = false;\n this.isDouble = isDouble;\n this.isAltered = isAltered;\n this.isFlat = isFlat;\n this.isKeyFlat = false;\n this.natural = natural;\n this.quarter = quarter;\n this.isLower = (this.name == this.name.toLowerCase());\n this.name = this.name[0].toUpperCase();\n this.hasComma = hasComma;\n this.isQuoted = hasQuote;\n}\n\nfunction cloneNote(self) {\n var newNote = self.name;\n var newTabNote = new TabNote(newNote);\n newTabNote.pitch = self.pitch;\n newTabNote.hasComma = self.hasComma;\n newTabNote.isLower = self.isLower;\n newTabNote.isQuoted = self.isQuoted;\n newTabNote.isSharp = self.isSharp;\n newTabNote.isKeySharp = self.isKeySharp;\n newTabNote.isFlat = self.isFlat;\n newTabNote.isKeyFlat = self.isKeyFlat;\n return newTabNote;\n} \nTabNote.prototype.sameNoteAs = function (note) {\n return note.pitch === this.pitch\n};\n\nTabNote.prototype.isLowerThan = function (note) {\n return note.pitch > this.pitch\n};\n\nTabNote.prototype.checkKeyAccidentals = function(accidentals, measureAccidentals) {\n if (this.isAltered || this.natural)\n return\n if (measureAccidentals[this.name.toUpperCase()]) {\n switch (measureAccidentals[this.name.toUpperCase()]) {\n case \"__\": this.acc = -2; this.pitchAltered = -2; return;\n case \"_\": this.acc = -1; this.pitchAltered = -1; return;\n case \"=\": this.acc = 0; this.pitchAltered = 0; return;\n case \"^\": this.acc = 1; this.pitchAltered = 1; return;\n case \"^^\": this.acc = 2; this.pitchAltered = 2; return;\n }\n } else if (accidentals) {\n var curNote = this.name;\n for (var iii = 0; iii < accidentals.length; iii++) {\n var curAccidentals = accidentals[iii];\n if (curNote == curAccidentals.note.toUpperCase()) {\n if (curAccidentals.acc == 'flat') {\n this.acc = -1;\n this.isKeyFlat = true;\n this.pitchAltered = -1\n }\n if (curAccidentals.acc == 'sharp') {\n this.acc = +1;\n this.isKeySharp = true;\n this.pitchAltered = 1\n }\n }\n }\n }\n};\n\nTabNote.prototype.getAccidentalEquiv = function () {\n var cloned = cloneNote(this);\n if (cloned.isSharp || cloned.isKeySharp ) {\n cloned = cloned.nextNote();\n cloned.isFlat = true;\n cloned.isSharp = false;\n cloned.isKeySharp = false;\n } else if (cloned.isFlat || cloned.isKeyFlat ) {\n cloned = cloned.prevNote();\n cloned.isSharp = true;\n cloned.isFlat = false;\n cloned.isKeyFlat = false;\n }\n return cloned;\n};\n\n\nTabNote.prototype.nextNote = function () {\n var note = midiToNote(this.pitch+1+this.pitchAltered)\n return new TabNote(note)\n};\n\nTabNote.prototype.prevNote = function () {\n var note = midiToNote(this.pitch-1+this.pitchAltered)\n return new TabNote(note)\n};\n\nTabNote.prototype.emitNoAccidentals = function ( ) {\n var returned = this.name;\n if (this.isLower) {\n returned = returned.toLowerCase();\n }\n for (var ii = 0; ii < this.isQuoted; ii++) {\n returned += \"'\";\n }\n for (var jj = 0; jj < this.hasComma; jj++) {\n returned += \",\";\n }\n return returned;\n};\n\nTabNote.prototype.emit = function () {\n var returned = this.name;\n if (this.isSharp || this.isKeySharp ) {\n returned = '^' + returned;\n if (this.isDouble) {\n returned = '^' + returned;\n }\n }\n if (this.isFlat || this.isKeyFlat) {\n returned = '_' + returned;\n if (this.isDouble) {\n returned = '_' + returned;\n }\n }\n if (this.quarter) {\n if (this.quarter == \"^\") {\n returned = \"^/\" + returned;\n } else {\n returned = \"_/\" + returned;\n }\n }\n if (this.natural) {\n returned = '=' + returned;\n }\n for (var ii = 1; ii <= this.hasComma; ii++) {\n returned += ',';\n }\n \n if (this.isLower) {\n returned = returned.toLowerCase();\n for (var jj = 1; jj <= this.isQuoted; jj++) {\n returned += \"'\";\n }\n }\n return returned;\n};\n\nmodule.exports = {\n 'TabNote': TabNote,\n 'notes': notes\n};","\nvar TabNote = require('./tab-note');\n\nvar notes = TabNote.notes;\n\nfunction TabNotes(fromNote, toNote) {\n this.fromN = new TabNote.TabNote(fromNote);\n this.toN = new TabNote.TabNote(toNote);\n}\n\n\nTabNotes.prototype.build = function () {\n var fromN = this.fromN;\n var toN = this.toN;\n // check that toN is not lower than fromN\n if (toN.isLowerThan(fromN)) {\n var from = fromN.emit();\n var tn = toN.emit();\n return {\n error: 'Invalid string Instrument tuning : ' +\n tn + ' string lower than ' + from + ' string'\n };\n }\n var buildReturned = [];\n var startIndex = notes.indexOf(fromN.name);\n var toIndex = notes.indexOf(toN.name);\n if ((startIndex == -1) || (toIndex == -1)) {\n return buildReturned;\n }\n var finished = false;\n while (!finished) {\n buildReturned.push(fromN.emit());\n fromN = fromN.nextNote();\n if (fromN.sameNoteAs(toN)) {\n finished = true;\n }\n }\n return buildReturned;\n};\n\nmodule.exports = TabNotes;\n","\nvar StringTablature = require('../string-tablature');\nvar TabCommon = require('../../tab-common');\nvar TabRenderer = require('../../tab-renderer');\nvar ViolinPatterns = require('./violin-patterns');\n\n\n/**\n * upon init mainly store provided instances for later usage\n * @param {*} abcTune the parsed tune AST tree\n* @param {*} tuneNumber the parsed tune AST tree\n * @param {*} params complementary args provided to Tablature Plugin\n */\nPlugin.prototype.init = function (abcTune, tuneNumber, params) {\n var _super = new TabCommon(abcTune, tuneNumber, params);\n this.abcTune = abcTune;\n this._super = _super;\n this.linePitch = 3;\n this.nbLines = 4;\n this.isTabBig = false;\n this.capo = params.capo;\n this.transpose = params.visualTranspose;\n this.tablature = new StringTablature(this.nbLines,\n this.linePitch);\n var semantics = new ViolinPatterns(this);\n this.semantics = semantics;\n};\n\nPlugin.prototype.render = function (renderer, line, staffIndex) {\n if (this._super.inError) return;\n if (this.tablature.bypass(line)) return;\n var rndrer = new TabRenderer(this, renderer, line, staffIndex);\n rndrer.doLayout();\n};\n\nfunction Plugin() {}\n\n//\n// Tablature plugin definition\n//\nvar AbcViolinTab = function () {\n return { name: 'ViolinTab', tablature: Plugin };\n};\n\nmodule.exports = AbcViolinTab;\n","var StringPatterns = require('../string-patterns');\n\nfunction ViolinPatterns(plugin) {\n this.tuning = plugin._super.params.tuning;\n if (!this.tuning) {\n this.tuning = ['G,', 'D', 'A', 'e'];\n }\n plugin.tuning = this.tuning;\n this.strings = new StringPatterns(plugin);\n}\n\nViolinPatterns.prototype.notesToNumber = function (notes, graces) {\n var converter = this.strings;\n return converter.notesToNumber(notes, graces);\n};\n\nViolinPatterns.prototype.stringToPitch = function (stringNumber) {\n var converter = this.strings;\n return converter.stringToPitch(stringNumber);\n};\n\n\nmodule.exports = ViolinPatterns;\n","/**\n * Tablature Absolute elements factory\n */\nvar AbsoluteElement = require('../write/creation/elements/absolute-element');\nvar RelativeElement = require('../write/creation/elements/relative-element');\n\nfunction isObject(a) { return a != null && a.constructor === Object; }\nfunction cloneObject(dest, src) {\n for (var prop in src) {\n if (src.hasOwnProperty(prop)) {\n if (!(Array.isArray(src[prop]) || isObject(src[prop]))) {\n dest[prop] = src[prop];\n }\n }\n }\n}\n\nfunction cloneAbsolute(absSrc) {\n var returned = new AbsoluteElement('', 0, 0, '', 0);\n cloneObject(returned, absSrc);\n returned.top = 0;\n returned.bottom = -1;\n if (absSrc.abcelem) {\n returned.abcelem = {};\n cloneObject(returned.abcelem, absSrc.abcelem);\n if (returned.abcelem.el_type === \"note\")\n returned.abcelem.el_type = 'tabNumber';\n }\n // TODO-PER: This fixes the classes because the element isn't created at the right time.\n absSrc.cloned = returned\n return returned;\n}\n\nfunction cloneAbsoluteAndRelatives(absSrc, plugin) {\n var returned = cloneAbsolute(absSrc);\n if (plugin) {\n var children = absSrc.children;\n // proceed with relative as well\n var first = true;\n for (var ii = 0; ii < children.length; ii++) {\n var child = children[ii];\n var relative = new RelativeElement('', 0, 0, 0, '');\n cloneObject(relative, child);\n first = plugin.tablature.setRelative(child, relative, first);\n returned.children.push(relative);\n }\n }\n return returned;\n}\n\nfunction buildTabAbsolute(plugin, absX, relX) {\n var tabIcon = 'tab.tiny';\n var tabYPos = 7.5;\n if (plugin.isTabBig) {\n tabIcon = 'tab.big';\n tabYPos = 10;\n }\n var element = {\n el_type: \"tab\",\n icon: tabIcon,\n Ypos: tabYPos\n };\n var tabAbsolute = new AbsoluteElement(element, 0, 0, \"symbol\", 0);\n tabAbsolute.x = absX;\n var tabRelative = new RelativeElement(tabIcon, 0, 0, 7.5, \"tab\");\n tabRelative.x = relX;\n tabAbsolute.children.push(tabRelative);\n if (tabAbsolute.abcelem.el_type == 'tab') {\n tabRelative.pitch = tabYPos;\n }\n return tabAbsolute;\n}\n\nfunction lyricsDim(abs) {\n if (abs.extra) {\n for (var ii = 0; ii < abs.extra.length; ii++) {\n var extra = abs.extra[ii];\n if (extra.type == 'lyric') {\n return {\n bottom: extra.bottom,\n height: extra.height\n };\n }\n }\n }\n return null;\n}\nfunction TabAbsoluteElements() {\n this.accidentals = null;\n}\n\nfunction getInitialStaffSize(staffGroup) {\n var returned = 0;\n for (var ii = 0; ii < staffGroup.length; ii++) {\n if (!staffGroup[ii].tabNameInfos) returned++;\n }\n return returned;\n}\n\nfunction buildRelativeTabNote(plugin, relX, def, curNote, isGrace) {\n var strNote = curNote.num;\n if (curNote.note.quarter != null) {\n // add tab quarter => needs to string conversion then \n strNote = strNote.toString();\n strNote += curNote.note.quarter;\n }\n var pitch = plugin.semantics.stringToPitch(curNote.str);\n def.notes.push({ num: strNote, str: curNote.str, pitch: curNote.note.emit() });\n var opt = {\n type: 'tabNumber'\n };\n var tabNoteRelative = new RelativeElement(\n strNote, 0, 0, pitch+0.3, opt);\n tabNoteRelative.x = relX;\n tabNoteRelative.isGrace = isGrace;\n tabNoteRelative.isAltered = curNote.note.isAltered;\n return tabNoteRelative;\n}\n\nfunction getXGrace(abs, index) {\n var found = 0;\n if (abs.extra) {\n for (var ii = 0; ii < abs.extra.length; ii++) {\n if (abs.extra[ii].c.indexOf('noteheads') >= 0) {\n if (found === index) {\n return abs.extra[ii].x + abs.extra[ii].w/2;\n } else {\n found++;\n }\n }\n }\n }\n return -1;\n}\n\nfunction graceInRest( absElem ) {\n if (absElem.abcelem) {\n var elem = absElem.abcelem; \n if (elem.rest) {\n return elem.gracenotes;\n }\n }\n return null;\n}\n\nfunction convertToNumber(plugin, pitches, graceNotes) {\n var tabPos = plugin.semantics.notesToNumber(pitches, graceNotes);\n if (tabPos.error) {\n plugin._super.setError(tabPos.error);\n return tabPos; // give up on error here\n }\n if (tabPos.graces && tabPos.notes) {\n // add graces to last note in notes\n var posNote = tabPos.notes.length - 1;\n tabPos.notes[posNote].graces = tabPos.graces;\n }\n return tabPos;\n}\n\nfunction buildGraceRelativesForRest(plugin,abs,absChild,graceNotes,tabVoice) {\n for (var mm = 0; mm < graceNotes.length; mm++) {\n var defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n var graceX = getXGrace(absChild, mm);\n var curGrace = graceNotes[mm];\n var tabGraceRelative = buildRelativeTabNote(plugin, graceX, defGrace, curGrace, true);\n abs.children.push(tabGraceRelative);\n tabVoice.push(defGrace);\n }\n}\n\n/**\n * Build tab absolutes by scanning current staff line absolute array\n * @param {*} staffAbsolute\n */\nTabAbsoluteElements.prototype.build = function (plugin,\n staffAbsolute,\n tabVoice,\n voiceIndex,\n staffIndex,\n keySig ) {\n var staffSize = getInitialStaffSize(staffAbsolute);\n var source = staffAbsolute[staffIndex+voiceIndex];\n var dest = staffAbsolute[staffSize+staffIndex+voiceIndex];\n var tabPos = null;\n var defNote = null;\n if (source.children[0].abcelem.el_type != 'clef') {\n // keysig missing => provide one for tabs\n if (keySig != 'none') {\n source.children.splice(0, 0, keySig);\n } \n }\n for (var ii = 0; ii < source.children.length; ii++) {\n var absChild = source.children[ii];\n var absX = absChild.x;\n var relX = absX;\n // if (absChild.children.length > 0) {\n // relX = absChild.children[0].x;\n // }\n if ( (absChild.isClef) ) {\n dest.children.push(buildTabAbsolute(plugin, absX, relX));\n if (absChild.abcelem.type.indexOf('-8') >= 0) plugin.semantics.strings.clefTranspose = -12\n if (absChild.abcelem.type.indexOf('+8') >= 0) plugin.semantics.strings.clefTranspose = 12\n }\n switch (absChild.type) {\n case 'staff-extra key-signature':\n // refresh key accidentals\n this.accidentals = absChild.abcelem.accidentals;\n plugin.semantics.strings.accidentals = this.accidentals;\n break;\n case 'bar':\n plugin.semantics.strings.measureAccidentals = {}\n var lastBar = false;\n if (ii === source.children.length-1) {\n // used for final line bar drawing\n // for multi tabs / multi staves\n lastBar = true;\n }\n var cloned = cloneAbsoluteAndRelatives(absChild, plugin);\n if (cloned.abcelem.barNumber) {\n delete cloned.abcelem.barNumber;\n for (var bn = 0; bn < cloned.children.length; bn++) {\n if (cloned.children[bn].type === \"barNumber\" ) {\n cloned.children.splice(bn, 1);\n break;\n }\n }\n }\n cloned.abcelem.lastBar = lastBar;\n dest.children.push(cloned);\n tabVoice.push({\n el_type: absChild.abcelem.el_type,\n type: absChild.abcelem.type,\n endChar: absChild.abcelem.endChar,\n startChar: absChild.abcelem.startChar,\n abselem: cloned\n });\n break;\n case 'rest':\n var restGraces = graceInRest(absChild);\n if (restGraces) {\n // to number conversion \n tabPos = convertToNumber(plugin, null, restGraces);\n if (tabPos.error) return;\n // build relative for grace\n defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n buildGraceRelativesForRest(plugin, abs, absChild, tabPos.graces, tabVoice);\n }\n break;\n case 'note':\n var abs = cloneAbsolute(absChild);\n abs.x = absChild.heads[0].x + absChild.heads[0].w / 2; // center the number\n abs.lyricDim = lyricsDim(absChild);\n var pitches = absChild.abcelem.pitches;\n var graceNotes = absChild.abcelem.gracenotes;\n abs.type = 'tabNumber';\n // to number conversion \n tabPos = convertToNumber(plugin, pitches, graceNotes); \n if (tabPos.error) return;\n if (tabPos.graces) {\n // add graces to last note in notes\n var posNote = tabPos.notes.length - 1;\n tabPos.notes[posNote].graces = tabPos.graces;\n }\n // build relative\n defNote = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [] };\n for (var ll = 0; ll < tabPos.notes.length; ll++) {\n var curNote = tabPos.notes[ll];\n if (curNote.graces) {\n for (var mm = 0; mm < curNote.graces.length; mm++) {\n var defGrace = { el_type: \"note\", startChar: absChild.abcelem.startChar, endChar: absChild.abcelem.endChar, notes: [], grace: true };\n var graceX = getXGrace(absChild , mm);\n var curGrace = curNote.graces[mm];\n var tabGraceRelative = buildRelativeTabNote(plugin, graceX, defGrace, curGrace, true);\n abs.children.push(tabGraceRelative);\n tabVoice.push(defGrace);\n }\n }\n var tabNoteRelative = buildRelativeTabNote(plugin, abs.x+absChild.heads[ll].dx, defNote, curNote, false);\n abs.children.push(tabNoteRelative);\n }\n if (defNote.notes.length > 0) {\n defNote.abselem = abs;\n tabVoice.push(defNote);\n dest.children.push(abs);\n }\n break;\n }\n }\n};\n\nmodule.exports = TabAbsoluteElements;\n","/**\n *\n * Common Class/Method available for all instruments\n *\n */\n\nfunction TabCommon(abcTune, tuneNumber, params) {\n this.tune = abcTune;\n this.params = params;\n this.tuneNumber = tuneNumber;\n this.inError = false;\n}\n\n\nTabCommon.prototype.setError = function (error) {\n var tune = this.tune;\n if (error) {\n this.error = error;\n this.inError = true;\n if (tune.warnings) {\n tune.warnings.push(error);\n } else {\n tune.warnings = [error];\n }\n }\n};\n\n\nmodule.exports = TabCommon;\n","/* eslint-disable no-debugger */\nvar VoiceElement = require('../write/creation/elements/voice-element');\nvar TabAbsoluteElements = require('./tab-absolute-elements');\nvar spacing = require('../write/helpers/spacing');\n\nfunction initSpecialY() {\n return {\n tempoHeightAbove: 0,\n partHeightAbove: 0,\n volumeHeightAbove: 0,\n dynamicHeightAbove: 0,\n endingHeightAbove: 0,\n chordHeightAbove: 0,\n lyricHeightAbove: 0,\n lyricHeightBelow: 0,\n chordHeightBelow: 0,\n volumeHeightBelow: 0,\n dynamicHeightBelow: 0\n };\n}\n\nfunction getLyricHeight(voice) {\n var maxLyricHeight = 0;\n for (var ii = 0; ii < voice.children.length; ii++) {\n var curAbs = voice.children[ii];\n if (curAbs.specialY) {\n if (curAbs.specialY.lyricHeightBelow > maxLyricHeight) {\n maxLyricHeight = curAbs.specialY.lyricHeightBelow;\n }\n }\n }\n return maxLyricHeight; // add spacing\n}\n\nfunction buildTabName(self, dest) {\n var stringSemantics = self.plugin.semantics.strings;\n var controller = self.renderer.controller;\n var textSize = controller.getTextSize;\n var tabName = stringSemantics.tabInfos(self.plugin);\n var size = textSize.calc(tabName, 'tablabelfont', 'text instrumentname');\n dest.tabNameInfos = {\n textSize: size,\n name: tabName\n };\n return size.height;\n}\n\n/**\n * Laying out tabs\n * @param {*} renderer\n * @param {*} line\n * @param {*} staffIndex\n * @param {*} tablatureLayout\n */\nfunction TabRenderer(plugin, renderer, line, staffIndex) {\n this.renderer = renderer;\n this.plugin = plugin;\n this.line = line;\n this.absolutes = new TabAbsoluteElements();\n this.staffIndex = staffIndex ;\n this.tabStaff = {\n clef: {\n type: 'TAB'\n }\n };\n this.tabSize = (plugin.linePitch * plugin.nbLines);\n}\n\nfunction islastTabInStaff(index, staffGroup) {\n if (staffGroup[index].isTabStaff) {\n if (index === staffGroup.length - 1) return true;\n if (staffGroup[index + 1].isTabStaff) {\n return false; \n } else {\n return true;\n }\n }\n return false;\n}\n\nfunction getStaffNumbers(staffs) {\n var nbStaffs = 0; \n for (var ii = 0; ii < staffs.length; ii++) {\n if (!staffs[ii].isTabStaff) {\n nbStaffs++;\n }\n }\n return nbStaffs;\n}\n\nfunction getParentStaffIndex(staffs, index) {\n for (var ii = index; ii >= 0; ii--) {\n if (!staffs[ii].isTabStaff) {\n return ii;\n }\n }\n return -1;\n}\n\n\nfunction linkStaffAndTabs(staffs) {\n for (var ii = 0; ii < staffs.length; ii++) {\n if (staffs[ii].isTabStaff) {\n // link to parent staff\n var parentIndex = getParentStaffIndex(staffs, ii);\n staffs[ii].hasStaff = staffs[parentIndex];\n if (!staffs[parentIndex].hasTab) staffs[parentIndex].hasTab = [];\n staffs[parentIndex].hasTab.push(staffs[ii]);\n }\n }\n}\n\nfunction isMultiVoiceSingleStaff(staffs , parent) {\n if ( getStaffNumbers(staffs) === 1) {\n if (parent.voices.length > 1) return true;\n }\n return false;\n}\n\n\nfunction getNextTabPos(self,staffGroup) {\n var tabIndex = self.staffIndex;\n var startIndex = 0;\n var handledVoices = 0;\n var inProgress = true;\n var nbVoices = 0;\n while (inProgress) {\n //for (var ii = 0; ii < staffGroup.length; ii++) {\n if (!staffGroup[startIndex])\n return -1;\n if (!staffGroup[startIndex].isTabStaff) {\n nbVoices = staffGroup[startIndex].voices.length; // get number of staff voices\n }\n if (staffGroup[startIndex].isTabStaff) {\n handledVoices++;\n if (islastTabInStaff(startIndex, staffGroup)) {\n if (handledVoices < nbVoices) return startIndex + 1;\n }\n } else {\n handledVoices = 0;\n if (startIndex >= tabIndex) {\n if (startIndex+1 == staffGroup.length) return startIndex +1;\n if (!staffGroup[startIndex + 1].isTabStaff) return startIndex + 1;\n }\n }\n startIndex++;\n // out of space case\n if (startIndex > staffGroup.length) return -1;\n }\n}\n\nfunction getLastStaff(staffs, lastTab) {\n for (var ii = lastTab; ii >= 0 ; ii-- ) {\n if (!staffs[ii].isTabStaff) {\n return staffs[ii];\n }\n }\n return null; \n}\n\nfunction checkVoiceKeySig(voices, ii) {\n var curVoice = voices[ii];\n // on multivoice multistaff only the first voice has key signature\n // folling consecutive do not have one => we should provide the first voice key sig back then\n var elem0 = curVoice.children[0].abcelem;\n if (elem0.el_type === 'clef') return null;\n if (ii == 0) {\n // not found => clef=none case\n return 'none';\n }\n return voices[ii-1].children[0];\n}\n\nTabRenderer.prototype.doLayout = function () {\n var staffs = this.line.staff;\n if (staffs) {\n // give up on staffline=0 in key \n var firstStaff = staffs[0];\n if (firstStaff) {\n if (firstStaff.clef) {\n if (firstStaff.clef.stafflines == 0) {\n this.plugin._super.setError(\"No tablatures when stafflines=0\");\n return; \n }\n }\n }\n staffs.splice(\n staffs.length, 0,\n this.tabStaff\n );\n }\n var staffGroup = this.line.staffGroup;\n\n var voices = staffGroup.voices;\n var firstVoice = voices[0];\n // take lyrics into account if any\n var lyricsHeight = getLyricHeight(firstVoice);\n var padd = 3;\n var prevIndex = this.staffIndex;\n var previousStaff = staffGroup.staffs[prevIndex];\n var tabTop = this.tabSize + padd - previousStaff.bottom - lyricsHeight;\n if (previousStaff.isTabStaff) {\n tabTop = previousStaff.top;\n }\n var staffGroupInfos = {\n bottom: -1,\n isTabStaff: true,\n specialY: initSpecialY(),\n lines: this.plugin.nbLines,\n linePitch: this.plugin.linePitch,\n dy: 0.15,\n top: tabTop,\n };\n var nextTabPos = getNextTabPos(this,staffGroup.staffs);\n if (nextTabPos === -1)\n return;\n staffGroupInfos.parentIndex = nextTabPos - 1;\n staffGroup.staffs.splice(nextTabPos, 0, staffGroupInfos);\n // staffGroup.staffs.push(staffGroupInfos);\n staffGroup.height += this.tabSize + padd;\n var parentStaff = getLastStaff(staffGroup.staffs, nextTabPos); \n var nbVoices = 1;\n if (isMultiVoiceSingleStaff(staffGroup.staffs,parentStaff)) {\n nbVoices = parentStaff.voices.length;\n } \n // build from staff\n this.tabStaff.voices = [];\n for (var ii = 0; ii < nbVoices; ii++) {\n var tabVoice = new VoiceElement(0, 0);\n if (ii > 0) tabVoice.duplicate = true;\n var nameHeight = buildTabName(this, tabVoice) / spacing.STEP;\n nameHeight = Math.max(nameHeight, 1) // If there is no label for the tab line, then there needs to be a little padding\n staffGroup.staffs[this.staffIndex].top += nameHeight;\n staffGroup.height += nameHeight * spacing.STEP;\n tabVoice.staff = staffGroupInfos;\n voices.splice(voices.length, 0, tabVoice);\n var keySig = checkVoiceKeySig(voices, ii + this.staffIndex);\n this.tabStaff.voices[ii] = [];\n this.absolutes.build(this.plugin, voices, this.tabStaff.voices[ii], ii , this.staffIndex ,keySig);\n }\n linkStaffAndTabs(staffGroup.staffs); // crossreference tabs and staff\n};\n\n\nmodule.exports = TabRenderer;\n","// abc_abstract_engraver.js: Creates a data structure suitable for printing a line of abc\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar BeamElem = require('./elements/beam-element');\nvar BraceElem = require('./elements/brace-element');\nvar createClef = require('./create-clef');\nvar createKeySignature = require('./create-key-signature');\nvar createNoteHead = require('./create-note-head');\nvar createTimeSignature = require('./create-time-signature');\nvar Decoration = require('./decoration');\nvar EndingElem = require('./elements/ending-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\nvar spacing = require('../helpers/spacing');\nvar StaffGroupElement = require('./elements/staff-group-element');\nvar TempoElement = require('./elements/tempo-element');\nvar TieElem = require('./elements/tie-element');\nvar TripletElem = require('./elements/triplet-element');\nvar VoiceElement = require('./elements/voice-element');\nvar addChord = require('./add-chord');\nvar pitchesToPerc = require('../../synth/pitches-to-perc')\n\nvar parseCommon = require('../../parse/abc_common');\n\nvar getDuration = function (elem) {\n\tvar d = 0;\n\tif (elem.duration) {\n\t\td = elem.duration;\n\t}\n\treturn d;\n};\n\nvar hint = false;\n\nvar chartable = {\n\trest: { 0: \"rests.whole\", 1: \"rests.half\", 2: \"rests.quarter\", 3: \"rests.8th\", 4: \"rests.16th\", 5: \"rests.32nd\", 6: \"rests.64th\", 7: \"rests.128th\", \"multi\": \"rests.multimeasure\" },\n\tnote: { \"-1\": \"noteheads.dbl\", 0: \"noteheads.whole\", 1: \"noteheads.half\", 2: \"noteheads.quarter\", 3: \"noteheads.quarter\", 4: \"noteheads.quarter\", 5: \"noteheads.quarter\", 6: \"noteheads.quarter\", 7: \"noteheads.quarter\", 'nostem': \"noteheads.quarter\" },\n\trhythm: { \"-1\": \"noteheads.slash.whole\", 0: \"noteheads.slash.whole\", 1: \"noteheads.slash.whole\", 2: \"noteheads.slash.quarter\", 3: \"noteheads.slash.quarter\", 4: \"noteheads.slash.quarter\", 5: \"noteheads.slash.quarter\", 6: \"noteheads.slash.quarter\", 7: \"noteheads.slash.quarter\", nostem: \"noteheads.slash.nostem\" },\n\tx: { \"-1\": \"noteheads.indeterminate\", 0: \"noteheads.indeterminate\", 1: \"noteheads.indeterminate\", 2: \"noteheads.indeterminate\", 3: \"noteheads.indeterminate\", 4: \"noteheads.indeterminate\", 5: \"noteheads.indeterminate\", 6: \"noteheads.indeterminate\", 7: \"noteheads.indeterminate\", nostem: \"noteheads.indeterminate\" },\n\tharmonic: { \"-1\": \"noteheads.harmonic.quarter\", 0: \"noteheads.harmonic.quarter\", 1: \"noteheads.harmonic.quarter\", 2: \"noteheads.harmonic.quarter\", 3: \"noteheads.harmonic.quarter\", 4: \"noteheads.harmonic.quarter\", 5: \"noteheads.harmonic.quarter\", 6: \"noteheads.harmonic.quarter\", 7: \"noteheads.harmonic.quarter\", nostem: \"noteheads.harmonic.quarter\" },\n\ttriangle: { \"-1\": \"noteheads.triangle.quarter\", 0: \"noteheads.triangle.quarter\", 1: \"noteheads.triangle.quarter\", 2: \"noteheads.triangle.quarter\", 3: \"noteheads.triangle.quarter\", 4: \"noteheads.triangle.quarter\", 5: \"noteheads.triangle.quarter\", 6: \"noteheads.triangle.quarter\", 7: \"noteheads.triangle.quarter\", nostem: \"noteheads.triangle.quarter\" },\n\tuflags: { 3: \"flags.u8th\", 4: \"flags.u16th\", 5: \"flags.u32nd\", 6: \"flags.u64th\" },\n\tdflags: { 3: \"flags.d8th\", 4: \"flags.d16th\", 5: \"flags.d32nd\", 6: \"flags.d64th\" }\n};\n\nvar AbstractEngraver = function (getTextSize, tuneNumber, options) {\n\tthis.decoration = new Decoration();\n\tthis.getTextSize = getTextSize;\n\tthis.tuneNumber = tuneNumber;\n\tthis.isBagpipes = options.bagpipes;\n\tthis.flatBeams = options.flatbeams;\n\tthis.graceSlurs = options.graceSlurs;\n\tthis.percmap = options.percmap;\n\tthis.initialClef = options.initialClef\n\tthis.jazzchords = !!options.jazzchords\n\tthis.germanAlphabet = !!options.germanAlphabet\n\tthis.reset();\n};\n\nAbstractEngraver.prototype.reset = function () {\n\tthis.slurs = {};\n\tthis.ties = [];\n\tthis.voiceScale = 1;\n\tthis.voiceColor = undefined;\n\tthis.slursbyvoice = {};\n\tthis.tiesbyvoice = {};\n\tthis.endingsbyvoice = {};\n\tthis.scaleByVoice = {};\n\tthis.colorByVoice = {};\n\tthis.tripletmultiplier = 1;\n\n\tthis.abcline = undefined;\n\tthis.accidentalSlot = undefined;\n\tthis.accidentalshiftx = undefined;\n\tthis.dotshiftx = undefined;\n\tthis.hasVocals = false;\n\tthis.minY = undefined;\n\tthis.partstartelem = undefined;\n\tthis.startlimitelem = undefined;\n\tthis.stemdir = undefined;\n};\n\nAbstractEngraver.prototype.setStemHeight = function (heightInPixels) {\n\tthis.stemHeight = Math.round(heightInPixels * 10 / spacing.STEP) / 10;\n};\n\nAbstractEngraver.prototype.getCurrentVoiceId = function (s, v) {\n\treturn \"s\" + s + \"v\" + v;\n};\n\nAbstractEngraver.prototype.pushCrossLineElems = function (s, v) {\n\tthis.slursbyvoice[this.getCurrentVoiceId(s, v)] = this.slurs;\n\tthis.tiesbyvoice[this.getCurrentVoiceId(s, v)] = this.ties;\n\tthis.endingsbyvoice[this.getCurrentVoiceId(s, v)] = this.partstartelem;\n\tthis.scaleByVoice[this.getCurrentVoiceId(s, v)] = this.voiceScale;\n\tif (this.voiceColor)\n\t\tthis.colorByVoice[this.getCurrentVoiceId(s, v)] = this.voiceColor;\n};\n\nAbstractEngraver.prototype.popCrossLineElems = function (s, v) {\n\tthis.slurs = this.slursbyvoice[this.getCurrentVoiceId(s, v)] || {};\n\tthis.ties = this.tiesbyvoice[this.getCurrentVoiceId(s, v)] || [];\n\tthis.partstartelem = this.endingsbyvoice[this.getCurrentVoiceId(s, v)];\n\tthis.voiceScale = this.scaleByVoice[this.getCurrentVoiceId(s, v)];\n\tif (this.voiceScale === undefined) this.voiceScale = 1;\n\tthis.voiceColor = this.colorByVoice[this.getCurrentVoiceId(s, v)];\n};\n\nAbstractEngraver.prototype.containsLyrics = function (staves) {\n\tfor (var i = 0; i < staves.length; i++) {\n\t\tfor (var j = 0; j < staves[i].voices.length; j++) {\n\t\t\tfor (var k = 0; k < staves[i].voices[j].length; k++) {\n\t\t\t\tvar el = staves[i].voices[j][k];\n\t\t\t\tif (el.lyric) {\n\t\t\t\t\t// We just want to see if there are vocals below the music to know where to put the dynamics.\n\t\t\t\t\tif (!el.positioning || el.positioning.vocalPosition === 'below')\n\t\t\t\t\t\tthis.hasVocals = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nAbstractEngraver.prototype.createABCLine = function (staffs, tempo, l) {\n\tthis.minY = 2; // PER: This will be the lowest that any note reaches. It will be used to set the dynamics row.\n\t// See if there are any lyrics on this line.\n\tthis.containsLyrics(staffs);\n\tvar staffgroup = new StaffGroupElement(this.getTextSize);\n\tthis.tempoSet = false;\n\tfor (var s = 0; s < staffs.length; s++) {\n\t\tif (hint)\n\t\t\tthis.restoreState();\n\t\thint = false;\n\t\tthis.createABCStaff(staffgroup, staffs[s], tempo, s, l);\n\t}\n\treturn staffgroup;\n};\n\nAbstractEngraver.prototype.createABCStaff = function (staffgroup, abcstaff, tempo, s, l) {\n\t// If the tempo is passed in, then the first element should get the tempo attached to it.\n\tstaffgroup.getTextSize.updateFonts(abcstaff);\n\tfor (var v = 0; v < abcstaff.voices.length; v++) {\n\t\tvar voice = new VoiceElement(v, abcstaff.voices.length);\n\t\tif (v === 0) {\n\t\t\tvoice.barfrom = (abcstaff.connectBarLines === \"start\" || abcstaff.connectBarLines === \"continue\");\n\t\t\tvoice.barto = (abcstaff.connectBarLines === \"continue\" || abcstaff.connectBarLines === \"end\");\n\t\t} else {\n\t\t\tvoice.duplicate = true; // bar lines and other duplicate info need not be created\n\t\t}\n\t\tif (abcstaff.title && abcstaff.title[v]) {\n\t\t\tvoice.header = abcstaff.title[v].replace(/\\\\n/g, \"\\n\");\n\t\t\tvoice.headerPosition = 6 + staffgroup.getTextSize.baselineToCenter(voice.header, \"voicefont\", 'staff-extra voice-name', v, abcstaff.voices.length) / spacing.STEP;\n\t\t}\n\t\tif (abcstaff.clef && abcstaff.clef.type === \"perc\")\n\t\t\tvoice.isPercussion = true;\n\t\tvar clef = (!this.initialClef || l === 0) && createClef(abcstaff.clef, this.tuneNumber);\n\t\tif (clef) {\n\t\t\tif (v === 0 && abcstaff.barNumber) {\n\t\t\t\tthis.addMeasureNumber(abcstaff.barNumber, clef);\n\t\t\t}\n\t\t\tvoice.addChild(clef);\n\t\t\tthis.startlimitelem = clef; // limit ties here\n\t\t}\n\t\tvar keySig = createKeySignature(abcstaff.key, this.tuneNumber);\n\t\tif (keySig) {\n\t\t\tvoice.addChild(keySig);\n\t\t\tthis.startlimitelem = keySig; // limit ties here\n\t\t}\n\t\tif (abcstaff.meter) {\n\t\t\tif (abcstaff.meter.type === 'specified') {\n\t\t\t\tthis.measureLength = abcstaff.meter.value[0].num / abcstaff.meter.value[0].den;\n\t\t\t} else\n\t\t\t\tthis.measureLength = 1;\n\t\t\tvar ts = createTimeSignature(abcstaff.meter, this.tuneNumber);\n\t\t\tvoice.addChild(ts);\n\t\t\tthis.startlimitelem = ts; // limit ties here\n\t\t}\n\t\tif (voice.duplicate)\n\t\t\tvoice.children = []; // we shouldn't reprint the above if we're reusing the same staff. We just created them to get the right spacing.\n\t\tvar staffLines = abcstaff.clef.stafflines || abcstaff.clef.stafflines === 0 ? abcstaff.clef.stafflines : 5;\n\t\tstaffgroup.addVoice(voice, s, staffLines);\n\t\tvar isSingleLineStaff = staffLines === 1;\n\t\tthis.createABCVoice(abcstaff.voices[v], tempo, s, v, isSingleLineStaff, voice);\n\t\tstaffgroup.setStaffLimits(voice);\n\t\tif (v === 0) {\n\t\t\t// only do brace and bracket processing on the first voice, otherwise it would be done twice.\n\t\t\tif (abcstaff.brace === \"start\" || (!staffgroup.brace && abcstaff.brace)) {\n\t\t\t\tif (!staffgroup.brace)\n\t\t\t\t\tstaffgroup.brace = [];\n\t\t\t\tstaffgroup.brace.push(new BraceElem(voice, \"brace\"));\n\t\t\t} else if (abcstaff.brace === \"end\" && staffgroup.brace) {\n\t\t\t\tstaffgroup.brace[staffgroup.brace.length - 1].setBottomStaff(voice);\n\t\t\t} else if (abcstaff.brace === \"continue\" && staffgroup.brace) {\n\t\t\t\tstaffgroup.brace[staffgroup.brace.length - 1].continuing(voice);\n\t\t\t}\n\t\t\tif (abcstaff.bracket === \"start\" || (!staffgroup.bracket && abcstaff.bracket)) {\n\t\t\t\tif (!staffgroup.bracket)\n\t\t\t\t\tstaffgroup.bracket = [];\n\t\t\t\tstaffgroup.bracket.push(new BraceElem(voice, \"bracket\"));\n\t\t\t} else if (abcstaff.bracket === \"end\" && staffgroup.bracket) {\n\t\t\t\tstaffgroup.bracket[staffgroup.bracket.length - 1].setBottomStaff(voice);\n\t\t\t} else if (abcstaff.bracket === \"continue\" && staffgroup.bracket) {\n\t\t\t\tstaffgroup.bracket[staffgroup.bracket.length - 1].continuing(voice);\n\t\t\t}\n\t\t}\n\t}\n};\n\nfunction getBeamGroup(abcline, pos) {\n\t// If there are notes beamed together, they are handled as a group, so find all of them here.\n\tvar elem = abcline[pos];\n\tif (elem.el_type !== 'note' || !elem.startBeam || elem.endBeam)\n\t\treturn { count: 1, elem: elem };\n\n\tvar group = [];\n\twhile (pos < abcline.length && abcline[pos].el_type === 'note') {\n\t\tgroup.push(abcline[pos]);\n\t\tif (abcline[pos].endBeam)\n\t\t\tbreak;\n\t\tpos++;\n\t}\n\treturn { count: group.length, elem: group };\n}\n\nAbstractEngraver.prototype.createABCVoice = function (abcline, tempo, s, v, isSingleLineStaff, voice) {\n\tthis.popCrossLineElems(s, v);\n\tthis.stemdir = (this.isBagpipes) ? \"down\" : null;\n\tthis.abcline = abcline;\n\tif (this.partstartelem) {\n\t\tthis.partstartelem = new EndingElem(\"\", null, null);\n\t\tvoice.addOther(this.partstartelem);\n\t}\n\tvar voiceNumber = voice.voicetotal < 2 ? -1 : voice.voicenumber;\n\tfor (var slur in this.slurs) {\n\t\tif (this.slurs.hasOwnProperty(slur)) {\n\t\t\t// this is already a slur element, but it was created for the last line, so recreate it.\n\t\t\tthis.slurs[slur] = new TieElem({ force: this.slurs[slur].force, voiceNumber: voiceNumber, stemDir: this.slurs[slur].stemDir, style: this.slurs[slur].dotted });\n\t\t\tif (hint) this.slurs[slur].setHint();\n\t\t\tvoice.addOther(this.slurs[slur]);\n\t\t}\n\t}\n\tfor (var i = 0; i < this.ties.length; i++) {\n\t\t// this is already a tie element, but it was created for the last line, so recreate it.\n\t\tthis.ties[i] = new TieElem({ force: this.ties[i].force, stemDir: this.ties[i].stemDir, voiceNumber: voiceNumber, style: this.ties[i].dotted });\n\t\tif (hint) this.ties[i].setHint();\n\t\tvoice.addOther(this.ties[i]);\n\t}\n\n\tfor (var j = 0; j < this.abcline.length; j++) {\n\t\tsetAveragePitch(this.abcline[j]);\n\t\tthis.minY = Math.min(this.abcline[j].minpitch, this.minY);\n\t}\n\n\tvar isFirstStaff = (s === 0);\n\tvar pos = 0;\n\twhile (pos < this.abcline.length) {\n\t\tvar ret = getBeamGroup(this.abcline, pos);\n\t\tvar abselems = this.createABCElement(isFirstStaff, isSingleLineStaff, voice, ret.elem);\n\t\tif (abselems) {\n\t\t\tfor (i = 0; i < abselems.length; i++) {\n\t\t\t\tif (!this.tempoSet && tempo && !tempo.suppress) {\n\t\t\t\t\tthis.tempoSet = true;\n\t\t\t\t\tvar tempoElement = new AbsoluteElement(tempo, 0, 0, \"tempo\", this.tuneNumber, {});\n\t\t\t\t\ttempoElement.addFixedX(new TempoElement(tempo, this.tuneNumber, createNoteHead));\n\t\t\t\t\tvoice.addChild(tempoElement);\n\t\t\t\t}\n\t\t\t\tvoice.addChild(abselems[i]);\n\t\t\t}\n\t\t}\n\t\tpos += ret.count;\n\t}\n\tthis.pushCrossLineElems(s, v);\n};\n\nAbstractEngraver.prototype.saveState = function () {\n\tthis.tiesSave = parseCommon.cloneArray(this.ties);\n\tthis.slursSave = parseCommon.cloneHashOfHash(this.slurs);\n\tthis.slursbyvoiceSave = parseCommon.cloneHashOfHash(this.slursbyvoice);\n\tthis.tiesbyvoiceSave = parseCommon.cloneHashOfArrayOfHash(this.tiesbyvoice);\n};\n\nAbstractEngraver.prototype.restoreState = function () {\n\tthis.ties = parseCommon.cloneArray(this.tiesSave);\n\tthis.slurs = parseCommon.cloneHashOfHash(this.slursSave);\n\tthis.slursbyvoice = parseCommon.cloneHashOfHash(this.slursbyvoiceSave);\n\tthis.tiesbyvoice = parseCommon.cloneHashOfArrayOfHash(this.tiesbyvoiceSave);\n};\n\n// function writeMeasureWidth(voice) {\n// \tvar width = 0;\n// \tfor (var i = voice.children.length-1; i >= 0; i--) {\n// \t\tvar elem = voice.children[i];\n// \t\tif (elem.abcelem.el_type === 'bar')\n// \t\t\tbreak;\n// \t\twidth += elem.w;\n// \t}\n// \treturn new RelativeElement(width.toFixed(2), -70, 0, undefined, {type:\"debug\"});\n// }\n\n// return an array of AbsoluteElement\nAbstractEngraver.prototype.createABCElement = function (isFirstStaff, isSingleLineStaff, voice, elem) {\n\tvar elemset = [];\n\tswitch (elem.el_type) {\n\t\tcase undefined:\n\t\t\t// it is undefined if we were passed an array in - an array means a set of notes that should be beamed together.\n\t\t\telemset = this.createBeam(isSingleLineStaff, voice, elem);\n\t\t\tbreak;\n\t\tcase \"note\":\n\t\t\telemset[0] = this.createNote(elem, false, isSingleLineStaff, voice);\n\t\t\tif (this.triplet && this.triplet.isClosed()) {\n\t\t\t\tvoice.addOther(this.triplet);\n\t\t\t\tthis.triplet = null;\n\t\t\t\tthis.tripletmultiplier = 1;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"bar\":\n\t\t\telemset[0] = this.createBarLine(voice, elem, isFirstStaff);\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\t//\t elemset[0].addChild(writeMeasureWidth(voice));\n\t\t\tbreak;\n\t\tcase \"meter\":\n\t\t\telemset[0] = createTimeSignature(elem, this.tuneNumber);\n\t\t\tthis.startlimitelem = elemset[0]; // limit ties here\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"clef\":\n\t\t\telemset[0] = createClef(elem, this.tuneNumber);\n\t\t\tif (!elemset[0]) return null;\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"key\":\n\t\t\tvar absKey = createKeySignature(elem, this.tuneNumber);\n\t\t\tif (absKey) {\n\t\t\t\telemset[0] = absKey;\n\t\t\t\tthis.startlimitelem = elemset[0]; // limit ties here\n\t\t\t}\n\t\t\tif (voice.duplicate && elemset.length > 0) elemset[0].invisible = true;\n\t\t\tbreak;\n\t\tcase \"stem\":\n\t\t\tthis.stemdir = elem.direction === \"auto\" ? undefined : elem.direction;\n\t\t\tbreak;\n\t\tcase \"part\":\n\t\t\tvar abselem = new AbsoluteElement(elem, 0, 0, 'part', this.tuneNumber);\n\t\t\tvar dim = this.getTextSize.calc(elem.title, 'partsfont', \"part\");\n\t\t\tabselem.addFixedX(new RelativeElement(elem.title, 0, 0, undefined, { type: \"part\", height: dim.height / spacing.STEP }));\n\t\t\telemset[0] = abselem;\n\t\t\tbreak;\n\t\tcase \"tempo\":\n\t\t\tvar abselem3 = new AbsoluteElement(elem, 0, 0, 'tempo', this.tuneNumber);\n\t\t\tabselem3.addFixedX(new TempoElement(elem, this.tuneNumber, createNoteHead));\n\t\t\telemset[0] = abselem3;\n\t\t\tbreak;\n\t\tcase \"style\":\n\t\t\tif (elem.head === \"normal\")\n\t\t\t\tdelete this.style;\n\t\t\telse\n\t\t\t\tthis.style = elem.head;\n\t\t\tbreak;\n\t\tcase \"hint\":\n\t\t\thint = true;\n\t\t\tthis.saveState();\n\t\t\tbreak;\n\t\tcase \"midi\":\n\t\t\t// This has no effect on the visible music, so just skip it.\n\t\t\tbreak;\n\t\tcase \"scale\":\n\t\t\tthis.voiceScale = elem.size;\n\t\t\tbreak;\n\t\tcase \"color\":\n\t\t\tthis.voiceColor = elem.color;\n\t\t\tvoice.color = this.voiceColor;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tvar abselem2 = new AbsoluteElement(elem, 0, 0, 'unsupported', this.tuneNumber);\n\t\t\tabselem2.addFixed(new RelativeElement(\"element type \" + elem.el_type, 0, 0, undefined, { type: \"debug\" }));\n\t\t\telemset[0] = abselem2;\n\t}\n\n\treturn elemset;\n};\n\nfunction setAveragePitch(elem) {\n\tif (elem.pitches) {\n\t\tsortPitch(elem);\n\t\tvar sum = 0;\n\t\tfor (var p = 0; p < elem.pitches.length; p++) {\n\t\t\tsum += elem.pitches[p].verticalPos;\n\t\t}\n\t\telem.averagepitch = sum / elem.pitches.length;\n\t\telem.minpitch = elem.pitches[0].verticalPos;\n\t\telem.maxpitch = elem.pitches[elem.pitches.length - 1].verticalPos;\n\t}\n}\n\nAbstractEngraver.prototype.createBeam = function (isSingleLineStaff, voice, elems) {\n\tvar abselemset = [];\n\n\tvar beamelem = new BeamElem(this.stemHeight * this.voiceScale, this.stemdir, this.flatBeams, elems[0]);\n\tif (hint) beamelem.setHint();\n\tfor (var i = 0; i < elems.length; i++) {\n\t\t// Do a first pass to figure out the stem direction before creating the notes, so that staccatos and other decorations can be placed correctly.\n\t\tbeamelem.runningDirection(elems[i])\n\t}\n\tbeamelem.setStemDirection()\n\tvar tempStemDir = this.stemdir\n\tthis.stemdir = beamelem.stemsUp ? 'up' : 'down'\n\tfor (i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tvar abselem = this.createNote(elem, true, isSingleLineStaff, voice);\n\t\tabselemset.push(abselem);\n\t\tbeamelem.add(abselem);\n\t\tif (this.triplet && this.triplet.isClosed()) {\n\t\t\tvoice.addOther(this.triplet);\n\t\t\tthis.triplet = null;\n\t\t\tthis.tripletmultiplier = 1;\n\t\t}\n\t}\n\tbeamelem.calcDir();\n\tvoice.addBeam(beamelem);\n\tthis.stemdir = tempStemDir\n\treturn abselemset;\n};\n\nvar sortPitch = function (elem) {\n\tvar sorted;\n\tdo {\n\t\tsorted = true;\n\t\tfor (var p = 0; p < elem.pitches.length - 1; p++) {\n\t\t\tif (elem.pitches[p].pitch > elem.pitches[p + 1].pitch) {\n\t\t\t\tsorted = false;\n\t\t\t\tvar tmp = elem.pitches[p];\n\t\t\t\telem.pitches[p] = elem.pitches[p + 1];\n\t\t\t\telem.pitches[p + 1] = tmp;\n\t\t\t}\n\t\t}\n\t} while (!sorted);\n};\n\nvar ledgerLines = function (abselem, minPitch, maxPitch, isRest, symbolWidth, additionalLedgers, dir, dx, scale) {\n\tfor (var i = maxPitch; i > 11; i--) {\n\t\tif (i % 2 === 0 && !isRest) {\n\t\t\tabselem.addFixed(new RelativeElement(null, dx, (symbolWidth + 4) * scale, i, { type: \"ledger\" }));\n\t\t}\n\t}\n\n\tfor (i = minPitch; i < 1; i++) {\n\t\tif (i % 2 === 0 && !isRest) {\n\t\t\tabselem.addFixed(new RelativeElement(null, dx, (symbolWidth + 4) * scale, i, { type: \"ledger\" }));\n\t\t}\n\t}\n\n\tfor (i = 0; i < additionalLedgers.length; i++) { // PER: draw additional ledgers\n\t\tvar ofs = symbolWidth;\n\t\tif (dir === 'down') ofs = -ofs;\n\t\tabselem.addFixed(new RelativeElement(null, ofs + dx, (symbolWidth + 4) * scale, additionalLedgers[i], { type: \"ledger\" }));\n\t}\n};\n\nAbstractEngraver.prototype.addGraceNotes = function (elem, voice, abselem, notehead, stemHeight, isBagpipes, roomtaken) {\n\tvar gracescale = 3 / 5;\n\tvar graceScaleStem = 3.5 / 5; // TODO-PER: empirically found constant.\n\tstemHeight = Math.round(stemHeight * graceScaleStem);\n\tvar gracebeam = null;\n\tvar flag;\n\n\tif (elem.gracenotes.length > 1) {\n\t\tgracebeam = new BeamElem(stemHeight, \"grace\", isBagpipes);\n\t\tif (hint) gracebeam.setHint();\n\t\tgracebeam.mainNote = abselem;\t// this gives us a reference back to the note this is attached to so that the stems can be attached somewhere.\n\t}\n\n\tvar i;\n\tvar graceoffsets = [];\n\tfor (i = elem.gracenotes.length - 1; i >= 0; i--) { // figure out where to place each gracenote\n\t\troomtaken += 10;\n\t\tgraceoffsets[i] = roomtaken;\n\t\tif (elem.gracenotes[i].accidental) {\n\t\t\troomtaken += 7;\n\t\t}\n\t}\n\n\tfor (i = 0; i < elem.gracenotes.length; i++) {\n\t\tvar gracepitch = elem.gracenotes[i].verticalPos;\n\n\t\tflag = (gracebeam) ? null : chartable.uflags[(isBagpipes) ? 5 : 3];\n\t\tvar accidentalSlot = [];\n\t\tvar ret = createNoteHead(abselem, \"noteheads.quarter\", elem.gracenotes[i],\n\t\t\t{ dir: \"up\", headx: -graceoffsets[i], extrax: -graceoffsets[i], flag: flag, scale: gracescale * this.voiceScale, accidentalSlot: accidentalSlot });\n\t\tret.notehead.highestVert = ret.notehead.pitch + stemHeight;\n\t\tvar grace = ret.notehead;\n\t\tthis.addSlursAndTies(abselem, elem.gracenotes[i], grace, voice, \"up\", true);\n\n\t\tabselem.addExtra(grace);\n\t\t// PER: added acciaccatura slash\n\t\tif (elem.gracenotes[i].acciaccatura) {\n\t\t\tvar pos = elem.gracenotes[i].verticalPos + 7 * gracescale; // the same formula that determines the flag position.\n\t\t\tvar dAcciaccatura = gracebeam ? 5 : 6; // just an offset to make it line up correctly.\n\t\t\tabselem.addRight(new RelativeElement(\"flags.ugrace\", -graceoffsets[i] + dAcciaccatura, 0, pos, { scalex: gracescale, scaley: gracescale }));\n\t\t}\n\t\tif (gracebeam) { // give the beam the necessary info\n\t\t\tvar graceDuration = elem.gracenotes[i].duration / 2;\n\t\t\tif (isBagpipes) graceDuration /= 2;\n\t\t\tvar pseudoabselem = {\n\t\t\t\theads: [grace],\n\t\t\t\tabcelem: { averagepitch: gracepitch, minpitch: gracepitch, maxpitch: gracepitch, duration: graceDuration }\n\t\t\t};\n\t\t\tgracebeam.add(pseudoabselem);\n\t\t} else { // draw the stem\n\t\t\tvar p1 = gracepitch + 1 / 3 * gracescale;\n\t\t\tvar p2 = gracepitch + 7 * gracescale;\n\t\t\tvar dx = grace.dx + grace.w;\n\t\t\tvar width = -0.6;\n\t\t\tabselem.addExtra(new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width }));\n\t\t}\n\t\tledgerLines(abselem, gracepitch, gracepitch, false, glyphs.getSymbolWidth(\"noteheads.quarter\"), [], true, grace.dx - 1, 0.6);\n\n\t\t// if this is the first grace note, we might want to start a slur.\n\t\t// there is a slur if graceSlurs is specifically set.\n\t\t// there is no slur if it is bagpipes.\n\t\t// there is not a slur if the element is a spacer or invisible rest.\n\t\tvar isInvisibleRest = elem.rest && (elem.rest.type === \"spacer\" || elem.rest.type === \"invisible\");\n\t\tif (i === 0 && !isBagpipes && this.graceSlurs && !isInvisibleRest) {\n\t\t\t// This is the overall slur that is under the grace notes.\n\t\t\tvoice.addOther(new TieElem({ anchor1: grace, anchor2: notehead, isGrace: true }));\n\t\t}\n\t}\n\n\tif (gracebeam) {\n\t\tgracebeam.calcDir();\n\t\tvoice.addBeam(gracebeam);\n\t}\n\treturn roomtaken;\n};\n\nfunction addRestToAbsElement(abselem, elem, duration, dot, isMultiVoice, stemdir, isSingleLineStaff, durlog, voiceScale) {\n\tvar c;\n\tvar restpitch = 7;\n\tvar noteHead;\n\tvar roomTaken;\n\tvar roomTakenRight;\n\n\tif (isMultiVoice) {\n\t\tif (stemdir === \"down\") restpitch = 3;\n\t\tif (stemdir === \"up\") restpitch = 11;\n\t}\n\t// There is special placement for the percussion staff. If there is one staff line, then move the rest position.\n\tif (isSingleLineStaff) {\n\t\t// The half and whole rests are attached to different lines normally, so we need to tweak their position to get them to both be attached to the same one.\n\t\tif (duration < 0.5)\n\t\t\trestpitch = 7;\n\t\telse if (duration < 1)\n\t\t\trestpitch = 7;\t// half rest\n\t\telse\n\t\t\trestpitch = 5; // whole rest\n\t}\n\tswitch (elem.rest.type) {\n\t\tcase \"whole\":\n\t\t\tc = chartable.rest[0];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tdot = 0;\n\t\t\tbreak;\n\t\tcase \"rest\":\n\t\t\tif (elem.style === \"rhythm\") // special case for rhythm: rests are a handy way to express the rhythm.\n\t\t\t\tc = chartable.rhythm[-durlog];\n\t\t\telse\n\t\t\t\tc = chartable.rest[-durlog];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tbreak;\n\t\tcase \"invisible\":\n\t\tcase \"invisible-multimeasure\":\n\t\tcase \"spacer\":\n\t\t\tc = \"\";\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tbreak;\n\t\tcase \"multimeasure\":\n\t\t\tc = chartable.rest['multi'];\n\t\t\telem.averagepitch = restpitch;\n\t\t\telem.minpitch = restpitch;\n\t\t\telem.maxpitch = restpitch;\n\t\t\tdot = 0;\n\t\t\tvar mmWidth = glyphs.getSymbolWidth(c);\n\t\t\tabselem.addHead(new RelativeElement(c, mmWidth, mmWidth * 2, 7));\n\t\t\tvar numMeasures = new RelativeElement(\"\" + elem.rest.text, mmWidth, mmWidth, 16, { type: \"multimeasure-text\" });\n\t\t\tabselem.addExtra(numMeasures);\n\t}\n\tif (elem.rest.type.indexOf(\"multimeasure\") < 0 && elem.rest.type !== \"invisible\") {\n\t\tvar ret = createNoteHead(abselem, c, { verticalPos: restpitch },\n\t\t\t{ dot: dot, scale: voiceScale });\n\t\tnoteHead = ret.notehead;\n\t\tif (noteHead) {\n\t\t\tabselem.addHead(noteHead);\n\t\t\troomTaken = ret.accidentalshiftx;\n\t\t\troomTakenRight = ret.dotshiftx;\n\t\t}\n\t}\n\treturn { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n}\n\nfunction addIfNotExist(arr, item) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (JSON.stringify(arr[i]) === JSON.stringify(item))\n\t\t\treturn;\n\t}\n\tarr.push(item);\n}\n\nAbstractEngraver.prototype.addNoteToAbcElement = function (abselem, elem, dot, stemdir, style, zeroDuration, durlog, nostem, voice) {\n\tvar dotshiftx = 0; // room taken by chords with displaced noteheads which cause dots to shift\n\tvar noteHead;\n\tvar roomTaken = 0;\n\tvar roomTakenRight = 0;\n\tvar min;\n\tvar i;\n\tvar additionalLedgers = [];\n\t// The accidentalSlot will hold a list of all the accidentals on this chord. Each element is a vertical place,\n\t// and contains a pitch, which is the last pitch that contains an accidental in that slot. The slots are numbered\n\t// from closest to the note to farther left. We only need to know the last accidental we placed because\n\t// we know that the pitches are sorted by now.\n\tvar accidentalSlot = [];\n\tvar symbolWidth = 0;\n\n\tvar dir = (elem.averagepitch >= 6) ? \"down\" : \"up\";\n\tif (stemdir) dir = stemdir;\n\n\tstyle = elem.style ? elem.style : style; // get the style of note head.\n\tif (!style || style === \"normal\") style = \"note\";\n\tvar noteSymbol;\n\tif (zeroDuration)\n\t\tnoteSymbol = chartable[style].nostem;\n\telse\n\t\tnoteSymbol = chartable[style][-durlog];\n\tif (!noteSymbol)\n\t\tconsole.log(\"noteSymbol:\", style, durlog, zeroDuration);\n\n\t// determine elements of chords which should be shifted\n\tvar p;\n\tfor (p = (dir === \"down\") ? elem.pitches.length - 2 : 1; (dir === \"down\") ? p >= 0 : p < elem.pitches.length; p = (dir === \"down\") ? p - 1 : p + 1) {\n\t\tvar prev = elem.pitches[(dir === \"down\") ? p + 1 : p - 1];\n\t\tvar curr = elem.pitches[p];\n\t\tvar delta = (dir === \"down\") ? prev.pitch - curr.pitch : curr.pitch - prev.pitch;\n\t\tif (delta <= 1 && !prev.printer_shift) {\n\t\t\tcurr.printer_shift = (delta) ? \"different\" : \"same\";\n\t\t\tif (curr.verticalPos > 11 || curr.verticalPos < 1) { // PER: add extra ledger line\n\t\t\t\tadditionalLedgers.push(curr.verticalPos - (curr.verticalPos % 2));\n\t\t\t}\n\t\t\tif (dir === \"down\") {\n\t\t\t\troomTaken = glyphs.getSymbolWidth(noteSymbol) + 2;\n\t\t\t} else {\n\t\t\t\tdotshiftx = glyphs.getSymbolWidth(noteSymbol) + 2;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar pp = elem.pitches.length;\n\tfor (p = 0; p < elem.pitches.length; p++) {\n\n\t\tif (!nostem) {\n\t\t\tvar flag;\n\t\t\tif ((dir === \"down\" && p !== 0) || (dir === \"up\" && p !== pp - 1)) { // not the stemmed elem of the chord\n\t\t\t\tflag = null;\n\t\t\t} else {\n\t\t\t\tflag = chartable[(dir === \"down\") ? \"dflags\" : \"uflags\"][-durlog];\n\t\t\t}\n\t\t}\n\t\tvar c;\n\t\tif (elem.pitches[p].style) { // There is a style for the whole group of pitches, but there could also be an override for a particular pitch.\n\t\t\tc = chartable[elem.pitches[p].style][-durlog];\n\t\t} else if (voice.isPercussion && this.percmap) {\n\t\t\tc = noteSymbol;\n\t\t\tvar percHead = this.percmap[pitchesToPerc(elem.pitches[p])];\n\t\t\tif (percHead && percHead.noteHead) {\n\t\t\t\tif (chartable[percHead.noteHead])\n\t\t\t\t\tc = chartable[percHead.noteHead][-durlog];\n\t\t\t}\n\t\t} else\n\t\t\tc = noteSymbol;\n\t\t// The highest position for the sake of placing slurs is itself if the slur is internal. It is the highest position possible if the slur is for the whole chord.\n\t\t// If the note is the only one in the chord, then any slur it has counts as if it were on the whole chord.\n\t\telem.pitches[p].highestVert = elem.pitches[p].verticalPos;\n\t\tvar isTopWhenStemIsDown = (stemdir === \"up\" || dir === \"up\") && p === 0;\n\t\tvar isBottomWhenStemIsUp = (stemdir === \"down\" || dir === \"down\") && p === pp - 1;\n\t\tif (isTopWhenStemIsDown || isBottomWhenStemIsUp) { // place to put slurs if not already on pitches\n\n\t\t\tif (elem.startSlur || pp === 1) {\n\t\t\t\telem.pitches[p].highestVert = elem.pitches[pp - 1].verticalPos;\n\t\t\t\tif (getDuration(elem) < 1 && (stemdir === \"up\" || dir === \"up\"))\n\t\t\t\t\telem.pitches[p].highestVert += 6; // If the stem is up, then compensate for the length of the stem\n\t\t\t}\n\t\t\tif (elem.startSlur) {\n\t\t\t\tif (!elem.pitches[p].startSlur) elem.pitches[p].startSlur = []; //TODO possibly redundant, provided array is not optional\n\t\t\t\tfor (i = 0; i < elem.startSlur.length; i++) {\n\t\t\t\t\taddIfNotExist(elem.pitches[p].startSlur, elem.startSlur[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (elem.endSlur) {\n\t\t\t\telem.pitches[p].highestVert = elem.pitches[pp - 1].verticalPos;\n\t\t\t\tif (getDuration(elem) < 1 && (stemdir === \"up\" || dir === \"up\"))\n\t\t\t\t\telem.pitches[p].highestVert += 6; // If the stem is up, then compensate for the length of the stem\n\t\t\t\tif (!elem.pitches[p].endSlur) elem.pitches[p].endSlur = []; //TODO possibly redundant, provided array is not optional\n\t\t\t\tfor (i = 0; i < elem.endSlur.length; i++) {\n\t\t\t\t\taddIfNotExist(elem.pitches[p].endSlur, elem.endSlur[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar hasStem = !nostem && durlog <= -1;\n\t\tvar ret = createNoteHead(abselem, c, elem.pitches[p],\n\t\t\t{ dir: dir, extrax: -roomTaken, flag: flag, dot: dot, dotshiftx: dotshiftx, scale: this.voiceScale, accidentalSlot: accidentalSlot, shouldExtendStem: !stemdir, printAccidentals: !voice.isPercussion });\n\t\tsymbolWidth = Math.max(glyphs.getSymbolWidth(c), symbolWidth);\n\t\tabselem.extraw -= ret.extraLeft;\n\t\tnoteHead = ret.notehead;\n\t\tif (noteHead) {\n\t\t\tthis.addSlursAndTies(abselem, elem.pitches[p], noteHead, voice, hasStem ? dir : null, false);\n\n\t\t\tif (elem.gracenotes && elem.gracenotes.length > 0)\n\t\t\t\tnoteHead.bottom = noteHead.bottom - 1;\t // If there is a tie to the grace notes, leave a little more room for the note to avoid collisions.\n\t\t\tabselem.addHead(noteHead);\n\t\t}\n\t\troomTaken += ret.accidentalshiftx;\n\t\troomTakenRight = Math.max(roomTakenRight, ret.dotshiftx);\n\t}\n\n\t// draw stem from the furthest note to a pitch above/below the stemmed note\n\tif (hasStem) {\n\t\tvar stemHeight = Math.round(70 * this.voiceScale) / 10;\n\t\tvar p1 = (dir === \"down\") ? elem.minpitch - stemHeight : elem.minpitch + 1 / 3;\n\t\t// PER added stemdir test to make the line meet the note.\n\t\tif (p1 > 6 && !stemdir) p1 = 6;\n\t\tvar p2 = (dir === \"down\") ? elem.maxpitch - 1 / 3 : elem.maxpitch + stemHeight;\n\t\t// PER added stemdir test to make the line meet the note.\n\t\tif (p2 < 6 && !stemdir) p2 = 6;\n\t\tvar dx = (dir === \"down\" || abselem.heads.length === 0) ? 0 : abselem.heads[0].w;\n\t\tvar width = (dir === \"down\") ? 1 : -1;\n\t\t// TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated:\n\t\tif (noteHead && noteHead.c === 'noteheads.slash.quarter') {\n\t\t\tif (dir === 'down')\n\t\t\t\tp2 -= 1;\n\t\t\telse\n\t\t\t\tp1 += 1;\n\t\t}\n\t\tabselem.addRight(new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width, bottom: p1 - 1 }));\n\t\t//var RelativeElement = function RelativeElement(c, dx, w, pitch, opt) {\n\t\tmin = Math.min(p1, p2);\n\t}\n\treturn { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight, min: min, additionalLedgers: additionalLedgers, dir: dir, symbolWidth: symbolWidth };\n};\n\nAbstractEngraver.prototype.addLyric = function (abselem, elem) {\n\tvar lyricStr = \"\";\n\telem.lyric.forEach(function (ly) {\n\t\tvar div = ly.divider === ' ' ? \"\" : ly.divider;\n\t\tlyricStr += ly.syllable + div + \"\\n\";\n\t});\n\tvar lyricDim = this.getTextSize.calc(lyricStr, 'vocalfont', \"lyric\");\n\tvar position = elem.positioning ? elem.positioning.vocalPosition : 'below';\n\tabselem.addCentered(new RelativeElement(lyricStr, 0, lyricDim.width, undefined, { type: \"lyric\", position: position, height: lyricDim.height / spacing.STEP, dim: this.getTextSize.attr('vocalfont', \"lyric\") }));\n};\n\nAbstractEngraver.prototype.createNote = function (elem, nostem, isSingleLineStaff, voice) { //stem presence: true for drawing stemless notehead\n\tvar notehead = null;\n\tvar roomtaken = 0; // room needed to the left of the note\n\tvar roomtakenright = 0; // room needed to the right of the note\n\tvar symbolWidth = 0;\n\tvar additionalLedgers = []; // PER: handle the case of [bc'], where the b doesn't have a ledger line\n\n\tvar dir;\n\n\tvar duration = getDuration(elem);\n\tvar zeroDuration = false;\n\tif (duration === 0) { zeroDuration = true; duration = 0.25; nostem = true; } //PER: zero duration will draw a quarter note head.\n\tvar durlog = Math.floor(Math.log(duration) / Math.log(2)); //TODO use getDurlog\n\tvar dot = 0;\n\n\tfor (var tot = Math.pow(2, durlog), inc = tot / 2; tot < duration; dot++, tot += inc, inc /= 2);\n\n\n\tif (elem.startTriplet) {\n\t\tthis.tripletmultiplier = elem.tripletMultiplier;\n\t}\n\n\tvar durationForSpacing = duration * this.tripletmultiplier;\n\tif (elem.rest && elem.rest.type === 'multimeasure')\n\t\tdurationForSpacing = 1;\n\tif (elem.rest && elem.rest.type === 'invisible-multimeasure')\n\t\tdurationForSpacing = this.measureLength * elem.rest.text;\n\tvar absType = elem.rest ? \"rest\" : \"note\";\n\tvar abselem = new AbsoluteElement(elem, durationForSpacing, 1, absType, this.tuneNumber, { durationClassOveride: elem.duration * this.tripletmultiplier });\n\tif (hint) abselem.setHint();\n\n\tif (elem.rest) {\n\t\tif (this.measureLength === duration && elem.rest.type !== 'invisible' && elem.rest.type !== 'spacer' && elem.rest.type.indexOf('multimeasure') < 0)\n\t\t\telem.rest.type = 'whole'; // If the rest is exactly a measure, always use a whole rest\n\t\tvar ret1 = addRestToAbsElement(abselem, elem, duration, dot, voice.voicetotal > 1, this.stemdir, isSingleLineStaff, durlog, this.voiceScale);\n\t\tnotehead = ret1.noteHead;\n\t\troomtaken = ret1.roomTaken;\n\t\troomtakenright = ret1.roomTakenRight;\n\t} else {\n\t\tvar ret2 = this.addNoteToAbcElement(abselem, elem, dot, this.stemdir, this.style, zeroDuration, durlog, nostem, voice);\n\t\tif (ret2.min !== undefined)\n\t\t\tthis.minY = Math.min(ret2.min, this.minY);\n\t\tnotehead = ret2.noteHead;\n\t\troomtaken = ret2.roomTaken;\n\t\troomtakenright = ret2.roomTakenRight;\n\t\tadditionalLedgers = ret2.additionalLedgers;\n\t\tdir = ret2.dir;\n\t\tsymbolWidth = ret2.symbolWidth;\n\t}\n\n\tif (elem.lyric !== undefined) {\n\t\tthis.addLyric(abselem, elem);\n\t}\n\n\tif (elem.gracenotes !== undefined) {\n\t\troomtaken += this.addGraceNotes(elem, voice, abselem, notehead, this.stemHeight * this.voiceScale, this.isBagpipes, roomtaken);\n\t}\n\n\tif (elem.decoration) {\n\t\tthis.decoration.createDecoration(voice, elem.decoration, abselem.top, (notehead) ? notehead.w : 0, abselem, roomtaken, dir, abselem.bottom, elem.positioning, this.hasVocals);\n\t}\n\n\tif (elem.barNumber) {\n\t\tabselem.addFixed(new RelativeElement(elem.barNumber, -10, 0, 0, { type: \"barNumber\" }));\n\t}\n\n\t// ledger lines\n\tledgerLines(abselem, elem.minpitch, elem.maxpitch, elem.rest, symbolWidth, additionalLedgers, dir, -2, 1);\n\n\tif (elem.chord !== undefined) {\n\t\tvar ret3 = addChord(this.getTextSize, abselem, elem, roomtaken, roomtakenright, symbolWidth, this.jazzchords, this.germanAlphabet);\n\t\troomtaken = ret3.roomTaken;\n\t\troomtakenright = ret3.roomTakenRight;\n\t}\n\n\tif (elem.startTriplet) {\n\t\tthis.triplet = new TripletElem(elem.startTriplet, notehead, { flatBeams: this.flatBeams }); // above is opposite from case of slurs\n\t}\n\n\tif (elem.endTriplet && this.triplet) {\n\t\tthis.triplet.setCloseAnchor(notehead);\n\t}\n\n\tif (this.triplet && !elem.startTriplet && !elem.endTriplet && !(elem.rest && elem.rest.type === \"spacer\")) {\n\t\tthis.triplet.middleNote(notehead);\n\t}\n\n\treturn abselem;\n};\n\nAbstractEngraver.prototype.addSlursAndTies = function (abselem, pitchelem, notehead, voice, dir, isGrace) {\n\tif (pitchelem.endTie) {\n\t\tif (this.ties.length > 0) {\n\t\t\t// If there are multiple open ties, find the one that applies by matching the pitch, if possible.\n\t\t\tvar found = false;\n\t\t\tfor (var j = 0; j < this.ties.length; j++) {\n\t\t\t\tif (this.ties[j].anchor1 && this.ties[j].anchor1.pitch === notehead.pitch) {\n\t\t\t\t\tthis.ties[j].setEndAnchor(notehead);\n\t\t\t\t\tvoice.setRange(this.ties[j])\n\t\t\t\t\tthis.ties.splice(j, 1);\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\tthis.ties[0].setEndAnchor(notehead);\n\t\t\t\tvoice.setRange(this.ties[0])\n\t\t\t\tthis.ties.splice(0, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar voiceNumber = voice.voicetotal < 2 ? -1 : voice.voicenumber;\n\tif (pitchelem.startTie) {\n\t\tvar tie = new TieElem({ anchor1: notehead, force: (this.stemdir === \"down\" || this.stemdir === \"up\"), stemDir: this.stemdir, isGrace: isGrace, voiceNumber: voiceNumber, style: pitchelem.startTie.style });\n\t\tif (hint) tie.setHint();\n\n\t\tthis.ties[this.ties.length] = tie;\n\t\tvoice.addOther(tie);\n\t\t// HACK-PER: For the animation, we need to know if a note is tied to the next one, so here's a flag.\n\t\t// Unfortunately, only some of the notes in the current event might be tied, but this will consider it\n\t\t// tied if any one of them is. That will work for most cases.\n\t\tabselem.startTie = true;\n\t}\n\n\tvar slur;\n\tvar slurid;\n\tif (pitchelem.endSlur) {\n\t\tfor (var i = 0; i < pitchelem.endSlur.length; i++) {\n\t\t\tslurid = pitchelem.endSlur[i];\n\t\t\tif (this.slurs[slurid]) {\n\t\t\t\tslur = this.slurs[slurid];\n\t\t\t\tslur.setEndAnchor(notehead);\n\t\t\t\tvoice.setRange(slur)\n\t\t\t\tdelete this.slurs[slurid];\n\t\t\t} else {\n\t\t\t\tslur = new TieElem({ anchor2: notehead, stemDir: this.stemdir, voiceNumber: voiceNumber });\n\t\t\t\tif (hint) slur.setHint();\n\t\t\t\tvoice.addOther(slur);\n\t\t\t}\n\t\t\tif (this.startlimitelem) {\n\t\t\t\tslur.setStartX(this.startlimitelem);\n\t\t\t}\n\t\t}\n\t} else if (!isGrace) {\n\t\tfor (var s in this.slurs) {\n\t\t\tif (this.slurs.hasOwnProperty(s)) {\n\t\t\t\tthis.slurs[s].addInternalNote(notehead);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (pitchelem.startSlur) {\n\t\tfor (i = 0; i < pitchelem.startSlur.length; i++) {\n\t\t\tslurid = pitchelem.startSlur[i].label;\n\t\t\tslur = new TieElem({ anchor1: notehead, stemDir: this.stemdir, voiceNumber: voiceNumber, style: pitchelem.startSlur[i].style });\n\t\t\tif (hint) slur.setHint();\n\t\t\tthis.slurs[slurid] = slur;\n\t\t\tvoice.addOther(slur);\n\t\t}\n\t}\n};\n\nAbstractEngraver.prototype.addMeasureNumber = function (number, abselem) {\n\tvar measureNumDim = this.getTextSize.calc(number, \"measurefont\", 'bar-number');\n\tvar dx = 0;\n\tif (abselem.isClef) // If this is a clef rather than bar line, then the number shouldn't be centered because it could overlap the left side. This is an easy way to let it be centered but move it over, too.\n\t\tdx += measureNumDim.width / 2\n\tvar vert = measureNumDim.width > 10 && abselem.abcelem.type === \"treble\" ? 13 : 11\n\tabselem.addFixed(new RelativeElement(number, dx, measureNumDim.width, vert + measureNumDim.height / spacing.STEP, { type: \"barNumber\", dim: this.getTextSize.attr(\"measurefont\", 'bar-number') }));\n};\n\nAbstractEngraver.prototype.createBarLine = function (voice, elem, isFirstStaff) {\n\t// bar_thin, bar_thin_thick, bar_thin_thin, bar_thick_thin, bar_right_repeat, bar_left_repeat, bar_double_repeat\n\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'bar', this.tuneNumber);\n\tvar anchor = null; // place to attach part lines\n\tvar dx = 0;\n\n\tif (elem.barNumber) {\n\t\tthis.addMeasureNumber(elem.barNumber, abselem);\n\t}\n\n\n\tvar firstdots = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\");\n\tvar firstthin = (elem.type !== \"bar_left_repeat\" && elem.type !== \"bar_thick_thin\" && elem.type !== \"bar_invisible\");\n\tvar thick = (elem.type === \"bar_right_repeat\" || elem.type === \"bar_dbl_repeat\" || elem.type === \"bar_left_repeat\" ||\n\t\telem.type === \"bar_thin_thick\" || elem.type === \"bar_thick_thin\");\n\tvar secondthin = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_thick_thin\" || elem.type === \"bar_thin_thin\" || elem.type === \"bar_dbl_repeat\");\n\tvar seconddots = (elem.type === \"bar_left_repeat\" || elem.type === \"bar_dbl_repeat\");\n\n\t// limit positioning of slurs\n\tif (firstdots || seconddots) {\n\t\tfor (var slur in this.slurs) {\n\t\t\tif (this.slurs.hasOwnProperty(slur)) {\n\t\t\t\tthis.slurs[slur].setEndX(abselem);\n\t\t\t}\n\t\t}\n\t\tthis.startlimitelem = abselem;\n\t}\n\n\tif (firstdots) {\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 7));\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 5));\n\t\tdx += 6; //2 hardcoded, twice;\n\t}\n\n\tif (firstthin) {\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor);\n\t}\n\n\tif (elem.type === \"bar_invisible\") {\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"none\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor);\n\t}\n\n\tif (elem.decoration) {\n\t\tthis.decoration.createDecoration(voice, elem.decoration, 12, (thick) ? 3 : 1, abselem, 0, \"down\", 2, elem.positioning, this.hasVocals);\n\t}\n\n\tif (thick) {\n\t\tdx += 4; //3 hardcoded;\n\t\tanchor = new RelativeElement(null, dx, 4, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 4 });\n\t\tabselem.addRight(anchor);\n\t\tdx += 5;\n\t}\n\n\t// if (this.partstartelem && (thick || (firstthin && secondthin))) { // means end of nth part\n\t// this.partstartelem.anchor2=anchor;\n\t// this.partstartelem = null;\n\t// }\n\n\tif (this.partstartelem && elem.endEnding) {\n\t\tthis.partstartelem.anchor2 = anchor;\n\t\tthis.partstartelem = null;\n\t}\n\n\tif (secondthin) {\n\t\tdx += 3; //3 hardcoded;\n\t\tanchor = new RelativeElement(null, dx, 1, 2, { \"type\": \"bar\", \"pitch2\": 10, linewidth: 0.6 });\n\t\tabselem.addRight(anchor); // 3 is hardcoded\n\t}\n\n\tif (seconddots) {\n\t\tdx += 3; //3 hardcoded;\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 7));\n\t\tabselem.addRight(new RelativeElement(\"dots.dot\", dx, 1, 5));\n\t} // 2 is hardcoded\n\n\tif (elem.startEnding && isFirstStaff) { // only put the first & second ending marks on the first staff\n\t\tvar textWidth = this.getTextSize.calc(elem.startEnding, \"repeatfont\", '').width;\n\t\tabselem.minspacing += textWidth + 10; // Give plenty of room for the ending number.\n\t\tthis.partstartelem = new EndingElem(elem.startEnding, anchor, null);\n\t\tvoice.addOther(this.partstartelem);\n\t}\n\n\t// Add a little space to the left of the bar line so that nothing can crowd it.\n\tabselem.extraw -= 5;\n\n\tif (elem.chord !== undefined) {\n\t\tvar ret3 = addChord(this.getTextSize, abselem, elem, 0, 0, 0, false, this.germanAlphabet);\n\t}\n\n\treturn abselem;\n\n};\n\nmodule.exports = AbstractEngraver;\n","var RelativeElement = require('./elements/relative-element');\nvar spacing = require('../helpers/spacing');\nconst translateChord = require(\"./translate-chord\");\n\nvar addChord = function (getTextSize, abselem, elem, roomTaken, roomTakenRight, noteheadWidth, jazzchords, germanAlphabet) {\n\tfor (var i = 0; i < elem.chord.length; i++) {\n\t\tvar pos = elem.chord[i].position;\n\t\tvar rel_position = elem.chord[i].rel_position;\n\t\tvar chords = elem.chord[i].name.split(\"\\n\");\n\t\tfor (var j = chords.length - 1; j >= 0; j--) { // parse these in opposite order because we place them from bottom to top.\n\t\t\tvar chord = chords[j];\n\t\t\tvar x = 0;\n\t\t\tvar y;\n\t\t\tvar font;\n\t\t\tvar klass;\n\t\t\tif (pos === \"left\" || pos === \"right\" || pos === \"below\" || pos === \"above\" || !!rel_position) {\n\t\t\t\tfont = 'annotationfont';\n\t\t\t\tklass = \"annotation\";\n\t\t\t} else {\n\t\t\t\tfont = 'gchordfont';\n\t\t\t\tklass = \"chord\";\n\t\t\t\tchord = translateChord(chord, jazzchords, germanAlphabet);\n\t\t\t}\n\t\t\tvar attr = getTextSize.attr(font, klass);\n\t\t\tvar dim = getTextSize.calc(chord, font, klass);\n\t\t\tvar chordWidth = dim.width;\n\t\t\tvar chordHeight = dim.height / spacing.STEP;\n\t\t\tswitch (pos) {\n\t\t\t\tcase \"left\":\n\t\t\t\t\troomTaken += chordWidth + 7;\n\t\t\t\t\tx = -roomTaken; // TODO-PER: This is just a guess from trial and error\n\t\t\t\t\ty = elem.averagepitch;\n\t\t\t\t\tabselem.addExtra(new RelativeElement(chord, x, chordWidth + 4, y, {\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\tdim: attr,\n\t\t\t\t\t\tposition: \"left\"\n\t\t\t\t\t}));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\troomTakenRight += 4;\n\t\t\t\t\tx = roomTakenRight;// TODO-PER: This is just a guess from trial and error\n\t\t\t\t\ty = elem.averagepitch;\n\t\t\t\t\tabselem.addRight(new RelativeElement(chord, x, chordWidth + 4, y, {\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\tdim: attr,\n\t\t\t\t\t\tposition: \"right\"\n\t\t\t\t\t}));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"below\":\n\t\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\t\tabselem.addRight(new RelativeElement(chord, 0, 0, undefined, {\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\tposition: \"below\",\n\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\tdim: attr,\n\t\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t\t}));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"above\":\n\t\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\t\tabselem.addRight(new RelativeElement(chord, 0, 0, undefined, {\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\tposition: \"above\",\n\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\tdim: attr,\n\t\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t\t}));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif (rel_position) {\n\t\t\t\t\t\tvar relPositionY = rel_position.y + 3 * spacing.STEP; // TODO-PER: this is a fudge factor to make it line up with abcm2ps\n\t\t\t\t\t\tabselem.addRight(new RelativeElement(chord, x + rel_position.x, 0, elem.minpitch + relPositionY / spacing.STEP, {\n\t\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\t\tdim: attr\n\t\t\t\t\t\t}));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is.\n\t\t\t\t\t\tvar pos2 = 'above';\n\t\t\t\t\t\tif (elem.positioning && elem.positioning.chordPosition)\n\t\t\t\t\t\t\tpos2 = elem.positioning.chordPosition;\n\n\t\t\t\t\t\tif (pos2 !== 'hidden') {\n\t\t\t\t\t\t\tabselem.addCentered(new RelativeElement(chord, noteheadWidth / 2, chordWidth, undefined, {\n\t\t\t\t\t\t\t\ttype: \"chord\",\n\t\t\t\t\t\t\t\tposition: pos2,\n\t\t\t\t\t\t\t\theight: chordHeight,\n\t\t\t\t\t\t\t\tdim: attr,\n\t\t\t\t\t\t\t\trealWidth: chordWidth\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn { roomTaken: roomTaken, roomTakenRight: roomTakenRight };\n};\n\nmodule.exports = addChord;\n","function addTextIf(rows, params, getTextSize) {\n\tif (!params.text)\n\t\treturn;\n\tif (!params.marginLeft) params.marginLeft = 0;\n\tif (!params.klass) params.klass = '';\n\tif (!params.anchor) params.anchor = 'start';\n\tif (!params.info) params.info = { startChar: -2, endChar: -2 }\n\n\tif (params.marginTop)\n\t\trows.push({ move: params.marginTop });\n\tvar attr = { left: params.marginLeft, text: params.text, font: params.font, anchor: params.anchor, startChar: params.info.startChar, endChar: params.info.endChar };\n\tif (params.absElemType)\n\t\tattr.absElemType = params.absElemType;\n\tif (!params.inGroup)\n\t\tattr.klass = params.klass;\n\tif (params.name)\n\t\tattr.name = params.name;\n\n\trows.push(attr);\n\t// If there are blank lines they won't be counted by getTextSize, so just get the height of one line and multiply\n\tvar size = getTextSize.calc(\"A\", params.font, params.klass);\n\tvar numLines = params.text.split(\"\\n\").length;\n\tif (params.text[params.text.length - 1] === '\\n')\n\t\tnumLines--; // If there is a new line at the end of the string, then an extra line will be counted.\n\tif (!params.noMove) {\n\t\tvar h = (size.height * 1.1) * numLines;\n\t\trows.push({ move: Math.round(h) });\n\t\tif (params.marginBottom)\n\t\t\trows.push({ move: params.marginBottom });\n\t}\n}\n\nmodule.exports = addTextIf;\n","var calcHeight = function (staffGroup) {\n\t// the height is calculated here in a parallel way to the drawing below in hopes that both of these functions will be modified together.\n\t// TODO-PER: also add the space between staves. (That's systemStaffSeparation, which is the minimum distance between the staff LINES.)\n\tvar height = 0;\n\tfor (var i = 0; i < staffGroup.voices.length; i++) {\n\t\tvar staff = staffGroup.voices[i].staff;\n\t\tif (!staffGroup.voices[i].duplicate) {\n\t\t\theight += staff.top;\n\t\t\t//if (staff.bottom < 0)\n\t\t\theight += -staff.bottom;\n\t\t}\n\t}\n\treturn height;\n};\n\nmodule.exports = calcHeight;\n\n","// abc_create_clef.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createClef = function (elem, tuneNumber) {\n\tvar clef;\n\tvar octave = 0;\n\telem.el_type = \"clef\";\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra clef', tuneNumber);\n\tabselem.isClef = true;\n\tswitch (elem.type) {\n\t\tcase \"treble\": clef = \"clefs.G\"; break;\n\t\tcase \"tenor\": clef = \"clefs.C\"; break;\n\t\tcase \"alto\": clef = \"clefs.C\"; break;\n\t\tcase \"bass\": clef = \"clefs.F\"; break;\n\t\tcase 'treble+8': clef = \"clefs.G\"; octave = 1; break;\n\t\tcase 'tenor+8': clef = \"clefs.C\"; octave = 1; break;\n\t\tcase 'bass+8': clef = \"clefs.F\"; octave = 1; break;\n\t\tcase 'alto+8': clef = \"clefs.C\"; octave = 1; break;\n\t\tcase 'treble-8': clef = \"clefs.G\"; octave = -1; break;\n\t\tcase 'tenor-8': clef = \"clefs.C\"; octave = -1; break;\n\t\tcase 'bass-8': clef = \"clefs.F\"; octave = -1; break;\n\t\tcase 'alto-8': clef = \"clefs.C\"; octave = -1; break;\n\t\tcase 'none': return null;\n\t\tcase 'perc': clef = \"clefs.perc\"; break;\n\t\tdefault: abselem.addFixed(new RelativeElement(\"clef=\" + elem.type, 0, 0, undefined, { type: \"debug\" }));\n\t}\n\t// if (elem.verticalPos) {\n\t// pitch = elem.verticalPos;\n\t// }\n\tvar dx = 5;\n\tif (clef) {\n\t\tvar height = glyphs.symbolHeightInPitches(clef);\n\t\tvar ofs = clefOffsets(clef);\n\t\tabselem.addRight(new RelativeElement(clef, dx, glyphs.getSymbolWidth(clef), elem.clefPos, { top: height + elem.clefPos + ofs, bottom: elem.clefPos + ofs }));\n\n\t\tif (octave !== 0) {\n\t\t\tvar scale = 2 / 3;\n\t\t\tvar adjustspacing = (glyphs.getSymbolWidth(clef) - glyphs.getSymbolWidth(\"8\") * scale) / 2;\n\t\t\tvar pitch = (octave > 0) ? abselem.top + 3 : abselem.bottom - 1;\n\t\t\tvar top = (octave > 0) ? abselem.top + 3 : abselem.bottom - 3;\n\t\t\tvar bottom = top - 2;\n\t\t\tif (elem.type === \"bass-8\") {\n\t\t\t\t// The placement for bass octave is a little different. It should hug the clef.\n\t\t\t\tpitch = 3;\n\t\t\t\tadjustspacing = 0;\n\t\t\t}\n\t\t\tabselem.addRight(new RelativeElement(\"8\", dx + adjustspacing, glyphs.getSymbolWidth(\"8\") * scale, pitch, {\n\t\t\t\tscalex: scale,\n\t\t\t\tscaley: scale,\n\t\t\t\ttop: top,\n\t\t\t\tbottom: bottom\n\t\t\t}));\n\t\t\t//abselem.top += 2;\n\t\t}\n\t}\n\treturn abselem;\n};\n\nfunction clefOffsets(clef) {\n\tswitch (clef) {\n\t\tcase \"clefs.G\": return -5;\n\t\tcase \"clefs.C\": return -4;\n\t\tcase \"clefs.F\": return -4;\n\t\tcase \"clefs.perc\": return -2;\n\t\tdefault: return 0;\n\t}\n}\n\nmodule.exports = createClef;\n","// abc_create_key_signature.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createKeySignature = function (elem, tuneNumber) {\n\telem.el_type = \"keySignature\";\n\tif (!elem.accidentals || elem.accidentals.length === 0)\n\t\treturn null;\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra key-signature', tuneNumber);\n\tabselem.isKeySig = true;\n\tvar dx = 0;\n\telem.accidentals.forEach(function (acc) {\n\t\tvar symbol;\n\t\tvar fudge = 0;\n\t\tswitch (acc.acc) {\n\t\t\tcase \"sharp\": symbol = \"accidentals.sharp\"; fudge = -3; break;\n\t\t\tcase \"natural\": symbol = \"accidentals.nat\"; break;\n\t\t\tcase \"flat\": symbol = \"accidentals.flat\"; fudge = -1.2; break;\n\t\t\tcase \"quartersharp\": symbol = \"accidentals.halfsharp\"; fudge = -2.5; break;\n\t\t\tcase \"quarterflat\": symbol = \"accidentals.halfflat\"; fudge = -1.2; break;\n\t\t\tdefault: symbol = \"accidentals.flat\";\n\t\t}\n\t\tabselem.addRight(new RelativeElement(symbol, dx, glyphs.getSymbolWidth(symbol), acc.verticalPos, { thickness: glyphs.symbolHeightInPitches(symbol), top: acc.verticalPos + glyphs.symbolHeightInPitches(symbol) + fudge, bottom: acc.verticalPos + fudge }));\n\t\tdx += glyphs.getSymbolWidth(symbol) + 2;\n\t}, this);\n\treturn abselem;\n};\n\nmodule.exports = createKeySignature;\n","var glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createNoteHead = function (abselem, c, pitchelem, options) {\n\tif (!options) options = {};\n\tvar dir = (options.dir !== undefined) ? options.dir : null;\n\tvar headx = (options.headx !== undefined) ? options.headx : 0;\n\tvar extrax = (options.extrax !== undefined) ? options.extrax : 0;\n\tvar flag = (options.flag !== undefined) ? options.flag : null;\n\tvar dot = (options.dot !== undefined) ? options.dot : 0;\n\tvar dotshiftx = (options.dotshiftx !== undefined) ? options.dotshiftx : 0;\n\tvar scale = (options.scale !== undefined) ? options.scale : 1;\n\tvar accidentalSlot = (options.accidentalSlot !== undefined) ? options.accidentalSlot : [];\n\tvar shouldExtendStem = (options.shouldExtendStem !== undefined) ? options.shouldExtendStem : false;\n\tvar printAccidentals = (options.printAccidentals !== undefined) ? options.printAccidentals : true;\n\n\t// TODO scale the dot as well\n\tvar pitch = pitchelem.verticalPos;\n\tvar notehead;\n\tvar accidentalshiftx = 0;\n\tvar newDotShiftX = 0;\n\tvar extraLeft = 0;\n\tif (c === undefined)\n\t\tabselem.addFixed(new RelativeElement(\"pitch is undefined\", 0, 0, 0, { type: \"debug\" }));\n\telse if (c === \"\") {\n\t\tnotehead = new RelativeElement(null, 0, 0, pitch);\n\t} else {\n\t\tvar shiftheadx = headx;\n\t\tif (pitchelem.printer_shift) {\n\t\t\tvar adjust = (pitchelem.printer_shift === \"same\") ? 1 : 0;\n\t\t\tshiftheadx = (dir === \"down\") ? -glyphs.getSymbolWidth(c) * scale + adjust : glyphs.getSymbolWidth(c) * scale - adjust;\n\t\t}\n\t\tvar opts = { scalex: scale, scaley: scale, thickness: glyphs.symbolHeightInPitches(c) * scale, name: pitchelem.name };\n\t\tnotehead = new RelativeElement(c, shiftheadx, glyphs.getSymbolWidth(c) * scale, pitch, opts);\n\t\tnotehead.stemDir = dir;\n\t\tif (flag) {\n\t\t\tvar pos = pitch + ((dir === \"down\") ? -7 : 7) * scale;\n\t\t\t// if this is a regular note, (not grace or tempo indicator) then the stem will have been stretched to the middle line if it is far from the center.\n\t\t\tif (shouldExtendStem) {\n\t\t\t\tif (dir === \"down\" && pos > 6)\n\t\t\t\t\tpos = 6;\n\t\t\t\tif (dir === \"up\" && pos < 6)\n\t\t\t\t\tpos = 6;\n\t\t\t}\n\t\t\t//if (scale===1 && (dir===\"down\")?(pos>6):(pos<6)) pos=6;\n\t\t\tvar xdelta = (dir === \"down\") ? headx : headx + notehead.w - 0.6;\n\t\t\tabselem.addRight(new RelativeElement(flag, xdelta, glyphs.getSymbolWidth(flag) * scale, pos, { scalex: scale, scaley: scale }));\n\t\t}\n\t\tnewDotShiftX = notehead.w + dotshiftx - 2 + 5 * dot;\n\t\tfor (; dot > 0; dot--) {\n\t\t\tvar dotadjusty = (1 - Math.abs(pitch) % 2); //PER: take abs value of the pitch. And the shift still happens on ledger lines.\n\t\t\tabselem.addRight(new RelativeElement(\"dots.dot\", notehead.w + dotshiftx - 2 + 5 * dot, glyphs.getSymbolWidth(\"dots.dot\"), pitch + dotadjusty));\n\t\t}\n\t}\n\tif (notehead)\n\t\tnotehead.highestVert = pitchelem.highestVert;\n\n\tif (printAccidentals && pitchelem.accidental) {\n\t\tvar symb;\n\t\tswitch (pitchelem.accidental) {\n\t\t\tcase \"quartersharp\":\n\t\t\t\tsymb = \"accidentals.halfsharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"dblsharp\":\n\t\t\t\tsymb = \"accidentals.dblsharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"sharp\":\n\t\t\t\tsymb = \"accidentals.sharp\";\n\t\t\t\tbreak;\n\t\t\tcase \"quarterflat\":\n\t\t\t\tsymb = \"accidentals.halfflat\";\n\t\t\t\tbreak;\n\t\t\tcase \"flat\":\n\t\t\t\tsymb = \"accidentals.flat\";\n\t\t\t\tbreak;\n\t\t\tcase \"dblflat\":\n\t\t\t\tsymb = \"accidentals.dblflat\";\n\t\t\t\tbreak;\n\t\t\tcase \"natural\":\n\t\t\t\tsymb = \"accidentals.nat\";\n\t\t}\n\t\t// if a note is at least a sixth away, it can share a slot with another accidental\n\t\tvar accSlotFound = false;\n\t\tvar accPlace = extrax;\n\t\tfor (var j = 0; j < accidentalSlot.length; j++) {\n\t\t\tif (pitch - accidentalSlot[j][0] >= 6) {\n\t\t\t\taccidentalSlot[j][0] = pitch;\n\t\t\t\taccPlace = accidentalSlot[j][1];\n\t\t\t\taccSlotFound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (accSlotFound === false) {\n\t\t\taccPlace -= (glyphs.getSymbolWidth(symb) * scale + 2);\n\t\t\taccidentalSlot.push([pitch, accPlace]);\n\t\t\taccidentalshiftx = (glyphs.getSymbolWidth(symb) * scale + 2);\n\t\t}\n\t\tvar h = glyphs.symbolHeightInPitches(symb);\n\t\tabselem.addExtra(new RelativeElement(symb, accPlace, glyphs.getSymbolWidth(symb), pitch, { scalex: scale, scaley: scale, top: pitch + h / 2, bottom: pitch - h / 2 }));\n\t\textraLeft = glyphs.getSymbolWidth(symb) / 2; // TODO-PER: We need a little extra width if there is an accidental, but I'm not sure why it isn't the full width of the accidental.\n\t}\n\n\treturn { notehead: notehead, accidentalshiftx: accidentalshiftx, dotshiftx: newDotShiftX, extraLeft: extraLeft };\n\n};\n\nmodule.exports = createNoteHead;\n","// abc_create_time_signature.js\n\nvar AbsoluteElement = require('./elements/absolute-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\n\nvar createTimeSignature = function (elem, tuneNumber) {\n\telem.el_type = \"timeSignature\";\n\tvar abselem = new AbsoluteElement(elem, 0, 10, 'staff-extra time-signature', tuneNumber);\n\tif (elem.type === \"specified\") {\n\t\tvar x = 0;\n\t\tfor (var i = 0; i < elem.value.length; i++) {\n\t\t\tif (i !== 0) {\n\t\t\t\tabselem.addRight(new RelativeElement('+', x + 1, glyphs.getSymbolWidth(\"+\"), 6, { thickness: glyphs.symbolHeightInPitches(\"+\") }));\n\t\t\t\tx += glyphs.getSymbolWidth(\"+\") + 2;\n\t\t\t}\n\t\t\tif (elem.value[i].den) {\n\t\t\t\tvar numWidth = 0;\n\t\t\t\tfor (var i2 = 0; i2 < elem.value[i].num.length; i2++)\n\t\t\t\t\tnumWidth += glyphs.getSymbolWidth(elem.value[i].num[i2]);\n\t\t\t\tvar denWidth = 0;\n\t\t\t\tfor (i2 = 0; i2 < elem.value[i].num.length; i2++)\n\t\t\t\t\tdenWidth += glyphs.getSymbolWidth(elem.value[i].den[i2]);\n\t\t\t\tvar maxWidth = Math.max(numWidth, denWidth);\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].num, x + (maxWidth - numWidth) / 2, numWidth, 8, { thickness: glyphs.symbolHeightInPitches(elem.value[i].num[0]) }));\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].den, x + (maxWidth - denWidth) / 2, denWidth, 4, { thickness: glyphs.symbolHeightInPitches(elem.value[i].den[0]) }));\n\t\t\t\tx += maxWidth\n\t\t\t} else {\n\t\t\t\tvar thisWidth = 0;\n\t\t\t\tfor (var i3 = 0; i3 < elem.value[i].num.length; i3++)\n\t\t\t\t\tthisWidth += glyphs.getSymbolWidth(elem.value[i].num[i3]);\n\t\t\t\tabselem.addRight(new RelativeElement(elem.value[i].num, x, thisWidth, 6, { thickness: glyphs.symbolHeightInPitches(elem.value[i].num[0]) }));\n\t\t\t\tx += thisWidth;\n\t\t\t}\n\t\t}\n\t} else if (elem.type === \"common_time\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.common\", 0, glyphs.getSymbolWidth(\"timesig.common\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.common\") }));\n\n\t} else if (elem.type === \"cut_time\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.cut\", 0, glyphs.getSymbolWidth(\"timesig.cut\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.cut\") }));\n\t} else if (elem.type === \"tempus_imperfectum\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.imperfectum\", 0, glyphs.getSymbolWidth(\"timesig.imperfectum\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.imperfectum\") }));\n\t} else if (elem.type === \"tempus_imperfectum_prolatio\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.imperfectum2\", 0, glyphs.getSymbolWidth(\"timesig.imperfectum2\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.imperfectum2\") }));\n\t} else if (elem.type === \"tempus_perfectum\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.perfectum\", 0, glyphs.getSymbolWidth(\"timesig.perfectum\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.perfectum\") }));\n\t} else if (elem.type === \"tempus_perfectum_prolatio\") {\n\t\tabselem.addRight(new RelativeElement(\"timesig.perfectum2\", 0, glyphs.getSymbolWidth(\"timesig.perfectum2\"), 6, { thickness: glyphs.symbolHeightInPitches(\"timesig.perfectum2\") }));\n\t} else {\n\t\tconsole.log(\"time signature:\", elem);\n\t}\n\treturn abselem;\n};\n\nmodule.exports = createTimeSignature;\n","// abc_decoration.js: Creates a data structure suitable for printing a line of abc\n\nvar DynamicDecoration = require('./elements/dynamic-decoration');\nvar CrescendoElem = require('./elements/crescendo-element');\nvar GlissandoElem = require('./elements/glissando-element');\nvar glyphs = require('./glyphs');\nvar RelativeElement = require('./elements/relative-element');\nvar TieElem = require('./elements/tie-element');\n\nvar Decoration = function Decoration() {\n\tthis.startDiminuendoX = undefined;\n\tthis.startCrescendoX = undefined;\n\tthis.minTop = 12;\t// TODO-PER: this is assuming a 5-line staff. Pass that info in.\n\tthis.minBottom = 0;\n};\n\nvar closeDecoration = function (voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch) {\n\tvar yPos;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tif (decoration[i] === \"staccato\" || decoration[i] === \"tenuto\" || decoration[i] === \"accent\") {\n\t\t\tvar symbol = \"scripts.\" + decoration[i];\n\t\t\tif (decoration[i] === \"accent\") symbol = \"scripts.sforzato\";\n\t\t\tif (yPos === undefined)\n\t\t\t\tyPos = (dir === \"down\") ? pitch + 2 : minPitch - 2;\n\t\t\telse\n\t\t\t\tyPos = (dir === \"down\") ? yPos + 2 : yPos - 2;\n\t\t\tif (decoration[i] === \"accent\") {\n\t\t\t\t// Always place the accent three pitches away, no matter whether that is a line or space.\n\t\t\t\tif (dir === \"up\") yPos--;\n\t\t\t\telse yPos++;\n\t\t\t} else {\n\t\t\t\t// don't place on a stave line. The stave lines are 2,4,6,8,10\n\t\t\t\tswitch (yPos) {\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 4:\n\t\t\t\t\tcase 6:\n\t\t\t\t\tcase 8:\n\t\t\t\t\tcase 10:\n\t\t\t\t\t\tif (dir === \"up\") yPos--;\n\t\t\t\t\t\telse yPos++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pitch > 9) yPos++; // take up some room of those that are above\n\t\t\tvar deltaX = width / 2;\n\t\t\tif (glyphs.getSymbolAlign(symbol) !== \"center\") {\n\t\t\t\tdeltaX -= (glyphs.getSymbolWidth(symbol) / 2);\n\t\t\t}\n\t\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), yPos));\n\t\t}\n\t\tif (decoration[i] === \"slide\" && abselem.heads[0]) {\n\t\t\tvar yPos2 = abselem.heads[0].pitch;\n\t\t\tyPos2 -= 2; // TODO-PER: not sure what this fudge factor is.\n\t\t\tvar blank1 = new RelativeElement(\"\", -roomtaken - 15, 0, yPos2 - 1);\n\t\t\tvar blank2 = new RelativeElement(\"\", -roomtaken - 5, 0, yPos2 + 1);\n\t\t\tabselem.addFixedX(blank1);\n\t\t\tabselem.addFixedX(blank2);\n\t\t\tvoice.addOther(new TieElem({ anchor1: blank1, anchor2: blank2, fixedY: true }));\n\t\t}\n\t}\n\tif (yPos === undefined)\n\t\tyPos = pitch;\n\n\treturn { above: yPos, below: abselem.bottom };\n};\n\nvar volumeDecoration = function (voice, decoration, abselem, positioning) {\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"p\":\n\t\t\tcase \"mp\":\n\t\t\tcase \"pp\":\n\t\t\tcase \"ppp\":\n\t\t\tcase \"pppp\":\n\t\t\tcase \"f\":\n\t\t\tcase \"ff\":\n\t\t\tcase \"fff\":\n\t\t\tcase \"ffff\":\n\t\t\tcase \"sfz\":\n\t\t\tcase \"mf\":\n\t\t\t\tvar elem = new DynamicDecoration(abselem, decoration[i], positioning);\n\t\t\t\tvoice.addOther(elem);\n\t\t}\n\t}\n};\n\nvar compoundDecoration = function (decoration, pitch, width, abselem, dir) {\n\tfunction highestPitch() {\n\t\tif (abselem.heads.length === 0)\n\t\t\treturn 10;\t// TODO-PER: I don't know if this can happen, but we'll return the top of the staff if so.\n\t\tvar pitch = abselem.heads[0].pitch;\n\t\tfor (var i = 1; i < abselem.heads.length; i++)\n\t\t\tpitch = Math.max(pitch, abselem.heads[i].pitch);\n\t\treturn pitch;\n\t}\n\tfunction lowestPitch() {\n\t\tif (abselem.heads.length === 0)\n\t\t\treturn 2;\t// TODO-PER: I don't know if this can happen, but we'll return the bottom of the staff if so.\n\t\tvar pitch = abselem.heads[0].pitch;\n\t\tfor (var i = 1; i < abselem.heads.length; i++)\n\t\t\tpitch = Math.min(pitch, abselem.heads[i].pitch);\n\t\treturn pitch;\n\t}\n\tfunction compoundDecoration(symbol, count) {\n\t\tvar placement = (dir === 'down') ? lowestPitch() + 1 : highestPitch() + 9;\n\t\tif (dir !== 'down' && count === 1)\n\t\t\tplacement--;\n\t\tvar deltaX = width / 2;\n\t\tdeltaX += (dir === 'down') ? -5 : 3;\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tplacement -= 1;\n\t\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), placement));\n\t\t}\n\t}\n\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"/\": compoundDecoration(\"flags.ugrace\", 1); break;\n\t\t\tcase \"//\": compoundDecoration(\"flags.ugrace\", 2); break;\n\t\t\tcase \"///\": compoundDecoration(\"flags.ugrace\", 3); break;\n\t\t\tcase \"////\": compoundDecoration(\"flags.ugrace\", 4); break;\n\t\t}\n\t}\n};\n\nvar stackedDecoration = function (decoration, width, abselem, yPos, positioning, minTop, minBottom) {\n\tfunction incrementPlacement(placement, height) {\n\t\tif (placement === 'above')\n\t\t\tyPos.above += height;\n\t\telse\n\t\t\tyPos.below -= height;\n\t}\n\tfunction getPlacement(placement) {\n\t\tvar y;\n\t\tif (placement === 'above') {\n\t\t\ty = yPos.above;\n\t\t\tif (y < minTop)\n\t\t\t\ty = minTop;\n\t\t} else {\n\t\t\ty = yPos.below;\n\t\t\tif (y > minBottom)\n\t\t\t\ty = minBottom;\n\t\t}\n\t\treturn y;\n\t}\n\tfunction textDecoration(text, placement, anchor) {\n\t\tvar y = getPlacement(placement);\n\t\tvar textFudge = 2;\n\t\tvar textHeight = 5;\n\t\t// TODO-PER: Get the height of the current font and use that for the thickness.\n\t\tabselem.addFixedX(new RelativeElement(text, width / 2, 0, y + textFudge, { type: \"decoration\", klass: 'ornament', thickness: 3, anchor: anchor }));\n\n\t\tincrementPlacement(placement, textHeight);\n\t}\n\tfunction symbolDecoration(symbol, placement) {\n\t\tvar deltaX = width / 2;\n\t\tif (glyphs.getSymbolAlign(symbol) !== \"center\") {\n\t\t\tdeltaX -= (glyphs.getSymbolWidth(symbol) / 2);\n\t\t}\n\t\tvar height = glyphs.symbolHeightInPitches(symbol) + 1; // adding a little padding so nothing touches.\n\t\tvar y = getPlacement(placement);\n\t\ty = (placement === 'above') ? y + height / 2 : y - height / 2;// Center the element vertically.\n\t\tabselem.addFixedX(new RelativeElement(symbol, deltaX, glyphs.getSymbolWidth(symbol), y, { klass: 'ornament', thickness: glyphs.symbolHeightInPitches(symbol) }));\n\n\t\tincrementPlacement(placement, height);\n\t}\n\n\tvar symbolList = {\n\t\t\"+\": \"scripts.stopped\",\n\t\t\"open\": \"scripts.open\",\n\t\t\"snap\": \"scripts.snap\",\n\t\t\"wedge\": \"scripts.wedge\",\n\t\t\"thumb\": \"scripts.thumb\",\n\t\t\"shortphrase\": \"scripts.shortphrase\",\n\t\t\"mediumphrase\": \"scripts.mediumphrase\",\n\t\t\"longphrase\": \"scripts.longphrase\",\n\t\t\"trill\": \"scripts.trill\",\n\t\t\"roll\": \"scripts.roll\",\n\t\t\"irishroll\": \"scripts.roll\",\n\t\t\"marcato\": \"scripts.umarcato\",\n\t\t\"dmarcato\": \"scripts.dmarcato\",\n\t\t\"umarcato\": \"scripts.umarcato\",\n\t\t\"turn\": \"scripts.turn\",\n\t\t\"uppermordent\": \"scripts.prall\",\n\t\t\"pralltriller\": \"scripts.prall\",\n\t\t\"mordent\": \"scripts.mordent\",\n\t\t\"lowermordent\": \"scripts.mordent\",\n\t\t\"downbow\": \"scripts.downbow\",\n\t\t\"upbow\": \"scripts.upbow\",\n\t\t\"fermata\": \"scripts.ufermata\",\n\t\t\"invertedfermata\": \"scripts.dfermata\",\n\t\t\"breath\": \",\",\n\t\t\"coda\": \"scripts.coda\",\n\t\t\"segno\": \"scripts.segno\"\n\t};\n\n\tvar hasOne = false;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"0\":\n\t\t\tcase \"1\":\n\t\t\tcase \"2\":\n\t\t\tcase \"3\":\n\t\t\tcase \"4\":\n\t\t\tcase \"5\":\n\t\t\tcase \"D.C.\":\n\t\t\tcase \"D.S.\":\n\t\t\t\ttextDecoration(decoration[i], positioning, 'middle');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.C.alcoda\":\n\t\t\t\ttextDecoration(\"D.C. al coda\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.C.alfine\":\n\t\t\t\ttextDecoration(\"D.C. al fine\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.S.alcoda\":\n\t\t\t\ttextDecoration(\"D.S. al coda\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"D.S.alfine\":\n\t\t\t\ttextDecoration(\"D.S. al fine\", positioning, 'end');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"fine\":\n\t\t\t\ttextDecoration(\"FINE\", positioning, 'middle');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"+\":\n\t\t\tcase \"open\":\n\t\t\tcase \"snap\":\n\t\t\tcase \"wedge\":\n\t\t\tcase \"thumb\":\n\t\t\tcase \"shortphrase\":\n\t\t\tcase \"mediumphrase\":\n\t\t\tcase \"longphrase\":\n\t\t\tcase \"trill\":\n\t\t\tcase \"roll\":\n\t\t\tcase \"irishroll\":\n\t\t\tcase \"marcato\":\n\t\t\tcase \"dmarcato\":\n\t\t\tcase \"turn\":\n\t\t\tcase \"uppermordent\":\n\t\t\tcase \"pralltriller\":\n\t\t\tcase \"mordent\":\n\t\t\tcase \"lowermordent\":\n\t\t\tcase \"downbow\":\n\t\t\tcase \"upbow\":\n\t\t\tcase \"fermata\":\n\t\t\tcase \"breath\":\n\t\t\tcase \"umarcato\":\n\t\t\tcase \"coda\":\n\t\t\tcase \"segno\":\n\t\t\t\tsymbolDecoration(symbolList[decoration[i]], positioning);\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"invertedfermata\":\n\t\t\t\tsymbolDecoration(symbolList[decoration[i]], 'below');\n\t\t\t\thasOne = true;\n\t\t\t\tbreak;\n\t\t\tcase \"mark\":\n\t\t\t\tabselem.klass = \"mark\";\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn hasOne;\n};\n\nfunction leftDecoration(decoration, abselem, roomtaken) {\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"arpeggio\":\n\t\t\t\t// The arpeggio symbol is the height of a note (that is, two Y units). This stacks as many as we need to go from the\n\t\t\t\t// top note to the bottom note. The arpeggio should also be a little taller than the stacked notes, so there is an extra\n\t\t\t\t// one drawn and it is offset by half of a note height (that is, one Y unit).\n\t\t\t\tfor (var j = abselem.abcelem.minpitch - 1; j <= abselem.abcelem.maxpitch; j += 2) {\n\t\t\t\t\tabselem.addExtra(\n\t\t\t\t\t\tnew RelativeElement(\n\t\t\t\t\t\t\t\"scripts.arpeggio\",\n\t\t\t\t\t\t\t-glyphs.getSymbolWidth(\"scripts.arpeggio\") * 2 - roomtaken,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tj + 2,\n\t\t\t\t\t\t\t{ klass: 'ornament', thickness: glyphs.symbolHeightInPitches(\"scripts.arpeggio\") }\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nDecoration.prototype.dynamicDecoration = function (voice, decoration, abselem, positioning) {\n\tvar diminuendo;\n\tvar crescendo;\n\tvar glissando;\n\tfor (var i = 0; i < decoration.length; i++) {\n\t\tswitch (decoration[i]) {\n\t\t\tcase \"diminuendo(\":\n\t\t\t\tthis.startDiminuendoX = abselem;\n\t\t\t\tdiminuendo = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"diminuendo)\":\n\t\t\t\tdiminuendo = { start: this.startDiminuendoX, stop: abselem };\n\t\t\t\tthis.startDiminuendoX = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"crescendo(\":\n\t\t\t\tthis.startCrescendoX = abselem;\n\t\t\t\tcrescendo = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"crescendo)\":\n\t\t\t\tcrescendo = { start: this.startCrescendoX, stop: abselem };\n\t\t\t\tthis.startCrescendoX = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"glissando(\":\n\t\t\t\tthis.startGlissandoX = abselem;\n\t\t\t\tglissando = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"glissando)\":\n\t\t\t\tglissando = { start: this.startGlissandoX, stop: abselem };\n\t\t\t\tthis.startGlissandoX = undefined;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif (diminuendo) {\n\t\tvoice.addOther(new CrescendoElem(diminuendo.start, diminuendo.stop, \">\", positioning));\n\t}\n\tif (crescendo) {\n\t\tvoice.addOther(new CrescendoElem(crescendo.start, crescendo.stop, \"<\", positioning));\n\t}\n\tif (glissando) {\n\t\tvoice.addOther(new GlissandoElem(glissando.start, glissando.stop));\n\t}\n};\n\nDecoration.prototype.createDecoration = function (voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, positioning, hasVocals) {\n\tif (!positioning)\n\t\tpositioning = { ornamentPosition: 'above', volumePosition: hasVocals ? 'above' : 'below', dynamicPosition: hasVocals ? 'above' : 'below' };\n\t// These decorations don't affect the placement of other decorations\n\tvolumeDecoration(voice, decoration, abselem, positioning.volumePosition);\n\tthis.dynamicDecoration(voice, decoration, abselem, positioning.dynamicPosition);\n\tcompoundDecoration(decoration, pitch, width, abselem, dir);\n\n\t// treat staccato, accent, and tenuto first (may need to shift other markers)\n\tvar yPos = closeDecoration(voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch);\n\t// yPos is an object containing 'above' and 'below'. That is the placement of the next symbol on either side.\n\n\tyPos.above = Math.max(yPos.above, this.minTop);\n\tvar hasOne = stackedDecoration(decoration, width, abselem, yPos, positioning.ornamentPosition, this.minTop, this.minBottom);\n\tif (hasOne) {\n\t\t//\t\t\tabselem.top = Math.max(yPos.above + 3, abselem.top); // TODO-PER: Not sure why we need this fudge factor.\n\t}\n\tleftDecoration(decoration, abselem, roomtaken);\n};\n\nmodule.exports = Decoration;\n","// abc_absolute_element.js: Definition of the AbsoluteElement class.\n\nvar highlight = require(\"../../interactive/highlight\");\nvar unhighlight = require(\"../../interactive/unhighlight\");\n\n// Everything that is placed in the SVG is first created as an absolute element. This is one unit of graphic information.\n// That is, it embodies a concept: a clef, a time signature, a bar line,etc. or most complexly:\n// a note with its accidental, grace note, chord symbol, trill, stem, eighth flags, etc.\n// In the largest sense, these are placed on the page at a particular place that is determined during the layout phase.\n// This object doesn't contain any of the drawing information, though. That information is contained in an array of\n// RelativeElements as the \"children\" of this class.\n// During the layout phase, the width of all the children is calculated and the X coordinate of the absolute element is set.\n//\n// So, after the AbsoluteElement is placed, then its children can be placed relative to that. There are different types of\n// relative elements that are placed with different rules:\n// 1) Fixed - these elements don't move relative to the absolute element's coordinates. These are things like the notehead,\n// any ledger lines, accidentals, etc.\n// 2) Slotted - these elements can move vertically and don't get Y coordinates until after the absolute element is placed.\n// These are things like the chord symbol, many decorations, the lyrics, etc.\n//\n// Relative elements are also classified by how they are related. This could be:\n// 1) Increases the absolute element's width to the left. This doesn't change the center point of\n// the absolute element, so adding a sharp to the note won't move it to the right. However, if the elements\n// are close together then this enforces a minimum distance.\n// 2) Has no effect on the width. Annotations and the tempo act like this. No matter how long they are the width doesn't change.\n// 3) Increases the absolute element's width to the right. This doesn't change the center point,\n// but it will increase the minimum distance.\n// 4) Sets the width on both sides. This is the note heads. They are centered on both sides of the absolute element's X coordinate.\n\n// duration - actual musical duration - different from notehead duration in triplets. refer to abcelem to get the notehead duration\n// minspacing - spacing which must be taken on top of the width defined by the duration\n// type is a meta-type for the element. It is not necessary for drawing, but it is useful to make semantic sense of the element. For instance, it can be used in the element's class name.\nvar AbsoluteElement = function AbsoluteElement(abcelem, duration, minspacing, type, tuneNumber, options) {\n\t//\tconsole.log(\"Absolute:\",abcelem, duration, minspacing, type, tuneNumber, options);\n\tif (!options)\n\t\toptions = {};\n\tthis.tuneNumber = tuneNumber;\n\tthis.abcelem = abcelem;\n\tthis.duration = duration;\n\tthis.durationClass = options.durationClassOveride ? options.durationClassOveride : this.duration;\n\tthis.minspacing = minspacing || 0;\n\tthis.x = 0;\n\tthis.children = [];\n\tthis.heads = [];\n\tthis.extra = [];\n\tthis.extraw = 0;\n\tthis.w = 0;\n\tthis.right = [];\n\tthis.invisible = false;\n\tthis.bottom = undefined;\n\tthis.top = undefined;\n\tthis.type = type;\n\n\t// The following are the dimensions of the fixed part of the element.\n\t// That is, the chord text will be a different height depending on lot of factors, but the 8th flag will always be in the same place.\n\tthis.fixed = { w: 0, t: undefined, b: undefined }; // there is no x-coord here, because that is set later.\n\n\t// these are the heights of all of the vertical elements that can't be placed until the end of the line.\n\t// the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric\n\t// the vertical order of elements that are below is: lyric, chord, volume/dynamic\n\tthis.specialY = {\n\t\ttempoHeightAbove: 0,\n\t\tpartHeightAbove: 0,\n\t\tvolumeHeightAbove: 0,\n\t\tdynamicHeightAbove: 0,\n\t\tendingHeightAbove: 0,\n\t\tchordHeightAbove: 0,\n\t\tlyricHeightAbove: 0,\n\n\t\tlyricHeightBelow: 0,\n\t\tchordHeightBelow: 0,\n\t\tvolumeHeightBelow: 0,\n\t\tdynamicHeightBelow: 0\n\t};\n};\n\nAbsoluteElement.prototype.getFixedCoords = function () {\n\treturn { x: this.x, w: this.fixed.w, t: this.fixed.t, b: this.fixed.b };\n};\n\nAbsoluteElement.prototype.addExtra = function (extra) {\n\t// used for accidentals, multi-measure rest text,\n\t// left-side decorations, gracenote heads,\n\t// left annotations, gracenote stems.\n\t// if (!(extra.c && extra.c.indexOf(\"accidentals\") >= 0) &&\n\t// \t!(extra.c && extra.c.indexOf(\"arpeggio\") >= 0) &&\n\t// \textra.type !== \"multimeasure-text\" &&\n\t// \t!(extra.c === \"noteheads.quarter\" && (extra.scalex === 0.6 || extra.scalex === 0.36)) &&\n\t// \t!(extra.type === \"stem\" && extra.linewidth === -0.6) &&\n\t// \textra.position !== \"left\"\n\t// )\n\t// \tconsole.log(\"extra\", extra);\n\n\tthis.fixed.w = Math.max(this.fixed.w, extra.dx + extra.w);\n\tif (this.fixed.t === undefined) this.fixed.t = extra.top; else this.fixed.t = Math.max(this.fixed.t, extra.top);\n\tif (this.fixed.b === undefined) this.fixed.b = extra.bottom; else this.fixed.b = Math.min(this.fixed.b, extra.bottom);\n\tif (extra.dx < this.extraw) this.extraw = extra.dx;\n\tthis.extra[this.extra.length] = extra;\n\tthis._addChild(extra);\n};\n\nAbsoluteElement.prototype.addHead = function (head) {\n\tif (head.dx < this.extraw) this.extraw = head.dx;\n\tthis.heads[this.heads.length] = head;\n\tthis.addRight(head);\n};\n\nAbsoluteElement.prototype.addRight = function (right) {\n\t// // used for clefs, note heads, bar lines, stems, key-signature accidentals, non-beamed flags, dots\n\t// if (!(right.c && right.c.indexOf(\"clefs\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"noteheads\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"flags\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"rests\") >= 0) &&\n\t// \t!(right.c && right.c.indexOf(\"dots.dot\") >= 0) &&\n\t// \tright.type !== \"stem\" &&\n\t// \tright.type !== \"bar\" &&\n\t// \tright.type !== \"none\" && // used when an invisible anchor is needed.\n\t// \t!(this.type.indexOf(\"clef\") >= -1 && right.c === \"8\") &&\n\t// \tthis.type.indexOf(\"key-signature\") === -1 &&\n\t// \tthis.type.indexOf(\"time-signature\") === -1 &&\n\t// \t!(this.abcelem && this.abcelem.rest && this.abcelem.rest.type === \"spacer\") &&\n\t// \t!(this.abcelem && this.abcelem.rest && this.abcelem.rest.type === \"invisible\") &&\n\t// \t!(right.type === \"text\" && right.position === \"relative\") &&\n\t// \t!(right.type === \"text\" && right.position === \"right\") &&\n\t// \t!(right.type === \"text\" && right.position === \"above\") &&\n\t// \t!(right.type === \"text\" && right.position === \"below\")\n\t// )\n\t// \tconsole.log(\"right\", right);\n\t// These are the elements that are the fixed part.\n\tthis.fixed.w = Math.max(this.fixed.w, right.dx + right.w);\n\tif (right.top !== undefined) {\n\t\tif (this.fixed.t === undefined) this.fixed.t = right.top; else this.fixed.t = Math.max(this.fixed.t, right.top);\n\t}\n\tif (right.bottom !== undefined) {\n\t\tif (this.fixed.b === undefined) this.fixed.b = right.bottom; else this.fixed.b = Math.min(this.fixed.b, right.bottom);\n\t}\n\t// if (isNaN(this.fixed.t) || isNaN(this.fixed.b))\n\t// \tdebugger;\n\tif (right.dx + right.w > this.w) this.w = right.dx + right.w;\n\tthis.right[this.right.length] = right;\n\tthis._addChild(right);\n};\n\nAbsoluteElement.prototype.addFixed = function (elem) {\n\t// used for elements that can't move relative to other elements after they have been placed.\n\t// used for ledger lines, bar numbers, debug msgs, clef, key sigs, time sigs\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.addFixedX = function (elem) {\n\t// used for elements that can't move horizontally relative to other elements after they have been placed.\n\t// used for parts, tempo, decorations\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.addCentered = function (elem) {\n\t// // used for chord labels, lyrics\n\t// if (!(elem.type === \"chord\" && elem.position === \"above\") &&\n\t// \t!(elem.type === \"chord\" && elem.position === \"below\") &&\n\t// \telem.type !== 'lyric'\n\t// )\n\t// \tconsole.log(\"centered\", elem);\n\tvar half = elem.w / 2;\n\tif (-half < this.extraw) this.extraw = -half;\n\tthis.extra[this.extra.length] = elem;\n\tif (elem.dx + half > this.w) this.w = elem.dx + half;\n\tthis.right[this.right.length] = elem;\n\tthis._addChild(elem);\n};\n\nAbsoluteElement.prototype.setLimit = function (member, child) {\n\tif (!child[member]) return;\n\tif (!this.specialY[member])\n\t\tthis.specialY[member] = child[member];\n\telse\n\t\tthis.specialY[member] = Math.max(this.specialY[member], child[member]);\n};\n\nAbsoluteElement.prototype._addChild = function (child) {\n\t//\tconsole.log(\"Relative:\",child);\n\tchild.parent = this;\n\tthis.children[this.children.length] = child;\n\tthis.pushTop(child.top);\n\tthis.pushBottom(child.bottom);\n\tthis.setLimit('tempoHeightAbove', child);\n\tthis.setLimit('partHeightAbove', child);\n\tthis.setLimit('volumeHeightAbove', child);\n\tthis.setLimit('dynamicHeightAbove', child);\n\tthis.setLimit('endingHeightAbove', child);\n\tthis.setLimit('chordHeightAbove', child);\n\tthis.setLimit('lyricHeightAbove', child);\n\tthis.setLimit('lyricHeightBelow', child);\n\tthis.setLimit('chordHeightBelow', child);\n\tthis.setLimit('volumeHeightBelow', child);\n\tthis.setLimit('dynamicHeightBelow', child);\n};\n\nAbsoluteElement.prototype.pushTop = function (top) {\n\tif (top !== undefined) {\n\t\tif (this.top === undefined)\n\t\t\tthis.top = top;\n\t\telse\n\t\t\tthis.top = Math.max(top, this.top);\n\t}\n};\n\nAbsoluteElement.prototype.pushBottom = function (bottom) {\n\tif (bottom !== undefined) {\n\t\tif (this.bottom === undefined)\n\t\t\tthis.bottom = bottom;\n\t\telse\n\t\t\tthis.bottom = Math.min(bottom, this.bottom);\n\t}\n};\n\nAbsoluteElement.prototype.setX = function (x) {\n\tthis.x = x;\n\tfor (var i = 0; i < this.children.length; i++)\n\t\tthis.children[i].setX(x);\n};\n\nAbsoluteElement.prototype.center = function (before, after) {\n\t// Used to center whole rests\n\tvar midpoint = (after.x - before.x) / 2 + before.x;\n\tthis.x = midpoint - this.w / 2;\n\tfor (var k = 0; k < this.children.length; k++)\n\t\tthis.children[k].setX(this.x);\n};\n\nAbsoluteElement.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nAbsoluteElement.prototype.highlight = function (klass, color) {\n\thighlight.bind(this)(klass, color);\n};\n\nAbsoluteElement.prototype.unhighlight = function (klass, color) {\n\tunhighlight.bind(this)(klass, color);\n};\n\nmodule.exports = AbsoluteElement;\n","// abc_beam_element.js: Definition of the BeamElem class.\n\n// Most elements on the page are related to a particular absolute element -- notes, rests, bars, etc. Beams, however, span multiple elements.\n// This means that beams can't be laid out until the absolute elements are placed. There is the further complication that the stems for beamed\n// notes can't be laid out until the beams are because we don't know how long they will be until we know the slope of the beam and the horizontal\n// spacing of the absolute elements.\n//\n// So, when a beam is detected, a BeamElem is created, then all notes belonging to that beam are added to it. These notes are not given stems at that time.\n// Then, after the horizontal layout is complete, all of the BeamElem are iterated to set the beam position, then all of the notes that are beamed are given\n// stems. After that, we are ready for the drawing step.\n\n// There are three phases: the setup phase, when new elements are being discovered, the layout phase, when everything is calculated, and the drawing phase,\n// when the object is not changed, but is used to put the elements on the page.\n\n//\n// Setup phase\n//\nvar BeamElem = function BeamElem(stemHeight, type, flat, firstElement) {\n\t// type is \"grace\", \"up\", \"down\", or undefined. flat is used to force flat beams, as it commonly found in the grace notes of bagpipe music.\n\tthis.type = \"BeamElem\";\n\tthis.isflat = !!flat;\n\tthis.isgrace = !!(type && type === \"grace\");\n\tthis.forceup = !!(this.isgrace || (type && type === \"up\"));\n\tthis.forcedown = !!(type && type === \"down\");\n\tthis.elems = []; // all the AbsoluteElements that this beam touches. It may include embedded rests.\n\tthis.total = 0;\n\tthis.average = 6; // use middle line as start for average.\n\tthis.allrests = true;\n\tthis.stemHeight = stemHeight;\n\tthis.beams = []; // During the layout phase, this will become a list of the beams that need to be drawn.\n\tif (firstElement && firstElement.duration) {\n\t\tthis.duration = firstElement.duration;\n\t\tif (firstElement.startTriplet) {\n\t\t\tthis.duration *= firstElement.tripletMultiplier;\n\t\t}\n\t\tthis.duration = Math.round(this.duration * 1000) / 1000;\n\t} else\n\t\tthis.duration = 0;\n};\n\nBeamElem.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nBeamElem.prototype.runningDirection = function (abcelem) {\n\tvar pitch = abcelem.averagepitch;\n\tif (pitch === undefined) return; // don't include elements like spacers in beams\n\tthis.total = Math.round(this.total + pitch);\n\tif (!this.count)\n\t\tthis.count = 0;\n\tthis.count++\n};\n\nBeamElem.prototype.add = function (abselem) {\n\tvar pitch = abselem.abcelem.averagepitch;\n\tif (pitch === undefined) return; // don't include elements like spacers in beams\n\tif (!abselem.abcelem.rest)\n\t\tthis.allrests = false;\n\tabselem.beam = this;\n\tthis.elems.push(abselem);\n\tthis.total = Math.round(this.total + pitch);\n\tif (this.min === undefined || abselem.abcelem.minpitch < this.min) {\n\t\tthis.min = abselem.abcelem.minpitch;\n\t}\n\tif (this.max === undefined || abselem.abcelem.maxpitch > this.max) {\n\t\tthis.max = abselem.abcelem.maxpitch;\n\t}\n};\n\nBeamElem.prototype.addBeam = function (beam) {\n\tthis.beams.push(beam);\n};\n\nBeamElem.prototype.setStemDirection = function () {\n\t// Have to figure this out before the notes are placed because placing the notes also places the decorations.\n\tthis.average = calcAverage(this.total, this.count);\n\tif (this.forceup) {\n\t\tthis.stemsUp = true;\n\t} else if (this.forcedown) {\n\t\tthis.stemsUp = false;\n\t} else {\n\t\tvar middleLine = 6;\t// hardcoded 6 is B\n\t\tthis.stemsUp = this.average < middleLine; // true is up, false is down;\n\t}\n\tdelete this.count;\n\tthis.total = 0;\n};\n\nBeamElem.prototype.calcDir = function () {\n\tthis.average = calcAverage(this.total, this.elems.length);\n\tif (this.forceup) {\n\t\tthis.stemsUp = true;\n\t} else if (this.forcedown) {\n\t\tthis.stemsUp = false;\n\t} else {\n\t\tvar middleLine = 6;\t// hardcoded 6 is B\n\t\tthis.stemsUp = this.average < middleLine; // true is up, false is down;\n\t}\n\tvar dir = this.stemsUp ? 'up' : 'down';\n\tfor (var i = 0; i < this.elems.length; i++) {\n\t\tfor (var j = 0; j < this.elems[i].heads.length; j++) {\n\t\t\tthis.elems[i].heads[j].stemDir = dir;\n\t\t}\n\t}\n};\n\nfunction calcAverage(total, numElements) {\n\tif (!numElements)\n\t\treturn 0;\n\treturn total / numElements;\n}\n\nmodule.exports = BeamElem;\n","const addTextIf = require(\"../add-text-if\");\n\nfunction BottomText(metaText, width, isPrint, paddingLeft, spacing, getTextSize) {\n\tthis.rows = [];\n\tif (metaText.unalignedWords && metaText.unalignedWords.length > 0)\n\t\tthis.unalignedWords(metaText.unalignedWords, paddingLeft, spacing, getTextSize);\n\tthis.extraText(metaText, paddingLeft, spacing, getTextSize);\n\tif (metaText.footer && isPrint)\n\t\tthis.footer(metaText.footer, width, paddingLeft, getTextSize);\n}\n\nBottomText.prototype.unalignedWords = function (unalignedWords, paddingLeft, spacing, getTextSize) {\n\tvar klass = 'meta-bottom unaligned-words';\n\tvar defFont = 'wordsfont';\n\tthis.rows.push({ startGroup: \"unalignedWords\", klass: 'abcjs-meta-bottom abcjs-unaligned-words', name: \"words\" });\n\tvar space = getTextSize.calc(\"i\", defFont, klass);\n\n\tthis.rows.push({ move: spacing.words });\n\n\tfor (var j = 0; j < unalignedWords.length; j++) {\n\t\tif (unalignedWords[j] === '')\n\t\t\tthis.rows.push({ move: space.height });\n\t\telse if (typeof unalignedWords[j] === 'string') {\n\t\t\taddTextIf(this.rows, { marginLeft: paddingLeft, text: unalignedWords[j], font: defFont, klass: klass, inGroup: true, name: \"words\" }, getTextSize);\n\t\t} else {\n\t\t\tvar largestY = 0;\n\t\t\tvar offsetX = 0;\n\t\t\tfor (var k = 0; k < unalignedWords[j].length; k++) {\n\t\t\t\tvar thisWord = unalignedWords[j][k];\n\t\t\t\tvar font = (thisWord.font) ? thisWord.font : defFont;\n\t\t\t\tthis.rows.push({\n\t\t\t\t\tleft: paddingLeft + offsetX,\n\t\t\t\t\ttext: thisWord.text,\n\t\t\t\t\tfont: font,\n\t\t\t\t\tanchor: 'start'\n\t\t\t\t});\n\t\t\t\tvar size = getTextSize.calc(thisWord.text, defFont, klass);\n\t\t\t\tlargestY = Math.max(largestY, size.height);\n\t\t\t\toffsetX += size.width;\n\t\t\t\t// If the phrase ends in a space, then that is not counted in the width, so we need to add that in ourselves.\n\t\t\t\tif (thisWord.text[thisWord.text.length - 1] === ' ') {\n\t\t\t\t\toffsetX += space.width;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.rows.push({ move: largestY });\n\t\t}\n\t}\n\tthis.rows.push({ move: space.height * 2 });\n\tthis.rows.push({ endGroup: \"unalignedWords\", absElemType: \"unalignedWords\", startChar: -1, endChar: -1, name: \"unalignedWords\" });\n}\n\nBottomText.prototype.extraText = function (metaText, marginLeft, spacing, getTextSize) {\n\tvar extraText = \"\";\n\tif (metaText.book) extraText += \"Book: \" + metaText.book + \"\\n\";\n\tif (metaText.source) extraText += \"Source: \" + metaText.source + \"\\n\";\n\tif (metaText.discography) extraText += \"Discography: \" + metaText.discography + \"\\n\";\n\tif (metaText.notes) extraText += \"Notes: \" + metaText.notes + \"\\n\";\n\tif (metaText.transcription) extraText += \"Transcription: \" + metaText.transcription + \"\\n\";\n\tif (metaText.history) extraText += \"History: \" + metaText.history + \"\\n\";\n\tif (metaText['abc-copyright']) extraText += \"Copyright: \" + metaText['abc-copyright'] + \"\\n\";\n\tif (metaText['abc-creator']) extraText += \"Creator: \" + metaText['abc-creator'] + \"\\n\";\n\tif (metaText['abc-edited-by']) extraText += \"Edited By: \" + metaText['abc-edited-by'] + \"\\n\";\n\tif (extraText.length > 0) {\n\t\taddTextIf(this.rows, { marginLeft: marginLeft, text: extraText, font: 'historyfont', klass: 'meta-bottom extra-text', marginTop: spacing.info, absElemType: \"extraText\", name: \"description\" }, getTextSize);\n\t}\n}\n\nBottomText.prototype.footer = function (footer, width, paddingLeft, getTextSize) {\n\tvar klass = 'header meta-bottom';\n\tvar font = \"footerfont\";\n\tthis.rows.push({ startGroup: \"footer\", klass: klass });\n\t// Note: whether there is a footer or not doesn't change any other positioning, so this doesn't change the Y-coordinate.\n\taddTextIf(this.rows, { marginLeft: paddingLeft, text: footer.left, font: font, klass: klass, name: \"footer\" }, getTextSize);\n\taddTextIf(this.rows, { marginLeft: paddingLeft + width / 2, text: footer.center, font: font, klass: klass, anchor: 'middle', name: \"footer\" }, getTextSize);\n\taddTextIf(this.rows, { marginLeft: paddingLeft + width, text: footer.right, font: font, klass: klass, anchor: 'end', name: \"footer\" }, getTextSize);\n}\n\nmodule.exports = BottomText;\n","// abc_brace_element.js: Definition of the BraceElement class.\n\nvar BraceElem = function BraceElem(voice, type) {\n\tthis.startVoice = voice;\n\tthis.type = type;\n};\n\nBraceElem.prototype.setBottomStaff = function (voice) {\n\tthis.endVoice = voice;\n\t// If only the start brace has a name then the name belongs to the brace instead of the staff.\n\tif (this.startVoice.header && !this.endVoice.header) {\n\t\tthis.header = this.startVoice.header;\n\t\tdelete this.startVoice.header;\n\t}\n};\n\nBraceElem.prototype.continuing = function (voice) {\n\t// If the final staff isn't present, then use the last one we saw.\n\tthis.lastContinuedVoice = voice;\n};\n\nBraceElem.prototype.getWidth = function () {\n\treturn 10; // TODO-PER: right now the drawing function doesn't vary the width at all. If it does in the future then this will change.\n};\n\nBraceElem.prototype.isStartVoice = function (voice) {\n\tif (this.startVoice && this.startVoice.staff && this.startVoice.staff.voices.length > 0 && this.startVoice.staff.voices[0] === voice)\n\t\treturn true;\n\treturn false;\n};\n\nmodule.exports = BraceElem;\n","// abc_crescendo_element.js: Definition of the CrescendoElem class.\n\nvar CrescendoElem = function CrescendoElem(anchor1, anchor2, dir, positioning) {\n\tthis.type = \"CrescendoElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n\tthis.dir = dir; // either \"<\" or \">\"\n\tif (positioning === 'above')\n\t\tthis.dynamicHeightAbove = 6;\n\telse\n\t\tthis.dynamicHeightBelow = 6;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = CrescendoElem;\n","// abc_dynamic_decoration.js: Definition of the DynamicDecoration class.\n\nvar DynamicDecoration = function DynamicDecoration(anchor, dec, position) {\n\tthis.type = \"DynamicDecoration\";\n\tthis.anchor = anchor;\n\tthis.dec = dec;\n\tif (position === 'below')\n\t\tthis.volumeHeightBelow = 6;\n\telse\n\t\tthis.volumeHeightAbove = 6;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = DynamicDecoration;\n","// abc_ending_element.js: Definition of the EndingElement class.\n\nvar EndingElem = function EndingElem(text, anchor1, anchor2) {\n\tthis.type = \"EndingElem\";\n\tthis.text = text; // text to be displayed top left\n\tthis.anchor1 = anchor1; // must have a .x property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n\tthis.endingHeightAbove = 5;\n\tthis.pitch = undefined; // This will be set later\n};\n\nmodule.exports = EndingElem;\n","function FreeText(info, vskip, getFontAndAttr, paddingLeft, width, getTextSize) {\n\tvar text = info.text;\n\tthis.rows = [];\n\tvar size;\n\tif (vskip)\n\t\tthis.rows.push({ move: vskip });\n\tvar hash = getFontAndAttr.calc('textfont', 'defined-text');\n\tif (text === \"\") {\t// we do want to print out blank lines if they have been specified.\n\t\tthis.rows.push({ move: hash.attr['font-size'] * 2 }); // move the distance of the line, plus the distance of the margin, which is also one line.\n\t} else if (typeof text === 'string') {\n\t\tthis.rows.push({ move: hash.attr['font-size'] / 2 }); // TODO-PER: move down some - the y location should be the top of the text, but we output text specifying the center line.\n\t\tthis.rows.push({ left: paddingLeft, text: text, font: 'textfont', klass: 'defined-text', anchor: \"start\", startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\tsize = getTextSize.calc(text, 'textfont', 'defined-text');\n\t\tthis.rows.push({ move: size.height });\n\t} else if (text) {\n\t\tvar maxHeight = 0;\n\t\tvar leftSide = paddingLeft;\n\t\tvar currentFont = 'textfont';\n\t\tfor (var i = 0; i < text.length; i++) {\n\t\t\tif (text[i].font) {\n\t\t\t\tcurrentFont = text[i].font;\n\t\t\t} else\n\t\t\t\tcurrentFont = 'textfont';\n\t\t\tthis.rows.push({ left: leftSide, text: text[i].text, font: currentFont, klass: 'defined-text', anchor: 'start', startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\t\tsize = getTextSize.calc(text[i].text, getFontAndAttr.calc(currentFont, 'defined-text').font, 'defined-text');\n\t\t\tleftSide += size.width + size.height / 2; // add a little padding to the right side. The height of the font is probably a close enough approximation.\n\t\t\tmaxHeight = Math.max(maxHeight, size.height)\n\t\t}\n\t\tthis.rows.push({ move: maxHeight });\n\t} else {\n\t\t// The structure is wrong here: it requires an array to do centering, but it shouldn't have.\n\t\tif (info.length === 1) {\n\t\t\tvar x = width / 2;\n\t\t\tthis.rows.push({ left: x, text: info[0].text, font: 'textfont', klass: 'defined-text', anchor: 'middle', startChar: info.startChar, endChar: info.endChar, absElemType: \"freeText\", name: \"free-text\" });\n\t\t\tsize = getTextSize.calc(info[0].text, 'textfont', 'defined-text');\n\t\t\tthis.rows.push({ move: size.height });\n\t\t}\n\t}\n}\n\nmodule.exports = FreeText;\n","var GlissandoElem = function GlissandoElem(anchor1, anchor2) {\n\tthis.type = \"GlissandoElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line)\n};\n\nmodule.exports = GlissandoElem;\n","// abc_relative_element.js: Definition of the RelativeElement class.\n\nvar RelativeElement = function RelativeElement(c, dx, w, pitch, opt) {\n\topt = opt || {};\n\tthis.x = 0;\n\tthis.c = c; // character or path or string\n\tthis.dx = dx; // relative x position\n\tthis.w = w; // minimum width taken up by this element (can include gratuitous space)\n\tthis.pitch = pitch; // relative y position by pitch\n\tthis.scalex = opt.scalex || 1; // should the character/path be scaled?\n\tthis.scaley = opt.scaley || 1; // should the character/path be scaled?\n\tthis.type = opt.type || \"symbol\"; // cheap types.\n\tthis.pitch2 = opt.pitch2;\n\tthis.linewidth = opt.linewidth;\n\tthis.klass = opt.klass;\n\tthis.anchor = opt.anchor ? opt.anchor : 'middle'\n\tthis.top = pitch;\n\tif (this.pitch2 !== undefined && this.pitch2 > this.top) this.top = this.pitch2;\n\tthis.bottom = pitch;\n\tif (this.pitch2 !== undefined && this.pitch2 < this.bottom) this.bottom = this.pitch2;\n\tif (opt.thickness) {\n\t\tthis.top += opt.thickness / 2;\n\t\tthis.bottom -= opt.thickness / 2;\n\t}\n\tif (opt.stemHeight) {\n\t\tif (opt.stemHeight > 0)\n\t\t\tthis.top += opt.stemHeight;\n\t\telse\n\t\t\tthis.bottom += opt.stemHeight;\n\t}\n\tif (opt.dim)\n\t\tthis.dim = opt.dim;\n\tif (opt.position)\n\t\tthis.position = opt.position;\n\tthis.height = opt.height ? opt.height : 4; // The +1 is to give a little bit of padding.\n\tif (opt.top)\n\t\tthis.top = opt.top;\n\tif (opt.bottom)\n\t\tthis.bottom = opt.bottom;\n\tif (opt.name)\n\t\tthis.name = opt.name;\n\telse if (this.c)\n\t\tthis.name = this.c;\n\telse\n\t\tthis.name = this.type;\n\tif (opt.realWidth)\n\t\tthis.realWidth = opt.realWidth;\n\telse\n\t\tthis.realWidth = this.w;\n\tthis.centerVertically = false;\n\tswitch (this.type) {\n\t\tcase \"debug\":\n\t\t\tthis.chordHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\tthis.lyricHeightBelow = this.height;\n\t\t\telse\n\t\t\t\tthis.lyricHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"chord\":\n\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\tthis.chordHeightBelow = this.height;\n\t\t\telse\n\t\t\t\tthis.chordHeightAbove = this.height;\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\t\tif (this.pitch === undefined) {\n\t\t\t\tif (opt.position && opt.position === 'below')\n\t\t\t\t\tthis.chordHeightBelow = this.height;\n\t\t\t\telse\n\t\t\t\t\tthis.chordHeightAbove = this.height;\n\t\t\t} else\n\t\t\t\tthis.centerVertically = true;\n\t\t\tbreak;\n\t\tcase \"part\": this.partHeightAbove = this.height; break;\n\t}\n};\n\nRelativeElement.prototype.getChordDim = function () {\n\tif (this.type === \"debug\")\n\t\treturn null;\n\tif (!this.chordHeightAbove && !this.chordHeightBelow)\n\t\treturn null;\n\t// Chords are centered, annotations are left justified.\n\t// NOTE: the font reports extra space to the left and right anyway, so there is a built in margin.\n\t// We add a little margin so that items can't touch - we use half the font size as the margin, so that is 1/4 on each side.\n\t// if there is only one character that we're printing, use half of that margin.\n\t// var margin = this.dim.font.size/4;\n\t// if (this.c.length === 1)\n\t// \tmargin = margin / 2;\n\tvar margin = 0;\n\n\tvar offset = this.type === \"chord\" ? this.realWidth / 2 : 0;\n\tvar left = this.x - offset - margin;\n\tvar right = left + this.realWidth + margin;\n\treturn { left: left, right: right };\n};\n\nRelativeElement.prototype.invertLane = function (total) {\n\tif (this.lane === undefined)\n\t\tthis.lane = 0;\n\tthis.lane = total - this.lane - 1;\n};\n\nRelativeElement.prototype.putChordInLane = function (i) {\n\tthis.lane = i;\n\t// Add some extra space to account for the character's descenders.\n\tif (this.chordHeightAbove)\n\t\tthis.chordHeightAbove = (this.height * 1.25) * this.lane;\n\telse\n\t\tthis.chordHeightBelow = (this.height * 1.25) * this.lane;\n};\n\nRelativeElement.prototype.getLane = function () {\n\tif (this.lane === undefined)\n\t\treturn 0;\n\treturn this.lane;\n};\n\nRelativeElement.prototype.setX = function (x) {\n\tthis.x = x + this.dx;\n};\n\nmodule.exports = RelativeElement;\n","function Separator(spaceAbove, lineLength, spaceBelow) {\n\tthis.rows = [];\n\tif (spaceAbove)\n\t\tthis.rows.push({ move: spaceAbove });\n\tthis.rows.push({ separator: lineLength, absElemType: \"separator\" });\n\tif (spaceBelow)\n\t\tthis.rows.push({ move: spaceBelow });\n}\n\nmodule.exports = Separator;\n","// abc_staff_group_element.js: Definition of the StaffGroupElement class.\n\n// StaffGroupElement contains all the elements that go together to make one line of music.\n// That might be multiple staves that are tied together, and it might be multiple voices on one staff.\n//\n// Methods:\n// constructor: some basic initialization\n// addVoice(): Called once for each voice. May add a new staff if needed.\n// finished(): Called only internally by layout()\n// layout(): This does all the layout. It sets the following: spacingunits, startx, minspace, w, and the x-coordinate of each element in each voice.\n// draw(): Calls the underlying methods on the voice objects to do the drawing. Sets y and height.\n//\n// Members:\n// staffs: an array of all the staves in this group. Each staff contains the following elements:\n// { top, bottom, highest, lowest, y }\n// voices: array of VoiceElement objects. This is mostly passed in, but the VoiceElement objects are modified here.\n//\n// spacingunits: number of relative x-units in the line. Used by the calling function to pass back in as the \"spacing\" input parameter.\n// TODO-PER: This should actually be passed back as a return value.\n// minspace: smallest space between two notes. Used by the calling function to pass back in as the \"spacing\" input parameter.\n// TODO-PER: This should actually be passed back as a return value.\n// startx: The left edge, taking the margin and the optional voice name. Used by the draw() method.\n// w: The width of the line. Used by calling function to pass back in as the \"spacing\" input parameter, and the draw() method.\n// TODO-PER: This should actually be passed back as a return value. (TODO-PER: in pixels or spacing units?)\n// y: The top of the staff group, in pixels. This is set in the draw method.\n// TODO-PER: Where is that used? It looks like it might not be needed.\n// height: Set in the draw() method to the height actually used. Used by the calling function to know where to start the next staff group.\n// TODO-PER: This should actually be set in the layout method and passed back as a return value.\nvar calcHeight = require('../calc-height');\n\nvar StaffGroupElement = function (getTextSize) {\n\tthis.getTextSize = getTextSize;\n\tthis.voices = [];\n\tthis.staffs = [];\n\tthis.brace = undefined; //tony\n\tthis.bracket = undefined;\n};\n\nStaffGroupElement.prototype.setLimit = function (member, voice) {\n\tif (!voice.specialY[member]) return;\n\tif (!voice.staff.specialY[member])\n\t\tvoice.staff.specialY[member] = voice.specialY[member];\n\telse\n\t\tvoice.staff.specialY[member] = Math.max(voice.staff.specialY[member], voice.specialY[member]);\n};\n\nStaffGroupElement.prototype.addVoice = function (voice, staffnumber, stafflines) {\n\tvar voiceNum = this.voices.length;\n\tthis.voices[voiceNum] = voice;\n\tif (this.staffs[staffnumber])\n\t\tthis.staffs[staffnumber].voices.push(voiceNum);\n\telse {\n\t\t// TODO-PER: how does the min/max change when stafflines is not 5?\n\t\tthis.staffs[this.staffs.length] = {\n\t\t\ttop: 10,\n\t\t\tbottom: 2,\n\t\t\tlines: stafflines,\n\t\t\tvoices: [voiceNum],\n\t\t\tspecialY: {\n\t\t\t\ttempoHeightAbove: 0,\n\t\t\t\tpartHeightAbove: 0,\n\t\t\t\tvolumeHeightAbove: 0,\n\t\t\t\tdynamicHeightAbove: 0,\n\t\t\t\tendingHeightAbove: 0,\n\t\t\t\tchordHeightAbove: 0,\n\t\t\t\tlyricHeightAbove: 0,\n\n\t\t\t\tlyricHeightBelow: 0,\n\t\t\t\tchordHeightBelow: 0,\n\t\t\t\tvolumeHeightBelow: 0,\n\t\t\t\tdynamicHeightBelow: 0\n\t\t\t}\n\t\t};\n\t}\n\tvoice.staff = this.staffs[staffnumber];\n};\n\nStaffGroupElement.prototype.setHeight = function () {\n\tthis.height = calcHeight(this);\n};\n\nStaffGroupElement.prototype.setWidth = function (width) {\n\tthis.w = width;\n\tfor (var i = 0; i < this.voices.length; i++) {\n\t\tthis.voices[i].setWidth(width);\n\t}\n};\n\nStaffGroupElement.prototype.setStaffLimits = function (voice) {\n\tvoice.staff.top = Math.max(voice.staff.top, voice.top);\n\tvoice.staff.bottom = Math.min(voice.staff.bottom, voice.bottom);\n\tthis.setLimit('tempoHeightAbove', voice);\n\tthis.setLimit('partHeightAbove', voice);\n\tthis.setLimit('volumeHeightAbove', voice);\n\tthis.setLimit('dynamicHeightAbove', voice);\n\tthis.setLimit('endingHeightAbove', voice);\n\tthis.setLimit('chordHeightAbove', voice);\n\tthis.setLimit('lyricHeightAbove', voice);\n\tthis.setLimit('lyricHeightBelow', voice);\n\tthis.setLimit('chordHeightBelow', voice);\n\tthis.setLimit('volumeHeightBelow', voice);\n\tthis.setLimit('dynamicHeightBelow', voice);\n};\n\nmodule.exports = StaffGroupElement;\n","function Subtitle(spaceAbove, formatting, info, center, paddingLeft, getTextSize) {\n\tthis.rows = [];\n\tif (spaceAbove)\n\t\tthis.rows.push({ move: spaceAbove });\n\tvar tAnchor = formatting.titleleft ? 'start' : 'middle';\n\tvar tLeft = formatting.titleleft ? paddingLeft : center;\n\tthis.rows.push({ left: tLeft, text: info.text, font: 'subtitlefont', klass: 'text subtitle', anchor: tAnchor, startChar: info.startChar, endChar: info.endChar, absElemType: \"subtitle\", name: \"subtitle\" });\n\tvar size = getTextSize.calc(info.text, 'subtitlefont', 'text subtitle');\n\tthis.rows.push({ move: size.height });\n}\n\nmodule.exports = Subtitle;\n","// abc_tempo_element.js: Definition of the TempoElement class.\n\nvar AbsoluteElement = require('./absolute-element');\nvar RelativeElement = require('./relative-element');\n\nvar TempoElement = function TempoElement(tempo, tuneNumber, createNoteHead) {\n\tthis.type = \"TempoElement\";\n\tthis.tempo = tempo;\n\tthis.tempo.type = \"tempo\"; /// TODO-PER: this should be set earlier, in the parser, probably.\n\tthis.tuneNumber = tuneNumber;\n\t// TODO: can these two properties be merged?\n\tthis.totalHeightInPitches = 6;\n\tthis.tempoHeightAbove = this.totalHeightInPitches;\n\tthis.pitch = undefined; // This will be set later\n\tif (this.tempo.duration && !this.tempo.suppressBpm) {\n\t\tthis.note = this.createNote(createNoteHead, tempo, tuneNumber);\n\t}\n};\n\nTempoElement.prototype.setX = function (x) {\n\tthis.x = x;\n};\n\nTempoElement.prototype.createNote = function (createNoteHead, tempo, tuneNumber) {\n\tvar temposcale = 0.75;\n\tvar duration = tempo.duration[0]; // TODO when multiple durations\n\tvar absElem = new AbsoluteElement(tempo, duration, 1, 'tempo', tuneNumber);\n\t// There aren't an infinite number of note values, but we are passed a float, so just in case something is off upstream,\n\t// merge all of the in between points.\n\tvar dot;\n\tvar flag;\n\tvar note;\n\tif (duration <= 1 / 32) { note = \"noteheads.quarter\"; flag = \"flags.u32nd\"; dot = 0; }\n\telse if (duration <= 1 / 16) { note = \"noteheads.quarter\"; flag = \"flags.u16th\"; dot = 0; }\n\telse if (duration <= 3 / 32) { note = \"noteheads.quarter\"; flag = \"flags.u16nd\"; dot = 1; }\n\telse if (duration <= 1 / 8) { note = \"noteheads.quarter\"; flag = \"flags.u8th\"; dot = 0; }\n\telse if (duration <= 3 / 16) { note = \"noteheads.quarter\"; flag = \"flags.u8th\"; dot = 1; }\n\telse if (duration <= 1 / 4) { note = \"noteheads.quarter\"; dot = 0; }\n\telse if (duration <= 3 / 8) { note = \"noteheads.quarter\"; dot = 1; }\n\telse if (duration <= 1 / 2) { note = \"noteheads.half\"; dot = 0; }\n\telse if (duration <= 3 / 4) { note = \"noteheads.half\"; dot = 1; }\n\telse if (duration <= 1) { note = \"noteheads.whole\"; dot = 0; }\n\telse if (duration <= 1.5) { note = \"noteheads.whole\"; dot = 1; }\n\telse if (duration <= 2) { note = \"noteheads.dbl\"; dot = 0; }\n\telse { note = \"noteheads.dbl\"; dot = 1; }\n\n\tvar ret = createNoteHead(absElem, note, { verticalPos: 0 }, // This is just temporary: we'll offset the vertical positioning when we get the actual vertical spot.\n\t\t{ dir: \"up\", flag: flag, dot: dot, scale: temposcale });\n\tvar tempoNote = ret.notehead;\n\tabsElem.addHead(tempoNote);\n\tvar stem;\n\tif (note !== \"noteheads.whole\" && note !== \"noteheads.dbl\") {\n\t\tvar p1 = 1 / 3 * temposcale;\n\t\tvar p2 = 5 * temposcale;\n\t\tvar dx = tempoNote.dx + tempoNote.w;\n\t\tvar width = -0.6;\n\t\tstem = new RelativeElement(null, dx, 0, p1, { \"type\": \"stem\", \"pitch2\": p2, linewidth: width });\n\t\tabsElem.addRight(stem);\n\t}\n\treturn absElem;\n};\n\nmodule.exports = TempoElement;\n","// abc_tie_element.js: Definition of the TieElement class.\n\nvar TieElem = function TieElem(options) {\n\tthis.type = \"TieElem\";\n\t//\tconsole.log(\"constructor\", options.anchor1 ? options.anchor1.pitch : \"N/A\", options.anchor2 ? options.anchor2.pitch : \"N/A\", options.isTie, options.isGrace);\n\tthis.anchor1 = options.anchor1; // must have a .x and a .pitch, and a .parent property or be null (means starts at the \"beginning\" of the line - after keysig)\n\tthis.anchor2 = options.anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line)\n\tif (options.isGrace)\n\t\tthis.isGrace = true;\n\tif (options.fixedY)\n\t\tthis.fixedY = true;\n\tif (options.stemDir)\n\t\tthis.stemDir = options.stemDir;\n\tif (options.voiceNumber !== undefined)\n\t\tthis.voiceNumber = options.voiceNumber;\n\tif (options.style !== undefined)\n\t\tthis.dotted = true;\n\tthis.internalNotes = [];\n};\n\nTieElem.prototype.addInternalNote = function (note) {\n\tthis.internalNotes.push(note);\n};\n\nTieElem.prototype.setEndAnchor = function (anchor2) {\n\t//\tconsole.log(\"end\", this.anchor1 ? this.anchor1.pitch : \"N/A\", anchor2 ? anchor2.pitch : \"N/A\", this.isTie, this.isGrace);\n\tthis.anchor2 = anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line)\n\n\t// we don't really have enough info to know what the vertical extent is yet and we won't until drawing. This will just give it enough\n\t// room on either side (we don't even know if the slur will be above yet). We need to set this so that we can make sure the voice has\n\t// at least enough room that the line doesn't get cut off if the tie or slur is the lowest thing.\n\tif (this.anchor1) {\n\t\tthis.top = Math.max(this.anchor1.pitch, this.anchor2.pitch) + 4\n\t\tthis.bottom = Math.min(this.anchor1.pitch, this.anchor2.pitch) - 4\n\t} else {\n\t\tthis.top = this.anchor2.pitch + 4\n\t\tthis.bottom = this.anchor2.pitch - 4\n\t}\n};\n\n// If we encounter a repeat sign, then we don't want to extend either a tie or a slur past it, so these are called to be a limit.\nTieElem.prototype.setStartX = function (startLimitElem) {\n\tthis.startLimitX = startLimitElem;\n};\n\nTieElem.prototype.setEndX = function (endLimitElem) {\n\tthis.endLimitX = endLimitElem;\n};\n\nTieElem.prototype.setHint = function () {\n\tthis.hint = true;\n};\n\nTieElem.prototype.calcTieDirection = function () {\n\t// The rules:\n\t// 1) If it is in a grace note group, then the direction is always BELOW.\n\t// 2) If it is in a single voice, then the direction is always OPPOSITE of the stem (or where the stem would have been in the case of whole notes.)\n\t// 3) If the stem direction is forced (probably because there are two voices on the same line), then the direction is the SAME as the stem direction.\n\n\tif (this.isGrace)\n\t\tthis.above = false;\n\telse if (this.voiceNumber === 0)\n\t\tthis.above = true;\n\telse if (this.voiceNumber > 0)\n\t\tthis.above = false;\n\telse {\n\t\tvar referencePitch;\n\t\tif (this.anchor1)\n\t\t\treferencePitch = this.anchor1.pitch;\n\t\telse if (this.anchor2)\n\t\t\treferencePitch = this.anchor2.pitch;\n\t\telse\n\t\t\treferencePitch = 14; // TODO-PER: this can't really happen normally. This would imply that a tie crossed over three lines, something like \"C-\\nz\\nC\"\n\t\t// Put the arc in the opposite direction of the stem. That isn't always the pitch if one or both of the notes are beamed with something that affects its stem.\n\t\tif ((this.anchor1 && this.anchor1.stemDir === 'down') && (this.anchor2 && this.anchor2.stemDir === \"down\"))\n\t\t\tthis.above = true;\n\t\telse if ((this.anchor1 && this.anchor1.stemDir === 'up') && (this.anchor2 && this.anchor2.stemDir === \"up\"))\n\t\t\tthis.above = false;\n\t\telse if (this.anchor1 && this.anchor2)\n\t\t\tthis.above = referencePitch >= 6;\n\t\telse if (this.anchor1)\n\t\t\tthis.above = this.anchor1.stemDir === \"down\";\n\t\telse if (this.anchor2)\n\t\t\tthis.above = this.anchor2.stemDir === \"down\";\n\t\telse\n\t\t\tthis.above = referencePitch >= 6;\n\t}\n};\n\n// From \"standard music notation practice\" by Music Publishers’ Association:\n// 1) Slurs are placed under the note heads if all stems go up.\n// 2) Slurs are placed over the note heads if all stems go down.\n// 3) If there are both up stems and down stems, prefer placing the slur over.\n// 4) When the staff has opposite stemmed voices, all slurs should be on the stemmed side.\n\nTieElem.prototype.calcSlurDirection = function () {\n\tif (this.isGrace)\n\t\tthis.above = false;\n\telse if (this.voiceNumber === 0)\n\t\tthis.above = true;\n\telse if (this.voiceNumber > 0)\n\t\tthis.above = false;\n\telse {\n\t\tvar hasDownStem = false;\n\t\tif (this.anchor1 && this.anchor1.stemDir === \"down\")\n\t\t\thasDownStem = true;\n\t\tif (this.anchor2 && this.anchor2.stemDir === \"down\")\n\t\t\thasDownStem = true;\n\t\tfor (var i = 0; i < this.internalNotes.length; i++) {\n\t\t\tvar n = this.internalNotes[i];\n\t\t\tif (n.stemDir === \"down\")\n\t\t\t\thasDownStem = true;\n\t\t}\n\t\tthis.above = hasDownStem;\n\t}\n};\n\nTieElem.prototype.calcX = function (lineStartX, lineEndX) {\n\tif (this.anchor1) {\n\t\tthis.startX = this.anchor1.x; // The normal case where there is a starting element to attach to.\n\t\tif (this.anchor1.scalex < 1) // this is a grace note - don't offset the tie as much.\n\t\t\tthis.startX -= 3;\n\t} else if (this.startLimitX)\n\t\tthis.startX = this.startLimitX.x + this.startLimitX.w; // if there is no start element, but there is a repeat mark before the start of the line.\n\telse {\n\t\tif (this.anchor2)\n\t\t\tthis.startX = this.anchor2.x - 20; // There is no element and no repeat mark: make a small arc\n\t\telse\n\t\t\tthis.startX = lineStartX; // Don't have any guidance, so extend to beginning of line\n\t}\n\tif (!this.anchor1 && this.dotted)\n\t\tthis.startX -= 3; // The arc needs to be long enough to tell that it is dotted.\n\n\tif (this.anchor2)\n\t\tthis.endX = this.anchor2.x; // The normal case where there is a starting element to attach to.\n\telse if (this.endLimitX)\n\t\tthis.endX = this.endLimitX.x; // if there is no start element, but there is a repeat mark before the start of the line.\n\telse\n\t\tthis.endX = lineEndX; // There is no element and no repeat mark: extend to the beginning of the line.\n};\n\nTieElem.prototype.calcTieY = function () {\n\t// If the tie comes from another line, then one or both anchors will be missing.\n\tif (this.anchor1)\n\t\tthis.startY = this.anchor1.pitch;\n\telse if (this.anchor2)\n\t\tthis.startY = this.anchor2.pitch;\n\telse\n\t\tthis.startY = this.above ? 14 : 0;\n\n\tif (this.anchor2)\n\t\tthis.endY = this.anchor2.pitch;\n\telse if (this.anchor1)\n\t\tthis.endY = this.anchor1.pitch;\n\telse\n\t\tthis.endY = this.above ? 14 : 0;\n};\n\n// From \"standard music notation practice\" by Music Publishers’ Association:\n// 1) If the anchor note is down stem, the slur points to the note head.\n// 2) If the anchor note is up stem, and the slur is over, then point to middle of stem.\n\nTieElem.prototype.calcSlurY = function () {\n\tif (this.anchor1 && this.anchor2) {\n\t\tif (this.above && this.anchor1.stemDir === \"up\" && !this.fixedY) {\n\t\t\tthis.startY = (this.anchor1.highestVert + this.anchor1.pitch) / 2;\n\t\t\tthis.startX += this.anchor1.w / 2; // When going to the middle of the stem, bump the line to the right a little bit to make it look right.\n\t\t} else\n\t\t\tthis.startY = this.anchor1.pitch;\n\n\t\t// If the closing note has an up stem, and it is beamed, and it isn't the first note in the beam, then the beam will get in the way.\n\t\tvar beamInterferes = this.anchor2.parent.beam && this.anchor2.parent.beam.stemsUp && this.anchor2.parent.beam.elems[0] !== this.anchor2.parent;\n\t\tvar midPoint = (this.anchor2.highestVert + this.anchor2.pitch) / 2;\n\t\tif (this.above && this.anchor2.stemDir === \"up\" && !this.fixedY && !beamInterferes && (midPoint < this.startY)) {\n\t\t\tthis.endY = midPoint;\n\t\t\tthis.endX += Math.round(this.anchor2.w / 2); // When going to the middle of the stem, bump the line to the right a little bit to make it look right.\n\t\t} else\n\t\t\tthis.endY = this.above && beamInterferes ? this.anchor2.highestVert : this.anchor2.pitch;\n\n\t} else if (this.anchor1) {\n\t\tthis.startY = this.endY = this.anchor1.pitch;\n\t} else if (this.anchor2) {\n\t\tthis.startY = this.endY = this.anchor2.pitch;\n\t} else {\n\t\t// This is the case where the slur covers the entire line.\n\t\t// TODO-PER: figure out where the real top and bottom of the line are.\n\t\tthis.startY = this.above ? 14 : 0;\n\t\tthis.endY = this.above ? 14 : 0;\n\t}\n};\n\nTieElem.prototype.avoidCollisionAbove = function () {\n\t// Double check that an interior note in the slur isn't so high that it interferes.\n\tif (this.above) {\n\t\tvar maxInnerHeight = -50;\n\t\tfor (var i = 0; i < this.internalNotes.length; i++) {\n\t\t\tif (this.internalNotes[i].highestVert > maxInnerHeight)\n\t\t\t\tmaxInnerHeight = this.internalNotes[i].highestVert;\n\t\t}\n\t\tif (maxInnerHeight > this.startY && maxInnerHeight > this.endY)\n\t\t\tthis.startY = this.endY = maxInnerHeight - 1;\n\t}\n};\n\nmodule.exports = TieElem;\n","const addTextIf = require(\"../add-text-if\");\n\nfunction TopText(metaText, metaTextInfo, formatting, lines, width, isPrint, paddingLeft, spacing, getTextSize) {\n\tthis.rows = [];\n\n\tif (metaText.header && isPrint) {\n\t\t// Note: whether there is a header or not doesn't change any other positioning, so this doesn't change the Y-coordinate.\n\t\t// This text goes above the margin, so we'll temporarily move up.\n\t\tvar headerTextHeight = getTextSize.calc(\"X\", \"headerfont\", 'abcjs-header abcjs-meta-top').height;\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.header.left, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft + width / 2, text: metaText.header.center, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, anchor: 'middle', info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft + width, text: metaText.header.right, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, anchor: 'end', info: metaTextInfo.header, name: \"header\" }, getTextSize);\n\n\t\t//\t\tTopText.prototype.addTextIf = function (marginLeft, text, font, klass, marginTop, marginBottom, anchor, getTextSize, absElemType, noMove) {\n\t}\n\tif (isPrint)\n\t\tthis.rows.push({ move: spacing.top });\n\tvar tAnchor = formatting.titleleft ? 'start' : 'middle';\n\tvar tLeft = formatting.titleleft ? paddingLeft : paddingLeft + width / 2;\n\tif (metaText.title) {\n\t\taddTextIf(this.rows, { marginLeft: tLeft, text: metaText.title, font: 'titlefont', klass: 'title meta-top', marginTop: spacing.title, anchor: tAnchor, absElemType: \"title\", info: metaTextInfo.title, name: \"title\" }, getTextSize);\n\t}\n\tif (lines.length) {\n\t\tvar index = 0;\n\t\twhile (index < lines.length && lines[index].subtitle) {\n\t\t\taddTextIf(this.rows, { marginLeft: tLeft, text: lines[index].subtitle.text, font: 'subtitlefont', klass: 'text meta-top subtitle', marginTop: spacing.subtitle, anchor: tAnchor, absElemType: \"subtitle\", info: lines[index].subtitle, name: \"subtitle\" }, getTextSize);\n\t\t\tindex++;\n\t\t}\n\t}\n\n\tif (metaText.rhythm || metaText.origin || metaText.composer) {\n\t\tthis.rows.push({ move: spacing.composer });\n\t\tif (metaText.rhythm && metaText.rhythm.length > 0) {\n\t\t\tvar noMove = !!(metaText.composer || metaText.origin);\n\t\t\taddTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.rhythm, font: 'infofont', klass: 'meta-top rhythm', absElemType: \"rhythm\", noMove: noMove, info: metaTextInfo.rhythm, name: \"rhythm\" }, getTextSize);\n\t\t}\n\t\tvar composerLine = \"\";\n\t\tif (metaText.composer) composerLine += metaText.composer;\n\t\tif (metaText.origin) composerLine += ' (' + metaText.origin + ')';\n\t\tif (composerLine.length > 0) {\n\t\t\taddTextIf(this.rows, { marginLeft: paddingLeft + width, text: composerLine, font: 'composerfont', klass: 'meta-top composer', anchor: \"end\", absElemType: \"composer\", info: metaTextInfo.composer, name: \"composer\" }, getTextSize);\n\t\t}\n\t}\n\n\tif (metaText.author && metaText.author.length > 0) {\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft + width, text: metaText.author, font: 'composerfont', klass: 'meta-top author', anchor: \"end\", absElemType: \"author\", info: metaTextInfo.author, name: \"author\" }, getTextSize);\n\t}\n\n\tif (metaText.partOrder && metaText.partOrder.length > 0) {\n\t\taddTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.partOrder, font: 'partsfont', klass: 'meta-top part-order', absElemType: \"partOrder\", info: metaTextInfo.partOrder, name: \"part-order\" }, getTextSize);\n\t}\n}\n\nmodule.exports = TopText;\n","// abc_triplet_element.js: Definition of the TripletElem class.\n\nvar TripletElem = function TripletElem(number, anchor1, options) {\n\tthis.type = \"TripletElem\";\n\tthis.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the \"beginning\" of the line - after key signature)\n\tthis.number = number;\n\tthis.durationClass = ('d' + (Math.round(anchor1.parent.durationClass * 1000) / 1000)).replace(/\\./, '-');\n\tthis.middleElems = []; // This is to calculate the highest interior pitch. It is used to make sure that the drawn bracket never crosses a really high middle note.\n\tthis.flatBeams = options.flatBeams;\n};\n\nTripletElem.prototype.isClosed = function () {\n\treturn !!this.anchor2;\n};\n\nTripletElem.prototype.middleNote = function (elem) {\n\tthis.middleElems.push(elem);\n};\n\nTripletElem.prototype.setCloseAnchor = function (anchor2) {\n\tthis.anchor2 = anchor2;\n\t// TODO-PER: This used to be just for beamed triplets but it looks like bracketed triplets need extra room, too. The only one that doesn't is stem down and beamed\n\t//if (this.anchor1.parent.beam)\n\tif (!this.anchor1.parent.beam || this.anchor1.stemDir === 'up')\n\t\tthis.endingHeightAbove = 4;\n};\n\nmodule.exports = TripletElem;\n","// abc_voice_element.js: Definition of the VoiceElement class.\n\nvar VoiceElement = function VoiceElement(voicenumber, voicetotal) {\n\tthis.children = [];\n\tthis.beams = [];\n\tthis.otherchildren = []; // ties, slurs, triplets\n\tthis.w = 0;\n\tthis.duplicate = false;\n\tthis.voicenumber = voicenumber; //number of the voice on a given stave (not staffgroup)\n\tthis.voicetotal = voicetotal;\n\tthis.bottom = 7;\n\tthis.top = 7;\n\tthis.specialY = {\n\t\ttempoHeightAbove: 0,\n\t\tpartHeightAbove: 0,\n\t\tvolumeHeightAbove: 0,\n\t\tdynamicHeightAbove: 0,\n\t\tendingHeightAbove: 0,\n\t\tchordHeightAbove: 0,\n\t\tlyricHeightAbove: 0,\n\n\t\tlyricHeightBelow: 0,\n\t\tchordHeightBelow: 0,\n\t\tvolumeHeightBelow: 0,\n\t\tdynamicHeightBelow: 0\n\t};\n};\n\nVoiceElement.prototype.addChild = function (absElem) {\n\t// This is always passed an AbsoluteElement\n\tif (absElem.type === 'bar') {\n\t\tvar firstItem = true;\n\t\tfor (var i = 0; firstItem && i < this.children.length; i++) {\n\t\t\tif (this.children[i].type.indexOf(\"staff-extra\") < 0 && this.children[i].type !== \"tempo\")\n\t\t\t\tfirstItem = false;\n\t\t}\n\t\tif (!firstItem) {\n\t\t\tthis.beams.push(\"bar\");\n\t\t\tthis.otherchildren.push(\"bar\");\n\t\t}\n\t}\n\tthis.children[this.children.length] = absElem;\n\tthis.setRange(absElem);\n};\n\nVoiceElement.prototype.setLimit = function (member, child) {\n\t// Sometimes we get an absolute element in here and sometimes we get some type of relative element.\n\t// If there is a \"specialY\" element, then assume it is an absolute element. If that doesn't exist, look for the\n\t// same members at the top level, because that's where they are in relative elements.\n\tvar specialY = child.specialY;\n\tif (!specialY) specialY = child;\n\tif (!specialY[member]) return;\n\tif (!this.specialY[member])\n\t\tthis.specialY[member] = specialY[member];\n\telse\n\t\tthis.specialY[member] = Math.max(this.specialY[member], specialY[member]);\n};\n\nVoiceElement.prototype.adjustRange = function (child) {\n\tif (child.bottom !== undefined)\n\t\tthis.bottom = Math.min(this.bottom, child.bottom);\n\tif (child.top !== undefined)\n\t\tthis.top = Math.max(this.top, child.top);\n};\n\nVoiceElement.prototype.setRange = function (child) {\n\tthis.adjustRange(child);\n\tthis.setLimit('tempoHeightAbove', child);\n\tthis.setLimit('partHeightAbove', child);\n\tthis.setLimit('volumeHeightAbove', child);\n\tthis.setLimit('dynamicHeightAbove', child);\n\tthis.setLimit('endingHeightAbove', child);\n\tthis.setLimit('chordHeightAbove', child);\n\tthis.setLimit('lyricHeightAbove', child);\n\tthis.setLimit('lyricHeightBelow', child);\n\tthis.setLimit('chordHeightBelow', child);\n\tthis.setLimit('volumeHeightBelow', child);\n\tthis.setLimit('dynamicHeightBelow', child);\n};\n\nVoiceElement.prototype.addOther = function (child) {\n\tthis.otherchildren.push(child);\n\tthis.setRange(child);\n};\n\nVoiceElement.prototype.addBeam = function (child) {\n\tthis.beams.push(child);\n};\n\nVoiceElement.prototype.setWidth = function (width) {\n\tthis.w = width;\n};\n\nmodule.exports = VoiceElement;\n","var spacing = require('../helpers/spacing');\n\n/**\n * Glyphs and some methods to adjust for their x and y baseline\n */\nvar glyphs =\n{\n\t'0': { d: [['M', 4.83, -14.97], ['c', 0.33, -0.03, 1.11, 0.00, 1.47, 0.06], ['c', 1.68, 0.36, 2.97, 1.59, 3.78, 3.60], ['c', 1.20, 2.97, 0.81, 6.96, -0.90, 9.27], ['c', -0.78, 1.08, -1.71, 1.71, -2.91, 1.95], ['c', -0.45, 0.09, -1.32, 0.09, -1.77, 0.00], ['c', -0.81, -0.18, -1.47, -0.51, -2.07, -1.02], ['c', -2.34, -2.07, -3.15, -6.72, -1.74, -10.20], ['c', 0.87, -2.16, 2.28, -3.42, 4.14, -3.66], ['z'], ['m', 1.11, 0.87], ['c', -0.21, -0.06, -0.69, -0.09, -0.87, -0.06], ['c', -0.54, 0.12, -0.87, 0.42, -1.17, 0.99], ['c', -0.36, 0.66, -0.51, 1.56, -0.60, 3.00], ['c', -0.03, 0.75, -0.03, 4.59, 0.00, 5.31], ['c', 0.09, 1.50, 0.27, 2.40, 0.60, 3.06], ['c', 0.24, 0.48, 0.57, 0.78, 0.96, 0.90], ['c', 0.27, 0.09, 0.78, 0.09, 1.05, 0.00], ['c', 0.39, -0.12, 0.72, -0.42, 0.96, -0.90], ['c', 0.33, -0.66, 0.51, -1.56, 0.60, -3.06], ['c', 0.03, -0.72, 0.03, -4.56, 0.00, -5.31], ['c', -0.09, -1.47, -0.27, -2.37, -0.60, -3.03], ['c', -0.24, -0.48, -0.54, -0.78, -0.93, -0.90], ['z']], w: 10.78, h: 14.959 },\n\t'1': { d: [['M', 3.30, -15.06], ['c', 0.06, -0.06, 0.21, -0.03, 0.66, 0.15], ['c', 0.81, 0.39, 1.08, 0.39, 1.83, 0.03], ['c', 0.21, -0.09, 0.39, -0.15, 0.42, -0.15], ['c', 0.12, 0.00, 0.21, 0.09, 0.27, 0.21], ['c', 0.06, 0.12, 0.06, 0.33, 0.06, 5.94], ['c', 0.00, 3.93, 0.00, 5.85, 0.03, 6.03], ['c', 0.06, 0.36, 0.15, 0.69, 0.27, 0.96], ['c', 0.36, 0.75, 0.93, 1.17, 1.68, 1.26], ['c', 0.30, 0.03, 0.39, 0.09, 0.39, 0.30], ['c', 0.00, 0.15, -0.03, 0.18, -0.09, 0.24], ['c', -0.06, 0.06, -0.09, 0.06, -0.48, 0.06], ['c', -0.42, 0.00, -0.69, -0.03, -2.10, -0.24], ['c', -0.90, -0.15, -1.77, -0.15, -2.67, 0.00], ['c', -1.41, 0.21, -1.68, 0.24, -2.10, 0.24], ['c', -0.39, 0.00, -0.42, 0.00, -0.48, -0.06], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.24], ['c', 0.00, -0.21, 0.06, -0.27, 0.36, -0.30], ['c', 0.75, -0.09, 1.32, -0.51, 1.68, -1.26], ['c', 0.12, -0.27, 0.21, -0.60, 0.27, -0.96], ['c', 0.03, -0.18, 0.03, -1.59, 0.03, -4.29], ['c', 0.00, -3.87, 0.00, -4.05, -0.06, -4.14], ['c', -0.09, -0.15, -0.18, -0.24, -0.39, -0.24], ['c', -0.12, 0.00, -0.15, 0.03, -0.21, 0.06], ['c', -0.03, 0.06, -0.45, 0.99, -0.96, 2.13], ['c', -0.48, 1.14, -0.90, 2.10, -0.93, 2.16], ['c', -0.06, 0.15, -0.21, 0.24, -0.33, 0.24], ['c', -0.24, 0.00, -0.42, -0.18, -0.42, -0.39], ['c', 0.00, -0.06, 3.27, -7.62, 3.33, -7.74], ['z']], w: 8.94, h: 15.058 },\n\t'2': { d: [['M', 4.23, -14.97], ['c', 0.57, -0.06, 1.68, 0.00, 2.34, 0.18], ['c', 0.69, 0.18, 1.50, 0.54, 2.01, 0.90], ['c', 1.35, 0.96, 1.95, 2.25, 1.77, 3.81], ['c', -0.15, 1.35, -0.66, 2.34, -1.68, 3.15], ['c', -0.60, 0.48, -1.44, 0.93, -3.12, 1.65], ['c', -1.32, 0.57, -1.80, 0.81, -2.37, 1.14], ['c', -0.57, 0.33, -0.57, 0.33, -0.24, 0.27], ['c', 0.39, -0.09, 1.26, -0.09, 1.68, 0.00], ['c', 0.72, 0.15, 1.41, 0.45, 2.10, 0.90], ['c', 0.99, 0.63, 1.86, 0.87, 2.55, 0.75], ['c', 0.24, -0.06, 0.42, -0.15, 0.57, -0.30], ['c', 0.12, -0.09, 0.30, -0.42, 0.30, -0.51], ['c', 0.00, -0.09, 0.12, -0.21, 0.24, -0.24], ['c', 0.18, -0.03, 0.39, 0.12, 0.39, 0.30], ['c', 0.00, 0.12, -0.15, 0.57, -0.30, 0.87], ['c', -0.54, 1.02, -1.56, 1.74, -2.79, 2.01], ['c', -0.42, 0.09, -1.23, 0.09, -1.62, 0.03], ['c', -0.81, -0.18, -1.32, -0.45, -2.01, -1.11], ['c', -0.45, -0.45, -0.63, -0.57, -0.96, -0.69], ['c', -0.84, -0.27, -1.89, 0.12, -2.25, 0.90], ['c', -0.12, 0.21, -0.21, 0.54, -0.21, 0.72], ['c', 0.00, 0.12, -0.12, 0.21, -0.27, 0.24], ['c', -0.15, 0.00, -0.27, -0.03, -0.33, -0.15], ['c', -0.09, -0.21, 0.09, -1.08, 0.33, -1.71], ['c', 0.24, -0.66, 0.66, -1.26, 1.29, -1.89], ['c', 0.45, -0.45, 0.90, -0.81, 1.92, -1.56], ['c', 1.29, -0.93, 1.89, -1.44, 2.34, -1.98], ['c', 0.87, -1.05, 1.26, -2.19, 1.20, -3.63], ['c', -0.06, -1.29, -0.39, -2.31, -0.96, -2.91], ['c', -0.36, -0.33, -0.72, -0.51, -1.17, -0.54], ['c', -0.84, -0.03, -1.53, 0.42, -1.59, 1.05], ['c', -0.03, 0.33, 0.12, 0.60, 0.57, 1.14], ['c', 0.45, 0.54, 0.54, 0.87, 0.42, 1.41], ['c', -0.15, 0.63, -0.54, 1.11, -1.08, 1.38], ['c', -0.63, 0.33, -1.20, 0.33, -1.83, 0.00], ['c', -0.24, -0.12, -0.33, -0.18, -0.54, -0.39], ['c', -0.18, -0.18, -0.27, -0.30, -0.36, -0.51], ['c', -0.24, -0.45, -0.27, -0.84, -0.21, -1.38], ['c', 0.12, -0.75, 0.45, -1.41, 1.02, -1.98], ['c', 0.72, -0.72, 1.74, -1.17, 2.85, -1.32], ['z']], w: 10.764, h: 14.97 },\n\t'3': { d: [['M', 3.78, -14.97], ['c', 0.30, -0.03, 1.41, 0.00, 1.83, 0.06], ['c', 2.22, 0.30, 3.51, 1.32, 3.72, 2.91], ['c', 0.03, 0.33, 0.03, 1.26, -0.03, 1.65], ['c', -0.12, 0.84, -0.48, 1.47, -1.05, 1.77], ['c', -0.27, 0.15, -0.36, 0.24, -0.45, 0.39], ['c', -0.09, 0.21, -0.09, 0.36, 0.00, 0.57], ['c', 0.09, 0.15, 0.18, 0.24, 0.51, 0.39], ['c', 0.75, 0.42, 1.23, 1.14, 1.41, 2.13], ['c', 0.06, 0.42, 0.06, 1.35, 0.00, 1.71], ['c', -0.18, 0.81, -0.48, 1.38, -1.02, 1.95], ['c', -0.75, 0.72, -1.80, 1.20, -3.18, 1.38], ['c', -0.42, 0.06, -1.56, 0.06, -1.95, 0.00], ['c', -1.89, -0.33, -3.18, -1.29, -3.51, -2.64], ['c', -0.03, -0.12, -0.03, -0.33, -0.03, -0.60], ['c', 0.00, -0.36, 0.00, -0.42, 0.06, -0.63], ['c', 0.12, -0.30, 0.27, -0.51, 0.51, -0.75], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.36, 0.33, 0.57, 0.75, 0.60, 1.20], ['c', 0.00, 0.21, 0.00, 0.27, -0.06, 0.42], ['c', -0.09, 0.18, -0.12, 0.24, -0.54, 0.54], ['c', -0.51, 0.36, -0.63, 0.54, -0.60, 0.87], ['c', 0.06, 0.54, 0.54, 0.90, 1.38, 0.99], ['c', 0.36, 0.06, 0.72, 0.03, 0.96, -0.06], ['c', 0.81, -0.27, 1.29, -1.23, 1.44, -2.79], ['c', 0.03, -0.45, 0.03, -1.95, -0.03, -2.37], ['c', -0.09, -0.75, -0.33, -1.23, -0.75, -1.44], ['c', -0.33, -0.18, -0.45, -0.18, -1.98, -0.18], ['c', -1.35, 0.00, -1.41, 0.00, -1.50, -0.06], ['c', -0.18, -0.12, -0.24, -0.39, -0.12, -0.60], ['c', 0.12, -0.15, 0.15, -0.15, 1.68, -0.15], ['c', 1.50, 0.00, 1.62, 0.00, 1.89, -0.15], ['c', 0.18, -0.09, 0.42, -0.36, 0.54, -0.57], ['c', 0.18, -0.42, 0.27, -0.90, 0.30, -1.95], ['c', 0.03, -1.20, -0.06, -1.80, -0.36, -2.37], ['c', -0.24, -0.48, -0.63, -0.81, -1.14, -0.96], ['c', -0.30, -0.06, -1.08, -0.06, -1.38, 0.03], ['c', -0.60, 0.15, -0.90, 0.42, -0.96, 0.84], ['c', -0.03, 0.30, 0.06, 0.45, 0.63, 0.84], ['c', 0.33, 0.24, 0.42, 0.39, 0.45, 0.63], ['c', 0.03, 0.72, -0.57, 1.50, -1.32, 1.65], ['c', -1.05, 0.27, -2.10, -0.57, -2.10, -1.65], ['c', 0.00, -0.45, 0.15, -0.96, 0.39, -1.38], ['c', 0.12, -0.21, 0.54, -0.63, 0.81, -0.81], ['c', 0.57, -0.42, 1.38, -0.69, 2.25, -0.81], ['z']], w: 9.735, h: 14.967 },\n\t'4': { d: [['M', 8.64, -14.94], ['c', 0.27, -0.09, 0.42, -0.12, 0.54, -0.03], ['c', 0.09, 0.06, 0.15, 0.21, 0.15, 0.30], ['c', -0.03, 0.06, -1.92, 2.31, -4.23, 5.04], ['c', -2.31, 2.73, -4.23, 4.98, -4.26, 5.01], ['c', -0.03, 0.06, 0.12, 0.06, 2.55, 0.06], ['l', 2.61, 0.00], ['l', 0.00, -2.37], ['c', 0.00, -2.19, 0.03, -2.37, 0.06, -2.46], ['c', 0.03, -0.06, 0.21, -0.18, 0.57, -0.42], ['c', 1.08, -0.72, 1.38, -1.08, 1.86, -2.16], ['c', 0.12, -0.30, 0.24, -0.54, 0.27, -0.57], ['c', 0.12, -0.12, 0.39, -0.06, 0.45, 0.12], ['c', 0.06, 0.09, 0.06, 0.57, 0.06, 3.96], ['l', 0.00, 3.90], ['l', 1.08, 0.00], ['c', 1.05, 0.00, 1.11, 0.00, 1.20, 0.06], ['c', 0.24, 0.15, 0.24, 0.54, 0.00, 0.69], ['c', -0.09, 0.06, -0.15, 0.06, -1.20, 0.06], ['l', -1.08, 0.00], ['l', 0.00, 0.33], ['c', 0.00, 0.57, 0.09, 1.11, 0.30, 1.53], ['c', 0.36, 0.75, 0.93, 1.17, 1.68, 1.26], ['c', 0.30, 0.03, 0.39, 0.09, 0.39, 0.30], ['c', 0.00, 0.15, -0.03, 0.18, -0.09, 0.24], ['c', -0.06, 0.06, -0.09, 0.06, -0.48, 0.06], ['c', -0.42, 0.00, -0.69, -0.03, -2.10, -0.24], ['c', -0.90, -0.15, -1.77, -0.15, -2.67, 0.00], ['c', -1.41, 0.21, -1.68, 0.24, -2.10, 0.24], ['c', -0.39, 0.00, -0.42, 0.00, -0.48, -0.06], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.24], ['c', 0.00, -0.21, 0.06, -0.27, 0.36, -0.30], ['c', 0.75, -0.09, 1.32, -0.51, 1.68, -1.26], ['c', 0.21, -0.42, 0.30, -0.96, 0.30, -1.53], ['l', 0.00, -0.33], ['l', -2.70, 0.00], ['c', -2.91, 0.00, -2.85, 0.00, -3.09, -0.15], ['c', -0.18, -0.12, -0.30, -0.39, -0.27, -0.54], ['c', 0.03, -0.06, 0.18, -0.24, 0.33, -0.45], ['c', 0.75, -0.90, 1.59, -2.07, 2.13, -3.03], ['c', 0.33, -0.54, 0.84, -1.62, 1.05, -2.16], ['c', 0.57, -1.41, 0.84, -2.64, 0.90, -4.05], ['c', 0.03, -0.63, 0.06, -0.72, 0.24, -0.81], ['l', 0.12, -0.06], ['l', 0.45, 0.12], ['c', 0.66, 0.18, 1.02, 0.24, 1.47, 0.27], ['c', 0.60, 0.03, 1.23, -0.09, 2.01, -0.33], ['z']], w: 11.795, h: 14.994 },\n\t'5': { d: [['M', 1.02, -14.94], ['c', 0.12, -0.09, 0.03, -0.09, 1.08, 0.06], ['c', 2.49, 0.36, 4.35, 0.36, 6.96, -0.06], ['c', 0.57, -0.09, 0.66, -0.06, 0.81, 0.06], ['c', 0.15, 0.18, 0.12, 0.24, -0.15, 0.51], ['c', -1.29, 1.26, -3.24, 2.04, -5.58, 2.31], ['c', -0.60, 0.09, -1.20, 0.12, -1.71, 0.12], ['c', -0.39, 0.00, -0.45, 0.00, -0.57, 0.06], ['c', -0.09, 0.06, -0.15, 0.12, -0.21, 0.21], ['l', -0.06, 0.12], ['l', 0.00, 1.65], ['l', 0.00, 1.65], ['l', 0.21, -0.21], ['c', 0.66, -0.57, 1.41, -0.96, 2.19, -1.14], ['c', 0.33, -0.06, 1.41, -0.06, 1.95, 0.00], ['c', 2.61, 0.36, 4.02, 1.74, 4.26, 4.14], ['c', 0.03, 0.45, 0.03, 1.08, -0.03, 1.44], ['c', -0.18, 1.02, -0.78, 2.01, -1.59, 2.70], ['c', -0.72, 0.57, -1.62, 1.02, -2.49, 1.20], ['c', -1.38, 0.27, -3.03, 0.06, -4.20, -0.54], ['c', -1.08, -0.54, -1.71, -1.32, -1.86, -2.28], ['c', -0.09, -0.69, 0.09, -1.29, 0.57, -1.74], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.36, 0.33, 0.57, 0.75, 0.60, 1.20], ['c', 0.00, 0.21, 0.00, 0.27, -0.06, 0.42], ['c', -0.09, 0.18, -0.12, 0.24, -0.54, 0.54], ['c', -0.18, 0.12, -0.36, 0.30, -0.42, 0.33], ['c', -0.36, 0.42, -0.18, 0.99, 0.36, 1.26], ['c', 0.51, 0.27, 1.47, 0.36, 2.01, 0.27], ['c', 0.93, -0.21, 1.47, -1.17, 1.65, -2.91], ['c', 0.06, -0.45, 0.06, -1.89, 0.00, -2.31], ['c', -0.15, -1.20, -0.51, -2.10, -1.05, -2.55], ['c', -0.21, -0.18, -0.54, -0.36, -0.81, -0.39], ['c', -0.30, -0.06, -0.84, -0.03, -1.26, 0.06], ['c', -0.93, 0.18, -1.65, 0.60, -2.16, 1.20], ['c', -0.15, 0.21, -0.27, 0.30, -0.39, 0.30], ['c', -0.15, 0.00, -0.30, -0.09, -0.36, -0.18], ['c', -0.06, -0.09, -0.06, -0.15, -0.06, -3.66], ['c', 0.00, -3.39, 0.00, -3.57, 0.06, -3.66], ['c', 0.03, -0.06, 0.09, -0.15, 0.15, -0.18], ['z']], w: 10.212, h: 14.997 },\n\t'6': { d: [['M', 4.98, -14.97], ['c', 0.36, -0.03, 1.20, 0.00, 1.59, 0.06], ['c', 0.90, 0.15, 1.68, 0.51, 2.25, 1.05], ['c', 0.57, 0.51, 0.87, 1.23, 0.84, 1.98], ['c', -0.03, 0.51, -0.21, 0.90, -0.60, 1.26], ['c', -0.24, 0.24, -0.45, 0.39, -0.75, 0.51], ['c', -0.21, 0.06, -0.27, 0.06, -0.60, 0.06], ['c', -0.33, 0.00, -0.39, 0.00, -0.60, -0.06], ['c', -0.30, -0.12, -0.51, -0.27, -0.75, -0.51], ['c', -0.39, -0.36, -0.57, -0.78, -0.57, -1.26], ['c', 0.00, -0.27, 0.00, -0.30, 0.09, -0.42], ['c', 0.03, -0.09, 0.18, -0.21, 0.30, -0.30], ['c', 0.12, -0.09, 0.30, -0.21, 0.39, -0.27], ['c', 0.09, -0.06, 0.21, -0.18, 0.27, -0.24], ['c', 0.06, -0.12, 0.09, -0.15, 0.09, -0.33], ['c', 0.00, -0.18, -0.03, -0.24, -0.09, -0.36], ['c', -0.24, -0.39, -0.75, -0.60, -1.38, -0.57], ['c', -0.54, 0.03, -0.90, 0.18, -1.23, 0.48], ['c', -0.81, 0.72, -1.08, 2.16, -0.96, 5.37], ['l', 0.00, 0.63], ['l', 0.30, -0.12], ['c', 0.78, -0.27, 1.29, -0.33, 2.10, -0.27], ['c', 1.47, 0.12, 2.49, 0.54, 3.27, 1.29], ['c', 0.48, 0.51, 0.81, 1.11, 0.96, 1.89], ['c', 0.06, 0.27, 0.06, 0.42, 0.06, 0.93], ['c', 0.00, 0.54, 0.00, 0.69, -0.06, 0.96], ['c', -0.15, 0.78, -0.48, 1.38, -0.96, 1.89], ['c', -0.54, 0.51, -1.17, 0.87, -1.98, 1.08], ['c', -1.14, 0.30, -2.40, 0.33, -3.24, 0.03], ['c', -1.50, -0.48, -2.64, -1.89, -3.27, -4.02], ['c', -0.36, -1.23, -0.51, -2.82, -0.42, -4.08], ['c', 0.30, -3.66, 2.28, -6.30, 4.95, -6.66], ['z'], ['m', 0.66, 7.41], ['c', -0.27, -0.09, -0.81, -0.12, -1.08, -0.06], ['c', -0.72, 0.18, -1.08, 0.69, -1.23, 1.71], ['c', -0.06, 0.54, -0.06, 3.00, 0.00, 3.54], ['c', 0.18, 1.26, 0.72, 1.77, 1.80, 1.74], ['c', 0.39, -0.03, 0.63, -0.09, 0.90, -0.27], ['c', 0.66, -0.42, 0.90, -1.32, 0.90, -3.24], ['c', 0.00, -2.22, -0.36, -3.12, -1.29, -3.42], ['z']], w: 9.956, h: 14.982 },\n\t'7': { d: [['M', 0.21, -14.97], ['c', 0.21, -0.06, 0.45, 0.00, 0.54, 0.15], ['c', 0.06, 0.09, 0.06, 0.15, 0.06, 0.39], ['c', 0.00, 0.24, 0.00, 0.33, 0.06, 0.42], ['c', 0.06, 0.12, 0.21, 0.24, 0.27, 0.24], ['c', 0.03, 0.00, 0.12, -0.12, 0.24, -0.21], ['c', 0.96, -1.20, 2.58, -1.35, 3.99, -0.42], ['c', 0.15, 0.12, 0.42, 0.30, 0.54, 0.45], ['c', 0.48, 0.39, 0.81, 0.57, 1.29, 0.60], ['c', 0.69, 0.03, 1.50, -0.30, 2.13, -0.87], ['c', 0.09, -0.09, 0.27, -0.30, 0.39, -0.45], ['c', 0.12, -0.15, 0.24, -0.27, 0.30, -0.30], ['c', 0.18, -0.06, 0.39, 0.03, 0.51, 0.21], ['c', 0.06, 0.18, 0.06, 0.24, -0.27, 0.72], ['c', -0.18, 0.24, -0.54, 0.78, -0.78, 1.17], ['c', -2.37, 3.54, -3.54, 6.27, -3.87, 9.00], ['c', -0.03, 0.33, -0.03, 0.66, -0.03, 1.26], ['c', 0.00, 0.90, 0.00, 1.08, 0.15, 1.89], ['c', 0.06, 0.45, 0.06, 0.48, 0.03, 0.60], ['c', -0.06, 0.09, -0.21, 0.21, -0.30, 0.21], ['c', -0.03, 0.00, -0.27, -0.06, -0.54, -0.15], ['c', -0.84, -0.27, -1.11, -0.30, -1.65, -0.30], ['c', -0.57, 0.00, -0.84, 0.03, -1.56, 0.27], ['c', -0.60, 0.18, -0.69, 0.21, -0.81, 0.15], ['c', -0.12, -0.06, -0.21, -0.18, -0.21, -0.30], ['c', 0.00, -0.15, 0.60, -1.44, 1.20, -2.61], ['c', 1.14, -2.22, 2.73, -4.68, 5.10, -8.01], ['c', 0.21, -0.27, 0.36, -0.48, 0.33, -0.48], ['c', 0.00, 0.00, -0.12, 0.06, -0.27, 0.12], ['c', -0.54, 0.30, -0.99, 0.39, -1.56, 0.39], ['c', -0.75, 0.03, -1.20, -0.18, -1.83, -0.75], ['c', -0.99, -0.90, -1.83, -1.17, -2.31, -0.72], ['c', -0.18, 0.15, -0.36, 0.51, -0.45, 0.84], ['c', -0.06, 0.24, -0.06, 0.33, -0.09, 1.98], ['c', 0.00, 1.62, -0.03, 1.74, -0.06, 1.80], ['c', -0.15, 0.24, -0.54, 0.24, -0.69, 0.00], ['c', -0.06, -0.09, -0.06, -0.15, -0.06, -3.57], ['c', 0.00, -3.42, 0.00, -3.48, 0.06, -3.57], ['c', 0.03, -0.06, 0.09, -0.12, 0.15, -0.15], ['z']], w: 10.561, h: 15.093 },\n\t'8': { d: [['M', 4.98, -14.97], ['c', 0.33, -0.03, 1.02, -0.03, 1.32, 0.00], ['c', 1.32, 0.12, 2.49, 0.60, 3.21, 1.32], ['c', 0.39, 0.39, 0.66, 0.81, 0.78, 1.29], ['c', 0.09, 0.36, 0.09, 1.08, 0.00, 1.44], ['c', -0.21, 0.84, -0.66, 1.59, -1.59, 2.55], ['l', -0.30, 0.30], ['l', 0.27, 0.18], ['c', 1.47, 0.93, 2.31, 2.31, 2.25, 3.75], ['c', -0.03, 0.75, -0.24, 1.35, -0.63, 1.95], ['c', -0.45, 0.66, -1.02, 1.14, -1.83, 1.53], ['c', -1.80, 0.87, -4.20, 0.87, -6.00, 0.03], ['c', -1.62, -0.78, -2.52, -2.16, -2.46, -3.66], ['c', 0.06, -0.99, 0.54, -1.77, 1.80, -2.97], ['c', 0.54, -0.51, 0.54, -0.54, 0.48, -0.57], ['c', -0.39, -0.27, -0.96, -0.78, -1.20, -1.14], ['c', -0.75, -1.11, -0.87, -2.40, -0.30, -3.60], ['c', 0.69, -1.35, 2.25, -2.25, 4.20, -2.40], ['z'], ['m', 1.53, 0.69], ['c', -0.42, -0.09, -1.11, -0.12, -1.38, -0.06], ['c', -0.30, 0.06, -0.60, 0.18, -0.81, 0.30], ['c', -0.21, 0.12, -0.60, 0.51, -0.72, 0.72], ['c', -0.51, 0.87, -0.42, 1.89, 0.21, 2.52], ['c', 0.21, 0.21, 0.36, 0.30, 1.95, 1.23], ['c', 0.96, 0.54, 1.74, 0.99, 1.77, 1.02], ['c', 0.09, 0.00, 0.63, -0.60, 0.99, -1.11], ['c', 0.21, -0.36, 0.48, -0.87, 0.57, -1.23], ['c', 0.06, -0.24, 0.06, -0.36, 0.06, -0.72], ['c', 0.00, -0.45, -0.03, -0.66, -0.15, -0.99], ['c', -0.39, -0.81, -1.29, -1.44, -2.49, -1.68], ['z'], ['m', -1.44, 8.07], ['l', -1.89, -1.08], ['c', -0.03, 0.00, -0.18, 0.15, -0.39, 0.33], ['c', -1.20, 1.08, -1.65, 1.95, -1.59, 3.00], ['c', 0.09, 1.59, 1.35, 2.85, 3.21, 3.24], ['c', 0.33, 0.06, 0.45, 0.06, 0.93, 0.06], ['c', 0.63, 0.00, 0.81, -0.03, 1.29, -0.27], ['c', 0.90, -0.42, 1.47, -1.41, 1.41, -2.40], ['c', -0.06, -0.66, -0.39, -1.29, -0.90, -1.65], ['c', -0.12, -0.09, -1.05, -0.63, -2.07, -1.23], ['z']], w: 10.926, h: 14.989 },\n\t'9': { d: [['M', 4.23, -14.97], ['c', 0.42, -0.03, 1.29, 0.00, 1.62, 0.06], ['c', 0.51, 0.12, 0.93, 0.30, 1.38, 0.57], ['c', 1.53, 1.02, 2.52, 3.24, 2.73, 5.94], ['c', 0.18, 2.55, -0.48, 4.98, -1.83, 6.57], ['c', -1.05, 1.26, -2.40, 1.89, -3.93, 1.83], ['c', -1.23, -0.06, -2.31, -0.45, -3.03, -1.14], ['c', -0.57, -0.51, -0.87, -1.23, -0.84, -1.98], ['c', 0.03, -0.51, 0.21, -0.90, 0.60, -1.26], ['c', 0.24, -0.24, 0.45, -0.39, 0.75, -0.51], ['c', 0.21, -0.06, 0.27, -0.06, 0.60, -0.06], ['c', 0.33, 0.00, 0.39, 0.00, 0.60, 0.06], ['c', 0.30, 0.12, 0.51, 0.27, 0.75, 0.51], ['c', 0.39, 0.36, 0.57, 0.78, 0.57, 1.26], ['c', 0.00, 0.27, 0.00, 0.30, -0.09, 0.42], ['c', -0.03, 0.09, -0.18, 0.21, -0.30, 0.30], ['c', -0.12, 0.09, -0.30, 0.21, -0.39, 0.27], ['c', -0.09, 0.06, -0.21, 0.18, -0.27, 0.24], ['c', -0.06, 0.12, -0.06, 0.15, -0.06, 0.33], ['c', 0.00, 0.18, 0.00, 0.24, 0.06, 0.36], ['c', 0.24, 0.39, 0.75, 0.60, 1.38, 0.57], ['c', 0.54, -0.03, 0.90, -0.18, 1.23, -0.48], ['c', 0.81, -0.72, 1.08, -2.16, 0.96, -5.37], ['l', 0.00, -0.63], ['l', -0.30, 0.12], ['c', -0.78, 0.27, -1.29, 0.33, -2.10, 0.27], ['c', -1.47, -0.12, -2.49, -0.54, -3.27, -1.29], ['c', -0.48, -0.51, -0.81, -1.11, -0.96, -1.89], ['c', -0.06, -0.27, -0.06, -0.42, -0.06, -0.96], ['c', 0.00, -0.51, 0.00, -0.66, 0.06, -0.93], ['c', 0.15, -0.78, 0.48, -1.38, 0.96, -1.89], ['c', 0.15, -0.12, 0.33, -0.27, 0.42, -0.36], ['c', 0.69, -0.51, 1.62, -0.81, 2.76, -0.93], ['z'], ['m', 1.17, 0.66], ['c', -0.21, -0.06, -0.57, -0.06, -0.81, -0.03], ['c', -0.78, 0.12, -1.26, 0.69, -1.41, 1.74], ['c', -0.12, 0.63, -0.15, 1.95, -0.09, 2.79], ['c', 0.12, 1.71, 0.63, 2.40, 1.77, 2.46], ['c', 1.08, 0.03, 1.62, -0.48, 1.80, -1.74], ['c', 0.06, -0.54, 0.06, -3.00, 0.00, -3.54], ['c', -0.15, -1.05, -0.51, -1.53, -1.26, -1.68], ['z']], w: 9.959, h: 14.986 },\n\t'rests.multimeasure': { d: [['M', 0, -4], ['l', 0, 16], ['l', 1, 0], ['l', 0, -5], ['l', 40, 0], ['l', 0, 5], ['l', 1, 0], ['l', 0, -16], ['l', -1, 0], ['l', 0, 5], ['l', -40, 0], ['l', 0, -5], ['z']], w: 42, h: 18 },\n\t'rests.whole': { d: [['M', 0.06, 0.03], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.49, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 2.19], ['l', 0.00, 2.19], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -5.49, 0.00], ['l', -5.46, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -2.19], ['l', 0.00, -2.19], ['z']], w: 11.25, h: 4.68 },\n\t'rests.half': { d: [['M', 0.06, -4.62], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.49, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 2.19], ['l', 0.00, 2.19], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -5.49, 0.00], ['l', -5.46, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -2.19], ['l', 0.00, -2.19], ['z']], w: 11.25, h: 4.68 },\n\t'rests.quarter': { d: [['M', 1.89, -11.82], ['c', 0.12, -0.06, 0.24, -0.06, 0.36, -0.03], ['c', 0.09, 0.06, 4.74, 5.58, 4.86, 5.82], ['c', 0.21, 0.39, 0.15, 0.78, -0.15, 1.26], ['c', -0.24, 0.33, -0.72, 0.81, -1.62, 1.56], ['c', -0.45, 0.36, -0.87, 0.75, -0.96, 0.84], ['c', -0.93, 0.99, -1.14, 2.49, -0.60, 3.63], ['c', 0.18, 0.39, 0.27, 0.48, 1.32, 1.68], ['c', 1.92, 2.25, 1.83, 2.16, 1.83, 2.34], ['c', 0.00, 0.18, -0.18, 0.36, -0.36, 0.39], ['c', -0.15, 0.00, -0.27, -0.06, -0.48, -0.27], ['c', -0.75, -0.75, -2.46, -1.29, -3.39, -1.08], ['c', -0.45, 0.09, -0.69, 0.27, -0.90, 0.69], ['c', -0.12, 0.30, -0.21, 0.66, -0.24, 1.14], ['c', -0.03, 0.66, 0.09, 1.35, 0.30, 2.01], ['c', 0.15, 0.42, 0.24, 0.66, 0.45, 0.96], ['c', 0.18, 0.24, 0.18, 0.33, 0.03, 0.42], ['c', -0.12, 0.06, -0.18, 0.03, -0.45, -0.30], ['c', -1.08, -1.38, -2.07, -3.36, -2.40, -4.83], ['c', -0.27, -1.05, -0.15, -1.77, 0.27, -2.07], ['c', 0.21, -0.12, 0.42, -0.15, 0.87, -0.15], ['c', 0.87, 0.06, 2.10, 0.39, 3.30, 0.90], ['l', 0.39, 0.18], ['l', -1.65, -1.95], ['c', -2.52, -2.97, -2.61, -3.09, -2.70, -3.27], ['c', -0.09, -0.24, -0.12, -0.48, -0.03, -0.75], ['c', 0.15, -0.48, 0.57, -0.96, 1.83, -2.01], ['c', 0.45, -0.36, 0.84, -0.72, 0.93, -0.78], ['c', 0.69, -0.75, 1.02, -1.80, 0.90, -2.79], ['c', -0.06, -0.33, -0.21, -0.84, -0.39, -1.11], ['c', -0.09, -0.15, -0.45, -0.60, -0.81, -1.05], ['c', -0.36, -0.42, -0.69, -0.81, -0.72, -0.87], ['c', -0.09, -0.18, 0.00, -0.42, 0.21, -0.51], ['z']], w: 7.888, h: 21.435 },\n\t'rests.8th': { d: [['M', 1.68, -6.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.33, -0.09], ['c', 0.39, -0.18, 1.32, -1.29, 1.68, -1.98], ['c', 0.09, -0.21, 0.24, -0.30, 0.39, -0.30], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.27, 1.11, -1.86, 6.42], ['c', -1.02, 3.48, -1.89, 6.39, -1.92, 6.42], ['c', 0.00, 0.03, -0.12, 0.12, -0.24, 0.15], ['c', -0.18, 0.09, -0.21, 0.09, -0.45, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.15, -0.57, 1.68, -4.92], ['c', 0.96, -2.67, 1.74, -4.89, 1.71, -4.89], ['l', -0.51, 0.15], ['c', -1.08, 0.36, -1.74, 0.48, -2.55, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 7.534, h: 13.883 },\n\t'rests.16th': { d: [['M', 3.33, -6.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.15, 0.39, 0.57, 0.57, 0.87, 0.42], ['c', 0.39, -0.18, 1.20, -1.23, 1.62, -2.07], ['c', 0.06, -0.15, 0.24, -0.24, 0.36, -0.24], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.45, 1.86, -2.67, 10.17], ['c', -1.50, 5.55, -2.73, 10.14, -2.76, 10.17], ['c', -0.03, 0.03, -0.12, 0.12, -0.24, 0.15], ['c', -0.18, 0.09, -0.21, 0.09, -0.45, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.12, -0.57, 1.44, -4.92], ['c', 0.81, -2.67, 1.47, -4.86, 1.47, -4.89], ['c', -0.03, 0.00, -0.27, 0.06, -0.54, 0.15], ['c', -1.08, 0.36, -1.77, 0.48, -2.58, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.09, 0.09, 0.27, 0.18, 0.45, 0.21], ['c', 0.12, 0.00, 0.18, 0.00, 0.33, -0.09], ['c', 0.33, -0.15, 1.02, -0.93, 1.41, -1.59], ['c', 0.12, -0.21, 0.18, -0.39, 0.39, -1.08], ['c', 0.66, -2.10, 1.17, -3.84, 1.17, -3.87], ['c', 0.00, 0.00, -0.21, 0.06, -0.42, 0.15], ['c', -0.51, 0.15, -1.20, 0.33, -1.68, 0.42], ['c', -0.33, 0.06, -0.51, 0.06, -0.96, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 9.724, h: 21.383 },\n\t'rests.32nd': { d: [['M', 4.23, -13.62], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.27, -0.06], ['c', 0.33, -0.21, 0.99, -1.11, 1.44, -1.98], ['c', 0.09, -0.24, 0.21, -0.33, 0.39, -0.33], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.57, 2.67, -3.21, 13.89], ['c', -1.80, 7.62, -3.30, 13.89, -3.30, 13.92], ['c', -0.03, 0.06, -0.12, 0.12, -0.24, 0.18], ['c', -0.21, 0.09, -0.24, 0.09, -0.48, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.09, -0.57, 1.23, -4.92], ['c', 0.69, -2.67, 1.26, -4.86, 1.29, -4.89], ['c', 0.00, -0.03, -0.12, -0.03, -0.48, 0.12], ['c', -1.17, 0.39, -2.22, 0.57, -3.00, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.12, 0.09, 0.30, 0.18, 0.48, 0.21], ['c', 0.12, 0.00, 0.18, 0.00, 0.30, -0.09], ['c', 0.42, -0.21, 1.29, -1.29, 1.56, -1.89], ['c', 0.03, -0.12, 1.23, -4.59, 1.23, -4.65], ['c', 0.00, -0.03, -0.18, 0.03, -0.39, 0.12], ['c', -0.63, 0.18, -1.20, 0.36, -1.74, 0.45], ['c', -0.39, 0.06, -0.54, 0.06, -1.02, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.18, 0.18, 0.51, 0.27, 0.72, 0.15], ['c', 0.30, -0.12, 0.69, -0.57, 1.08, -1.17], ['c', 0.42, -0.60, 0.39, -0.51, 1.05, -3.03], ['c', 0.33, -1.26, 0.60, -2.31, 0.60, -2.34], ['c', 0.00, 0.00, -0.21, 0.03, -0.45, 0.12], ['c', -0.57, 0.18, -1.14, 0.33, -1.62, 0.42], ['c', -0.33, 0.06, -0.51, 0.06, -0.96, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 11.373, h: 28.883 },\n\t'rests.64th': { d: [['M', 5.13, -13.62], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.21, 0.54, 0.30, 0.75, 0.18], ['c', 0.24, -0.12, 0.63, -0.66, 1.08, -1.56], ['c', 0.33, -0.66, 0.39, -0.72, 0.60, -0.72], ['c', 0.12, 0.00, 0.27, 0.09, 0.33, 0.18], ['c', 0.03, 0.06, -0.69, 3.66, -3.54, 17.64], ['c', -1.95, 9.66, -3.57, 17.61, -3.57, 17.64], ['c', -0.03, 0.06, -0.12, 0.12, -0.24, 0.18], ['c', -0.21, 0.09, -0.24, 0.09, -0.48, 0.09], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.06, -0.57, 1.05, -4.95], ['c', 0.60, -2.70, 1.08, -4.89, 1.08, -4.92], ['c', 0.00, 0.00, -0.24, 0.06, -0.51, 0.15], ['c', -0.66, 0.24, -1.20, 0.36, -1.77, 0.48], ['c', -0.42, 0.06, -0.57, 0.06, -1.05, 0.06], ['c', -0.69, 0.00, -0.87, -0.03, -1.35, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.72, -1.05, 2.22, -1.23, 3.06, -0.42], ['c', 0.30, 0.33, 0.42, 0.60, 0.60, 1.38], ['c', 0.09, 0.45, 0.21, 0.78, 0.33, 0.90], ['c', 0.09, 0.09, 0.27, 0.18, 0.45, 0.21], ['c', 0.21, 0.03, 0.39, -0.09, 0.72, -0.42], ['c', 0.45, -0.45, 1.02, -1.26, 1.17, -1.65], ['c', 0.03, -0.09, 0.27, -1.14, 0.54, -2.34], ['c', 0.27, -1.20, 0.48, -2.19, 0.51, -2.22], ['c', 0.00, -0.03, -0.09, -0.03, -0.48, 0.12], ['c', -1.17, 0.39, -2.22, 0.57, -3.00, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.15, 0.39, 0.57, 0.57, 0.90, 0.42], ['c', 0.36, -0.18, 1.20, -1.26, 1.47, -1.89], ['c', 0.03, -0.09, 0.30, -1.20, 0.57, -2.43], ['l', 0.51, -2.28], ['l', -0.54, 0.18], ['c', -1.11, 0.36, -1.80, 0.48, -2.61, 0.48], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.21, 0.21, 0.54, 0.30, 0.75, 0.18], ['c', 0.36, -0.18, 0.93, -0.93, 1.29, -1.68], ['c', 0.12, -0.24, 0.18, -0.48, 0.63, -2.55], ['l', 0.51, -2.31], ['c', 0.00, -0.03, -0.18, 0.03, -0.39, 0.12], ['c', -1.14, 0.36, -2.10, 0.54, -2.82, 0.51], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 12.453, h: 36.383 },\n\t'rests.128th': { d: [['M', 6.03, -21.12], ['c', 0.66, -0.09, 1.23, 0.09, 1.68, 0.51], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.21, 0.00, 0.33, -0.06, 0.54, -0.36], ['c', 0.15, -0.21, 0.54, -0.93, 0.78, -1.47], ['c', 0.15, -0.33, 0.18, -0.39, 0.30, -0.48], ['c', 0.18, -0.09, 0.45, 0.00, 0.51, 0.15], ['c', 0.03, 0.09, -7.11, 42.75, -7.17, 42.84], ['c', -0.03, 0.03, -0.15, 0.09, -0.24, 0.15], ['c', -0.18, 0.06, -0.24, 0.06, -0.45, 0.06], ['c', -0.24, 0.00, -0.30, 0.00, -0.48, -0.06], ['c', -0.09, -0.06, -0.21, -0.12, -0.21, -0.15], ['c', -0.06, -0.03, 0.03, -0.57, 0.84, -4.98], ['c', 0.51, -2.70, 0.93, -4.92, 0.90, -4.92], ['c', 0.00, 0.00, -0.15, 0.06, -0.36, 0.12], ['c', -0.78, 0.27, -1.62, 0.48, -2.31, 0.57], ['c', -0.15, 0.03, -0.54, 0.03, -0.81, 0.03], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.63, 0.48], ['c', 0.12, 0.00, 0.18, 0.00, 0.30, -0.09], ['c', 0.42, -0.21, 1.14, -1.11, 1.50, -1.83], ['c', 0.12, -0.27, 0.12, -0.27, 0.54, -2.52], ['c', 0.24, -1.23, 0.42, -2.25, 0.39, -2.25], ['c', 0.00, 0.00, -0.24, 0.06, -0.51, 0.18], ['c', -1.26, 0.39, -2.25, 0.57, -3.06, 0.54], ['c', -0.42, -0.03, -0.75, -0.12, -1.11, -0.30], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.21, 0.51, 0.30, 0.75, 0.18], ['c', 0.36, -0.15, 1.05, -0.99, 1.41, -1.77], ['l', 0.15, -0.30], ['l', 0.42, -2.25], ['c', 0.21, -1.26, 0.42, -2.28, 0.39, -2.28], ['l', -0.51, 0.15], ['c', -1.11, 0.39, -1.89, 0.51, -2.70, 0.51], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.15, 0.63, 0.21, 0.81, 0.33, 0.96], ['c', 0.18, 0.18, 0.48, 0.27, 0.72, 0.21], ['c', 0.33, -0.12, 1.14, -1.26, 1.41, -1.95], ['c', 0.00, -0.09, 0.21, -1.11, 0.45, -2.34], ['c', 0.21, -1.20, 0.39, -2.22, 0.39, -2.28], ['c', 0.03, -0.03, 0.00, -0.03, -0.45, 0.12], ['c', -0.57, 0.18, -1.20, 0.33, -1.71, 0.42], ['c', -0.30, 0.06, -0.51, 0.06, -0.93, 0.06], ['c', -0.66, 0.00, -0.84, -0.03, -1.32, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.36, -0.54, 0.96, -0.87, 1.65, -0.93], ['c', 0.54, -0.03, 1.02, 0.15, 1.41, 0.54], ['c', 0.27, 0.30, 0.39, 0.54, 0.57, 1.26], ['c', 0.09, 0.33, 0.18, 0.66, 0.21, 0.72], ['c', 0.12, 0.27, 0.33, 0.45, 0.60, 0.48], ['c', 0.18, 0.00, 0.36, -0.09, 0.57, -0.33], ['c', 0.33, -0.36, 0.78, -1.14, 0.93, -1.56], ['c', 0.03, -0.12, 0.24, -1.20, 0.45, -2.40], ['c', 0.24, -1.20, 0.42, -2.22, 0.42, -2.28], ['c', 0.03, -0.03, 0.00, -0.03, -0.39, 0.09], ['c', -1.05, 0.36, -1.80, 0.48, -2.58, 0.48], ['c', -0.63, 0.00, -0.84, -0.03, -1.29, -0.27], ['c', -1.32, -0.63, -1.77, -2.16, -1.02, -3.30], ['c', 0.33, -0.45, 0.84, -0.81, 1.38, -0.90], ['z']], w: 12.992, h: 43.883 },\n\t'accidentals.sharp': { d: [['M', 5.73, -11.19], ['c', 0.21, -0.12, 0.54, -0.03, 0.66, 0.24], ['c', 0.06, 0.12, 0.06, 0.21, 0.06, 2.31], ['c', 0.00, 1.23, 0.00, 2.22, 0.03, 2.22], ['c', 0.00, 0.00, 0.27, -0.12, 0.60, -0.24], ['c', 0.69, -0.27, 0.78, -0.30, 0.96, -0.15], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.38], ['c', 0.00, 1.02, 0.00, 1.11, -0.06, 1.20], ['c', -0.03, 0.06, -0.09, 0.12, -0.12, 0.15], ['c', -0.06, 0.03, -0.42, 0.21, -0.84, 0.36], ['l', -0.75, 0.33], ['l', -0.03, 2.43], ['c', 0.00, 1.32, 0.00, 2.43, 0.03, 2.43], ['c', 0.00, 0.00, 0.27, -0.12, 0.60, -0.24], ['c', 0.69, -0.27, 0.78, -0.30, 0.96, -0.15], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.38], ['c', 0.00, 1.02, 0.00, 1.11, -0.06, 1.20], ['c', -0.03, 0.06, -0.09, 0.12, -0.12, 0.15], ['c', -0.06, 0.03, -0.42, 0.21, -0.84, 0.36], ['l', -0.75, 0.33], ['l', -0.03, 2.52], ['c', 0.00, 2.28, -0.03, 2.55, -0.06, 2.64], ['c', -0.21, 0.36, -0.72, 0.36, -0.93, 0.00], ['c', -0.03, -0.09, -0.06, -0.33, -0.06, -2.43], ['l', 0.00, -2.31], ['l', -1.29, 0.51], ['l', -1.26, 0.51], ['l', 0.00, 2.43], ['c', 0.00, 2.58, 0.00, 2.52, -0.15, 2.67], ['c', -0.06, 0.09, -0.27, 0.18, -0.36, 0.18], ['c', -0.12, 0.00, -0.33, -0.09, -0.39, -0.18], ['c', -0.15, -0.15, -0.15, -0.09, -0.15, -2.43], ['c', 0.00, -1.23, 0.00, -2.22, -0.03, -2.22], ['c', 0.00, 0.00, -0.27, 0.12, -0.60, 0.24], ['c', -0.69, 0.27, -0.78, 0.30, -0.96, 0.15], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.38], ['c', 0.00, -1.02, 0.00, -1.11, 0.06, -1.20], ['c', 0.03, -0.06, 0.09, -0.12, 0.12, -0.15], ['c', 0.06, -0.03, 0.42, -0.21, 0.84, -0.36], ['l', 0.78, -0.33], ['l', 0.00, -2.43], ['c', 0.00, -1.32, 0.00, -2.43, -0.03, -2.43], ['c', 0.00, 0.00, -0.27, 0.12, -0.60, 0.24], ['c', -0.69, 0.27, -0.78, 0.30, -0.96, 0.15], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.38], ['c', 0.00, -1.02, 0.00, -1.11, 0.06, -1.20], ['c', 0.03, -0.06, 0.09, -0.12, 0.12, -0.15], ['c', 0.06, -0.03, 0.42, -0.21, 0.84, -0.36], ['l', 0.78, -0.33], ['l', 0.00, -2.52], ['c', 0.00, -2.28, 0.03, -2.55, 0.06, -2.64], ['c', 0.21, -0.36, 0.72, -0.36, 0.93, 0.00], ['c', 0.03, 0.09, 0.06, 0.33, 0.06, 2.43], ['l', 0.03, 2.31], ['l', 1.26, -0.51], ['l', 1.26, -0.51], ['l', 0.00, -2.43], ['c', 0.00, -2.28, 0.00, -2.43, 0.06, -2.55], ['c', 0.06, -0.12, 0.12, -0.18, 0.27, -0.24], ['z'], ['m', -0.33, 10.65], ['l', 0.00, -2.43], ['l', -1.29, 0.51], ['l', -1.26, 0.51], ['l', 0.00, 2.46], ['l', 0.00, 2.43], ['l', 0.09, -0.03], ['c', 0.06, -0.03, 0.63, -0.27, 1.29, -0.51], ['l', 1.17, -0.48], ['l', 0.00, -2.46], ['z']], w: 8.25, h: 22.462 },\n\t'accidentals.halfsharp': { d: [['M', 2.43, -10.05], ['c', 0.21, -0.12, 0.54, -0.03, 0.66, 0.24], ['c', 0.06, 0.12, 0.06, 0.21, 0.06, 2.01], ['c', 0.00, 1.05, 0.00, 1.89, 0.03, 1.89], ['l', 0.72, -0.48], ['c', 0.69, -0.48, 0.69, -0.51, 0.87, -0.51], ['c', 0.15, 0.00, 0.18, 0.03, 0.27, 0.09], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.41], ['c', 0.00, 1.11, -0.03, 1.14, -0.09, 1.23], ['c', -0.03, 0.03, -0.48, 0.39, -1.02, 0.75], ['l', -0.99, 0.66], ['l', 0.00, 2.37], ['c', 0.00, 1.32, 0.00, 2.37, 0.03, 2.37], ['l', 0.72, -0.48], ['c', 0.69, -0.48, 0.69, -0.51, 0.87, -0.51], ['c', 0.15, 0.00, 0.18, 0.03, 0.27, 0.09], ['c', 0.21, 0.15, 0.21, 0.18, 0.21, 1.41], ['c', 0.00, 1.11, -0.03, 1.14, -0.09, 1.23], ['c', -0.03, 0.03, -0.48, 0.39, -1.02, 0.75], ['l', -0.99, 0.66], ['l', 0.00, 2.25], ['c', 0.00, 1.95, 0.00, 2.28, -0.06, 2.37], ['c', -0.06, 0.12, -0.12, 0.21, -0.24, 0.27], ['c', -0.27, 0.12, -0.54, 0.03, -0.69, -0.24], ['c', -0.06, -0.12, -0.06, -0.21, -0.06, -2.01], ['c', 0.00, -1.05, 0.00, -1.89, -0.03, -1.89], ['l', -0.72, 0.48], ['c', -0.69, 0.48, -0.69, 0.48, -0.87, 0.48], ['c', -0.15, 0.00, -0.18, 0.00, -0.27, -0.06], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.41], ['c', 0.00, -1.11, 0.03, -1.14, 0.09, -1.23], ['c', 0.03, -0.03, 0.48, -0.39, 1.02, -0.75], ['l', 0.99, -0.66], ['l', 0.00, -2.37], ['c', 0.00, -1.32, 0.00, -2.37, -0.03, -2.37], ['l', -0.72, 0.48], ['c', -0.69, 0.48, -0.69, 0.48, -0.87, 0.48], ['c', -0.15, 0.00, -0.18, 0.00, -0.27, -0.06], ['c', -0.21, -0.15, -0.21, -0.18, -0.21, -1.41], ['c', 0.00, -1.11, 0.03, -1.14, 0.09, -1.23], ['c', 0.03, -0.03, 0.48, -0.39, 1.02, -0.75], ['l', 0.99, -0.66], ['l', 0.00, -2.25], ['c', 0.00, -2.13, 0.00, -2.28, 0.06, -2.40], ['c', 0.06, -0.12, 0.12, -0.18, 0.27, -0.24], ['z']], w: 5.25, h: 20.174 },\n\t'accidentals.nat': { d: [['M', 0.21, -11.40], ['c', 0.24, -0.06, 0.78, 0.00, 0.99, 0.15], ['c', 0.03, 0.03, 0.03, 0.48, 0.00, 2.61], ['c', -0.03, 1.44, -0.03, 2.61, -0.03, 2.61], ['c', 0.00, 0.03, 0.75, -0.09, 1.68, -0.24], ['c', 0.96, -0.18, 1.71, -0.27, 1.74, -0.27], ['c', 0.15, 0.03, 0.27, 0.15, 0.36, 0.30], ['l', 0.06, 0.12], ['l', 0.09, 8.67], ['c', 0.09, 6.96, 0.12, 8.67, 0.09, 8.67], ['c', -0.03, 0.03, -0.12, 0.06, -0.21, 0.09], ['c', -0.24, 0.09, -0.72, 0.09, -0.96, 0.00], ['c', -0.09, -0.03, -0.18, -0.06, -0.21, -0.09], ['c', -0.03, -0.03, -0.03, -0.48, 0.00, -2.61], ['c', 0.03, -1.44, 0.03, -2.61, 0.03, -2.61], ['c', 0.00, -0.03, -0.75, 0.09, -1.68, 0.24], ['c', -0.96, 0.18, -1.71, 0.27, -1.74, 0.27], ['c', -0.15, -0.03, -0.27, -0.15, -0.36, -0.30], ['l', -0.06, -0.15], ['l', -0.09, -7.53], ['c', -0.06, -4.14, -0.09, -8.04, -0.12, -8.67], ['l', 0.00, -1.11], ['l', 0.15, -0.06], ['c', 0.09, -0.03, 0.21, -0.06, 0.27, -0.09], ['z'], ['m', 3.75, 8.40], ['c', 0.00, -0.33, 0.00, -0.42, -0.03, -0.42], ['c', -0.12, 0.00, -2.79, 0.45, -2.79, 0.48], ['c', -0.03, 0.00, -0.09, 6.30, -0.09, 6.33], ['c', 0.03, 0.00, 2.79, -0.45, 2.82, -0.48], ['c', 0.00, 0.00, 0.09, -4.53, 0.09, -5.91], ['z']], w: 5.4, h: 22.8 },\n\t'accidentals.flat': { d: [['M', -0.36, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z']], w: 6.75, h: 18.801 },\n\t'accidentals.halfflat': { d: [['M', 4.83, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.60, -0.12, 9.06], ['c', -0.09, 5.55, -0.15, 9.06, -0.18, 9.12], ['c', -0.03, 0.09, -0.09, 0.18, -0.15, 0.27], ['c', -0.24, 0.21, -0.54, 0.24, -0.81, 0.06], ['c', -0.06, -0.03, -0.27, -0.24, -0.45, -0.42], ['c', -0.36, -0.42, -0.66, -0.66, -1.80, -1.44], ['c', -1.23, -0.84, -1.83, -1.32, -2.25, -1.77], ['c', -0.66, -0.78, -0.96, -1.56, -0.93, -2.46], ['c', 0.09, -1.41, 1.11, -2.58, 2.40, -2.79], ['c', 0.30, -0.06, 0.84, -0.03, 1.23, 0.06], ['c', 0.54, 0.12, 1.08, 0.33, 1.53, 0.63], ['c', 0.12, 0.09, 0.24, 0.15, 0.24, 0.12], ['c', 0.00, 0.00, -0.12, -8.37, -0.18, -9.75], ['l', 0.00, -0.66], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', -1.65, 10.95], ['c', -0.60, -0.18, -1.08, 0.09, -1.38, 0.69], ['c', -0.27, 0.60, -0.36, 1.38, -0.18, 2.07], ['c', 0.12, 0.42, 0.42, 0.99, 0.72, 1.41], ['c', 0.30, 0.42, 0.93, 1.05, 1.56, 1.59], ['l', 0.48, 0.39], ['l', 0.00, -0.12], ['c', 0.03, -0.09, 0.03, -0.48, 0.06, -0.90], ['c', 0.03, -0.57, 0.03, -1.08, 0.00, -2.22], ['c', -0.03, -1.62, -0.03, -1.62, -0.24, -2.07], ['c', -0.21, -0.42, -0.60, -0.75, -1.02, -0.84], ['z']], w: 6.728, h: 18.801 },\n\t'accidentals.dblflat': { d: [['M', -0.36, -14.07], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z'], ['m', 3, -11], ['c', 0.33, -0.06, 0.87, 0.00, 1.08, 0.15], ['c', 0.06, 0.03, 0.06, 0.36, -0.03, 5.25], ['c', -0.06, 2.85, -0.09, 5.19, -0.09, 5.19], ['c', 0.00, 0.03, 0.12, -0.03, 0.24, -0.12], ['c', 0.63, -0.42, 1.41, -0.66, 2.19, -0.72], ['c', 0.81, -0.03, 1.47, 0.21, 2.04, 0.78], ['c', 0.57, 0.54, 0.87, 1.26, 0.93, 2.04], ['c', 0.03, 0.57, -0.09, 1.08, -0.36, 1.62], ['c', -0.42, 0.81, -1.02, 1.38, -2.82, 2.61], ['c', -1.14, 0.78, -1.44, 1.02, -1.80, 1.44], ['c', -0.18, 0.18, -0.39, 0.39, -0.45, 0.42], ['c', -0.27, 0.18, -0.57, 0.15, -0.81, -0.06], ['c', -0.06, -0.09, -0.12, -0.18, -0.15, -0.27], ['c', -0.03, -0.06, -0.09, -3.27, -0.18, -8.34], ['c', -0.09, -4.53, -0.15, -8.58, -0.18, -9.03], ['l', 0.00, -0.78], ['l', 0.12, -0.06], ['c', 0.06, -0.03, 0.18, -0.09, 0.27, -0.12], ['z'], ['m', 3.18, 11.01], ['c', -0.21, -0.12, -0.54, -0.15, -0.81, -0.06], ['c', -0.54, 0.15, -0.99, 0.63, -1.17, 1.26], ['c', -0.06, 0.30, -0.12, 2.88, -0.06, 3.87], ['c', 0.03, 0.42, 0.03, 0.81, 0.06, 0.90], ['l', 0.03, 0.12], ['l', 0.45, -0.39], ['c', 0.63, -0.54, 1.26, -1.17, 1.56, -1.59], ['c', 0.30, -0.42, 0.60, -0.99, 0.72, -1.41], ['c', 0.18, -0.69, 0.09, -1.47, -0.18, -2.07], ['c', -0.15, -0.30, -0.33, -0.51, -0.60, -0.63], ['z']], w: 12.1, h: 18.804 },\n\t'accidentals.dblsharp': { d: [['M', -0.18, -3.96], ['c', 0.06, -0.03, 0.12, -0.06, 0.15, -0.06], ['c', 0.09, 0.00, 2.76, 0.27, 2.79, 0.30], ['c', 0.12, 0.03, 0.15, 0.12, 0.15, 0.51], ['c', 0.06, 0.96, 0.24, 1.59, 0.57, 2.10], ['c', 0.06, 0.09, 0.15, 0.21, 0.18, 0.24], ['l', 0.09, 0.06], ['l', 0.09, -0.06], ['c', 0.03, -0.03, 0.12, -0.15, 0.18, -0.24], ['c', 0.33, -0.51, 0.51, -1.14, 0.57, -2.10], ['c', 0.00, -0.39, 0.03, -0.45, 0.12, -0.51], ['c', 0.03, 0.00, 0.66, -0.09, 1.44, -0.15], ['c', 1.47, -0.15, 1.50, -0.15, 1.56, -0.03], ['c', 0.03, 0.06, 0.00, 0.42, -0.09, 1.44], ['c', -0.09, 0.72, -0.15, 1.35, -0.15, 1.38], ['c', 0.00, 0.03, -0.03, 0.09, -0.06, 0.12], ['c', -0.06, 0.06, -0.12, 0.09, -0.51, 0.09], ['c', -1.08, 0.06, -1.80, 0.30, -2.28, 0.75], ['l', -0.12, 0.09], ['l', 0.09, 0.09], ['c', 0.12, 0.15, 0.39, 0.33, 0.63, 0.45], ['c', 0.42, 0.18, 0.96, 0.27, 1.68, 0.33], ['c', 0.39, 0.00, 0.45, 0.03, 0.51, 0.09], ['c', 0.03, 0.03, 0.06, 0.09, 0.06, 0.12], ['c', 0.00, 0.03, 0.06, 0.66, 0.15, 1.38], ['c', 0.09, 1.02, 0.12, 1.38, 0.09, 1.44], ['c', -0.06, 0.12, -0.09, 0.12, -1.56, -0.03], ['c', -0.78, -0.06, -1.41, -0.15, -1.44, -0.15], ['c', -0.09, -0.06, -0.12, -0.12, -0.12, -0.54], ['c', -0.06, -0.93, -0.24, -1.56, -0.57, -2.07], ['c', -0.06, -0.09, -0.15, -0.21, -0.18, -0.24], ['l', -0.09, -0.06], ['l', -0.09, 0.06], ['c', -0.03, 0.03, -0.12, 0.15, -0.18, 0.24], ['c', -0.33, 0.51, -0.51, 1.14, -0.57, 2.07], ['c', 0.00, 0.42, -0.03, 0.48, -0.12, 0.54], ['c', -0.03, 0.00, -0.66, 0.09, -1.44, 0.15], ['c', -1.47, 0.15, -1.50, 0.15, -1.56, 0.03], ['c', -0.03, -0.06, 0.00, -0.42, 0.09, -1.44], ['c', 0.09, -0.72, 0.15, -1.35, 0.15, -1.38], ['c', 0.00, -0.03, 0.03, -0.09, 0.06, -0.12], ['c', 0.06, -0.06, 0.12, -0.09, 0.51, -0.09], ['c', 0.72, -0.06, 1.26, -0.15, 1.68, -0.33], ['c', 0.24, -0.12, 0.51, -0.30, 0.63, -0.45], ['l', 0.09, -0.09], ['l', -0.12, -0.09], ['c', -0.48, -0.45, -1.20, -0.69, -2.28, -0.75], ['c', -0.39, 0.00, -0.45, -0.03, -0.51, -0.09], ['c', -0.03, -0.03, -0.06, -0.09, -0.06, -0.12], ['c', 0.00, -0.03, -0.06, -0.63, -0.12, -1.38], ['c', -0.09, -0.72, -0.15, -1.35, -0.15, -1.38], ['z']], w: 7.95, h: 7.977 },\n\t'dots.dot': { d: [['M', 1.32, -1.68], ['c', 0.09, -0.03, 0.27, -0.06, 0.39, -0.06], ['c', 0.96, 0.00, 1.74, 0.78, 1.74, 1.71], ['c', 0.00, 0.96, -0.78, 1.74, -1.71, 1.74], ['c', -0.96, 0.00, -1.74, -0.78, -1.74, -1.71], ['c', 0.00, -0.78, 0.54, -1.50, 1.32, -1.68], ['z']], w: 3.45, h: 3.45 },\n\t'noteheads.dbl': { d: [['M', -0.69, -4.02], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['c', 0.06, 0.15, 0.06, 0.18, 0.06, 1.41], ['l', 0.00, 1.23], ['l', 0.12, -0.18], ['c', 0.72, -1.26, 2.64, -2.31, 4.86, -2.64], ['c', 0.81, -0.15, 1.11, -0.15, 2.13, -0.15], ['c', 0.99, 0.00, 1.29, 0.00, 2.10, 0.15], ['c', 0.75, 0.12, 1.38, 0.27, 2.04, 0.54], ['c', 1.35, 0.51, 2.34, 1.26, 2.82, 2.10], ['l', 0.12, 0.18], ['l', 0.00, -1.23], ['c', 0.00, -1.20, 0.00, -1.26, 0.06, -1.38], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 3.54], ['l', 0.00, 3.54], ['l', -0.06, 0.15], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.06, -0.12, -0.06, -0.18, -0.06, -1.38], ['l', 0.00, -1.23], ['l', -0.12, 0.18], ['c', -0.48, 0.84, -1.47, 1.59, -2.82, 2.10], ['c', -0.84, 0.33, -1.71, 0.54, -2.85, 0.66], ['c', -0.45, 0.06, -2.16, 0.06, -2.61, 0.00], ['c', -1.14, -0.12, -2.01, -0.33, -2.85, -0.66], ['c', -1.35, -0.51, -2.34, -1.26, -2.82, -2.10], ['l', -0.12, -0.18], ['l', 0.00, 1.23], ['c', 0.00, 1.23, 0.00, 1.26, -0.06, 1.38], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['l', -0.06, -0.15], ['l', 0.00, -3.54], ['c', 0.00, -3.48, 0.00, -3.54, 0.06, -3.66], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z'], ['m', 7.71, 0.63], ['c', -0.36, -0.06, -0.90, -0.06, -1.14, 0.00], ['c', -0.30, 0.03, -0.66, 0.24, -0.87, 0.42], ['c', -0.60, 0.54, -0.90, 1.62, -0.75, 2.82], ['c', 0.12, 0.93, 0.51, 1.68, 1.11, 2.31], ['c', 0.75, 0.72, 1.83, 1.20, 2.85, 1.26], ['c', 1.05, 0.06, 1.83, -0.54, 2.10, -1.65], ['c', 0.21, -0.90, 0.12, -1.95, -0.24, -2.82], ['c', -0.36, -0.81, -1.08, -1.53, -1.95, -1.95], ['c', -0.30, -0.15, -0.78, -0.30, -1.11, -0.39], ['z']], w: 16.83, h: 8.145 },\n\t'noteheads.whole': { d: [['M', 6.51, -4.05], ['c', 0.51, -0.03, 2.01, 0.00, 2.52, 0.03], ['c', 1.41, 0.18, 2.64, 0.51, 3.72, 1.08], ['c', 1.20, 0.63, 1.95, 1.41, 2.19, 2.31], ['c', 0.09, 0.33, 0.09, 0.90, 0.00, 1.23], ['c', -0.24, 0.90, -0.99, 1.68, -2.19, 2.31], ['c', -1.08, 0.57, -2.28, 0.90, -3.75, 1.08], ['c', -0.66, 0.06, -2.31, 0.06, -2.97, 0.00], ['c', -1.47, -0.18, -2.67, -0.51, -3.75, -1.08], ['c', -1.20, -0.63, -1.95, -1.41, -2.19, -2.31], ['c', -0.09, -0.33, -0.09, -0.90, 0.00, -1.23], ['c', 0.24, -0.90, 0.99, -1.68, 2.19, -2.31], ['c', 1.20, -0.63, 2.61, -0.99, 4.23, -1.11], ['z'], ['m', 0.57, 0.66], ['c', -0.87, -0.15, -1.53, 0.00, -2.04, 0.51], ['c', -0.15, 0.15, -0.24, 0.27, -0.33, 0.48], ['c', -0.24, 0.51, -0.36, 1.08, -0.33, 1.77], ['c', 0.03, 0.69, 0.18, 1.26, 0.42, 1.77], ['c', 0.60, 1.17, 1.74, 1.98, 3.18, 2.22], ['c', 1.11, 0.21, 1.95, -0.15, 2.34, -0.99], ['c', 0.24, -0.51, 0.36, -1.08, 0.33, -1.80], ['c', -0.06, -1.11, -0.45, -2.04, -1.17, -2.76], ['c', -0.63, -0.63, -1.47, -1.05, -2.40, -1.20], ['z']], w: 14.985, h: 8.097 },\n\t'noteheads.half': { d: [['M', 7.44, -4.05], ['c', 0.06, -0.03, 0.27, -0.03, 0.48, -0.03], ['c', 1.05, 0.00, 1.71, 0.24, 2.10, 0.81], ['c', 0.42, 0.60, 0.45, 1.35, 0.18, 2.40], ['c', -0.42, 1.59, -1.14, 2.73, -2.16, 3.39], ['c', -1.41, 0.93, -3.18, 1.44, -5.40, 1.53], ['c', -1.17, 0.03, -1.89, -0.21, -2.28, -0.81], ['c', -0.42, -0.60, -0.45, -1.35, -0.18, -2.40], ['c', 0.42, -1.59, 1.14, -2.73, 2.16, -3.39], ['c', 0.63, -0.42, 1.23, -0.72, 1.98, -0.96], ['c', 0.90, -0.30, 1.65, -0.42, 3.12, -0.54], ['z'], ['m', 1.29, 0.87], ['c', -0.27, -0.09, -0.63, -0.12, -0.90, -0.03], ['c', -0.72, 0.24, -1.53, 0.69, -3.27, 1.80], ['c', -2.34, 1.50, -3.30, 2.25, -3.57, 2.79], ['c', -0.36, 0.72, -0.06, 1.50, 0.66, 1.77], ['c', 0.24, 0.12, 0.69, 0.09, 0.99, 0.00], ['c', 0.84, -0.30, 1.92, -0.93, 4.14, -2.37], ['c', 1.62, -1.08, 2.37, -1.71, 2.61, -2.19], ['c', 0.36, -0.72, 0.06, -1.50, -0.66, -1.77], ['z']], w: 10.37, h: 8.132 },\n\t'noteheads.quarter': { d: [['M', 6.09, -4.05], ['c', 0.36, -0.03, 1.20, 0.00, 1.53, 0.06], ['c', 1.17, 0.24, 1.89, 0.84, 2.16, 1.83], ['c', 0.06, 0.18, 0.06, 0.30, 0.06, 0.66], ['c', 0.00, 0.45, 0.00, 0.63, -0.15, 1.08], ['c', -0.66, 2.04, -3.06, 3.93, -5.52, 4.38], ['c', -0.54, 0.09, -1.44, 0.09, -1.83, 0.03], ['c', -1.23, -0.27, -1.98, -0.87, -2.25, -1.86], ['c', -0.06, -0.18, -0.06, -0.30, -0.06, -0.66], ['c', 0.00, -0.45, 0.00, -0.63, 0.15, -1.08], ['c', 0.24, -0.78, 0.75, -1.53, 1.44, -2.22], ['c', 1.20, -1.20, 2.85, -2.01, 4.47, -2.22], ['z']], w: 9.81, h: 8.094 },\n\t'noteheads.slash.nostem': { d: [['M', 9.30, -7.77], ['c', 0.06, -0.06, 0.18, -0.06, 1.71, -0.06], ['l', 1.65, 0.00], ['l', 0.09, 0.09], ['c', 0.06, 0.06, 0.06, 0.09, 0.06, 0.15], ['c', -0.03, 0.12, -9.21, 15.24, -9.30, 15.33], ['c', -0.06, 0.06, -0.18, 0.06, -1.71, 0.06], ['l', -1.65, 0.00], ['l', -0.09, -0.09], ['c', -0.06, -0.06, -0.06, -0.09, -0.06, -0.15], ['c', 0.03, -0.12, 9.21, -15.24, 9.30, -15.33], ['z']], w: 12.81, h: 15.63 },\n\t'noteheads.indeterminate': { d: [['M', 0.78, -4.05], ['c', 0.12, -0.03, 0.24, -0.03, 0.36, 0.03], ['c', 0.03, 0.03, 0.93, 0.72, 1.95, 1.56], ['l', 1.86, 1.50], ['l', 1.86, -1.50], ['c', 1.02, -0.84, 1.92, -1.53, 1.95, -1.56], ['c', 0.21, -0.12, 0.33, -0.09, 0.75, 0.24], ['c', 0.30, 0.27, 0.36, 0.36, 0.36, 0.54], ['c', 0.00, 0.03, -0.03, 0.12, -0.06, 0.18], ['c', -0.03, 0.06, -0.90, 0.75, -1.89, 1.56], ['l', -1.80, 1.47], ['c', 0.00, 0.03, 0.81, 0.69, 1.80, 1.50], ['c', 0.99, 0.81, 1.86, 1.50, 1.89, 1.56], ['c', 0.03, 0.06, 0.06, 0.15, 0.06, 0.18], ['c', 0.00, 0.18, -0.06, 0.27, -0.36, 0.54], ['c', -0.42, 0.33, -0.54, 0.36, -0.75, 0.24], ['c', -0.03, -0.03, -0.93, -0.72, -1.95, -1.56], ['l', -1.86, -1.50], ['l', -1.86, 1.50], ['c', -1.02, 0.84, -1.92, 1.53, -1.95, 1.56], ['c', -0.21, 0.12, -0.33, 0.09, -0.75, -0.24], ['c', -0.30, -0.27, -0.36, -0.36, -0.36, -0.54], ['c', 0.00, -0.03, 0.03, -0.12, 0.06, -0.18], ['c', 0.03, -0.06, 0.90, -0.75, 1.89, -1.56], ['l', 1.80, -1.47], ['c', 0.00, -0.03, -0.81, -0.69, -1.80, -1.50], ['c', -0.99, -0.81, -1.86, -1.50, -1.89, -1.56], ['c', -0.06, -0.12, -0.09, -0.21, -0.03, -0.36], ['c', 0.03, -0.09, 0.57, -0.57, 0.72, -0.63], ['z']], w: 9.843, h: 8.139 },\n\t'scripts.ufermata': { d: [['M', -0.75, -10.77], ['c', 0.12, 0.00, 0.45, -0.03, 0.69, -0.03], ['c', 2.91, -0.03, 5.55, 1.53, 7.41, 4.35], ['c', 1.17, 1.71, 1.95, 3.72, 2.43, 6.03], ['c', 0.12, 0.51, 0.12, 0.57, 0.03, 0.69], ['c', -0.12, 0.21, -0.48, 0.27, -0.69, 0.12], ['c', -0.12, -0.09, -0.18, -0.24, -0.27, -0.69], ['c', -0.78, -3.63, -3.42, -6.54, -6.78, -7.38], ['c', -0.78, -0.21, -1.20, -0.24, -2.07, -0.24], ['c', -0.63, 0.00, -0.84, 0.00, -1.20, 0.06], ['c', -1.83, 0.27, -3.42, 1.08, -4.80, 2.37], ['c', -1.41, 1.35, -2.40, 3.21, -2.85, 5.19], ['c', -0.09, 0.45, -0.15, 0.60, -0.27, 0.69], ['c', -0.21, 0.15, -0.57, 0.09, -0.69, -0.12], ['c', -0.09, -0.12, -0.09, -0.18, 0.03, -0.69], ['c', 0.33, -1.62, 0.78, -3.00, 1.47, -4.38], ['c', 1.77, -3.54, 4.44, -5.67, 7.56, -5.97], ['z'], ['m', 0.33, 7.47], ['c', 1.38, -0.30, 2.58, 0.90, 2.31, 2.25], ['c', -0.15, 0.72, -0.78, 1.35, -1.47, 1.50], ['c', -1.38, 0.27, -2.58, -0.93, -2.31, -2.31], ['c', 0.15, -0.69, 0.78, -1.29, 1.47, -1.44], ['z']], w: 19.748, h: 11.289 },\n\t'scripts.dfermata': { d: [['M', -9.63, -0.42], ['c', 0.15, -0.09, 0.36, -0.06, 0.51, 0.03], ['c', 0.12, 0.09, 0.18, 0.24, 0.27, 0.66], ['c', 0.78, 3.66, 3.42, 6.57, 6.78, 7.41], ['c', 0.78, 0.21, 1.20, 0.24, 2.07, 0.24], ['c', 0.63, 0.00, 0.84, 0.00, 1.20, -0.06], ['c', 1.83, -0.27, 3.42, -1.08, 4.80, -2.37], ['c', 1.41, -1.35, 2.40, -3.21, 2.85, -5.22], ['c', 0.09, -0.42, 0.15, -0.57, 0.27, -0.66], ['c', 0.21, -0.15, 0.57, -0.09, 0.69, 0.12], ['c', 0.09, 0.12, 0.09, 0.18, -0.03, 0.69], ['c', -0.33, 1.62, -0.78, 3.00, -1.47, 4.38], ['c', -1.92, 3.84, -4.89, 6.00, -8.31, 6.00], ['c', -3.42, 0.00, -6.39, -2.16, -8.31, -6.00], ['c', -0.48, -0.96, -0.84, -1.92, -1.14, -2.97], ['c', -0.18, -0.69, -0.42, -1.74, -0.42, -1.92], ['c', 0.00, -0.12, 0.09, -0.27, 0.24, -0.33], ['z'], ['m', 9.21, 0.00], ['c', 1.20, -0.27, 2.34, 0.63, 2.34, 1.86], ['c', 0.00, 0.90, -0.66, 1.68, -1.50, 1.89], ['c', -1.38, 0.27, -2.58, -0.93, -2.31, -2.31], ['c', 0.15, -0.69, 0.78, -1.29, 1.47, -1.44], ['z']], w: 19.744, h: 11.274 },\n\t'scripts.sforzato': { d: [['M', -6.45, -3.69], ['c', 0.06, -0.03, 0.15, -0.06, 0.18, -0.06], ['c', 0.06, 0.00, 2.85, 0.72, 6.24, 1.59], ['l', 6.33, 1.65], ['c', 0.33, 0.06, 0.45, 0.21, 0.45, 0.51], ['c', 0.00, 0.30, -0.12, 0.45, -0.45, 0.51], ['l', -6.33, 1.65], ['c', -3.39, 0.87, -6.18, 1.59, -6.21, 1.59], ['c', -0.21, 0.00, -0.48, -0.24, -0.51, -0.45], ['c', 0.00, -0.15, 0.06, -0.36, 0.18, -0.45], ['c', 0.09, -0.06, 0.87, -0.27, 3.84, -1.05], ['c', 2.04, -0.54, 3.84, -0.99, 4.02, -1.02], ['c', 0.15, -0.06, 1.14, -0.24, 2.22, -0.42], ['c', 1.05, -0.18, 1.92, -0.36, 1.92, -0.36], ['c', 0.00, 0.00, -0.87, -0.18, -1.92, -0.36], ['c', -1.08, -0.18, -2.07, -0.36, -2.22, -0.42], ['c', -0.18, -0.03, -1.98, -0.48, -4.02, -1.02], ['c', -2.97, -0.78, -3.75, -0.99, -3.84, -1.05], ['c', -0.12, -0.09, -0.18, -0.30, -0.18, -0.45], ['c', 0.03, -0.15, 0.15, -0.30, 0.30, -0.39], ['z']], w: 13.5, h: 7.5 },\n\t'scripts.staccato': { d: [['M', -0.36, -1.47], ['c', 0.93, -0.21, 1.86, 0.51, 1.86, 1.47], ['c', 0.00, 0.93, -0.87, 1.65, -1.80, 1.47], ['c', -0.54, -0.12, -1.02, -0.57, -1.14, -1.08], ['c', -0.21, -0.81, 0.27, -1.65, 1.08, -1.86], ['z']], w: 2.989, h: 3.004 },\n\t'scripts.tenuto': { d: [['M', -4.20, -0.48], ['l', 0.12, -0.06], ['l', 4.08, 0.00], ['l', 4.08, 0.00], ['l', 0.12, 0.06], ['c', 0.39, 0.21, 0.39, 0.75, 0.00, 0.96], ['l', -0.12, 0.06], ['l', -4.08, 0.00], ['l', -4.08, 0.00], ['l', -0.12, -0.06], ['c', -0.39, -0.21, -0.39, -0.75, 0.00, -0.96], ['z']], w: 8.985, h: 1.08 },\n\t'scripts.umarcato': { d: [['M', -0.15, -8.19], ['c', 0.15, -0.12, 0.36, -0.03, 0.45, 0.15], ['c', 0.21, 0.42, 3.45, 7.65, 3.45, 7.71], ['c', 0.00, 0.12, -0.12, 0.27, -0.21, 0.30], ['c', -0.03, 0.03, -0.51, 0.03, -1.14, 0.03], ['c', -1.05, 0.00, -1.08, 0.00, -1.17, -0.06], ['c', -0.09, -0.06, -0.24, -0.36, -1.17, -2.40], ['c', -0.57, -1.29, -1.05, -2.34, -1.08, -2.34], ['c', 0.00, -0.03, -0.51, 1.02, -1.08, 2.34], ['c', -0.93, 2.07, -1.08, 2.34, -1.14, 2.40], ['c', -0.06, 0.03, -0.15, 0.06, -0.18, 0.06], ['c', -0.15, 0.00, -0.33, -0.18, -0.33, -0.33], ['c', 0.00, -0.06, 3.24, -7.32, 3.45, -7.71], ['c', 0.03, -0.06, 0.09, -0.15, 0.15, -0.15], ['z']], w: 7.5, h: 8.245 },\n\t'scripts.dmarcato': { d: [['M', -3.57, 0.03], ['c', 0.03, 0.00, 0.57, -0.03, 1.17, -0.03], ['c', 1.05, 0.00, 1.08, 0.00, 1.17, 0.06], ['c', 0.09, 0.06, 0.24, 0.36, 1.17, 2.40], ['c', 0.57, 1.29, 1.05, 2.34, 1.08, 2.34], ['c', 0.00, 0.03, 0.51, -1.02, 1.08, -2.34], ['c', 0.93, -2.07, 1.08, -2.34, 1.14, -2.40], ['c', 0.06, -0.03, 0.15, -0.06, 0.18, -0.06], ['c', 0.15, 0.00, 0.33, 0.18, 0.33, 0.33], ['c', 0.00, 0.09, -3.45, 7.74, -3.54, 7.83], ['c', -0.12, 0.12, -0.30, 0.12, -0.42, 0.00], ['c', -0.09, -0.09, -3.54, -7.74, -3.54, -7.83], ['c', 0.00, -0.09, 0.12, -0.27, 0.18, -0.30], ['z']], w: 7.5, h: 8.25 },\n\t'scripts.stopped': { d: [['M', -0.27, -4.08], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 1.50], ['l', 0.00, 1.47], ['l', 1.47, 0.00], ['l', 1.50, 0.00], ['l', 0.15, 0.06], ['c', 0.15, 0.09, 0.21, 0.15, 0.30, 0.33], ['c', 0.09, 0.18, 0.09, 0.36, 0.00, 0.54], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.12, 0.06, -0.18, 0.06, -1.62, 0.06], ['l', -1.47, 0.00], ['l', 0.00, 1.47], ['l', 0.00, 1.47], ['l', -0.06, 0.15], ['c', -0.09, 0.18, -0.15, 0.24, -0.33, 0.33], ['c', -0.18, 0.09, -0.36, 0.09, -0.54, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['l', -0.06, -0.15], ['l', 0.00, -1.47], ['l', 0.00, -1.47], ['l', -1.47, 0.00], ['c', -1.44, 0.00, -1.50, 0.00, -1.62, -0.06], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.09, -0.36, 0.00, -0.54], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['l', 0.15, -0.06], ['l', 1.47, 0.00], ['l', 1.47, 0.00], ['l', 0.00, -1.47], ['c', 0.00, -1.44, 0.00, -1.50, 0.06, -1.62], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z']], w: 8.295, h: 8.295 },\n\t'scripts.upbow': { d: [['M', -4.65, -15.54], ['c', 0.12, -0.09, 0.36, -0.06, 0.48, 0.03], ['c', 0.03, 0.03, 0.09, 0.09, 0.12, 0.15], ['c', 0.03, 0.06, 0.66, 2.13, 1.41, 4.62], ['c', 1.35, 4.41, 1.38, 4.56, 2.01, 6.96], ['l', 0.63, 2.46], ['l', 0.63, -2.46], ['c', 0.63, -2.40, 0.66, -2.55, 2.01, -6.96], ['c', 0.75, -2.49, 1.38, -4.56, 1.41, -4.62], ['c', 0.06, -0.15, 0.18, -0.21, 0.36, -0.24], ['c', 0.15, 0.00, 0.30, 0.06, 0.39, 0.18], ['c', 0.15, 0.21, 0.24, -0.18, -2.10, 7.56], ['c', -1.20, 3.96, -2.22, 7.32, -2.25, 7.41], ['c', 0.00, 0.12, -0.06, 0.27, -0.09, 0.30], ['c', -0.12, 0.21, -0.60, 0.21, -0.72, 0.00], ['c', -0.03, -0.03, -0.09, -0.18, -0.09, -0.30], ['c', -0.03, -0.09, -1.05, -3.45, -2.25, -7.41], ['c', -2.34, -7.74, -2.25, -7.35, -2.10, -7.56], ['c', 0.03, -0.03, 0.09, -0.09, 0.15, -0.12], ['z']], w: 9.73, h: 15.608 },\n\t'scripts.downbow': { d: [['M', -5.55, -9.93], ['l', 0.09, -0.06], ['l', 5.46, 0.00], ['l', 5.46, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 4.77], ['c', 0.00, 5.28, 0.00, 4.89, -0.18, 5.01], ['c', -0.18, 0.12, -0.42, 0.06, -0.54, -0.12], ['c', -0.06, -0.09, -0.06, -0.18, -0.06, -2.97], ['l', 0.00, -2.85], ['l', -4.83, 0.00], ['l', -4.83, 0.00], ['l', 0.00, 2.85], ['c', 0.00, 2.79, 0.00, 2.88, -0.06, 2.97], ['c', -0.15, 0.24, -0.51, 0.24, -0.66, 0.00], ['c', -0.06, -0.09, -0.06, -0.21, -0.06, -4.89], ['l', 0.00, -4.77], ['z']], w: 11.22, h: 9.992 },\n\t'scripts.turn': { d: [['M', -4.77, -3.90], ['c', 0.36, -0.06, 1.05, -0.06, 1.44, 0.03], ['c', 0.78, 0.15, 1.50, 0.51, 2.34, 1.14], ['c', 0.60, 0.45, 1.05, 0.87, 2.22, 2.01], ['c', 1.11, 1.08, 1.62, 1.50, 2.22, 1.86], ['c', 0.60, 0.36, 1.32, 0.57, 1.92, 0.57], ['c', 0.90, 0.00, 1.71, -0.57, 1.89, -1.35], ['c', 0.24, -0.93, -0.39, -1.89, -1.35, -2.10], ['l', -0.15, -0.06], ['l', -0.09, 0.15], ['c', -0.03, 0.09, -0.15, 0.24, -0.24, 0.33], ['c', -0.72, 0.72, -2.04, 0.54, -2.49, -0.36], ['c', -0.48, -0.93, 0.03, -1.86, 1.17, -2.19], ['c', 0.30, -0.09, 1.02, -0.09, 1.35, 0.00], ['c', 0.99, 0.27, 1.74, 0.87, 2.25, 1.83], ['c', 0.69, 1.41, 0.63, 3.00, -0.21, 4.26], ['c', -0.21, 0.30, -0.69, 0.81, -0.99, 1.02], ['c', -0.30, 0.21, -0.84, 0.45, -1.17, 0.54], ['c', -1.23, 0.36, -2.49, 0.15, -3.72, -0.60], ['c', -0.75, -0.48, -1.41, -1.02, -2.85, -2.46], ['c', -1.11, -1.08, -1.62, -1.50, -2.22, -1.86], ['c', -0.60, -0.36, -1.32, -0.57, -1.92, -0.57], ['c', -0.90, 0.00, -1.71, 0.57, -1.89, 1.35], ['c', -0.24, 0.93, 0.39, 1.89, 1.35, 2.10], ['l', 0.15, 0.06], ['l', 0.09, -0.15], ['c', 0.03, -0.09, 0.15, -0.24, 0.24, -0.33], ['c', 0.72, -0.72, 2.04, -0.54, 2.49, 0.36], ['c', 0.48, 0.93, -0.03, 1.86, -1.17, 2.19], ['c', -0.30, 0.09, -1.02, 0.09, -1.35, 0.00], ['c', -0.99, -0.27, -1.74, -0.87, -2.25, -1.83], ['c', -0.69, -1.41, -0.63, -3.00, 0.21, -4.26], ['c', 0.21, -0.30, 0.69, -0.81, 0.99, -1.02], ['c', 0.48, -0.33, 1.11, -0.57, 1.74, -0.66], ['z']], w: 16.366, h: 7.893 },\n\t'scripts.trill': { d: [['M', -0.51, -16.02], ['c', 0.12, -0.09, 0.21, -0.18, 0.21, -0.18], ['l', -0.81, 4.02], ['l', -0.81, 4.02], ['c', 0.03, 0.00, 0.51, -0.27, 1.08, -0.60], ['c', 0.60, -0.30, 1.14, -0.63, 1.26, -0.66], ['c', 1.14, -0.54, 2.31, -0.60, 3.09, -0.18], ['c', 0.27, 0.15, 0.54, 0.36, 0.60, 0.51], ['l', 0.06, 0.12], ['l', 0.21, -0.21], ['c', 0.90, -0.81, 2.22, -0.99, 3.12, -0.42], ['c', 0.60, 0.42, 0.90, 1.14, 0.78, 2.07], ['c', -0.15, 1.29, -1.05, 2.31, -1.95, 2.25], ['c', -0.48, -0.03, -0.78, -0.30, -0.96, -0.81], ['c', -0.09, -0.27, -0.09, -0.90, -0.03, -1.20], ['c', 0.21, -0.75, 0.81, -1.23, 1.59, -1.32], ['l', 0.24, -0.03], ['l', -0.09, -0.12], ['c', -0.51, -0.66, -1.62, -0.63, -2.31, 0.03], ['c', -0.39, 0.42, -0.30, 0.09, -1.23, 4.77], ['l', -0.81, 4.14], ['c', -0.03, 0.00, -0.12, -0.03, -0.21, -0.09], ['c', -0.33, -0.15, -0.54, -0.18, -0.99, -0.18], ['c', -0.42, 0.00, -0.66, 0.03, -1.05, 0.18], ['c', -0.12, 0.06, -0.21, 0.09, -0.21, 0.09], ['c', 0.00, -0.03, 0.36, -1.86, 0.81, -4.11], ['c', 0.90, -4.47, 0.87, -4.26, 0.69, -4.53], ['c', -0.21, -0.36, -0.66, -0.51, -1.17, -0.36], ['c', -0.15, 0.06, -2.22, 1.14, -2.58, 1.38], ['c', -0.12, 0.09, -0.12, 0.09, -0.21, 0.60], ['l', -0.09, 0.51], ['l', 0.21, 0.24], ['c', 0.63, 0.75, 1.02, 1.47, 1.20, 2.19], ['c', 0.06, 0.27, 0.06, 0.36, 0.06, 0.81], ['c', 0.00, 0.42, 0.00, 0.54, -0.06, 0.78], ['c', -0.15, 0.54, -0.33, 0.93, -0.63, 1.35], ['c', -0.18, 0.24, -0.57, 0.63, -0.81, 0.78], ['c', -0.24, 0.15, -0.63, 0.36, -0.84, 0.42], ['c', -0.27, 0.06, -0.66, 0.06, -0.87, 0.03], ['c', -0.81, -0.18, -1.32, -1.05, -1.38, -2.46], ['c', -0.03, -0.60, 0.03, -0.99, 0.33, -2.46], ['c', 0.21, -1.08, 0.24, -1.32, 0.21, -1.29], ['c', -1.20, 0.48, -2.40, 0.75, -3.21, 0.72], ['c', -0.69, -0.06, -1.17, -0.30, -1.41, -0.72], ['c', -0.39, -0.75, -0.12, -1.80, 0.66, -2.46], ['c', 0.24, -0.18, 0.69, -0.42, 1.02, -0.51], ['c', 0.69, -0.18, 1.53, -0.15, 2.31, 0.09], ['c', 0.30, 0.09, 0.75, 0.30, 0.99, 0.45], ['c', 0.12, 0.09, 0.15, 0.09, 0.15, 0.03], ['c', 0.03, -0.03, 0.33, -1.59, 0.72, -3.45], ['c', 0.36, -1.86, 0.66, -3.42, 0.69, -3.45], ['c', 0.00, -0.03, 0.03, -0.03, 0.21, 0.03], ['c', 0.21, 0.06, 0.27, 0.06, 0.48, 0.06], ['c', 0.42, -0.03, 0.78, -0.18, 1.26, -0.48], ['c', 0.15, -0.12, 0.36, -0.27, 0.48, -0.39], ['z'], ['m', -5.73, 7.68], ['c', -0.27, -0.03, -0.96, -0.06, -1.20, -0.03], ['c', -0.81, 0.12, -1.35, 0.57, -1.50, 1.20], ['c', -0.18, 0.66, 0.12, 1.14, 0.75, 1.29], ['c', 0.66, 0.12, 1.92, -0.12, 3.18, -0.66], ['l', 0.33, -0.15], ['l', 0.09, -0.39], ['c', 0.06, -0.21, 0.09, -0.42, 0.09, -0.45], ['c', 0.00, -0.03, -0.45, -0.30, -0.75, -0.45], ['c', -0.27, -0.15, -0.66, -0.27, -0.99, -0.36], ['z'], ['m', 4.29, 3.63], ['c', -0.24, -0.39, -0.51, -0.75, -0.51, -0.69], ['c', -0.06, 0.12, -0.39, 1.92, -0.45, 2.28], ['c', -0.09, 0.54, -0.12, 1.14, -0.06, 1.38], ['c', 0.06, 0.42, 0.21, 0.60, 0.51, 0.57], ['c', 0.39, -0.06, 0.75, -0.48, 0.93, -1.14], ['c', 0.09, -0.33, 0.09, -1.05, 0.00, -1.38], ['c', -0.09, -0.39, -0.24, -0.69, -0.42, -1.02], ['z']], w: 17.963, h: 16.49 },\n\t'scripts.segno': { d: [['M', -3.72, -11.22], ['c', 0.78, -0.09, 1.59, 0.03, 2.31, 0.42], ['c', 1.20, 0.60, 2.01, 1.71, 2.31, 3.09], ['c', 0.09, 0.42, 0.09, 1.20, 0.03, 1.50], ['c', -0.15, 0.45, -0.39, 0.81, -0.66, 0.93], ['c', -0.33, 0.18, -0.84, 0.21, -1.23, 0.15], ['c', -0.81, -0.18, -1.32, -0.93, -1.26, -1.89], ['c', 0.03, -0.36, 0.09, -0.57, 0.24, -0.90], ['c', 0.15, -0.33, 0.45, -0.60, 0.72, -0.75], ['c', 0.12, -0.06, 0.18, -0.09, 0.18, -0.12], ['c', 0.00, -0.03, -0.03, -0.15, -0.09, -0.24], ['c', -0.18, -0.45, -0.54, -0.87, -0.96, -1.08], ['c', -1.11, -0.57, -2.34, -0.18, -2.88, 0.90], ['c', -0.24, 0.51, -0.33, 1.11, -0.24, 1.83], ['c', 0.27, 1.92, 1.50, 3.54, 3.93, 5.13], ['c', 0.48, 0.33, 1.26, 0.78, 1.29, 0.78], ['c', 0.03, 0.00, 1.35, -2.19, 2.94, -4.89], ['l', 2.88, -4.89], ['l', 0.84, 0.00], ['l', 0.87, 0.00], ['l', -0.03, 0.06], ['c', -0.15, 0.21, -6.15, 10.41, -6.15, 10.44], ['c', 0.00, 0.00, 0.21, 0.15, 0.48, 0.27], ['c', 2.61, 1.47, 4.35, 3.03, 5.13, 4.65], ['c', 1.14, 2.34, 0.51, 5.07, -1.44, 6.39], ['c', -0.66, 0.42, -1.32, 0.63, -2.13, 0.69], ['c', -2.01, 0.09, -3.81, -1.41, -4.26, -3.54], ['c', -0.09, -0.42, -0.09, -1.20, -0.03, -1.50], ['c', 0.15, -0.45, 0.39, -0.81, 0.66, -0.93], ['c', 0.33, -0.18, 0.84, -0.21, 1.23, -0.15], ['c', 0.81, 0.18, 1.32, 0.93, 1.26, 1.89], ['c', -0.03, 0.36, -0.09, 0.57, -0.24, 0.90], ['c', -0.15, 0.33, -0.45, 0.60, -0.72, 0.75], ['c', -0.12, 0.06, -0.18, 0.09, -0.18, 0.12], ['c', 0.00, 0.03, 0.03, 0.15, 0.09, 0.24], ['c', 0.18, 0.45, 0.54, 0.87, 0.96, 1.08], ['c', 1.11, 0.57, 2.34, 0.18, 2.88, -0.90], ['c', 0.24, -0.51, 0.33, -1.11, 0.24, -1.83], ['c', -0.27, -1.92, -1.50, -3.54, -3.93, -5.13], ['c', -0.48, -0.33, -1.26, -0.78, -1.29, -0.78], ['c', -0.03, 0.00, -1.35, 2.19, -2.91, 4.89], ['l', -2.88, 4.89], ['l', -0.87, 0.00], ['l', -0.87, 0.00], ['l', 0.03, -0.06], ['c', 0.15, -0.21, 6.15, -10.41, 6.15, -10.44], ['c', 0.00, 0.00, -0.21, -0.15, -0.48, -0.30], ['c', -2.61, -1.44, -4.35, -3.00, -5.13, -4.62], ['c', -0.90, -1.89, -0.72, -4.02, 0.48, -5.52], ['c', 0.69, -0.84, 1.68, -1.41, 2.73, -1.53], ['z'], ['m', 8.76, 9.09], ['c', 0.03, -0.03, 0.15, -0.03, 0.27, -0.03], ['c', 0.33, 0.03, 0.57, 0.18, 0.72, 0.48], ['c', 0.09, 0.18, 0.09, 0.57, 0.00, 0.75], ['c', -0.09, 0.18, -0.21, 0.30, -0.36, 0.39], ['c', -0.15, 0.06, -0.21, 0.06, -0.39, 0.06], ['c', -0.21, 0.00, -0.27, 0.00, -0.39, -0.06], ['c', -0.30, -0.15, -0.48, -0.45, -0.48, -0.75], ['c', 0.00, -0.39, 0.24, -0.72, 0.63, -0.84], ['z'], ['m', -10.53, 2.61], ['c', 0.03, -0.03, 0.15, -0.03, 0.27, -0.03], ['c', 0.33, 0.03, 0.57, 0.18, 0.72, 0.48], ['c', 0.09, 0.18, 0.09, 0.57, 0.00, 0.75], ['c', -0.09, 0.18, -0.21, 0.30, -0.36, 0.39], ['c', -0.15, 0.06, -0.21, 0.06, -0.39, 0.06], ['c', -0.21, 0.00, -0.27, 0.00, -0.39, -0.06], ['c', -0.30, -0.15, -0.48, -0.45, -0.48, -0.75], ['c', 0.00, -0.39, 0.24, -0.72, 0.63, -0.84], ['z']], w: 15, h: 22.504 },\n\t'scripts.coda': { d: [['M', -0.21, -10.47], ['c', 0.18, -0.12, 0.42, -0.06, 0.54, 0.12], ['c', 0.06, 0.09, 0.06, 0.18, 0.06, 1.50], ['l', 0.00, 1.38], ['l', 0.18, 0.00], ['c', 0.39, 0.06, 0.96, 0.24, 1.38, 0.48], ['c', 1.68, 0.93, 2.82, 3.24, 3.03, 6.12], ['c', 0.03, 0.24, 0.03, 0.45, 0.03, 0.45], ['c', 0.00, 0.03, 0.60, 0.03, 1.35, 0.03], ['c', 1.50, 0.00, 1.47, 0.00, 1.59, 0.18], ['c', 0.09, 0.12, 0.09, 0.30, 0.00, 0.42], ['c', -0.12, 0.18, -0.09, 0.18, -1.59, 0.18], ['c', -0.75, 0.00, -1.35, 0.00, -1.35, 0.03], ['c', 0.00, 0.00, 0.00, 0.21, -0.03, 0.42], ['c', -0.24, 3.15, -1.53, 5.58, -3.45, 6.36], ['c', -0.27, 0.12, -0.72, 0.24, -0.96, 0.27], ['l', -0.18, 0.00], ['l', 0.00, 1.38], ['c', 0.00, 1.32, 0.00, 1.41, -0.06, 1.50], ['c', -0.15, 0.24, -0.51, 0.24, -0.66, 0.00], ['c', -0.06, -0.09, -0.06, -0.18, -0.06, -1.50], ['l', 0.00, -1.38], ['l', -0.18, 0.00], ['c', -0.39, -0.06, -0.96, -0.24, -1.38, -0.48], ['c', -1.68, -0.93, -2.82, -3.24, -3.03, -6.15], ['c', -0.03, -0.21, -0.03, -0.42, -0.03, -0.42], ['c', 0.00, -0.03, -0.60, -0.03, -1.35, -0.03], ['c', -1.50, 0.00, -1.47, 0.00, -1.59, -0.18], ['c', -0.09, -0.12, -0.09, -0.30, 0.00, -0.42], ['c', 0.12, -0.18, 0.09, -0.18, 1.59, -0.18], ['c', 0.75, 0.00, 1.35, 0.00, 1.35, -0.03], ['c', 0.00, 0.00, 0.00, -0.21, 0.03, -0.45], ['c', 0.24, -3.12, 1.53, -5.55, 3.45, -6.33], ['c', 0.27, -0.12, 0.72, -0.24, 0.96, -0.27], ['l', 0.18, 0.00], ['l', 0.00, -1.38], ['c', 0.00, -1.53, 0.00, -1.50, 0.18, -1.62], ['z'], ['m', -0.18, 6.93], ['c', 0.00, -2.97, 0.00, -3.15, -0.06, -3.15], ['c', -0.09, 0.00, -0.51, 0.15, -0.66, 0.21], ['c', -0.87, 0.51, -1.38, 1.62, -1.56, 3.51], ['c', -0.06, 0.54, -0.12, 1.59, -0.12, 2.16], ['l', 0.00, 0.42], ['l', 1.20, 0.00], ['l', 1.20, 0.00], ['l', 0.00, -3.15], ['z'], ['m', 1.17, -3.06], ['c', -0.09, -0.03, -0.21, -0.06, -0.27, -0.09], ['l', -0.12, 0.00], ['l', 0.00, 3.15], ['l', 0.00, 3.15], ['l', 1.20, 0.00], ['l', 1.20, 0.00], ['l', 0.00, -0.81], ['c', -0.06, -2.40, -0.33, -3.69, -0.93, -4.59], ['c', -0.27, -0.39, -0.66, -0.69, -1.08, -0.81], ['z'], ['m', -1.17, 10.14], ['l', 0.00, -3.15], ['l', -1.20, 0.00], ['l', -1.20, 0.00], ['l', 0.00, 0.81], ['c', 0.03, 0.96, 0.06, 1.47, 0.15, 2.13], ['c', 0.24, 2.04, 0.96, 3.12, 2.13, 3.36], ['l', 0.12, 0.00], ['l', 0.00, -3.15], ['z'], ['m', 3.18, -2.34], ['l', 0.00, -0.81], ['l', -1.20, 0.00], ['l', -1.20, 0.00], ['l', 0.00, 3.15], ['l', 0.00, 3.15], ['l', 0.12, 0.00], ['c', 1.17, -0.24, 1.89, -1.32, 2.13, -3.36], ['c', 0.09, -0.66, 0.12, -1.17, 0.15, -2.13], ['z']], w: 16.035, h: 21.062 },\n\t'scripts.comma': { d: [['M', 1.14, -4.62], ['c', 0.30, -0.12, 0.69, -0.03, 0.93, 0.15], ['c', 0.12, 0.12, 0.36, 0.45, 0.51, 0.78], ['c', 0.90, 1.77, 0.54, 4.05, -1.08, 6.75], ['c', -0.36, 0.63, -0.87, 1.38, -0.96, 1.44], ['c', -0.18, 0.12, -0.42, 0.06, -0.54, -0.12], ['c', -0.09, -0.18, -0.09, -0.30, 0.12, -0.60], ['c', 0.96, -1.44, 1.44, -2.97, 1.38, -4.35], ['c', -0.06, -0.93, -0.30, -1.68, -0.78, -2.46], ['c', -0.27, -0.39, -0.33, -0.63, -0.24, -0.96], ['c', 0.09, -0.27, 0.36, -0.54, 0.66, -0.63], ['z']], w: 3.042, h: 9.237 },\n\t'scripts.roll': { d: [['M', 1.95, -6.00], ['c', 0.21, -0.09, 0.36, -0.09, 0.57, 0.00], ['c', 0.39, 0.15, 0.63, 0.39, 1.47, 1.35], ['c', 0.66, 0.75, 0.78, 0.87, 1.08, 1.05], ['c', 0.75, 0.45, 1.65, 0.42, 2.40, -0.06], ['c', 0.12, -0.09, 0.27, -0.27, 0.54, -0.60], ['c', 0.42, -0.54, 0.51, -0.63, 0.69, -0.63], ['c', 0.09, 0.00, 0.30, 0.12, 0.36, 0.21], ['c', 0.09, 0.12, 0.12, 0.30, 0.03, 0.42], ['c', -0.06, 0.12, -3.15, 3.90, -3.30, 4.08], ['c', -0.06, 0.06, -0.18, 0.12, -0.27, 0.18], ['c', -0.27, 0.12, -0.60, 0.06, -0.99, -0.27], ['c', -0.27, -0.21, -0.42, -0.39, -1.08, -1.14], ['c', -0.63, -0.72, -0.81, -0.90, -1.17, -1.08], ['c', -0.36, -0.18, -0.57, -0.21, -0.99, -0.21], ['c', -0.39, 0.00, -0.63, 0.03, -0.93, 0.18], ['c', -0.36, 0.15, -0.51, 0.27, -0.90, 0.81], ['c', -0.24, 0.27, -0.45, 0.51, -0.48, 0.54], ['c', -0.12, 0.09, -0.27, 0.06, -0.39, 0.00], ['c', -0.24, -0.15, -0.33, -0.39, -0.21, -0.60], ['c', 0.09, -0.12, 3.18, -3.87, 3.33, -4.02], ['c', 0.06, -0.06, 0.18, -0.15, 0.24, -0.21], ['z']], w: 10.817, h: 6.125 },\n\t'scripts.prall': { d: [['M', -4.38, -3.69], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['c', 0.03, 0.00, 0.57, -0.84, 1.23, -1.83], ['c', 1.14, -1.68, 1.23, -1.83, 1.35, -1.89], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['l', 0.48, -0.69], ['c', 0.51, -0.78, 0.54, -0.84, 0.69, -0.90], ['c', 0.42, -0.18, 0.87, 0.15, 0.81, 0.60], ['c', -0.03, 0.12, -0.30, 0.51, -1.50, 2.37], ['c', -1.38, 2.07, -1.50, 2.22, -1.62, 2.28], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['c', -0.03, 0.00, -0.57, 0.84, -1.23, 1.83], ['c', -1.14, 1.68, -1.23, 1.83, -1.35, 1.89], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['l', -0.48, 0.69], ['c', -0.51, 0.78, -0.54, 0.84, -0.69, 0.90], ['c', -0.42, 0.18, -0.87, -0.15, -0.81, -0.60], ['c', 0.03, -0.12, 0.30, -0.51, 1.50, -2.37], ['c', 1.38, -2.07, 1.50, -2.22, 1.62, -2.28], ['z']], w: 15.011, h: 7.5 },\n\t'scripts.arpeggio': { d: [['M', 1.5, 0], ['c', 1.5, 2, 1.5, 3, 1.5, 3], ['s', 0, 1, -2, 1.5], ['s', -0.5, 3, 1, 5.5], ['l', 1.5, 0], ['s', -1.75, -2, -1.9, -3.25], ['s', 2.15, -0.6, 2.95, -1.6], ['s', 0.45, -1, 0.5, -1.25], ['s', 0, -1, -2, -3.9], ['l', -1.5, 0], ['z']], w: 5, h: 10 },\n\t'scripts.mordent': { d: [['M', -0.21, -4.95], ['c', 0.27, -0.15, 0.63, 0.00, 0.75, 0.27], ['c', 0.06, 0.12, 0.06, 0.24, 0.06, 1.44], ['l', 0.00, 1.29], ['l', 0.57, -0.84], ['c', 0.51, -0.75, 0.57, -0.84, 0.69, -0.90], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['l', 0.48, -0.69], ['c', 0.51, -0.78, 0.54, -0.84, 0.69, -0.90], ['c', 0.42, -0.18, 0.87, 0.15, 0.81, 0.60], ['c', -0.03, 0.12, -0.30, 0.51, -1.50, 2.37], ['c', -1.38, 2.07, -1.50, 2.22, -1.62, 2.28], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.83, -1.89], ['c', -0.81, -0.99, -1.50, -1.80, -1.53, -1.86], ['c', -0.06, -0.03, -0.06, -0.03, -0.12, 0.03], ['c', -0.06, 0.06, -0.06, 0.15, -0.06, 2.28], ['c', 0.00, 1.95, 0.00, 2.25, -0.06, 2.34], ['c', -0.18, 0.45, -0.81, 0.48, -1.05, 0.03], ['c', -0.03, -0.06, -0.06, -0.24, -0.06, -1.41], ['l', 0.00, -1.35], ['l', -0.57, 0.84], ['c', -0.54, 0.78, -0.60, 0.87, -0.72, 0.93], ['c', -0.06, 0.03, -0.18, 0.06, -0.24, 0.06], ['c', -0.30, 0.00, -0.27, 0.03, -1.89, -1.95], ['l', -1.53, -1.83], ['l', -0.48, 0.69], ['c', -0.51, 0.78, -0.54, 0.84, -0.69, 0.90], ['c', -0.42, 0.18, -0.87, -0.15, -0.81, -0.60], ['c', 0.03, -0.12, 0.30, -0.51, 1.50, -2.37], ['c', 1.38, -2.07, 1.50, -2.22, 1.62, -2.28], ['c', 0.06, -0.03, 0.18, -0.06, 0.24, -0.06], ['c', 0.30, 0.00, 0.27, -0.03, 1.89, 1.95], ['l', 1.53, 1.83], ['c', 0.03, 0.00, 0.06, -0.06, 0.09, -0.09], ['c', 0.06, -0.12, 0.06, -0.15, 0.06, -2.28], ['c', 0.00, -1.92, 0.00, -2.22, 0.06, -2.31], ['c', 0.06, -0.15, 0.15, -0.24, 0.30, -0.30], ['z']], w: 15.011, h: 10.012 },\n\t'flags.u8th': { d: [['M', -0.42, 3.75], ['l', 0.00, -3.75], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.18], ['c', 0.00, 0.30, 0.06, 0.84, 0.12, 1.23], ['c', 0.24, 1.53, 0.90, 3.12, 2.13, 5.16], ['l', 0.99, 1.59], ['c', 0.87, 1.44, 1.38, 2.34, 1.77, 3.09], ['c', 0.81, 1.68, 1.20, 3.06, 1.26, 4.53], ['c', 0.03, 1.53, -0.21, 3.27, -0.75, 5.01], ['c', -0.21, 0.69, -0.51, 1.50, -0.60, 1.59], ['c', -0.09, 0.12, -0.27, 0.21, -0.42, 0.21], ['c', -0.15, 0.00, -0.42, -0.12, -0.51, -0.21], ['c', -0.15, -0.18, -0.18, -0.42, -0.09, -0.66], ['c', 0.15, -0.33, 0.45, -1.20, 0.57, -1.62], ['c', 0.42, -1.38, 0.60, -2.58, 0.60, -3.90], ['c', 0.00, -0.66, 0.00, -0.81, -0.06, -1.11], ['c', -0.39, -2.07, -1.80, -4.26, -4.59, -7.14], ['l', -0.42, -0.45], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -3.75], ['z']], w: 6.692, h: 22.59 },\n\t'flags.u16th': { d: [['M', -0.42, 7.50], ['l', 0.00, -7.50], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.39], ['c', 0.06, 1.08, 0.39, 2.19, 0.99, 3.39], ['c', 0.45, 0.90, 0.87, 1.59, 1.95, 3.12], ['c', 1.29, 1.86, 1.77, 2.64, 2.22, 3.57], ['c', 0.45, 0.93, 0.72, 1.80, 0.87, 2.64], ['c', 0.06, 0.51, 0.06, 1.50, 0.00, 1.92], ['c', -0.12, 0.60, -0.30, 1.20, -0.54, 1.71], ['l', -0.09, 0.24], ['l', 0.18, 0.45], ['c', 0.51, 1.20, 0.72, 2.22, 0.69, 3.42], ['c', -0.06, 1.53, -0.39, 3.03, -0.99, 4.53], ['c', -0.30, 0.75, -0.36, 0.81, -0.57, 0.90], ['c', -0.15, 0.09, -0.33, 0.06, -0.48, 0.00], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.12, -0.75], ['c', 0.66, -1.41, 1.02, -2.88, 1.08, -4.32], ['c', 0.00, -0.60, -0.03, -1.05, -0.18, -1.59], ['c', -0.30, -1.20, -0.99, -2.40, -2.25, -3.87], ['c', -0.42, -0.48, -1.53, -1.62, -2.19, -2.22], ['l', -0.45, -0.42], ['l', -0.03, 1.11], ['l', 0.00, 1.11], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -7.50], ['z'], ['m', 1.65, 0.09], ['c', -0.30, -0.30, -0.69, -0.72, -0.90, -0.87], ['l', -0.33, -0.33], ['l', 0.00, 0.15], ['c', 0.00, 0.30, 0.06, 0.81, 0.15, 1.26], ['c', 0.27, 1.29, 0.87, 2.61, 2.04, 4.29], ['c', 0.15, 0.24, 0.60, 0.87, 0.96, 1.38], ['l', 1.08, 1.53], ['l', 0.42, 0.63], ['c', 0.03, 0.00, 0.12, -0.36, 0.21, -0.72], ['c', 0.06, -0.33, 0.06, -1.20, 0.00, -1.62], ['c', -0.33, -1.71, -1.44, -3.48, -3.63, -5.70], ['z']], w: 6.693, h: 26.337 },\n\t'flags.u32nd': { d: [['M', -0.42, 11.25], ['l', 0.00, -11.25], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.36], ['c', 0.09, 1.68, 0.69, 3.27, 2.07, 5.46], ['l', 0.87, 1.35], ['c', 1.02, 1.62, 1.47, 2.37, 1.86, 3.18], ['c', 0.48, 1.02, 0.78, 1.92, 0.93, 2.88], ['c', 0.06, 0.48, 0.06, 1.50, 0.00, 1.89], ['c', -0.09, 0.42, -0.21, 0.87, -0.36, 1.26], ['l', -0.12, 0.30], ['l', 0.15, 0.39], ['c', 0.69, 1.56, 0.84, 2.88, 0.54, 4.38], ['c', -0.09, 0.45, -0.27, 1.08, -0.45, 1.47], ['l', -0.12, 0.24], ['l', 0.18, 0.36], ['c', 0.33, 0.72, 0.57, 1.56, 0.69, 2.34], ['c', 0.12, 1.02, -0.06, 2.52, -0.42, 3.84], ['c', -0.27, 0.93, -0.75, 2.13, -0.93, 2.31], ['c', -0.18, 0.15, -0.45, 0.18, -0.66, 0.09], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.06, -0.60], ['c', 0.21, -0.36, 0.42, -0.90, 0.57, -1.38], ['c', 0.51, -1.41, 0.69, -3.06, 0.48, -4.08], ['c', -0.15, -0.81, -0.57, -1.68, -1.20, -2.55], ['c', -0.72, -0.99, -1.83, -2.13, -3.30, -3.33], ['l', -0.48, -0.42], ['l', -0.03, 1.53], ['l', 0.00, 1.56], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -11.25], ['z'], ['m', 1.26, -3.96], ['c', -0.27, -0.30, -0.54, -0.60, -0.66, -0.72], ['l', -0.18, -0.21], ['l', 0.00, 0.42], ['c', 0.06, 0.87, 0.24, 1.74, 0.66, 2.67], ['c', 0.36, 0.87, 0.96, 1.86, 1.92, 3.18], ['c', 0.21, 0.33, 0.63, 0.87, 0.87, 1.23], ['c', 0.27, 0.39, 0.60, 0.84, 0.75, 1.08], ['l', 0.27, 0.39], ['l', 0.03, -0.12], ['c', 0.12, -0.45, 0.15, -1.05, 0.09, -1.59], ['c', -0.27, -1.86, -1.38, -3.78, -3.75, -6.33], ['z'], ['m', -0.27, 6.09], ['c', -0.27, -0.21, -0.48, -0.42, -0.51, -0.45], ['c', -0.06, -0.03, -0.06, -0.03, -0.06, 0.21], ['c', 0.00, 0.90, 0.30, 2.04, 0.81, 3.09], ['c', 0.48, 1.02, 0.96, 1.77, 2.37, 3.63], ['c', 0.60, 0.78, 1.05, 1.44, 1.29, 1.77], ['c', 0.06, 0.12, 0.15, 0.21, 0.15, 0.18], ['c', 0.03, -0.03, 0.18, -0.57, 0.24, -0.87], ['c', 0.06, -0.45, 0.06, -1.32, -0.03, -1.74], ['c', -0.09, -0.48, -0.24, -0.90, -0.51, -1.44], ['c', -0.66, -1.35, -1.83, -2.70, -3.75, -4.38], ['z']], w: 6.697, h: 32.145 },\n\t'flags.u64th': { d: [['M', -0.42, 15.00], ['l', 0.00, -15.00], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 0.36], ['c', 0.06, 1.20, 0.39, 2.37, 1.02, 3.66], ['c', 0.39, 0.81, 0.84, 1.56, 1.80, 3.09], ['c', 0.81, 1.26, 1.05, 1.68, 1.35, 2.22], ['c', 0.87, 1.50, 1.35, 2.79, 1.56, 4.08], ['c', 0.06, 0.54, 0.06, 1.56, -0.03, 2.04], ['c', -0.09, 0.48, -0.21, 0.99, -0.36, 1.35], ['l', -0.12, 0.27], ['l', 0.12, 0.27], ['c', 0.09, 0.15, 0.21, 0.45, 0.27, 0.66], ['c', 0.69, 1.89, 0.63, 3.66, -0.18, 5.46], ['l', -0.18, 0.39], ['l', 0.15, 0.33], ['c', 0.30, 0.66, 0.51, 1.44, 0.63, 2.10], ['c', 0.06, 0.48, 0.06, 1.35, 0.00, 1.71], ['c', -0.15, 0.57, -0.42, 1.20, -0.78, 1.68], ['l', -0.21, 0.27], ['l', 0.18, 0.33], ['c', 0.57, 1.05, 0.93, 2.13, 1.02, 3.18], ['c', 0.06, 0.72, 0.00, 1.83, -0.21, 2.79], ['c', -0.18, 1.02, -0.63, 2.34, -1.02, 3.09], ['c', -0.15, 0.33, -0.48, 0.45, -0.78, 0.30], ['c', -0.18, -0.09, -0.27, -0.18, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.30, 0.03, -0.54], ['c', 0.75, -1.50, 1.23, -3.45, 1.17, -4.89], ['c', -0.06, -1.02, -0.42, -2.01, -1.17, -3.15], ['c', -0.48, -0.72, -1.02, -1.35, -1.89, -2.22], ['c', -0.57, -0.57, -1.56, -1.50, -1.92, -1.77], ['l', -0.12, -0.09], ['l', 0.00, 1.68], ['l', 0.00, 1.68], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -15.00], ['z'], ['m', 0.93, -8.07], ['c', -0.27, -0.30, -0.48, -0.54, -0.51, -0.54], ['c', 0.00, 0.00, 0.00, 0.69, 0.03, 1.02], ['c', 0.15, 1.47, 0.75, 2.94, 2.04, 4.83], ['l', 1.08, 1.53], ['c', 0.39, 0.57, 0.84, 1.20, 0.99, 1.44], ['c', 0.15, 0.24, 0.30, 0.45, 0.30, 0.45], ['c', 0.00, 0.00, 0.03, -0.09, 0.06, -0.21], ['c', 0.36, -1.59, -0.15, -3.33, -1.47, -5.40], ['c', -0.63, -0.93, -1.35, -1.83, -2.52, -3.12], ['z'], ['m', 0.06, 6.72], ['c', -0.24, -0.21, -0.48, -0.42, -0.51, -0.45], ['l', -0.06, -0.06], ['l', 0.00, 0.33], ['c', 0.00, 1.20, 0.30, 2.34, 0.93, 3.60], ['c', 0.45, 0.90, 0.96, 1.68, 2.25, 3.51], ['c', 0.39, 0.54, 0.84, 1.17, 1.02, 1.44], ['c', 0.21, 0.33, 0.33, 0.51, 0.33, 0.48], ['c', 0.06, -0.09, 0.21, -0.63, 0.30, -0.99], ['c', 0.06, -0.33, 0.06, -0.45, 0.06, -0.96], ['c', 0.00, -0.60, -0.03, -0.84, -0.18, -1.35], ['c', -0.30, -1.08, -1.02, -2.28, -2.13, -3.57], ['c', -0.39, -0.45, -1.44, -1.47, -2.01, -1.98], ['z'], ['m', 0.00, 6.72], ['c', -0.24, -0.21, -0.48, -0.39, -0.51, -0.42], ['l', -0.06, -0.06], ['l', 0.00, 0.33], ['c', 0.00, 1.41, 0.45, 2.82, 1.38, 4.35], ['c', 0.42, 0.72, 0.72, 1.14, 1.86, 2.73], ['c', 0.36, 0.45, 0.75, 0.99, 0.87, 1.20], ['c', 0.15, 0.21, 0.30, 0.36, 0.30, 0.36], ['c', 0.06, 0.00, 0.30, -0.48, 0.39, -0.75], ['c', 0.09, -0.36, 0.12, -0.63, 0.12, -1.05], ['c', -0.06, -1.05, -0.45, -2.04, -1.20, -3.18], ['c', -0.57, -0.87, -1.11, -1.53, -2.07, -2.49], ['c', -0.36, -0.33, -0.84, -0.78, -1.08, -1.02], ['z']], w: 6.682, h: 39.694 },\n\t'flags.d8th': { d: [['M', 5.67, -21.63], ['c', 0.24, -0.12, 0.54, -0.06, 0.69, 0.15], ['c', 0.06, 0.06, 0.21, 0.36, 0.39, 0.66], ['c', 0.84, 1.77, 1.26, 3.36, 1.32, 5.10], ['c', 0.03, 1.29, -0.21, 2.37, -0.81, 3.63], ['c', -0.60, 1.23, -1.26, 2.13, -3.21, 4.38], ['c', -1.35, 1.53, -1.86, 2.19, -2.40, 2.97], ['c', -0.63, 0.93, -1.11, 1.92, -1.38, 2.79], ['c', -0.15, 0.54, -0.27, 1.35, -0.27, 1.80], ['l', 0.00, 0.15], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -3.75], ['l', 0.00, -3.75], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.48, -0.30], ['c', 1.83, -1.11, 3.12, -2.10, 4.17, -3.12], ['c', 0.78, -0.81, 1.32, -1.53, 1.71, -2.31], ['c', 0.45, -0.93, 0.60, -1.74, 0.51, -2.88], ['c', -0.12, -1.56, -0.63, -3.18, -1.47, -4.68], ['c', -0.12, -0.21, -0.15, -0.33, -0.06, -0.51], ['c', 0.06, -0.15, 0.15, -0.24, 0.33, -0.33], ['z']], w: 8.492, h: 21.691 },\n\t'flags.ugrace': { d: [['M', 6.03, 6.93], ['c', 0.15, -0.09, 0.33, -0.06, 0.51, 0.00], ['c', 0.15, 0.09, 0.21, 0.15, 0.30, 0.33], ['c', 0.09, 0.18, 0.06, 0.39, -0.03, 0.54], ['c', -0.06, 0.15, -10.89, 8.88, -11.07, 8.97], ['c', -0.15, 0.09, -0.33, 0.06, -0.48, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.06, -0.39, 0.03, -0.54], ['c', 0.06, -0.15, 10.89, -8.88, 11.07, -8.97], ['z']], w: 12.019, h: 9.954 },\n\t'flags.dgrace': { d: [['M', -6.06, -15.93], ['c', 0.18, -0.09, 0.33, -0.12, 0.48, -0.06], ['c', 0.18, 0.09, 14.01, 8.04, 14.10, 8.10], ['c', 0.12, 0.12, 0.18, 0.33, 0.18, 0.51], ['c', -0.03, 0.21, -0.15, 0.39, -0.36, 0.48], ['c', -0.18, 0.09, -0.33, 0.12, -0.48, 0.06], ['c', -0.18, -0.09, -14.01, -8.04, -14.10, -8.10], ['c', -0.12, -0.12, -0.18, -0.33, -0.18, -0.51], ['c', 0.03, -0.21, 0.15, -0.39, 0.36, -0.48], ['z']], w: 15.12, h: 9.212 },\n\t'flags.d16th': { d: [['M', 6.84, -22.53], ['c', 0.27, -0.12, 0.57, -0.06, 0.72, 0.15], ['c', 0.15, 0.15, 0.33, 0.87, 0.45, 1.56], ['c', 0.06, 0.33, 0.06, 1.35, 0.00, 1.65], ['c', -0.06, 0.33, -0.15, 0.78, -0.27, 1.11], ['c', -0.12, 0.33, -0.45, 0.96, -0.66, 1.32], ['l', -0.18, 0.27], ['l', 0.09, 0.18], ['c', 0.48, 1.02, 0.72, 2.25, 0.69, 3.30], ['c', -0.06, 1.23, -0.42, 2.28, -1.26, 3.45], ['c', -0.57, 0.87, -0.99, 1.32, -3.00, 3.39], ['c', -1.56, 1.56, -2.22, 2.40, -2.76, 3.45], ['c', -0.42, 0.84, -0.66, 1.80, -0.66, 2.55], ['l', 0.00, 0.15], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -7.50], ['l', 0.00, -7.50], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.14], ['l', 0.00, 1.11], ['l', 0.27, -0.15], ['c', 1.11, -0.57, 1.77, -0.99, 2.52, -1.47], ['c', 2.37, -1.56, 3.69, -3.15, 4.05, -4.83], ['c', 0.03, -0.18, 0.03, -0.39, 0.03, -0.78], ['c', 0.00, -0.60, -0.03, -0.93, -0.24, -1.50], ['c', -0.06, -0.18, -0.12, -0.39, -0.15, -0.45], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.63, 7.50], ['c', -0.06, -0.18, -0.15, -0.36, -0.15, -0.36], ['c', -0.03, 0.00, -0.03, 0.03, -0.06, 0.06], ['c', -0.06, 0.12, -0.96, 1.02, -1.95, 1.98], ['c', -0.63, 0.57, -1.26, 1.17, -1.44, 1.35], ['c', -1.53, 1.62, -2.28, 2.85, -2.55, 4.32], ['c', -0.03, 0.18, -0.03, 0.54, -0.06, 0.99], ['l', 0.00, 0.69], ['l', 0.18, -0.09], ['c', 0.93, -0.54, 2.10, -1.29, 2.82, -1.83], ['c', 0.69, -0.51, 1.02, -0.81, 1.53, -1.29], ['c', 1.86, -1.89, 2.37, -3.66, 1.68, -5.82], ['z']], w: 8.475, h: 22.591 },\n\t'flags.d32nd': { d: [['M', 6.84, -29.13], ['c', 0.27, -0.12, 0.57, -0.06, 0.72, 0.15], ['c', 0.12, 0.12, 0.27, 0.63, 0.36, 1.11], ['c', 0.33, 1.59, 0.06, 3.06, -0.81, 4.47], ['l', -0.18, 0.27], ['l', 0.09, 0.15], ['c', 0.12, 0.24, 0.33, 0.69, 0.45, 1.05], ['c', 0.63, 1.83, 0.45, 3.57, -0.57, 5.22], ['l', -0.18, 0.30], ['l', 0.15, 0.27], ['c', 0.42, 0.87, 0.60, 1.71, 0.57, 2.61], ['c', -0.06, 1.29, -0.48, 2.46, -1.35, 3.78], ['c', -0.54, 0.81, -0.93, 1.29, -2.46, 3.00], ['c', -0.51, 0.54, -1.05, 1.17, -1.26, 1.41], ['c', -1.56, 1.86, -2.25, 3.36, -2.37, 5.01], ['l', 0.00, 0.33], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -11.25], ['l', 0.00, -11.25], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.35], ['l', 0.03, 1.35], ['l', 0.78, -0.39], ['c', 1.38, -0.69, 2.34, -1.26, 3.24, -1.92], ['c', 1.38, -1.02, 2.28, -2.13, 2.64, -3.21], ['c', 0.15, -0.48, 0.18, -0.72, 0.18, -1.29], ['c', 0.00, -0.57, -0.06, -0.90, -0.24, -1.47], ['c', -0.06, -0.18, -0.12, -0.39, -0.15, -0.45], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.63, 7.20], ['c', -0.09, -0.18, -0.12, -0.21, -0.12, -0.15], ['c', -0.03, 0.09, -1.02, 1.08, -2.04, 2.04], ['c', -1.17, 1.08, -1.65, 1.56, -2.07, 2.04], ['c', -0.84, 0.96, -1.38, 1.86, -1.68, 2.76], ['c', -0.21, 0.57, -0.27, 0.99, -0.30, 1.65], ['l', 0.00, 0.54], ['l', 0.66, -0.33], ['c', 3.57, -1.86, 5.49, -3.69, 5.94, -5.70], ['c', 0.06, -0.39, 0.06, -1.20, -0.03, -1.65], ['c', -0.06, -0.39, -0.24, -0.90, -0.36, -1.20], ['z'], ['m', -0.06, 7.20], ['c', -0.06, -0.15, -0.12, -0.33, -0.15, -0.45], ['l', -0.06, -0.18], ['l', -0.18, 0.21], ['l', -1.83, 1.83], ['c', -0.87, 0.90, -1.77, 1.80, -1.95, 2.01], ['c', -1.08, 1.29, -1.62, 2.31, -1.89, 3.51], ['c', -0.06, 0.30, -0.06, 0.51, -0.09, 0.93], ['l', 0.00, 0.57], ['l', 0.09, -0.06], ['c', 0.75, -0.45, 1.89, -1.26, 2.52, -1.74], ['c', 0.81, -0.66, 1.74, -1.53, 2.22, -2.16], ['c', 1.26, -1.53, 1.68, -3.06, 1.32, -4.47], ['z']], w: 8.385, h: 29.191 },\n\t'flags.d64th': { d: [['M', 7.08, -32.88], ['c', 0.30, -0.12, 0.66, -0.03, 0.78, 0.24], ['c', 0.18, 0.33, 0.27, 2.10, 0.15, 2.64], ['c', -0.09, 0.39, -0.21, 0.78, -0.39, 1.08], ['l', -0.15, 0.30], ['l', 0.09, 0.27], ['c', 0.03, 0.12, 0.09, 0.45, 0.12, 0.69], ['c', 0.27, 1.44, 0.18, 2.55, -0.30, 3.60], ['l', -0.12, 0.33], ['l', 0.06, 0.42], ['c', 0.27, 1.35, 0.33, 2.82, 0.21, 3.63], ['c', -0.12, 0.60, -0.30, 1.23, -0.57, 1.80], ['l', -0.15, 0.27], ['l', 0.03, 0.42], ['c', 0.06, 1.02, 0.06, 2.70, 0.03, 3.06], ['c', -0.15, 1.47, -0.66, 2.76, -1.74, 4.41], ['c', -0.45, 0.69, -0.75, 1.11, -1.74, 2.37], ['c', -1.05, 1.38, -1.50, 1.98, -1.95, 2.73], ['c', -0.93, 1.50, -1.38, 2.82, -1.44, 4.20], ['l', 0.00, 0.42], ['l', -0.21, 0.00], ['l', -0.21, 0.00], ['l', 0.00, -15.00], ['l', 0.00, -15.00], ['l', 0.21, 0.00], ['l', 0.21, 0.00], ['l', 0.00, 1.86], ['l', 0.00, 1.89], ['c', 0.00, 0.00, 0.21, -0.03, 0.45, -0.09], ['c', 2.22, -0.39, 4.08, -1.11, 5.19, -2.01], ['c', 0.63, -0.54, 1.02, -1.14, 1.20, -1.80], ['c', 0.06, -0.30, 0.06, -1.14, -0.03, -1.65], ['c', -0.03, -0.18, -0.06, -0.39, -0.09, -0.48], ['c', -0.03, -0.24, 0.12, -0.48, 0.36, -0.60], ['z'], ['m', -0.45, 6.15], ['c', -0.03, -0.18, -0.06, -0.42, -0.06, -0.54], ['l', -0.03, -0.18], ['l', -0.33, 0.30], ['c', -0.42, 0.36, -0.87, 0.72, -1.68, 1.29], ['c', -1.98, 1.38, -2.25, 1.59, -2.85, 2.16], ['c', -0.75, 0.69, -1.23, 1.44, -1.47, 2.19], ['c', -0.15, 0.45, -0.18, 0.63, -0.21, 1.35], ['l', 0.00, 0.66], ['l', 0.39, -0.18], ['c', 1.83, -0.90, 3.45, -1.95, 4.47, -2.91], ['c', 0.93, -0.90, 1.53, -1.83, 1.74, -2.82], ['c', 0.06, -0.33, 0.06, -0.87, 0.03, -1.32], ['z'], ['m', -0.27, 4.86], ['c', -0.03, -0.21, -0.06, -0.36, -0.06, -0.36], ['c', 0.00, -0.03, -0.12, 0.09, -0.24, 0.24], ['c', -0.39, 0.48, -0.99, 1.08, -2.16, 2.19], ['c', -1.47, 1.38, -1.92, 1.83, -2.46, 2.49], ['c', -0.66, 0.87, -1.08, 1.74, -1.29, 2.58], ['c', -0.09, 0.42, -0.15, 0.87, -0.15, 1.44], ['l', 0.00, 0.54], ['l', 0.48, -0.33], ['c', 1.50, -1.02, 2.58, -1.89, 3.51, -2.82], ['c', 1.47, -1.47, 2.25, -2.85, 2.40, -4.26], ['c', 0.03, -0.39, 0.03, -1.17, -0.03, -1.71], ['z'], ['m', -0.66, 7.68], ['c', 0.03, -0.15, 0.03, -0.60, 0.03, -0.99], ['l', 0.00, -0.72], ['l', -0.27, 0.33], ['l', -1.74, 1.98], ['c', -1.77, 1.92, -2.43, 2.76, -2.97, 3.90], ['c', -0.51, 1.02, -0.72, 1.77, -0.75, 2.91], ['c', 0.00, 0.63, 0.00, 0.63, 0.06, 0.60], ['c', 0.03, -0.03, 0.30, -0.27, 0.63, -0.54], ['c', 0.66, -0.60, 1.86, -1.80, 2.31, -2.31], ['c', 1.65, -1.89, 2.52, -3.54, 2.70, -5.16], ['z']], w: 8.485, h: 32.932 },\n\t'clefs.C': { d: [['M', 0.06, -14.94], ['l', 0.09, -0.06], ['l', 1.92, 0.00], ['l', 1.92, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 14.85], ['l', 0.00, 14.82], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.92, 0.00], ['l', -1.92, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -14.82], ['l', 0.00, -14.85], ['z'], ['m', 5.37, 0.00], ['c', 0.09, -0.06, 0.09, -0.06, 0.57, -0.06], ['c', 0.45, 0.00, 0.45, 0.00, 0.54, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.14], ['l', 0.00, 7.11], ['l', 0.09, -0.06], ['c', 0.18, -0.18, 0.72, -0.84, 0.96, -1.20], ['c', 0.30, -0.45, 0.66, -1.17, 0.84, -1.65], ['c', 0.36, -0.90, 0.57, -1.83, 0.60, -2.79], ['c', 0.03, -0.48, 0.03, -0.54, 0.09, -0.63], ['c', 0.12, -0.18, 0.36, -0.21, 0.54, -0.12], ['c', 0.18, 0.09, 0.21, 0.15, 0.24, 0.66], ['c', 0.06, 0.87, 0.21, 1.56, 0.57, 2.22], ['c', 0.51, 1.02, 1.26, 1.68, 2.22, 1.92], ['c', 0.21, 0.06, 0.33, 0.06, 0.78, 0.06], ['c', 0.45, 0.00, 0.57, 0.00, 0.84, -0.06], ['c', 0.45, -0.12, 0.81, -0.33, 1.08, -0.60], ['c', 0.57, -0.57, 0.87, -1.41, 0.99, -2.88], ['c', 0.06, -0.54, 0.06, -3.00, 0.00, -3.57], ['c', -0.21, -2.58, -0.84, -3.87, -2.16, -4.50], ['c', -0.48, -0.21, -1.17, -0.36, -1.77, -0.36], ['c', -0.69, 0.00, -1.29, 0.27, -1.50, 0.72], ['c', -0.06, 0.15, -0.06, 0.21, -0.06, 0.42], ['c', 0.00, 0.24, 0.00, 0.30, 0.06, 0.45], ['c', 0.12, 0.24, 0.24, 0.39, 0.63, 0.66], ['c', 0.42, 0.30, 0.57, 0.48, 0.69, 0.72], ['c', 0.06, 0.15, 0.06, 0.21, 0.06, 0.48], ['c', 0.00, 0.39, -0.03, 0.63, -0.21, 0.96], ['c', -0.30, 0.60, -0.87, 1.08, -1.50, 1.26], ['c', -0.27, 0.06, -0.87, 0.06, -1.14, 0.00], ['c', -0.78, -0.24, -1.44, -0.87, -1.65, -1.68], ['c', -0.12, -0.42, -0.09, -1.17, 0.09, -1.71], ['c', 0.51, -1.65, 1.98, -2.82, 3.81, -3.09], ['c', 0.84, -0.09, 2.46, 0.03, 3.51, 0.27], ['c', 2.22, 0.57, 3.69, 1.80, 4.44, 3.75], ['c', 0.36, 0.93, 0.57, 2.13, 0.57, 3.36], ['c', 0.00, 1.44, -0.48, 2.73, -1.38, 3.81], ['c', -1.26, 1.50, -3.27, 2.43, -5.28, 2.43], ['c', -0.48, 0.00, -0.51, 0.00, -0.75, -0.09], ['c', -0.15, -0.03, -0.48, -0.21, -0.78, -0.36], ['c', -0.69, -0.36, -0.87, -0.42, -1.26, -0.42], ['c', -0.27, 0.00, -0.30, 0.00, -0.51, 0.09], ['c', -0.57, 0.30, -0.81, 0.90, -0.81, 2.10], ['c', 0.00, 1.23, 0.24, 1.83, 0.81, 2.13], ['c', 0.21, 0.09, 0.24, 0.09, 0.51, 0.09], ['c', 0.39, 0.00, 0.57, -0.06, 1.26, -0.42], ['c', 0.30, -0.15, 0.63, -0.33, 0.78, -0.36], ['c', 0.24, -0.09, 0.27, -0.09, 0.75, -0.09], ['c', 2.01, 0.00, 4.02, 0.93, 5.28, 2.40], ['c', 0.90, 1.11, 1.38, 2.40, 1.38, 3.84], ['c', 0.00, 1.50, -0.30, 2.88, -0.84, 3.96], ['c', -0.78, 1.59, -2.19, 2.64, -4.17, 3.15], ['c', -1.05, 0.24, -2.67, 0.36, -3.51, 0.27], ['c', -1.83, -0.27, -3.30, -1.44, -3.81, -3.09], ['c', -0.18, -0.54, -0.21, -1.29, -0.09, -1.74], ['c', 0.15, -0.60, 0.63, -1.20, 1.23, -1.47], ['c', 0.36, -0.18, 0.57, -0.21, 0.99, -0.21], ['c', 0.42, 0.00, 0.63, 0.03, 1.02, 0.21], ['c', 0.42, 0.21, 0.84, 0.63, 1.05, 1.05], ['c', 0.18, 0.36, 0.21, 0.60, 0.21, 0.96], ['c', 0.00, 0.30, 0.00, 0.36, -0.06, 0.51], ['c', -0.12, 0.24, -0.27, 0.42, -0.69, 0.72], ['c', -0.57, 0.42, -0.69, 0.63, -0.69, 1.08], ['c', 0.00, 0.24, 0.00, 0.30, 0.06, 0.45], ['c', 0.12, 0.21, 0.30, 0.39, 0.57, 0.54], ['c', 0.42, 0.18, 0.87, 0.21, 1.53, 0.15], ['c', 1.08, -0.15, 1.80, -0.57, 2.34, -1.32], ['c', 0.54, -0.75, 0.84, -1.83, 0.99, -3.51], ['c', 0.06, -0.57, 0.06, -3.03, 0.00, -3.57], ['c', -0.12, -1.47, -0.42, -2.31, -0.99, -2.88], ['c', -0.27, -0.27, -0.63, -0.48, -1.08, -0.60], ['c', -0.27, -0.06, -0.39, -0.06, -0.84, -0.06], ['c', -0.45, 0.00, -0.57, 0.00, -0.78, 0.06], ['c', -1.14, 0.27, -2.01, 1.17, -2.46, 2.49], ['c', -0.21, 0.57, -0.30, 0.99, -0.33, 1.65], ['c', -0.03, 0.51, -0.06, 0.57, -0.24, 0.66], ['c', -0.12, 0.06, -0.27, 0.06, -0.39, 0.00], ['c', -0.21, -0.09, -0.21, -0.15, -0.24, -0.75], ['c', -0.09, -1.92, -0.78, -3.72, -2.01, -5.19], ['c', -0.18, -0.21, -0.36, -0.42, -0.39, -0.45], ['l', -0.09, -0.06], ['l', 0.00, 7.11], ['l', 0.00, 7.14], ['l', -0.06, 0.09], ['c', -0.09, 0.06, -0.09, 0.06, -0.54, 0.06], ['c', -0.48, 0.00, -0.48, 0.00, -0.57, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -14.82], ['l', 0.00, -14.85], ['z']], w: 20.31, h: 29.97 },\n\t'clefs.F': { d: [['M', 6.30, -7.80], ['c', 0.36, -0.03, 1.65, 0.00, 2.13, 0.03], ['c', 3.60, 0.42, 6.03, 2.10, 6.93, 4.86], ['c', 0.27, 0.84, 0.36, 1.50, 0.36, 2.58], ['c', 0.00, 0.90, -0.03, 1.35, -0.18, 2.16], ['c', -0.78, 3.78, -3.54, 7.08, -8.37, 9.96], ['c', -1.74, 1.05, -3.87, 2.13, -6.18, 3.12], ['c', -0.39, 0.18, -0.75, 0.33, -0.81, 0.36], ['c', -0.06, 0.03, -0.15, 0.06, -0.18, 0.06], ['c', -0.15, 0.00, -0.33, -0.18, -0.33, -0.33], ['c', 0.00, -0.15, 0.06, -0.21, 0.51, -0.48], ['c', 3.00, -1.77, 5.13, -3.21, 6.84, -4.74], ['c', 0.51, -0.45, 1.59, -1.50, 1.95, -1.95], ['c', 1.89, -2.19, 2.88, -4.32, 3.15, -6.78], ['c', 0.06, -0.42, 0.06, -1.77, 0.00, -2.19], ['c', -0.24, -2.01, -0.93, -3.63, -2.04, -4.71], ['c', -0.63, -0.63, -1.29, -1.02, -2.07, -1.20], ['c', -1.62, -0.39, -3.36, 0.15, -4.56, 1.44], ['c', -0.54, 0.60, -1.05, 1.47, -1.32, 2.22], ['l', -0.09, 0.21], ['l', 0.24, -0.12], ['c', 0.39, -0.21, 0.63, -0.24, 1.11, -0.24], ['c', 0.30, 0.00, 0.45, 0.00, 0.66, 0.06], ['c', 1.92, 0.48, 2.85, 2.55, 1.95, 4.38], ['c', -0.45, 0.99, -1.41, 1.62, -2.46, 1.71], ['c', -1.47, 0.09, -2.91, -0.87, -3.39, -2.25], ['c', -0.18, -0.57, -0.21, -1.32, -0.03, -2.28], ['c', 0.39, -2.25, 1.83, -4.20, 3.81, -5.19], ['c', 0.69, -0.36, 1.59, -0.60, 2.37, -0.69], ['z'], ['m', 11.58, 2.52], ['c', 0.84, -0.21, 1.71, 0.30, 1.89, 1.14], ['c', 0.30, 1.17, -0.72, 2.19, -1.89, 1.89], ['c', -0.99, -0.21, -1.50, -1.32, -1.02, -2.25], ['c', 0.18, -0.39, 0.60, -0.69, 1.02, -0.78], ['z'], ['m', 0.00, 7.50], ['c', 0.84, -0.21, 1.71, 0.30, 1.89, 1.14], ['c', 0.21, 0.87, -0.30, 1.71, -1.14, 1.89], ['c', -0.87, 0.21, -1.71, -0.30, -1.89, -1.14], ['c', -0.21, -0.84, 0.30, -1.71, 1.14, -1.89], ['z']], w: 20.153, h: 23.142 },\n\t'clefs.G': { d: [['M', 9.69, -37.41], ['c', 0.09, -0.09, 0.24, -0.06, 0.36, 0.00], ['c', 0.12, 0.09, 0.57, 0.60, 0.96, 1.11], ['c', 1.77, 2.34, 3.21, 5.85, 3.57, 8.73], ['c', 0.21, 1.56, 0.03, 3.27, -0.45, 4.86], ['c', -0.69, 2.31, -1.92, 4.47, -4.23, 7.44], ['c', -0.30, 0.39, -0.57, 0.72, -0.60, 0.75], ['c', -0.03, 0.06, 0.00, 0.15, 0.18, 0.78], ['c', 0.54, 1.68, 1.38, 4.44, 1.68, 5.49], ['l', 0.09, 0.42], ['l', 0.39, 0.00], ['c', 1.47, 0.09, 2.76, 0.51, 3.96, 1.29], ['c', 1.83, 1.23, 3.06, 3.21, 3.39, 5.52], ['c', 0.09, 0.45, 0.12, 1.29, 0.06, 1.74], ['c', -0.09, 1.02, -0.33, 1.83, -0.75, 2.73], ['c', -0.84, 1.71, -2.28, 3.06, -4.02, 3.72], ['l', -0.33, 0.12], ['l', 0.03, 1.26], ['c', 0.00, 1.74, -0.06, 3.63, -0.21, 4.62], ['c', -0.45, 3.06, -2.19, 5.49, -4.47, 6.21], ['c', -0.57, 0.18, -0.90, 0.21, -1.59, 0.21], ['c', -0.69, 0.00, -1.02, -0.03, -1.65, -0.21], ['c', -1.14, -0.27, -2.13, -0.84, -2.94, -1.65], ['c', -0.99, -0.99, -1.56, -2.16, -1.71, -3.54], ['c', -0.09, -0.81, 0.06, -1.53, 0.45, -2.13], ['c', 0.63, -0.99, 1.83, -1.56, 3.00, -1.53], ['c', 1.50, 0.09, 2.64, 1.32, 2.73, 2.94], ['c', 0.06, 1.47, -0.93, 2.70, -2.37, 2.97], ['c', -0.45, 0.06, -0.84, 0.03, -1.29, -0.09], ['l', -0.21, -0.09], ['l', 0.09, 0.12], ['c', 0.39, 0.54, 0.78, 0.93, 1.32, 1.26], ['c', 1.35, 0.87, 3.06, 1.02, 4.35, 0.36], ['c', 1.44, -0.72, 2.52, -2.28, 2.97, -4.35], ['c', 0.15, -0.66, 0.24, -1.50, 0.30, -3.03], ['c', 0.03, -0.84, 0.03, -2.94, 0.00, -3.00], ['c', -0.03, 0.00, -0.18, 0.00, -0.36, 0.03], ['c', -0.66, 0.12, -0.99, 0.12, -1.83, 0.12], ['c', -1.05, 0.00, -1.71, -0.06, -2.61, -0.30], ['c', -4.02, -0.99, -7.11, -4.35, -7.80, -8.46], ['c', -0.12, -0.66, -0.12, -0.99, -0.12, -1.83], ['c', 0.00, -0.84, 0.00, -1.14, 0.15, -1.92], ['c', 0.36, -2.28, 1.41, -4.62, 3.30, -7.29], ['l', 2.79, -3.60], ['c', 0.54, -0.66, 0.96, -1.20, 0.96, -1.23], ['c', 0.00, -0.03, -0.09, -0.33, -0.18, -0.69], ['c', -0.96, -3.21, -1.41, -5.28, -1.59, -7.68], ['c', -0.12, -1.38, -0.15, -3.09, -0.06, -3.96], ['c', 0.33, -2.67, 1.38, -5.07, 3.12, -7.08], ['c', 0.36, -0.42, 0.99, -1.05, 1.17, -1.14], ['z'], ['m', 2.01, 4.71], ['c', -0.15, -0.30, -0.30, -0.54, -0.30, -0.54], ['c', -0.03, 0.00, -0.18, 0.09, -0.30, 0.21], ['c', -2.40, 1.74, -3.87, 4.20, -4.26, 7.11], ['c', -0.06, 0.54, -0.06, 1.41, -0.03, 1.89], ['c', 0.09, 1.29, 0.48, 3.12, 1.08, 5.22], ['c', 0.15, 0.42, 0.24, 0.78, 0.24, 0.81], ['c', 0.00, 0.03, 0.84, -1.11, 1.23, -1.68], ['c', 1.89, -2.73, 2.88, -5.07, 3.15, -7.53], ['c', 0.09, -0.57, 0.12, -1.74, 0.06, -2.37], ['c', -0.09, -1.23, -0.27, -1.92, -0.87, -3.12], ['z'], ['m', -2.94, 20.70], ['c', -0.21, -0.72, -0.39, -1.32, -0.42, -1.32], ['c', 0.00, 0.00, -1.20, 1.47, -1.86, 2.37], ['c', -2.79, 3.63, -4.02, 6.30, -4.35, 9.30], ['c', -0.03, 0.21, -0.03, 0.69, -0.03, 1.08], ['c', 0.00, 0.69, 0.00, 0.75, 0.06, 1.11], ['c', 0.12, 0.54, 0.27, 0.99, 0.51, 1.47], ['c', 0.69, 1.38, 1.83, 2.55, 3.42, 3.42], ['c', 0.96, 0.54, 2.07, 0.90, 3.21, 1.08], ['c', 0.78, 0.12, 2.04, 0.12, 2.94, -0.03], ['c', 0.51, -0.06, 0.45, -0.03, 0.42, -0.30], ['c', -0.24, -3.33, -0.72, -6.33, -1.62, -10.08], ['c', -0.09, -0.39, -0.18, -0.75, -0.18, -0.78], ['c', -0.03, -0.03, -0.42, 0.00, -0.81, 0.09], ['c', -0.90, 0.18, -1.65, 0.57, -2.22, 1.14], ['c', -0.72, 0.72, -1.08, 1.65, -1.05, 2.64], ['c', 0.06, 0.96, 0.48, 1.83, 1.23, 2.58], ['c', 0.36, 0.36, 0.72, 0.63, 1.17, 0.90], ['c', 0.33, 0.18, 0.36, 0.21, 0.42, 0.33], ['c', 0.18, 0.42, -0.18, 0.90, -0.60, 0.87], ['c', -0.18, -0.03, -0.84, -0.36, -1.26, -0.63], ['c', -0.78, -0.51, -1.38, -1.11, -1.86, -1.83], ['c', -1.77, -2.70, -0.99, -6.42, 1.71, -8.19], ['c', 0.30, -0.21, 0.81, -0.48, 1.17, -0.63], ['c', 0.30, -0.09, 1.02, -0.30, 1.14, -0.30], ['c', 0.06, 0.00, 0.09, 0.00, 0.09, -0.03], ['c', 0.03, -0.03, -0.51, -1.92, -1.23, -4.26], ['z'], ['m', 3.78, 7.41], ['c', -0.18, -0.03, -0.36, -0.06, -0.39, -0.06], ['c', -0.03, 0.00, 0.00, 0.21, 0.18, 1.02], ['c', 0.75, 3.18, 1.26, 6.30, 1.50, 9.09], ['c', 0.06, 0.72, 0.00, 0.69, 0.51, 0.42], ['c', 0.78, -0.36, 1.44, -0.96, 1.98, -1.77], ['c', 1.08, -1.62, 1.20, -3.69, 0.30, -5.55], ['c', -0.81, -1.62, -2.31, -2.79, -4.08, -3.15], ['z']], w: 19.051, h: 57.057 },\n\t'clefs.perc': { d: [['M', 5.07, -7.44], ['l', 0.09, -0.06], ['l', 1.53, 0.00], ['l', 1.53, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.35], ['l', 0.00, 7.32], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.53, 0.00], ['l', -1.53, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -7.32], ['l', 0.00, -7.35], ['z'], ['m', 6.63, 0.00], ['l', 0.09, -0.06], ['l', 1.53, 0.00], ['l', 1.53, 0.00], ['l', 0.09, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 7.35], ['l', 0.00, 7.32], ['l', -0.06, 0.09], ['l', -0.09, 0.06], ['l', -1.53, 0.00], ['l', -1.53, 0.00], ['l', -0.09, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -7.32], ['l', 0.00, -7.35], ['z']], w: 21, h: 14.97 },\n\t'tab.big': { d: [['M', 20.16, -21.66], ['c', 0.24, -0.09, 0.66, 0.09, 0.78, 0.36], ['c', 0.09, 0.21, 0.09, 0.24, -0.18, 0.54], ['c', -0.78, 0.81, -1.86, 1.44, -2.94, 1.71], ['c', -0.87, 0.24, -1.71, 0.24, -2.55, 0.03], ['l', -0.06, -0.03], ['l', -0.18, 0.99], ['c', -0.33, 1.98, -0.75, 4.26, -0.96, 5.04], ['c', -0.42, 1.65, -1.26, 3.18, -2.28, 4.14], ['c', -0.57, 0.57, -1.17, 0.90, -1.86, 1.08], ['c', -0.18, 0.06, -0.33, 0.06, -0.66, 0.06], ['c', -0.54, 0.00, -0.78, -0.03, -1.23, -0.27], ['c', -0.39, -0.18, -0.66, -0.39, -1.38, -0.99], ['c', -0.30, -0.24, -0.66, -0.51, -0.75, -0.57], ['c', -0.21, -0.15, -0.27, -0.24, -0.24, -0.45], ['c', 0.06, -0.27, 0.36, -0.60, 0.60, -0.66], ['c', 0.18, -0.03, 0.33, 0.06, 0.90, 0.57], ['c', 0.48, 0.42, 0.72, 0.57, 0.93, 0.69], ['c', 0.66, 0.33, 1.38, 0.21, 1.95, -0.36], ['c', 0.63, -0.60, 1.05, -1.62, 1.23, -3.00], ['c', 0.03, -0.18, 0.09, -0.66, 0.09, -1.11], ['c', 0.09, -1.56, 0.33, -3.81, 0.57, -5.49], ['c', 0.06, -0.33, 0.09, -0.63, 0.09, -0.63], ['c', -0.03, -0.03, -0.81, -0.12, -1.02, -0.12], ['c', -0.57, 0.00, -1.32, 0.12, -1.80, 0.33], ['c', -0.87, 0.30, -1.35, 0.78, -1.50, 1.41], ['c', -0.18, 0.63, 0.09, 1.26, 0.66, 1.65], ['c', 0.12, 0.06, 0.15, 0.12, 0.18, 0.24], ['c', 0.09, 0.27, 0.06, 0.57, -0.09, 0.75], ['c', -0.03, 0.06, -0.12, 0.09, -0.27, 0.15], ['c', -0.72, 0.21, -1.44, 0.15, -2.10, -0.18], ['c', -0.54, -0.27, -0.96, -0.66, -1.20, -1.14], ['c', -0.39, -0.75, -0.33, -1.74, 0.15, -2.52], ['c', 0.27, -0.42, 0.84, -0.93, 1.41, -1.23], ['c', 1.17, -0.57, 2.88, -0.90, 4.80, -0.90], ['c', 0.69, 0.00, 0.78, 0.00, 1.08, 0.06], ['c', 0.45, 0.09, 1.11, 0.30, 2.07, 0.60], ['c', 1.47, 0.48, 1.83, 0.57, 2.55, 0.54], ['c', 1.02, -0.06, 2.04, -0.45, 2.94, -1.11], ['c', 0.12, -0.09, 0.24, -0.18, 0.27, -0.18], ['z'], ['m', -5.88, 13.05], ['c', 0.21, -0.03, 0.81, 0.00, 1.08, 0.06], ['c', 0.48, 0.12, 0.90, 0.42, 0.99, 0.69], ['c', 0.03, 0.09, 0.03, 0.15, 0.00, 0.27], ['c', 0.00, 0.09, -0.03, 0.57, -0.06, 1.08], ['c', -0.09, 2.19, -0.24, 5.76, -0.39, 8.28], ['c', -0.06, 1.53, -0.06, 1.77, 0.03, 2.01], ['c', 0.09, 0.18, 0.15, 0.24, 0.30, 0.30], ['c', 0.24, 0.12, 0.54, 0.06, 1.23, -0.27], ['c', 0.57, -0.27, 0.66, -0.30, 0.75, -0.24], ['c', 0.09, 0.06, 0.18, 0.30, 0.18, 0.45], ['c', 0.00, 0.33, -0.15, 0.51, -0.45, 0.63], ['c', -0.12, 0.03, -0.39, 0.15, -0.60, 0.27], ['c', -1.17, 0.60, -1.38, 0.69, -1.80, 0.72], ['c', -0.45, 0.03, -0.78, -0.09, -1.08, -0.39], ['c', -0.39, -0.42, -0.66, -1.20, -1.02, -3.12], ['c', -0.24, -1.23, -0.36, -2.07, -0.54, -3.75], ['l', 0.00, -0.18], ['l', -0.36, 0.45], ['c', -0.60, 0.75, -1.32, 1.59, -1.95, 2.25], ['c', -0.15, 0.18, -0.27, 0.30, -0.27, 0.33], ['c', 0.00, 0.00, 0.06, 0.09, 0.15, 0.18], ['c', 0.24, 0.33, 0.60, 0.57, 1.05, 0.69], ['c', 0.18, 0.06, 0.30, 0.06, 0.69, 0.06], ['l', 0.48, 0.03], ['l', 0.06, 0.12], ['c', 0.15, 0.27, 0.03, 0.72, -0.21, 0.90], ['c', -0.18, 0.12, -0.93, 0.27, -1.41, 0.27], ['c', -0.84, 0.00, -1.59, -0.30, -1.98, -0.84], ['l', -0.12, -0.15], ['l', -0.45, 0.42], ['c', -0.99, 0.87, -1.53, 1.32, -2.16, 1.74], ['c', -0.78, 0.51, -1.50, 0.84, -2.10, 0.93], ['c', -0.69, 0.12, -1.20, 0.03, -1.95, -0.42], ['c', -0.21, -0.12, -0.51, -0.27, -0.66, -0.36], ['c', -0.24, -0.12, -0.30, -0.18, -0.33, -0.24], ['c', -0.12, -0.27, 0.15, -0.78, 0.45, -0.93], ['c', 0.24, -0.12, 0.33, -0.09, 0.90, 0.18], ['c', 0.60, 0.30, 0.84, 0.39, 1.20, 0.36], ['c', 0.87, -0.09, 1.77, -0.69, 3.24, -2.31], ['c', 2.67, -2.85, 4.59, -5.94, 5.70, -9.15], ['c', 0.15, -0.45, 0.24, -0.63, 0.42, -0.81], ['c', 0.21, -0.24, 0.60, -0.45, 0.99, -0.51], ['z'], ['m', -3.99, 16.05], ['c', 0.18, 0.00, 0.69, -0.03, 1.17, 0.00], ['c', 3.27, 0.03, 5.37, 0.75, 6.00, 2.07], ['c', 0.45, 0.99, 0.12, 2.40, -0.81, 3.42], ['c', -0.24, 0.27, -0.57, 0.57, -0.84, 0.75], ['c', -0.09, 0.06, -0.18, 0.09, -0.18, 0.12], ['c', 0.00, 0.00, 0.18, 0.03, 0.42, 0.09], ['c', 1.23, 0.30, 2.01, 0.81, 2.37, 1.59], ['c', 0.27, 0.54, 0.30, 1.32, 0.09, 2.10], ['c', -0.12, 0.36, -0.45, 1.05, -0.69, 1.35], ['c', -0.87, 1.17, -2.10, 1.92, -3.54, 2.25], ['c', -0.36, 0.06, -0.48, 0.06, -0.96, 0.06], ['c', -0.45, 0.00, -0.66, 0.00, -0.84, -0.03], ['c', -0.84, -0.18, -1.47, -0.51, -2.07, -1.11], ['c', -0.33, -0.33, -0.45, -0.51, -0.45, -0.63], ['c', 0.00, -0.06, 0.03, -0.15, 0.06, -0.24], ['c', 0.18, -0.33, 0.69, -0.60, 0.93, -0.48], ['c', 0.03, 0.03, 0.15, 0.12, 0.27, 0.24], ['c', 0.39, 0.42, 0.99, 0.57, 1.62, 0.45], ['c', 1.05, -0.21, 1.98, -1.02, 2.31, -2.01], ['c', 0.48, -1.53, -0.48, -2.55, -2.58, -2.67], ['c', -0.21, 0.00, -0.36, -0.03, -0.42, -0.06], ['c', -0.15, -0.09, -0.21, -0.51, -0.06, -0.78], ['c', 0.12, -0.27, 0.24, -0.33, 0.60, -0.36], ['c', 0.57, -0.06, 1.11, -0.42, 1.50, -0.99], ['c', 0.48, -0.72, 0.54, -1.59, 0.18, -2.31], ['c', -0.12, -0.21, -0.45, -0.54, -0.69, -0.69], ['c', -0.33, -0.21, -0.93, -0.45, -1.35, -0.51], ['l', -0.12, -0.03], ['l', -0.06, 0.48], ['c', -0.54, 2.94, -1.14, 6.24, -1.29, 6.75], ['c', -0.33, 1.35, -0.93, 2.61, -1.65, 3.60], ['c', -0.30, 0.36, -0.81, 0.90, -1.14, 1.14], ['c', -0.30, 0.24, -0.84, 0.48, -1.14, 0.57], ['c', -0.33, 0.09, -0.96, 0.09, -1.26, 0.03], ['c', -0.45, -0.12, -0.87, -0.39, -1.53, -0.96], ['c', -0.24, -0.15, -0.51, -0.39, -0.63, -0.48], ['c', -0.30, -0.21, -0.33, -0.33, -0.21, -0.63], ['c', 0.12, -0.18, 0.27, -0.36, 0.42, -0.45], ['c', 0.27, -0.12, 0.36, -0.09, 0.87, 0.33], ['c', 0.78, 0.60, 1.08, 0.75, 1.65, 0.72], ['c', 0.45, -0.03, 0.81, -0.21, 1.17, -0.54], ['c', 0.87, -0.90, 1.38, -2.85, 1.38, -5.37], ['c', 0.00, -0.60, 0.03, -1.11, 0.12, -2.04], ['c', 0.06, -0.69, 0.24, -2.01, 0.33, -2.58], ['c', 0.06, -0.24, 0.06, -0.42, 0.06, -0.42], ['c', 0.00, 0.00, -0.12, 0.03, -0.21, 0.09], ['c', -1.44, 0.57, -2.16, 1.65, -1.74, 2.55], ['c', 0.09, 0.15, 0.18, 0.24, 0.27, 0.33], ['c', 0.24, 0.21, 0.30, 0.27, 0.33, 0.39], ['c', 0.06, 0.24, 0.00, 0.63, -0.15, 0.78], ['c', -0.09, 0.12, -0.54, 0.21, -0.96, 0.24], ['c', -1.02, 0.03, -2.01, -0.48, -2.43, -1.32], ['c', -0.21, -0.45, -0.27, -0.90, -0.15, -1.44], ['c', 0.06, -0.27, 0.21, -0.66, 0.39, -0.93], ['c', 0.87, -1.29, 3.00, -2.22, 5.64, -2.43], ['z']], w: 19.643, h: 43.325 },\n\t'tab.tiny': { d: [['M', 16.02, -17.25], ['c', 0.12, -0.09, 0.15, -0.09, 0.27, -0.09], ['c', 0.21, 0.03, 0.51, 0.30, 0.51, 0.45], ['c', 0.00, 0.06, -0.12, 0.18, -0.30, 0.36], ['c', -1.11, 1.08, -2.55, 1.59, -3.84, 1.41], ['c', -0.15, -0.03, -0.33, -0.06, -0.39, -0.09], ['c', -0.06, -0.03, -0.09, -0.03, -0.12, -0.03], ['c', 0.00, 0.00, -0.06, 0.42, -0.15, 0.93], ['c', -0.33, 2.01, -0.66, 3.69, -0.84, 4.26], ['c', -0.42, 1.41, -1.23, 2.67, -2.16, 3.33], ['c', -0.27, 0.18, -0.75, 0.42, -0.99, 0.48], ['c', -0.30, 0.09, -0.72, 0.09, -1.02, 0.06], ['c', -0.45, -0.09, -0.84, -0.33, -1.53, -0.90], ['c', -0.21, -0.18, -0.51, -0.39, -0.63, -0.48], ['c', -0.27, -0.21, -0.30, -0.24, -0.30, -0.36], ['c', 0.00, -0.12, 0.09, -0.36, 0.18, -0.45], ['c', 0.09, -0.09, 0.27, -0.18, 0.36, -0.18], ['c', 0.12, 0.00, 0.30, 0.12, 0.66, 0.45], ['c', 0.57, 0.51, 0.87, 0.69, 1.23, 0.72], ['c', 0.93, 0.06, 1.68, -0.78, 1.98, -2.37], ['c', 0.09, -0.39, 0.15, -0.75, 0.18, -1.53], ['c', 0.06, -0.99, 0.24, -2.79, 0.42, -4.05], ['c', 0.03, -0.30, 0.06, -0.57, 0.06, -0.60], ['c', 0.00, -0.06, -0.03, -0.09, -0.15, -0.12], ['c', -0.90, -0.18, -2.13, 0.06, -2.76, 0.57], ['c', -0.36, 0.30, -0.51, 0.60, -0.51, 1.02], ['c', 0.00, 0.45, 0.15, 0.75, 0.48, 0.99], ['c', 0.06, 0.06, 0.15, 0.18, 0.18, 0.24], ['c', 0.12, 0.24, 0.03, 0.63, -0.15, 0.69], ['c', -0.24, 0.12, -0.60, 0.15, -0.90, 0.15], ['c', -0.36, -0.03, -0.57, -0.09, -0.87, -0.24], ['c', -0.78, -0.36, -1.23, -1.11, -1.20, -1.92], ['c', 0.12, -1.53, 1.74, -2.49, 4.62, -2.70], ['c', 1.20, -0.09, 1.47, -0.03, 3.33, 0.57], ['c', 0.90, 0.30, 1.14, 0.36, 1.56, 0.39], ['c', 0.45, 0.00, 0.93, -0.06, 1.38, -0.21], ['c', 0.51, -0.18, 0.81, -0.33, 1.41, -0.75], ['z'], ['m', -4.68, 10.38], ['c', 0.39, -0.06, 0.84, 0.00, 1.20, 0.15], ['c', 0.24, 0.12, 0.36, 0.21, 0.45, 0.36], ['l', 0.09, 0.09], ['l', -0.06, 1.41], ['c', -0.09, 2.19, -0.18, 3.96, -0.27, 5.49], ['c', -0.03, 0.78, -0.06, 1.59, -0.06, 1.86], ['c', 0.00, 0.42, 0.00, 0.48, 0.06, 0.57], ['c', 0.06, 0.18, 0.18, 0.24, 0.36, 0.27], ['c', 0.18, 0.00, 0.39, -0.06, 0.84, -0.27], ['c', 0.45, -0.21, 0.54, -0.24, 0.63, -0.18], ['c', 0.12, 0.12, 0.15, 0.54, 0.03, 0.69], ['c', -0.03, 0.03, -0.15, 0.12, -0.27, 0.18], ['c', -0.15, 0.03, -0.30, 0.12, -0.36, 0.15], ['c', -0.87, 0.45, -1.02, 0.51, -1.26, 0.57], ['c', -0.33, 0.09, -0.60, 0.06, -0.84, -0.06], ['c', -0.42, -0.18, -0.63, -0.60, -0.87, -1.44], ['c', -0.30, -1.23, -0.57, -2.97, -0.66, -4.08], ['c', 0.00, -0.18, -0.03, -0.30, -0.03, -0.33], ['l', -0.06, 0.06], ['c', -0.18, 0.27, -1.11, 1.38, -1.68, 2.01], ['l', -0.33, 0.33], ['l', 0.06, 0.09], ['c', 0.06, 0.15, 0.27, 0.33, 0.48, 0.42], ['c', 0.27, 0.18, 0.51, 0.24, 0.96, 0.27], ['l', 0.39, 0.00], ['l', 0.03, 0.12], ['c', 0.12, 0.21, 0.03, 0.57, -0.15, 0.69], ['c', -0.03, 0.03, -0.21, 0.09, -0.36, 0.15], ['c', -0.27, 0.06, -0.39, 0.06, -0.75, 0.06], ['c', -0.48, 0.00, -0.75, -0.03, -1.08, -0.21], ['c', -0.21, -0.12, -0.51, -0.36, -0.57, -0.48], ['l', -0.03, -0.09], ['l', -0.39, 0.36], ['c', -1.47, 1.35, -2.49, 1.98, -3.42, 2.13], ['c', -0.54, 0.09, -0.96, -0.03, -1.62, -0.39], ['c', -0.21, -0.15, -0.45, -0.27, -0.54, -0.30], ['c', -0.18, -0.09, -0.21, -0.21, -0.12, -0.45], ['c', 0.06, -0.27, 0.33, -0.48, 0.54, -0.48], ['c', 0.03, 0.00, 0.27, 0.09, 0.48, 0.21], ['c', 0.48, 0.24, 0.69, 0.27, 0.99, 0.27], ['c', 0.60, -0.06, 1.17, -0.42, 2.10, -1.35], ['c', 2.22, -2.22, 4.02, -4.98, 4.95, -7.59], ['c', 0.21, -0.57, 0.30, -0.78, 0.48, -0.93], ['c', 0.15, -0.15, 0.42, -0.27, 0.66, -0.33], ['z'], ['m', -3.06, 12.84], ['c', 0.27, -0.03, 1.68, 0.00, 2.01, 0.03], ['c', 1.92, 0.18, 3.15, 0.69, 3.63, 1.50], ['c', 0.18, 0.33, 0.24, 0.51, 0.21, 0.93], ['c', 0.00, 0.45, -0.06, 0.72, -0.24, 1.11], ['c', -0.24, 0.51, -0.69, 1.02, -1.17, 1.35], ['c', -0.21, 0.15, -0.21, 0.15, -0.12, 0.18], ['c', 0.72, 0.15, 1.11, 0.30, 1.50, 0.57], ['c', 0.39, 0.24, 0.63, 0.57, 0.75, 0.96], ['c', 0.09, 0.30, 0.09, 0.96, 0.00, 1.29], ['c', -0.15, 0.57, -0.39, 1.05, -0.78, 1.50], ['c', -0.66, 0.75, -1.62, 1.32, -2.61, 1.53], ['c', -0.27, 0.06, -0.42, 0.06, -0.84, 0.06], ['c', -0.48, 0.00, -0.57, 0.00, -0.81, -0.06], ['c', -0.60, -0.18, -1.05, -0.42, -1.47, -0.81], ['c', -0.36, -0.39, -0.42, -0.51, -0.30, -0.75], ['c', 0.12, -0.21, 0.39, -0.39, 0.60, -0.39], ['c', 0.09, 0.00, 0.15, 0.03, 0.33, 0.18], ['c', 0.12, 0.12, 0.27, 0.24, 0.36, 0.27], ['c', 0.96, 0.48, 2.46, -0.33, 2.82, -1.50], ['c', 0.24, -0.81, -0.03, -1.44, -0.69, -1.77], ['c', -0.39, -0.21, -1.02, -0.33, -1.53, -0.33], ['c', -0.18, 0.00, -0.21, 0.00, -0.27, -0.09], ['c', -0.06, -0.09, -0.06, -0.30, -0.03, -0.48], ['c', 0.06, -0.18, 0.18, -0.36, 0.33, -0.36], ['c', 0.39, -0.06, 0.51, -0.09, 0.72, -0.18], ['c', 0.69, -0.36, 1.11, -1.23, 0.99, -2.01], ['c', -0.09, -0.51, -0.42, -0.90, -0.93, -1.17], ['c', -0.24, -0.12, -0.60, -0.27, -0.87, -0.30], ['c', -0.09, -0.03, -0.09, -0.03, -0.12, 0.12], ['c', 0.00, 0.09, -0.21, 1.11, -0.42, 2.25], ['c', -0.66, 3.75, -0.72, 3.99, -1.26, 5.07], ['c', -0.90, 1.89, -2.25, 2.85, -3.48, 2.61], ['c', -0.39, -0.09, -0.69, -0.27, -1.38, -0.84], ['c', -0.63, -0.51, -0.63, -0.48, -0.63, -0.60], ['c', 0.00, -0.18, 0.18, -0.48, 0.39, -0.57], ['c', 0.21, -0.12, 0.30, -0.09, 0.81, 0.33], ['c', 0.15, 0.15, 0.39, 0.30, 0.54, 0.36], ['c', 0.18, 0.12, 0.27, 0.12, 0.48, 0.15], ['c', 0.99, 0.06, 1.71, -0.78, 2.04, -2.46], ['c', 0.12, -0.66, 0.18, -1.14, 0.21, -2.22], ['c', 0.03, -1.23, 0.12, -2.25, 0.36, -3.63], ['c', 0.03, -0.24, 0.06, -0.45, 0.06, -0.48], ['c', -0.06, -0.03, -0.66, 0.27, -0.90, 0.42], ['c', -0.06, 0.06, -0.21, 0.18, -0.33, 0.30], ['c', -0.57, 0.57, -0.60, 1.35, -0.06, 1.74], ['c', 0.18, 0.12, 0.24, 0.24, 0.21, 0.51], ['c', -0.03, 0.30, -0.15, 0.42, -0.57, 0.48], ['c', -1.11, 0.24, -2.22, -0.42, -2.43, -1.38], ['c', -0.09, -0.45, 0.03, -1.02, 0.30, -1.47], ['c', 0.18, -0.24, 0.60, -0.63, 0.90, -0.84], ['c', 0.90, -0.60, 2.28, -1.02, 3.69, -1.11], ['z']], w: 15.709, h: 34.656 },\n\t'timesig.common': { d: [['M', 6.66, -7.83], ['c', 0.72, -0.06, 1.41, -0.03, 1.98, 0.09], ['c', 1.20, 0.27, 2.34, 0.96, 3.09, 1.92], ['c', 0.63, 0.81, 1.08, 1.86, 1.14, 2.73], ['c', 0.06, 1.02, -0.51, 1.92, -1.44, 2.22], ['c', -0.24, 0.09, -0.30, 0.09, -0.63, 0.09], ['c', -0.33, 0.00, -0.42, 0.00, -0.63, -0.06], ['c', -0.66, -0.24, -1.14, -0.63, -1.41, -1.20], ['c', -0.15, -0.30, -0.21, -0.51, -0.24, -0.90], ['c', -0.06, -1.08, 0.57, -2.04, 1.56, -2.37], ['c', 0.18, -0.06, 0.27, -0.06, 0.63, -0.06], ['l', 0.45, 0.00], ['c', 0.06, 0.03, 0.09, 0.03, 0.09, 0.00], ['c', 0.00, 0.00, -0.09, -0.12, -0.24, -0.27], ['c', -1.02, -1.11, -2.55, -1.68, -4.08, -1.50], ['c', -1.29, 0.15, -2.04, 0.69, -2.40, 1.74], ['c', -0.36, 0.93, -0.42, 1.89, -0.42, 5.37], ['c', 0.00, 2.97, 0.06, 3.96, 0.24, 4.77], ['c', 0.24, 1.08, 0.63, 1.68, 1.41, 2.07], ['c', 0.81, 0.39, 2.16, 0.45, 3.18, 0.09], ['c', 1.29, -0.45, 2.37, -1.53, 3.03, -2.97], ['c', 0.15, -0.33, 0.33, -0.87, 0.39, -1.17], ['c', 0.09, -0.24, 0.15, -0.36, 0.30, -0.39], ['c', 0.21, -0.03, 0.42, 0.15, 0.39, 0.36], ['c', -0.06, 0.39, -0.42, 1.38, -0.69, 1.89], ['c', -0.96, 1.80, -2.49, 2.94, -4.23, 3.18], ['c', -0.99, 0.12, -2.58, -0.06, -3.63, -0.45], ['c', -0.96, -0.36, -1.71, -0.84, -2.40, -1.50], ['c', -1.11, -1.11, -1.80, -2.61, -2.04, -4.56], ['c', -0.06, -0.60, -0.06, -2.01, 0.00, -2.61], ['c', 0.24, -1.95, 0.90, -3.45, 2.01, -4.56], ['c', 0.69, -0.66, 1.44, -1.11, 2.37, -1.47], ['c', 0.63, -0.24, 1.47, -0.42, 2.22, -0.48], ['z']], w: 13.038, h: 15.689 },\n\t'timesig.cut': { d: [['M', 6.24, -10.44], ['c', 0.09, -0.06, 0.09, -0.06, 0.48, -0.06], ['c', 0.36, 0.00, 0.36, 0.00, 0.45, 0.06], ['l', 0.06, 0.09], ['l', 0.00, 1.23], ['l', 0.00, 1.26], ['l', 0.27, 0.00], ['c', 1.26, 0.00, 2.49, 0.45, 3.48, 1.29], ['c', 1.05, 0.87, 1.80, 2.28, 1.89, 3.48], ['c', 0.06, 1.02, -0.51, 1.92, -1.44, 2.22], ['c', -0.24, 0.09, -0.30, 0.09, -0.63, 0.09], ['c', -0.33, 0.00, -0.42, 0.00, -0.63, -0.06], ['c', -0.66, -0.24, -1.14, -0.63, -1.41, -1.20], ['c', -0.15, -0.30, -0.21, -0.51, -0.24, -0.90], ['c', -0.06, -1.08, 0.57, -2.04, 1.56, -2.37], ['c', 0.18, -0.06, 0.27, -0.06, 0.63, -0.06], ['l', 0.45, 0.00], ['c', 0.06, 0.03, 0.09, 0.03, 0.09, 0.00], ['c', 0.00, -0.03, -0.45, -0.51, -0.66, -0.69], ['c', -0.87, -0.69, -1.83, -1.05, -2.94, -1.11], ['l', -0.42, 0.00], ['l', 0.00, 7.17], ['l', 0.00, 7.14], ['l', 0.42, 0.00], ['c', 0.69, -0.03, 1.23, -0.18, 1.86, -0.51], ['c', 1.05, -0.51, 1.89, -1.47, 2.46, -2.70], ['c', 0.15, -0.33, 0.33, -0.87, 0.39, -1.17], ['c', 0.09, -0.24, 0.15, -0.36, 0.30, -0.39], ['c', 0.21, -0.03, 0.42, 0.15, 0.39, 0.36], ['c', -0.03, 0.24, -0.21, 0.78, -0.39, 1.20], ['c', -0.96, 2.37, -2.94, 3.90, -5.13, 3.90], ['l', -0.30, 0.00], ['l', 0.00, 1.26], ['l', 0.00, 1.23], ['l', -0.06, 0.09], ['c', -0.09, 0.06, -0.09, 0.06, -0.45, 0.06], ['c', -0.39, 0.00, -0.39, 0.00, -0.48, -0.06], ['l', -0.06, -0.09], ['l', 0.00, -1.29], ['l', 0.00, -1.29], ['l', -0.21, -0.03], ['c', -1.23, -0.21, -2.31, -0.63, -3.21, -1.29], ['c', -0.15, -0.09, -0.45, -0.36, -0.66, -0.57], ['c', -1.11, -1.11, -1.80, -2.61, -2.04, -4.56], ['c', -0.06, -0.60, -0.06, -2.01, 0.00, -2.61], ['c', 0.24, -1.95, 0.93, -3.45, 2.04, -4.59], ['c', 0.42, -0.39, 0.78, -0.66, 1.26, -0.93], ['c', 0.75, -0.45, 1.65, -0.75, 2.61, -0.90], ['l', 0.21, -0.03], ['l', 0.00, -1.29], ['l', 0.00, -1.29], ['z'], ['m', -0.06, 10.44], ['c', 0.00, -5.58, 0.00, -6.99, -0.03, -6.99], ['c', -0.15, 0.00, -0.63, 0.27, -0.87, 0.45], ['c', -0.45, 0.36, -0.75, 0.93, -0.93, 1.77], ['c', -0.18, 0.81, -0.24, 1.80, -0.24, 4.74], ['c', 0.00, 2.97, 0.06, 3.96, 0.24, 4.77], ['c', 0.24, 1.08, 0.66, 1.68, 1.41, 2.07], ['c', 0.12, 0.06, 0.30, 0.12, 0.33, 0.15], ['l', 0.09, 0.00], ['l', 0.00, -6.96], ['z']], w: 13.038, h: 20.97 },\n\t'timesig.imperfectum': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.imperfectum2': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.perfectum': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'timesig.perfectum2': { d: [['M', 13, -5], ['a', 8, 8, 0, 1, 0, 0, 10]], w: 13.038, h: 20.97 },\n\t'f': { d: [['M', 9.93, -14.28], ['c', 1.53, -0.18, 2.88, 0.45, 3.12, 1.50], ['c', 0.12, 0.51, 0.00, 1.32, -0.27, 1.86], ['c', -0.15, 0.30, -0.42, 0.57, -0.63, 0.69], ['c', -0.69, 0.36, -1.56, 0.03, -1.83, -0.69], ['c', -0.09, -0.24, -0.09, -0.69, 0.00, -0.87], ['c', 0.06, -0.12, 0.21, -0.24, 0.45, -0.42], ['c', 0.42, -0.24, 0.57, -0.45, 0.60, -0.72], ['c', 0.03, -0.33, -0.09, -0.39, -0.63, -0.42], ['c', -0.30, 0.00, -0.45, 0.00, -0.60, 0.03], ['c', -0.81, 0.21, -1.35, 0.93, -1.74, 2.46], ['c', -0.06, 0.27, -0.48, 2.25, -0.48, 2.31], ['c', 0.00, 0.03, 0.39, 0.03, 0.90, 0.03], ['c', 0.72, 0.00, 0.90, 0.00, 0.99, 0.06], ['c', 0.42, 0.15, 0.45, 0.72, 0.03, 0.90], ['c', -0.12, 0.06, -0.24, 0.06, -1.17, 0.06], ['l', -1.05, 0.00], ['l', -0.78, 2.55], ['c', -0.45, 1.41, -0.87, 2.79, -0.96, 3.06], ['c', -0.87, 2.37, -2.37, 4.74, -3.78, 5.91], ['c', -1.05, 0.90, -2.04, 1.23, -3.09, 1.08], ['c', -1.11, -0.18, -1.89, -0.78, -2.04, -1.59], ['c', -0.12, -0.66, 0.15, -1.71, 0.54, -2.19], ['c', 0.69, -0.75, 1.86, -0.54, 2.22, 0.39], ['c', 0.06, 0.15, 0.09, 0.27, 0.09, 0.48], ['c', 0.00, 0.24, -0.03, 0.27, -0.12, 0.42], ['c', -0.03, 0.09, -0.15, 0.18, -0.27, 0.27], ['c', -0.09, 0.06, -0.27, 0.21, -0.36, 0.27], ['c', -0.24, 0.18, -0.36, 0.36, -0.39, 0.60], ['c', -0.03, 0.33, 0.09, 0.39, 0.63, 0.42], ['c', 0.42, 0.00, 0.63, -0.03, 0.90, -0.15], ['c', 0.60, -0.30, 0.96, -0.96, 1.38, -2.64], ['c', 0.09, -0.42, 0.63, -2.55, 1.17, -4.77], ['l', 1.02, -4.08], ['c', 0.00, -0.03, -0.36, -0.03, -0.81, -0.03], ['c', -0.72, 0.00, -0.81, 0.00, -0.93, -0.06], ['c', -0.42, -0.18, -0.39, -0.75, 0.03, -0.90], ['c', 0.09, -0.06, 0.27, -0.06, 1.05, -0.06], ['l', 0.96, 0.00], ['l', 0.00, -0.09], ['c', 0.06, -0.18, 0.30, -0.72, 0.51, -1.17], ['c', 1.20, -2.46, 3.30, -4.23, 5.34, -4.50], ['z']], w: 16.155, h: 19.445 },\n\t'm': { d: [['M', 2.79, -8.91], ['c', 0.09, 0.00, 0.30, -0.03, 0.45, -0.03], ['c', 0.24, 0.03, 0.30, 0.03, 0.45, 0.12], ['c', 0.36, 0.15, 0.63, 0.54, 0.75, 1.02], ['l', 0.03, 0.21], ['l', 0.33, -0.30], ['c', 0.69, -0.69, 1.38, -1.02, 2.07, -1.02], ['c', 0.27, 0.00, 0.33, 0.00, 0.48, 0.06], ['c', 0.21, 0.09, 0.48, 0.36, 0.63, 0.60], ['c', 0.03, 0.09, 0.12, 0.27, 0.18, 0.42], ['c', 0.03, 0.15, 0.09, 0.27, 0.12, 0.27], ['c', 0.00, 0.00, 0.09, -0.09, 0.18, -0.21], ['c', 0.33, -0.39, 0.87, -0.81, 1.29, -0.99], ['c', 0.78, -0.33, 1.47, -0.21, 2.01, 0.33], ['c', 0.30, 0.33, 0.48, 0.69, 0.60, 1.14], ['c', 0.09, 0.42, 0.06, 0.54, -0.54, 3.06], ['c', -0.33, 1.29, -0.57, 2.40, -0.57, 2.43], ['c', 0.00, 0.12, 0.09, 0.21, 0.21, 0.21], ['c', 0.24, 0.00, 0.75, -0.30, 1.20, -0.72], ['c', 0.45, -0.39, 0.60, -0.45, 0.78, -0.27], ['c', 0.18, 0.18, 0.09, 0.36, -0.45, 0.87], ['c', -1.05, 0.96, -1.83, 1.47, -2.58, 1.71], ['c', -0.93, 0.33, -1.53, 0.21, -1.80, -0.33], ['c', -0.06, -0.15, -0.06, -0.21, -0.06, -0.45], ['c', 0.00, -0.24, 0.03, -0.48, 0.60, -2.82], ['c', 0.42, -1.71, 0.60, -2.64, 0.63, -2.79], ['c', 0.03, -0.57, -0.30, -0.75, -0.84, -0.48], ['c', -0.24, 0.12, -0.54, 0.39, -0.66, 0.63], ['c', -0.03, 0.09, -0.42, 1.38, -0.90, 3.00], ['c', -0.90, 3.15, -0.84, 3.00, -1.14, 3.15], ['l', -0.15, 0.09], ['l', -0.78, 0.00], ['c', -0.60, 0.00, -0.78, 0.00, -0.84, -0.06], ['c', -0.09, -0.03, -0.18, -0.18, -0.18, -0.27], ['c', 0.00, -0.03, 0.36, -1.38, 0.84, -2.97], ['c', 0.57, -2.04, 0.81, -2.97, 0.84, -3.12], ['c', 0.03, -0.54, -0.30, -0.72, -0.84, -0.45], ['c', -0.24, 0.12, -0.57, 0.42, -0.66, 0.63], ['c', -0.06, 0.09, -0.51, 1.44, -1.05, 2.97], ['c', -0.51, 1.56, -0.99, 2.85, -0.99, 2.91], ['c', -0.06, 0.12, -0.21, 0.24, -0.36, 0.30], ['c', -0.12, 0.06, -0.21, 0.06, -0.90, 0.06], ['c', -0.60, 0.00, -0.78, 0.00, -0.84, -0.06], ['c', -0.09, -0.03, -0.18, -0.18, -0.18, -0.27], ['c', 0.00, -0.03, 0.45, -1.38, 0.99, -2.97], ['c', 1.05, -3.18, 1.05, -3.18, 0.93, -3.45], ['c', -0.12, -0.27, -0.39, -0.30, -0.72, -0.15], ['c', -0.54, 0.27, -1.14, 1.17, -1.56, 2.40], ['c', -0.06, 0.15, -0.15, 0.30, -0.18, 0.36], ['c', -0.21, 0.21, -0.57, 0.27, -0.72, 0.09], ['c', -0.09, -0.09, -0.06, -0.21, 0.06, -0.63], ['c', 0.48, -1.26, 1.26, -2.46, 2.01, -3.21], ['c', 0.57, -0.54, 1.20, -0.87, 1.83, -1.02], ['z']], w: 14.687, h: 9.126 },\n\t'p': { d: [['M', 1.92, -8.70], ['c', 0.27, -0.09, 0.81, -0.06, 1.11, 0.03], ['c', 0.54, 0.18, 0.93, 0.51, 1.17, 0.99], ['c', 0.09, 0.15, 0.15, 0.33, 0.18, 0.36], ['l', 0.00, 0.12], ['l', 0.30, -0.27], ['c', 0.66, -0.60, 1.35, -1.02, 2.13, -1.20], ['c', 0.21, -0.06, 0.33, -0.06, 0.78, -0.06], ['c', 0.45, 0.00, 0.51, 0.00, 0.84, 0.09], ['c', 1.29, 0.33, 2.07, 1.32, 2.25, 2.79], ['c', 0.09, 0.81, -0.09, 2.01, -0.45, 2.79], ['c', -0.54, 1.26, -1.86, 2.55, -3.18, 3.03], ['c', -0.45, 0.18, -0.81, 0.24, -1.29, 0.24], ['c', -0.69, -0.03, -1.35, -0.18, -1.86, -0.45], ['c', -0.30, -0.15, -0.51, -0.18, -0.69, -0.09], ['c', -0.09, 0.03, -0.18, 0.09, -0.18, 0.12], ['c', -0.09, 0.12, -1.05, 2.94, -1.05, 3.06], ['c', 0.00, 0.24, 0.18, 0.48, 0.51, 0.63], ['c', 0.18, 0.06, 0.54, 0.15, 0.75, 0.15], ['c', 0.21, 0.00, 0.36, 0.06, 0.42, 0.18], ['c', 0.12, 0.18, 0.06, 0.42, -0.12, 0.54], ['c', -0.09, 0.03, -0.15, 0.03, -0.78, 0.00], ['c', -1.98, -0.15, -3.81, -0.15, -5.79, 0.00], ['c', -0.63, 0.03, -0.69, 0.03, -0.78, 0.00], ['c', -0.24, -0.15, -0.24, -0.57, 0.03, -0.66], ['c', 0.06, -0.03, 0.48, -0.09, 0.99, -0.12], ['c', 0.87, -0.06, 1.11, -0.09, 1.35, -0.21], ['c', 0.18, -0.06, 0.33, -0.18, 0.39, -0.30], ['c', 0.06, -0.12, 3.24, -9.42, 3.27, -9.60], ['c', 0.06, -0.33, 0.03, -0.57, -0.15, -0.69], ['c', -0.09, -0.06, -0.12, -0.06, -0.30, -0.06], ['c', -0.69, 0.06, -1.53, 1.02, -2.28, 2.61], ['c', -0.09, 0.21, -0.21, 0.45, -0.27, 0.51], ['c', -0.09, 0.12, -0.33, 0.24, -0.48, 0.24], ['c', -0.18, 0.00, -0.36, -0.15, -0.36, -0.30], ['c', 0.00, -0.24, 0.78, -1.83, 1.26, -2.55], ['c', 0.72, -1.11, 1.47, -1.74, 2.28, -1.92], ['z'], ['m', 5.37, 1.47], ['c', -0.27, -0.12, -0.75, -0.03, -1.14, 0.21], ['c', -0.75, 0.48, -1.47, 1.68, -1.89, 3.15], ['c', -0.45, 1.47, -0.42, 2.34, 0.00, 2.70], ['c', 0.45, 0.39, 1.26, 0.21, 1.83, -0.36], ['c', 0.51, -0.51, 0.99, -1.68, 1.38, -3.27], ['c', 0.30, -1.17, 0.33, -1.74, 0.15, -2.13], ['c', -0.09, -0.15, -0.15, -0.21, -0.33, -0.30], ['z']], w: 14.689, h: 13.127 },\n\t'r': { d: [['M', 6.33, -9.12], ['c', 0.27, -0.03, 0.93, 0.00, 1.20, 0.06], ['c', 0.84, 0.21, 1.23, 0.81, 1.02, 1.53], ['c', -0.24, 0.75, -0.90, 1.17, -1.56, 0.96], ['c', -0.33, -0.09, -0.51, -0.30, -0.66, -0.75], ['c', -0.03, -0.12, -0.09, -0.24, -0.12, -0.30], ['c', -0.09, -0.15, -0.30, -0.24, -0.48, -0.24], ['c', -0.57, 0.00, -1.38, 0.54, -1.65, 1.08], ['c', -0.06, 0.15, -0.33, 1.17, -0.90, 3.27], ['c', -0.57, 2.31, -0.81, 3.12, -0.87, 3.21], ['c', -0.03, 0.06, -0.12, 0.15, -0.18, 0.21], ['l', -0.12, 0.06], ['l', -0.81, 0.03], ['c', -0.69, 0.00, -0.81, 0.00, -0.90, -0.03], ['c', -0.09, -0.06, -0.18, -0.21, -0.18, -0.30], ['c', 0.00, -0.06, 0.39, -1.62, 0.90, -3.51], ['c', 0.84, -3.24, 0.87, -3.45, 0.87, -3.72], ['c', 0.00, -0.21, 0.00, -0.27, -0.03, -0.36], ['c', -0.12, -0.15, -0.21, -0.24, -0.42, -0.24], ['c', -0.24, 0.00, -0.45, 0.15, -0.78, 0.42], ['c', -0.33, 0.36, -0.45, 0.54, -0.72, 1.14], ['c', -0.03, 0.12, -0.21, 0.24, -0.36, 0.27], ['c', -0.12, 0.00, -0.15, 0.00, -0.24, -0.06], ['c', -0.18, -0.12, -0.18, -0.21, -0.06, -0.54], ['c', 0.21, -0.57, 0.42, -0.93, 0.78, -1.32], ['c', 0.54, -0.51, 1.20, -0.81, 1.95, -0.87], ['c', 0.81, -0.03, 1.53, 0.30, 1.92, 0.87], ['l', 0.12, 0.18], ['l', 0.09, -0.09], ['c', 0.57, -0.45, 1.41, -0.84, 2.19, -0.96], ['z']], w: 9.41, h: 9.132 },\n\t's': { d: [['M', 4.47, -8.73], ['c', 0.09, 0.00, 0.36, -0.03, 0.57, -0.03], ['c', 0.75, 0.03, 1.29, 0.24, 1.71, 0.63], ['c', 0.51, 0.54, 0.66, 1.26, 0.36, 1.83], ['c', -0.24, 0.42, -0.63, 0.57, -1.11, 0.42], ['c', -0.33, -0.09, -0.60, -0.36, -0.60, -0.57], ['c', 0.00, -0.03, 0.06, -0.21, 0.15, -0.39], ['c', 0.12, -0.21, 0.15, -0.33, 0.18, -0.48], ['c', 0.00, -0.24, -0.06, -0.48, -0.15, -0.60], ['c', -0.15, -0.21, -0.42, -0.24, -0.75, -0.15], ['c', -0.27, 0.06, -0.48, 0.18, -0.69, 0.36], ['c', -0.39, 0.39, -0.51, 0.96, -0.33, 1.38], ['c', 0.09, 0.21, 0.42, 0.51, 0.78, 0.72], ['c', 1.11, 0.69, 1.59, 1.11, 1.89, 1.68], ['c', 0.21, 0.39, 0.24, 0.78, 0.15, 1.29], ['c', -0.18, 1.20, -1.17, 2.16, -2.52, 2.52], ['c', -1.02, 0.24, -1.95, 0.12, -2.70, -0.42], ['c', -0.72, -0.51, -0.99, -1.47, -0.60, -2.19], ['c', 0.24, -0.48, 0.72, -0.63, 1.17, -0.42], ['c', 0.33, 0.18, 0.54, 0.45, 0.57, 0.81], ['c', 0.00, 0.21, -0.03, 0.30, -0.33, 0.51], ['c', -0.33, 0.24, -0.39, 0.42, -0.27, 0.69], ['c', 0.06, 0.15, 0.21, 0.27, 0.45, 0.33], ['c', 0.30, 0.09, 0.87, 0.09, 1.20, 0.00], ['c', 0.75, -0.21, 1.23, -0.72, 1.29, -1.35], ['c', 0.03, -0.42, -0.15, -0.81, -0.54, -1.20], ['c', -0.24, -0.24, -0.48, -0.42, -1.41, -1.02], ['c', -0.69, -0.42, -1.05, -0.93, -1.05, -1.47], ['c', 0.00, -0.39, 0.12, -0.87, 0.30, -1.23], ['c', 0.27, -0.57, 0.78, -1.05, 1.38, -1.35], ['c', 0.24, -0.12, 0.63, -0.27, 0.90, -0.30], ['z']], w: 6.632, h: 8.758 },\n\t'z': { d: [['M', 2.64, -7.95], ['c', 0.36, -0.09, 0.81, -0.03, 1.71, 0.27], ['c', 0.78, 0.21, 0.96, 0.27, 1.74, 0.30], ['c', 0.87, 0.06, 1.02, 0.03, 1.38, -0.21], ['c', 0.21, -0.15, 0.33, -0.15, 0.48, -0.06], ['c', 0.15, 0.09, 0.21, 0.30, 0.15, 0.45], ['c', -0.03, 0.06, -1.26, 1.26, -2.76, 2.67], ['l', -2.73, 2.55], ['l', 0.54, 0.03], ['c', 0.54, 0.03, 0.72, 0.03, 2.01, 0.15], ['c', 0.36, 0.03, 0.90, 0.06, 1.20, 0.09], ['c', 0.66, 0.00, 0.81, -0.03, 1.02, -0.24], ['c', 0.30, -0.30, 0.39, -0.72, 0.27, -1.23], ['c', -0.06, -0.27, -0.06, -0.27, -0.03, -0.39], ['c', 0.15, -0.30, 0.54, -0.27, 0.69, 0.03], ['c', 0.15, 0.33, 0.27, 1.02, 0.27, 1.50], ['c', 0.00, 1.47, -1.11, 2.70, -2.52, 2.79], ['c', -0.57, 0.03, -1.02, -0.09, -2.01, -0.51], ['c', -1.02, -0.42, -1.23, -0.48, -2.13, -0.54], ['c', -0.81, -0.06, -0.96, -0.03, -1.26, 0.18], ['c', -0.12, 0.06, -0.24, 0.12, -0.27, 0.12], ['c', -0.27, 0.00, -0.45, -0.30, -0.36, -0.51], ['c', 0.03, -0.06, 1.32, -1.32, 2.91, -2.79], ['l', 2.88, -2.73], ['c', -0.03, 0.00, -0.21, 0.03, -0.42, 0.06], ['c', -0.21, 0.03, -0.78, 0.09, -1.23, 0.12], ['c', -1.11, 0.12, -1.23, 0.15, -1.95, 0.27], ['c', -0.72, 0.15, -1.17, 0.18, -1.29, 0.09], ['c', -0.27, -0.18, -0.21, -0.75, 0.12, -1.26], ['c', 0.39, -0.60, 0.93, -1.02, 1.59, -1.20], ['z']], w: 8.573, h: 8.743 },\n\t'+': { d: [['M', 3.48, -9.3], ['c', 0.18, -0.09, 0.36, -0.09, 0.54, 0.00], ['c', 0.18, 0.09, 0.24, 0.15, 0.33, 0.30], ['l', 0.06, 0.15], ['l', 0.00, 1.29], ['l', 0.00, 1.29], ['l', 1.29, 0.00], ['c', 1.23, 0.00, 1.29, 0.00, 1.41, 0.06], ['c', 0.06, 0.03, 0.15, 0.09, 0.18, 0.12], ['c', 0.12, 0.09, 0.21, 0.33, 0.21, 0.48], ['c', 0.00, 0.15, -0.09, 0.39, -0.21, 0.48], ['c', -0.03, 0.03, -0.12, 0.09, -0.18, 0.12], ['c', -0.12, 0.06, -0.18, 0.06, -1.41, 0.06], ['l', -1.29, 0.00], ['l', 0.00, 1.29], ['c', 0.00, 1.23, 0.00, 1.29, -0.06, 1.41], ['c', -0.09, 0.18, -0.15, 0.24, -0.30, 0.33], ['c', -0.21, 0.09, -0.39, 0.09, -0.57, 0.00], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.06, -0.12, -0.06, -0.18, -0.06, -1.41], ['l', 0.00, -1.29], ['l', -1.29, 0.00], ['c', -1.23, 0.00, -1.29, 0.00, -1.41, -0.06], ['c', -0.18, -0.09, -0.24, -0.15, -0.33, -0.33], ['c', -0.09, -0.18, -0.09, -0.36, 0.00, -0.54], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['l', 0.15, -0.06], ['l', 1.26, 0.00], ['l', 1.29, 0.00], ['l', 0.00, -1.29], ['c', 0.00, -1.23, 0.00, -1.29, 0.06, -1.41], ['c', 0.09, -0.18, 0.15, -0.24, 0.33, -0.33], ['z']], w: 7.507, h: 7.515 },\n\t',': { d: [['M', 1.32, -3.36], ['c', 0.57, -0.15, 1.17, 0.03, 1.59, 0.45], ['c', 0.45, 0.45, 0.60, 0.96, 0.51, 1.89], ['c', -0.09, 1.23, -0.42, 2.46, -0.99, 3.93], ['c', -0.30, 0.72, -0.72, 1.62, -0.78, 1.68], ['c', -0.18, 0.21, -0.51, 0.18, -0.66, -0.06], ['c', -0.03, -0.06, -0.06, -0.15, -0.06, -0.18], ['c', 0.00, -0.06, 0.12, -0.33, 0.24, -0.63], ['c', 0.84, -1.80, 1.02, -2.61, 0.69, -3.24], ['c', -0.12, -0.24, -0.27, -0.36, -0.75, -0.60], ['c', -0.36, -0.15, -0.42, -0.21, -0.60, -0.39], ['c', -0.69, -0.69, -0.69, -1.71, 0.00, -2.40], ['c', 0.21, -0.21, 0.51, -0.39, 0.81, -0.45], ['z']], w: 3.452, h: 8.143 },\n\t'-': { d: [['M', 0.18, -5.34], ['c', 0.09, -0.06, 0.15, -0.06, 2.31, -0.06], ['c', 2.46, 0.00, 2.37, 0.00, 2.46, 0.21], ['c', 0.12, 0.21, 0.03, 0.42, -0.15, 0.54], ['c', -0.09, 0.06, -0.15, 0.06, -2.28, 0.06], ['c', -2.16, 0.00, -2.22, 0.00, -2.31, -0.06], ['c', -0.27, -0.15, -0.27, -0.54, -0.03, -0.69], ['z']], w: 5.001, h: 0.81 },\n\t'.': { d: [['M', 1.32, -3.36], ['c', 1.05, -0.27, 2.10, 0.57, 2.10, 1.65], ['c', 0.00, 1.08, -1.05, 1.92, -2.10, 1.65], ['c', -0.90, -0.21, -1.50, -1.14, -1.26, -2.04], ['c', 0.12, -0.63, 0.63, -1.11, 1.26, -1.26], ['z']], w: 3.413, h: 3.402 },\n\t'scripts.wedge': { d: [['M', -3.66, -7.44], ['c', 0.06, -0.09, 0.00, -0.09, 0.81, 0.03], ['c', 1.86, 0.30, 3.84, 0.30, 5.73, 0.00], ['c', 0.78, -0.12, 0.72, -0.12, 0.78, -0.03], ['c', 0.15, 0.15, 0.12, 0.24, -0.24, 0.60], ['c', -0.93, 0.93, -1.98, 2.76, -2.67, 4.62], ['c', -0.30, 0.78, -0.51, 1.71, -0.51, 2.13], ['c', 0.00, 0.15, 0.00, 0.18, -0.06, 0.27], ['c', -0.12, 0.09, -0.24, 0.09, -0.36, 0.00], ['c', -0.06, -0.09, -0.06, -0.12, -0.06, -0.27], ['c', 0.00, -0.42, -0.21, -1.35, -0.51, -2.13], ['c', -0.69, -1.86, -1.74, -3.69, -2.67, -4.62], ['c', -0.36, -0.36, -0.39, -0.45, -0.24, -0.60], ['z']], w: 7.49, h: 7.752 },\n\t'scripts.thumb': { d: [['M', -0.54, -3.69], ['c', 0.15, -0.03, 0.36, -0.06, 0.51, -0.06], ['c', 1.44, 0.00, 2.58, 1.11, 2.94, 2.85], ['c', 0.09, 0.48, 0.09, 1.32, 0.00, 1.80], ['c', -0.27, 1.41, -1.08, 2.43, -2.16, 2.73], ['l', -0.18, 0.06], ['l', 0.00, 0.12], ['c', 0.03, 0.06, 0.06, 0.45, 0.09, 0.87], ['c', 0.03, 0.57, 0.03, 0.78, 0.00, 0.84], ['c', -0.09, 0.27, -0.39, 0.48, -0.66, 0.48], ['c', -0.27, 0.00, -0.57, -0.21, -0.66, -0.48], ['c', -0.03, -0.06, -0.03, -0.27, 0.00, -0.84], ['c', 0.03, -0.42, 0.06, -0.81, 0.09, -0.87], ['l', 0.00, -0.12], ['l', -0.18, -0.06], ['c', -1.08, -0.30, -1.89, -1.32, -2.16, -2.73], ['c', -0.09, -0.48, -0.09, -1.32, 0.00, -1.80], ['c', 0.15, -0.84, 0.51, -1.53, 1.02, -2.04], ['c', 0.39, -0.39, 0.84, -0.63, 1.35, -0.75], ['z'], ['m', 1.05, 0.90], ['c', -0.15, -0.09, -0.21, -0.09, -0.45, -0.12], ['c', -0.15, 0.00, -0.30, 0.03, -0.39, 0.03], ['c', -0.57, 0.18, -0.90, 0.72, -1.08, 1.74], ['c', -0.06, 0.48, -0.06, 1.80, 0.00, 2.28], ['c', 0.15, 0.90, 0.42, 1.44, 0.90, 1.65], ['c', 0.18, 0.09, 0.21, 0.09, 0.51, 0.09], ['c', 0.30, 0.00, 0.33, 0.00, 0.51, -0.09], ['c', 0.48, -0.21, 0.75, -0.75, 0.90, -1.65], ['c', 0.03, -0.27, 0.03, -0.54, 0.03, -1.14], ['c', 0.00, -0.60, 0.00, -0.87, -0.03, -1.14], ['c', -0.15, -0.90, -0.45, -1.44, -0.90, -1.65], ['z']], w: 5.955, h: 9.75 },\n\t'scripts.open': { d: [['M', -0.54, -3.69], ['c', 0.15, -0.03, 0.36, -0.06, 0.51, -0.06], ['c', 1.44, 0.00, 2.58, 1.11, 2.94, 2.85], ['c', 0.09, 0.48, 0.09, 1.32, 0.00, 1.80], ['c', -0.33, 1.74, -1.47, 2.85, -2.91, 2.85], ['c', -1.44, 0.00, -2.58, -1.11, -2.91, -2.85], ['c', -0.09, -0.48, -0.09, -1.32, 0.00, -1.80], ['c', 0.15, -0.84, 0.51, -1.53, 1.02, -2.04], ['c', 0.39, -0.39, 0.84, -0.63, 1.35, -0.75], ['z'], ['m', 1.11, 0.90], ['c', -0.21, -0.09, -0.27, -0.09, -0.51, -0.12], ['c', -0.30, 0.00, -0.42, 0.03, -0.66, 0.15], ['c', -0.24, 0.12, -0.51, 0.39, -0.66, 0.63], ['c', -0.54, 0.93, -0.63, 2.64, -0.21, 3.81], ['c', 0.21, 0.54, 0.51, 0.90, 0.93, 1.11], ['c', 0.21, 0.09, 0.24, 0.09, 0.54, 0.09], ['c', 0.30, 0.00, 0.33, 0.00, 0.54, -0.09], ['c', 0.42, -0.21, 0.72, -0.57, 0.93, -1.11], ['c', 0.36, -0.99, 0.36, -2.37, 0.00, -3.36], ['c', -0.21, -0.54, -0.51, -0.90, -0.90, -1.11], ['z']], w: 5.955, h: 7.5 },\n\t'scripts.longphrase': { d: [['M', 1.47, -15.09], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.54, 0.06, 11.25], ['l', 0.00, 11.25], ['l', -0.63, 0.15], ['c', -0.66, 0.18, -1.44, 0.39, -1.50, 0.39], ['c', -0.03, 0.00, -0.03, -3.39, -0.03, -11.25], ['l', 0.00, -11.25], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 23.04 },\n\t'scripts.mediumphrase': { d: [['M', 1.47, -7.59], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.39, 0.06, 7.50], ['l', 0.00, 7.50], ['l', -0.63, 0.15], ['c', -0.66, 0.18, -1.44, 0.39, -1.50, 0.39], ['c', -0.03, 0.00, -0.03, -2.28, -0.03, -7.50], ['l', 0.00, -7.50], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 15.54 },\n\t'scripts.shortphrase': { d: [['M', 1.47, -7.59], ['c', 0.36, -0.09, 0.66, -0.18, 0.69, -0.18], ['c', 0.06, 0.00, 0.06, 0.21, 0.06, 3.75], ['l', 0.00, 3.75], ['l', -0.42, 0.09], ['c', -0.57, 0.18, -1.65, 0.45, -1.71, 0.45], ['c', -0.03, 0.00, -0.03, -0.72, -0.03, -3.75], ['l', 0.00, -3.75], ['l', 0.36, -0.09], ['c', 0.21, -0.06, 0.66, -0.18, 1.05, -0.27], ['z']], w: 2.16, h: 8.04 },\n\t'scripts.snap': { d: [['M', 4.50, -3.39], ['c', 0.36, -0.03, 0.96, -0.03, 1.35, 0.00], ['c', 1.56, 0.15, 3.15, 0.90, 4.20, 2.01], ['c', 0.24, 0.27, 0.33, 0.42, 0.33, 0.60], ['c', 0.00, 0.27, 0.03, 0.24, -2.46, 2.22], ['c', -1.29, 1.02, -2.40, 1.86, -2.49, 1.92], ['c', -0.18, 0.09, -0.30, 0.09, -0.48, 0.00], ['c', -0.09, -0.06, -1.20, -0.90, -2.49, -1.92], ['c', -2.49, -1.98, -2.46, -1.95, -2.46, -2.22], ['c', 0.00, -0.18, 0.09, -0.33, 0.33, -0.60], ['c', 1.05, -1.08, 2.64, -1.86, 4.17, -2.01], ['z'], ['m', 1.29, 1.17], ['c', -1.47, -0.15, -2.97, 0.30, -4.14, 1.20], ['l', -0.18, 0.15], ['l', 0.06, 0.09], ['c', 0.15, 0.12, 3.63, 2.85, 3.66, 2.85], ['c', 0.03, 0.00, 3.51, -2.73, 3.66, -2.85], ['l', 0.06, -0.09], ['l', -0.18, -0.15], ['c', -0.84, -0.66, -1.89, -1.08, -2.94, -1.20], ['z']], w: 10.38, h: 6.84 }\n};\n\n// Custom characters that weren't generated from the font:\nglyphs['noteheads.slash.whole'] = { d: [['M', 5, -5], ['l', 1, 1], ['l', -5, 5], ['l', -1, -1], ['z'], ['m', 4, 6], ['l', -5, -5], ['l', 2, -2], ['l', 5, 5], ['z'], ['m', 0, -2], ['l', 1, 1], ['l', -5, 5], ['l', -1, -1], ['z'], ['m', -4, 6], ['l', -5, -5], ['l', 2, -2], ['l', 5, 5], ['z']], w: 10.81, h: 15.63 };\n\nglyphs['noteheads.slash.quarter'] = { d: [['M', 9, -6], ['l', 0, 4], ['l', -9, 9], ['l', 0, -4], ['z']], w: 9, h: 9 };\n\nglyphs['noteheads.harmonic.quarter'] = { d: [['M', 3.63, -4.02], ['c', 0.09, -0.06, 0.18, -0.09, 0.24, -0.03], ['c', 0.03, 0.03, 0.87, 0.93, 1.83, 2.01], ['c', 1.50, 1.65, 1.80, 1.98, 1.80, 2.04], ['c', 0.00, 0.06, -0.30, 0.39, -1.80, 2.04], ['c', -0.96, 1.08, -1.80, 1.98, -1.83, 2.01], ['c', -0.06, 0.06, -0.15, 0.03, -0.24, -0.03], ['c', -0.12, -0.09, -3.54, -3.84, -3.60, -3.93], ['c', -0.03, -0.03, -0.03, -0.09, -0.03, -0.15], ['c', 0.03, -0.06, 3.45, -3.84, 3.63, -3.96], ['z']], w: 7.5, h: 8.165 };\n\nglyphs['noteheads.triangle.quarter'] = { d: [['M', 0, 0], ['l', 9, 0], ['l', -4.5, -9], ['z']], w: 9, h: 9 };\n\nvar pathClone = function (pathArray) {\n\tvar res = [];\n\tfor (var i = 0, ii = pathArray.length; i < ii; i++) {\n\t\tres[i] = [];\n\t\tfor (var j = 0, jj = pathArray[i].length; j < jj; j++) {\n\t\t\tres[i][j] = pathArray[i][j];\n\t\t}\n\t}\n\treturn res;\n};\n\nvar pathScale = function (pathArray, kx, ky) {\n\tfor (var i = 0, ii = pathArray.length; i < ii; i++) {\n\t\tvar p = pathArray[i];\n\t\tvar j, jj;\n\t\tfor (j = 1, jj = p.length; j < jj; j++) {\n\t\t\tp[j] *= (j % 2) ? kx : ky;\n\t\t}\n\t}\n};\n\nvar Glyphs = {\n\tprintSymbol: function (x, y, symb, paper, attrs) {\n\t\tif (!glyphs[symb]) return null;\n\t\tvar pathArray = pathClone(glyphs[symb].d);\n\t\tpathArray[0][1] += x;\n\t\tpathArray[0][2] += y;\n\t\tvar path = \"\";\n\t\tfor (var i = 0; i < pathArray.length; i++)\n\t\t\tpath += pathArray[i].join(\" \");\n\t\tattrs.path = path;\n\t\treturn paper.path(attrs);\n\t},\n\n\tgetPathForSymbol: function (x, y, symb, scalex, scaley) {\n\t\tscalex = scalex || 1;\n\t\tscaley = scaley || 1;\n\t\tif (!glyphs[symb]) return null;\n\t\tvar pathArray = pathClone(glyphs[symb].d);\n\t\tif (scalex !== 1 || scaley !== 1) pathScale(pathArray, scalex, scaley);\n\t\tpathArray[0][1] += x;\n\t\tpathArray[0][2] += y;\n\n\t\treturn pathArray;\n\t},\n\n\tgetSymbolWidth: function (symbol) {\n\t\tif (glyphs[symbol]) return glyphs[symbol].w;\n\t\treturn 0;\n\t},\n\n\tsymbolHeightInPitches: function (symbol) {\n\t\tvar height = glyphs[symbol] ? glyphs[symbol].h : 0;\n\t\treturn height / spacing.STEP;\n\t},\n\n\tgetSymbolAlign: function (symbol) {\n\t\tif (symbol.substring(0, 7) === \"scripts\" &&\n\t\t\tsymbol !== \"scripts.roll\") {\n\t\t\treturn \"center\";\n\t\t}\n\t\treturn \"left\";\n\t},\n\n\tgetYCorr: function (symbol) {\n\t\tswitch (symbol) {\n\t\t\tcase \"0\":\n\t\t\tcase \"1\":\n\t\t\tcase \"2\":\n\t\t\tcase \"3\":\n\t\t\tcase \"4\":\n\t\t\tcase \"5\":\n\t\t\tcase \"6\":\n\t\t\tcase \"7\":\n\t\t\tcase \"8\":\n\t\t\tcase \"9\":\n\t\t\tcase \"+\": return -2;\n\t\t\tcase \"timesig.common\":\n\t\t\tcase \"timesig.cut\": return 0;\n\t\t\tcase \"flags.d32nd\": return -1;\n\t\t\tcase \"flags.d64th\": return -2;\n\t\t\tcase \"flags.u32nd\": return 1;\n\t\t\tcase \"flags.u64th\": return 3;\n\t\t\tcase \"rests.whole\": return 1;\n\t\t\tcase \"rests.half\": return -1;\n\t\t\tcase \"rests.8th\": return -1;\n\t\t\tcase \"rests.quarter\": return -1;\n\t\t\tcase \"rests.16th\": return -1;\n\t\t\tcase \"rests.32nd\": return -1;\n\t\t\tcase \"rests.64th\": return -1;\n\t\t\tcase \"f\":\n\t\t\tcase \"m\":\n\t\t\tcase \"p\":\n\t\t\tcase \"s\":\n\t\t\tcase \"z\":\n\t\t\t\treturn -4;\n\t\t\tcase \"scripts.trill\":\n\t\t\tcase \"scripts.upbow\":\n\t\t\tcase \"scripts.downbow\":\n\t\t\t\treturn -2;\n\t\t\tcase \"scripts.ufermata\":\n\t\t\tcase \"scripts.wedge\":\n\t\t\tcase \"scripts.roll\":\n\t\t\tcase \"scripts.shortphrase\":\n\t\t\tcase \"scripts.longphrase\":\n\t\t\t\treturn -1;\n\t\t\tcase \"scripts.dfermata\":\n\t\t\t\treturn 1;\n\t\t\tdefault: return 0;\n\t\t}\n\t},\n\tsetSymbol: function (name, path) {\n\t\tglyphs[name] = path;\n\t}\n};\n\nmodule.exports = Glyphs; // we need the glyphs for layout information\n","function germanNote(note) {\n\tswitch (note) {\n\t\tcase \"B#\": return \"H#\";\n\t\tcase \"B♯\": return \"H♯\";\n\t\tcase \"B\": return \"H\";\n\t\tcase \"Bb\": return \"B\";\n\t\tcase \"B♭\": return \"B\";\n\t}\n\treturn note;\n}\n\nfunction translateChord(chordString, jazzchords, germanAlphabet) {\n\tvar lines = chordString.split(\"\\n\");\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tlet chord = lines[i];\n\t\t// If the chord isn't in a recognizable format then just skip it.\n\t\tlet reg = chord.match(/^([ABCDEFG][♯♭]?)?([^\\/]+)?(\\/([ABCDEFG][#b♯♭]?))?/);\n\t\tif (!reg) {\n\t\t\tcontinue;\n\t\t}\n\t\tlet baseChord = reg[1] || \"\";\n\t\tlet modifier = reg[2] || \"\";\n\t\tlet bassNote = reg[4] || \"\";\n\t\tif (germanAlphabet) {\n\t\t\tbaseChord = germanNote(baseChord);\n\t\t\tbassNote = germanNote(bassNote);\n\t\t}\n\t\t// This puts markers in the pieces of the chord that are read by the svg creator.\n\t\t// After the main part of the chord (the letter, a sharp or flat, and \"m\") a marker is added. Before a slash a marker is added.\n\t\tconst marker = jazzchords ? \"\\x03\" : \"\";\n\t\tconst bass = bassNote ? \"/\" + bassNote : \"\";\n\t\tlines[i] = [baseChord, modifier, bass].join(marker);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nmodule.exports = translateChord;\n","var drawTempo = require('./tempo');\nvar drawRelativeElement = require('./relative');\nvar spacing = require('../helpers/spacing');\nvar setClass = require('../helpers/set-class');\nvar elementGroup = require('./group-elements');\n\nfunction drawAbsolute(renderer, params, bartop, selectables, staffPos) {\n\tif (params.invisible) return;\n\tvar isTempo = params.children.length > 0 && params.children[0].type === \"TempoElement\";\n\tparams.elemset = [];\n\telementGroup.beginGroup(renderer.paper, renderer.controller);\n\tfor (var i = 0; i < params.children.length; i++) {\n\t\tvar child = params.children[i];\n\t\tswitch (child.type) {\n\t\t\tcase \"TempoElement\":\n\t\t\t\tdrawTempo(renderer, child);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tdrawRelativeElement(renderer, child, bartop);\n\t\t}\n\t}\n\tvar klass = params.type;\n\tif (params.type === 'note' || params.type === 'rest') {\n\t\tparams.counters = renderer.controller.classes.getCurrent();\n\t\tklass += ' d' + Math.round(params.durationClass * 1000) / 1000;\n\t\tklass = klass.replace(/\\./g, '-');\n\t\tif (params.abcelem.pitches) {\n\t\t\tfor (var j = 0; j < params.abcelem.pitches.length; j++) {\n\t\t\t\tklass += ' p' + params.abcelem.pitches[j].pitch;\n\t\t\t}\n\t\t}\n\t}\n\tvar g = elementGroup.endGroup(klass, params.type);\n\tif (g) {\n\t\t// TODO-PER-HACK! This corrects the classes because the tablature is not being created at the right time.\n\t\tif (params.cloned) {\n\t\t\tparams.cloned.overrideClasses = g.className.baseVal\n\t\t}\n\t\tif (params.overrideClasses) {\n\t\t\tvar type = g.classList && g.classList.length > 0 ? g.classList[0] + ' ' : ''\n\t\t\tg.setAttribute(\"class\", type + params.overrideClasses)\n\t\t}\n\t\tif (isTempo) {\n\t\t\tparams.startChar = params.abcelem.startChar;\n\t\t\tparams.endChar = params.abcelem.endChar;\n\t\t\tselectables.add(params, g, false, staffPos);\n\t\t} else {\n\t\t\tparams.elemset.push(g);\n\t\t\tvar isSelectable = false;\n\t\t\tif (params.type === 'note' || params.type === 'tabNumber') {\n\t\t\t\tisSelectable = true;\n\t\t\t}\n\t\t\tselectables.add(params, g, isSelectable, staffPos);\n\t\t}\n\t} else if (params.elemset.length > 0)\n\t\tselectables.add(params, params.elemset[0], params.type === 'note', staffPos);\n\t// If there was no output, then don't add to the selectables. This happens when using the \"y\" spacer, for instance.\n\n\tif (params.klass)\n\t\tsetClass(params.elemset, \"mark\", \"\", \"#00ff00\");\n\tif (params.hint)\n\t\tsetClass(params.elemset, \"abcjs-hint\", \"\", null);\n\tparams.abcelem.abselem = params;\n\n\tif (params.heads && params.heads.length > 0) {\n\t\tparams.notePositions = [];\n\t\tfor (var jj = 0; jj < params.heads.length; jj++) {\n\t\t\tparams.notePositions.push({\n\t\t\t\tx: params.heads[jj].x + params.heads[jj].w / 2,\n\t\t\t\ty: staffPos.zero - params.heads[jj].pitch * spacing.STEP\n\t\t\t});\n\t\t}\n\t}\n}\n\nmodule.exports = drawAbsolute;\n","var printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawBeam(renderer, params) {\n\tif (params.beams.length === 0) return;\n\n\tvar pathString = \"\";\n\tfor (var i = 0; i < params.beams.length; i++) {\n\t\tvar beam = params.beams[i];\n\t\tif (beam.split) {\n\t\t\tvar slope = getSlope(renderer, beam.startX, beam.startY, beam.endX, beam.endY);\n\t\t\tvar xes = [];\n\t\t\tfor (var j = 0; j < beam.split.length; j += 2) {\n\t\t\t\txes.push([beam.split[j], beam.split[j + 1]]);\n\t\t\t}\n\t\t\tfor (j = 0; j < xes.length; j++) {\n\t\t\t\tvar y1 = getY(beam.startX, beam.startY, slope, xes[j][0]);\n\t\t\t\tvar y2 = getY(beam.startX, beam.startY, slope, xes[j][1]);\n\t\t\t\tpathString += draw(renderer, xes[j][0], y1, xes[j][1], y2, beam.dy);\n\t\t\t}\n\t\t} else\n\t\t\tpathString += draw(renderer, beam.startX, beam.startY, beam.endX, beam.endY, beam.dy);\n\t}\n\tvar durationClass = (\"abcjs-d\" + params.duration).replace(/\\./g, \"-\");\n\tvar klasses = renderer.controller.classes.generate('beam-elem ' + durationClass);\n\tvar el = printPath(renderer, {\n\t\tpath: pathString,\n\t\tstroke: \"none\",\n\t\tfill: renderer.foregroundColor,\n\t\t'class': klasses\n\t});\n\treturn [el];\n}\n\nfunction draw(renderer, startX, startY, endX, endY, dy) {\n\t// the X coordinates are actual coordinates, but the Y coordinates are in pitches.\n\tstartY = roundNumber(renderer.calcY(startY));\n\tendY = roundNumber(renderer.calcY(endY));\n\tstartX = roundNumber(startX);\n\tendX = roundNumber(endX);\n\tvar startY2 = roundNumber(startY + dy);\n\tvar endY2 = roundNumber(endY + dy);\n\treturn \"M\" + startX + \" \" + startY + \" L\" + endX + \" \" + endY +\n\t\t\"L\" + endX + \" \" + endY2 + \" L\" + startX + \" \" + startY2 + \"z\";\n}\n\nfunction getSlope(renderer, startX, startY, endX, endY) {\n\treturn (endY - startY) / (endX - startX);\n}\n\nfunction getY(startX, startY, slope, currentX) {\n\tvar x = currentX - startX;\n\treturn startY + x * slope;\n}\n\nmodule.exports = drawBeam;\n","var sprintf = require('./sprintf');\nvar spacing = require('../helpers/spacing');\nvar renderText = require('./text');\n\nfunction drawBrace(renderer, params, selectables) {\n\t// The absoluteY number is the spot where the note on the first ledger line is drawn (i.e. middle C if treble clef)\n\t// The STEP offset here moves it to the top and bottom lines\n\tvar startY = params.startVoice.staff.absoluteY - spacing.STEP * 10;\n\tif (params.endVoice && params.endVoice.staff)\n\t\tparams.endY = params.endVoice.staff.absoluteY - spacing.STEP * 2;\n\telse if (params.lastContinuedVoice && params.lastContinuedVoice.staff)\n\t\tparams.endY = params.lastContinuedVoice.staff.absoluteY - spacing.STEP * 2;\n\telse\n\t\tparams.endY = params.startVoice.staff.absoluteY - spacing.STEP * 2;\n\treturn draw(renderer, params.x, startY, params.endY, params.type, params.header, selectables);\n}\n\nfunction straightPath(renderer, xLeft, yTop, yBottom, type) {\n\txLeft += spacing.STEP;\n\tvar xLineWidth = spacing.STEP * 0.75;\n\tvar yOverlap = spacing.STEP * 0.75;\n\tvar height = yBottom - yTop;\n\t// Straight line\n\tvar pathString = sprintf(\"M %f %f l %f %f l %f %f l %f %f z\",\n\t\txLeft, yTop - yOverlap, // top left line\n\t\t0, height + yOverlap * 2, // bottom left line\n\t\txLineWidth, 0, // bottom right line\n\t\t0, - (height + yOverlap * 2) // top right line\n\t);\n\t// Top arm\n\tvar wCurve = spacing.STEP * 2;\n\tvar hCurve = spacing.STEP;\n\tpathString += sprintf(\"M %f %f q %f %f %f %f q %f %f %f %f z\",\n\t\txLeft + xLineWidth, yTop - yOverlap, // top left arm\n\t\twCurve * 0.6, hCurve * 0.2,\n\t\twCurve, -hCurve, // right point\n\t\t-wCurve * 0.1, hCurve * 0.3,\n\t\t-wCurve, hCurve + spacing.STEP // left bottom\n\t);\n\t// Bottom arm\n\tpathString += sprintf(\"M %f %f q %f %f %f %f q %f %f %f %f z\",\n\t\txLeft + xLineWidth, yTop + yOverlap + height, // bottom left arm\n\t\twCurve * 0.6, -hCurve * 0.2,\n\t\twCurve, hCurve, // right point\n\t\t-wCurve * 0.1, -hCurve * 0.3,\n\t\t-wCurve, -hCurve - spacing.STEP // left bottom\n\t);\n\treturn renderer.paper.path({ path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(type), \"data-name\": type });\n}\n\nfunction curvyPath(renderer, xLeft, yTop, yBottom, type) {\n\tvar yHeight = yBottom - yTop;\n\n\tvar pathString = curve(xLeft,\n\t\tyTop,\n\t\t[7.5, -8, 21, 0, 18.5, -10.5, 7.5],\n\t\t[0, yHeight / 5.5, yHeight / 3.14, yHeight / 2, yHeight / 2.93, yHeight / 4.88, 0]);\n\n\tpathString += curve(xLeft,\n\t\tyTop,\n\t\t[0, 17.5, -7.5, 6.6, -5, 20, 0],\n\t\t[yHeight / 2, yHeight / 1.46, yHeight / 1.22, yHeight, yHeight / 1.19, yHeight / 1.42, yHeight / 2]);\n\n\treturn renderer.paper.path({ path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(type), \"data-name\": type });\n}\n\nfunction curve(xLeft, yTop, xCurve, yCurve) {\n\treturn sprintf(\"M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z\",\n\t\txLeft + xCurve[0], yTop + yCurve[0],\n\t\txLeft + xCurve[1], yTop + yCurve[1],\n\t\txLeft + xCurve[2], yTop + yCurve[2],\n\t\txLeft + xCurve[3], yTop + yCurve[3],\n\t\txLeft + xCurve[4], yTop + yCurve[4],\n\t\txLeft + xCurve[5], yTop + yCurve[5],\n\t\txLeft + xCurve[6], yTop + yCurve[6]);\n}\n\nvar draw = function (renderer, xLeft, yTop, yBottom, type, header, selectables) {//Tony\n\tvar ret;\n\tif (header) {\n\t\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate(\"staff-extra voice-name\"), \"data-name\": type });\n\t\tvar position = yTop + (yBottom - yTop) / 2;\n\t\tposition = position - renderer.controller.getTextSize.baselineToCenter(header, \"voicefont\", 'staff-extra voice-name', 0, 1);\n\n\t\trenderText(renderer, {\n\t\t\tx: renderer.padding.left,\n\t\t\ty: position,\n\t\t\ttext: header,\n\t\t\ttype: 'voicefont',\n\t\t\tklass: 'staff-extra voice-name',\n\t\t\tanchor: 'start',\n\t\t\tcenterVertically: true\n\t\t});\n\t}\n\tif (type === \"brace\")\n\t\tret = curvyPath(renderer, xLeft, yTop, yBottom, type);\n\telse if (type === \"bracket\")\n\t\tret = straightPath(renderer, xLeft, yTop, yBottom, type);\n\tif (header) {\n\t\tret = renderer.paper.closeGroup();\n\t}\n\tselectables.wrapSvgEl({ el_type: type, startChar: -1, endChar: -1 }, ret);\n\n\treturn ret;\n};\nmodule.exports = drawBrace;\n","var sprintf = require('./sprintf');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawCrescendo(renderer, params, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Crescendo Element y-coordinate not set.\");\n\tvar y = renderer.calcY(params.pitch) + 4; // This is the top pixel to use (it is offset a little so that it looks good with the volume marks.)\n\tvar height = 8;\n\n\t// TODO-PER: This is just a quick hack to make the dynamic marks not crash if they are mismatched. See the slur treatment for the way to get the beginning and end.\n\tvar left = params.anchor1 ? params.anchor1.x : 0;\n\tvar right = params.anchor2 ? params.anchor2.x : 800;\n\n\tvar el;\n\tif (params.dir === \"<\") {\n\t\tel = drawLine(renderer, y + height / 2, y, y + height / 2, y + height, left, right);\n\t} else {\n\t\tel = drawLine(renderer, y, y + height / 2, y + height, y + height / 2, left, right);\n\t}\n\tselectables.wrapSvgEl({ el_type: \"dynamicDecoration\", startChar: -1, endChar: -1 }, el);\n\treturn [el];\n}\n\nvar drawLine = function (renderer, y1, y2, y3, y4, left, right) {\n\ty1 = roundNumber(y1);\n\ty2 = roundNumber(y2);\n\ty3 = roundNumber(y3);\n\ty4 = roundNumber(y4);\n\tleft = roundNumber(left);\n\tright = roundNumber(right);\n\n\tvar pathString = sprintf(\"M %f %f L %f %f M %f %f L %f %f\",\n\t\tleft, y1, right, y2, left, y3, right, y4);\n\treturn printPath(renderer, { path: pathString, highlight: \"stroke\", stroke: renderer.foregroundColor, 'class': renderer.controller.classes.generate('dynamics decoration'), \"data-name\": \"dynamics\" });\n};\n\nmodule.exports = drawCrescendo;\n","function printDebugBox(renderer, attr, comment) {\n\tvar box = renderer.paper.rectBeneath(attr);\n\tif (comment)\n\t\trenderer.paper.text(comment, { x: 0, y: attr.y + 7, \"text-anchor\": \"start\", \"font-size\": \"14px\", fill: \"rgba(0,0,255,.4)\", stroke: \"rgba(0,0,255,.4)\" });\n\treturn box;\n}\n\nmodule.exports = printDebugBox;\n","var drawStaffGroup = require('./staff-group');\nvar setPaperSize = require('./set-paper-size');\nvar nonMusic = require('./non-music');\nvar spacing = require('../helpers/spacing');\nvar Selectables = require('./selectables');\n\nfunction draw(renderer, classes, abcTune, width, maxWidth, responsive, scale, selectTypes, tuneNumber, lineOffset) {\n\tvar selectables = new Selectables(renderer.paper, selectTypes, tuneNumber);\n\trenderer.paper.openGroup()\n\trenderer.moveY(renderer.padding.top);\n\tnonMusic(renderer, abcTune.topText, selectables);\n\trenderer.paper.closeGroup()\n\trenderer.moveY(renderer.spacing.music);\n\tvar staffgroups = [];\n\tfor (var line = 0; line < abcTune.lines.length; line++) {\n\t\tclasses.incrLine();\n\t\tvar abcLine = abcTune.lines[line];\n\t\tif (abcLine.staff) {\n\t\t\trenderer.paper.openGroup()\n\t\t\tif (abcLine.vskip) {\n\t\t\t\trenderer.moveY(abcLine.vskip);\n\t\t\t}\n\t\t\tif (staffgroups.length >= 1)\n\t\t\t\taddStaffPadding(renderer, renderer.spacing.staffSeparation, staffgroups[staffgroups.length - 1], abcLine.staffGroup);\n\t\t\tvar staffgroup = engraveStaffLine(renderer, abcLine.staffGroup, selectables, line);\n\t\t\tstaffgroup.line = lineOffset + line; // If there are non-music lines then the staffgroup array won't line up with the line array, so this keeps track.\n\t\t\tstaffgroups.push(staffgroup);\n\t\t\trenderer.paper.closeGroup()\n\t\t} else if (abcLine.nonMusic) {\n\t\t\trenderer.paper.openGroup()\n\t\t\tnonMusic(renderer, abcLine.nonMusic, selectables);\n\t\t\trenderer.paper.closeGroup()\n\t\t}\n\t}\n\n\tclasses.reset();\n\tif (abcTune.bottomText && abcTune.bottomText.rows && abcTune.bottomText.rows.length > 0) {\n\t\trenderer.paper.openGroup()\n\t\trenderer.moveY(24); // TODO-PER: Empirically discovered. What variable should this be?\n\t\tnonMusic(renderer, abcTune.bottomText, selectables);\n\t\trenderer.paper.closeGroup()\n\t}\n\tsetPaperSize(renderer, maxWidth, scale, responsive);\n\treturn { staffgroups: staffgroups, selectables: selectables.getElements() };\n}\n\nfunction engraveStaffLine(renderer, staffGroup, selectables, lineNumber) {\n\tdrawStaffGroup(renderer, staffGroup, selectables, lineNumber);\n\tvar height = staffGroup.height * spacing.STEP;\n\trenderer.y += height;\n\treturn staffGroup;\n}\n\nfunction addStaffPadding(renderer, staffSeparation, lastStaffGroup, thisStaffGroup) {\n\tvar lastStaff = lastStaffGroup.staffs[lastStaffGroup.staffs.length - 1];\n\tvar lastBottomLine = -(lastStaff.bottom - 2); // The 2 is because the scale goes to 2 below the last line.\n\tvar nextTopLine = thisStaffGroup.staffs[0].top - 10; // Because 10 represents the top line.\n\tvar naturalSeparation = nextTopLine + lastBottomLine; // This is how far apart they'd be without extra spacing\n\tvar separationInPixels = naturalSeparation * spacing.STEP;\n\tif (separationInPixels < staffSeparation)\n\t\trenderer.moveY(staffSeparation - separationInPixels);\n}\n\nmodule.exports = draw;\n","var printSymbol = require('./print-symbol');\n\nfunction drawDynamics(renderer, params, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Dynamic Element y-coordinate not set.\");\n\tvar scalex = 1;\n\tvar scaley = 1;\n\tvar el = printSymbol(renderer, params.anchor.x, params.pitch, params.dec, {\n\t\tscalex: scalex,\n\t\tscaley: scaley,\n\t\tklass: renderer.controller.classes.generate('decoration dynamics'),\n\t\tfill: renderer.foregroundColor,\n\t\tstroke: \"none\",\n\t\tname: \"dynamics\"\n\t});\n\tselectables.wrapSvgEl({ el_type: \"dynamicDecoration\", startChar: -1, endChar: -1, decoration: params.dec }, el);\n\treturn [el];\n}\n\nmodule.exports = drawDynamics;\n","var sprintf = require('./sprintf');\nvar renderText = require('./text');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawEnding(renderer, params, linestartx, lineendx, selectables) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Ending Element y-coordinate not set.\");\n\tvar y = roundNumber(renderer.calcY(params.pitch));\n\tvar height = 20;\n\tvar pathString = '';\n\n\tif (params.anchor1) {\n\t\tlinestartx = roundNumber(params.anchor1.x + params.anchor1.w);\n\t\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\t\tlinestartx, y, linestartx, roundNumber(y + height));\n\t}\n\n\tif (params.anchor2) {\n\t\tlineendx = roundNumber(params.anchor2.x);\n\t\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\t\tlineendx, y, lineendx, roundNumber(y + height));\n\t}\n\n\tpathString += sprintf(\"M %f %f L %f %f \",\n\t\tlinestartx, y, lineendx, y);\n\n\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate(\"ending\"), \"data-name\": \"ending\" });\n\tprintPath(renderer, { path: pathString, stroke: renderer.foregroundColor, fill: renderer.foregroundColor, \"data-name\": \"line\" });\n\tif (params.anchor1)\n\t\trenderText(renderer, {\n\t\t\tx: roundNumber(linestartx + 5),\n\t\t\ty: roundNumber(renderer.calcY(params.pitch - 0.5)),\n\t\t\ttext: params.text,\n\t\t\ttype: 'repeatfont',\n\t\t\tklass: 'ending',\n\t\t\tanchor: \"start\",\n\t\t\tnoClass: true,\n\t\t\tname: params.text\n\t\t});\n\tvar g = renderer.paper.closeGroup();\n\tselectables.wrapSvgEl({ el_type: \"ending\", startChar: -1, endChar: -1 }, g);\n\treturn [g];\n}\n\nmodule.exports = drawEnding;\n","var sprintf = require('./sprintf');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawGlissando(renderer, params, selectables) {\n\tif (!params.anchor1 || !params.anchor2 || !params.anchor1.heads || !params.anchor2.heads || params.anchor1.heads.length === 0 || params.anchor2.heads.length === 0)\n\t\twindow.console.error(\"Glissando Element not set.\");\n\n\tvar margin = 4;\n\tvar leftY = renderer.calcY(params.anchor1.heads[0].pitch)\n\tvar rightY = renderer.calcY(params.anchor2.heads[0].pitch)\n\tvar leftX = params.anchor1.x + params.anchor1.w / 2\n\tvar rightX = params.anchor2.x + params.anchor2.w / 2\n\tvar len = lineLength(leftX, leftY, rightX, rightY)\n\tvar marginLeft = params.anchor1.w / 2 + margin\n\tvar marginRight = params.anchor2.w / 2 + margin\n\tvar s = slope(leftX, leftY, rightX, rightY)\n\tvar leftYAdj = getY(leftY, s, marginLeft)\n\tvar rightYAdj = getY(rightY, s, -marginRight)\n\tvar num = numSquigglies(len - marginLeft - marginRight)\n\n\tvar el = drawSquiggly(renderer, leftX + marginLeft, leftYAdj, num, s)\n\tselectables.wrapSvgEl({ el_type: \"glissando\", startChar: -1, endChar: -1 }, el);\n\treturn [el];\n}\n\nfunction lineLength(leftX, leftY, rightX, rightY) {\n\t// The length from notehead center to notehead center.\n\tvar w = rightX - leftX\n\tvar h = rightY - leftY\n\treturn Math.sqrt(w * w + h * h)\n}\n\nfunction slope(leftX, leftY, rightX, rightY) {\n\treturn (rightY - leftY) / (rightX - leftX)\n}\n\nfunction getY(y, slope, xOfs) {\n\treturn roundNumber(y + (xOfs) * slope);\n}\n\nfunction numSquigglies(length) {\n\tvar endLen = 5; // The width of the end - that is, the non repeating part\n\treturn Math.max(2, Math.floor((length - endLen * 2) / 6));\n}\n\nvar leftStart = [[3.5, -4.8]]\nvar right = [[1.5, -1], [.3, -.3], [-3.5, 3.8]]\nvar leftEnd = [[-1.5, 2]]\nvar top = [[3, 4], [3, -4]]\nvar bottom = [[-3, 4], [-3, -4]]\n\nfunction segment(arr, slope) {\n\tvar ret = \"\";\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tret += 'l' + arr[i][0] + ' ' + getY(arr[i][1], slope, arr[i][0])\n\t}\n\treturn ret\n}\n\nvar drawSquiggly = function (renderer, x, y, num, slope) {\n\tvar p = sprintf(\"M %f %f\", x, y);\n\tp += segment(leftStart, slope)\n\tvar i\n\tfor (i = 0; i < num; i++) {\n\t\tp += segment(top, slope)\n\t}\n\tp += segment(right, slope)\n\tfor (i = 0; i < num; i++)\n\t\tp += segment(bottom, slope)\n\tp += segment(leftEnd, slope) + 'z'\n\treturn printPath(renderer, { path: p, highlight: \"stroke\", stroke: renderer.foregroundColor, 'class': renderer.controller.classes.generate('decoration'), \"data-name\": \"glissando\" });\n}\n\nmodule.exports = drawGlissando;\n","/**\n * Begin a group of glyphs that will always be moved, scaled and highlighted together\n */\n\nvar roundNumber = require(\"./round-number\");\n\nfunction Group() {\n\tthis.ingroup = false;\n}\n\nGroup.prototype.beginGroup = function (paper, controller) {\n\tthis.paper = paper;\n\tthis.controller = controller;\n\tthis.path = [];\n\tthis.lastM = [0, 0];\n\tthis.ingroup = true;\n\tthis.paper.openGroup();\n};\n\nGroup.prototype.isInGroup = function () {\n\treturn this.ingroup;\n}\n\nGroup.prototype.addPath = function (path) {\n\tpath = path || [];\n\tif (path.length === 0) return;\n\tpath[0][0] = \"m\";\n\tpath[0][1] = roundNumber(path[0][1] - this.lastM[0]);\n\tpath[0][2] = roundNumber(path[0][2] - this.lastM[1]);\n\tthis.lastM[0] += path[0][1];\n\tthis.lastM[1] += path[0][2];\n\tthis.path.push(path[0]);\n\tfor (var i = 1, ii = path.length; i < ii; i++) {\n\t\tif (path[i][0] === \"m\") {\n\t\t\tthis.lastM[0] += path[i][1];\n\t\t\tthis.lastM[1] += path[i][2];\n\t\t}\n\t\tthis.path.push(path[i]);\n\t}\n};\n\n/**\n * End a group of glyphs that will always be moved, scaled and highlighted together\n */\nGroup.prototype.endGroup = function (klass, name) {\n\tthis.ingroup = false;\n\t//if (this.path.length === 0) return null;\n\tvar path = \"\";\n\tfor (var i = 0; i < this.path.length; i++)\n\t\tpath += this.path[i].join(\" \");\n\tthis.path = [];\n\n\tvar ret = this.paper.closeGroup();\n\tif (ret) {\n\t\tret.setAttribute(\"class\", this.controller.classes.generate(klass))\n\t\tret.setAttribute(\"fill\", this.controller.renderer.foregroundColor)\n\t\tret.setAttribute(\"stroke\", \"none\")\n\t\tret.setAttribute(\"data-name\", name)\n\t}\n\treturn ret;\n};\n\n// There is just a singleton of this object.\nvar elementGroup = new Group();\n\nmodule.exports = elementGroup;\n","var drawSeparator = require('./separator');\nvar renderText = require('./text');\n\nfunction nonMusic(renderer, obj, selectables) {\n\tfor (var i = 0; i < obj.rows.length; i++) {\n\t\tvar row = obj.rows[i];\n\t\tif (row.absmove) {\n\t\t\trenderer.absolutemoveY(row.absmove);\n\t\t} else if (row.move) {\n\t\t\trenderer.moveY(row.move);\n\t\t} else if (row.text) {\n\t\t\tvar x = row.left ? row.left : 0;\n\t\t\tvar el = renderText(renderer, {\n\t\t\t\tx: x,\n\t\t\t\ty: renderer.y,\n\t\t\t\ttext: row.text,\n\t\t\t\ttype: row.font,\n\t\t\t\tklass: row.klass,\n\t\t\t\tname: row.name,\n\t\t\t\tanchor: row.anchor\n\t\t\t});\n\t\t\tif (row.absElemType) {\n\t\t\t\tselectables.wrapSvgEl({\n\t\t\t\t\tel_type: row.absElemType,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tstartChar: row.startChar,\n\t\t\t\t\tendChar: row.endChar,\n\t\t\t\t\ttext: row.text\n\t\t\t\t}, el);\n\t\t\t}\n\t\t} else if (row.separator) {\n\t\t\tdrawSeparator(renderer, row.separator)\n\t\t} else if (row.startGroup) {\n\t\t\trenderer.paper.openGroup({ klass: row.klass, \"data-name\": row.name });\n\t\t} else if (row.endGroup) {\n\t\t\t// TODO-PER: also create a history element with the title \"row.endGroup\"\n\t\t\tvar g = renderer.paper.closeGroup();\n\t\t\tif (row.absElemType)\n\t\t\t\tselectables.wrapSvgEl({\n\t\t\t\t\tel_type: row.absElemType,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tstartChar: row.startChar,\n\t\t\t\t\tendChar: row.endChar,\n\t\t\t\t\ttext: \"\"\n\t\t\t\t}, g);\n\t\t}\n\t}\n}\n\nmodule.exports = nonMusic;\n","var sprintf = require('./sprintf');\nvar roundNumber = require(\"./round-number\");\n\nfunction printLine(renderer, x1, x2, y, klass, name, dy) {\n\tvar fill = renderer.foregroundColor;\n\tx1 = roundNumber(x1);\n\tx2 = roundNumber(x2);\n\tvar y1 = roundNumber(y - dy);\n\tvar y2 = roundNumber(y + dy);\n\t// TODO-PER: This fixes a firefox bug where it isn't displayed\n\tif (renderer.firefox112) {\n\t\ty += dy / 2; // Because the y coordinate is the edge of where the line goes but the width widens from the middle.\n\t\tvar attr = {\n\t\t\tx1: x1,\n\t\t\tx2: x2,\n\t\t\ty1: y,\n\t\t\ty2: y,\n\t\t\tstroke: renderer.foregroundColor,\n\t\t\t'stroke-width': Math.abs(dy*2)\n\t\t}\n\t\tif (klass)\n\t\t\tattr['class'] = klass;\n\t\tif (name)\n\t\t\tattr['data-name'] = name;\n\t\t\n\t\treturn renderer.paper.lineToBack(attr);\n\t}\n\n\tvar pathString = sprintf(\"M %f %f L %f %f L %f %f L %f %f z\", x1, y1, x2, y1,\n\t\tx2, y2, x1, y2);\n\tvar options = { path: pathString, stroke: \"none\", fill: fill };\n\tif (name)\n\t\toptions['data-name'] = name;\n\tif (klass)\n\t\toptions['class'] = klass;\n\tvar ret = renderer.paper.pathToBack(options);\n\n\treturn ret;\n}\n\nmodule.exports = printLine;\n\n","function printPath(renderer, attrs, params) {\n\tvar ret = renderer.paper.path(attrs);\n\n\treturn ret;\n}\n\nmodule.exports = printPath;\n","var elementGroup = require('./group-elements');\nvar roundNumber = require(\"./round-number\");\n\nfunction printStem(renderer, x, dx, y1, y2, klass, name) {\n\tif (dx < 0 || y1 < y2) { // correct path \"handedness\" for intersection with other elements\n\t\tvar tmp = roundNumber(y2);\n\t\ty2 = roundNumber(y1);\n\t\ty1 = tmp;\n\t} else {\n\t\ty1 = roundNumber(y1);\n\t\ty2 = roundNumber(y2);\n\t}\n\tx = roundNumber(x);\n\tvar x2 = roundNumber(x + dx);\n\t// TODO-PER: This fixes a firefox bug where it isn't displayed\n\tif (renderer.firefox112) {\n\t\tx += dx / 2; // Because the x coordinate is the edge of where the line goes but the width widens from the middle.\n\t\tvar attr = {\n\t\t\tx1: x,\n\t\t\tx2: x,\n\t\t\ty1: y1,\n\t\t\ty2: y2,\n\t\t\tstroke: renderer.foregroundColor,\n\t\t\t'stroke-width': Math.abs(dx)\n\t\t}\n\t\tif (klass)\n\t\t\tattr['class'] = klass;\n\t\tif (name)\n\t\t\tattr['data-name'] = name;\n\t\t\n\t\treturn renderer.paper.lineToBack(attr);\n\t}\n\tvar pathArray = [[\"M\", x, y1], [\"L\", x, y2], [\"L\", x2, y2], [\"L\", x2, y1], [\"z\"]];\n\tvar attr = { path: \"\" };\n\tfor (var i = 0; i < pathArray.length; i++)\n\t\tattr.path += pathArray[i].join(\" \");\n\tif (klass)\n\t\tattr['class'] = klass;\n\tif (name)\n\t\tattr['data-name'] = name;\n\tif (!elementGroup.isInGroup()) {\n\t\tattr.stroke = \"none\";\n\t\tattr.fill = renderer.foregroundColor;\n\t}\n\treturn renderer.paper.pathToBack(attr);\n}\n\nmodule.exports = printStem;\n","var renderText = require('./text');\nvar glyphs = require('../creation/glyphs');\nvar elementGroup = require('./group-elements');\n\n/**\n * assumes this.y is set appropriately\n * if symbol is a multichar string without a . (as in scripts.staccato) 1 symbol per char is assumed\n * not scaled if not in printgroup\n */\nfunction printSymbol(renderer, x, offset, symbol, options) {\n\t// TODO-PER: what happened to scalex, and scaley? That might have been a bug introduced in refactoring\n\tvar el;\n\tvar ycorr;\n\tif (!symbol) return null;\n\tif (symbol.length > 1 && symbol.indexOf(\".\") < 0) {\n\t\tvar groupClass = elementGroup.isInGroup() ? '' : options.klass // If this is already in a group then don't repeat the classes for the sub-group)\n\t\trenderer.paper.openGroup({ \"data-name\": options.name, klass: groupClass });\n\t\tvar dx = 0;\n\t\tfor (var i = 0; i < symbol.length; i++) {\n\t\t\tvar s = symbol[i];\n\t\t\tycorr = glyphs.getYCorr(s);\n\t\t\tel = glyphs.printSymbol(x + dx, renderer.calcY(offset + ycorr), s, renderer.paper, { stroke: options.stroke, fill: options.fill });\n\t\t\tif (el) {\n\t\t\t\tif (i < symbol.length - 1)\n\t\t\t\t\tdx += kernSymbols(s, symbol[i + 1], glyphs.getSymbolWidth(s));\n\t\t\t} else {\n\t\t\t\trenderText(renderer, { x: x, y: renderer.y, text: \"no symbol:\" + symbol, type: \"debugfont\", klass: 'debug-msg', anchor: 'start' }, false);\n\t\t\t}\n\t\t}\n\t\tvar g = renderer.paper.closeGroup();\n\t\treturn g;\n\t} else {\n\t\tycorr = glyphs.getYCorr(symbol);\n\t\tif (elementGroup.isInGroup()) {\n\t\t\tel = glyphs.printSymbol(x, renderer.calcY(offset + ycorr), symbol, renderer.paper, { \"data-name\": options.name });\n\t\t} else {\n\t\t\tel = glyphs.printSymbol(x, renderer.calcY(offset + ycorr), symbol, renderer.paper, { klass: options.klass, stroke: options.stroke, fill: options.fill, \"data-name\": options.name });\n\t\t}\n\t\tif (el) {\n\t\t\treturn el;\n\t\t}\n\t\trenderText(renderer, { x: x, y: renderer.y, text: \"no symbol:\" + symbol, type: \"debugfont\", klass: 'debug-msg', anchor: 'start' }, false);\n\t\treturn null;\n\t}\n}\n\nfunction kernSymbols(lastSymbol, thisSymbol, lastSymbolWidth) {\n\t// This is just some adjustments to make it look better.\n\tvar width = lastSymbolWidth;\n\tif (lastSymbol === 'f' && thisSymbol === 'f')\n\t\twidth = width * 2 / 3;\n\tif (lastSymbol === 'p' && thisSymbol === 'p')\n\t\twidth = width * 5 / 6;\n\tif (lastSymbol === 'f' && thisSymbol === 'z')\n\t\twidth = width * 5 / 8;\n\treturn width;\n}\n\nmodule.exports = printSymbol;\n","var renderText = require('./text');\nvar printStem = require('./print-stem');\nvar printStaffLine = require('./staff-line');\nvar printSymbol = require('./print-symbol');\n\nfunction drawRelativeElement(renderer, params, bartop) {\n\tif (params.pitch === undefined)\n\t\twindow.console.error(params.type + \" Relative Element y-coordinate not set.\");\n\tvar y = renderer.calcY(params.pitch);\n\tswitch (params.type) {\n\t\tcase \"symbol\":\n\t\t\tif (params.c === null) return null;\n\t\t\tvar klass = \"symbol\";\n\t\t\tif (params.klass) klass += \" \" + params.klass;\n\t\t\tparams.graphelem = printSymbol(renderer, params.x, params.pitch, params.c, {\n\t\t\t\tscalex: params.scalex,\n\t\t\t\tscaley: params.scaley,\n\t\t\t\tklass: renderer.controller.classes.generate(klass),\n\t\t\t\t//\t\t\t\tfill:\"none\",\n\t\t\t\t//\t\t\t\tstroke: renderer.foregroundColor,\n\t\t\t\tname: params.name\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"debug\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: renderer.calcY(15), text: \"\" + params.c, type: \"debugfont\", klass: renderer.controller.classes.generate('debug-msg'), anchor: 'start', centerVertically: false, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"tabNumber\":\n\t\t\tvar hAnchor = \"middle\";\n\t\t\tvar tabFont = \"tabnumberfont\";\n\t\t\tvar tabClass = 'tab-number';\n\t\t\tif (params.isGrace) {\n\t\t\t\ttabFont = \"tabgracefont\";\n\t\t\t\ty += 2.5;\n\t\t\t\ttabClass = 'tab-grace'\n\t\t\t}\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: \"\" + params.c, type: tabFont, klass: renderer.controller.classes.generate(tabClass), anchor: hAnchor, centerVertically: false, dim: params.dim, cursor: 'default' }, false);\n\t\t\tbreak;\n\t\tcase \"barNumber\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: \"\" + params.c, type: \"measurefont\", klass: renderer.controller.classes.generate('bar-number'), anchor: \"middle\", dim: params.dim, name: \"bar-number\" }, true);\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: \"vocalfont\", klass: renderer.controller.classes.generate('lyric'), anchor: \"middle\", dim: params.dim, name: \"lyric\" }, false);\n\t\t\tbreak;\n\t\tcase \"chord\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'gchordfont', klass: renderer.controller.classes.generate(\"chord\"), anchor: \"middle\", dim: params.dim, lane: params.getLane(), name: \"chord\" }, false);\n\t\t\tbreak;\n\t\tcase \"decoration\":\n\t\t\t// The +6 is to compensate for the placement of text in svg: to be on the same row as symbols, the y-coord needs to compensate for the center line.\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y + 6, text: params.c, type: 'annotationfont', klass: renderer.controller.classes.generate(\"annotation\"), anchor: params.anchor, centerVertically: true, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'annotationfont', klass: renderer.controller.classes.generate(\"annotation\"), anchor: \"start\", centerVertically: params.centerVertically, dim: params.dim, lane: params.getLane(), name: \"annotation\" }, false);\n\t\t\tbreak;\n\t\tcase \"multimeasure-text\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x + params.w / 2, y: y, text: params.c, type: 'tempofont', klass: renderer.controller.classes.generate(\"rest\"), anchor: \"middle\", centerVertically: false, dim: params.dim }, false);\n\t\t\tbreak;\n\t\tcase \"part\":\n\t\t\tparams.graphelem = renderText(renderer, { x: params.x, y: y, text: params.c, type: 'partsfont', klass: renderer.controller.classes.generate(\"part\"), anchor: \"start\", dim: params.dim, name: params.c }, true);\n\t\t\tbreak;\n\t\tcase \"bar\":\n\t\t\tparams.graphelem = printStem(renderer, params.x, params.linewidth + renderer.lineThickness, y, (bartop) ? bartop : renderer.calcY(params.pitch2), null, \"bar\"); break; // bartop can't be 0\n\t\tcase \"stem\":\n\t\t\tvar stemWidth = params.linewidth > 0 ? params.linewidth + renderer.lineThickness : params.linewidth - renderer.lineThickness\n\t\t\tparams.graphelem = printStem(renderer, params.x, stemWidth, y, renderer.calcY(params.pitch2), 'abcjs-stem', 'stem'); break;\n\t\tcase \"ledger\":\n\t\t\tparams.graphelem = printStaffLine(renderer, params.x, params.x + params.w, params.pitch, \"abcjs-ledger\", \"ledger\", 0.35 + renderer.lineThickness); break;\n\t}\n\tif (params.scalex !== 1 && params.graphelem) {\n\t\tscaleExistingElem(renderer.paper, params.graphelem, params.scalex, params.scaley, params.x, y);\n\t}\n\treturn params.graphelem;\n}\n\nfunction scaleExistingElem(paper, elem, scaleX, scaleY, x, y) {\n\tpaper.setAttributeOnElement(elem, { style: \"transform:scale(\" + scaleX + \",\" + scaleY + \");transform-origin:\" + x + \"px \" + y + \"px;\" });\n}\n\nmodule.exports = drawRelativeElement;\n","function roundNumber(x) {\n\treturn parseFloat(x.toFixed(2));\n}\n\nmodule.exports = roundNumber;\n","var highlight = require('../interactive/highlight');\nvar unhighlight = require('../interactive/unhighlight');\n\nfunction Selectables(paper, selectTypes, tuneNumber) {\n\tthis.elements = [];\n\tthis.paper = paper;\n\tthis.tuneNumber = tuneNumber;\n\tthis.selectTypes = selectTypes;\n}\n\nSelectables.prototype.getElements = function () {\n\treturn this.elements;\n};\n\nSelectables.prototype.add = function (absEl, svgEl, isNoteOrTabNumber, staffPos) {\n\tif (!this.canSelect(absEl))\n\t\treturn;\n\tvar params;\n\tif (this.selectTypes === undefined)\n\t\tparams = { selectable: false, \"data-index\": this.elements.length }; // This is the old behavior.\n\telse\n\t\tparams = { selectable: true, tabindex: 0, \"data-index\": this.elements.length };\n\tthis.paper.setAttributeOnElement(svgEl, params);\n\tvar sel = { absEl: absEl, svgEl: svgEl, isDraggable: isNoteOrTabNumber };\n\tif (staffPos !== undefined)\n\t\tsel.staffPos = staffPos;\n\tthis.elements.push(sel);\n\n};\n\nSelectables.prototype.canSelect = function (absEl) {\n\tif (this.selectTypes === false)\n\t\treturn false;\n\tif (!absEl || !absEl.abcelem)\n\t\treturn false;\n\tif (this.selectTypes === true)\n\t\treturn true;\n\tif (this.selectTypes === undefined) {\n\t\t// by default, only notes and tab numbers can be clicked.\n\t\tif (absEl.abcelem.el_type === 'note' || absEl.abcelem.el_type === 'tabNumber') {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treturn this.selectTypes.indexOf(absEl.abcelem.el_type) >= 0;\n};\n\nSelectables.prototype.wrapSvgEl = function (abcelem, el) {\n\tvar absEl = {\n\t\ttuneNumber: this.tuneNumber,\n\t\tabcelem: abcelem,\n\t\telemset: [el],\n\t\thighlight: highlight,\n\t\tunhighlight: unhighlight\n\t};\n\tthis.add(absEl, el, false);\n};\n\nmodule.exports = Selectables;\n","function drawSeparator(renderer, width) {\n\tvar fill = \"rgba(0,0,0,255)\";\n\tvar stroke = \"rgba(0,0,0,0)\";\n\tvar y = Math.round(renderer.y);\n\tvar staffWidth = renderer.controller.width;\n\tvar x1 = (staffWidth - width) / 2;\n\tvar x2 = x1 + width;\n\tvar pathString = 'M ' + x1 + ' ' + y +\n\t\t' L ' + x2 + ' ' + y +\n\t\t' L ' + x2 + ' ' + (y + 1) +\n\t\t' L ' + x1 + ' ' + (y + 1) +\n\t\t' L ' + x1 + ' ' + y + ' z';\n\trenderer.paper.pathToBack({ path: pathString, stroke: stroke, fill: fill, 'class': renderer.controller.classes.generate('defined-text') });\n}\n\nmodule.exports = drawSeparator;\n","function setPaperSize(renderer, maxwidth, scale, responsive) {\n\tvar w = (maxwidth + renderer.padding.right) * scale;\n\tvar h = (renderer.y + renderer.padding.bottom) * scale;\n\tif (renderer.isPrint)\n\t\th = Math.max(h, 1056); // 11in x 72pt/in x 1.33px/pt\n\t// TODO-PER: We are letting the page get as long as it needs now, but eventually that should go to a second page.\n\n\t// for accessibility\n\tif (renderer.ariaLabel !== '') {\n\t\tvar text = \"Sheet Music\";\n\t\tif (renderer.abctune && renderer.abctune.metaText && renderer.abctune.metaText.title)\n\t\t\ttext += \" for \\\"\" + renderer.abctune.metaText.title + '\"';\n\t\trenderer.paper.setTitle(text);\n\t\tvar label = renderer.ariaLabel ? renderer.ariaLabel : text;\n\t\trenderer.paper.setAttribute(\"aria-label\", label);\n\t}\n\n\t// for dragging - don't select during drag\n\tvar styles = [\n\t\t\"-webkit-touch-callout: none;\",\n\t\t\"-webkit-user-select: none;\",\n\t\t\"-khtml-user-select: none;\",\n\t\t\"-moz-user-select: none;\",\n\t\t\"-ms-user-select: none;\",\n\t\t\"user-select: none;\"\n\t];\n\trenderer.paper.insertStyles(\".abcjs-dragging-in-progress text, .abcjs-dragging-in-progress tspan {\" + styles.join(\" \") + \"}\");\n\n\tvar parentStyles = { overflow: \"hidden\" };\n\tif (responsive === 'resize') {\n\t\trenderer.paper.setResponsiveWidth(w, h);\n\t} else {\n\t\tparentStyles.width = \"\";\n\t\tparentStyles.height = h + \"px\";\n\t\tif (scale < 1) {\n\t\t\tparentStyles.width = w + \"px\";\n\t\t\trenderer.paper.setSize(w / scale, h / scale);\n\t\t} else\n\t\t\trenderer.paper.setSize(w, h);\n\t}\n\trenderer.paper.setScale(scale);\n\trenderer.paper.setParentStyles(parentStyles);\n}\n\nmodule.exports = setPaperSize;\n","/**\n * sprintf() for JavaScript v.0.4\n *\n Copyright (c) 2007-present, Alexandru Mărășteanu \n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of this software nor the names of its contributors may be\n used to endorse or promote products derived from this software without\n specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n//function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); }\n\nvar sprintf = function () {\n\tvar i = 0, a, f = arguments[i++], o = [], m, p, c, x;\n\twhile (f) {\n\t\tif (m = /^[^\\x25]+/.exec(f)) o.push(m[0]);\n\t\telse if (m = /^\\x25{2}/.exec(f)) o.push('%');\n\t\telse if (m = /^\\x25(?:(\\d+)\\$)?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(f)) {\n\t\t\tif (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw (\"Too few arguments.\");\n\t\t\tif (/[^s]/.test(m[7]) && (typeof (a) != 'number'))\n\t\t\t\tthrow (\"Expecting number but found \" + typeof (a));\n\t\t\tswitch (m[7]) {\n\t\t\t\tcase 'b': a = a.toString(2); break;\n\t\t\t\tcase 'c': a = String.fromCharCode(a); break;\n\t\t\t\tcase 'd': a = parseInt(a); break;\n\t\t\t\tcase 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;\n\t\t\t\tcase 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;\n\t\t\t\tcase 'o': a = a.toString(8); break;\n\t\t\t\tcase 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;\n\t\t\t\tcase 'u': a = Math.abs(a); break;\n\t\t\t\tcase 'x': a = a.toString(16); break;\n\t\t\t\tcase 'X': a = a.toString(16).toUpperCase(); break;\n\t\t\t}\n\t\t\ta = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);\n\t\t\tc = m[3] ? m[3] == '0' ? '0' : m[3][1] : ' ';\n\t\t\tx = m[5] - String(a).length;\n\t\t\tp = m[5] ? str_repeat(c, x) : '';\n\t\t\to.push(m[4] ? a + p : p + a);\n\t\t}\n\t\telse throw (\"Huh ?!\");\n\t\tf = f.substring(m[0].length);\n\t}\n\treturn o.join('');\n};\n\nmodule.exports = sprintf;\n","var spacing = require('../helpers/spacing');\nvar drawBrace = require('./brace');\nvar drawVoice = require('./voice');\nvar printStaff = require('./staff');\nvar printDebugBox = require('./debug-box');\nvar printStem = require('./print-stem');\nvar nonMusic = require('./non-music');\n\nfunction drawStaffGroup(renderer, params, selectables, lineNumber) {\n\t// We enter this method with renderer.y pointing to the topmost coordinate that we're allowed to draw.\n\t// All of the children that will be drawn have a relative \"pitch\" set, where zero is the first ledger line below the staff.\n\t// renderer.y will be offset at the beginning of each staff by the amount required to make the relative pitch work.\n\t// If there are multiple staves, then renderer.y will be incremented for each new staff.\n\n\tvar colorIndex;\n\n\t// An invisible marker is useful to be able to find where each system starts.\n\t//addInvisibleMarker(renderer, \"abcjs-top-of-system\");\n\n\tvar startY = renderer.y; // So that it can be restored after we're done.\n\t// Set the absolute Y position for each staff here, so the voice drawing below can just use if.\n\tfor (var j = 0; j < params.staffs.length; j++) {\n\t\tvar staff1 = params.staffs[j];\n\t\t//renderer.printHorizontalLine(50, renderer.y, \"start\");\n\t\trenderer.moveY(spacing.STEP, staff1.top);\n\t\tstaff1.absoluteY = renderer.y;\n\t\tif (renderer.showDebug) {\n\t\t\tif (renderer.showDebug.indexOf(\"box\") >= 0 && staff1.voices) {\n\t\t\t\tboxAllElements(renderer, params.voices, staff1.voices);\n\t\t\t}\n\t\t\tif (renderer.showDebug.indexOf(\"grid\") >= 0) {\n\t\t\t\trenderer.paper.dottedLine({ x1: renderer.padding.left, x2: renderer.padding.left + renderer.controller.width, y1: startY, y2: startY, stroke: \"#0000ff\" });\n\t\t\t\tprintDebugBox(renderer,\n\t\t\t\t\t{\n\t\t\t\t\t\tx: renderer.padding.left,\n\t\t\t\t\t\ty: renderer.calcY(staff1.originalTop),\n\t\t\t\t\t\twidth: renderer.controller.width,\n\t\t\t\t\t\theight: renderer.calcY(staff1.originalBottom) - renderer.calcY(staff1.originalTop),\n\t\t\t\t\t\tfill: renderer.foregroundColor,\n\t\t\t\t\t\tstroke: renderer.foregroundColor,\n\t\t\t\t\t\t\"fill-opacity\": 0.1,\n\t\t\t\t\t\t\"stroke-opacity\": 0.1\n\t\t\t\t\t});\n\t\t\t\tcolorIndex = 0;\n\t\t\t\tdebugPrintGridItem(staff1, 'chordHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'chordHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'dynamicHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'dynamicHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'endingHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'lyricHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'lyricHeightBelow');\n\t\t\t\tdebugPrintGridItem(staff1, 'partHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'tempoHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'volumeHeightAbove');\n\t\t\t\tdebugPrintGridItem(staff1, 'volumeHeightBelow');\n\t\t\t}\n\t\t}\n\t\trenderer.moveY(spacing.STEP, -staff1.bottom);\n\t\tif (renderer.showDebug) {\n\t\t\tif (renderer.showDebug.indexOf(\"grid\") >= 0) {\n\t\t\t\trenderer.paper.dottedLine({\n\t\t\t\t\tx1: renderer.padding.left,\n\t\t\t\t\tx2: renderer.padding.left + renderer.controller.width,\n\t\t\t\t\ty1: renderer.y,\n\t\t\t\t\ty2: renderer.y,\n\t\t\t\t\tstroke: \"#0000aa\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tvar topLine; // these are to connect multiple staves. We need to remember where they are.\n\tvar bottomLine;\n\n\tvar linePitch = 2;\n\tvar bartop = 0;\n\tfor (var i = 0; i < params.voices.length; i++) {\n\t\tvar staff = params.voices[i].staff;\n\t\tvar tabName = params.voices[i].tabNameInfos;\n\t\trenderer.y = staff.absoluteY;\n\t\trenderer.controller.classes.incrVoice();\n\t\t//renderer.y = staff.y;\n\t\t// offset for starting the counting at middle C\n\t\tif (!params.voices[i].duplicate) {\n\t\t\t//\t\t\trenderer.moveY(spacing.STEP, staff.top);\n\t\t\tif (!topLine) topLine = renderer.calcY(10);\n\t\t\tbottomLine = renderer.calcY(linePitch);\n\t\t\tif (staff.lines !== 0) {\n\t\t\t\tif (staff.linePitch) {\n\t\t\t\t\tlinePitch = staff.linePitch;\n\t\t\t\t}\n\t\t\t\trenderer.controller.classes.newMeasure();\n\t\t\t\tvar lines = printStaff(renderer, params.startx, params.w, staff.lines, staff.linePitch, 0.35);\n\t\t\t\tbottomLine = lines[1];\n\t\t\t\tstaff.bottomLine = bottomLine;\n\t\t\t\tstaff.topLine = lines[0];\n\t\t\t\t// rework bartop when tabs are present with current staff\n\t\t\t\tif (staff.hasTab) {\n\t\t\t\t\t// do not link to staff above (ugly looking)\n\t\t\t\t\tbartop = staff.topLine;\n\t\t\t\t}\n\t\t\t\tif (staff.hasStaff) {\n\t\t\t\t\t// this is a tab\n\t\t\t\t\tbartop = staff.hasStaff.topLine;\n\t\t\t\t\tparams.voices[i].barto = true;\n\t\t\t\t\tparams.voices[i].topLine = topLine;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tprintBrace(renderer, staff.absoluteY, params.brace, i, selectables);\n\t\t\tprintBrace(renderer, staff.absoluteY, params.bracket, i, selectables);\n\t\t}\n\t\tdrawVoice(renderer, params.voices[i], bartop, selectables, {\n\t\t\ttop: startY,\n\t\t\tzero: renderer.y,\n\t\t\theight: params.height * spacing.STEP\n\t\t});\n\t\tvar tabNameHeight = 0;\n\t\tif (tabName) {\n\t\t\t// print tab infos on staffBottom\n\t\t\tvar r = { rows: [] };\n\t\t\tr.rows.push({ absmove: bottomLine + 2 });\n\t\t\tvar leftMargin = 8;\n\t\t\tr.rows.push({ left: params.startx + leftMargin, text: tabName.name, font: 'tablabelfont', klass: 'text instrument-name', anchor: 'start' });\n\t\t\tr.rows.push({ move: tabName.textSize.height });\n\t\t\tnonMusic(renderer, r);\n\t\t\ttabNameHeight = tabName.textSize.height;\n\t\t}\n\n\t\trenderer.controller.classes.newMeasure();\n\t\tif (!params.voices[i].duplicate) {\n\t\t\tbartop = renderer.calcY(2 + tabNameHeight); // This connects the bar lines between two different staves.\n\t\t\t//\t\t\tif (staff.bottom < 0)\n\t\t\t//\t\t\t\trenderer.moveY(spacing.STEP, -staff.bottom);\n\t\t}\n\t}\n\trenderer.controller.classes.newMeasure();\n\n\t// connect all the staves together with a vertical line\n\tvar staffSize = params.staffs.length;\n\tif (staffSize > 1) {\n\t\ttopLine = params.staffs[0].topLine;\n\t\tbottomLine = params.staffs[staffSize - 1].bottomLine;\n\t\tprintStem(renderer, params.startx, 0.6, topLine, bottomLine, null);\n\t}\n\trenderer.y = startY;\n\n\tfunction debugPrintGridItem(staff, key) {\n\t\tvar colors = [\"rgb(207,27,36)\", \"rgb(168,214,80)\", \"rgb(110,161,224)\", \"rgb(191,119,218)\", \"rgb(195,30,151)\",\n\t\t\t\"rgb(31,170,177)\", \"rgb(220,166,142)\"];\n\t\tif (staff.positionY && staff.positionY[key]) {\n\t\t\tvar height = staff.specialY[key] * spacing.STEP;\n\t\t\tif (key === \"chordHeightAbove\" && staff.specialY.chordLines && staff.specialY.chordLines.above)\n\t\t\t\theight *= staff.specialY.chordLines.above;\n\t\t\tif (key === \"chordHeightBelow\" && staff.specialY.chordLines && staff.specialY.chordLines.below)\n\t\t\t\theight *= staff.specialY.chordLines.below;\n\t\t\tprintDebugBox(renderer,\n\t\t\t\t{\n\t\t\t\t\tx: renderer.padding.left,\n\t\t\t\t\ty: renderer.calcY(staff.positionY[key]),\n\t\t\t\t\twidth: renderer.controller.width,\n\t\t\t\t\theight: height,\n\t\t\t\t\tfill: colors[colorIndex],\n\t\t\t\t\tstroke: colors[colorIndex],\n\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\"stroke-opacity\": 0.4\n\t\t\t\t},\n\t\t\t\tkey.substr(0, 4));\n\t\t\tcolorIndex += 1; if (colorIndex > 6) colorIndex = 0;\n\t\t}\n\t}\n}\n\nfunction printBrace(renderer, absoluteY, brace, index, selectables) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tif (brace[i].isStartVoice(index)) {\n\t\t\t\tbrace[i].startY = absoluteY - spacing.STEP * 10;\n\t\t\t\tbrace[i].elemset = drawBrace(renderer, brace[i], selectables);\n\t\t\t}\n\t\t}\n\t}\n}\n\n// function addInvisibleMarker(renderer, className) {\n// \tvar y = Math.round(renderer.y);\n// \trenderer.paper.pathToBack({path:\"M 0 \" + y + \" L 0 0\", stroke:\"none\", fill:\"none\", \"stroke-opacity\": 0, \"fill-opacity\": 0, 'class': renderer.controller.classes.generate(className), 'data-vertical': y });\n// }\n\nfunction boxAllElements(renderer, voices, which) {\n\tfor (var i = 0; i < which.length; i++) {\n\t\tvar children = voices[which[i]].children;\n\t\tfor (var j = 0; j < children.length; j++) {\n\t\t\tvar elem = children[j];\n\t\t\tvar coords = elem.getFixedCoords();\n\t\t\tif (elem.invisible || coords.t === undefined || coords.b === undefined)\n\t\t\t\tcontinue;\n\t\t\tvar height = (coords.t - coords.b) * spacing.STEP;\n\t\t\tprintDebugBox(renderer,\n\t\t\t\t{\n\t\t\t\t\tx: coords.x,\n\t\t\t\t\ty: renderer.calcY(coords.t),\n\t\t\t\t\twidth: coords.w,\n\t\t\t\t\theight: height,\n\t\t\t\t\tfill: \"#88e888\",\n\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\tstroke: \"#4aa93d\",\n\t\t\t\t\t\"stroke-opacity\": 0.8\n\t\t\t\t});\n\n\t\t\tfor (var k = 0; k < elem.children.length; k++) {\n\t\t\t\tvar relElem = elem.children[k];\n\t\t\t\tvar chord = relElem.getChordDim();\n\t\t\t\tif (chord) {\n\t\t\t\t\tvar y = renderer.calcY(relElem.pitch);\n\t\t\t\t\ty += relElem.dim.font.size * relElem.getLane();\n\t\t\t\t\tprintDebugBox(renderer,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tx: chord.left,\n\t\t\t\t\t\t\ty: y,\n\t\t\t\t\t\t\twidth: chord.right - chord.left,\n\t\t\t\t\t\t\theight: relElem.dim.font.size,\n\t\t\t\t\t\t\tfill: \"none\",\n\t\t\t\t\t\t\tstroke: \"#4aa93d\",\n\t\t\t\t\t\t\t\"stroke-opacity\": 0.8\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = drawStaffGroup;\n","var printLine = require('./print-line');\n\nfunction printStaffLine(renderer, x1, x2, pitch, klass, name, dy) {\n\tvar y = renderer.calcY(pitch);\n\treturn printLine(renderer, x1, x2, y, klass, name, dy);\n}\n\nmodule.exports = printStaffLine;\n\n","var printStaffLine = require('./staff-line');\n\nfunction printStaff(renderer, startx, endx, numLines, linePitch, dy) {\n\tvar klass = \"abcjs-top-line\";\n\tvar pitch = 2;\n\tif (linePitch) {\n\t\tpitch = linePitch;\n\t}\n\trenderer.paper.openGroup({ prepend: true, klass: renderer.controller.classes.generate(\"abcjs-staff\") });\n\t// If there is one line, it is the B line. Otherwise, the bottom line is the E line.\n\tvar firstYLine = 0;\n\tvar lastYLine = 0;\n\tif (numLines === 1) {\n\t\tprintStaffLine(renderer, startx, endx, 6, klass, null, dy + renderer.lineThickness);\n\t\tfirstYLine = renderer.calcY(10);\n\t\tlastYLine = renderer.calcY(2);\n\t} else {\n\n\t\tfor (var i = numLines - 1; i >= 0; i--) {\n\t\t\tvar curpitch = (i + 1) * pitch;\n\t\t\tlastYLine = renderer.calcY(curpitch);\n\t\t\tif (firstYLine === 0) {\n\t\t\t\tfirstYLine = lastYLine;\n\t\t\t}\n\t\t\tprintStaffLine(renderer, startx, endx, curpitch, klass, null, dy + renderer.lineThickness);\n\t\t\tklass = undefined;\n\t\t}\n\t}\n\trenderer.paper.closeGroup();\n\treturn [firstYLine, lastYLine];\n}\n\nmodule.exports = printStaff;\n","var drawRelativeElement = require('./relative');\nvar renderText = require('./text');\n\nfunction drawTempo(renderer, params) {\n\tvar x = params.x;\n\tif (params.pitch === undefined)\n\t\twindow.console.error(\"Tempo Element y-coordinate not set.\");\n\n\t//var tempoGroup;\n\tparams.tempo.el_type = \"tempo\";\n\t//\trenderer.wrapInAbsElem(params.tempo, \"abcjs-tempo\", function () {\n\t//renderer.paper.openGroup({klass: renderer.controller.classes.generate(\"tempo wha\")});\n\t// The text is aligned with extra room for descenders but numbers look like they are a little too high, so bump it a little.\n\tvar descenderHeight = 2;\n\tvar y = renderer.calcY(params.pitch) + 2;\n\tvar text;\n\tvar size;\n\tif (params.tempo.preString) {\n\t\ttext = renderText(renderer, { x: x, y: y, text: params.tempo.preString, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, \"dominant-baseline\": \"ideographic\", name: \"pre\" }, true);\n\t\tsize = renderer.controller.getTextSize.calc(params.tempo.preString, 'tempofont', 'tempo', text);\n\t\tvar preWidth = size.width;\n\t\tvar charWidth = preWidth / params.tempo.preString.length; // Just get some average number to increase the spacing.\n\t\tx += preWidth + charWidth;\n\t}\n\tif (params.note) {\n\t\tparams.note.setX(x);\n\t\tfor (var i = 0; i < params.note.children.length; i++)\n\t\t\tdrawRelativeElement(renderer, params.note.children[i], x);\n\t\tx += (params.note.w + 5);\n\t\tvar str = \"= \" + params.tempo.bpm;\n\t\ttext = renderText(renderer, { x: x, y: y, text: str, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"beats\" });\n\t\tsize = renderer.controller.getTextSize.calc(str, 'tempofont', 'tempo', text);\n\t\tvar postWidth = size.width;\n\t\tvar charWidth2 = postWidth / str.length; // Just get some average number to increase the spacing.\n\t\tx += postWidth + charWidth2;\n\t}\n\tif (params.tempo.postString) {\n\t\trenderText(renderer, { x: x, y: y, text: params.tempo.postString, type: 'tempofont', klass: 'abcjs-tempo', anchor: \"start\", noClass: true, name: \"post\" }, true);\n\t}\n\t//tempoGroup = renderer.paper.closeGroup();\n\t//\t});\n\t//return [tempoGroup];\n}\n\nmodule.exports = drawTempo;\n","var roundNumber = require(\"./round-number\");\n\nfunction renderText(renderer, params, alreadyInGroup) {\n\tvar y = params.y;\n\tif (params.lane) {\n\t\tvar laneMargin = params.dim.font.size * 0.25;\n\t\ty += (params.dim.font.size + laneMargin) * params.lane;\n\t}\n\n\tvar hash;\n\tif (params.dim) {\n\t\thash = params.dim;\n\t\thash.attr.class = params.klass;\n\t} else\n\t\thash = renderer.controller.getFontAndAttr.calc(params.type, params.klass);\n\tif (params.anchor)\n\t\thash.attr[\"text-anchor\"] = params.anchor;\n\thash.attr.x = params.x;\n\thash.attr.y = y;\n\tif (!params.centerVertically)\n\t\thash.attr.y += hash.font.size;\n\tif (params.type === 'debugfont') {\n\t\tconsole.log(\"Debug msg: \" + params.text);\n\t\thash.attr.stroke = \"#ff0000\";\n\t}\n\tif (params.cursor) {\n\t\thash.attr.cursor = params.cursor;\n\t}\n\n\tvar text = params.text.replace(/\\n\\n/g, \"\\n \\n\");\n\ttext = text.replace(/^\\n/, \"\\xA0\\n\");\n\n\tif (hash.font.box) {\n\t\tif (!alreadyInGroup)\n\t\t\trenderer.paper.openGroup({ klass: hash.attr['class'], fill: renderer.foregroundColor, \"data-name\": params.name });\n\t\tif (hash.attr[\"text-anchor\"] === \"end\") {\n\t\t\thash.attr.x -= hash.font.padding;\n\t\t} else if (hash.attr[\"text-anchor\"] === \"start\") {\n\t\t\thash.attr.x += hash.font.padding;\n\t\t}\n\t\thash.attr.y += hash.font.padding;\n\t\tdelete hash.attr['class'];\n\t}\n\tif (params.noClass)\n\t\tdelete hash.attr['class'];\n\thash.attr.x = roundNumber(hash.attr.x);\n\thash.attr.y = roundNumber(hash.attr.y);\n\tif (params.name)\n\t\thash.attr[\"data-name\"] = params.name;\n\tvar elem = renderer.paper.text(text, hash.attr);\n\tif (hash.font.box) {\n\t\tvar size = elem.getBBox();\n\n\t\tvar delta = 0;\n\t\tif (hash.attr[\"text-anchor\"] === \"middle\") {\n\t\t\tdelta = size.width / 2 + hash.font.padding;\n\t\t} else if (hash.attr[\"text-anchor\"] === \"end\") {\n\t\t\tdelta = size.width + hash.font.padding * 2;\n\t\t}\n\t\tvar deltaY = 0;\n\t\tif (params.centerVertically) {\n\t\t\tdeltaY = size.height - hash.font.padding;\n\t\t}\n\t\trenderer.paper.rect({ \"data-name\": \"box\", x: Math.round(params.x - delta), y: Math.round(y - deltaY), width: Math.round(size.width + hash.font.padding * 2), height: Math.round(size.height + hash.font.padding * 2) });\n\t\tif (!alreadyInGroup)\n\t\t\telem = renderer.paper.closeGroup();\n\t}\n\treturn elem;\n}\n\nmodule.exports = renderText;\n","var sprintf = require('./sprintf');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawTie(renderer, params, linestartx, lineendx, selectables) {\n\tlayout(params, linestartx, lineendx);\n\n\tvar klass = '';\n\tif (params.anchor1) {\n\t\tklass += 'abcjs-start-m' + params.anchor1.parent.counters.measure + '-n' + params.anchor1.parent.counters.note;\n\t} else\n\t\tklass += 'abcjs-start-edge';\n\tif (params.anchor2) {\n\t\tklass += ' abcjs-end-m' + params.anchor2.parent.counters.measure + '-n' + params.anchor2.parent.counters.note;\n\t} else\n\t\tklass += ' abcjs-end-edge';\n\tif (params.hint)\n\t\tklass = \"abcjs-hint\";\n\tvar fudgeY = params.fixedY ? 1.5 : 0; // TODO-PER: This just compensates for drawArc, which contains too much knowledge of ties and slurs.\n\tvar el = drawArc(renderer, params.startX, params.endX, params.startY + fudgeY, params.endY + fudgeY, params.above, klass, params.isTie, params.dotted);\n\tselectables.wrapSvgEl({ el_type: \"slur\", startChar: -1, endChar: -1 }, el);\n\treturn [el];\n}\n\n// TODO-PER: I think params part should have been done earlier in the layout pass.\nvar layout = function (params, lineStartX, lineEndX) {\n\t// We now have all of the input variables set, so we can figure out the start and ending x,y coordinates, and finalize the direction of the arc.\n\n\t// Ties and slurs are handled a little differently, so do calculations for them separately.\n\tif (!params.anchor1 || !params.anchor2)\n\t\tparams.isTie = true; // if the slur goes off the end of the line, then draw it like a tie\n\telse if (params.anchor1.pitch === params.anchor2.pitch && params.internalNotes.length === 0)\n\t\tparams.isTie = true;\n\telse\n\t\tparams.isTie = false;\n\n\tif (params.isTie) {\n\t\tparams.calcTieDirection();\n\t\tparams.calcX(lineStartX, lineEndX);\n\t\tparams.calcTieY();\n\n\t} else {\n\t\tparams.calcSlurDirection();\n\t\tparams.calcX(lineStartX, lineEndX);\n\t\tparams.calcSlurY();\n\t}\n\tparams.avoidCollisionAbove();\n};\n\nvar drawArc = function (renderer, x1, x2, pitch1, pitch2, above, klass, isTie, dotted) {\n\t// If it is a tie vs. a slur, draw it shallower.\n\tvar spacing = isTie ? 1.2 : 1.5;\n\n\tx1 = roundNumber(x1 + 6);\n\tx2 = roundNumber(x2 + 4);\n\tpitch1 = pitch1 + ((above) ? spacing : -spacing);\n\tpitch2 = pitch2 + ((above) ? spacing : -spacing);\n\tvar y1 = roundNumber(renderer.calcY(pitch1));\n\tvar y2 = roundNumber(renderer.calcY(pitch2));\n\n\t//unit direction vector\n\tvar dx = x2 - x1;\n\tvar dy = y2 - y1;\n\tvar norm = Math.sqrt(dx * dx + dy * dy);\n\tvar ux = dx / norm;\n\tvar uy = dy / norm;\n\n\tvar flatten = norm / 3.5;\n\tvar maxFlatten = isTie ? 10 : 25; // If it is a tie vs. a slur, draw it shallower.\n\tvar curve = ((above) ? -1 : 1) * Math.min(maxFlatten, Math.max(4, flatten));\n\n\tvar controlx1 = roundNumber(x1 + flatten * ux - curve * uy);\n\tvar controly1 = roundNumber(y1 + flatten * uy + curve * ux);\n\tvar controlx2 = roundNumber(x2 - flatten * ux - curve * uy);\n\tvar controly2 = roundNumber(y2 - flatten * uy + curve * ux);\n\tvar thickness = 2;\n\tif (klass)\n\t\tklass += ' slur';\n\telse\n\t\tklass = 'slur';\n\tklass += isTie ? ' tie' : ' legato';\n\tvar ret;\n\tif (dotted) {\n\t\tklass += ' dotted';\n\t\tvar pathString2 = sprintf(\"M %f %f C %f %f %f %f %f %f\", x1, y1,\n\t\t\tcontrolx1, controly1, controlx2, controly2, x2, y2);\n\t\tret = renderer.paper.path({ path: pathString2, stroke: renderer.foregroundColor, fill: \"none\", 'stroke-dasharray': \"5 5\", 'class': renderer.controller.classes.generate(klass), \"data-name\": isTie ? \"tie\" : \"slur\" });\n\t} else {\n\t\tvar pathString = sprintf(\"M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z\", x1, y1,\n\t\t\tcontrolx1, controly1, controlx2, controly2, x2, y2,\n\t\t\troundNumber(controlx2 - thickness * uy), roundNumber(controly2 + thickness * ux), roundNumber(controlx1 - thickness * uy), roundNumber(controly1 + thickness * ux), x1, y1);\n\t\tret = renderer.paper.path({ path: pathString, stroke: \"none\", fill: renderer.foregroundColor, 'class': renderer.controller.classes.generate(klass), \"data-name\": isTie ? \"tie\" : \"slur\" });\n\t}\n\n\treturn ret;\n};\n\nmodule.exports = drawTie;\n","var sprintf = require('./sprintf');\nvar renderText = require('./text');\nvar printPath = require('./print-path');\nvar roundNumber = require(\"./round-number\");\n\nfunction drawTriplet(renderer, params, selectables) {\n\trenderer.paper.openGroup({ klass: renderer.controller.classes.generate('triplet ' + params.durationClass), \"data-name\": \"triplet\" });\n\tif (!params.hasBeam) {\n\t\tdrawBracket(renderer, params.anchor1.x, params.startNote, params.anchor2.x + params.anchor2.w, params.endNote);\n\t}\n\t// HACK: adjust the position of \"3\". It is too high in all cases so we fudge it by subtracting 1 here.\n\trenderText(renderer, { x: params.xTextPos, y: renderer.calcY(params.yTextPos - 1), text: \"\" + params.number, type: 'tripletfont', anchor: \"middle\", centerVertically: true, noClass: true, name: \"\" + params.number }, true);\n\tvar g = renderer.paper.closeGroup();\n\tselectables.wrapSvgEl({ el_type: \"triplet\", startChar: -1, endChar: -1 }, g);\n\treturn g;\n}\n\nfunction drawLine(l, t, r, b) {\n\treturn sprintf(\"M %f %f L %f %f\", roundNumber(l), roundNumber(t), roundNumber(r), roundNumber(b));\n}\n\nfunction drawBracket(renderer, x1, y1, x2, y2) {\n\ty1 = renderer.calcY(y1);\n\ty2 = renderer.calcY(y2);\n\tvar bracketHeight = 5;\n\n\t// Draw vertical lines at the beginning and end\n\tvar pathString = \"\";\n\tpathString += drawLine(x1, y1, x1, y1 + bracketHeight);\n\tpathString += drawLine(x2, y2, x2, y2 + bracketHeight);\n\n\t// figure out midpoints to draw the broken line.\n\tvar midX = x1 + (x2 - x1) / 2;\n\t//var midY = y1 + (y2-y1)/2;\n\tvar gapWidth = 8;\n\tvar slope = (y2 - y1) / (x2 - x1);\n\tvar leftEndX = midX - gapWidth;\n\tvar leftEndY = y1 + (leftEndX - x1) * slope;\n\tpathString += drawLine(x1, y1, leftEndX, leftEndY);\n\tvar rightStartX = midX + gapWidth;\n\tvar rightStartY = y1 + (rightStartX - x1) * slope;\n\tpathString += drawLine(rightStartX, rightStartY, x2, y2);\n\tprintPath(renderer, { path: pathString, stroke: renderer.foregroundColor, \"data-name\": \"triplet-bracket\" });\n}\n\nmodule.exports = drawTriplet;\n","var drawGlissando = require('./glissando');\nvar drawCrescendo = require('./crescendo');\nvar drawDynamics = require('./dynamics');\nvar drawTriplet = require('./triplet');\nvar drawEnding = require('./ending');\nvar drawTie = require('./tie');\nvar drawBeam = require('./beam');\nvar renderText = require('./text');\nvar drawAbsolute = require('./absolute');\n\nfunction drawVoice(renderer, params, bartop, selectables, staffPos) {\n\tvar width = params.w - 1;\n\trenderer.staffbottom = params.staff.bottom;\n\tvar saveColor = renderer.foregroundColor\n\tif (params.color)\n\t\trenderer.foregroundColor = params.color\n\n\tif (params.header) { // print voice name\n\t\tvar textEl = renderText(renderer, { x: renderer.padding.left, y: renderer.calcY(params.headerPosition), text: params.header, type: 'voicefont', klass: 'staff-extra voice-name', anchor: 'start', centerVertically: true, name: \"voice-name\" }, true);\n\t\tselectables.wrapSvgEl({ el_type: \"voiceName\", startChar: -1, endChar: -1, text: params.header }, textEl);\n\t}\n\n\tvar i;\n\tvar child;\n\tvar foundNote = false;\n\tfor (i = 0; i < params.children.length; i++) {\n\t\tchild = params.children[i];\n\t\tif (child.type === 'note' || child.type === 'rest')\n\t\t\tfoundNote = true;\n\t\tvar justInitializedMeasureNumber = false;\n\t\tif (child.type !== 'staff-extra' && !renderer.controller.classes.isInMeasure()) {\n\t\t\trenderer.controller.classes.startMeasure();\n\t\t\tjustInitializedMeasureNumber = true;\n\t\t}\n\t\tif (params.staff.isTabStaff) {\n\t\t\tchild.invisible = false;\n\t\t\tif (child.type == 'bar') {\n\t\t\t\tif (child.abcelem.lastBar) {\n\t\t\t\t\tbartop = params.topLine;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdrawAbsolute(renderer, child, (params.barto || i === params.children.length - 1) ? bartop : 0, selectables, staffPos);\n\n\t\tif (child.type === 'note' || isNonSpacerRest(child))\n\t\t\trenderer.controller.classes.incrNote();\n\t\tif (child.type === 'bar' && !justInitializedMeasureNumber && foundNote) {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t}\n\t}\n\n\trenderer.controller.classes.startMeasure();\n\n\tfor (i = 0; i < params.beams.length; i++) {\n\t\tvar beam = params.beams[i];\n\t\tif (beam === 'bar') {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t} else\n\t\t\tdrawBeam(renderer, beam, selectables); // beams must be drawn first for proper printing of triplets, slurs and ties.\n\t}\n\n\trenderer.controller.classes.startMeasure();\n\tfor (i = 0; i < params.otherchildren.length; i++) {\n\t\tchild = params.otherchildren[i];\n\t\tif (child === 'bar') {\n\t\t\trenderer.controller.classes.incrMeasure();\n\t\t} else {\n\t\t\tswitch (child.type) {\n\t\t\t\tcase \"GlissandoElem\":\n\t\t\t\t\tchild.elemset = drawGlissando(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"CrescendoElem\":\n\t\t\t\t\tchild.elemset = drawCrescendo(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"DynamicDecoration\":\n\t\t\t\t\tchild.elemset = drawDynamics(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"TripletElem\":\n\t\t\t\t\tdrawTriplet(renderer, child, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"EndingElem\":\n\t\t\t\t\tchild.elemset = drawEnding(renderer, child, params.startx + 10, width, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"TieElem\":\n\t\t\t\t\tchild.elemset = drawTie(renderer, child, params.startx + 10, width, selectables);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.log(child);\n\t\t\t\t\tdrawAbsolute(renderer, child, params.startx + 10, width, selectables, staffPos);\n\t\t\t}\n\t\t}\n\t}\n\trenderer.foregroundColor = saveColor\n\n}\n\nfunction isNonSpacerRest(elem) {\n\tif (elem.type !== 'rest')\n\t\treturn false;\n\tif (elem.abcelem && elem.abcelem.rest && elem.abcelem.rest.type !== 'spacer')\n\t\treturn true;\n\treturn false;\n}\n\nmodule.exports = drawVoice;\n","// abc_engraver_controller.js: Controls the engraving process of an ABCJS abstract syntax tree as produced by ABCJS/parse\n\n/*global Math */\n\nvar spacing = require('./helpers/spacing');\nvar AbstractEngraver = require('./creation/abstract-engraver');\nvar Renderer = require('./renderer');\nvar FreeText = require('./creation/elements/free-text');\nvar Separator = require('./creation/elements/separator');\nvar Subtitle = require('./creation/elements/subtitle');\nvar TopText = require('./creation/elements/top-text');\nvar BottomText = require('./creation/elements/bottom-text');\nvar setupSelection = require('./interactive/selection');\nvar layout = require('./layout/layout');\nvar Classes = require('./helpers/classes');\nvar GetFontAndAttr = require('./helpers/get-font-and-attr');\nvar GetTextSize = require('./helpers/get-text-size');\nvar draw = require('./draw/draw');\nvar tablatures = require('../api/abc_tablatures');\n\n/**\n * @class\n * Controls the engraving process, from ABCJS Abstract Syntax Tree (ABCJS AST) to rendered score sheet\n *\n * Call engraveABC to run the process. This creates a graphelems ABCJS Abstract Engraving Structure (ABCJS AES) that can be accessed through this.staffgroups\n * this data structure is first laid out (giving the graphelems x and y coordinates) and then drawn onto the renderer\n * each ABCJS AES represents a single staffgroup - all elements that are not in a staffgroup are rendered directly by the controller\n *\n * elements in ABCJS AES know their \"source data\" in the ABCJS AST, and their \"target shape\"\n * in the renderer for highlighting purposes\n *\n */\nvar EngraverController = function (paper, params) {\n\tparams = params || {};\n\tthis.oneSvgPerLine = params.oneSvgPerLine;\n\tthis.selectionColor = params.selectionColor;\n\tthis.dragColor = params.dragColor ? params.dragColor : params.selectionColor;\n\tthis.dragging = !!params.dragging;\n\tthis.selectTypes = params.selectTypes;\n\tthis.responsive = params.responsive;\n\tthis.space = 3 * spacing.SPACE;\n\tthis.initialClef = params.initialClef;\n\tthis.scale = params.scale ? parseFloat(params.scale) : 0;\n\tthis.classes = new Classes({ shouldAddClasses: params.add_classes });\n\tif (!(this.scale > 0.1))\n\t\tthis.scale = undefined;\n\n\tif (params.staffwidth) {\n\t\t// Note: Normally all measurements to the engraver are in POINTS. However, if a person is formatting for the\n\t\t// screen and directly inputting the width, then it is more logical to have the measurement in pixels.\n\t\tthis.staffwidthScreen = params.staffwidth;\n\t\tthis.staffwidthPrint = params.staffwidth;\n\t} else {\n\t\tthis.staffwidthScreen = 740; // TODO-PER: Not sure where this number comes from, but this is how it's always been.\n\t\tthis.staffwidthPrint = 680; // The number of pixels in 8.5\", after 1cm of margin has been removed.\n\t}\n\tthis.listeners = [];\n\tif (params.clickListener)\n\t\tthis.addSelectListener(params.clickListener);\n\n\tthis.renderer = new Renderer(paper);\n\tthis.renderer.setPaddingOverride(params);\n\tif (params.showDebug)\n\t\tthis.renderer.showDebug = params.showDebug;\n\tif (params.jazzchords)\n\t\tthis.jazzchords = params.jazzchords;\n\tif (params.germanAlphabet)\n\t\tthis.germanAlphabet = params.germanAlphabet;\n\tif (params.lineThickness)\n\t\tthis.lineThickness = params.lineThickness;\n\tthis.renderer.controller = this; // TODO-GD needed for highlighting\n\tthis.renderer.foregroundColor = params.foregroundColor ? params.foregroundColor : \"currentColor\";\n\tif (params.ariaLabel !== undefined)\n\t\tthis.renderer.ariaLabel = params.ariaLabel;\n\tthis.renderer.minPadding = params.minPadding ? params.minPadding : 0;\n\n\tthis.reset();\n};\n\nEngraverController.prototype.reset = function () {\n\tthis.selected = [];\n\tthis.staffgroups = [];\n\tif (this.engraver)\n\t\tthis.engraver.reset();\n\tthis.engraver = null;\n\tthis.renderer.reset();\n\tthis.dragTarget = null;\n\tthis.dragIndex = -1;\n\tthis.dragMouseStart = { x: -1, y: -1 };\n\tthis.dragYStep = 0;\n\tif (this.lineThickness)\n\t\tthis.renderer.setLineThickness(this.lineThickness)\n};\n\n/**\n * run the engraving process\n */\nEngraverController.prototype.engraveABC = function (abctunes, tuneNumber, lineOffset) {\n\tif (abctunes[0] === undefined) {\n\t\tabctunes = [abctunes];\n\t}\n\tthis.reset();\n\n\tfor (var i = 0; i < abctunes.length; i++) {\n\t\tif (tuneNumber === undefined)\n\t\t\ttuneNumber = i;\n\t\tthis.getFontAndAttr = new GetFontAndAttr(abctunes[i].formatting, this.classes);\n\t\tthis.getTextSize = new GetTextSize(this.getFontAndAttr, this.renderer.paper);\n\t\tthis.engraveTune(abctunes[i], tuneNumber, lineOffset);\n\t}\n};\n\n/**\n * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling.\n */\nEngraverController.prototype.adjustNonScaledItems = function (scale) {\n\tthis.width /= scale;\n\tthis.renderer.adjustNonScaledItems(scale);\n};\n\nEngraverController.prototype.getMeasureWidths = function (abcTune) {\n\tthis.reset();\n\tthis.getFontAndAttr = new GetFontAndAttr(abcTune.formatting, this.classes);\n\tthis.getTextSize = new GetTextSize(this.getFontAndAttr, this.renderer.paper);\n\n\tthis.setupTune(abcTune, 0);\n\tthis.constructTuneElements(abcTune);\n\t// layout() sets the x-coordinate of the abcTune element here:\n\t// abcTune.lines[0].staffGroup.voices[0].children[0].x\n\tlayout(this.renderer, abcTune, 0, this.space);\n\n\tvar ret = [];\n\tvar section;\n\n\tvar needNewSection = true;\n\tfor (var i = 0; i < abcTune.lines.length; i++) {\n\t\tvar abcLine = abcTune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\tif (needNewSection) {\n\t\t\t\tsection = {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tmeasureWidths: [],\n\t\t\t\t\t//height: this.renderer.padding.top + this.renderer.spacing.music + this.renderer.padding.bottom + 24, // the 24 is the empirical value added to the bottom of all tunes.\n\t\t\t\t\ttotal: 0\n\t\t\t\t};\n\t\t\t\tret.push(section);\n\t\t\t\tneedNewSection = false;\n\t\t\t}\n\t\t\t// At this point, the voices are laid out so that the bar lines are even with each other. So we just need to get the placement of the first voice.\n\t\t\tif (abcLine.staffGroup.voices.length > 0) {\n\t\t\t\tvar voice = abcLine.staffGroup.voices[0];\n\t\t\t\tvar foundNotStaffExtra = false;\n\t\t\t\tvar lastXPosition = 0;\n\t\t\t\tfor (var k = 0; k < voice.children.length; k++) {\n\t\t\t\t\tvar child = voice.children[k];\n\t\t\t\t\tif (!foundNotStaffExtra && !child.isClef && !child.isKeySig) {\n\t\t\t\t\t\tfoundNotStaffExtra = true;\n\t\t\t\t\t\tsection.left = child.x;\n\t\t\t\t\t\tlastXPosition = child.x;\n\t\t\t\t\t}\n\t\t\t\t\tif (child.type === 'bar') {\n\t\t\t\t\t\tsection.measureWidths.push(child.x - lastXPosition);\n\t\t\t\t\t\tsection.total += (child.x - lastXPosition);\n\t\t\t\t\t\tlastXPosition = child.x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t//section.height += calcHeight(abcLine.staffGroup) * spacing.STEP;\n\t\t} else\n\t\t\tneedNewSection = true;\n\t}\n\treturn ret;\n};\n\nEngraverController.prototype.setupTune = function (abcTune, tuneNumber) {\n\tthis.classes.reset();\n\n\tif (abcTune.formatting.jazzchords !== undefined)\n\t\tthis.jazzchords = abcTune.formatting.jazzchords;\n\n\tthis.renderer.newTune(abcTune);\n\tthis.engraver = new AbstractEngraver(this.getTextSize, tuneNumber, {\n\t\tbagpipes: abcTune.formatting.bagpipes,\n\t\tflatbeams: abcTune.formatting.flatbeams,\n\t\tgraceSlurs: abcTune.formatting.graceSlurs !== false, // undefined is the default, which is true\n\t\tpercmap: abcTune.formatting.percmap,\n\t\tinitialClef: this.initialClef,\n\t\tjazzchords: this.jazzchords,\n\t\tgermanAlphabet: this.germanAlphabet\n\t});\n\tthis.engraver.setStemHeight(this.renderer.spacing.stemHeight);\n\tthis.engraver.measureLength = abcTune.getMeterFraction().num / abcTune.getMeterFraction().den;\n\tif (abcTune.formatting.staffwidth) {\n\t\tthis.width = abcTune.formatting.staffwidth * 1.33; // The width is expressed in pt; convert to px.\n\t} else {\n\t\tthis.width = this.renderer.isPrint ? this.staffwidthPrint : this.staffwidthScreen;\n\t}\n\n\tvar scale = abcTune.formatting.scale ? abcTune.formatting.scale : this.scale;\n\tif (this.responsive === \"resize\") // The resizing will mess with the scaling, so just don't do it explicitly.\n\t\tscale = undefined;\n\tif (scale === undefined) scale = this.renderer.isPrint ? 0.75 : 1;\n\tthis.adjustNonScaledItems(scale);\n\treturn scale;\n};\n\nEngraverController.prototype.constructTuneElements = function (abcTune) {\n\tabcTune.topText = new TopText(abcTune.metaText, abcTune.metaTextInfo, abcTune.formatting, abcTune.lines, this.width, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.getTextSize);\n\n\t// Generate the raw staff line data\n\tvar i;\n\tvar abcLine;\n\tvar hasPrintedTempo = false;\n\tvar hasSeenNonSubtitle = false;\n\tfor (i = 0; i < abcTune.lines.length; i++) {\n\t\tabcLine = abcTune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.staffGroup = this.engraver.createABCLine(abcLine.staff, !hasPrintedTempo ? abcTune.metaText.tempo : null, i);\n\t\t\thasPrintedTempo = true;\n\t\t} else if (abcLine.subtitle) {\n\t\t\t// If the subtitle is at the top, then it was already accounted for. So skip all subtitles until the first non-subtitle line.\n\t\t\tif (hasSeenNonSubtitle) {\n\t\t\t\tvar center = this.width / 2 + this.renderer.padding.left;\n\t\t\t\tabcLine.nonMusic = new Subtitle(this.renderer.spacing.subtitle, abcTune.formatting, abcLine.subtitle, center, this.renderer.padding.left, this.getTextSize);\n\t\t\t}\n\t\t} else if (abcLine.text !== undefined) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.nonMusic = new FreeText(abcLine.text, abcLine.vskip, this.getFontAndAttr, this.renderer.padding.left, this.width, this.getTextSize);\n\t\t} else if (abcLine.separator !== undefined && abcLine.separator.lineLength) {\n\t\t\thasSeenNonSubtitle = true;\n\t\t\tabcLine.nonMusic = new Separator(abcLine.separator.spaceAbove, abcLine.separator.lineLength, abcLine.separator.spaceBelow);\n\t\t}\n\t}\n\tabcTune.bottomText = new BottomText(abcTune.metaText, this.width, this.renderer.isPrint, this.renderer.padding.left, this.renderer.spacing, this.getTextSize);\n};\n\nEngraverController.prototype.engraveTune = function (abcTune, tuneNumber, lineOffset) {\n\tvar scale = this.setupTune(abcTune, tuneNumber);\n\n\t// Create all of the element objects that will appear on the page.\n\tthis.constructTuneElements(abcTune);\n\n\t// Do all the positioning, both horizontally and vertically\n\tvar maxWidth = layout(this.renderer, abcTune, this.width, this.space);\n\n\t// Deal with tablature for staff\n\tif (abcTune.tablatures) {\n\t\ttablatures.layoutTablatures(this.renderer, abcTune);\n\t}\n\n\t// Do all the writing to the SVG\n\tvar ret = draw(this.renderer, this.classes, abcTune, this.width, maxWidth, this.responsive, scale, this.selectTypes, tuneNumber, lineOffset);\n\tthis.staffgroups = ret.staffgroups;\n\tthis.selectables = ret.selectables;\n\n\tif (this.oneSvgPerLine) {\n\t\tvar div = this.renderer.paper.svg.parentNode\n\t\tthis.svgs = splitSvgIntoLines(this.renderer, div, abcTune.metaText.title, this.responsive)\n\t} else {\n\t\tthis.svgs = [this.renderer.paper.svg];\n\t}\n\tsetupSelection(this, this.svgs);\n};\n\nfunction splitSvgIntoLines(renderer, output, title, responsive) {\n\t// Each line is a top level in the svg. To split it into separate\n\t// svgs iterate through each of those and put them in a new svg. Since\n\t// they are placed absolutely, the viewBox needs to be manipulated to\n\t// get the correct vertical positioning.\n\t// We copy all the attributes from the original svg except for the aria-label\n\t// since we want that to include a count. And the height is now a fraction of the original svg.\n\tif (!title) title = \"Untitled\"\n\tvar source = output.querySelector(\"svg\")\n\tif (responsive === 'resize')\n\t\toutput.style.paddingBottom = ''\n\tvar style = source.querySelector(\"style\")\n\tvar width = responsive === 'resize' ? source.viewBox.baseVal.width : source.getAttribute(\"width\")\n\tvar sections = output.querySelectorAll(\"svg > g\") // each section is a line, or the top matter or the bottom matter, or text that has been inserted.\n\tvar nextTop = 0 // There are often gaps between the elements for spacing, so the actual top and height needs to be inferred.\n\tvar wrappers = [] // Create all the elements and place them at once because we use the current svg to get data. It would disappear after placing the first line.\n\tvar svgs = []\n\tfor (var i = 0; i < sections.length; i++) {\n\t\tvar section = sections[i]\n\t\tvar box = section.getBBox()\n\t\tvar gapBetweenLines = box.y - nextTop // take the margin into account\n\t\tvar height = box.height + gapBetweenLines;\n\t\tvar wrapper = document.createElement(\"div\");\n\t\tvar divStyles = \"overflow: hidden;\"\n\t\tif (responsive !== 'resize')\n\t\t\tdivStyles += \"height:\" + height + \"px;\"\n\t\twrapper.setAttribute(\"style\", divStyles)\n\t\tvar svg = duplicateSvg(source)\n\t\tvar fullTitle = \"Sheet Music for \\\"\" + title + \"\\\" section \" + (i + 1)\n\t\tsvg.setAttribute(\"aria-label\", fullTitle)\n\t\tif (responsive !== 'resize')\n\t\t\tsvg.setAttribute(\"height\", height)\n\t\tif (responsive === 'resize')\n\t\t\tsvg.style.position = ''\n\t\t// TODO-PER: Hack! Not sure why this is needed.\n\t\tvar viewBoxHeight = renderer.firefox112 ? height+1 : height\n\t\tsvg.setAttribute(\"viewBox\", \"0 \" + nextTop + \" \" + width + \" \" + viewBoxHeight)\n\t\tsvg.appendChild(style.cloneNode(true))\n\t\tvar titleEl = document.createElement(\"title\")\n\t\ttitleEl.innerText = fullTitle\n\t\tsvg.appendChild(titleEl)\n\t\tsvg.appendChild(section)\n\n\t\twrapper.appendChild(svg)\n\t\tsvgs.push(svg)\n\t\toutput.appendChild(wrapper)\n\t\t//wrappers.push(wrapper)\n\t\tnextTop = box.y + box.height\n\t}\n\t// for (i = 0; i < wrappers.length; i++)\n\t// \toutput.appendChild(wrappers[i])\n\toutput.removeChild(source)\n\treturn svgs;\n}\n\nfunction duplicateSvg(source) {\n\tvar svgNS = \"http://www.w3.org/2000/svg\";\n\tvar svg = document.createElementNS(svgNS, \"svg\");\n\tfor (var i = 0; i < source.attributes.length; i++) {\n\t\tvar attr = source.attributes[i];\n\t\tif (attr.name !== \"height\" && attr.name != \"aria-label\")\n\t\t\tsvg.setAttribute(attr.name, attr.value)\n\t}\n\treturn svg;\n}\n\nEngraverController.prototype.getDim = function (historyEl) {\n\t// Get the dimensions on demand because the getBBox call is expensive.\n\tif (!historyEl.dim) {\n\t\tvar box = historyEl.svgEl.getBBox();\n\t\thistoryEl.dim = { left: Math.round(box.x), top: Math.round(box.y), right: Math.round(box.x + box.width), bottom: Math.round(box.y + box.height) };\n\t}\n\treturn historyEl.dim;\n};\n\nEngraverController.prototype.addSelectListener = function (clickListener) {\n\tthis.listeners[this.listeners.length] = clickListener;\n};\n\nmodule.exports = EngraverController;\n","var Classes = function Classes(options) {\n\tthis.shouldAddClasses = options.shouldAddClasses;\n\tthis.reset();\n}\n\nClasses.prototype.reset = function () {\n\tthis.lineNumber = null;\n\tthis.voiceNumber = null;\n\tthis.measureNumber = null;\n\tthis.measureTotalPerLine = [];\n\tthis.noteNumber = null;\n}\n\nClasses.prototype.incrLine = function () {\n\tif (this.lineNumber === null)\n\t\tthis.lineNumber = 0;\n\telse\n\t\tthis.lineNumber++;\n\tthis.voiceNumber = null;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.incrVoice = function () {\n\tif (this.voiceNumber === null)\n\t\tthis.voiceNumber = 0;\n\telse\n\t\tthis.voiceNumber++;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.isInMeasure = function () {\n\treturn this.measureNumber !== null;\n};\n\nClasses.prototype.newMeasure = function () {\n\tif (this.measureNumber)\n\t\tthis.measureTotalPerLine[this.lineNumber] = this.measureNumber;\n\tthis.measureNumber = null;\n\tthis.noteNumber = null;\n};\n\nClasses.prototype.startMeasure = function () {\n\tthis.measureNumber = 0;\n\tthis.noteNumber = 0;\n};\n\nClasses.prototype.incrMeasure = function () {\n\tthis.measureNumber++;\n\tthis.noteNumber = 0;\n};\n\nClasses.prototype.incrNote = function () {\n\tthis.noteNumber++;\n};\n\nClasses.prototype.measureTotal = function () {\n\tvar total = 0;\n\tfor (var i = 0; i < this.lineNumber; i++)\n\t\ttotal += this.measureTotalPerLine[i] ? this.measureTotalPerLine[i] : 0; // This can be null when non-music things are present.\n\tif (this.measureNumber)\n\t\ttotal += this.measureNumber;\n\treturn total;\n};\n\nClasses.prototype.getCurrent = function (c) {\n\treturn {\n\t\tline: this.lineNumber,\n\t\tmeasure: this.measureNumber,\n\t\tmeasureTotal: this.measureTotal(),\n\t\tvoice: this.voiceNumber,\n\t\tnote: this.noteNumber\n\t};\n};\n\nClasses.prototype.generate = function (c) {\n\tif (!this.shouldAddClasses)\n\t\treturn \"\";\n\tvar ret = [];\n\tif (c && c.length > 0) ret.push(c);\n\tif (c === \"tab-number\") // TODO-PER-HACK! straighten out the tablature\n\t\treturn ret.join(' ')\n\tif (c === \"text instrument-name\")\n\t\treturn \"abcjs-text abcjs-instrument-name\"\n\tif (this.lineNumber !== null) ret.push(\"l\" + this.lineNumber);\n\tif (this.measureNumber !== null) ret.push(\"m\" + this.measureNumber);\n\tif (this.measureNumber !== null) ret.push(\"mm\" + this.measureTotal()); // measureNumber is null between measures so this is still the test for measureTotal\n\tif (this.voiceNumber !== null) ret.push(\"v\" + this.voiceNumber);\n\tif (c && (c.indexOf('note') >= 0 || c.indexOf('rest') >= 0 || c.indexOf('lyric') >= 0) && this.noteNumber !== null) ret.push(\"n\" + this.noteNumber);\n\t// add a prefix to all classes that abcjs adds.\n\tif (ret.length > 0) {\n\t\tret = ret.join(' '); // Some strings are compound classes - that is, specify more than one class in a string.\n\t\tret = ret.split(' ');\n\t\tfor (var i = 0; i < ret.length; i++) {\n\t\t\tif (ret[i].indexOf('abcjs-') !== 0 && ret[i].length > 0) // if the prefix doesn't already exist and the class is not blank.\n\t\t\t\tret[i] = 'abcjs-' + ret[i];\n\t\t}\n\t}\n\treturn ret.join(' ');\n};\n\n\nmodule.exports = Classes;\n","var GetFontAndAttr = function GetFontAndAttr(formatting, classes) {\n\tthis.formatting = formatting;\n\tthis.classes = classes;\n};\n\nGetFontAndAttr.prototype.updateFonts = function (fontOverrides) {\n\tif (fontOverrides.gchordfont)\n\t\tthis.formatting.gchordfont = fontOverrides.gchordfont;\n\tif (fontOverrides.tripletfont)\n\t\tthis.formatting.tripletfont = fontOverrides.tripletfont;\n\tif (fontOverrides.annotationfont)\n\t\tthis.formatting.annotationfont = fontOverrides.annotationfont;\n\tif (fontOverrides.vocalfont)\n\t\tthis.formatting.vocalfont = fontOverrides.vocalfont;\n};\n\nGetFontAndAttr.prototype.calc = function (type, klass) {\n\tvar font;\n\tif (typeof type === 'string') {\n\t\tfont = this.formatting[type];\n\t\t// Raphael deliberately changes the font units to pixels for some reason, so we need to change points to pixels here.\n\t\tif (font)\n\t\t\tfont = { face: font.face, size: Math.round(font.size * 4 / 3), decoration: font.decoration, style: font.style, weight: font.weight, box: font.box };\n\t\telse\n\t\t\tfont = { face: \"Arial\", size: Math.round(12 * 4 / 3), decoration: \"underline\", style: \"normal\", weight: \"normal\" };\n\t} else\n\t\tfont = { face: type.face, size: Math.round(type.size * 4 / 3), decoration: type.decoration, style: type.style, weight: type.weight, box: type.box };\n\tvar paddingPercent = this.formatting.fontboxpadding ? this.formatting.fontboxpadding : 0.1\n\tfont.padding = font.size * paddingPercent;\n\n\tvar attr = {\n\t\t\"font-size\": font.size, 'font-style': font.style,\n\t\t\"font-family\": font.face, 'font-weight': font.weight, 'text-decoration': font.decoration,\n\t\t'class': this.classes.generate(klass)\n\t};\n\treturn { font: font, attr: attr };\n};\n\nmodule.exports = GetFontAndAttr;\n","var GetTextSize = function GetTextSize(getFontAndAttr, svg) {\n\tthis.getFontAndAttr = getFontAndAttr;\n\tthis.svg = svg;\n};\n\nGetTextSize.prototype.updateFonts = function (fontOverrides) {\n\tthis.getFontAndAttr.updateFonts(fontOverrides);\n};\n\nGetTextSize.prototype.attr = function (type, klass) {\n\treturn this.getFontAndAttr.calc(type, klass);\n};\n\nGetTextSize.prototype.calc = function (text, type, klass, el) {\n\tvar hash;\n\t// This can be passed in either a string or a font. If it is a string it names one of the standard fonts.\n\tif (typeof type === 'string')\n\t\thash = this.attr(type, klass);\n\telse {\n\t\thash = {\n\t\t\tfont: {\n\t\t\t\tface: type.face,\n\t\t\t\tsize: type.size,\n\t\t\t\tdecoration: type.decoration,\n\t\t\t\tstyle: type.style,\n\t\t\t\tweight: type.weight\n\t\t\t},\n\t\t\tattr: {\n\t\t\t\t\"font-size\": type.size,\n\t\t\t\t\"font-style\": type.style,\n\t\t\t\t\"font-family\": type.face,\n\t\t\t\t\"font-weight\": type.weight,\n\t\t\t\t\"text-decoration\": type.decoration,\n\t\t\t\t\"class\": this.getFontAndAttr.classes.generate(klass)\n\t\t\t}\n\t\t}\n\t}\n\tvar size = this.svg.getTextSize(text, hash.attr, el);\n\tif (hash.font.box) {\n\t\t// Add padding and an equal margin to each side.\n\t\treturn { height: size.height + hash.font.padding * 4, width: size.width + hash.font.padding * 4 };\n\t}\n\treturn size;\n};\n\nGetTextSize.prototype.baselineToCenter = function (text, type, klass, index, total) {\n\t// This is for the case where SVG wants to use the baseline of the first line as the Y coordinate.\n\t// If there are multiple lines of text or there is an array of text then that will not be centered so this adjusts it.\n\tvar height = this.calc(text, type, klass).height;\n\tvar fontHeight = this.attr(type, klass).font.size;\n\n\treturn height * 0.5 + (total - index - 2) * fontHeight;\n};\n\n\nmodule.exports = GetTextSize;\n","var setClass = function (elemset, addClass, removeClass, color) {\n\tif (!elemset)\n\t\treturn;\n\tfor (var i = 0; i < elemset.length; i++) {\n\t\tvar el = elemset[i];\n\t\tvar attr = el.getAttribute(\"highlight\");\n\t\tif (!attr) attr = \"fill\";\n\t\tel.setAttribute(attr, color);\n\t\tvar kls = el.getAttribute(\"class\");\n\t\tif (!kls) kls = \"\";\n\t\tkls = kls.replace(removeClass, \"\");\n\t\tkls = kls.replace(addClass, \"\");\n\t\tif (addClass.length > 0) {\n\t\t\tif (kls.length > 0 && kls[kls.length - 1] !== ' ') kls += \" \";\n\t\t\tkls += addClass;\n\t\t}\n\t\tel.setAttribute(\"class\", kls);\n\t}\n};\n\nmodule.exports = setClass;\n","var spacing = {};\n\nspacing.FONTEM = 360;\nspacing.FONTSIZE = 30;\nspacing.STEP = spacing.FONTSIZE * 93 / 720;\nspacing.SPACE = 10;\nspacing.TOPNOTE = 15;\nspacing.STAVEHEIGHT = 100;\nspacing.INDENT = 50;\n\nmodule.exports = spacing;\n","var setClass = require('../helpers/set-class');\n\nvar highlight = function (klass, color) {\n\tif (klass === undefined)\n\t\tklass = \"abcjs-note_selected\";\n\tif (color === undefined)\n\t\tcolor = \"#ff0000\";\n\tsetClass(this.elemset, klass, \"\", color);\n};\n\nmodule.exports = highlight;\n","var spacing = require('../helpers/spacing');\n\nfunction setupSelection(engraver, svgs) {\n\tengraver.rangeHighlight = rangeHighlight;\n\tif (engraver.dragging) {\n\t\tfor (var h = 0; h < engraver.selectables.length; h++) {\n\t\t\tvar hist = engraver.selectables[h];\n\t\t\tif (hist.svgEl.getAttribute(\"selectable\") === \"true\") {\n\t\t\t\thist.svgEl.setAttribute(\"tabindex\", 0);\n\t\t\t\thist.svgEl.setAttribute(\"data-index\", h);\n\t\t\t\thist.svgEl.addEventListener(\"keydown\", keyboardDown.bind(engraver));\n\t\t\t\thist.svgEl.addEventListener(\"keyup\", keyboardSelection.bind(engraver));\n\t\t\t\thist.svgEl.addEventListener(\"focus\", elementFocused.bind(engraver));\n\t\t\t}\n\t\t}\n\t}\n\tfor (var i = 0; i < svgs.length; i++) {\n\t\tsvgs[i].addEventListener('touchstart', mouseDown.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('touchmove', mouseMove.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('touchend', mouseUp.bind(engraver), { passive: true });\n\t\tsvgs[i].addEventListener('mousedown', mouseDown.bind(engraver));\n\t\tsvgs[i].addEventListener('mousemove', mouseMove.bind(engraver));\n\t\tsvgs[i].addEventListener('mouseup', mouseUp.bind(engraver));\n\t}\n}\n\nfunction getCoord(ev) {\n\tvar scaleX = 1;\n\tvar scaleY = 1;\n\tvar svg = ev.target.closest('svg')\n\tvar yOffset = 0\n\n\t// when renderer.options.responsive === 'resize' the click coords are in relation to the HTML\n\t// element, we need to convert to the SVG viewBox coords\n\tif (svg && svg.viewBox && svg.viewBox.baseVal) { // Firefox passes null to this when no viewBox is given\n\t\t// Chrome makes these values null when no viewBox is given.\n\t\tif (svg.viewBox.baseVal.width !== 0)\n\t\t\tscaleX = svg.viewBox.baseVal.width / svg.clientWidth\n\t\tif (svg.viewBox.baseVal.height !== 0)\n\t\t\tscaleY = svg.viewBox.baseVal.height / svg.clientHeight\n\t\tyOffset = svg.viewBox.baseVal.y\n\t}\n\n\tvar svgClicked = ev.target && ev.target.tagName === \"svg\";\n\tvar x;\n\tvar y;\n\tif (svgClicked) {\n\t\tx = ev.offsetX;\n\t\ty = ev.offsetY;\n\t} else {\n\t\tx = ev.layerX;\n\t\ty = ev.layerY;\n\t}\n\n\tx = x * scaleX;\n\ty = y * scaleY;\n\t//console.log(x, y)\n\n\treturn [x, y + yOffset];\n}\n\nfunction elementFocused(ev) {\n\t// If there had been another element focused and is being dragged, then report that before setting the new element up.\n\tif (this.dragMechanism === \"keyboard\" && this.dragYStep !== 0 && this.dragTarget)\n\t\tnotifySelect.bind(this)(this.dragTarget, this.dragYStep, this.selectables.length, this.dragIndex, ev);\n\n\tthis.dragYStep = 0;\n}\n\nfunction keyboardDown(ev) {\n\t// Swallow the up and down arrow events - they will be used for dragging with the keyboard\n\tswitch (ev.keyCode) {\n\t\tcase 38:\n\t\tcase 40:\n\t\t\tev.preventDefault();\n\t}\n}\n\nfunction keyboardSelection(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar handled = false;\n\tvar index = ev.target.dataset.index;\n\tswitch (ev.keyCode) {\n\t\tcase 13:\n\t\tcase 32:\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tthis.dragMechanism = \"keyboard\";\n\t\t\tmouseUp.bind(this)(ev);\n\t\t\tbreak;\n\t\tcase 38: // arrow up\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tif (this.dragTarget && this.dragTarget.isDraggable) {\n\t\t\t\tif (this.dragging && this.dragTarget.isDraggable)\n\t\t\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t\t\tthis.dragYStep--;\n\t\t\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (this.dragYStep * spacing.STEP) + \")\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 40: // arrow down\n\t\t\thandled = true;\n\t\t\tthis.dragTarget = this.selectables[index];\n\t\t\tthis.dragIndex = index;\n\t\t\tthis.dragMechanism = \"keyboard\";\n\t\t\tif (this.dragTarget && this.dragTarget.isDraggable) {\n\t\t\t\tif (this.dragging && this.dragTarget.isDraggable)\n\t\t\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t\t\tthis.dragYStep++;\n\t\t\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (this.dragYStep * spacing.STEP) + \")\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 9: // tab\n\t\t\t// This is losing focus - if there had been dragging, then do the callback\n\t\t\tif (this.dragYStep !== 0) {\n\t\t\t\tmouseUp.bind(this)(ev);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t//console.log(ev);\n\t\t\tbreak;\n\t}\n\tif (handled)\n\t\tev.preventDefault();\n}\n\nfunction findElementInHistory(selectables, el) {\n\tfor (var i = 0; i < selectables.length; i++) {\n\t\tif (el.dataset.index === selectables[i].svgEl.dataset.index)\n\t\t\treturn i;\n\t}\n\treturn -1;\n}\n\nfunction findElementByCoord(self, x, y) {\n\tvar minDistance = 9999999;\n\tvar closestIndex = -1;\n\tfor (var i = 0; i < self.selectables.length && minDistance > 0; i++) {\n\t\tvar el = self.selectables[i];\n\n\t\tself.getDim(el);\n\t\tif (el.dim.left < x && el.dim.right > x && el.dim.top < y && el.dim.bottom > y) {\n\t\t\t// See if it is a direct hit on an element - if so, definitely take it (there are no overlapping elements)\n\t\t\tclosestIndex = i;\n\t\t\tminDistance = 0;\n\t\t} else if (el.dim.top < y && el.dim.bottom > y) {\n\t\t\t// See if it is the same vertical as the element. Then the distance is the x difference\n\t\t\tvar horiz = Math.min(Math.abs(el.dim.left - x), Math.abs(el.dim.right - x));\n\t\t\tif (horiz < minDistance) {\n\t\t\t\tminDistance = horiz;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t} else if (el.dim.left < x && el.dim.right > x) {\n\t\t\t// See if it is the same horizontal as the element. Then the distance is the y difference\n\t\t\tvar vert = Math.min(Math.abs(el.dim.top - y), Math.abs(el.dim.bottom - y));\n\t\t\tif (vert < minDistance) {\n\t\t\t\tminDistance = vert;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t} else {\n\t\t\t// figure out the distance to this element.\n\t\t\tvar dx = Math.abs(x - el.dim.left) > Math.abs(x - el.dim.right) ? Math.abs(x - el.dim.right) : Math.abs(x - el.dim.left);\n\t\t\tvar dy = Math.abs(y - el.dim.top) > Math.abs(y - el.dim.bottom) ? Math.abs(y - el.dim.bottom) : Math.abs(y - el.dim.top);\n\t\t\tvar hypotenuse = Math.sqrt(dx * dx + dy * dy);\n\t\t\tif (hypotenuse < minDistance) {\n\t\t\t\tminDistance = hypotenuse;\n\t\t\t\tclosestIndex = i;\n\t\t\t}\n\t\t}\n\t}\n\treturn (closestIndex >= 0 && minDistance <= 12) ? closestIndex : -1;\n}\n\nfunction getBestMatchCoordinates(dim, ev, scale) {\n\t// Different browsers have conflicting meanings for the coordinates that are returned.\n\t// If the item we want is clicked on directly, then we will just see what is the best match.\n\t// This seems like less of a hack than browser sniffing.\n\tif (dim.x <= ev.offsetX && dim.x + dim.width >= ev.offsetX &&\n\t\tdim.y <= ev.offsetY && dim.y + dim.height >= ev.offsetY)\n\t\treturn [ev.offsetX, ev.offsetY];\n\t// Firefox returns a weird value for offset, but layer is correct.\n\t// Safari and Chrome return the correct value for offset, but layer is multiplied by the scale (that is, if it were rendered with { scale: 2 })\n\t// For instance (if scale is 2):\n\t// Firefox: { offsetY: 5, layerY: 335 }\n\t// Others: {offsetY: 335, layerY: 670} (there could be a little rounding, so the number might not be exactly 2x)\n\t// So, if layerY/scale is approx. offsetY, then use offsetY, otherwise use layerY\n\tvar epsilon = Math.abs(ev.layerY / scale - ev.offsetY);\n\tif (epsilon < 3)\n\t\treturn [ev.offsetX, ev.offsetY];\n\telse\n\t\treturn [ev.layerX, ev.layerY];\n}\n\nfunction getTarget(target) {\n\t// This searches up the dom for the first item containing the attribute \"selectable\", or stopping at the SVG.\n\tif (target.tagName === \"svg\")\n\t\treturn target;\n\n\tvar found = target.getAttribute(\"selectable\");\n\twhile (!found) {\n\t\tif (!target.parentElement)\n\t\t\tfound = true;\n\t\telse {\n\t\t\ttarget = target.parentElement;\n\t\t\tif (target.tagName === \"svg\")\n\t\t\t\tfound = true;\n\t\t\telse\n\t\t\t\tfound = target.getAttribute(\"selectable\");\n\t\t}\n\t}\n\treturn target;\n}\n\nfunction getMousePosition(self, ev) {\n\t// if the user clicked exactly on an element that we're interested in, then we already have the answer.\n\t// This is more reliable than the calculations because firefox returns different coords for offsetX, offsetY\n\tvar x;\n\tvar y;\n\tvar box;\n\tvar clickedOn = findElementInHistory(self.selectables, getTarget(ev.target));\n\tif (clickedOn >= 0) {\n\t\t// There was a direct hit on an element.\n\t\tbox = getBestMatchCoordinates(self.selectables[clickedOn].svgEl.getBBox(), ev, self.scale);\n\t\tx = box[0];\n\t\ty = box[1];\n\t\t//console.log(\"clicked on\", clickedOn, x, y, self.selectables[clickedOn].svgEl.getBBox(), ev.target.getBBox());\n\t} else {\n\t\t// See if they clicked close to an element.\n\t\tbox = getCoord(ev);\n\t\tx = box[0];\n\t\ty = box[1];\n\t\tclickedOn = findElementByCoord(self, x, y);\n\t\t//console.log(\"clicked near\", clickedOn, x, y, printEl(ev.target));\n\t}\n\treturn { x: x, y: y, clickedOn: clickedOn };\n}\n\nfunction attachMissingTouchEventAttributes(touchEv) {\n\tif (!touchEv || !touchEv.target || !touchEv.touches || touchEv.touches.length < 1)\n\t\treturn\n\tvar rect = touchEv.target.getBoundingClientRect();\n\tvar offsetX = touchEv.touches[0].pageX - rect.left;\n\tvar offsetY = touchEv.touches[0].pageY - rect.top;\n\n\ttouchEv.touches[0].offsetX = offsetX;\n\ttouchEv.touches[0].offsetY = offsetY;\n\n\ttouchEv.touches[0].layerX = touchEv.touches[0].pageX;\n\ttouchEv.touches[0].layerY = touchEv.touches[0].pageY;\n}\n\nfunction mouseDown(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar _ev = ev;\n\tif (ev.type === 'touchstart') {\n\t\tattachMissingTouchEventAttributes(ev);\n\t\tif (ev.touches.length > 0)\n\t\t\t_ev = ev.touches[0];\n\t}\n\n\tvar positioning = getMousePosition(this, _ev);\n\n\t// Only start dragging if the user clicked close enough to an element and clicked with the main mouse button.\n\tif (positioning.clickedOn >= 0 && (ev.type === 'touchstart' || ev.button === 0) && this.selectables[positioning.clickedOn]) {\n\t\tthis.dragTarget = this.selectables[positioning.clickedOn];\n\t\tthis.dragIndex = positioning.clickedOn;\n\t\tthis.dragMechanism = \"mouse\";\n\t\tthis.dragMouseStart = { x: positioning.x, y: positioning.y };\n\t\tif (this.dragging && this.dragTarget.isDraggable) {\n\t\t\taddGlobalClass(this.renderer.paper, \"abcjs-dragging-in-progress\");\n\t\t\tthis.dragTarget.absEl.highlight(undefined, this.dragColor);\n\t\t}\n\t}\n}\n\nfunction mouseMove(ev) {\n\tvar _ev = ev;\n\tif (ev.type === 'touchmove') {\n\t\tattachMissingTouchEventAttributes(ev);\n\t\tif (ev.touches.length > 0)\n\t\t\t_ev = ev.touches[0];\n\t}\n\tthis.lastTouchMove = ev;\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\n\tif (!this.dragTarget || !this.dragging || !this.dragTarget.isDraggable || this.dragMechanism !== 'mouse' || !this.dragMouseStart)\n\t\treturn;\n\n\tvar positioning = getMousePosition(this, _ev);\n\n\tvar yDist = Math.round((positioning.y - this.dragMouseStart.y) / spacing.STEP);\n\tif (yDist !== this.dragYStep) {\n\t\tthis.dragYStep = yDist;\n\t\tthis.dragTarget.svgEl.setAttribute(\"transform\", \"translate(0,\" + (yDist * spacing.STEP) + \")\");\n\t}\n}\n\nfunction mouseUp(ev) {\n\t// \"this\" is the EngraverController because of the bind(this) when setting the event listener.\n\tvar _ev = ev;\n\tif (ev.type === 'touchend' && this.lastTouchMove) {\n\t\tattachMissingTouchEventAttributes(this.lastTouchMove);\n\t\tif (this.lastTouchMove && this.lastTouchMove.touches && this.lastTouchMove.touches.length > 0)\n\t\t\t_ev = this.lastTouchMove.touches[0];\n\t}\n\n\tif (!this.dragTarget)\n\t\treturn;\n\n\tclearSelection.bind(this)();\n\tif (this.dragTarget.absEl && this.dragTarget.absEl.highlight) {\n\t\tthis.selected = [this.dragTarget.absEl];\n\t\tthis.dragTarget.absEl.highlight(undefined, this.selectionColor);\n\t}\n\n\tnotifySelect.bind(this)(this.dragTarget, this.dragYStep, this.selectables.length, this.dragIndex, _ev);\n\tif (this.dragTarget.svgEl && this.dragTarget.svgEl.focus) {\n\t\tthis.dragTarget.svgEl.focus();\n\t\tthis.dragTarget = null;\n\t\tthis.dragIndex = -1;\n\t}\n\tremoveGlobalClass(this.renderer.svg, \"abcjs-dragging-in-progress\");\n}\n\nfunction setSelection(dragIndex) {\n\tif (dragIndex >= 0 && dragIndex < this.selectables.length) {\n\t\tthis.dragTarget = this.selectables[dragIndex];\n\t\tthis.dragIndex = dragIndex;\n\t\tthis.dragMechanism = \"keyboard\";\n\t\tmouseUp.bind(this)({ target: this.dragTarget.svgEl });\n\t}\n}\n\nfunction notifySelect(target, dragStep, dragMax, dragIndex, ev) {\n\tvar classes = [];\n\tif (target.absEl.elemset) {\n\t\tvar classObj = {};\n\t\tfor (var j = 0; j < target.absEl.elemset.length; j++) {\n\t\t\tvar es = target.absEl.elemset[j];\n\t\t\tif (es) {\n\t\t\t\tvar klass = es.getAttribute(\"class\").split(' ');\n\t\t\t\tfor (var k = 0; k < klass.length; k++)\n\t\t\t\t\tclassObj[klass[k]] = true;\n\t\t\t}\n\t\t}\n\t\tfor (var kk = 0; kk < Object.keys(classObj).length; kk++)\n\t\t\tclasses.push(Object.keys(classObj)[kk]);\n\t}\n\tvar analysis = {};\n\tfor (var ii = 0; ii < classes.length; ii++) {\n\t\tfindNumber(classes[ii], \"abcjs-v\", analysis, \"voice\");\n\t\tfindNumber(classes[ii], \"abcjs-l\", analysis, \"line\");\n\t\tfindNumber(classes[ii], \"abcjs-m\", analysis, \"measure\");\n\t}\n\tif (target.staffPos)\n\t\tanalysis.staffPos = target.staffPos;\n\tvar closest = ev.target;\n\twhile (closest && closest.dataset && !closest.dataset.name && closest.tagName.toLowerCase() !== 'svg')\n\t\tclosest = closest.parentNode;\n\tvar parent = ev.target;\n\twhile (parent && parent.dataset && !parent.dataset.index && parent.tagName.toLowerCase() !== 'svg')\n\t\tparent = parent.parentNode;\n\tif (parent && parent.dataset) {\n\t\tanalysis.name = parent.dataset.name;\n\t\tanalysis.clickedName = closest.dataset.name;\n\t\tanalysis.parentClasses = parent.classList;\n\t}\n\tif (closest && closest.classList)\n\t\tanalysis.clickedClasses = closest.classList;\n\tanalysis.selectableElement = target.svgEl;\n\n\tfor (var i = 0; i < this.listeners.length; i++) {\n\t\tthis.listeners[i](target.absEl.abcelem, target.absEl.tuneNumber, classes.join(' '), analysis, { step: dragStep, max: dragMax, index: dragIndex, setSelection: setSelection.bind(this) }, ev);\n\t}\n}\n\nfunction findNumber(klass, match, target, name) {\n\tif (klass.indexOf(match) === 0) {\n\t\tvar value = klass.replace(match, '');\n\t\tvar num = parseInt(value, 10);\n\t\tif ('' + num === value)\n\t\t\ttarget[name] = num;\n\t}\n}\n\nfunction clearSelection() {\n\tfor (var i = 0; i < this.selected.length; i++) {\n\t\tthis.selected[i].unhighlight(undefined, this.renderer.foregroundColor);\n\t}\n\tthis.selected = [];\n}\n\nfunction rangeHighlight(start, end) {\n\tclearSelection.bind(this)();\n\tfor (var line = 0; line < this.staffgroups.length; line++) {\n\t\tvar voices = this.staffgroups[line].voices;\n\t\tfor (var voice = 0; voice < voices.length; voice++) {\n\t\t\tvar elems = voices[voice].children;\n\t\t\tfor (var elem = 0; elem < elems.length; elem++) {\n\t\t\t\t// Since the user can highlight more than an element, or part of an element, a hit is if any of the endpoints\n\t\t\t\t// is inside the other range.\n\t\t\t\tvar elStart = elems[elem].abcelem.startChar;\n\t\t\t\tvar elEnd = elems[elem].abcelem.endChar;\n\t\t\t\tif ((end > elStart && start < elEnd) || ((end === start) && end === elEnd)) {\n\t\t\t\t\t//\t\tif (elems[elem].abcelem.startChar>=start && elems[elem].abcelem.endChar<=end) {\n\t\t\t\t\tthis.selected[this.selected.length] = elems[elem];\n\t\t\t\t\telems[elem].highlight(undefined, this.selectionColor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction getClassSet(el) {\n\tvar oldClass = el.getAttribute('class');\n\tif (!oldClass)\n\t\toldClass = \"\";\n\tvar klasses = oldClass.split(\" \");\n\tvar obj = {};\n\tfor (var i = 0; i < klasses.length; i++)\n\t\tobj[klasses[i]] = true;\n\treturn obj;\n}\n\nfunction setClassSet(el, klassSet) {\n\tvar klasses = [];\n\tfor (var key in klassSet) {\n\t\tif (klassSet.hasOwnProperty(key))\n\t\t\tklasses.push(key);\n\t}\n\tel.setAttribute('class', klasses.join(' '));\n}\n\nfunction addGlobalClass(svg, klass) {\n\tif (svg) {\n\t\tvar obj = getClassSet(svg.svg);\n\t\tobj[klass] = true;\n\t\tsetClassSet(svg.svg, obj);\n\t}\n}\n\nfunction removeGlobalClass(svg, klass) {\n\tif (svg) {\n\t\tvar obj = getClassSet(svg.svg);\n\t\tdelete obj[klass];\n\t\tsetClassSet(svg.svg, obj);\n\t}\n}\n\nmodule.exports = setupSelection;\n","var setClass = require('../helpers/set-class');\n\nvar unhighlight = function (klass, color) {\n\tif (klass === undefined)\n\t\tklass = \"abcjs-note_selected\";\n\tif (color === undefined)\n\t\tcolor = \"#000000\";\n\tsetClass(this.elemset, \"\", klass, color);\n};\n\nmodule.exports = unhighlight;\n","var RelativeElement = require('../creation/elements/relative-element');\nvar spacing = require('../helpers/spacing');\nvar getBarYAt = require('./get-bar-y-at');\n\nvar layoutBeam = function (beam) {\n\tif (beam.elems.length === 0 || beam.allrests) return;\n\n\tvar dy = calcDy(beam.stemsUp, beam.isgrace); // This is the width of the beam line.\n\n\t// create the main beam\n\tvar firstElement = beam.elems[0];\n\tvar lastElement = beam.elems[beam.elems.length - 1];\n\tvar minStemHeight = 0; // The following is to leave space for \"!///!\" marks.\n\tvar referencePitch = beam.stemsUp ? firstElement.abcelem.maxpitch : firstElement.abcelem.minpitch;\n\tminStemHeight = minStem(firstElement, beam.stemsUp, referencePitch, minStemHeight);\n\tminStemHeight = minStem(lastElement, beam.stemsUp, referencePitch, minStemHeight);\n\tminStemHeight = Math.max(beam.stemHeight, minStemHeight + 3); // TODO-PER: The 3 is the width of a 16th beam. The actual height of the beam should be used instead.\n\tvar yPos = calcYPos(beam.average, beam.elems.length, minStemHeight, beam.stemsUp, firstElement.abcelem.averagepitch, lastElement.abcelem.averagepitch, beam.isflat, beam.min, beam.max, beam.isgrace);\n\tvar xPos = calcXPos(beam.stemsUp, firstElement, lastElement);\n\tbeam.addBeam({ startX: xPos[0], endX: xPos[1], startY: yPos[0], endY: yPos[1], dy: dy });\n\n\t// create the rest of the beams (in the case of 1/16th notes, etc.\n\tvar beams = createAdditionalBeams(beam.elems, beam.stemsUp, beam.beams[0], beam.isgrace, dy);\n\tfor (var i = 0; i < beams.length; i++)\n\t\tbeam.addBeam(beams[i]);\n\n\t// Now that the main beam is defined, we know how tall the stems should be, so create them and attach them to the original notes.\n\tcreateStems(beam.elems, beam.stemsUp, beam.beams[0], dy, beam.mainNote);\n};\n\nvar getDurlog = function (duration) {\n\t// TODO-PER: This is a hack to prevent a Chrome lockup. Duration should have been defined already,\n\t// but there's definitely a case where it isn't. [Probably something to do with triplets.]\n\tif (duration === undefined) {\n\t\treturn 0;\n\t}\n\t// console.log(\"getDurlog: \" + duration);\n\treturn Math.floor(Math.log(duration) / Math.log(2));\n};\n\n//\n// private functions\n//\nfunction minStem(element, stemsUp, referencePitch, minStemHeight) {\n\tif (!element.children)\n\t\treturn minStemHeight;\n\tfor (var i = 0; i < element.children.length; i++) {\n\t\tvar elem = element.children[i];\n\t\tif (stemsUp && elem.top !== undefined && elem.c === \"flags.ugrace\")\n\t\t\tminStemHeight = Math.max(minStemHeight, elem.top - referencePitch);\n\t\telse if (!stemsUp && elem.bottom !== undefined && elem.c === \"flags.ugrace\")\n\t\t\tminStemHeight = Math.max(minStemHeight, referencePitch - elem.bottom + 7); // The extra 7 is because we are measuring the slash from the top.\n\t}\n\treturn minStemHeight;\n}\n\nfunction calcSlant(leftAveragePitch, rightAveragePitch, numStems, isFlat) {\n\tif (isFlat)\n\t\treturn 0;\n\tvar slant = leftAveragePitch - rightAveragePitch;\n\tvar maxSlant = numStems / 2;\n\n\tif (slant > maxSlant) slant = maxSlant;\n\tif (slant < -maxSlant) slant = -maxSlant;\n\treturn slant;\n}\n\nfunction calcDy(asc, isGrace) {\n\tvar dy = (asc) ? spacing.STEP : -spacing.STEP;\n\tif (isGrace) dy = dy * 0.4;\n\treturn dy;\n}\n\nfunction calcXPos(asc, firstElement, lastElement) {\n\tvar starthead = firstElement.heads[asc ? 0 : firstElement.heads.length - 1];\n\tvar endhead = lastElement.heads[asc ? 0 : lastElement.heads.length - 1];\n\tvar startX = starthead.x;\n\tif (asc) startX += starthead.w - 0.6;\n\tvar endX = endhead.x;\n\tendX += (asc) ? endhead.w : 0.6;\n\treturn [startX, endX];\n}\n\nfunction calcYPos(average, numElements, stemHeight, asc, firstAveragePitch, lastAveragePitch, isFlat, minPitch, maxPitch, isGrace) {\n\tvar barpos = stemHeight - 2; // (isGrace)? 5:7;\n\tvar barminpos = stemHeight - 2;\n\tvar pos = Math.round(asc ? Math.max(average + barpos, maxPitch + barminpos) : Math.min(average - barpos, minPitch - barminpos));\n\n\tvar slant = calcSlant(firstAveragePitch, lastAveragePitch, numElements, isFlat);\n\tvar startY = pos + Math.floor(slant / 2);\n\tvar endY = pos + Math.floor(-slant / 2);\n\n\t// If the notes are too high or too low, make the beam go down to the middle\n\tif (!isGrace) {\n\t\tif (asc && pos < 6) {\n\t\t\tstartY = 6;\n\t\t\tendY = 6;\n\t\t} else if (!asc && pos > 6) {\n\t\t\tstartY = 6;\n\t\t\tendY = 6;\n\t\t}\n\t}\n\n\treturn [startY, endY];\n}\n\nfunction createStems(elems, asc, beam, dy, mainNote) {\n\tfor (var i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tif (elem.abcelem.rest)\n\t\t\tcontinue;\n\t\t// TODO-PER: This is odd. If it is a regular beam then elems is an array of AbsoluteElements, if it is a grace beam then it is an array of objects , so we directly attach the element to the parent. We tell it if is a grace note because they are passed in as a generic object instead of an AbsoluteElement.\n\t\tvar isGrace = elem.addExtra ? false : true;\n\t\tvar parent = isGrace ? mainNote : elem;\n\t\tvar furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1];\n\t\tvar ovalDelta = 1 / 5;//(isGrace)?1/3:1/5;\n\t\tvar pitch = furthestHead.pitch + ((asc) ? ovalDelta : -ovalDelta);\n\t\tvar dx = asc ? furthestHead.w : 0; // down-pointing stems start on the left side of the note, up-pointing stems start on the right side, so we offset by the note width.\n\t\tif (!isGrace)\n\t\t\tdx += furthestHead.dx;\n\t\tvar x = furthestHead.x + dx; // this is now the actual x location in pixels.\n\t\tvar bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x);\n\t\tvar lineWidth = (asc) ? -0.6 : 0.6;\n\t\tif (!asc)\n\t\t\tbary -= (dy / 2) / spacing.STEP;\t// TODO-PER: This is just a fudge factor so the down-pointing stems don't overlap.\n\t\tif (isGrace)\n\t\t\tdx += elem.heads[0].dx;\n\t\t// TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated:\n\t\tif (furthestHead.c === 'noteheads.slash.quarter') {\n\t\t\tif (asc)\n\t\t\t\tpitch += 1;\n\t\t\telse\n\t\t\t\tpitch -= 1;\n\t\t}\n\t\tvar stem = new RelativeElement(null, dx, 0, pitch, {\n\t\t\t\"type\": \"stem\",\n\t\t\t\"pitch2\": bary,\n\t\t\tlinewidth: lineWidth\n\t\t});\n\t\tstem.setX(parent.x); // This is after the x coordinates were set, so we have to set it directly.\n\t\tparent.addRight(stem);\n\t}\n\n}\n\nfunction createAdditionalBeams(elems, asc, beam, isGrace, dy) {\n\tvar beams = [];\n\tvar auxBeams = []; // auxbeam will be {x, y, durlog, single} auxbeam[0] should match with durlog=-4 (16th) (j=-4-durlog)\n\tfor (var i = 0; i < elems.length; i++) {\n\t\tvar elem = elems[i];\n\t\tif (elem.abcelem.rest)\n\t\t\tcontinue;\n\t\tvar furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1];\n\t\tvar x = furthestHead.x + ((asc) ? furthestHead.w : 0);\n\t\tvar bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x);\n\n\t\tvar sy = (asc) ? -1.5 : 1.5;\n\t\tif (isGrace) sy = sy * 2 / 3; // This makes the second beam on grace notes closer to the first one.\n\t\tvar duration = elem.abcelem.duration; // get the duration via abcelem because of triplets\n\t\tif (duration === 0) duration = 0.25; // if this is stemless, then we use quarter note as the duration.\n\t\tfor (var durlog = getDurlog(duration); durlog < -3; durlog++) {\n\t\t\tvar index = -4 - durlog;\n\t\t\tif (auxBeams[index]) {\n\t\t\t\tauxBeams[index].single = false;\n\t\t\t} else {\n\t\t\t\tauxBeams[index] = {\n\t\t\t\t\tx: x + ((asc) ? -0.6 : 0), y: bary + sy * (index + 1),\n\t\t\t\t\tdurlog: durlog, single: true\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (i > 0 && elem.abcelem.beambr && elem.abcelem.beambr <= (index + 1)) {\n\t\t\t\tif (!auxBeams[index].split)\n\t\t\t\t\tauxBeams[index].split = [auxBeams[index].x];\n\t\t\t\tvar xPos = calcXPos(asc, elems[i - 1], elem);\n\t\t\t\tif (auxBeams[index].split[auxBeams[index].split.length - 1] >= xPos[0]) {\n\t\t\t\t\t// the reduction in beams leaves a note unattached so create a small flag for it.\n\t\t\t\t\txPos[0] += elem.w;\n\t\t\t\t}\n\t\t\t\tauxBeams[index].split.push(xPos[0]);\n\t\t\t\tauxBeams[index].split.push(xPos[1]);\n\t\t\t}\n\t\t}\n\n\t\tfor (var j = auxBeams.length - 1; j >= 0; j--) {\n\t\t\tif (i === elems.length - 1 || getDurlog(elems[i + 1].abcelem.duration) > (-j - 4)) {\n\n\t\t\t\tvar auxBeamEndX = x;\n\t\t\t\tvar auxBeamEndY = bary + sy * (j + 1);\n\n\n\t\t\t\tif (auxBeams[j].single) {\n\t\t\t\t\tauxBeamEndX = (i === 0) ? x + 5 : x - 5;\n\t\t\t\t\tauxBeamEndY = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, auxBeamEndX) + sy * (j + 1);\n\t\t\t\t}\n\t\t\t\tvar b = { startX: auxBeams[j].x, endX: auxBeamEndX, startY: auxBeams[j].y, endY: auxBeamEndY, dy: dy }\n\t\t\t\tif (auxBeams[j].split !== undefined) {\n\t\t\t\t\tvar split = auxBeams[j].split;\n\t\t\t\t\tif (b.endX <= split[split.length - 1]) {\n\t\t\t\t\t\t// the reduction in beams leaves the last note by itself, so create a little flag for it\n\t\t\t\t\t\tsplit[split.length - 1] -= elem.w;\n\t\t\t\t\t}\n\t\t\t\t\tsplit.push(b.endX);\n\t\t\t\t\tb.split = auxBeams[j].split;\n\t\t\t\t}\n\t\t\t\tbeams.push(b);\n\t\t\t\tauxBeams = auxBeams.slice(0, j);\n\t\t\t}\n\t\t}\n\t}\n\treturn beams;\n}\n\nmodule.exports = layoutBeam;\n","function getBarYAt(startx, starty, endx, endy, x) {\n\treturn starty + (endy - starty) / (endx - startx) * (x - startx);\n}\n\nmodule.exports = getBarYAt;\n\n","function getLeftEdgeOfStaff(renderer, getTextSize, voices, brace, bracket) {\n\tvar x = renderer.padding.left;\n\n\t// find out how much space will be taken up by voice headers\n\tvar voiceheaderw = 0;\n\tvar i;\n\tvar size;\n\tfor (i = 0; i < voices.length; i++) {\n\t\tif (voices[i].header) {\n\t\t\tsize = getTextSize.calc(voices[i].header, 'voicefont', '');\n\t\t\tvoiceheaderw = Math.max(voiceheaderw, size.width);\n\t\t}\n\t}\n\tvoiceheaderw = addBraceSize(voiceheaderw, brace, getTextSize);\n\tvoiceheaderw = addBraceSize(voiceheaderw, bracket, getTextSize);\n\n\tif (voiceheaderw) {\n\t\t// Give enough spacing to the right - we use the width of an A for the amount of spacing.\n\t\tvar sizeW = getTextSize.calc(\"A\", 'voicefont', '');\n\t\tvoiceheaderw += sizeW.width;\n\t}\n\tx += voiceheaderw;\n\n\tvar ofs = 0;\n\tofs = setBraceLocation(brace, x, ofs);\n\tofs = setBraceLocation(bracket, x, ofs);\n\treturn x + ofs;\n}\n\nfunction addBraceSize(voiceheaderw, brace, getTextSize) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tif (brace[i].header) {\n\t\t\t\tvar size = getTextSize.calc(brace[i].header, 'voicefont', '');\n\t\t\t\tvoiceheaderw = Math.max(voiceheaderw, size.width);\n\t\t\t}\n\t\t}\n\t}\n\treturn voiceheaderw;\n}\n\nfunction setBraceLocation(brace, x, ofs) {\n\tif (brace) {\n\t\tfor (var i = 0; i < brace.length; i++) {\n\t\t\tsetLocation(x, brace[i]);\n\t\t\tofs = Math.max(ofs, brace[i].getWidth());\n\t\t}\n\t}\n\treturn ofs;\n}\n\nfunction setLocation(x, element) {\n\telement.x = x;\n}\n\nmodule.exports = getLeftEdgeOfStaff;\n","var layoutVoice = require('./voice');\nvar setUpperAndLowerElements = require('./set-upper-and-lower-elements');\nvar layoutStaffGroup = require('./staff-group');\nvar getLeftEdgeOfStaff = require('./get-left-edge-of-staff');\n\nvar layout = function (renderer, abctune, width, space) {\n\tvar i;\n\tvar abcLine;\n\t// Adjust the x-coordinates to their absolute positions\n\tvar maxWidth = width;\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staff) {\n\t\t\tsetXSpacing(renderer, width, space, abcLine.staffGroup, abctune.formatting, i === abctune.lines.length - 1, false);\n\t\t\tif (abcLine.staffGroup.w > maxWidth) maxWidth = abcLine.staffGroup.w;\n\t\t}\n\t}\n\n\t// Layout the beams and add the stems to the beamed notes.\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staffGroup && abcLine.staffGroup.voices) {\n\t\t\tfor (var j = 0; j < abcLine.staffGroup.voices.length; j++)\n\t\t\t\tlayoutVoice(abcLine.staffGroup.voices[j]);\n\t\t\tsetUpperAndLowerElements(renderer, abcLine.staffGroup);\n\t\t}\n\t}\n\n\t// Set the staff spacing\n\t// TODO-PER: we should have been able to do this by the time we called setUpperAndLowerElements, but for some reason the \"bottom\" element seems to be set as a side effect of setting the X spacing.\n\tfor (i = 0; i < abctune.lines.length; i++) {\n\t\tabcLine = abctune.lines[i];\n\t\tif (abcLine.staffGroup) {\n\t\t\tabcLine.staffGroup.setHeight();\n\t\t}\n\t}\n\treturn maxWidth;\n}\n// Do the x-axis positioning for a single line (a group of related staffs)\nvar setXSpacing = function (renderer, width, space, staffGroup, formatting, isLastLine, debug) {\n\tvar leftEdge = getLeftEdgeOfStaff(renderer, staffGroup.getTextSize, staffGroup.voices, staffGroup.brace, staffGroup.bracket);\n\tvar newspace = space;\n\tfor (var it = 0; it < 8; it++) { // TODO-PER: shouldn't need multiple passes, but each pass gets it closer to the right spacing. (Only affects long lines: normal lines break out of this loop quickly.)\n\t\tvar ret = layoutStaffGroup(newspace, renderer, debug, staffGroup, leftEdge);\n\t\tnewspace = calcHorizontalSpacing(isLastLine, formatting.stretchlast, width + renderer.padding.left, staffGroup.w, newspace, ret.spacingUnits, ret.minSpace, renderer.padding.left + renderer.padding.right);\n\t\tif (debug)\n\t\t\tconsole.log(\"setXSpace\", it, staffGroup.w, newspace, staffGroup.minspace);\n\t\tif (newspace === null) break;\n\t}\n\tcenterWholeRests(staffGroup.voices);\n};\n\nfunction calcHorizontalSpacing(isLastLine, stretchLast, targetWidth, lineWidth, spacing, spacingUnits, minSpace, padding) {\n\tif (isLastLine) {\n\t\tif (stretchLast === undefined) {\n\t\t\tif (lineWidth / targetWidth < 0.66) return null; // keep this for backward compatibility. The break isn't quite the same for some reason.\n\t\t} else {\n\t\t\t// \"Stretch the last music line of a tune when it lacks less than the float fraction of the page width.\"\n\t\t\tvar lack = 1 - (lineWidth + padding) / targetWidth;\n\t\t\tvar stretch = lack < stretchLast;\n\t\t\tif (!stretch) return null; // don't stretch last line too much\n\t\t}\n\t}\n\tif (Math.abs(targetWidth - lineWidth) < 2) return null; // if we are already near the target width, we're done.\n\tvar relSpace = spacingUnits * spacing;\n\tvar constSpace = lineWidth - relSpace;\n\tif (spacingUnits > 0) {\n\t\tspacing = (targetWidth - constSpace) / spacingUnits;\n\t\tif (spacing * minSpace > 50) {\n\t\t\tspacing = 50 / minSpace;\n\t\t}\n\t\treturn spacing;\n\t}\n\treturn null;\n}\n\nfunction centerWholeRests(voices) {\n\t// whole rests are a special case: if they are by themselves in a measure, then they should be centered.\n\t// (If they are not by themselves, that is probably a user error, but we'll just center it between the two items to either side of it.)\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvar voice = voices[i];\n\t\t// Look through all of the elements except for the first and last. If the whole note appears there then there isn't anything to center it between anyway.\n\t\tfor (var j = 1; j < voice.children.length - 1; j++) {\n\t\t\tvar absElem = voice.children[j];\n\t\t\tif (absElem.abcelem.rest && (absElem.abcelem.rest.type === 'whole' || absElem.abcelem.rest.type === 'multimeasure')) {\n\t\t\t\tvar before = voice.children[j - 1];\n\t\t\t\tvar after = voice.children[j + 1];\n\t\t\t\tabsElem.center(before, after);\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = layout;\n","var spacing = require('../helpers/spacing');\n\nvar setUpperAndLowerElements = function (renderer, staffGroup) {\n\t// Each staff already has the top and bottom set, now we see if there are elements that are always on top and bottom, and resolve their pitch.\n\t// Also, get the overall height of all the staves in this group.\n\tvar lastStaffBottom;\n\tfor (var i = 0; i < staffGroup.staffs.length; i++) {\n\t\tvar staff = staffGroup.staffs[i];\n\t\t// the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric\n\t\t// the vertical order of elements that are below is: lyric, chord, volume/dynamic\n\t\tvar positionY = {\n\t\t\ttempoHeightAbove: 0,\n\t\t\tpartHeightAbove: 0,\n\t\t\tvolumeHeightAbove: 0,\n\t\t\tdynamicHeightAbove: 0,\n\t\t\tendingHeightAbove: 0,\n\t\t\tchordHeightAbove: 0,\n\t\t\tlyricHeightAbove: 0,\n\n\t\t\tlyricHeightBelow: 0,\n\t\t\tchordHeightBelow: 0,\n\t\t\tvolumeHeightBelow: 0,\n\t\t\tdynamicHeightBelow: 0\n\t\t};\n\n\t\tif (renderer.showDebug && renderer.showDebug.indexOf(\"box\") >= 0) {\n\t\t\tstaff.originalTop = staff.top; // This is just being stored for debugging purposes.\n\t\t\tstaff.originalBottom = staff.bottom; // This is just being stored for debugging purposes.\n\t\t}\n\n\t\tincTop(staff, positionY, 'lyricHeightAbove');\n\t\tincTop(staff, positionY, 'chordHeightAbove', staff.specialY.chordLines.above);\n\t\tif (staff.specialY.endingHeightAbove) {\n\t\t\tif (staff.specialY.chordHeightAbove)\n\t\t\t\tstaff.top += 2;\n\t\t\telse\n\t\t\t\tstaff.top += staff.specialY.endingHeightAbove + margin;\n\t\t\tpositionY.endingHeightAbove = staff.top;\n\t\t}\n\t\tif (staff.specialY.dynamicHeightAbove && staff.specialY.volumeHeightAbove) {\n\t\t\tstaff.top += Math.max(staff.specialY.dynamicHeightAbove, staff.specialY.volumeHeightAbove) + margin;\n\t\t\tpositionY.dynamicHeightAbove = staff.top;\n\t\t\tpositionY.volumeHeightAbove = staff.top;\n\t\t} else {\n\t\t\tincTop(staff, positionY, 'dynamicHeightAbove');\n\t\t\tincTop(staff, positionY, 'volumeHeightAbove');\n\t\t}\n\t\tincTop(staff, positionY, 'partHeightAbove');\n\t\tincTop(staff, positionY, 'tempoHeightAbove');\n\n\t\tif (staff.specialY.lyricHeightBelow) {\n\t\t\tstaff.specialY.lyricHeightBelow += renderer.spacing.vocal / spacing.STEP;\n\t\t\tpositionY.lyricHeightBelow = staff.bottom;\n\t\t\tstaff.bottom -= (staff.specialY.lyricHeightBelow + margin);\n\t\t}\n\t\tif (staff.specialY.chordHeightBelow) {\n\t\t\tpositionY.chordHeightBelow = staff.bottom;\n\t\t\tvar hgt = staff.specialY.chordHeightBelow;\n\t\t\tif (staff.specialY.chordLines.below)\n\t\t\t\thgt *= staff.specialY.chordLines.below;\n\t\t\tstaff.bottom -= (hgt + margin);\n\t\t}\n\t\tif (staff.specialY.volumeHeightBelow && staff.specialY.dynamicHeightBelow) {\n\t\t\tpositionY.volumeHeightBelow = staff.bottom;\n\t\t\tpositionY.dynamicHeightBelow = staff.bottom;\n\t\t\tstaff.bottom -= (Math.max(staff.specialY.volumeHeightBelow, staff.specialY.dynamicHeightBelow) + margin);\n\t\t} else if (staff.specialY.volumeHeightBelow) {\n\t\t\tpositionY.volumeHeightBelow = staff.bottom; staff.bottom -= (staff.specialY.volumeHeightBelow + margin);\n\t\t} else if (staff.specialY.dynamicHeightBelow) {\n\t\t\tpositionY.dynamicHeightBelow = staff.bottom; staff.bottom -= (staff.specialY.dynamicHeightBelow + margin);\n\t\t}\n\n\t\tif (renderer.showDebug && renderer.showDebug.indexOf(\"box\") >= 0)\n\t\t\tstaff.positionY = positionY; // This is just being stored for debugging purposes.\n\n\t\tfor (var j = 0; j < staff.voices.length; j++) {\n\t\t\tvar voice = staffGroup.voices[staff.voices[j]];\n\t\t\tsetUpperAndLowerVoiceElements(positionY, voice, renderer.spacing);\n\t\t}\n\t\t// We might need a little space in between staves if the staves haven't been pushed far enough apart by notes or extra vertical stuff.\n\t\t// Only try to put in extra space if this isn't the top staff.\n\t\tif (lastStaffBottom !== undefined) {\n\t\t\tvar thisStaffTop = staff.top - 10;\n\t\t\tvar forcedSpacingBetween = lastStaffBottom + thisStaffTop;\n\t\t\tvar minSpacingInPitches = renderer.spacing.systemStaffSeparation / spacing.STEP;\n\t\t\tvar addedSpace = minSpacingInPitches - forcedSpacingBetween;\n\t\t\tif (addedSpace > 0)\n\t\t\t\tstaff.top += addedSpace;\n\t\t}\n\t\tlastStaffBottom = 2 - staff.bottom; // the staff starts at position 2 and the bottom variable is negative. Therefore to find out how large the bottom is, we reverse the sign of the bottom, and add the 2 in.\n\n\t\t// Now we need a little margin on the top, so we'll just throw that in.\n\t\t//staff.top += 4;\n\t\t//console.log(\"Staff Y: \",i,heightInPitches,staff.top,staff.bottom);\n\t}\n\t//console.log(\"Staff Height: \",heightInPitches,this.height);\n};\n\nvar margin = 1;\nfunction incTop(staff, positionY, item, count) {\n\tif (staff.specialY[item]) {\n\t\tvar height = staff.specialY[item];\n\t\tif (count)\n\t\t\theight *= count;\n\t\tstaff.top += height + margin;\n\t\tpositionY[item] = staff.top;\n\t}\n}\n\nfunction setUpperAndLowerVoiceElements(positionY, voice, spacing) {\n\tvar i;\n\tvar abselem;\n\tfor (i = 0; i < voice.children.length; i++) {\n\t\tabselem = voice.children[i];\n\t\tsetUpperAndLowerAbsoluteElements(positionY, abselem, spacing);\n\t}\n\tfor (i = 0; i < voice.otherchildren.length; i++) {\n\t\tabselem = voice.otherchildren[i];\n\t\tswitch (abselem.type) {\n\t\t\tcase 'CrescendoElem':\n\t\t\t\tsetUpperAndLowerCrescendoElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t\tcase 'DynamicDecoration':\n\t\t\t\tsetUpperAndLowerDynamicElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t\tcase 'EndingElem':\n\t\t\t\tsetUpperAndLowerEndingElements(positionY, abselem);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// For each of the relative elements that can't be placed in advance (because their vertical placement depends on everything\n// else on the line), this iterates through them and sets their pitch. By the time this is called, specialYResolved contains a\n// hash with the vertical placement (in pitch units) for each type.\n// TODO-PER: I think this needs to be separated by \"above\" and \"below\". How do we know that for dynamics at the point where they are being defined, though? We need a pass through all the relative elements to set \"above\" and \"below\".\nfunction setUpperAndLowerAbsoluteElements(specialYResolved, element, spacing) {\n\t// specialYResolved contains the actual pitch for each of the classes of elements.\n\tfor (var i = 0; i < element.children.length; i++) {\n\t\tvar child = element.children[i];\n\t\tfor (var key in element.specialY) { // for each class of element that needs to be placed vertically\n\t\t\tif (element.specialY.hasOwnProperty(key)) {\n\t\t\t\tif (child[key]) { // If this relative element has defined a height for this class of element\n\t\t\t\t\tchild.pitch = specialYResolved[key];\n\t\t\t\t\tif (child.top === undefined) { // TODO-PER: HACK! Not sure this is the right place to do this.\n\t\t\t\t\t\tif (child.type === 'TempoElement') {\n\t\t\t\t\t\t\tsetUpperAndLowerTempoElement(specialYResolved, child);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetUpperAndLowerRelativeElements(specialYResolved, child, spacing);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.pushTop(child.top);\n\t\t\t\t\t\telement.pushBottom(child.bottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction setUpperAndLowerCrescendoElements(positionY, element) {\n\tif (element.dynamicHeightAbove)\n\t\telement.pitch = positionY.dynamicHeightAbove;\n\telse\n\t\telement.pitch = positionY.dynamicHeightBelow;\n}\n\nfunction setUpperAndLowerDynamicElements(positionY, element) {\n\tif (element.volumeHeightAbove)\n\t\telement.pitch = positionY.volumeHeightAbove;\n\telse\n\t\telement.pitch = positionY.volumeHeightBelow;\n}\n\nfunction setUpperAndLowerEndingElements(positionY, element) {\n\telement.pitch = positionY.endingHeightAbove - 2;\n}\n\nfunction setUpperAndLowerTempoElement(positionY, element) {\n\telement.pitch = positionY.tempoHeightAbove;\n\telement.top = positionY.tempoHeightAbove;\n\telement.bottom = positionY.tempoHeightAbove;\n\tif (element.note) {\n\t\tvar tempoPitch = element.pitch - element.totalHeightInPitches + 1; // The pitch we receive is the top of the allotted area: change that to practically the bottom.\n\t\telement.note.top = tempoPitch;\n\t\telement.note.bottom = tempoPitch;\n\t\tfor (var i = 0; i < element.note.children.length; i++) {\n\t\t\tvar child = element.note.children[i];\n\t\t\tchild.top += tempoPitch;\n\t\t\tchild.bottom += tempoPitch;\n\t\t\tchild.pitch += tempoPitch;\n\t\t\tif (child.pitch2 !== undefined)\n\t\t\t\tchild.pitch2 += tempoPitch;\n\t\t}\n\t}\n}\n\nfunction setUpperAndLowerRelativeElements(positionY, element, renderSpacing) {\n\tswitch (element.type) {\n\t\tcase \"part\":\n\t\t\telement.top = positionY.partHeightAbove + element.height;\n\t\t\telement.bottom = positionY.partHeightAbove;\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\tcase \"chord\":\n\t\t\tif (element.chordHeightAbove) {\n\t\t\t\telement.top = positionY.chordHeightAbove;\n\t\t\t\telement.bottom = positionY.chordHeightAbove;\n\t\t\t} else {\n\t\t\t\telement.top = positionY.chordHeightBelow;\n\t\t\t\telement.bottom = positionY.chordHeightBelow;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"lyric\":\n\t\t\tif (element.lyricHeightAbove) {\n\t\t\t\telement.top = positionY.lyricHeightAbove;\n\t\t\t\telement.bottom = positionY.lyricHeightAbove;\n\t\t\t} else {\n\t\t\t\telement.top = positionY.lyricHeightBelow + renderSpacing.vocal / spacing.STEP;\n\t\t\t\telement.bottom = positionY.lyricHeightBelow + renderSpacing.vocal / spacing.STEP;\n\t\t\t\telement.pitch -= renderSpacing.vocal / spacing.STEP;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"debug\":\n\t\t\telement.top = positionY.chordHeightAbove;\n\t\t\telement.bottom = positionY.chordHeightAbove;\n\t\t\tbreak;\n\t}\n\tif (element.pitch === undefined || element.top === undefined)\n\t\tconsole.error(\"RelativeElement position not set.\", element.type, element.pitch, element.top, positionY);\n}\n\nmodule.exports = setUpperAndLowerElements;\n","var layoutVoiceElements = require('./voice-elements');\n\nfunction checkLastBarX(voices) {\n\tvar maxX = 0;\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tvar curVoice = voices[i];\n\t\tif (curVoice.children.length > 0) {\n\t\t\tvar lastChild = curVoice.children.length - 1;\n\t\t\tvar maxChild = curVoice.children[lastChild];\n\t\t\tif (maxChild.abcelem.el_type === 'bar') {\n\t\t\t\tvar barX = maxChild.children[0].x;\n\t\t\t\tif (barX > maxX) {\n\t\t\t\t\tmaxX = barX;\n\t\t\t\t} else {\n\t\t\t\t\tmaxChild.children[0].x = maxX;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar layoutStaffGroup = function (spacing, renderer, debug, staffGroup, leftEdge) {\n\tvar epsilon = 0.0000001; // Fudging for inexactness of floating point math.\n\tvar spacingunits = 0; // number of times we will have ended up using the spacing distance (as opposed to fixed width distances)\n\tvar minspace = 1000; // a big number to start off with - used to find out what the smallest space between two notes is -- GD 2014.1.7\n\n\tvar x = leftEdge;\n\tstaffGroup.startx = x;\n\tvar i;\n\n\tvar currentduration = 0;\n\tif (debug) console.log(\"init layout\", spacing);\n\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\tlayoutVoiceElements.beginLayout(x, staffGroup.voices[i]);\n\t}\n\n\tvar spacingunit = 0; // number of spacingunits coming from the previously laid out element to this one\n\twhile (!finished(staffGroup.voices)) {\n\t\t// find first duration level to be laid out among candidates across voices\n\t\tcurrentduration = null; // candidate smallest duration level\n\t\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\t\tif (!layoutVoiceElements.layoutEnded(staffGroup.voices[i]) && (!currentduration || getDurationIndex(staffGroup.voices[i]) < currentduration))\n\t\t\t\tcurrentduration = getDurationIndex(staffGroup.voices[i]);\n\t\t}\n\n\n\t\t// isolate voices at current duration level\n\t\tvar currentvoices = [];\n\t\tvar othervoices = [];\n\t\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\t\tvar durationIndex = getDurationIndex(staffGroup.voices[i]);\n\t\t\t// PER: Because of the inexactness of JS floating point math, we just get close.\n\t\t\tif (durationIndex - currentduration > epsilon) {\n\t\t\t\tothervoices.push(staffGroup.voices[i]);\n\t\t\t\t//console.log(\"out: voice \",i);\n\t\t\t} else {\n\t\t\t\tcurrentvoices.push(staffGroup.voices[i]);\n\t\t\t\t//if (debug) console.log(\"in: voice \",i);\n\t\t\t}\n\t\t}\n\n\t\t// among the current duration level find the one which needs starting furthest right\n\t\tspacingunit = 0; // number of spacingunits coming from the previously laid out element to this one\n\t\tvar spacingduration = 0;\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\t//console.log(\"greatest spacing unit\", x, layoutVoiceElements.getNextX(currentvoices[i]), layoutVoiceElements.getSpacingUnits(currentvoices[i]), currentvoices[i].spacingduration);\n\t\t\tif (layoutVoiceElements.getNextX(currentvoices[i]) > x) {\n\t\t\t\tx = layoutVoiceElements.getNextX(currentvoices[i]);\n\t\t\t\tspacingunit = layoutVoiceElements.getSpacingUnits(currentvoices[i]);\n\t\t\t\tspacingduration = currentvoices[i].spacingduration;\n\t\t\t}\n\t\t}\n\t\tspacingunits += spacingunit;\n\t\tminspace = Math.min(minspace, spacingunit);\n\t\tif (debug) console.log(\"currentduration: \", currentduration, spacingunits, minspace);\n\n\t\tvar lastTopVoice = undefined;\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\tvar v = currentvoices[i];\n\t\t\tif (v.voicenumber === 0)\n\t\t\t\tlastTopVoice = i;\n\t\t\tvar topVoice = (lastTopVoice !== undefined && currentvoices[lastTopVoice].voicenumber !== v.voicenumber) ? currentvoices[lastTopVoice] : undefined;\n\t\t\tif (!isSameStaff(v, topVoice))\n\t\t\t\ttopVoice = undefined;\n\t\t\tvar voicechildx = layoutVoiceElements.layoutOneItem(x, spacing, v, renderer.minPadding, topVoice);\n\t\t\tvar dx = voicechildx - x;\n\t\t\tif (dx > 0) {\n\t\t\t\tx = voicechildx; //update x\n\t\t\t\tfor (var j = 0; j < i; j++) { // shift over all previously laid out elements\n\t\t\t\t\tlayoutVoiceElements.shiftRight(dx, currentvoices[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// remove the value of already counted spacing units in other voices (e.g. if a voice had planned to use up 5 spacing units but is not in line to be laid out at this duration level - where we've used 2 spacing units - then we must use up 3 spacing units, not 5)\n\t\tfor (i = 0; i < othervoices.length; i++) {\n\t\t\tothervoices[i].spacingduration -= spacingduration;\n\t\t\tlayoutVoiceElements.updateNextX(x, spacing, othervoices[i]); // adjust other voices expectations\n\t\t}\n\n\t\t// update indexes of currently laid out elems\n\t\tfor (i = 0; i < currentvoices.length; i++) {\n\t\t\tvar voice = currentvoices[i];\n\t\t\tlayoutVoiceElements.updateIndices(voice);\n\t\t}\n\t} // finished laying out\n\n\n\t// find the greatest remaining x as a base for the width\n\tfor (i = 0; i < staffGroup.voices.length; i++) {\n\t\tif (layoutVoiceElements.getNextX(staffGroup.voices[i]) > x) {\n\t\t\tx = layoutVoiceElements.getNextX(staffGroup.voices[i]);\n\t\t\tspacingunit = layoutVoiceElements.getSpacingUnits(staffGroup.voices[i]);\n\t\t}\n\t}\n\n\t// adjust lastBar when needed (multi staves)\n\tcheckLastBarX(staffGroup.voices);\n\t//console.log(\"greatest remaining\",spacingunit,x);\n\tspacingunits += spacingunit;\n\tstaffGroup.setWidth(x);\n\n\treturn { spacingUnits: spacingunits, minSpace: minspace };\n};\n\n\nfunction finished(voices) {\n\tfor (var i = 0; i < voices.length; i++) {\n\t\tif (!layoutVoiceElements.layoutEnded(voices[i])) return false;\n\t}\n\treturn true;\n}\n\nfunction getDurationIndex(element) {\n\treturn element.durationindex - (element.children[element.i] && (element.children[element.i].duration > 0) ? 0 : 0.0000005); // if the ith element doesn't have a duration (is not a note), its duration index is fractionally before. This enables CLEF KEYSIG TIMESIG PART, etc. to be laid out before we get to the first note of other voices\n}\n\nfunction isSameStaff(voice1, voice2) {\n\tif (!voice1 || !voice1.staff || !voice1.staff.voices || voice1.staff.voices.length === 0)\n\t\treturn false;\n\tif (!voice2 || !voice2.staff || !voice2.staff.voices || voice2.staff.voices.length === 0)\n\t\treturn false;\n\treturn (voice1.staff.voices[0] === voice2.staff.voices[0]);\n}\n\nmodule.exports = layoutStaffGroup;\n","var getBarYAt = require('./get-bar-y-at');\n\nfunction layoutTriplet(element) {\n\t// TODO end and beginning of line (PER: P.S. I'm not sure this can happen: I think the parser will always specify both the start and end points.)\n\tif (element.anchor1 && element.anchor2) {\n\t\telement.hasBeam = !!element.anchor1.parent.beam && element.anchor1.parent.beam === element.anchor2.parent.beam;\n\t\tvar beam = element.anchor1.parent.beam;\n\t\t// if hasBeam is true, then the first and last element in the triplet have the same beam.\n\t\t// We also need to check if the beam doesn't contain other notes so that `(3 dcdcc` will do a bracket.\n\t\tif (element.hasBeam && (beam.elems[0] !== element.anchor1.parent || beam.elems[beam.elems.length - 1] !== element.anchor2.parent))\n\t\t\telement.hasBeam = false;\n\n\t\tif (element.hasBeam) {\n\t\t\t// If there is a beam then we don't need to draw anything except the text. The beam could either be above or below.\n\t\t\tvar left = isAbove(beam) ? element.anchor1.x + element.anchor1.w : element.anchor1.x;\n\t\t\telement.yTextPos = heightAtMidpoint(left, element.anchor2.x, beam);\n\t\t\telement.yTextPos += isAbove(beam) ? 3 : -2; // This creates some space between the beam and the number.\n\t\t\telement.xTextPos = xAtMidpoint(left, element.anchor2.x);\n\t\t\telement.top = element.yTextPos + 1;\n\t\t\telement.bottom = element.yTextPos - 2;\n\t\t\tif (isAbove(beam))\n\t\t\t\telement.endingHeightAbove = 4;\n\t\t} else {\n\t\t\t// If there isn't a beam, then we need to draw the bracket and the text. The bracket is always above.\n\t\t\t// The bracket is never lower than the 'a' line, but is 4 pitches above the first and last notes. If there is\n\t\t\t// a tall note in the middle, the bracket is horizontal and above the highest note.\n\t\t\telement.startNote = Math.max(element.anchor1.parent.top, 9) + 4;\n\t\t\telement.endNote = Math.max(element.anchor2.parent.top, 9) + 4;\n\t\t\t// If it starts or ends on a rest, make the beam horizontal\n\t\t\tif (element.anchor1.parent.type === \"rest\" && element.anchor2.parent.type !== \"rest\")\n\t\t\t\telement.startNote = element.endNote;\n\t\t\telse if (element.anchor2.parent.type === \"rest\" && element.anchor1.parent.type !== \"rest\")\n\t\t\t\telement.endNote = element.startNote;\n\t\t\t// See if the middle note is really high.\n\t\t\tvar max = 0;\n\t\t\tfor (var i = 0; i < element.middleElems.length; i++) {\n\t\t\t\tmax = Math.max(max, element.middleElems[i].top);\n\t\t\t}\n\t\t\tmax += 4;\n\t\t\tif (max > element.startNote || max > element.endNote) {\n\t\t\t\telement.startNote = max;\n\t\t\t\telement.endNote = max;\n\t\t\t}\n\t\t\tif (element.flatBeams) {\n\t\t\t\telement.startNote = Math.max(element.startNote, element.endNote);\n\t\t\t\telement.endNote = Math.max(element.startNote, element.endNote);\n\t\t\t}\n\n\t\t\telement.yTextPos = element.startNote + (element.endNote - element.startNote) / 2;\n\t\t\telement.xTextPos = element.anchor1.x + (element.anchor2.x + element.anchor2.w - element.anchor1.x) / 2;\n\t\t\telement.top = element.yTextPos + 1;\n\t\t}\n\t}\n\tdelete element.middleElems;\n\tdelete element.flatBeams;\n}\n\nfunction isAbove(beam) {\n\treturn beam.stemsUp;\n}\n\n// We can't just use the entire beam for the calculation. The range has to be passed in, because the beam might extend into some unrelated notes. for instance, (3_a'f'e'f'2 when L:16\nfunction heightAtMidpoint(startX, endX, beam) {\n\tif (beam.beams.length === 0)\n\t\treturn 0;\n\tbeam = beam.beams[0];\n\tvar midPoint = startX + (endX - startX) / 2;\n\treturn getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, midPoint);\n}\n\nfunction xAtMidpoint(startX, endX) {\n\treturn startX + (endX - startX) / 2;\n}\n\nmodule.exports = layoutTriplet;\n","var VoiceElement = function VoiceElements() { }\n\nVoiceElement.beginLayout = function (startx, voice) {\n\tvoice.i = 0;\n\tvoice.durationindex = 0;\n\t//this.ii=this.children.length;\n\tvoice.startx = startx;\n\tvoice.minx = startx; // furthest left to where negatively positioned elements are allowed to go\n\tvoice.nextx = startx; // x position where the next element of this voice should be placed assuming no other voices and no fixed width constraints\n\tvoice.spacingduration = 0; // duration left to be laid out in current iteration (omitting additional spacing due to other aspects, such as bars, dots, sharps and flats)\n};\n\nVoiceElement.layoutEnded = function (voice) {\n\treturn (voice.i >= voice.children.length);\n};\n\nVoiceElement.getNextX = function (voice) {\n\treturn Math.max(voice.minx, voice.nextx);\n};\n\n// number of spacing units expected for next positioning\nVoiceElement.getSpacingUnits = function (voice) {\n\treturn Math.sqrt(voice.spacingduration * 8);\n};\n\n// Try to layout the element at index this.i\n// x - position to try to layout the element at\n// spacing - base spacing\n// can't call this function more than once per iteration\nVoiceElement.layoutOneItem = function (x, spacing, voice, minPadding, firstVoice) {\n\tvar child = voice.children[voice.i];\n\tif (!child) return 0;\n\tvar er = x - voice.minx; // available extrawidth to the left\n\tvar pad = voice.durationindex + child.duration > 0 ? minPadding : 0; // only add padding to the items that aren't fixed to the left edge.\n\t// See if this item overlaps the item in the first voice. If firstVoice is undefined then there's nothing to compare.\n\tif (child.abcelem.el_type === \"note\" && !child.abcelem.rest && voice.voicenumber !== 0 && firstVoice) {\n\t\tvar firstChild = firstVoice.children[firstVoice.i];\n\t\t// It overlaps if the either the child's top or bottom is inside the firstChild's or at least within 1\n\t\t// A special case is if the element is on the same line then it can share a note head, if the notehead is the same\n\t\tvar overlaps = firstChild &&\n\t\t\t((child.abcelem.maxpitch <= firstChild.abcelem.maxpitch + 1 && child.abcelem.maxpitch >= firstChild.abcelem.minpitch - 1) ||\n\t\t\t\t(child.abcelem.minpitch <= firstChild.abcelem.maxpitch + 1 && child.abcelem.minpitch >= firstChild.abcelem.minpitch - 1))\n\t\t// See if they can share a note head\n\t\tif (overlaps && child.abcelem.minpitch === firstChild.abcelem.minpitch && child.abcelem.maxpitch === firstChild.abcelem.maxpitch &&\n\t\t\tfirstChild.heads && firstChild.heads.length > 0 && child.heads && child.heads.length > 0 &&\n\t\t\tfirstChild.heads[0].c === child.heads[0].c)\n\t\t\toverlaps = false;\n\t\t// If this note overlaps the note in the first voice and we haven't moved the note yet (this can be called multiple times)\n\t\tif (overlaps) {\n\t\t\t// I think that firstChild should always have at least one note head, but defensively make sure.\n\t\t\t// There was a problem with this being called more than once so if a value is adjusted then it is saved so it is only adjusted once.\n\t\t\tvar firstChildNoteWidth = firstChild.heads && firstChild.heads.length > 0 ? firstChild.heads[0].realWidth : firstChild.fixed.w;\n\t\t\tif (!child.adjustedWidth)\n\t\t\t\tchild.adjustedWidth = firstChildNoteWidth + child.w;\n\t\t\tchild.w = child.adjustedWidth\n\t\t\tfor (var j = 0; j < child.children.length; j++) {\n\t\t\t\tvar relativeChild = child.children[j];\n\t\t\t\tif (relativeChild.name.indexOf(\"accidental\") < 0) {\n\t\t\t\t\tif (!relativeChild.adjustedWidth)\n\t\t\t\t\t\trelativeChild.adjustedWidth = relativeChild.dx + firstChildNoteWidth;\n\t\t\t\t\trelativeChild.dx = relativeChild.adjustedWidth\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\tvar extraWidth = getExtraWidth(child, pad);\n\tif (er < extraWidth) { // shift right by needed amount\n\t\t// There's an exception if a bar element is after a Part element, there is no shift.\n\t\tif (voice.i === 0 || child.type !== 'bar' || (voice.children[voice.i - 1].type !== 'part' && voice.children[voice.i - 1].type !== 'tempo'))\n\t\t\tx += extraWidth - er;\n\t}\n\tchild.setX(x);\n\n\tvoice.spacingduration = child.duration;\n\t//update minx\n\tvoice.minx = x + getMinWidth(child); // add necessary layout space\n\tif (voice.i !== voice.children.length - 1) voice.minx += child.minspacing; // add minimumspacing except on last elem\n\n\tthis.updateNextX(x, spacing, voice);\n\n\t// contribute to staff y position\n\t//this.staff.top = Math.max(child.top,this.staff.top);\n\t//this.staff.bottom = Math.min(child.bottom,this.staff.bottom);\n\n\treturn x; // where we end up having placed the child\n};\n\nVoiceElement.shiftRight = function (dx, voice) {\n\tvar child = voice.children[voice.i];\n\tif (!child) return;\n\tchild.setX(child.x + dx);\n\tvoice.minx += dx;\n\tvoice.nextx += dx;\n};\n\n// call when spacingduration has been updated\nVoiceElement.updateNextX = function (x, spacing, voice) {\n\tvoice.nextx = x + (spacing * Math.sqrt(voice.spacingduration * 8));\n};\n\nVoiceElement.updateIndices = function (voice) {\n\tif (!this.layoutEnded(voice)) {\n\t\tvoice.durationindex += voice.children[voice.i].duration;\n\t\tif (voice.children[voice.i].type === 'bar') voice.durationindex = Math.round(voice.durationindex * 64) / 64; // everytime we meet a barline, do rounding to nearest 64th\n\t\tvoice.i++;\n\t}\n};\n\nfunction getExtraWidth(child, minPadding) { // space needed to the left of the note\n\tvar padding = 0;\n\tif (child.type === 'note' || child.type === 'bar')\n\t\tpadding = minPadding;\n\treturn -child.extraw + padding;\n}\n\nfunction getMinWidth(child) { // absolute space taken to the right of the note\n\treturn child.w;\n}\n\nmodule.exports = VoiceElement;\n","var layoutBeam = require('./beam');\nvar getBarYAt = require('./get-bar-y-at');\nvar layoutTriplet = require('./triplet');\n\nvar layoutVoice = function (voice) {\n\tfor (var i = 0; i < voice.beams.length; i++) {\n\t\tif (voice.beams[i].type === 'BeamElem') {\n\t\t\tlayoutBeam(voice.beams[i]);\n\t\t\tmoveDecorations(voice.beams[i]);\n\t\t\t// The above will change the top and bottom of the abselem children, so see if we need to expand our range.\n\t\t\tfor (var j = 0; j < voice.beams[i].elems.length; j++) {\n\t\t\t\tvoice.adjustRange(voice.beams[i].elems[j]);\n\t\t\t}\n\t\t}\n\t}\n\tvoice.staff.specialY.chordLines = setLaneForChord(voice.children);\n\n\t// Now we can layout the triplets\n\tfor (i = 0; i < voice.otherchildren.length; i++) {\n\t\tvar child = voice.otherchildren[i];\n\t\tif (child.type === 'TripletElem') {\n\t\t\tlayoutTriplet(child);\n\t\t\tvoice.adjustRange(child);\n\t\t}\n\t}\n\tvoice.staff.top = Math.max(voice.staff.top, voice.top);\n\tvoice.staff.bottom = Math.min(voice.staff.bottom, voice.bottom);\n};\n\nfunction moveDecorations(beam) {\n\tvar padding = 1.5; // This is the vertical padding between elements, in pitches.\n\tfor (var ch = 0; ch < beam.elems.length; ch++) {\n\t\tvar child = beam.elems[ch];\n\t\tif (child.top) {\n\t\t\t// We now know where the ornaments should have been placed, so move them if they would overlap.\n\t\t\tvar top = yAtNote(child, beam);\n\t\t\tfor (var i = 0; i < child.children.length; i++) {\n\t\t\t\tvar el = child.children[i];\n\t\t\t\tif (el.klass === 'ornament') {\n\t\t\t\t\tif (el.bottom - padding < top) {\n\t\t\t\t\t\tvar distance = top - el.bottom + padding; // Find the distance that it needs to move and add a little margin so the element doesn't touch the beam.\n\t\t\t\t\t\tel.bottom += distance;\n\t\t\t\t\t\tel.top += distance;\n\t\t\t\t\t\tel.pitch += distance;\n\t\t\t\t\t\ttop = child.top = el.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction placeInLane(rightMost, relElem) {\n\t// These items are centered so figure the coordinates accordingly.\n\t// The font reports some extra space so the margin is built in.\n\tvar xCoords = relElem.getChordDim();\n\tif (xCoords) {\n\t\tfor (var i = 0; i < rightMost.length; i++) {\n\t\t\tvar fits = rightMost[i] < xCoords.left;\n\t\t\tif (fits) {\n\t\t\t\tif (i > 0)\n\t\t\t\t\trelElem.putChordInLane(i);\n\t\t\t\trightMost[i] = xCoords.right;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// If we didn't return early, then we need a new row\n\t\trightMost.push(xCoords.right);\n\t\trelElem.putChordInLane(rightMost.length - 1);\n\t}\n}\n\nfunction setLaneForChord(absElems) {\n\t// Criteria:\n\t// 1) lane numbers start from the bottom so that as many items as possible are in lane 0, closest to the music.\n\t// 2) a chord can have more than one line (for instance \"C\\nD\") each line is a lane.\n\t// 3) if two adjoining items would touch then push the second one to the next lane.\n\t// 4) use as many lanes as is necessary to get everything to not touch.\n\t// 5) leave a margin between items, so use another lane if the chords would have less than a character's width.\n\t// 6) if the chord only has one character, allow it to be closer than if the chord has more than one character.\n\tvar rightMostAbove = [0];\n\tvar rightMostBelow = [0];\n\tvar i;\n\tvar j;\n\tvar relElem;\n\tfor (i = 0; i < absElems.length; i++) {\n\t\tfor (j = 0; j < absElems[i].children.length; j++) {\n\t\t\trelElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightAbove) {\n\t\t\t\tplaceInLane(rightMostAbove, relElem);\n\t\t\t}\n\t\t}\n\t\tfor (j = absElems[i].children.length - 1; j >= 0; j--) {\n\t\t\trelElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightBelow) {\n\t\t\t\tplaceInLane(rightMostBelow, relElem);\n\t\t\t}\n\t\t}\n\t}\n\t// If we used a second line, then we need to go back and set the first lines.\n\t// Also we need to flip the indexes of the names so that we can count from the top line.\n\tif (rightMostAbove.length > 1 || rightMostBelow.length > 1)\n\t\tsetLane(absElems, rightMostAbove.length, rightMostBelow.length);\n\treturn { above: rightMostAbove.length, below: rightMostBelow.length };\n}\n\nfunction numAnnotationsBelow(absElem) {\n\tvar count = 0;\n\tfor (var j = 0; j < absElem.children.length; j++) {\n\t\tvar relElem = absElem.children[j];\n\t\tif (relElem.chordHeightBelow)\n\t\t\tcount++;\n\t}\n\treturn count;\n}\n\nfunction setLane(absElems, numLanesAbove, numLanesBelow) {\n\tfor (var i = 0; i < absElems.length; i++) {\n\t\tvar below = numAnnotationsBelow(absElems[i]);\n\t\tfor (var j = 0; j < absElems[i].children.length; j++) {\n\t\t\tvar relElem = absElems[i].children[j];\n\t\t\tif (relElem.chordHeightAbove) {\n\t\t\t\trelElem.invertLane(numLanesAbove);\n\t\t\t\t// } else if (relElem.chordHeightBelow) {\n\t\t\t\t// \trelElem.invertLane(below);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction yAtNote(element, beam) {\n\tbeam = beam.beams[0];\n\treturn getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, element.x);\n}\n\n\nmodule.exports = layoutVoice;\n","// abc_renderer.js: API to render to SVG/Raphael/whatever rendering engine\n\n/*global Math */\n\nvar spacing = require('./helpers/spacing');\nvar Svg = require('./svg');\n\n/**\n * Implements the API for rendering ABCJS Abstract Rendering Structure to a canvas/paper (e.g. SVG, Raphael, etc)\n * @param {Object} paper\n */\nvar Renderer = function (paper) {\n\tthis.paper = new Svg(paper);\n\tthis.controller = null;\n\n\tthis.space = 3 * spacing.SPACE;\n\tthis.padding = {}; // renderer's padding is managed by the controller\n\tthis.reset();\n\tthis.firefox112 = navigator.userAgent.indexOf('Firefox/112.0') >= 0\n};\n\nRenderer.prototype.reset = function () {\n\n\tthis.paper.clear();\n\tthis.y = 0;\n\tthis.abctune = null;\n\tthis.path = null;\n\tthis.isPrint = false;\n\tthis.lineThickness = 0;\n\tthis.initVerticalSpace();\n};\n\nRenderer.prototype.newTune = function (abcTune) {\n\tthis.abctune = abcTune; // TODO-PER: this is just to get the font info.\n\tthis.setVerticalSpace(abcTune.formatting);\n\t//this.measureNumber = null;\n\t//this.noteNumber = null;\n\tthis.isPrint = abcTune.media === 'print';\n\tthis.setPadding(abcTune);\n};\n\nRenderer.prototype.setLineThickness = function (lineThickness) {\n\tthis.lineThickness = lineThickness\n};\n\nRenderer.prototype.setPaddingOverride = function (params) {\n\tthis.paddingOverride = {\n\t\ttop: params.paddingtop, bottom: params.paddingbottom,\n\t\tright: params.paddingright, left: params.paddingleft\n\t};\n};\n\nRenderer.prototype.setPadding = function (abctune) {\n\t// If the padding is set in the tune, then use that.\n\t// Otherwise, if the padding is set in the override, use that.\n\t// Otherwise, use the defaults (there are a different set of defaults for screen and print.)\n\tfunction setPaddingVariable(self, paddingKey, formattingKey, printDefault, screenDefault) {\n\t\tif (abctune.formatting[formattingKey] !== undefined)\n\t\t\tself.padding[paddingKey] = abctune.formatting[formattingKey];\n\t\telse if (self.paddingOverride[paddingKey] !== undefined)\n\t\t\tself.padding[paddingKey] = self.paddingOverride[paddingKey];\n\t\telse if (self.isPrint)\n\t\t\tself.padding[paddingKey] = printDefault;\n\t\telse\n\t\t\tself.padding[paddingKey] = screenDefault;\n\t}\n\t// 1cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 38px\n\t// 1.8cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 68px\n\tsetPaddingVariable(this, 'top', 'topmargin', 38, 15);\n\tsetPaddingVariable(this, 'bottom', 'botmargin', 38, 15);\n\tsetPaddingVariable(this, 'left', 'leftmargin', 68, 15);\n\tsetPaddingVariable(this, 'right', 'rightmargin', 68, 15);\n};\n\n/**\n * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling.\n * @param {float} scale\n */\nRenderer.prototype.adjustNonScaledItems = function (scale) {\n\tthis.padding.top /= scale;\n\tthis.padding.bottom /= scale;\n\tthis.padding.left /= scale;\n\tthis.padding.right /= scale;\n\tthis.abctune.formatting.headerfont.size /= scale;\n\tthis.abctune.formatting.footerfont.size /= scale;\n};\n\n/**\n * Set the the values for all the configurable vertical space options.\n */\nRenderer.prototype.initVerticalSpace = function () {\n\t// conversion: 37.7953 = conversion factor for cm to px.\n\t// All of the following values are in px.\n\tthis.spacing = {\n\t\tcomposer: 7.56, // Set the vertical space above the composer.\n\t\tgraceBefore: 8.67, // Define the space before, inside and after the grace notes.\n\t\tgraceInside: 10.67,\n\t\tgraceAfter: 16,\n\t\tinfo: 0, // Set the vertical space above the infoline.\n\t\tlineSkipFactor: 1.1, // Set the factor for spacing between lines of text. (multiply this by the font size)\n\t\tmusic: 7.56, // Set the vertical space above the first staff.\n\t\tparagraphSkipFactor: 0.4, // Set the factor for spacing between text paragraphs. (multiply this by the font size)\n\t\tparts: 11.33, // Set the vertical space above a new part.\n\t\tslurHeight: 1.0, // Set the slur height factor.\n\t\tstaffSeparation: 61.33, // Do not put a staff system closer than from the previous system.\n\t\tstemHeight: 26.67 + 10, // Set the stem height.\n\t\tsubtitle: 3.78, // Set the vertical space above the subtitle.\n\t\tsystemStaffSeparation: 48, // Do not place the staves closer than inside a system. * This values applies to all staves when in the tune header. Otherwise, it applies to the next staff\n\t\ttext: 18.9, // Set the vertical space above the history.\n\t\ttitle: 7.56, // Set the vertical space above the title.\n\t\ttop: 30.24, //Set the vertical space above the tunes and on the top of the continuation pages.\n\t\tvocal: 0, // Set the vertical space above the lyrics under the staves.\n\t\twords: 0 // Set the vertical space above the lyrics at the end of the tune.\n\t};\n\t/*\n\tTODO-PER: Handle the x-coordinate spacing items, too.\nmaxshrink Default: 0.65\nSet how much to compress horizontally when music line breaks\nare automatic.\n must be between 0 (natural spacing)\nand 1 (max shrinking).\n\n// This next value is used to compute the natural spacing of\n// the notes. The base spacing of the crotchet is always\n// 40 pts. When the duration of a note type is twice the\n// duration of an other note type, its spacing is multiplied\n// by this factor.\n// The default value causes the note spacing to be multiplied\n// by 2 when its duration is multiplied by 4, i.e. the\n// space of the semibreve is 80 pts and the space of the\n// semiquaver is 20 pts.\n// Setting this value to 1 sets all note spacing to 40 pts.\nnoteSpacingFactor: 1.414, // Set the note spacing factor to (range 1..2).\n\nscale Default: 0.75 Set the page scale factor. Note that the header and footer are not scaled.\n\nstretchlast Default: 0.8\nStretch the last music line of a tune when it exceeds\nthe fraction of the page width.\n range is 0.0 to 1.0.\n\t */\n};\n\nRenderer.prototype.setVerticalSpace = function (formatting) {\n\t// conversion from pts to px 4/3\n\tif (formatting.staffsep !== undefined)\n\t\tthis.spacing.staffSeparation = formatting.staffsep * 4 / 3;\n\tif (formatting.composerspace !== undefined)\n\t\tthis.spacing.composer = formatting.composerspace * 4 / 3;\n\tif (formatting.partsspace !== undefined)\n\t\tthis.spacing.parts = formatting.partsspace * 4 / 3;\n\tif (formatting.textspace !== undefined)\n\t\tthis.spacing.text = formatting.textspace * 4 / 3;\n\tif (formatting.musicspace !== undefined)\n\t\tthis.spacing.music = formatting.musicspace * 4 / 3;\n\tif (formatting.titlespace !== undefined)\n\t\tthis.spacing.title = formatting.titlespace * 4 / 3;\n\tif (formatting.sysstaffsep !== undefined)\n\t\tthis.spacing.systemStaffSeparation = formatting.sysstaffsep * 4 / 3;\n\tif (formatting.subtitlespace !== undefined)\n\t\tthis.spacing.subtitle = formatting.subtitlespace * 4 / 3;\n\tif (formatting.topspace !== undefined)\n\t\tthis.spacing.top = formatting.topspace * 4 / 3;\n\tif (formatting.vocalspace !== undefined)\n\t\tthis.spacing.vocal = formatting.vocalspace * 4 / 3;\n\tif (formatting.wordsspace !== undefined)\n\t\tthis.spacing.words = formatting.wordsspace * 4 / 3;\n};\n\n\n/**\n * Calculates the y for a given pitch value (relative to the stave the renderer is currently printing)\n * @param {number} ofs pitch value (bottom C on a G clef = 0, D=1, etc.)\n */\nRenderer.prototype.calcY = function (ofs) {\n\treturn this.y - ofs * spacing.STEP;\n};\n\nRenderer.prototype.moveY = function (em, numLines) {\n\tif (numLines === undefined) numLines = 1;\n\tthis.y += em * numLines;\n};\n\nRenderer.prototype.absolutemoveY = function (y) {\n\tthis.y = y;\n};\n\nmodule.exports = Renderer;\n","// abc_voice_element.js: Definition of the VoiceElement class.\n\n/*global module */\n\nvar svgNS = \"http://www.w3.org/2000/svg\";\n\nfunction Svg(wrapper) {\n\tthis.svg = createSvg();\n\tthis.currentGroup = [];\n\twrapper.appendChild(this.svg);\n}\n\nSvg.prototype.clear = function () {\n\tif (this.svg) {\n\t\tvar wrapper = this.svg.parentNode;\n\t\tthis.svg = createSvg();\n\t\tthis.currentGroup = [];\n\t\tif (wrapper) {\n\t\t\t// TODO-PER: If the wrapper is not present, then the underlying div was pulled out from under this instance. It's possible that is still useful (for creating the music off page?)\n\t\t\twrapper.innerHTML = \"\";\n\t\t\twrapper.appendChild(this.svg);\n\t\t}\n\t}\n};\n\nSvg.prototype.setTitle = function (title) {\n\tvar titleEl = document.createElement(\"title\");\n\tvar titleNode = document.createTextNode(title);\n\ttitleEl.appendChild(titleNode);\n\tthis.svg.insertBefore(titleEl, this.svg.firstChild);\n};\n\nSvg.prototype.setResponsiveWidth = function (w, h) {\n\t// this technique is from: http://thenewcode.com/744/Make-SVG-Responsive, thx to https://github.com/iantresman\n\tthis.svg.setAttribute(\"viewBox\", \"0 0 \" + w + \" \" + h);\n\tthis.svg.setAttribute(\"preserveAspectRatio\", \"xMinYMin meet\");\n\tthis.svg.removeAttribute(\"height\");\n\tthis.svg.removeAttribute(\"width\");\n\tthis.svg.style['display'] = \"inline-block\";\n\tthis.svg.style['position'] = \"absolute\";\n\tthis.svg.style['top'] = \"0\";\n\tthis.svg.style['left'] = \"0\";\n\n\tif (this.svg.parentNode) {\n\t\tvar cls = this.svg.parentNode.getAttribute(\"class\");\n\t\tif (!cls)\n\t\t\tthis.svg.parentNode.setAttribute(\"class\", \"abcjs-container\");\n\t\telse if (cls.indexOf(\"abcjs-container\") < 0)\n\t\t\tthis.svg.parentNode.setAttribute(\"class\", cls + \" abcjs-container\");\n\t\tthis.svg.parentNode.style['display'] = \"inline-block\";\n\t\tthis.svg.parentNode.style['position'] = \"relative\";\n\t\tthis.svg.parentNode.style['width'] = \"100%\";\n\t\t// PER: I changed the padding from 100% to this through trial and error.\n\t\t// The example was using a square image, but this music might be either wider or taller.\n\t\tvar padding = h / w * 100;\n\t\tthis.svg.parentNode.style['padding-bottom'] = padding + \"%\";\n\t\tthis.svg.parentNode.style['vertical-align'] = \"middle\";\n\t\tthis.svg.parentNode.style['overflow'] = \"hidden\";\n\t}\n};\n\nSvg.prototype.setSize = function (w, h) {\n\tthis.svg.setAttribute('width', w);\n\tthis.svg.setAttribute('height', h);\n};\n\nSvg.prototype.setAttribute = function (attr, value) {\n\tthis.svg.setAttribute(attr, value);\n};\n\nSvg.prototype.setScale = function (scale) {\n\tif (scale !== 1) {\n\t\tthis.svg.style.transform = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['-ms-transform'] = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['-webkit-transform'] = \"scale(\" + scale + \",\" + scale + \")\";\n\t\tthis.svg.style['transform-origin'] = \"0 0\";\n\t\tthis.svg.style['-ms-transform-origin-x'] = \"0\";\n\t\tthis.svg.style['-ms-transform-origin-y'] = \"0\";\n\t\tthis.svg.style['-webkit-transform-origin-x'] = \"0\";\n\t\tthis.svg.style['-webkit-transform-origin-y'] = \"0\";\n\t} else {\n\t\tthis.svg.style.transform = \"\";\n\t\tthis.svg.style['-ms-transform'] = \"\";\n\t\tthis.svg.style['-webkit-transform'] = \"\";\n\t}\n};\n\nSvg.prototype.insertStyles = function (styles) {\n\tvar el = document.createElementNS(svgNS, \"style\");\n\tel.textContent = styles;\n\tthis.svg.insertBefore(el, this.svg.firstChild); // prepend is not available on older browsers.\n\t//\tthis.svg.prepend(el);\n};\n\nSvg.prototype.setParentStyles = function (attr) {\n\t// This is needed to get the size right when there is scaling involved.\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (this.svg.parentNode)\n\t\t\t\tthis.svg.parentNode.style[key] = attr[key];\n\t\t}\n\t}\n\t// This is the last thing that gets called, so delete the temporary SVG if one was created\n\tif (this.dummySvg) {\n\t\tvar body = document.querySelector('body');\n\t\tbody.removeChild(this.dummySvg);\n\t\tthis.dummySvg = null;\n\t}\n\n};\n\nfunction constructHLine(x1, y1, x2) {\n\tvar len = x2 - x1;\n\treturn \"M \" + x1 + \" \" + y1 +\n\t\t\" l \" + len + ' ' + 0 +\n\t\t\" l \" + 0 + \" \" + 1 + \" \" +\n\t\t\" l \" + (-len) + \" \" + 0 + \" \" + \" z \";\n}\n\nfunction constructVLine(x1, y1, y2) {\n\tvar len = y2 - y1;\n\treturn \"M \" + x1 + \" \" + y1 +\n\t\t\" l \" + 0 + ' ' + len +\n\t\t\" l \" + 1 + \" \" + 0 + \" \" +\n\t\t\" l \" + 0 + \" \" + (-len) + \" \" + \" z \";\n}\n\nSvg.prototype.rect = function (attr) {\n\t// This uses path instead of rect so that it can be hollow and the color changes with \"fill\" instead of \"stroke\".\n\tvar lines = [];\n\tvar x1 = attr.x;\n\tvar y1 = attr.y;\n\tvar x2 = attr.x + attr.width;\n\tvar y2 = attr.y + attr.height;\n\tlines.push(constructHLine(x1, y1, x2));\n\tlines.push(constructHLine(x1, y2, x2));\n\tlines.push(constructVLine(x2, y1, y2));\n\tlines.push(constructVLine(x1, y2, y1));\n\n\treturn this.path({ path: lines.join(\" \"), stroke: \"none\", \"data-name\": attr[\"data-name\"] });\n};\n\nSvg.prototype.dottedLine = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'line');\n\tel.setAttribute(\"x1\", attr.x1);\n\tel.setAttribute(\"x2\", attr.x2);\n\tel.setAttribute(\"y1\", attr.y1);\n\tel.setAttribute(\"y2\", attr.y2);\n\tel.setAttribute(\"stroke\", attr.stroke);\n\tel.setAttribute(\"stroke-dasharray\", \"5,5\");\n\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.rectBeneath = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'rect');\n\tel.setAttribute(\"x\", attr.x);\n\tel.setAttribute(\"width\", attr.width);\n\tel.setAttribute(\"y\", attr.y);\n\tel.setAttribute(\"height\", attr.height);\n\tif (attr.stroke)\n\t\tel.setAttribute(\"stroke\", attr.stroke);\n\tif (attr['stroke-opacity'])\n\t\tel.setAttribute(\"stroke-opacity\", attr['stroke-opacity']);\n\tif (attr.fill)\n\t\tel.setAttribute(\"fill\", attr.fill);\n\tif (attr['fill-opacity'])\n\t\tel.setAttribute(\"fill-opacity\", attr['fill-opacity']);\n\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.text = function (text, attr, target) {\n\tvar el = document.createElementNS(svgNS, 'text');\n\tel.setAttribute(\"stroke\", \"none\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tel.setAttribute(key, attr[key]);\n\t\t}\n\t}\n\tvar lines = (\"\" + text).split(\"\\n\");\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tvar line = document.createElementNS(svgNS, 'tspan');\n\t\tline.setAttribute(\"x\", attr.x ? attr.x : 0);\n\t\tif (i !== 0)\n\t\t\tline.setAttribute(\"dy\", \"1.2em\");\n\t\tif (lines[i].indexOf(\"\\x03\") !== -1) {\n\t\t\tvar parts = lines[i].split('\\x03')\n\t\t\tline.textContent = parts[0];\n\t\t\tif (parts[1]) {\n\t\t\t\tvar ts2 = document.createElementNS(svgNS, 'tspan');\n\t\t\t\tts2.setAttribute(\"dy\", \"-0.3em\");\n\t\t\t\tts2.setAttribute(\"style\", \"font-size:0.7em\");\n\t\t\t\tts2.textContent = parts[1];\n\t\t\t\tline.appendChild(ts2);\n\t\t\t}\n\t\t\tif (parts[2]) {\n\t\t\t\tvar dist = parts[1] ? \"0.4em\" : \"0.1em\";\n\t\t\t\tvar ts3 = document.createElementNS(svgNS, 'tspan');\n\t\t\t\tts3.setAttribute(\"dy\", dist);\n\t\t\t\tts3.setAttribute(\"style\", \"font-size:0.7em\");\n\t\t\t\tts3.textContent = parts[2];\n\t\t\t\tline.appendChild(ts3);\n\t\t\t}\n\t\t} else\n\t\t\tline.textContent = lines[i];\n\t\tel.appendChild(line);\n\t}\n\tif (target)\n\t\ttarget.appendChild(el);\n\telse\n\t\tthis.append(el);\n\treturn el;\n};\n\nSvg.prototype.guessWidth = function (text, attr) {\n\tvar svg = this.createDummySvg();\n\tvar el = this.text(text, attr, svg);\n\tvar size;\n\ttry {\n\t\tsize = el.getBBox();\n\t\tif (isNaN(size.height) || !size.height) // TODO-PER: I don't think this can happen unless there isn't a browser at all.\n\t\t\tsize = { width: attr['font-size'] / 2, height: attr['font-size'] + 2 }; // Just a wild guess.\n\t\telse\n\t\t\tsize = { width: size.width, height: size.height };\n\t} catch (ex) {\n\t\tsize = { width: attr['font-size'] / 2, height: attr['font-size'] + 2 }; // Just a wild guess.\n\t}\n\tsvg.removeChild(el);\n\treturn size;\n};\n\nSvg.prototype.createDummySvg = function () {\n\tif (!this.dummySvg) {\n\t\tthis.dummySvg = createSvg();\n\t\tvar styles = [\n\t\t\t\"display: block !important;\",\n\t\t\t\"height: 1px;\",\n\t\t\t\"width: 1px;\",\n\t\t\t\"position: absolute;\"\n\t\t];\n\t\tthis.dummySvg.setAttribute('style', styles.join(\"\"));\n\t\tvar body = document.querySelector('body');\n\t\tbody.appendChild(this.dummySvg);\n\t}\n\n\treturn this.dummySvg;\n};\n\nvar sizeCache = {};\n\nSvg.prototype.getTextSize = function (text, attr, el) {\n\tif (typeof text === 'number')\n\t\ttext = '' + text;\n\tif (!text || text.match(/^\\s+$/))\n\t\treturn { width: 0, height: 0 };\n\tvar key;\n\tif (text.length < 20) {\n\t\t// The short text tends to be repetitive and getBBox is really slow, so lets cache.\n\t\tkey = text + JSON.stringify(attr);\n\t\tif (sizeCache[key])\n\t\t\treturn sizeCache[key];\n\t}\n\tvar removeLater = !el;\n\tif (!el)\n\t\tel = this.text(text, attr);\n\tvar size;\n\ttry {\n\t\tsize = el.getBBox();\n\t\tif (isNaN(size.height) || !size.height)\n\t\t\tsize = this.guessWidth(text, attr);\n\t\telse\n\t\t\tsize = { width: size.width, height: size.height };\n\t} catch (ex) {\n\t\tsize = this.guessWidth(text, attr);\n\t}\n\tif (removeLater) {\n\t\tif (this.currentGroup.length > 0)\n\t\t\tthis.currentGroup[0].removeChild(el);\n\t\telse\n\t\t\tthis.svg.removeChild(el);\n\t}\n\tif (key)\n\t\tsizeCache[key] = size;\n\treturn size;\n};\n\nSvg.prototype.openGroup = function (options) {\n\toptions = options ? options : {};\n\tvar el = document.createElementNS(svgNS, \"g\");\n\tif (options.klass)\n\t\tel.setAttribute(\"class\", options.klass);\n\tif (options.fill)\n\t\tel.setAttribute(\"fill\", options.fill);\n\tif (options.stroke)\n\t\tel.setAttribute(\"stroke\", options.stroke);\n\tif (options['data-name'])\n\t\tel.setAttribute(\"data-name\", options['data-name']);\n\n\tif (options.prepend)\n\t\tthis.prepend(el);\n\telse\n\t\tthis.append(el);\n\tthis.currentGroup.unshift(el);\n\treturn el;\n};\n\nSvg.prototype.closeGroup = function () {\n\tvar g = this.currentGroup.shift();\n\tif (g && g.children.length === 0) {\n\t\t// If nothing was added to the group it is because all the elements were invisible. We don't need the group, then.\n\t\tg.parentElement.removeChild(g);\n\t\treturn null;\n\t}\n\treturn g;\n};\n\nSvg.prototype.path = function (attr) {\n\tvar el = document.createElementNS(svgNS, \"path\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (key === 'path')\n\t\t\t\tel.setAttributeNS(null, 'd', attr.path);\n\t\t\telse if (key === 'klass')\n\t\t\t\tel.setAttributeNS(null, \"class\", attr[key]);\n\t\t\telse if (attr[key] !== undefined)\n\t\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n\tthis.append(el);\n\treturn el;\n};\n\nSvg.prototype.pathToBack = function (attr) {\n\tvar el = document.createElementNS(svgNS, \"path\");\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tif (key === 'path')\n\t\t\t\tel.setAttributeNS(null, 'd', attr.path);\n\t\t\telse if (key === 'klass')\n\t\t\t\tel.setAttributeNS(null, \"class\", attr[key]);\n\t\t\telse\n\t\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n\tthis.prepend(el);\n\treturn el;\n};\n\nSvg.prototype.lineToBack = function (attr) {\n\tvar el = document.createElementNS(svgNS, 'line');\n\tvar keys = Object.keys(attr)\n\tfor (var i = 0; i < keys.length; i++)\n\t\tel.setAttribute(keys[i], attr[keys[i]]);\n\tthis.prepend(el);\n\treturn el;\n};\n\n\nSvg.prototype.append = function (el) {\n\tif (this.currentGroup.length > 0)\n\t\tthis.currentGroup[0].appendChild(el);\n\telse\n\t\tthis.svg.appendChild(el);\n};\n\nSvg.prototype.prepend = function (el) {\n\t// The entire group is prepended, so don't prepend the individual elements.\n\tif (this.currentGroup.length > 0)\n\t\tthis.currentGroup[0].appendChild(el);\n\telse\n\t\tthis.svg.insertBefore(el, this.svg.firstChild);\n};\n\nSvg.prototype.setAttributeOnElement = function (el, attr) {\n\tfor (var key in attr) {\n\t\tif (attr.hasOwnProperty(key)) {\n\t\t\tel.setAttributeNS(null, key, attr[key]);\n\t\t}\n\t}\n};\n\nSvg.prototype.moveElementToChild = function (parent, child) {\n\tparent.appendChild(child);\n};\n\nfunction createSvg() {\n\tvar svg = document.createElementNS(svgNS, \"svg\");\n\tsvg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\tsvg.setAttribute('role', 'img'); // for accessibility\n\tsvg.setAttribute('fill', 'currentColor'); // for automatically picking up dark mode and high contrast\n\tsvg.setAttribute('stroke', 'currentColor'); // for automatically picking up dark mode and high contrast\n\treturn svg;\n}\n\n\nmodule.exports = Svg;\n","var version = '6.2.2';\n\nmodule.exports = version;\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.AOS=t():e.AOS=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"dist/\",t(0)}([function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute(\"data-aos\"),e.node.removeAttribute(\"data-aos-easing\"),e.node.removeAttribute(\"data-aos-duration\"),e.node.removeAttribute(\"data-aos-delay\")})},S=function(e){return e===!0||\"mobile\"===e&&p.default.mobile()||\"phone\"===e&&p.default.phone()||\"tablet\"===e&&p.default.tablet()||\"function\"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\\n aos: MutationObserver is not supported on this browser,\\n code mutations observing has been disabled.\\n You may have to call \"refreshHard()\" by yourself.\\n '),x.disableMutationObserver=!0),document.querySelector(\"body\").setAttribute(\"data-aos-easing\",x.easing),document.querySelector(\"body\").setAttribute(\"data-aos-duration\",x.duration),document.querySelector(\"body\").setAttribute(\"data-aos-delay\",x.delay),\"DOMContentLoaded\"===x.startEvent&&[\"complete\",\"interactive\"].indexOf(document.readyState)>-1?j(!0):\"load\"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener(\"resize\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"orientationchange\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"scroll\",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready(\"[data-aos]\",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){\"use strict\";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?x(u(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if(\"function\"!=typeof e)throw new TypeError(s);return i(o)&&(r=\"leading\"in o?!!o.leading:r,a=\"trailing\"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t=\"undefined\"==typeof e?\"undefined\":c(e);return!!e&&(\"object\"==t||\"function\"==t)}function r(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":c(e))}function a(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":c(e))||r(e)&&k.call(e)==d}function u(e){if(\"number\"==typeof e)return e;if(a(e))return f;if(i(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(l,\"\");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s=\"Expected a function\",f=NaN,d=\"[object Symbol]\",l=/^\\s+|\\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y=\"object\"==(\"undefined\"==typeof t?\"undefined\":c(t))&&t&&t.Object===Object&&t,g=\"object\"==(\"undefined\"==typeof self?\"undefined\":c(self))&&self&&self.Object===Object&&self,h=y||g||Function(\"return this\")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){\"use strict\";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?k(a(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t=\"undefined\"==typeof e?\"undefined\":u(e);return!!e&&(\"object\"==t||\"function\"==t)}function i(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":u(e))}function r(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":u(e))||i(e)&&w.call(e)==f}function a(e){if(\"number\"==typeof e)return e;if(r(e))return s;if(o(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(d,\"\");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c=\"Expected a function\",s=NaN,f=\"[object Symbol]\",d=/^\\s+|\\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v=\"object\"==(\"undefined\"==typeof t?\"undefined\":u(t))&&t&&t.Object===Object&&t,y=\"object\"==(\"undefined\"==typeof self?\"undefined\":u(self))&&self&&self.Object===Object&&self,g=v||y||Function(\"return this\")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){\"use strict\";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;te.position?e.node.classList.add(\"aos-animate\"):\"undefined\"!=typeof o&&(\"false\"===o||!n&&\"true\"!==o)&&e.node.classList.remove(\"aos-animate\")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add(\"aos-init\"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute(\"data-aos-offset\"),anchor:e.getAttribute(\"data-aos-anchor\"),anchorPlacement:e.getAttribute(\"data-aos-anchor-placement\")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case\"top-bottom\":break;case\"center-bottom\":n+=e.offsetHeight/2;break;case\"bottom-bottom\":n+=e.offsetHeight;break;case\"top-center\":n+=i/2;break;case\"bottom-center\":n+=i/2+e.offsetHeight;break;case\"center-center\":n+=i/2+e.offsetHeight/2;break;case\"top-top\":n+=i;break;case\"bottom-top\":n+=e.offsetHeight+i;break;case\"center-top\":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-(\"BODY\"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-(\"BODY\"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){return e=e||document.querySelectorAll(\"[data-aos]\"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])});","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3 &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: any;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. May be either a URL or the pieces of a\n * URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return possibleConstructorReturn(this, result);\n };\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct.bind();\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}","import type { Location, Path, To } from \"./history\";\nimport { warning, invariant, parsePath } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: any;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n status: number;\n location: string;\n revalidate: boolean;\n reloadDocument?: boolean;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: any;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on
,\n * useSubmit(), , etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: any;\n}\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs): Promise | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs): Promise | DataFunctionValue;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: DataResult;\n defaultShouldRevalidate: boolean;\n }): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction;\n action?: ActionFunction;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\ntype PathParam =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch(\n branches[i],\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n safelyDecodeURI(pathname)\n );\n }\n\n return matches;\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explodes _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:\\w+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = meta.route;\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, paramNames] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = paramNames.reduce>(\n (memo, paramName, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n memo[paramName] = safelyDecodeURIComponent(\n captureGroups[index] || \"\",\n paramName\n );\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, string[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let paramNames: string[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^$?{}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/\\/:(\\w+)/g, (_: string, paramName: string) => {\n paramNames.push(paramName);\n return \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n paramNames.push(\"*\");\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, paramNames];\n}\n\nfunction safelyDecodeURI(value: string) {\n try {\n return decodeURI(value);\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\nfunction safelyDecodeURIComponent(value: string, paramName: string) {\n try {\n return decodeURIComponent(value);\n } catch (error) {\n warning(\n false,\n `The value for the URL param \"${paramName}\" will not be decoded because` +\n ` the string \"${value}\" is a malformed URL segment. This is probably` +\n ` due to a bad percent encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (isPathRelative || toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // Each leading .. segment means \"go up one route\" instead of \"go up one\n // URL segment\". This is a key difference from how works and a\n // major reason we call this a \"to\" value instead of a \"href\".\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n // If there are more \"..\" segments than parent routes, resolve relative to\n // the root / URL.\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n */\nexport class ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n error?: Error;\n internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n var F = function F() {};\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n DataResult,\n DeferredData,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n DeferredResult,\n ErrorResult,\n FormEncType,\n FormMethod,\n DetectErrorBoundaryFunction,\n RedirectResult,\n RouteData,\n AgnosticRouteObject,\n Submission,\n SuccessResult,\n AgnosticRouteMatch,\n ShouldRevalidateFunction,\n RouteManifest,\n ImmutableRouteKey,\n ActionFunction,\n LoaderFunction,\n V7_MutationFormMethod,\n V7_FormMethod,\n HTMLFormMethod,\n MutationFormMethod,\n MapRoutePropertiesFunction,\n} from \"./utils\";\nimport {\n ErrorResponse,\n ResultType,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key?: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key?: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: { requestContext?: unknown }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: { routeId?: string; requestContext?: unknown }\n ): Promise;\n}\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (state: RouterState): void;\n}\n\ninterface UseMatchesMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: unknown;\n handle: unknown;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UseMatchesMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n \" _hasFetcherDoneAnything \"?: boolean;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n \" _hasFetcherDoneAnything \"?: boolean;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n \" _hasFetcherDoneAnything \"?: boolean;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Error thrown from the current action, keyed by the route containing the\n * error boundary to render the error. To be committed to the state after\n * loaders have completed\n */\n pendingActionError?: RouteData;\n /**\n * Data returned from the current action, keyed by the route owning the action.\n * To be committed to the state after loaders have completed\n */\n pendingActionData?: RouteData;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\n/**\n * Wrapper object to allow us to throw any response out from callLoaderOrAction\n * for queryRouter while preserving whether or not it was thrown or returned\n * from the loader/action\n */\ninterface QueryRouteResponse {\n type: ResultType.data | ResultType.error;\n response: Response;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n let initialized =\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\n (!initialMatches.some((m) => m.route.loader) || init.hydrationData != null);\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: string[] = [];\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location);\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(newState: Partial): void {\n state = {\n ...state,\n ...newState,\n };\n subscribers.forEach((subscriber) => subscriber(state));\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n updateState({\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n });\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponse;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(location, {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n });\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionData: RouteData | undefined;\n let pendingError: RouteData | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingError = {\n [findNearestBoundary(matches).route.id]: opts.pendingError,\n };\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionOutput = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n { replace: opts.replace }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n\n // Create a GET request for the loaders\n request = new Request(request.url, { signal: request.signal });\n }\n\n // Call loaders\n let { shortCircuited, loaderData, errors } = await handleLoaders(\n request,\n location,\n matches,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n pendingActionData,\n pendingError\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n opts: { replace?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation });\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n replace =\n result.location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(state, result, { submission, replace });\n return { shortCircuited: true };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions are REPLACE navigations, but if the\n // action threw an error that'll be rendered in an errorElement, we fall\n // back to PUSH so that the user can use the back button to get back to\n // the pre-submission form location to try again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n // Send back an empty object we can use to clear out any prior actionData\n pendingActionData: {},\n pendingActionError: { [boundaryMatch.route.id]: result.error },\n };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n return {\n pendingActionData: { [actionMatch.route.id]: result.data },\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(location, {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n });\n return { shortCircuited: true };\n }\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n if (!isUninterruptedRevalidation) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState({\n navigation: loadingNavigation,\n ...(actionData\n ? Object.keys(actionData).length === 0\n ? { actionData: null }\n : { actionData }\n : {}),\n ...(revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n });\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, { replace });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingError,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n function getFetcher(key: string): Fetcher {\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath })\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error);\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(key, routeId, path, match, matches, submission);\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(key, routeId, path, match, matches, submission);\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error);\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n let fetcher = getSubmittingFetcher(submission, existingFetcher);\n state.fetchers.set(key, fetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by ou our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n let doneFetcher = getDoneFetcher(undefined);\n state.fetchers.set(key, doneFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n return;\n } else {\n fetchRedirectIds.add(key);\n let loadingFetcher = getLoadingFetcher(submission);\n state.fetchers.set(key, loadingFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n return startRedirectNavigation(state, actionResult, {\n submission,\n isFetchActionRedirect: true,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n let didAbortFetchLoads = abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n ...(didAbortFetchLoads || revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n // Put this fetcher into it's loading state\n let loadingFetcher = getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(key, loadingFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n let doneFetcher = getDoneFetcher(undefined);\n state.fetchers.set(key, doneFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n state.fetchers.delete(key);\n // TODO: In remix, this would reset to IDLE_NAVIGATION if it was a catch -\n // do we need to behave any differently with our non-redirect errors?\n // What if it was a non-redirect Response?\n updateState({\n fetchers: new Map(state.fetchers),\n errors: {\n [boundaryMatch.route.id]: result.error,\n },\n });\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n state: RouterState,\n redirect: RedirectResult,\n {\n submission,\n replace,\n isFetchActionRedirect,\n }: {\n submission?: Submission;\n replace?: boolean;\n isFetchActionRedirect?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(\n state.location,\n redirect.location,\n // TODO: This can be removed once we get rid of useTransition in Remix v2\n {\n _isRedirect: true,\n ...(isFetchActionRedirect ? { _isFetchActionRedirect: true } : {}),\n }\n );\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.location.assign(redirect.location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let activeSubmission =\n submission || getSubmissionFromNavigation(state.navigation);\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else if (isFetchActionRedirect) {\n // For a fetch action redirect, we kick off a new loading navigation\n // without the fetcher submission, but we send it along for shouldRevalidate\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation: getLoadingNavigation(redirectLocation),\n fetcherSubmission: activeSubmission,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a submission, we will preserve it through the redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n activeSubmission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n // Call all navigation loaders and revalidating fetcher loaders in parallel,\n // then slice off the results into separate arrays so we can handle them\n // accordingly\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\n }\n }),\n ]);\n let loaderResults = results.slice(0, matchesToLoad.length);\n let fetcherResults = results.slice(matchesToLoad.length);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\n true\n ),\n ]);\n\n return { results, loaderResults, fetcherResults };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.push(key);\n abortFetcher(key);\n }\n });\n }\n\n function setFetcherError(key: string, routeId: string, error: any) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState({\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n });\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n state.fetchers.delete(key);\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => createUseMatchesMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n */\n async function query(\n request: Request,\n { requestContext }: { requestContext?: unknown } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(request, location, matches, requestContext);\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n }: { requestContext?: unknown; routeId?: string } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n match\n );\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction, we throw\n // it to bail out and then return or throw here based on whether the user\n // returned or threw\n if (isQueryRouteResponse(e)) {\n if (e.type === ResultType.error) {\n throw e.response;\n }\n return e.response;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted`);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.status,\n headers: {\n Location: result.location,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n let context = await loadRouteData(\n request,\n matches,\n requestContext,\n undefined,\n {\n [boundaryMatch.route.id]: result.error,\n }\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n let context = await loadRouteData(loaderRequest, matches, requestContext);\n\n return {\n ...context,\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch,\n pendingActionError?: RouteData\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(pendingActionError || {})[0]\n );\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors: pendingActionError || null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted`);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionError,\n activeDeferreds\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction isSubmissionNavigation(\n opts: RouterNavigateOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId != null && relative !== \"path\") {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route. When using relative:path,\n // fromRouteId is ignored since that is always relative to the current\n // location path\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: RouterNavigateOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponse;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId?: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: string[],\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingError\n ? Object.values(pendingError)[0]\n : pendingActionData\n ? Object.values(pendingActionData)[0]\n : undefined;\n\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;\n let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n if (match.route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n if (match.route.loader == null) {\n return false;\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n defaultShouldRevalidate:\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (!matches.some((m) => m.route.id === f.routeId)) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n defaultShouldRevalidate: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: Parameters[0]\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let values = await Promise.all([\n runHandler(handler),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n resultType = ResultType.error;\n result = e;\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n if (isResponse(result)) {\n let status = result.status;\n\n // Process redirects\n if (redirectStatusCodes.has(status)) {\n let location = result.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n // Support relative routing in internal redirects\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser as-is\n let currentUrl = new URL(request.url);\n let url = location.startsWith(\"//\")\n ? new URL(currentUrl.protocol + location)\n : new URL(location);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n location = url.pathname + url.search + url.hash;\n }\n }\n\n // Don't process redirects in the router during static requests requests.\n // Instead, throw the Response and let the server handle it with an HTTP\n // redirect. We also update the Location header in place in this flow so\n // basename and relative routing is taken into account\n if (opts.isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== null,\n };\n }\n\n // For SSR single-route requests, we want to hand Responses back directly\n // without unwrapping. We do this with the QueryRouteResponse wrapper\n // interface so we can know whether it was returned or thrown\n if (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\n }\n\n let data: any;\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n data = await result.json();\n } else {\n data = await result.text();\n }\n\n if (resultType === ResultType.error) {\n return {\n type: resultType,\n error: new ErrorResponse(status, result.statusText, data),\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (resultType === ResultType.error) {\n return { type: resultType, error: result };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n // Look upwards from the matched route for the closest ancestor\n // error boundary, defaulting to the root match\n let boundaryMatch = findNearestBoundary(matches, id);\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError) {\n error = Object.values(pendingError)[0];\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n // Prefer higher error values if lower errors bubble to the same boundary\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n } else {\n loaderData[id] = result.data;\n }\n\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError) {\n errors = pendingError;\n loaderData[Object.keys(pendingError)[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingError,\n activeDeferreds\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match, controller } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route = routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponse(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isQueryRouteResponse(obj: any): obj is QueryRouteResponse {\n return (\n obj &&\n isResponse(obj.response) &&\n (obj.type === ResultType.data || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\n// Note: This should match the format exported by useMatches, so if you change\n// this please also change that :) Eventually we'll DRY this up\nfunction createUseMatchesMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UseMatchesMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id] as unknown,\n handle: route.handle as unknown,\n };\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n \" _hasFetcherDoneAnything \": true,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n \" _hasFetcherDoneAnything \": true,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n \" _hasFetcherDoneAnything \": true,\n };\n return fetcher;\n}\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticRouteMatch,\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n History,\n Location,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n LazyRouteFunction,\n} from \"@remix-run/router\";\nimport type { Action as NavigationType } from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch {}\n\nexport interface DataRouteMatch extends RouteMatch {}\n\nexport interface DataRouterContextObject extends NavigationContextObject {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n}\n\nexport const NavigationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n} from \"@remix-run/router\";\nimport {\n Action as NavigationType,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n IDLE_BLOCKER,\n UNSAFE_getPathContributingMatches as getPathContributingMatches,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n DataRouteMatch,\n} from \"./context\";\nimport {\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n AwaitContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a .\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * .\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial | string,\n dataRouterState?: RemixRouter[\"state\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n let remainingPathname =\n parentPathnameBase === \"/\"\n ? pathname\n : pathname.slice(parentPathnameBase.length) || \"/\";\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n \n {renderedMatches}\n \n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n

💿 Hey developer 👋

\n

\n You can provide a way better UX than this when your app throws errors\n by providing your own ErrorBoundary or{\" \"}\n errorElement prop on your route.\n

\n \n );\n }\n\n return (\n <>\n

Unexpected Application Error!

\n

{message}

\n {stack ?
{stack}
: null}\n {devInfo}\n \n );\n}\n\nconst defaultErrorElement = ;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error || state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error ? (\n \n \n \n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (dataRouterState?.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id]\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n let error = match.route.id ? errors?.[match.route.id] : null;\n // Only data routers handle errors\n let errorElement: React.ReactNode | null = null;\n if (dataRouterState) {\n errorElement = match.route.errorElement || defaultErrorElement;\n }\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `` in `` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = ;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n \n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n \n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches() {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () =>\n matches.map((match) => {\n let { pathname, params } = match;\n // Note: This structure matches that created by createUseMatchesMatch\n // in the @remix-run/router , so if you change this please also change\n // that :) Eventually we'll DRY this up\n return {\n id: match.route.id,\n pathname,\n params,\n data: loaderData[match.route.id] as unknown,\n handle: match.route.handle as unknown,\n };\n }),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n\n let route = React.useContext(RouteContext);\n invariant(route, `useActionData must be used inside a RouteContext`);\n\n return Object.values(state?.actionData || {})[0];\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import * as React from \"react\";\nimport type {\n TrackedPromise,\n InitialEntry,\n Location,\n MemoryHistory,\n Router as RemixRouter,\n To,\n LazyRouteFunction,\n RelativeRoutingType,\n RouterState,\n} from \"@remix-run/router\";\nimport {\n Action as NavigationType,\n AbortedDeferredError,\n createMemoryHistory,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n UNSAFE_getPathContributingMatches as getPathContributingMatches,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n RouteMatch,\n RouteObject,\n Navigator,\n NonIndexRouteObject,\n} from \"./context\";\nimport {\n LocationContext,\n NavigationContext,\n DataRouterContext,\n DataRouterStateContext,\n AwaitContext,\n RouteContext,\n} from \"./context\";\nimport {\n useAsyncValue,\n useInRouterContext,\n useNavigate,\n useOutlet,\n useRoutes,\n _renderMatches,\n useRoutesImpl,\n useLocation,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n future?: FutureConfig;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/)\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n let setState = React.useCallback(\n (newState: RouterState) => {\n v7_startTransition && startTransitionImpl\n ? startTransitionImpl(() => setStateImpl(newState))\n : setStateImpl(newState);\n },\n [setStateImpl, v7_startTransition]\n );\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{/* align center */}\n\t\t\t\t\n\t\t\t\t\t{/* Name and title */}\n\t\t\t\t\t

Joel Breit

\n\t\t\t\t\t

Software Engineer

\n\n\t\t\t\t\t{/* Location */}\n\t\t\t\t\t

\n\t\t\t\t\t\t Pittsburgh, PA\n\t\t\t\t\t

\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t

\n\t\t\t\t\tI have been a software engineer since 2018, I completed my\n\t\t\t\t\tbachelor’s degree in computer science from WVU where I\n\t\t\t\t\tgraduated magna cum laude and as an Honors Scholar through\n\t\t\t\t\tthe Honors College. In 2022, I also completed my master’s in\n\t\t\t\t\tbiostatistics from WVU.\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\tIn my software engineering career, have been working on\n\t\t\t\t\tseveral software projects including:\n\t\t\t\t\t

    \n\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\tActing as scrum master on a software development\n\t\t\t\t\t\t\tteam balancing customer needs and developer\n\t\t\t\t\t\t\tresources while helping write and maintain a C++\n\t\t\t\t\t\t\tcodebase and utilizing Elasticsearch, Fluentd, and\n\t\t\t\t\t\t\tKibana for log analysis.\n\t\t\t\t\t\t
  • \n\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\tDeveloping and testing for backend Java code with an\n\t\t\t\t\t\t\tOracle Database for networking microservices in a\n\t\t\t\t\t\t\tproduction environment relied on by thousands of\n\t\t\t\t\t\t\ttechnicians for tens of thousands of daily\n\t\t\t\t\t\t\ttransactions.\n\t\t\t\t\t\t
  • \n\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\tDeveloping, designing, and implementing full-stack\n\t\t\t\t\t\t\tcode improving user experience using React,\n\t\t\t\t\t\t\tTypeScript and Java for forms filled out by tens of\n\t\t\t\t\t\t\tthousands of businesses annually, and migrating an\n\t\t\t\t\t\t\ton-prem system to AWS with Lambda, S3, DynamoDB, and\n\t\t\t\t\t\t\tother cloud services.\n\t\t\t\t\t\t
  • \n\t\t\t\t\t
\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\tAs a student I have utilized Python, R, and JMP for\n\t\t\t\t\tregression analyses and meta-analyses including a\n\t\t\t\t\tdemographic regression analysis published in the 2020 West\n\t\t\t\t\tVirginia Rural Health Association Conference and an\n\t\t\t\t\taggregate data meta-analysis published in Complementary\n\t\t\t\t\tTherapies in Clinical Practice.\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\tIn my PhD program in intelligent systems at the University\n\t\t\t\t\tof Pittsburgh which I started in 2023, I built a website\n\t\t\t\t\twith React JS and AWS to enable music composition from\n\t\t\t\t\tnatural language via ABC notation and modern LLM APIs, and I\n\t\t\t\t\thave been working on a React Native application to enable a\n\t\t\t\t\tstudy using the MediaPipe pose detection library for joint\n\t\t\t\t\trange of motion recovery monitoring.\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\tOutside of the above, I am a Certified Cloud Practitioner\n\t\t\t\t\tand Certified Solutions Architect through Amazon Web\n\t\t\t\t\tServices and a Certified Scrum Master through Scrum\n\t\t\t\t\tAlliance.\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\tOn this website, you can learn more about my personal\n\t\t\t\t\tprojects. You can also find links to my academic research\n\t\t\t\t\tand publications. If you are interested in working with me\n\t\t\t\t\tor have any questions, please don't hesitate to contact me\n\t\t\t\t\tusing the methods listed below.\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\tThank you for visiting, and I look forward to connecting\n\t\t\t\t\twith you!\n\t\t\t\t

\n\t\t\t
\n\t\t\n\t);\n};\n\nexport default HomePage;\n","import React from \"react\";\n\nconst JAMIContent = () => {\n\treturn (\n\t\t
\n\t\t\t

J.A.M.I.

\n\t\t\t

Joel's Artificial Music Intelligence

\n\t\t\tResearch conducted by Joel Breit in 2017 under the mentorship of Don\n\t\t\tMcLaughlin, Ph.D.\n\t\t\t

Abstract

\n\t\t\t

\n\t\t\t\tThis study explores the development and evaluation of Joel's\n\t\t\t\tArtificial Music Intelligence (JAMI), an artificial intelligence\n\t\t\t\tsystem that generates melodies by analyzing patterns of three\n\t\t\t\tconsecutive scale degrees, termed \"mumes,\" in existing major key\n\t\t\t\tmusical compositions. The hypothesis posits that a computer\n\t\t\t\tprogram can determine the naturalness of music based on the\n\t\t\t\tfrequency of mumes in previously analyzed compositions. JAMI\n\t\t\t\textracts mumes from a database of musical works and utilizes a\n\t\t\t\tstatistical approach to identify and prioritize patterns that\n\t\t\t\toccur more frequently in the analyzed music, under the\n\t\t\t\tassumptions that mumes are partially independent from the\n\t\t\t\trhythms they are associated with and direction-agnostic. Three\n\t\t\t\tmelody generation algorithms were implemented and tested:\n\t\t\t\trandomAttempt(), generating a list of random notes;\n\t\t\t\tdiatonicAttempt(), generating a list of random notes within the\n\t\t\t\tmajor scale; and smartAttempt(), generating a list of notes\n\t\t\t\tprioritizing more common mumes found in the database. To\n\t\t\t\tevaluate the effectiveness of JAMI, 100,000 melodies were\n\t\t\t\tgenerated by each algorithm and scored based on their similarity\n\t\t\t\tto existing music. A sample of musicians ranked the generated\n\t\t\t\tmelodies by their perceived naturalness, demonstrating the\n\t\t\t\tsuccess of JAMI in producing melodies with a higher degree of\n\t\t\t\tnaturalness when compared to randomly generated compositions.\n\t\t\t\tThis research contributes to the understanding of artificial\n\t\t\t\tintelligence applications in music generation, with potential\n\t\t\t\tfor further exploration in other musical scales, keys, and\n\t\t\t\tstyles.\n\t\t\t

\n\t\t\t

Methods

\n\t\t\t

\n\t\t\t\tThe methodology employed in this study consisted of four primary\n\t\t\t\tstages: data collection, pattern extraction, melody generation,\n\t\t\t\tand evaluation.\n\t\t\t

\n\t\t\tData Collection: A corpus of musical compositions in major keys was\n\t\t\tcurated, with the exclusion of works containing chromaticism to\n\t\t\tmaintain the focus on diatonic melodies. This selection ensured a\n\t\t\tmanageable scope for the investigation while laying the groundwork\n\t\t\tfor future expansion into other keys and scales.\n\t\t\t
    \n\t\t\t\t
  1. \n\t\t\t\t\t{\" \"}\n\t\t\t\t\tPattern Extraction:\n\t\t\t\t\t

    \n\t\t\t\t\t\tFor each composition in the corpus, triadic mumes were\n\t\t\t\t\t\tidentified and extracted using a custom Python script.\n\t\t\t\t\t\tMumes were represented as scale degree triplets and\n\t\t\t\t\t\tstored in a dictionary with their corresponding\n\t\t\t\t\t\tfrequency of occurrence. Subsequently, the data was\n\t\t\t\t\t\taggregated and analyzed to discern the distribution of\n\t\t\t\t\t\tmume patterns and their prevalence within the corpus.\n\t\t\t\t\t

    \n\t\t\t\t
  2. \n\t\t\t\t
  3. \n\t\t\t\t\t{\" \"}\n\t\t\t\t\tMelody Generation:\n\t\t\t\t\t

    \n\t\t\t\t\t\tThree distinct melody generation algorithms were\n\t\t\t\t\t\timplemented using Python:\n\t\t\t\t\t\t

      \n\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\ta. randomAttempt(): Generated a list of random\n\t\t\t\t\t\t\tnotes, independent of any scale constraints.\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\tb. diatonicAttempt(): Generated a list of random\n\t\t\t\t\t\t\tnotes confined to the major scale.\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\tc. smartAttempt(): Generated a list of notes that\n\t\t\t\t\t\t\tprioritized the selection of more common mumes\n\t\t\t\t\t\t\tidentified in the pattern extraction stage.\n\t\t\t\t\t\t
    \n\t\t\t\t\t\tFor each algorithm, 100,000 melodies were generated and\n\t\t\t\t\t\tsubsequently scored based on their similarity to the\n\t\t\t\t\t\tcorpus. The scoring system utilized a multiplying\n\t\t\t\t\t\tprinciple, wherein the occurrence frequency of each mume\n\t\t\t\t\t\tin a melody was divided by the average occurrence\n\t\t\t\t\t\tfrequency across all patterns. The final score was the\n\t\t\t\t\t\tproduct of these values for all mumes in the melody.\n\t\t\t\t\t

    \n\t\t\t\t
  4. \n\t\t\t\t
  5. \n\t\t\t\t\t{\" \"}\n\t\t\t\t\tEvaluation:\n\t\t\t\t\t

    \n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\tThree representative melodies from each\n\t\t\t\t\t\talgorithm—randomAttempt, diatonicAttempt, and\n\t\t\t\t\t\tsmartAttempt—were chosen at the 50th percentile of their\n\t\t\t\t\t\trespective scores. A panel of six musicians, blinded to\n\t\t\t\t\t\tthe origin of each melody, ranked the melodies based on\n\t\t\t\t\t\ttheir perceived naturalness. The results were analyzed\n\t\t\t\t\t\tto assess the success of JAMI in generating melodies\n\t\t\t\t\t\tthat emulate the naturalness of existing compositions.\n\t\t\t\t\t

    \n\t\t\t\t
  6. \n\t\t\t\t
  7. \n\t\t\t\t\t{\" \"}\n\t\t\t\t\tReport Generation using GPT-4:\n\t\t\t\t\t

    \n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\tTo synthesize the findings and insights gathered\n\t\t\t\t\t\tthroughout the research process, the GPT-4 language\n\t\t\t\t\t\tmodel, under the supervision of the primary researcher,\n\t\t\t\t\t\twas employed to generate an academic research report\n\t\t\t\t\t\tutilizing the researcher's notes, which documented the\n\t\t\t\t\t\tproject's progression and key developments.\n\t\t\t\t\t

    \n\t\t\t\t
  8. \n\t\t\t
\n\t\t\t

Results

\n\t\t\t

\n\t\t\t\tThe AI-driven program was assessed through the creation of three\n\t\t\t\tsets of 100,000 tunes, with each set employing a different\n\t\t\t\talgorithm for melody generation: random, diatonic, and\n\t\t\t\tpattern-based. The evaluation of the melodies entailed selecting\n\t\t\t\tthe median-ranked (50th percentile) tune from each set, ensuring\n\t\t\t\ta representative sample devoid of extreme outliers. These tunes\n\t\t\t\twere then presented to a cohort of six experienced musicians\n\t\t\t\twho, unaware of the algorithmic origins of each melody, were\n\t\t\t\tasked to rank them based on their perceived musical quality. The\n\t\t\t\tunanimous consensus among the musicians (p = 0.016) was that the\n\t\t\t\tmelody generated by the AI program, which leveraged patterns\n\t\t\t\tderived from the database of analyzed music, was superior to the\n\t\t\t\tother two melodies.\n\t\t\t

\n\t\t
\n\t);\n};\n\nexport default JAMIContent;\n","import React from \"react\";\nimport JAMIContent from \"../components/JAMIContent\";\nimport Page from \"../components/Page\";\n\nconst JAMIPage = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default JAMIPage;\n","import * as React from 'react';\nexport var ManagerReferenceNodeContext = React.createContext();\nexport var ManagerReferenceNodeSetterContext = React.createContext();\nexport function Manager(_ref) {\n var children = _ref.children;\n\n var _React$useState = React.useState(null),\n referenceNode = _React$useState[0],\n setReferenceNode = _React$useState[1];\n\n var hasUnmounted = React.useRef(false);\n React.useEffect(function () {\n return function () {\n hasUnmounted.current = true;\n };\n }, []);\n var handleSetReferenceNode = React.useCallback(function (node) {\n if (!hasUnmounted.current) {\n setReferenceNode(node);\n }\n }, []);\n return /*#__PURE__*/React.createElement(ManagerReferenceNodeContext.Provider, {\n value: referenceNode\n }, /*#__PURE__*/React.createElement(ManagerReferenceNodeSetterContext.Provider, {\n value: handleSetReferenceNode\n }, children));\n}","import React from 'react';\n\n/**\n * DropdownContext\n * {\n * toggle: PropTypes.func.isRequired,\n * isOpen: PropTypes.bool.isRequired,\n * direction: PropTypes.oneOf(['up', 'down', 'start', 'end']).isRequired,\n * inNavbar: PropTypes.bool.isRequired,\n * disabled: PropTypes.bool\n * }\n */\nexport var DropdownContext = /*#__PURE__*/React.createContext({});","import React from 'react';\nexport var InputGroupContext = /*#__PURE__*/React.createContext({});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"direction\", \"isOpen\", \"group\", \"size\", \"nav\", \"setActiveFromChild\", \"active\", \"tag\", \"menuRole\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/* eslint react/no-find-dom-node: 0 */\n// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Manager } from 'react-popper';\nimport classNames from 'classnames';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, omit, keyCodes, tagPropType } from './utils';\nimport { InputGroupContext } from './InputGroupContext';\nvar propTypes = {\n a11y: PropTypes.bool,\n disabled: PropTypes.bool,\n direction: PropTypes.oneOf(['up', 'down', 'start', 'end', 'left', 'right']),\n group: PropTypes.bool,\n isOpen: PropTypes.bool,\n nav: PropTypes.bool,\n active: PropTypes.bool,\n size: PropTypes.string,\n tag: tagPropType,\n toggle: PropTypes.func,\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n dropup: PropTypes.bool,\n inNavbar: PropTypes.bool,\n setActiveFromChild: PropTypes.bool,\n menuRole: PropTypes.oneOf(['listbox', 'menu'])\n};\nvar defaultProps = {\n a11y: true,\n isOpen: false,\n direction: 'down',\n nav: false,\n active: false,\n inNavbar: false,\n setActiveFromChild: false\n};\nvar preventDefaultKeys = [keyCodes.space, keyCodes.enter, keyCodes.up, keyCodes.down, keyCodes.end, keyCodes.home];\nvar Dropdown = /*#__PURE__*/function (_React$Component) {\n _inherits(Dropdown, _React$Component);\n var _super = _createSuper(Dropdown);\n function Dropdown(props) {\n var _this;\n _classCallCheck(this, Dropdown);\n _this = _super.call(this, props);\n _this.addEvents = _this.addEvents.bind(_assertThisInitialized(_this));\n _this.handleDocumentClick = _this.handleDocumentClick.bind(_assertThisInitialized(_this));\n _this.handleKeyDown = _this.handleKeyDown.bind(_assertThisInitialized(_this));\n _this.removeEvents = _this.removeEvents.bind(_assertThisInitialized(_this));\n _this.toggle = _this.toggle.bind(_assertThisInitialized(_this));\n _this.handleMenuRef = _this.handleMenuRef.bind(_assertThisInitialized(_this));\n _this.handleToggleRef = _this.handleToggleRef.bind(_assertThisInitialized(_this));\n _this.containerRef = /*#__PURE__*/React.createRef();\n _this.menuRef = /*#__PURE__*/React.createRef();\n _this.toggleRef = /*#__PURE__*/React.createRef();\n // ref for DropdownToggle\n return _this;\n }\n _createClass(Dropdown, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.handleProps();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (this.props.isOpen !== prevProps.isOpen) {\n this.handleProps();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.removeEvents();\n }\n }, {\n key: \"handleMenuRef\",\n value: function handleMenuRef(menuRef) {\n this.menuRef.current = menuRef;\n }\n }, {\n key: \"handleToggleRef\",\n value: function handleToggleRef(toggleRef) {\n this.toggleRef.current = toggleRef;\n }\n }, {\n key: \"handleDocumentClick\",\n value: function handleDocumentClick(e) {\n if (e && (e.which === 3 || e.type === 'keyup' && e.which !== keyCodes.tab)) return;\n var container = this.getContainer();\n var menu = this.getMenu();\n var toggle = this.getToggle();\n var targetIsToggle = toggle.contains(e.target);\n var clickIsInMenu = menu && menu.contains(e.target) && menu !== e.target;\n var clickIsInInput = false;\n if (container) {\n // this is only for InputGroup with type dropdown\n clickIsInInput = container.classList.contains('input-group') && container.classList.contains('dropdown') && e.target.tagName === 'INPUT';\n }\n if ((targetIsToggle && !clickIsInInput || clickIsInMenu) && (e.type !== 'keyup' || e.which === keyCodes.tab)) {\n return;\n }\n this.toggle(e);\n }\n }, {\n key: \"handleKeyDown\",\n value: function handleKeyDown(e) {\n var _this2 = this;\n var isTargetMenuItem = e.target.getAttribute('role') === 'menuitem' || e.target.getAttribute('role') === 'option';\n var isTargetMenuCtrl = this.getMenuCtrl() === e.target;\n var isTab = keyCodes.tab === e.which;\n if (/input|textarea/i.test(e.target.tagName) || isTab && !this.props.a11y || isTab && !(isTargetMenuItem || isTargetMenuCtrl)) {\n return;\n }\n if (preventDefaultKeys.indexOf(e.which) !== -1 || e.which >= 48 && e.which <= 90) {\n e.preventDefault();\n }\n if (this.props.disabled) return;\n if (isTargetMenuCtrl) {\n if ([keyCodes.space, keyCodes.enter, keyCodes.up, keyCodes.down].indexOf(e.which) > -1) {\n // Open the menu (if not open) and focus the first menu item\n if (!this.props.isOpen) {\n this.toggle(e);\n }\n setTimeout(function () {\n var _this2$getMenuItems$;\n return (_this2$getMenuItems$ = _this2.getMenuItems()[0]) === null || _this2$getMenuItems$ === void 0 ? void 0 : _this2$getMenuItems$.focus();\n });\n } else if (this.props.isOpen && isTab) {\n var _this$getMenuItems$;\n // Focus the first menu item if tabbing from an open menu. We need this\n // for cases where the DropdownMenu sets a custom container, which may\n // not be the natural next item to tab to from the DropdownToggle.\n e.preventDefault();\n (_this$getMenuItems$ = this.getMenuItems()[0]) === null || _this$getMenuItems$ === void 0 ? void 0 : _this$getMenuItems$.focus();\n } else if (this.props.isOpen && e.which === keyCodes.esc) {\n this.toggle(e);\n }\n }\n if (this.props.isOpen && isTargetMenuItem) {\n if ([keyCodes.tab, keyCodes.esc].indexOf(e.which) > -1) {\n this.toggle(e);\n this.getMenuCtrl().focus();\n } else if ([keyCodes.space, keyCodes.enter].indexOf(e.which) > -1) {\n e.target.click();\n this.getMenuCtrl().focus();\n } else if ([keyCodes.down, keyCodes.up].indexOf(e.which) > -1 || [keyCodes.n, keyCodes.p].indexOf(e.which) > -1 && e.ctrlKey) {\n var $menuitems = this.getMenuItems();\n var index = $menuitems.indexOf(e.target);\n if (keyCodes.up === e.which || keyCodes.p === e.which && e.ctrlKey) {\n index = index !== 0 ? index - 1 : $menuitems.length - 1;\n } else if (keyCodes.down === e.which || keyCodes.n === e.which && e.ctrlKey) {\n index = index === $menuitems.length - 1 ? 0 : index + 1;\n }\n $menuitems[index].focus();\n } else if (keyCodes.end === e.which) {\n var _$menuitems = this.getMenuItems();\n _$menuitems[_$menuitems.length - 1].focus();\n } else if (keyCodes.home === e.which) {\n var _$menuitems2 = this.getMenuItems();\n _$menuitems2[0].focus();\n } else if (e.which >= 48 && e.which <= 90) {\n var _$menuitems3 = this.getMenuItems();\n var charPressed = String.fromCharCode(e.which).toLowerCase();\n for (var i = 0; i < _$menuitems3.length; i += 1) {\n var firstLetter = _$menuitems3[i].textContent && _$menuitems3[i].textContent[0].toLowerCase();\n if (firstLetter === charPressed) {\n _$menuitems3[i].focus();\n break;\n }\n }\n }\n }\n }\n }, {\n key: \"handleProps\",\n value: function handleProps() {\n if (this.props.isOpen) {\n this.addEvents();\n } else {\n this.removeEvents();\n }\n }\n }, {\n key: \"getContextValue\",\n value: function getContextValue() {\n return {\n toggle: this.toggle,\n isOpen: this.props.isOpen,\n direction: this.props.direction === 'down' && this.props.dropup ? 'up' : this.props.direction,\n inNavbar: this.props.inNavbar,\n disabled: this.props.disabled,\n // Callback that should be called by DropdownMenu to provide a ref to\n // a HTML tag that's used for the DropdownMenu\n onMenuRef: this.handleMenuRef,\n onToggleRef: this.handleToggleRef,\n menuRole: this.props.menuRole\n };\n }\n }, {\n key: \"getContainer\",\n value: function getContainer() {\n return this.containerRef.current;\n }\n }, {\n key: \"getMenu\",\n value: function getMenu() {\n return this.menuRef.current;\n }\n }, {\n key: \"getToggle\",\n value: function getToggle() {\n return this.toggleRef.current;\n }\n }, {\n key: \"getMenuCtrl\",\n value: function getMenuCtrl() {\n if (this._$menuCtrl) return this._$menuCtrl;\n this._$menuCtrl = this.getToggle();\n return this._$menuCtrl;\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n if (this.props.menuRole === 'listbox') {\n return 'option';\n }\n return 'menuitem';\n }\n }, {\n key: \"getMenuItems\",\n value: function getMenuItems() {\n // In a real menu with a child DropdownMenu, `this.getMenu()` should never\n // be null, but it is sometimes null in tests. To mitigate that, we just\n // use `this.getContainer()` as the fallback `menuContainer`.\n var menuContainer = this.getMenu() || this.getContainer();\n return [].slice.call(menuContainer.querySelectorAll(\"[role=\\\"\".concat(this.getItemType(), \"\\\"]\")));\n }\n }, {\n key: \"addEvents\",\n value: function addEvents() {\n var _this3 = this;\n ['click', 'touchstart', 'keyup'].forEach(function (event) {\n return document.addEventListener(event, _this3.handleDocumentClick, true);\n });\n }\n }, {\n key: \"removeEvents\",\n value: function removeEvents() {\n var _this4 = this;\n ['click', 'touchstart', 'keyup'].forEach(function (event) {\n return document.removeEventListener(event, _this4.handleDocumentClick, true);\n });\n }\n }, {\n key: \"toggle\",\n value: function toggle(e) {\n if (this.props.disabled) {\n return e && e.preventDefault();\n }\n return this.props.toggle(e);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _classNames,\n _this5 = this;\n var _omit = omit(this.props, ['toggle', 'disabled', 'inNavbar', 'a11y']),\n className = _omit.className,\n cssModule = _omit.cssModule,\n direction = _omit.direction,\n isOpen = _omit.isOpen,\n group = _omit.group,\n size = _omit.size,\n nav = _omit.nav,\n setActiveFromChild = _omit.setActiveFromChild,\n active = _omit.active,\n tag = _omit.tag,\n menuRole = _omit.menuRole,\n attrs = _objectWithoutProperties(_omit, _excluded);\n var Tag = tag || (nav ? 'li' : 'div');\n var subItemIsActive = false;\n if (setActiveFromChild) {\n React.Children.map(this.props.children[1].props.children, function (dropdownItem) {\n if (dropdownItem && dropdownItem.props.active) subItemIsActive = true;\n });\n }\n var classes = mapToCssModules(classNames(className, nav && active ? 'active' : false, setActiveFromChild && subItemIsActive ? 'active' : false, (_classNames = {\n 'btn-group': group\n }, _defineProperty(_classNames, \"btn-group-\".concat(size), !!size), _defineProperty(_classNames, \"dropdown\", !group), _defineProperty(_classNames, \"dropup\", direction === 'up'), _defineProperty(_classNames, \"dropstart\", direction === 'start' || direction === 'left'), _defineProperty(_classNames, \"dropend\", direction === 'end' || direction === 'right'), _defineProperty(_classNames, \"show\", isOpen), _defineProperty(_classNames, 'nav-item', nav), _classNames)), cssModule);\n if (this.context.insideInputGroup) {\n return /*#__PURE__*/React.createElement(DropdownContext.Provider, {\n value: this.getContextValue()\n }, /*#__PURE__*/React.createElement(Manager, null, React.Children.map(this.props.children, function (child) {\n return /*#__PURE__*/React.cloneElement(child, {\n onKeyDown: _this5.handleKeyDown\n });\n })));\n }\n return /*#__PURE__*/React.createElement(DropdownContext.Provider, {\n value: this.getContextValue()\n }, /*#__PURE__*/React.createElement(Manager, null, /*#__PURE__*/React.createElement(Tag, _extends({}, attrs, _defineProperty({}, typeof Tag === 'string' ? 'ref' : 'innerRef', this.containerRef), {\n onKeyDown: this.handleKeyDown,\n className: classes\n }))));\n }\n }]);\n return Dropdown;\n}(React.Component);\nDropdown.propTypes = propTypes;\nDropdown.defaultProps = defaultProps;\nDropdown.contextType = InputGroupContext;\nexport default Dropdown;","import * as React from 'react';\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n return Array.isArray(arg) ? arg[0] : arg;\n};\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\n\nexport var safeInvoke = function safeInvoke(fn) {\n if (typeof fn === 'function') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return fn.apply(void 0, args);\n }\n};\n/**\n * Sets a ref using either a ref callback or a ref object\n */\n\nexport var setRef = function setRef(ref, node) {\n // if its a function call it\n if (typeof ref === 'function') {\n return safeInvoke(ref, node);\n } // otherwise we should treat it as a ref object\n else if (ref != null) {\n ref.current = node;\n }\n};\n/**\n * Simple ponyfill for Object.fromEntries\n */\n\nexport var fromEntries = function fromEntries(entries) {\n return entries.reduce(function (acc, _ref) {\n var key = _ref[0],\n value = _ref[1];\n acc[key] = value;\n return acc;\n }, {});\n};\n/**\n * Small wrapper around `useLayoutEffect` to get rid of the warning on SSR envs\n */\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && window.document && window.document.createElement ? React.useLayoutEffect : React.useEffect;","import * as React from 'react';\nimport warning from 'warning';\nimport { ManagerReferenceNodeSetterContext } from './Manager';\nimport { safeInvoke, unwrapArray, setRef } from './utils';\nexport function Reference(_ref) {\n var children = _ref.children,\n innerRef = _ref.innerRef;\n var setReferenceNode = React.useContext(ManagerReferenceNodeSetterContext);\n var refHandler = React.useCallback(function (node) {\n setRef(innerRef, node);\n safeInvoke(setReferenceNode, node);\n }, [innerRef, setReferenceNode]); // ran on unmount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n\n React.useEffect(function () {\n return function () {\n return setRef(innerRef, null);\n };\n }, []);\n React.useEffect(function () {\n warning(Boolean(setReferenceNode), '`Reference` should not be used outside of a `Manager` component.');\n }, [setReferenceNode]);\n return unwrapArray(children)({\n ref: refHandler\n });\n}","var _excluded = [\"className\", \"cssModule\", \"variant\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\nvar propTypes = {\n /** Disable the button if needed */\n active: PropTypes.bool,\n /** Aria label */\n 'aria-label': PropTypes.string,\n /** Function to be triggered on click */\n onClick: PropTypes.func,\n /** Change the variant to white */\n variant: PropTypes.oneOf(['white']),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n};\nfunction CloseButton(props) {\n var className = props.className,\n cssModule = props.cssModule,\n variant = props.variant,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'btn-close', variant && \"btn-close-\".concat(variant)));\n return /*#__PURE__*/React.createElement(\"button\", _extends({\n ref: innerRef,\n type: \"button\",\n className: classes\n }, _objectSpread({\n 'aria-label': 'close'\n }, attributes)));\n}\nCloseButton.propTypes = propTypes;\nexport default CloseButton;","var _excluded = [\"active\", \"aria-label\", \"block\", \"className\", \"close\", \"cssModule\", \"color\", \"outline\", \"size\", \"tag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nimport CloseButton from './CloseButton';\nvar propTypes = {\n /** Manually set the visual state of the button to active */\n active: PropTypes.bool,\n /** Aria label */\n 'aria-label': PropTypes.string,\n block: PropTypes.bool,\n /** Pass children so this component can wrap them */\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Change existing className with a new className */\n cssModule: PropTypes.object,\n /** Use the button as a close button */\n close: PropTypes.bool,\n /** Change color of Button to one of the available colors */\n color: PropTypes.string,\n /** Disables the button */\n disabled: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n /** Function to be triggered on click */\n onClick: PropTypes.func,\n /** Adds outline to the button */\n outline: PropTypes.bool,\n /** Make the button bigger or smaller */\n size: PropTypes.string,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction Button(props) {\n var onClick = useCallback(function (e) {\n if (props.disabled) {\n e.preventDefault();\n return;\n }\n if (props.onClick) {\n return props.onClick(e);\n }\n }, [props.onClick, props.disabled]);\n var active = props.active,\n ariaLabel = props['aria-label'],\n block = props.block,\n className = props.className,\n close = props.close,\n cssModule = props.cssModule,\n _props$color = props.color,\n color = _props$color === void 0 ? 'secondary' : _props$color,\n outline = props.outline,\n size = props.size,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'button' : _props$tag,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n if (close) {\n return /*#__PURE__*/React.createElement(CloseButton, attributes);\n }\n var btnOutlineColor = \"btn\".concat(outline ? '-outline' : '', \"-\").concat(color);\n var classes = mapToCssModules(classNames(className, 'btn', btnOutlineColor, size ? \"btn-\".concat(size) : false, block ? 'd-block w-100' : false, {\n active: active,\n disabled: props.disabled\n }), cssModule);\n if (attributes.href && Tag === 'button') {\n Tag = 'a';\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n type: Tag === 'button' && attributes.onClick ? 'button' : undefined\n }, attributes, {\n className: classes,\n ref: innerRef,\n onClick: onClick,\n \"aria-label\": ariaLabel\n }));\n}\nButton.propTypes = propTypes;\nexport default Button;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"color\", \"cssModule\", \"caret\", \"split\", \"nav\", \"tag\", \"innerRef\"];\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Reference } from 'react-popper';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, tagPropType } from './utils';\nimport Button from './Button';\nvar propTypes = {\n caret: PropTypes.bool,\n color: PropTypes.string,\n children: PropTypes.node,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n 'aria-haspopup': PropTypes.bool,\n split: PropTypes.bool,\n tag: tagPropType,\n nav: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n};\nvar defaultProps = {\n color: 'secondary',\n 'aria-haspopup': true\n};\nvar DropdownToggle = /*#__PURE__*/function (_React$Component) {\n _inherits(DropdownToggle, _React$Component);\n var _super = _createSuper(DropdownToggle);\n function DropdownToggle(props) {\n var _this;\n _classCallCheck(this, DropdownToggle);\n _this = _super.call(this, props);\n _this.onClick = _this.onClick.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(DropdownToggle, [{\n key: \"onClick\",\n value: function onClick(e) {\n if (this.props.disabled || this.context.disabled) {\n e.preventDefault();\n return;\n }\n if (this.props.nav && !this.props.tag) {\n e.preventDefault();\n }\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n this.context.toggle(e);\n }\n }, {\n key: \"getRole\",\n value: function getRole() {\n return this.context.menuRole || this.props['aria-haspopup'];\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var _this$props = this.props,\n className = _this$props.className,\n color = _this$props.color,\n cssModule = _this$props.cssModule,\n caret = _this$props.caret,\n split = _this$props.split,\n nav = _this$props.nav,\n tag = _this$props.tag,\n innerRef = _this$props.innerRef,\n props = _objectWithoutProperties(_this$props, _excluded);\n var ariaLabel = props['aria-label'] || 'Toggle Dropdown';\n var classes = mapToCssModules(classNames(className, {\n 'dropdown-toggle': caret || split,\n 'dropdown-toggle-split': split,\n 'nav-link': nav\n }), cssModule);\n var children = typeof props.children !== 'undefined' ? props.children : /*#__PURE__*/React.createElement(\"span\", {\n className: \"visually-hidden\"\n }, ariaLabel);\n var Tag;\n if (nav && !tag) {\n Tag = 'a';\n props.href = '#';\n } else if (!tag) {\n Tag = Button;\n props.color = color;\n props.cssModule = cssModule;\n } else {\n Tag = tag;\n }\n if (this.context.inNavbar) {\n return /*#__PURE__*/React.createElement(Tag, _extends({}, props, {\n className: classes,\n onClick: this.onClick,\n ref: this.context.onToggleRef,\n \"aria-expanded\": this.context.isOpen,\n \"aria-haspopup\": this.getRole(),\n children: children\n }));\n }\n return /*#__PURE__*/React.createElement(Reference, {\n innerRef: innerRef\n }, function (_ref) {\n var ref = _ref.ref;\n var handleRef = function handleRef(tagRef) {\n ref(tagRef);\n var onToggleRef = _this2.context.onToggleRef;\n if (onToggleRef) onToggleRef(tagRef);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({}, props, _defineProperty({}, typeof Tag === 'string' ? 'ref' : 'innerRef', handleRef), {\n className: classes,\n onClick: _this2.onClick,\n \"aria-expanded\": _this2.context.isOpen,\n \"aria-haspopup\": _this2.getRole(),\n children: children\n }));\n });\n }\n }]);\n return DropdownToggle;\n}(React.Component);\nDropdownToggle.propTypes = propTypes;\nDropdownToggle.defaultProps = defaultProps;\nDropdownToggle.contextType = DropdownContext;\nexport default DropdownToggle;","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createPopper as defaultCreatePopper } from '@popperjs/core';\nimport isEqual from 'react-fast-compare';\nimport { fromEntries, useIsomorphicLayoutEffect } from './utils';\nvar EMPTY_MODIFIERS = [];\nexport var usePopper = function usePopper(referenceElement, popperElement, options) {\n if (options === void 0) {\n options = {};\n }\n\n var prevOptions = React.useRef(null);\n var optionsWithDefaults = {\n onFirstUpdate: options.onFirstUpdate,\n placement: options.placement || 'bottom',\n strategy: options.strategy || 'absolute',\n modifiers: options.modifiers || EMPTY_MODIFIERS\n };\n\n var _React$useState = React.useState({\n styles: {\n popper: {\n position: optionsWithDefaults.strategy,\n left: '0',\n top: '0'\n },\n arrow: {\n position: 'absolute'\n }\n },\n attributes: {}\n }),\n state = _React$useState[0],\n setState = _React$useState[1];\n\n var updateStateModifier = React.useMemo(function () {\n return {\n name: 'updateState',\n enabled: true,\n phase: 'write',\n fn: function fn(_ref) {\n var state = _ref.state;\n var elements = Object.keys(state.elements);\n ReactDOM.flushSync(function () {\n setState({\n styles: fromEntries(elements.map(function (element) {\n return [element, state.styles[element] || {}];\n })),\n attributes: fromEntries(elements.map(function (element) {\n return [element, state.attributes[element]];\n }))\n });\n });\n },\n requires: ['computeStyles']\n };\n }, []);\n var popperOptions = React.useMemo(function () {\n var newOptions = {\n onFirstUpdate: optionsWithDefaults.onFirstUpdate,\n placement: optionsWithDefaults.placement,\n strategy: optionsWithDefaults.strategy,\n modifiers: [].concat(optionsWithDefaults.modifiers, [updateStateModifier, {\n name: 'applyStyles',\n enabled: false\n }])\n };\n\n if (isEqual(prevOptions.current, newOptions)) {\n return prevOptions.current || newOptions;\n } else {\n prevOptions.current = newOptions;\n return newOptions;\n }\n }, [optionsWithDefaults.onFirstUpdate, optionsWithDefaults.placement, optionsWithDefaults.strategy, optionsWithDefaults.modifiers, updateStateModifier]);\n var popperInstanceRef = React.useRef();\n useIsomorphicLayoutEffect(function () {\n if (popperInstanceRef.current) {\n popperInstanceRef.current.setOptions(popperOptions);\n }\n }, [popperOptions]);\n useIsomorphicLayoutEffect(function () {\n if (referenceElement == null || popperElement == null) {\n return;\n }\n\n var createPopper = options.createPopper || defaultCreatePopper;\n var popperInstance = createPopper(referenceElement, popperElement, popperOptions);\n popperInstanceRef.current = popperInstance;\n return function () {\n popperInstance.destroy();\n popperInstanceRef.current = null;\n };\n }, [referenceElement, popperElement, options.createPopper]);\n return {\n state: popperInstanceRef.current ? popperInstanceRef.current.state : null,\n styles: state.styles,\n attributes: state.attributes,\n update: popperInstanceRef.current ? popperInstanceRef.current.update : null,\n forceUpdate: popperInstanceRef.current ? popperInstanceRef.current.forceUpdate : null\n };\n};","import * as React from 'react';\nimport { ManagerReferenceNodeContext } from './Manager';\nimport { unwrapArray, setRef } from './utils';\nimport { usePopper } from './usePopper';\n\nvar NOOP = function NOOP() {\n return void 0;\n};\n\nvar NOOP_PROMISE = function NOOP_PROMISE() {\n return Promise.resolve(null);\n};\n\nvar EMPTY_MODIFIERS = [];\nexport function Popper(_ref) {\n var _ref$placement = _ref.placement,\n placement = _ref$placement === void 0 ? 'bottom' : _ref$placement,\n _ref$strategy = _ref.strategy,\n strategy = _ref$strategy === void 0 ? 'absolute' : _ref$strategy,\n _ref$modifiers = _ref.modifiers,\n modifiers = _ref$modifiers === void 0 ? EMPTY_MODIFIERS : _ref$modifiers,\n referenceElement = _ref.referenceElement,\n onFirstUpdate = _ref.onFirstUpdate,\n innerRef = _ref.innerRef,\n children = _ref.children;\n var referenceNode = React.useContext(ManagerReferenceNodeContext);\n\n var _React$useState = React.useState(null),\n popperElement = _React$useState[0],\n setPopperElement = _React$useState[1];\n\n var _React$useState2 = React.useState(null),\n arrowElement = _React$useState2[0],\n setArrowElement = _React$useState2[1];\n\n React.useEffect(function () {\n setRef(innerRef, popperElement);\n }, [innerRef, popperElement]);\n var options = React.useMemo(function () {\n return {\n placement: placement,\n strategy: strategy,\n onFirstUpdate: onFirstUpdate,\n modifiers: [].concat(modifiers, [{\n name: 'arrow',\n enabled: arrowElement != null,\n options: {\n element: arrowElement\n }\n }])\n };\n }, [placement, strategy, onFirstUpdate, modifiers, arrowElement]);\n\n var _usePopper = usePopper(referenceElement || referenceNode, popperElement, options),\n state = _usePopper.state,\n styles = _usePopper.styles,\n forceUpdate = _usePopper.forceUpdate,\n update = _usePopper.update;\n\n var childrenProps = React.useMemo(function () {\n return {\n ref: setPopperElement,\n style: styles.popper,\n placement: state ? state.placement : placement,\n hasPopperEscaped: state && state.modifiersData.hide ? state.modifiersData.hide.hasPopperEscaped : null,\n isReferenceHidden: state && state.modifiersData.hide ? state.modifiersData.hide.isReferenceHidden : null,\n arrowProps: {\n style: styles.arrow,\n ref: setArrowElement\n },\n forceUpdate: forceUpdate || NOOP,\n update: update || NOOP_PROMISE\n };\n }, [setPopperElement, setArrowElement, placement, state, styles, update, forceUpdate]);\n return unwrapArray(children)(childrenProps);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"dark\", \"end\", \"right\", \"tag\", \"flip\", \"modifiers\", \"persist\", \"strategy\", \"container\", \"updateOnSelect\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { Popper } from 'react-popper';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, tagPropType, targetPropType, getTarget, deprecated } from './utils';\nvar propTypes = {\n tag: tagPropType,\n children: PropTypes.node.isRequired,\n dark: PropTypes.bool,\n end: PropTypes.bool,\n /** Flips the menu to the opposite side if there is not enough space to fit */\n flip: PropTypes.bool,\n modifiers: PropTypes.array,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n style: PropTypes.object,\n persist: PropTypes.bool,\n strategy: PropTypes.string,\n container: targetPropType,\n /** Update popper layout when a click event comes up. This leverages event bubbling. */\n updateOnSelect: PropTypes.bool,\n right: deprecated(PropTypes.bool, 'Please use \"end\" instead.')\n};\nvar directionPositionMap = {\n up: 'top',\n left: 'left',\n right: 'right',\n start: 'left',\n end: 'right',\n down: 'bottom'\n};\nvar DropdownMenu = /*#__PURE__*/function (_React$Component) {\n _inherits(DropdownMenu, _React$Component);\n var _super = _createSuper(DropdownMenu);\n function DropdownMenu() {\n _classCallCheck(this, DropdownMenu);\n return _super.apply(this, arguments);\n }\n _createClass(DropdownMenu, [{\n key: \"getRole\",\n value: function getRole() {\n if (this.context.menuRole === 'listbox') {\n return 'listbox';\n }\n return 'menu';\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this = this;\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n dark = _this$props.dark,\n end = _this$props.end,\n right = _this$props.right,\n _this$props$tag = _this$props.tag,\n tag = _this$props$tag === void 0 ? 'div' : _this$props$tag,\n _this$props$flip = _this$props.flip,\n flip = _this$props$flip === void 0 ? true : _this$props$flip,\n _this$props$modifiers = _this$props.modifiers,\n modifiers = _this$props$modifiers === void 0 ? [] : _this$props$modifiers,\n persist = _this$props.persist,\n strategy = _this$props.strategy,\n container = _this$props.container,\n updateOnSelect = _this$props.updateOnSelect,\n attrs = _objectWithoutProperties(_this$props, _excluded);\n var classes = mapToCssModules(classNames(className, 'dropdown-menu', {\n 'dropdown-menu-dark': dark,\n 'dropdown-menu-end': end || right,\n show: this.context.isOpen\n }), cssModule);\n var Tag = tag;\n if (persist || this.context.isOpen && !this.context.inNavbar) {\n var position1 = directionPositionMap[this.context.direction] || 'bottom';\n var position2 = end || right ? 'end' : 'start';\n var poperPlacement = \"\".concat(position1, \"-\").concat(position2);\n var poperModifiers = [].concat(_toConsumableArray(modifiers), [{\n name: 'flip',\n enabled: !!flip\n }]);\n var popper = /*#__PURE__*/React.createElement(Popper, {\n placement: poperPlacement,\n modifiers: poperModifiers,\n strategy: strategy\n }, function (_ref) {\n var ref = _ref.ref,\n style = _ref.style,\n placement = _ref.placement,\n update = _ref.update;\n var combinedStyle = _objectSpread(_objectSpread({}, _this.props.style), style);\n var handleRef = function handleRef(tagRef) {\n // Send the ref to `react-popper`\n ref(tagRef);\n // Send the ref to the parent Dropdown so that clicks outside\n // it will cause it to close\n var onMenuRef = _this.context.onMenuRef;\n if (onMenuRef) onMenuRef(tagRef);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({\n tabIndex: \"-1\",\n role: _this.getRole(),\n ref: handleRef\n }, attrs, {\n style: combinedStyle,\n \"aria-hidden\": !_this.context.isOpen,\n className: classes,\n \"data-popper-placement\": placement,\n onClick: function onClick() {\n return updateOnSelect && update();\n }\n }));\n });\n if (container) {\n return /*#__PURE__*/ReactDOM.createPortal(popper, getTarget(container));\n }\n return popper;\n }\n var onMenuRef = this.context.onMenuRef;\n return /*#__PURE__*/React.createElement(Tag, _extends({\n tabIndex: \"-1\",\n role: this.getRole()\n }, attrs, {\n ref: onMenuRef,\n \"aria-hidden\": !this.context.isOpen,\n className: classes,\n \"data-popper-placement\": attrs.placement\n }));\n }\n }]);\n return DropdownMenu;\n}(React.Component);\nDropdownMenu.propTypes = propTypes;\nDropdownMenu.contextType = DropdownContext;\nexport default DropdownMenu;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"divider\", \"tag\", \"header\", \"active\", \"text\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { DropdownContext } from './DropdownContext';\nimport { mapToCssModules, omit, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n active: PropTypes.bool,\n disabled: PropTypes.bool,\n divider: PropTypes.bool,\n tag: tagPropType,\n header: PropTypes.bool,\n onClick: PropTypes.func,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n toggle: PropTypes.bool,\n text: PropTypes.bool\n};\nvar DropdownItem = /*#__PURE__*/function (_React$Component) {\n _inherits(DropdownItem, _React$Component);\n var _super = _createSuper(DropdownItem);\n function DropdownItem(props) {\n var _this;\n _classCallCheck(this, DropdownItem);\n _this = _super.call(this, props);\n _this.onClick = _this.onClick.bind(_assertThisInitialized(_this));\n _this.getTabIndex = _this.getTabIndex.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(DropdownItem, [{\n key: \"onClick\",\n value: function onClick(e) {\n var _this$props$toggle;\n var _this$props = this.props,\n disabled = _this$props.disabled,\n header = _this$props.header,\n divider = _this$props.divider,\n text = _this$props.text;\n if (disabled || header || divider || text) {\n e.preventDefault();\n return;\n }\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n if ((_this$props$toggle = this.props.toggle) !== null && _this$props$toggle !== void 0 ? _this$props$toggle : true) {\n this.context.toggle(e);\n }\n }\n }, {\n key: \"getRole\",\n value: function getRole() {\n if (this.context.menuRole === 'listbox') {\n return 'option';\n }\n return 'menuitem';\n }\n }, {\n key: \"getTabIndex\",\n value: function getTabIndex() {\n var _this$props2 = this.props,\n disabled = _this$props2.disabled,\n header = _this$props2.header,\n divider = _this$props2.divider,\n text = _this$props2.text;\n if (disabled || header || divider || text) {\n return '-1';\n }\n return '0';\n }\n }, {\n key: \"render\",\n value: function render() {\n var tabIndex = this.getTabIndex();\n var role = tabIndex > -1 ? this.getRole() : undefined;\n var _omit = omit(this.props, ['toggle']),\n className = _omit.className,\n cssModule = _omit.cssModule,\n divider = _omit.divider,\n _omit$tag = _omit.tag,\n Tag = _omit$tag === void 0 ? 'button' : _omit$tag,\n header = _omit.header,\n active = _omit.active,\n text = _omit.text,\n props = _objectWithoutProperties(_omit, _excluded);\n var classes = mapToCssModules(classNames(className, {\n disabled: props.disabled,\n 'dropdown-item': !divider && !header && !text,\n active: active,\n 'dropdown-header': header,\n 'dropdown-divider': divider,\n 'dropdown-item-text': text\n }), cssModule);\n if (Tag === 'button') {\n if (header) {\n Tag = 'h6';\n } else if (divider) {\n Tag = 'div';\n } else if (props.href) {\n Tag = 'a';\n } else if (text) {\n Tag = 'span';\n }\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n type: Tag === 'button' && (props.onClick || this.props.toggle) ? 'button' : undefined\n }, props, {\n tabIndex: tabIndex,\n role: role,\n className: classes,\n onClick: this.onClick\n }));\n }\n }]);\n return DropdownItem;\n}(React.Component);\nDropdownItem.propTypes = propTypes;\nDropdownItem.contextType = DropdownContext;\nexport default DropdownItem;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"type\", \"bsSize\", \"valid\", \"invalid\", \"tag\", \"addon\", \"plaintext\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/* eslint react/prefer-stateless-function: 0 */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, warnOnce, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n type: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n bsSize: PropTypes.string,\n valid: PropTypes.bool,\n invalid: PropTypes.bool,\n tag: tagPropType,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n plaintext: PropTypes.bool,\n addon: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar Input = /*#__PURE__*/function (_React$Component) {\n _inherits(Input, _React$Component);\n var _super = _createSuper(Input);\n function Input(props) {\n var _this;\n _classCallCheck(this, Input);\n _this = _super.call(this, props);\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.focus = _this.focus.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(Input, [{\n key: \"getRef\",\n value: function getRef(ref) {\n if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n this.ref = ref;\n }\n }, {\n key: \"focus\",\n value: function focus() {\n if (this.ref) {\n this.ref.focus();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n _this$props$type = _this$props.type,\n type = _this$props$type === void 0 ? 'text' : _this$props$type,\n bsSize = _this$props.bsSize,\n valid = _this$props.valid,\n invalid = _this$props.invalid,\n tag = _this$props.tag,\n addon = _this$props.addon,\n plaintext = _this$props.plaintext,\n innerRef = _this$props.innerRef,\n attributes = _objectWithoutProperties(_this$props, _excluded);\n var checkInput = ['switch', 'radio', 'checkbox'].indexOf(type) > -1;\n var isNotaNumber = /\\D/g;\n var textareaInput = type === 'textarea';\n var selectInput = type === 'select';\n var rangeInput = type === 'range';\n var Tag = tag || (selectInput || textareaInput ? type : 'input');\n var formControlClass = 'form-control';\n if (plaintext) {\n formControlClass = \"\".concat(formControlClass, \"-plaintext\");\n Tag = tag || 'input';\n } else if (rangeInput) {\n formControlClass = 'form-range';\n } else if (selectInput) {\n formControlClass = 'form-select';\n } else if (checkInput) {\n if (addon) {\n formControlClass = null;\n } else {\n formControlClass = 'form-check-input';\n }\n }\n if (attributes.size && isNotaNumber.test(attributes.size)) {\n warnOnce('Please use the prop \"bsSize\" instead of the \"size\" to bootstrap\\'s input sizing.');\n bsSize = attributes.size;\n delete attributes.size;\n }\n var classes = mapToCssModules(classNames(className, invalid && 'is-invalid', valid && 'is-valid', bsSize ? selectInput ? \"form-select-\".concat(bsSize) : \"form-control-\".concat(bsSize) : false, formControlClass), cssModule);\n if (Tag === 'input' || tag && typeof tag === 'function') {\n attributes.type = type === 'switch' ? 'checkbox' : type;\n }\n if (attributes.children && !(plaintext || type === 'select' || typeof Tag !== 'string' || Tag === 'select')) {\n warnOnce(\"Input with a type of \\\"\".concat(type, \"\\\" cannot have children. Please use \\\"value\\\"/\\\"defaultValue\\\" instead.\"));\n delete attributes.children;\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes,\n \"aria-invalid\": invalid\n }));\n }\n }]);\n return Input;\n}(React.Component);\nInput.propTypes = propTypes;\nexport default Input;","\nconst ABCNotations = {\n \"Swing Dance Party NoteDur\": \n`X:1\nT:Swing Party\nM:4/4\nL:1/8\nQ:1/4=160\nK:C\n%%MIDI program 1\nP:A\n|: c2 e2 g2 e2 | f4 e4 | d2 cB A2 G2 |1 E4 E4 :|2 E4 E2 G2 |\n|: A2 c2 e2 c2 | G4 F4 | E2 EG F2 ED | C4 C4 :|\nP:B\n|: A2 GA B2 BA | G2 FG A2 GA | E2 EG F2 ED | C4 C4 :|`,\n \"Pirate's Horizon\": \n`X:1\nT:Pirate's Horizon\nC:Generated with AI!\nM:4/4\nL:1/8\nQ:1/4=120\nK:Dm\nV:1 clef=treble\nV:2 clef=treble\nV:3 clef=bass\n% The Melody\nV:1\n|:\"Dm\"D2A2 A2d2|f2e2 d4|\"C\"c2G2 G2c2|\"Am\"e2d2 c4|\n\"Dm\"d2f2 a2f2|\"Gm\"g2f2 e4|\"A7\"c2e2 a2g2|\"Dm\"f2d2 d4:|\n|:\"Dm\"A2d2 f2a2|\"C\"e2c2 \"G/B\"d4|\"Am\"c2e2 g2e2|\"Dm\"f2d2 A4|\n\"F\"A2c2 f2a2|\"C\"e2c2 \"A7\"e4|\"Dm\"d2f2 \"A7\"a2g2|\"Dm\"f2d2 d4:|\n% The Counter Melody\nV:2\n|:\"Dm\"F2A2 c2A2|a2g2 f4|\"C\"c2E2 G2E2|\"Am\"A2G2 F4|\n\"Dm\"F2A2 c2A2|\"Gm\"B2A2 G4|\"A7\"E2G2 c2B2|\"Dm\"A2F2 F4:|\n|:\"Dm\"A2d2 c2A2|\"C\"G2E2 \"G/B\"F4|\"Am\"E2G2 A2F2|\"Dm\"D2F2 D4|\n\"F\"C2E2 F2A2|\"C\"G2E2 \"A7\"G4|\"Dm\"D2F2 \"A7\"A2G2|\"Dm\"F2D2 D4:|\n% The Bass Line\nV:3\n|:\"Dm\"D4 A,4|D4 F4|\"C\"E4 C4|\"Am\"A,4 E4|\n\"Dm\"D4 A,4|\"Gm\"G,4 B,4|\"A7\"E4 C4|\"Dm\"D4 A,4:|\n|:\"Dm\"A,4 A,4|\"C\"E4 C4|\"G/B\"G,4 B,4|\"Am\"A,4 E4|\n\"F\"F4 C4|\"C\"E4 C4|\"A7\"E4 C4|\"Dm\"D4 A,4:|`,\n \"Brass Band Road Trip ABC\": \n`X:1\nT:Road Trip Adventure\nC:AI Composer\nM:4/4\nL:1/8\nK:Bb\n|: \"Bb\"D2 F2 G2 A2 | B4 B2 A2 | \"Eb\"G2 E2 F2 G2 | \"F\"F6 z2 |\n|: \"Bb\"D2 B2 B2 c2 | d4 d2 c2 | \"Eb\"B2 G2 G2 A2 | \"Bb\"B6 z2 :|\n|: \"Gm\"G2 B2 d2 g2 | \"F\"A4 A2 G2 | \"Eb\"G2 E2 C2 G,2 | \"Bb\"B,6 z2 :|\n|: \"Bb\"D2 F2 G2 A2 | B4 B2 A2 | \"Eb\"G2 E2 F2 G2 | \"F\"F6 z2 :|\n|: \"Bb\"D2 B2 B2 c2 | d4 d2 c2 | \"Eb\"B2 G2 G2 A2 | \"Bb\"B6 z2 :|`,\n\"Brass Band Road Trip NoteDur\":\n`X:1\nT:Road Trip Adventure\nM:4/4\nL:1/8\nK:Cmaj\n%%staves {Trumpet1 Trumpet2} {Horn1 Horn2} {Trombone1 Trombone2} Tuba\nV:Trumpet1 clef=treble\nV:Trumpet2 clef=treble\nV:Horn1 clef=treble\nV:Horn2 clef=treble\nV:Trombone1 clef=bass\nV:Trombone2 clef=bass\nV:Tuba clef=bass\n\n% Introduction\n[V:Trumpet1] C2 E2 | G2 c2 |\n[V:Horn1] G,4 | E,4 |\n\n% Main Theme\n[V:Trumpet1] D2 F2 | A2 d2 |\n[V:Trombone1] F2 A2 | B,2 D2 |\n[V:Tuba] D,4 | F,4 |\n\n% Bridge\n[V:Trombone1] G,4 | E,4 | C,4 | G,,4 |\n[V:Tuba] C,,8 | G,,8 |\n\n% Climax\n[V:Trumpet1] G4 B4 | d4 f4 |\n[V:Horn1] C2 E2 | G2 B2 |\n[V:Tuba] G,2 E,2 | C,2 G,,2 |\n\n% Conclusion\n[V:Trumpet1] c2 A2 | F2 D2 |\n[V:Trombone1] F,4 | D,4 |\n[V:Tuba] C,,8 | G,,8 |`,\n\"Quarantine String Quartet ABC\":\n`X:1\nT:Quarantine\nC:AI Composer\nM:4/4\nL:1/8\nQ:1/4=50\nK:Dmin\nV:1 \nA,4 D4 | F4 A4 | d6 c2 | B6 A2 | G4 F4 | E6 D2 | C8 | D8 |\nV:2 \nF,4 A,4 | C4 E4 | A,6 G,2 | F,6 E,2 | D,4 C,4 | B,,6 A,,2 | G,,8 | A,,8 |\nV:3 \nD2 F2 A2 d2 | c2 A2 F2 D2 | B,2 D2 G2 B2 | A2 F2 E2 C2 | D2 C2 B,2 A,2 | G,4 F,4 | E,8 | D8 |\nV:4 \nD,8 | A,,8 | D,8 | A,,8 | D,8 | A,,8 | D,8 | D,8 |`,\n\"Quarantine String Quartet NoteDur\":\n`X:1\nT:Quarantine Reflections\nC:Anonymous\nM:4/4\nL:1/8\nK:Cmaj\n%%staves {V1 V2 Va Vc}\nV:V1 name=\"Violin 1\"\n[V:V1] E2 G2 F4 | DE F2 E4 |\nV:V2 name=\"Violin 2\"\n[V:V2] C4 A,4 | G2 A2 B2 A2 |\nV:Va name=\"Viola\"\n[V:Va] A2 B2 C4 | E8 |\nV:Vc name=\"Cello\"\n[V:Vc] G,8 | D,8 |\nV:V1\n[V:V1] B2 A2 G4 | E2 F2 G2 F2 |\nV:V2\n[V:V2] D4 C4 | B2 C2 D2 C2 |\nV:Va\n[V:Va] G2 A2 B4 | C8 |\nV:Vc\n[V:Vc] A,8 | E,8 |\nV:V1\n[V:V1] C2 B2 A4 | G2 A2 B2 A2 |\nV:V2\n[V:V2] E4 D4 | C2 D2 E2 D4 |\nV:Va\n[V:Va] B2 A2 G4 | F8 |\nV:Vc\n[V:Vc] B,8 | G,8 |`,\n\"Sadness to Joy Marching Band ABC\":\n`M:4/4\nL:1/8\nK:Gmin\nG2 A2 B2 c2 | d4 d4 | e2 f2 g2 a2 | b4 b4 |\nc2 B2 A2 G2 | F4 F4 | G2 A2 B2 c2 | d4 d4 |\nK:Gmaj\ne2 f2 g2 a2 | b4 b4 | c2 d2 e2 f2 | g4 g4 |\na2 b2 c'2 d'2 | e'4 e'4 | f'2 g'2 a'2 b'2 | c''4 c''4 |\nd''2 c''2 b'2 a'2 | g'4 g'4 | f'2 e'2 d'2 c'2 | B4 B4 |\nA2 G2 F2 E2 | D4 D4 | C2 B2 A2 G2 | F4 F4 |`,\n\"Sadness to Joy Marching Band NoteDur\":\n`X:1\nT:Journey from Sadness to Joy\nC:Anonymous\nM:4/4\nL:1/8\nK:Cmin\nV:Flute clef=treble\nV:Clarinet clef=treble\nV:Alto_Sax clef=treble\nV:Trumpet clef=treble\n[V:Flute] G2 F2 E4 | G2 F2 E4 | A1 B1 c1 d1 | e1 f1 g1 a1 | c2 d2 e2 f2 || \n[V:Clarinet] C2 B,2 A,4 | C2 B,2 A,4 | F1 G1 A1 B1 | c1 d1 e1 f1 | A2 B2 c2 d2 || \n[V:Alto_Sax] E2 D2 C4 | E2 D2 C4 | c1 d1 e1 f1 | g1 a1 b1 c'1 | e2 f2 g2 a2 || \n[V:Trumpet] A2 G2 F4 | A2 G2 F4 | G1 A1 B1 c1 | d1 e1 f1 g1 | B2 c2 d2 e2 ||`,\n\"Brass Trio Celebration ABC\":\n`X:1\nT:Triumphal Fanfare\nC:AI Composer\nM:4/4\nL:1/8\nK:C\nV:1 clef=treble name=\"Trumpet 1\"\nV:2 clef=treble name=\"Trumpet 2\"\nV:3 clef=bass name=\"Trombone\"\n% Trumpet 1\nV:1\n!f! | c2 e2 g2 a2 | b2 a2 g2 e2 | d'2 c'2 b2 a2 | g4 a4 |\n| c2 e2 g2 a2 | b2 a2 g2 e2 | d'2 c'2 b2 a2 | c'4 !fermata!z4 |\n% Trumpet 2\nV:2\nz | e2 e2 f2 g2 | a2 g2 f2 d2 | c'2 b2 a2 g2 | e4 f4 |\n| e2 e2 f2 g2 | a2 g2 f2 d2 | c'2 b2 a2 g2 | e4 !fermata!z4 |\n% Trombone\nV:3\nz | C2 C2 E2 G2 | A2 G2 E2 C2 | G2 F2 E2 D2 | C4 D4 |\n| C2 C2 E2 G2 | A2 G2 E2 C2 | G2 F2 E2 D2 | C4 !fermata!z4 |`,\n\"Brass Trio Celebration NoteDur\":\n`X: 1\nT: Triumphant Celebration\nM: 4/4\nL: 1/4\nQ: 1/4=120\nK: C\n%%score (T | H | B)\nV: T clef=treble\nV: H clef=treble-8\nV: B clef=bass\n% Trumpet Part\nV: T\n|: c d e g | g2 e2 | d e f g | g>f e2 :|\n% Horn Part\nV: H\n|: G A B d | d2 B2 | A B c d | d>c B2 :|\n% Trombone Part\nV: B\n|: G, A, B, D | D2 B,2 | A, B, C D | D>C B,2 :|`,\n\"3-part Pirates ABC\":\n`X:1\nT:Pirate's Horizon\nC:AI Composer\nM:4/4\nL:1/8\nQ:1/4=120\nK:Dm\n% The main melody\nV:1 clef=treble\n|: \"Dm\"d2A2 A2fd | \"C\"e2G2 G2ec | \"Bb\"A2F2 F2Bd | \"A\"A2E2 E4 |\n\"Dm\"d2A2 A2fd | \"C\"e2G2 G2ec | \"Bb\"A2F2 \"A\"E2D2 |1 \"Dm\"D4 D4 :|2 \"Dm\"D4 z4 |\n% The counter melody\nV:2 clef=treble\n|: \"Dm\"A2d2 f2a2 | \"C\"g2e2 e2g2 | \"Bb\"f2d2 d2f2 | \"A\"e2^c2 c4 |\n\"Dm\"A2d2 f2a2 | \"C\"g2e2 e2g2 | \"Bb\"f2d2 \"A\"e2^c2 |1 \"Dm\"d4 d4 :|2 \"Dm\"d4 z4 |\n% The bass line\nV:3 clef=bass\n|: \"Dm\"D4 F4 | \"C\"E4 G4 | \"Bb\"B,4 D4 | \"A\"A,4 E4 |\n\"Dm\"D4 F4 | \"C\"E4 G4 | \"Bb\"B,4 \"A\"C4 |1 \"Dm\"D4 D4 :|2 \"Dm\"D4 z4 |`,\n\"3-part Pirates NoteDur\":\n`X:1\nT:Pirate's Theme\nM:4/4\nL:1/8\nQ:1/4=120\nK:Dmin\n%%score (T1 T2) B\nV:T1 clef=treble-8\nV:T2 clef=treble\nV:B clef=bass\n% 1. Melody\n[V:T1] D4 A3 B3 | A4 G3 A3 | D3 D2 z4 | F4 D3 E3 | F4 E3 D3 | C3 C2 z4 |\n% 2. Counter Melody\n[V:T2] A4 G3 A3 | B4 A3 G3 | F3 F2 z4 | D4 B3 A3 | G4 F3 E3 | D3 D2 z4 |\n% 3. Bass Line\n[V:B] D2 z2 C2 z2 | B,2 z2 A,2 z2 | D2 z2 G,2 z2 | A,2 z2 D2 z2 |`,\n\"Pirates Trio ABC\":\n`X:1\nT:Pirate's Horizon\nC:AI Composer\nM:4/4\nL:1/8\nQ:1/4=120\nK:Dm\nV:1 clef=treble\nV:2 clef=treble\nV:3 clef=bass\n% The Melody\nV:1\n|:\"Dm\"D2A2 A2d2|f2e2 d4|\"C\"c2G2 G2c2|\"Am\"e2d2 c4|\n\"Dm\"d2f2 a2f2|\"Gm\"g2f2 e4|\"A7\"c2e2 a2g2|\"Dm\"f2d2 d4:|\n|:\"Dm\"A2d2 f2a2|\"C\"e2c2 \"G/B\"d4|\"Am\"c2e2 g2e2|\"Dm\"f2d2 A4|\n\"F\"A2c2 f2a2|\"C\"e2c2 \"A7\"e4|\"Dm\"d2f2 \"A7\"a2g2|\"Dm\"f2d2 d4:|\n% The Counter Melody\nV:2\n|:\"Dm\"F2A2 c2A2|a2g2 f4|\"C\"c2E2 G2E2|\"Am\"A2G2 F4|\n\"Dm\"F2A2 c2A2|\"Gm\"B2A2 G4|\"A7\"E2G2 c2B2|\"Dm\"A2F2 F4:|\n|:\"Dm\"A2d2 c2A2|\"C\"G2E2 \"G/B\"F4|\"Am\"E2G2 A2F2|\"Dm\"D2F2 D4|\n\"F\"C2E2 F2A2|\"C\"G2E2 \"A7\"G4|\"Dm\"D2F2 \"A7\"A2G2|\"Dm\"F2D2 D4:|\n% The Bass Line\nV:3\n|:\"Dm\"D4 A,4|D4 F4|\"C\"E4 C4|\"Am\"A,4 E4|\n\"Dm\"D4 A,4|\"Gm\"G,4 B,4|\"A7\"E4 C4|\"Dm\"D4 A,4:|\n|:\"Dm\"A,4 A,4|\"C\"E4 C4|\"G/B\"G,4 B,4|\"Am\"A,4 E4|\n\"F\"F4 C4|\"C\"E4 C4|\"A7\"E4 C4|\"Dm\"D4 A,4:|`,\n\"Pirates Trio NoteDur\":\n`X:1\nT:Pirate Theme - Melody\nM:4/4\nK:C\nL:1/16\nV:1 clef=treble\nC2E2 GAF2 E2D2 | C2E2 G4 A2G2F2 | E2F2 G2E2 D2C2 | B,2C2 ||\nV:2 clef=treble\nGAB2 cBAG F2A2 | B2c2 d2c2 B2A2G2 | F2G2 A2G2 F2E2 | D2E2 ||\nV:3 clef=bass\nC,EGC, C,EGC, | E,G,C,E, E,G,C,E, | D,F,AD, D,F,AD, ||`,\n\"Rebellious Mambo ABC\":\n`X:1\nT:Rebel Mambo\nM:4/4\nL:1/8\nQ:1/4=120\nK:Cmaj\nP:A\nV:1 treble\nV:2 treble\nV:3 bass\n% Voice 1 - Melody\n[V:1] z4 G4 | A2 AB c4 | d2 dc BAG2 | G6 z2 |\nG2 G2 A2 F2 | G4 E4 | D2 DE FG A2 | G6 z2 |\n% Voice 2 - Counter Melody\n[V:2] z4 c4 | e2 ef g4 | a2 ag fed2 | c6 z2 |\nc2 c2 d2 A2 | c4 B4 | G2 GA Bc d2 | c6 z2 |\n% Voice 3 - Bass Line\n[V:3] C,4 C,4 | D,2 D,2 E,4 | F,2 F,2 G,2 G,2 | C,6 z2 |\nC,4 C,4 | D,2 D,2 E,4 | F,2 F,2 G,2 G,2 | C,6 z2 |`,\n\"Rebellious Mambo NoteDur\":\n`X:1\nT:Rebellion Mambo\nM:4/4\nL:1/8\nQ:1/4=120\nK:Cmaj\nV:V1 name=\"Melody\"\nV:V2 name=\"Counter Melody\"\nV:V3 name=\"Bass Line\"\n[V:V1] c2 |: e2 g4 z2 | g2 f1 e5 :|\n[V:V2] z2 |: A4 G2 F2 | E2 D2 C4 :|\n[V:V3] z2 |: C4 E4 | G,8 | C,8 :|`,\n\"Show Choir Sandess to Joy ABC\":\n`X:1\nT:From Sadness to Joy\nM:4/4\nL:1/8\nQ:1/4=60\nK:Amin\nV:M name=\"Melody\" clef=treble\nV:CM name=\"Counter Melody\" clef=treble\nV:B name=\"Bass\" clef=bass\n% 8 bars of sadness in A minor\n[V:M] z4 A2 B2 | c4 B2 A2 | G4 E2 F2 | E4 D2 C2 |\n[V:M] A,4 C2 E2 | D4 C2 B,2 | A,6 z2 |1 E4 F2 G2 :|2 E4 F2 A2 |\n[V:CM] E4 F2 G2 | A4 G2 F2 | E4 C2 D2 | C4 B,2 A,2 |\n[V:CM] C4 E2 G2 | F4 E2 D2 | C6 z2 |1 A,4 G2 F2 :|2 A,4 G2 A2 |\n[V:B] A,4 A,2 B,2 | C4 B,2 A,2 | G,4 E2 F2 | E4 D2 C2 |\n[V:B] A,2 A,2 A,2 C2 | D4 C2 B,2 | A,6 z2 |1 E4 F2 G2 :|2 E4 F2 A,2 |\n% Transition measures\n[V:M] E4 c2 B2 | A4 G2 F2 | E4 c2 d2 | c4 B2 A2 |\n[V:CM] C4 E2 F2 | G4 F2 E2 | C4 E2 F2 | E4 D2 C2 |\n[V:B] C2 C2 C2 E2 | F2 F2 E2 D2 | C2 C2 C2 E2 | E2 E2 D2 C2 |\n% 8 bars of joy in A Major\nQ:1/4=120\nK:Amaj\n[V:M] z4 A2 ^c2 | d4 e2 f2 | e4 ^c2 d2 | ^c4 B2 A2 |\n[V:M] A,4 E2 A2 | B4 A2 ^G2 | A6 z2 |1 E4 F2 ^G2 :|2 E4 F2 A2 |\n[V:CM] E4 F2 ^G2 | A4 ^G2 F2 | E4 A2 B2 | B4 A2 ^G2 |\n[V:CM] A,4 E2 A2 | B4 A2 F2 | A6 z2 |1 C4 D2 E2 :|2 C4 D2 A2 |\n[V:B] A,4 A,2 B,2 | C4 B,2 A,2 | E,4 A,2 B,2 | B,4 A,2 ^G,2 |\n[V:B] A,2 A,2 E2 A,2 | B,4 A,2 ^F,2 | A,6 z2 |1 E4 F2 ^G2 :|2 E4 F2 A,2 |`,\n\"Show Choir Sandess to Joy NoteDur\":\n`X:1\nT:From Sadness to Joy\nM:4/4\nL:1/8\nQ:1/4=60\nK:Cmin\n\"Cm\" C4 E4 G2 | A4 F4 E2 | D4 F4 A2 | G8 | \n\"Cm\" C2 D2 E4 G4 | E2 F2 G4 A4 | G2 A2 B4 c4 | A4 F4 |\n\"Dm\" C2 E2 G2 E2 | G2 A2 G2 E2 | C2 G2 E2 C2 | D2 G2 F2 D2 |\n\"CM\" C8 | \n\"CM\" E2 G2 c2 G2 | E2 G2 c2 G2 | D2 G2 B2 G2 | C2 E2 A2 E2 | G8 |`,\n\"Barbershop Quartet Victory ABC\":\n`X:1\nT:Victory Song\nC:AI Composer\nM:4/4\nL:1/4\nQ:1/4=120\nK:C\n%%score (T1 T2) (B1 B2)\nV:T1 clef=treble-8\nV:T2 clef=treble-8\nV:B1 clef=bass\nV:B2 clef=bass\n% Voice lead - Typically the main melody in a barbershop quartet\n[V:T1]\nG | c B A G | E2 G2 | c B A G | E4 |\n[V:T2] \n(E | G) F E D | C2 E2 | G F E D | C4 |\n[V:B1]\nC, | E, F, G, A, | B,,2 E,2 | G, A, B, C | G,,4 |\n[V:B2]\n(C | E) D C B, | A,2 C2 | E D C B, | G,,4 |\n% Now a harmony that would be typical of barbershop\n[V:T1] G | c B A G | E2 G2 | c B A G | E4 |\n[V:T2] (E | G) F E D | C2 E2 | G F E D | C4 |\n[V:B1] C, | E, F, G, A, | B,,2 E,2 | G, A, B, C | G,,4 |\n[V:B2] (C | E) D C B, | A,2 C2 | E D C B, | G,,4 |\n% Ending with a typical barbershop tag\n[V:T1] G | c3 B | c2 E2 | G4- | G4 |\n[V:T2] (E | G)3 F | E2 C2 | E4- | E4 |\n[V:B1] C, | E,3 F, | G,2 B,,2 | C4- | C4 |\n[V:B2] (C | E)3 D | C2 A,2 | C4- | C4 |`,\n\"Barbershop Quartet Victory NoteDur\":\n`X:1\nT:Victory Song\nC:Traditional Barbershop\nM:4/4\nL:1/8\nQ:1/4=120\nK:C\nG2 A B c B A G2 | E4 D2 E F G F E D | C2 E G A B G A2 | G2 G A B c B A G | F4 G2 E4 |]`,\n\n \n};\n\nexport default ABCNotations;","import ABCNotations from \"./ABCNotations\";\n\nconst GeneratedTunes = {\n\t// \"Swing Dance Party\": [\n\t// \t{\n\t// \t\tdate: \"\",\n\t// \t\tmodel: \"ChatGPT-4\",\n\t// \t\ttopic: \"\",\n\t// \t\tstyle: \"\",\n\t// \t\tfullPrompt: \"\",\n\t// \t\tnotation: \"ABC Notation\",\n\t// \t\tissues: \"\",\n\t// \t\toutput: \"\",\n\t// \t},\n\t// \t{\n\t// \t\tdate: \"\",\n\t// \t\tmodel: \"ChatGPT-4\",\n\t// \t\ttopic: \"\",\n\t// \t\tstyle: \"\",\n\t// \t\tfullPrompt: \"\",\n\t// \t\tnotation: \"(Note, Duration) Pairs\",\n\t// \t\tissues: \"\",\n // output: ABCNotations[\"Swing Dance Party NoteDur\"],\n\t// \t},\n\t// ],\n\t// \"Brass Band Road Trip\": [\n\t// \t{\n\t// \t\tdate: \"Nov. 10th, 2023\",\n\t// \t\tmodel: \"ChatGPT-4\",\n\t// \t\ttopic: \"a road trip\",\n\t// \t\tstyle: \"brass band\",\n\t// \t\tfullPrompt:\n\t// \t\t\t\"Compose a piece of music in ABC Notation about a road trip. This piece should embody the brass band genre. Consider the typical instruments and rhythms used in this style, and ensure the composition reflects the vibe and themes commonly associated with a road trip. The music should be structured in a way that's characteristic of brass band, accommodating variations in melody, harmony, and rhythm that are true to the genre.\",\n\t// \t\tnotation: \"ABC Notation\",\n\t// \t\tissues: \"Gave notation in 5 separate blocks\",\n\t// \t\toutput: ABCNotations[\"Brass Band Road Trip ABC\"],\n\t// \t},\n\t// \t{\n\t// \t\tdate: \"Nov. 10th, 2023\",\n\t// \t\tmodel: \"ChatGPT-4\",\n\t// \t\ttopic: \"a road trip\",\n\t// \t\tstyle: \"brass band\",\n\t// \t\tfullPrompt: \"Compose a piece of music in (Note, Duration) Pairs about a road trip. This piece should embody the brass band genre. Consider the typical instruments and rhythms used in this style, and ensure the composition reflects the vibe and themes commonly associated with a road trip. The music should be structured in a way that's characteristic of brass band, accommodating variations in melody, harmony, and rhythm that are true to the genre.\",\n\t// \t\tnotation: \"ABC Notation\",\n\t// \t\tissues: \"\",\n\t// \t\toutput: ABCNotations[\"Brass Band Road Trip NoteDur\"],\n\t// \t},\n\t// ],\n\t\"Quarantine String Quartet\": [\n\t\t{\n\t\t\tdate: \"Nov. 11th, 2023\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"Create a piece of music in ABC Notation focusing on the theme of 'quarantine.' The composition should capture the essence and emotional undertones associated with this subject. Please ensure the melody, rhythm, and progression are characteristic of the 'string quartet' genre. Additionally, structure the piece with a clear beginning, middle, and end, and provide brief descriptions or instructions for the tempo, instrument roles, and dynamics to guide the performance.\",\n\t\t\tnotation: \"ABC Notation\",\n\t\t\tissues: \"Gave output as 4 separate blocks; didn't give clefs\",\n\t\t\toutput: ABCNotations[\"Quarantine String Quartet ABC\"],\n\t\t},\n\t\t{\n\t\t\tdate: \"Nov. 11th, 2023\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"(Note, Duration) Pairs\",\n\t\t\tissues: \"Failed to transcibe to ABC\",\n output: ABCNotations[\"Quarantine String Quartet NoteDur\"],\n\t\t},\n\t],\n\t\"Sadness to Joy Marching Band\": [\n\t\t{\n\t\t\tdate: \"Nov. 11th, 2023\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"a journey from sadness to joy\",\n\t\t\tstyle: \"marching band\",\n\t\t\tfullPrompt: \"Compose a piece of music in ABC Notation about a journey from sadness to joy. This piece should embody the marching band style. Consider the typical musical elements and rhythms used in this genre, and ensure the composition reflects the vibe and themes commonly associated with a journey from sadness to joy. The music should be structured in a way that's characteristic of marching band music, accommodating variations in melody, harmony, and rhythm that are true to that style. Do not include percussion.\",\n\t\t\tnotation: \"ABC Notation\",\n\t\t\tissues: \"One double new line\",\n\t\t\toutput: ABCNotations[\"Sadness to Joy Marching Band ABC\"],\n\t\t},\n\t\t{\n\t\t\tdate: \"Nov. 11th, 2023\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"a journey from sadness to joy\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"Compose a piece of music in (Note, Duration) Pairs about a journey from sadness to joy. This piece should embody the marching band style. Consider the typical musical elements and rhythms used in this genre, and ensure the composition reflects the vibe and themes commonly associated with a journey from sadness to joy. The music should be structured in a way that's characteristic of marching band music, accommodating variations in melody, harmony, and rhythm that are true to that style. Do not include percussion.\",\n\t\t\tnotation: \"(Note, Duration) Pairs\",\n\t\t\tissues: \"marching band\",\n output: ABCNotations[\"Sadness to Joy Marching Band NoteDur\"],\n\t\t},\n\t],\n\t\"Brass Trio Celebration\": [\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"ABC Notation\",\n\t\t\tissues: \"\",\n\t\t\toutput: ABCNotations[\"Brass Trio Celebration ABC\"],\n\t\t},\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"(Note, Duration) Pairs\",\n\t\t\tissues: \"\",\n output: ABCNotations[\"Brass Trio Celebration NoteDur\"],\n\t\t},\n\t],\n\t\"3-part Pirates\": [\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"ABC Notation\",\n\t\t\tissues: \"\",\n\t\t\toutput: ABCNotations[\"3-part Pirates ABC\"],\n\t\t},\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"(Note, Duration) Pairs\",\n\t\t\tissues: \"\",\n output: ABCNotations[\"3-part Pirates NoteDur\"],\n\t\t},\n\t],\n\t\"Pirates Trio\": [\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"ABC Notation\",\n\t\t\tissues: \"\",\n\t\t\toutput: ABCNotations[\"Pirates Trio ABC\"],\n\t\t},\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"(Note, Duration) Pairs\",\n\t\t\tissues: \"\",\n output: ABCNotations[\"Pirates Trio NoteDur\"],\n\t\t},\n\t],\n\t\"Rebellious Mambo\": [\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"ABC Notation\",\n\t\t\tissues: \"\",\n\t\t\toutput: ABCNotations[\"Rebellious Mambo ABC\"],\n\t\t},\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"(Note, Duration) Pairs\",\n\t\t\tissues: \"\",\n output: ABCNotations[\"Rebellious Mambo NoteDur\"],\n\t\t},\n\t],\n\t\"Show Choir Sandess to Joy\": [\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"ABC Notation\",\n\t\t\tissues: \"\",\n\t\t\toutput: ABCNotations[\"Show Choir Sandess to Joy ABC\"],\n\t\t},\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"(Note, Duration) Pairs\",\n\t\t\tissues: \"\",\n output: ABCNotations[\"Show Choir Sandess to Joy NoteDur\"],\n\t\t},\n\t],\n\t\"Barbershop Quartet Victory\": [\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"ABC Notation\",\n\t\t\tissues: \"\",\n\t\t\toutput: ABCNotations[\"Barbershop Quartet Victory ABC\"],\n\t\t},\n\t\t{\n\t\t\tdate: \"\",\n\t\t\tmodel: \"ChatGPT-4\",\n\t\t\ttopic: \"\",\n\t\t\tstyle: \"\",\n\t\t\tfullPrompt: \"\",\n\t\t\tnotation: \"(Note, Duration) Pairs\",\n\t\t\tissues: \"\",\n output: ABCNotations[\"Barbershop Quartet Victory NoteDur\"],\n\t\t},\n\t],\n\t// \"Example\": [\n\t// \t{\n\t// \t\tdate: \"\",\n\t// \t\tmodel: \"ChatGPT-4\",\n\t// \t\ttopic: \"\",\n\t// \t\tstyle: \"\",\n\t// \t\tfullPrompt: \"\",\n\t// \t\tnotation: \"ABC Notation\",\n\t// \t\tissues: \"\",\n\t// \t\toutput: \"\",\n\t// \t},\n\t// \t{\n\t// \t\tdate: \"\",\n\t// \t\tmodel: \"ChatGPT-4\",\n\t// \t\ttopic: \"\",\n\t// \t\tstyle: \"\",\n\t// \t\tfullPrompt: \"\",\n\t// \t\tnotation: \"(Note, Duration) Pairs\",\n\t// \t\tissues: \"\",\n // output: \"\",\n\t// \t},\n\t// ],\n};\n\nexport default GeneratedTunes;\n","import \"abcjs/abcjs-audio.css\";\nimport \"../assets/sass/music.scss\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nimport ABCJS from \"abcjs\";\n\nfunction Synthesizer({ abcNotation, index }) {\n\tconst musicSheetRef = useRef(null);\n\tconst audioRef = useRef(null);\n\n\tuseEffect(() => {\n\t\tif (!abcNotation) return;\n\n\t\tif (ABCJS.synth.supportsAudio()) {\n\t\t\tconst cleanedNotation = abcNotation.replace(/\\n{2,}/g, \"\\n\");\n\t\t\tfunction SimpleCursorControl() {\n\t\t\t\tvar cursor;\n\n\t\t\t\tthis.onReady = function () {};\n\n\t\t\t\tthis.onStart = function () {\n\t\t\t\t\t// Create the cursor as an SVG line element\n\t\t\t\t\tvar svg = document.querySelector(`#paper${index} svg`);\n\t\t\t\t\tcursor = document.createElementNS(\n\t\t\t\t\t\t\"http://www.w3.org/2000/svg\",\n\t\t\t\t\t\t\"line\"\n\t\t\t\t\t);\n\t\t\t\t\tcursor.setAttribute(\"class\", \"abcjs-cursor\");\n\t\t\t\t\tcursor.setAttributeNS(null, \"x1\", 0);\n\t\t\t\t\tcursor.setAttributeNS(null, \"y1\", 0);\n\t\t\t\t\tcursor.setAttributeNS(null, \"x2\", 0);\n\t\t\t\t\tcursor.setAttributeNS(null, \"y2\", 0);\n\t\t\t\t\tif (svg) {\n\t\t\t\t\t\tsvg.appendChild(cursor);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"Could not find SVG element to attach cursor.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis.onEvent = function (ev) {\n\t\t\t\t\t// Remove existing highlights\n\t\t\t\t\tvar lastHighlights = document.querySelectorAll(\n\t\t\t\t\t\t`#paper${index} svg .highlight`\n\t\t\t\t\t);\n\t\t\t\t\tlastHighlights.forEach(function (element) {\n\t\t\t\t\t\telement.classList.remove(\"highlight\");\n\t\t\t\t\t});\n\n\t\t\t\t\t// Update the cursor position\n\t\t\t\t\tif (cursor) {\n\t\t\t\t\t\tcursor.setAttribute(\"x1\", ev.left - 2);\n\t\t\t\t\t\tcursor.setAttribute(\"x2\", ev.left - 2);\n\t\t\t\t\t\tcursor.setAttribute(\"y1\", ev.top);\n\t\t\t\t\t\tcursor.setAttribute(\"y2\", ev.top + ev.height);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add highlight to the current elements\n\t\t\t\t\tev.elements.forEach(function (elementGroup) {\n\t\t\t\t\t\telementGroup.forEach(function (element) {\n\t\t\t\t\t\t\telement.classList.add(\"highlight\");\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\tthis.onFinished = function () {\n\t\t\t\t\t// Hide the cursor when the music finishes\n\t\t\t\t\tif (cursor) {\n\t\t\t\t\t\tcursor.setAttribute(\"x1\", 0);\n\t\t\t\t\t\tcursor.setAttribute(\"x2\", 0);\n\t\t\t\t\t\tcursor.setAttribute(\"y1\", 0);\n\t\t\t\t\t\tcursor.setAttribute(\"y2\", 0);\n\t\t\t\t\t}\n\t\t\t\t\tvar highlights = document.querySelectorAll(\n\t\t\t\t\t\t`#paper${index} svg .highlight`\n\t\t\t\t\t);\n\t\t\t\t\thighlights.forEach(function (element) {\n\t\t\t\t\t\telement.classList.remove(\"highlight\");\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar abcOptions = { add_classes: true };\n\t\t\tvar audioParams = { chordsOff: false };\n\t\t\tvar visualOptions = { responsive: \"resize\" };\n\n\t\t\tvar synthControl = new ABCJS.synth.SynthController();\n\n\t\t\tvar cursorControl = new SimpleCursorControl();\n\n\t\t\tsynthControl.load(audioRef.current, cursorControl, {\n\t\t\t\tdisplayLoop: true,\n\t\t\t\tdisplayRestart: true,\n\t\t\t\tdisplayPlay: true,\n\t\t\t\tdisplayProgress: true,\n\t\t\t\tdisplayWarp: true,\n\t\t\t});\n\n\t\t\tvar visualObj = ABCJS.renderAbc(\n\t\t\t\tmusicSheetRef.current,\n\t\t\t\tcleanedNotation,\n\t\t\t\tabcOptions,\n\t\t\t\tvisualOptions\n\t\t\t);\n\n\t\t\tvar createSynth = new ABCJS.synth.CreateSynth();\n\t\t\tcreateSynth\n\t\t\t\t.init({ visualObj: visualObj[0] })\n\t\t\t\t.then(function () {\n\t\t\t\t\t// Pass the cursor control object here\n\t\t\t\t\tsynthControl\n\t\t\t\t\t\t.setTune(\n\t\t\t\t\t\t\tvisualObj[0],\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\taudioParams,\n\t\t\t\t\t\t\tcursorControl\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.then(function () {\n\t\t\t\t\t\t\tconsole.log(\"Audio successfully loaded.\");\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(function (error) {\n\t\t\t\t\t\t\tconsole.warn(\"Audio problem:\", error);\n\t\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.catch(function (error) {\n\t\t\t\t\tconsole.warn(\"Audio problem:\", error);\n\t\t\t\t});\n\t\t} else {\n\t\t\tif (audioRef.current) {\n\t\t\t\taudioRef.current.innerHTML =\n\t\t\t\t\t\"Audio is not supported in this browser.\";\n\t\t\t}\n\t\t}\n\t}, [abcNotation, index]);\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n}\n\nexport default Synthesizer;\n","import {\n\tCol,\n\tContainer,\n\tDropdown,\n\tDropdownItem,\n\tDropdownMenu,\n\tDropdownToggle,\n\tInput,\n\tRow,\n} from \"reactstrap\";\nimport React, { useState } from \"react\";\n\n// import tunes from \"../assets/Tunes\";\nimport GeneratedTunes from \"../assets/GeneratedTunes\";\n// import ABCNotations from \"../assets/ABCNotations\";\nimport Synthesizer from \"./Synthesizer\";\n\nconst JuxComposeContent = () => {\n\tconst [abcNotation1, setAbcNotation1] = useState(\"\");\n\tconst [abcNotation2, setAbcNotation2] = useState(\"\");\n\tconst [dropdownOpen, setDropdownOpen] = useState(false);\n\tconst selectedTune = useState(\"Select a Tune\");\n\n\tconst handleInputChange1 = (e) => {\n\t\tsetAbcNotation1(e.target.value);\n\t};\n\n\tconst handleInputChange2 = (e) => {\n\t\tsetAbcNotation2(e.target.value);\n\t};\n\n\tconst toggleDropdown = () => setDropdownOpen(!dropdownOpen);\n\n\tconst selectTune = (tuneKey) => {\n\t\tconst contents = GeneratedTunes[tuneKey];\n\t\t// setSelectedTune(GeneratedTunes[tuneKey].split(\"\\n\")[1].substring(2)); // To get the title (T:TuneName)\n\n\t\tsetAbcNotation1(contents[0].output);\n\t\tsetAbcNotation2(contents[1].output);\n\t};\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\tJuxCompose\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{selectedTune}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{Object.keys(GeneratedTunes).map((tuneKey) => (\n\t\t\t\t\t\t\t\t selectTune(tuneKey)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{tuneKey}{\" \"}\n\t\t\t\t\t\t\t\t\t{/* Extracts the title of the tune */}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

Rendered Music Sheet:

\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

Rendered Music Sheet:

\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n\nexport default JuxComposeContent;\n","import React from \"react\";\nimport JuxComposeContent from \"../components/JuxComposeContent\";\nimport Page from \"../components/Page\";\n\nconst JuxComposePage = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default JuxComposePage;\n","import { useRef } from \"react\";\nimport { Button } from \"reactstrap\";\n\nexport const FileUploader = ({ handleFile }) => {\n\t// Create a reference to the hidden file input element\n\tconst hiddenFileInput = useRef(null);\n\n\t// Programatically click the hidden file input element\n\t// when the Button component is clicked\n\tconst handleClick = (event) => {\n\t\thiddenFileInput.current.click();\n\t};\n\t// Call a function (passed as a prop from the parent component)\n\t// to handle the user-selected file\n\tconst handleChange = (event) => {\n\t\tconst fileUploaded = event.target.files[0];\n\t\thandleFile(fileUploaded);\n\t};\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default FileUploader;\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Col, Container, Input, Row } from \"reactstrap\";\n\nimport ABCNotations from \"../assets/ABCNotations\";\nimport FileUploader from \"./FileUploader\";\nimport Synthesizer from \"./Synthesizer\";\n\nconst MusicRendererContent = () => {\n\tconst defaultContent = ABCNotations[\"3-part Pirates ABC\"];\n\tconst [abcNotation, setAbcNotation] = useState(defaultContent);\n\tconst [file, setFile] = useState(null);\n\tconst [didUpload, setDidUpload] = useState(false);\n\tconst [description, setDescription] = useState(\"\");\n\n\tuseEffect(() => {\n\t\tif (file) {\n\t\t\tsetDidUpload(true);\n\t\t\tconst reader = new FileReader();\n\n\t\t\treader.onload = (e) => {\n\t\t\t\tconst contents = e.target.result;\n\t\t\t\t// Get text between \"Description: \" and \"ABC Notation: abc\"\n\t\t\t\tconst description = e.target.result\n\t\t\t\t\t.split(\"Description: \")[1]\n\t\t\t\t\t.split(\"ABC Notation: abc\")[0]\n\t\t\t\t\t.trim();\n\t\t\t\tsetDescription(description);\n\t\t\t\tif (contents.startsWith(\"Date\")) {\n\t\t\t\t\t// Get text from \"ABC Notation: abc\" to the end\n\t\t\t\t\tconst abc_Notation = e.target.result\n\t\t\t\t\t\t.split(\"ABC Notation: abc\")[1]\n\t\t\t\t\t\t.trim();\n\t\t\t\t\tsetAbcNotation(abc_Notation);\n\t\t\t\t} else if (contents.startsWith(\"Version: 1.0.0\")) {\n\t\t\t\t\t// Get text between \"ABC Notation: abc\" and \"Thread ID\"\n\t\t\t\t\tconst abc_Notation = e.target.result\n\t\t\t\t\t\t.split(\"ABC Notation: abc\")[1]\n\t\t\t\t\t\t.split(\"Thread ID\")[0]\n\t\t\t\t\t\t.trim();\n\t\t\t\t\tsetAbcNotation(abc_Notation);\n\t\t\t\t} else {\n\t\t\t\t\talert(\"Unrecognized file format\");\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treader.readAsText(file);\n\t\t}\n\t}, [file]);\n\n\tconst handleInputChange = (e) => {\n\t\tsetAbcNotation(e.target.value);\n\t};\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t

Music Renderer

\n\t\t\t\t

Enter ABC Notation

\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t setAbcNotation(\"\")}\n\t\t\t\t\t\t\tcolor=\"danger\"\n\t\t\t\t\t\t\toutline\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tstyle={{ marginRight: \"10px\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tClear\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{didUpload && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

Description

\n\t\t\t\t\t\t\t{description ? (\n\t\t\t\t\t\t\t\t

{description}

\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t

No description provided

\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t

Rendered Sheet Music

\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n\nexport default MusicRendererContent;\n","import React from \"react\";\nimport MusicRendererContent from \"../components/MusicRendererContent\";\nimport Page from \"../components/Page\";\n\nconst MusicRendererPage = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default MusicRendererPage;\n","import _typeof from \"./typeof.js\";\nexport default function _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n };\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = Object.defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = \"function\" == typeof Symbol ? Symbol : {},\n a = i.iterator || \"@@iterator\",\n c = i.asyncIterator || \"@@asyncIterator\",\n u = i.toStringTag || \"@@toStringTag\";\n function define(t, e, r) {\n return Object.defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, \"\");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = Object.create(i.prototype),\n c = new Context(n || []);\n return o(a, \"_invoke\", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: \"normal\",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: \"throw\",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = \"suspendedStart\",\n l = \"suspendedYield\",\n f = \"executing\",\n s = \"completed\",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = Object.getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n function defineIteratorMethods(t) {\n [\"next\", \"throw\", \"return\"].forEach(function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if (\"throw\" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n invoke(\"next\", t, i, a);\n }, function (t) {\n invoke(\"throw\", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke(\"throw\", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, \"_invoke\", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw new Error(\"Generator is already running\");\n if (o === s) {\n if (\"throw\" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if (\"normal\" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\n if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n var i = tryCatch(o, e.iterator, r.arg);\n if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n }\n function pushTryEntry(t) {\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = \"normal\", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], t.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || \"\" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if (\"function\" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n var e = \"function\" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n return this;\n }), define(g, \"toString\", function () {\n return \"[object Generator]\";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) r.push(n);\n return r.reverse(), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if (\"throw\" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if (\"root\" === i.tryLoc) return handle(\"end\");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, \"catchLoc\"),\n u = n.call(i, \"finallyLoc\");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw new Error(\"try statement without catch or finally\");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if (\"throw\" === t.type) throw t.arg;\n return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n \"catch\": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if (\"throw\" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, \"next\" === this.method && (this.arg = t), y;\n }\n }, e;\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { canUseDOM } from './utils';\nvar propTypes = {\n children: PropTypes.node.isRequired,\n node: PropTypes.any\n};\nvar Portal = /*#__PURE__*/function (_React$Component) {\n _inherits(Portal, _React$Component);\n var _super = _createSuper(Portal);\n function Portal() {\n _classCallCheck(this, Portal);\n return _super.apply(this, arguments);\n }\n _createClass(Portal, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.defaultNode) {\n document.body.removeChild(this.defaultNode);\n }\n this.defaultNode = null;\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!canUseDOM) {\n return null;\n }\n if (!this.props.node && !this.defaultNode) {\n this.defaultNode = document.createElement('div');\n document.body.appendChild(this.defaultNode);\n }\n return /*#__PURE__*/ReactDOM.createPortal(this.props.children, this.props.node || this.defaultNode);\n }\n }]);\n return Portal;\n}(React.Component);\nPortal.propTypes = propTypes;\nexport default Portal;","var _excluded = [\"tag\", \"baseClass\", \"baseClassActive\", \"className\", \"cssModule\", \"children\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nimport React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Transition } from 'react-transition-group';\nimport { mapToCssModules, omit, pick, TransitionPropTypeKeys, TransitionTimeouts, tagPropType } from './utils';\nvar propTypes = _objectSpread(_objectSpread({}, Transition.propTypes), {}, {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n tag: tagPropType,\n baseClass: PropTypes.string,\n baseClassActive: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n});\nvar defaultProps = _objectSpread(_objectSpread({}, Transition.defaultProps), {}, {\n timeout: TransitionTimeouts.Fade,\n appear: true,\n enter: true,\n exit: true,\n \"in\": true\n});\nfunction Fade(props) {\n var ref = useRef(null);\n var _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n _props$baseClass = props.baseClass,\n baseClass = _props$baseClass === void 0 ? 'fade' : _props$baseClass,\n _props$baseClassActiv = props.baseClassActive,\n baseClassActive = _props$baseClassActiv === void 0 ? 'show' : _props$baseClassActiv,\n className = props.className,\n cssModule = props.cssModule,\n children = props.children,\n _props$innerRef = props.innerRef,\n innerRef = _props$innerRef === void 0 ? ref : _props$innerRef,\n otherProps = _objectWithoutProperties(props, _excluded);\n var transitionProps = pick(_objectSpread({\n defaultProps: defaultProps\n }, otherProps), TransitionPropTypeKeys);\n var childProps = omit(otherProps, TransitionPropTypeKeys);\n return /*#__PURE__*/React.createElement(Transition, _extends({\n nodeRef: innerRef\n }, transitionProps), function (status) {\n var isActive = status === 'entered';\n var classes = mapToCssModules(classNames(className, baseClass, isActive && baseClassActive), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({\n className: classes\n }, childProps, {\n ref: innerRef\n }), children);\n });\n}\nFade.propTypes = propTypes;\nFade.defaultProps = defaultProps;\nexport default Fade;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Portal from './Portal';\nimport Fade from './Fade';\nimport { getOriginalBodyPadding, conditionallyUpdateScrollbar, setScrollbarWidth, mapToCssModules, omit, focusableElements, TransitionTimeouts, keyCodes, targetPropType, getTarget } from './utils';\nfunction noop() {}\nvar FadePropTypes = PropTypes.shape(Fade.propTypes);\nvar propTypes = {\n /** */\n autoFocus: PropTypes.bool,\n /** Add backdrop to modal */\n backdrop: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['static'])]),\n /** add custom classname to backdrop */\n backdropClassName: PropTypes.string,\n backdropTransition: FadePropTypes,\n /** Vertically center the modal */\n centered: PropTypes.bool,\n /** Add children for the modal to wrap */\n children: PropTypes.node,\n /** Add custom className for modal content */\n contentClassName: PropTypes.string,\n className: PropTypes.string,\n container: targetPropType,\n cssModule: PropTypes.object,\n external: PropTypes.node,\n /** Enable/Disable animation */\n fade: PropTypes.bool,\n /** Make the modal fullscreen */\n fullscreen: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['sm', 'md', 'lg', 'xl'])]),\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]),\n /** The status of the modal, either open or close */\n isOpen: PropTypes.bool,\n /** Allow modal to be closed with escape key. */\n keyboard: PropTypes.bool,\n /** Identifies the element (or elements) that labels the current element. */\n labelledBy: PropTypes.string,\n modalClassName: PropTypes.string,\n modalTransition: FadePropTypes,\n /** Function to be triggered on close */\n onClosed: PropTypes.func,\n /** Function to be triggered on enter */\n onEnter: PropTypes.func,\n /** Function to be triggered on exit */\n onExit: PropTypes.func,\n /** Function to be triggered on open */\n onOpened: PropTypes.func,\n /** Returns focus to the element that triggered opening of the modal */\n returnFocusAfterClose: PropTypes.bool,\n /** Accessibility role */\n role: PropTypes.string,\n /** Make the modal scrollable */\n scrollable: PropTypes.bool,\n /** Two optional sizes `lg` and `sm` */\n size: PropTypes.string,\n /** Function to toggle modal visibility */\n toggle: PropTypes.func,\n trapFocus: PropTypes.bool,\n /** Unmounts the modal when modal is closed */\n unmountOnClose: PropTypes.bool,\n wrapClassName: PropTypes.string,\n zIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n};\nvar propsToOmit = Object.keys(propTypes);\nvar defaultProps = {\n isOpen: false,\n autoFocus: true,\n centered: false,\n scrollable: false,\n role: 'dialog',\n backdrop: true,\n keyboard: true,\n zIndex: 1050,\n fade: true,\n onOpened: noop,\n onClosed: noop,\n modalTransition: {\n timeout: TransitionTimeouts.Modal\n },\n backdropTransition: {\n mountOnEnter: true,\n timeout: TransitionTimeouts.Fade // uses standard fade transition\n },\n\n unmountOnClose: true,\n returnFocusAfterClose: true,\n container: 'body',\n trapFocus: false\n};\nvar Modal = /*#__PURE__*/function (_React$Component) {\n _inherits(Modal, _React$Component);\n var _super = _createSuper(Modal);\n function Modal(props) {\n var _this;\n _classCallCheck(this, Modal);\n _this = _super.call(this, props);\n _this._element = null;\n _this._originalBodyPadding = null;\n _this.getFocusableChildren = _this.getFocusableChildren.bind(_assertThisInitialized(_this));\n _this.handleBackdropClick = _this.handleBackdropClick.bind(_assertThisInitialized(_this));\n _this.handleBackdropMouseDown = _this.handleBackdropMouseDown.bind(_assertThisInitialized(_this));\n _this.handleEscape = _this.handleEscape.bind(_assertThisInitialized(_this));\n _this.handleStaticBackdropAnimation = _this.handleStaticBackdropAnimation.bind(_assertThisInitialized(_this));\n _this.handleTab = _this.handleTab.bind(_assertThisInitialized(_this));\n _this.onOpened = _this.onOpened.bind(_assertThisInitialized(_this));\n _this.onClosed = _this.onClosed.bind(_assertThisInitialized(_this));\n _this.manageFocusAfterClose = _this.manageFocusAfterClose.bind(_assertThisInitialized(_this));\n _this.clearBackdropAnimationTimeout = _this.clearBackdropAnimationTimeout.bind(_assertThisInitialized(_this));\n _this.trapFocus = _this.trapFocus.bind(_assertThisInitialized(_this));\n _this.state = {\n isOpen: false,\n showStaticBackdropAnimation: false\n };\n return _this;\n }\n _createClass(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n isOpen = _this$props.isOpen,\n autoFocus = _this$props.autoFocus,\n onEnter = _this$props.onEnter;\n if (isOpen) {\n this.init();\n this.setState({\n isOpen: true\n });\n if (autoFocus) {\n this.setFocus();\n }\n }\n if (onEnter) {\n onEnter();\n }\n\n // traps focus inside the Modal, even if the browser address bar is focused\n document.addEventListener('focus', this.trapFocus, true);\n this._isMounted = true;\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (this.props.isOpen && !prevProps.isOpen) {\n this.init();\n this.setState({\n isOpen: true\n });\n // let render() renders Modal Dialog first\n return;\n }\n\n // now Modal Dialog is rendered and we can refer this._element and this._dialog\n if (this.props.autoFocus && this.state.isOpen && !prevState.isOpen) {\n this.setFocus();\n }\n if (this._element && prevProps.zIndex !== this.props.zIndex) {\n this._element.style.zIndex = this.props.zIndex;\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.clearBackdropAnimationTimeout();\n if (this.props.onExit) {\n this.props.onExit();\n }\n if (this._element) {\n this.destroy();\n if (this.props.isOpen || this.state.isOpen) {\n this.close();\n }\n }\n document.removeEventListener('focus', this.trapFocus, true);\n this._isMounted = false;\n }\n\n // not mouseUp because scrollbar fires it, shouldn't close when user scrolls\n }, {\n key: \"handleBackdropClick\",\n value: function handleBackdropClick(e) {\n if (e.target === this._mouseDownElement) {\n e.stopPropagation();\n var backdrop = this._dialog ? this._dialog.parentNode : null;\n if (backdrop && e.target === backdrop && this.props.backdrop === 'static') {\n this.handleStaticBackdropAnimation();\n }\n if (!this.props.isOpen || this.props.backdrop !== true) return;\n if (backdrop && e.target === backdrop && this.props.toggle) {\n this.props.toggle(e);\n }\n }\n }\n }, {\n key: \"handleTab\",\n value: function handleTab(e) {\n if (e.which !== 9) return;\n if (this.modalIndex < Modal.openCount - 1) return; // last opened modal\n\n var focusableChildren = this.getFocusableChildren();\n var totalFocusable = focusableChildren.length;\n if (totalFocusable === 0) return;\n var currentFocus = this.getFocusedChild();\n var focusedIndex = 0;\n for (var i = 0; i < totalFocusable; i += 1) {\n if (focusableChildren[i] === currentFocus) {\n focusedIndex = i;\n break;\n }\n }\n if (e.shiftKey && focusedIndex === 0) {\n e.preventDefault();\n focusableChildren[totalFocusable - 1].focus();\n } else if (!e.shiftKey && focusedIndex === totalFocusable - 1) {\n e.preventDefault();\n focusableChildren[0].focus();\n }\n }\n }, {\n key: \"handleBackdropMouseDown\",\n value: function handleBackdropMouseDown(e) {\n this._mouseDownElement = e.target;\n }\n }, {\n key: \"handleEscape\",\n value: function handleEscape(e) {\n if (this.props.isOpen && e.keyCode === keyCodes.esc && this.props.toggle) {\n if (this.props.keyboard) {\n e.preventDefault();\n e.stopPropagation();\n this.props.toggle(e);\n } else if (this.props.backdrop === 'static') {\n e.preventDefault();\n e.stopPropagation();\n this.handleStaticBackdropAnimation();\n }\n }\n }\n }, {\n key: \"handleStaticBackdropAnimation\",\n value: function handleStaticBackdropAnimation() {\n var _this2 = this;\n this.clearBackdropAnimationTimeout();\n this.setState({\n showStaticBackdropAnimation: true\n });\n this._backdropAnimationTimeout = setTimeout(function () {\n _this2.setState({\n showStaticBackdropAnimation: false\n });\n }, 100);\n }\n }, {\n key: \"onOpened\",\n value: function onOpened(node, isAppearing) {\n this.props.onOpened();\n (this.props.modalTransition.onEntered || noop)(node, isAppearing);\n }\n }, {\n key: \"onClosed\",\n value: function onClosed(node) {\n var unmountOnClose = this.props.unmountOnClose;\n // so all methods get called before it is unmounted\n this.props.onClosed();\n (this.props.modalTransition.onExited || noop)(node);\n if (unmountOnClose) {\n this.destroy();\n }\n this.close();\n if (this._isMounted) {\n this.setState({\n isOpen: false\n });\n }\n }\n }, {\n key: \"setFocus\",\n value: function setFocus() {\n if (this._dialog && this._dialog.parentNode && typeof this._dialog.parentNode.focus === 'function') {\n this._dialog.parentNode.focus();\n }\n }\n }, {\n key: \"getFocusableChildren\",\n value: function getFocusableChildren() {\n return this._element.querySelectorAll(focusableElements.join(', '));\n }\n }, {\n key: \"getFocusedChild\",\n value: function getFocusedChild() {\n var currentFocus;\n var focusableChildren = this.getFocusableChildren();\n try {\n currentFocus = document.activeElement;\n } catch (err) {\n currentFocus = focusableChildren[0];\n }\n return currentFocus;\n }\n }, {\n key: \"trapFocus\",\n value: function trapFocus(ev) {\n if (!this.props.trapFocus) {\n return;\n }\n if (!this._element) {\n // element is not attached\n return;\n }\n if (this._dialog && this._dialog.parentNode === ev.target) {\n // initial focus when the Modal is opened\n return;\n }\n if (this.modalIndex < Modal.openCount - 1) {\n // last opened modal\n return;\n }\n var children = this.getFocusableChildren();\n for (var i = 0; i < children.length; i += 1) {\n // focus is already inside the Modal\n if (children[i] === ev.target) return;\n }\n if (children.length > 0) {\n // otherwise focus the first focusable element in the Modal\n ev.preventDefault();\n ev.stopPropagation();\n children[0].focus();\n }\n }\n }, {\n key: \"init\",\n value: function init() {\n try {\n this._triggeringElement = document.activeElement;\n } catch (err) {\n this._triggeringElement = null;\n }\n if (!this._element) {\n this._element = document.createElement('div');\n this._element.setAttribute('tabindex', '-1');\n this._element.style.position = 'relative';\n this._element.style.zIndex = this.props.zIndex;\n this._mountContainer = getTarget(this.props.container);\n this._mountContainer.appendChild(this._element);\n }\n this._originalBodyPadding = getOriginalBodyPadding();\n if (Modal.openCount < 1) {\n Modal.originalBodyOverflow = window.getComputedStyle(document.body).overflow;\n }\n conditionallyUpdateScrollbar();\n if (Modal.openCount === 0) {\n document.body.className = classNames(document.body.className, mapToCssModules('modal-open', this.props.cssModule));\n document.body.style.overflow = 'hidden';\n }\n this.modalIndex = Modal.openCount;\n Modal.openCount += 1;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (this._element) {\n this._mountContainer.removeChild(this._element);\n this._element = null;\n }\n this.manageFocusAfterClose();\n }\n }, {\n key: \"manageFocusAfterClose\",\n value: function manageFocusAfterClose() {\n if (this._triggeringElement) {\n var returnFocusAfterClose = this.props.returnFocusAfterClose;\n if (this._triggeringElement.focus && returnFocusAfterClose) this._triggeringElement.focus();\n this._triggeringElement = null;\n }\n }\n }, {\n key: \"close\",\n value: function close() {\n if (Modal.openCount <= 1) {\n var modalOpenClassName = mapToCssModules('modal-open', this.props.cssModule);\n // Use regex to prevent matching `modal-open` as part of a different class, e.g. `my-modal-opened`\n var modalOpenClassNameRegex = new RegExp(\"(^| )\".concat(modalOpenClassName, \"( |$)\"));\n document.body.className = document.body.className.replace(modalOpenClassNameRegex, ' ').trim();\n document.body.style.overflow = Modal.originalBodyOverflow;\n }\n this.manageFocusAfterClose();\n Modal.openCount = Math.max(0, Modal.openCount - 1);\n setScrollbarWidth(this._originalBodyPadding);\n }\n }, {\n key: \"clearBackdropAnimationTimeout\",\n value: function clearBackdropAnimationTimeout() {\n if (this._backdropAnimationTimeout) {\n clearTimeout(this._backdropAnimationTimeout);\n this._backdropAnimationTimeout = undefined;\n }\n }\n }, {\n key: \"renderModalDialog\",\n value: function renderModalDialog() {\n var _classNames,\n _this3 = this;\n var attributes = omit(this.props, propsToOmit);\n var dialogBaseClass = 'modal-dialog';\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n className: mapToCssModules(classNames(dialogBaseClass, this.props.className, (_classNames = {}, _defineProperty(_classNames, \"modal-\".concat(this.props.size), this.props.size), _defineProperty(_classNames, \"\".concat(dialogBaseClass, \"-centered\"), this.props.centered), _defineProperty(_classNames, \"\".concat(dialogBaseClass, \"-scrollable\"), this.props.scrollable), _defineProperty(_classNames, 'modal-fullscreen', this.props.fullscreen === true), _defineProperty(_classNames, \"modal-fullscreen-\".concat(this.props.fullscreen, \"-down\"), typeof this.props.fullscreen === 'string'), _classNames)), this.props.cssModule),\n role: \"document\",\n ref: function ref(c) {\n _this3._dialog = c;\n }\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(classNames('modal-content', this.props.contentClassName), this.props.cssModule)\n }, this.props.children));\n }\n }, {\n key: \"render\",\n value: function render() {\n var unmountOnClose = this.props.unmountOnClose;\n if (!!this._element && (this.state.isOpen || !unmountOnClose)) {\n var isModalHidden = !!this._element && !this.state.isOpen && !unmountOnClose;\n this._element.style.display = isModalHidden ? 'none' : 'block';\n var _this$props2 = this.props,\n wrapClassName = _this$props2.wrapClassName,\n modalClassName = _this$props2.modalClassName,\n backdropClassName = _this$props2.backdropClassName,\n cssModule = _this$props2.cssModule,\n isOpen = _this$props2.isOpen,\n backdrop = _this$props2.backdrop,\n role = _this$props2.role,\n labelledBy = _this$props2.labelledBy,\n external = _this$props2.external,\n innerRef = _this$props2.innerRef;\n var modalAttributes = {\n onClick: this.handleBackdropClick,\n onMouseDown: this.handleBackdropMouseDown,\n onKeyUp: this.handleEscape,\n onKeyDown: this.handleTab,\n style: {\n display: 'block'\n },\n 'aria-labelledby': labelledBy,\n 'aria-modal': true,\n role: role,\n tabIndex: '-1'\n };\n var hasTransition = this.props.fade;\n var modalTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), this.props.modalTransition), {}, {\n baseClass: hasTransition ? this.props.modalTransition.baseClass : '',\n timeout: hasTransition ? this.props.modalTransition.timeout : 0\n });\n var backdropTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), this.props.backdropTransition), {}, {\n baseClass: hasTransition ? this.props.backdropTransition.baseClass : '',\n timeout: hasTransition ? this.props.backdropTransition.timeout : 0\n });\n var Backdrop = backdrop && (hasTransition ? /*#__PURE__*/React.createElement(Fade, _extends({}, backdropTransition, {\n \"in\": isOpen && !!backdrop,\n cssModule: cssModule,\n className: mapToCssModules(classNames('modal-backdrop', backdropClassName), cssModule)\n })) : /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(classNames('modal-backdrop', 'show', backdropClassName), cssModule)\n }));\n return /*#__PURE__*/React.createElement(Portal, {\n node: this._element\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(wrapClassName)\n }, /*#__PURE__*/React.createElement(Fade, _extends({}, modalAttributes, modalTransition, {\n \"in\": isOpen,\n onEntered: this.onOpened,\n onExited: this.onClosed,\n cssModule: cssModule,\n className: mapToCssModules(classNames('modal', modalClassName, this.state.showStaticBackdropAnimation && 'modal-static'), cssModule),\n innerRef: innerRef\n }), external, this.renderModalDialog()), Backdrop));\n }\n return null;\n }\n }]);\n return Modal;\n}(React.Component);\nModal.propTypes = propTypes;\nModal.defaultProps = defaultProps;\nModal.openCount = 0;\nModal.originalBodyOverflow = null;\nexport default Modal;","var _excluded = [\"className\", \"cssModule\", \"children\", \"toggle\", \"tag\", \"wrapTag\", \"closeAriaLabel\", \"close\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Custom close button */\n close: PropTypes.object,\n closeAriaLabel: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Function to be triggered when close button is clicked */\n toggle: PropTypes.func,\n wrapTag: tagPropType\n};\nfunction ModalHeader(props) {\n var closeButton;\n var className = props.className,\n cssModule = props.cssModule,\n children = props.children,\n toggle = props.toggle,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'h5' : _props$tag,\n _props$wrapTag = props.wrapTag,\n WrapTag = _props$wrapTag === void 0 ? 'div' : _props$wrapTag,\n _props$closeAriaLabel = props.closeAriaLabel,\n closeAriaLabel = _props$closeAriaLabel === void 0 ? 'Close' : _props$closeAriaLabel,\n close = props.close,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-header'), cssModule);\n if (!close && toggle) {\n closeButton = /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n onClick: toggle,\n className: mapToCssModules('btn-close', cssModule),\n \"aria-label\": closeAriaLabel\n });\n }\n return /*#__PURE__*/React.createElement(WrapTag, _extends({}, attributes, {\n className: classes\n }), /*#__PURE__*/React.createElement(Tag, {\n className: mapToCssModules('modal-title', cssModule)\n }, children), close || closeButton);\n}\nModalHeader.propTypes = propTypes;\nexport default ModalHeader;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction ModalBody(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-body'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nModalBody.propTypes = propTypes;\nexport default ModalBody;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"tag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n tag: tagPropType,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar Form = /*#__PURE__*/function (_Component) {\n _inherits(Form, _Component);\n var _super = _createSuper(Form);\n function Form(props) {\n var _this;\n _classCallCheck(this, Form);\n _this = _super.call(this, props);\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.submit = _this.submit.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(Form, [{\n key: \"getRef\",\n value: function getRef(ref) {\n if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n this.ref = ref;\n }\n }, {\n key: \"submit\",\n value: function submit() {\n if (this.ref) {\n this.ref.submit();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n _this$props$tag = _this$props.tag,\n Tag = _this$props$tag === void 0 ? 'form' : _this$props$tag,\n innerRef = _this$props.innerRef,\n attributes = _objectWithoutProperties(_this$props, _excluded);\n var classes = mapToCssModules(className, cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes\n }));\n }\n }]);\n return Form;\n}(Component);\nForm.propTypes = propTypes;\nexport default Form;","var _excluded = [\"className\", \"cssModule\", \"row\", \"disabled\", \"check\", \"inline\", \"floating\", \"tag\", \"switch\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n row: PropTypes.bool,\n check: PropTypes.bool,\n \"switch\": PropTypes.bool,\n inline: PropTypes.bool,\n floating: PropTypes.bool,\n disabled: PropTypes.bool,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nfunction FormGroup(props) {\n var className = props.className,\n cssModule = props.cssModule,\n row = props.row,\n disabled = props.disabled,\n check = props.check,\n inline = props.inline,\n floating = props.floating,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n switchProp = props[\"switch\"],\n attributes = _objectWithoutProperties(props, _excluded);\n var formCheck = check || switchProp;\n var classes = mapToCssModules(classNames(className, row ? 'row' : false, formCheck ? 'form-check' : 'mb-3', switchProp ? 'form-switch' : false, formCheck && inline ? 'form-check-inline' : false, formCheck && disabled ? 'disabled' : false, floating && 'form-floating'), cssModule);\n if (Tag === 'fieldset') {\n attributes.disabled = disabled;\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nFormGroup.propTypes = propTypes;\nexport default FormGroup;","var _excluded = [\"className\", \"cssModule\", \"hidden\", \"widths\", \"tag\", \"check\", \"size\", \"for\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType, isObject } from './utils';\nvar colWidths = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\nvar stringOrNumberProp = PropTypes.oneOfType([PropTypes.number, PropTypes.string]);\nvar columnProps = PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.number, PropTypes.shape({\n size: stringOrNumberProp,\n order: stringOrNumberProp,\n offset: stringOrNumberProp\n})]);\nvar propTypes = {\n children: PropTypes.node,\n hidden: PropTypes.bool,\n check: PropTypes.bool,\n size: PropTypes.string,\n \"for\": PropTypes.string,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n xs: columnProps,\n sm: columnProps,\n md: columnProps,\n lg: columnProps,\n xl: columnProps,\n xxl: columnProps,\n widths: PropTypes.array\n};\nvar getColumnSizeClass = function getColumnSizeClass(isXs, colWidth, colSize) {\n if (colSize === true || colSize === '') {\n return isXs ? 'col' : \"col-\".concat(colWidth);\n }\n if (colSize === 'auto') {\n return isXs ? 'col-auto' : \"col-\".concat(colWidth, \"-auto\");\n }\n return isXs ? \"col-\".concat(colSize) : \"col-\".concat(colWidth, \"-\").concat(colSize);\n};\nfunction Label(props) {\n var className = props.className,\n cssModule = props.cssModule,\n hidden = props.hidden,\n _props$widths = props.widths,\n widths = _props$widths === void 0 ? colWidths : _props$widths,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'label' : _props$tag,\n check = props.check,\n size = props.size,\n htmlFor = props[\"for\"],\n attributes = _objectWithoutProperties(props, _excluded);\n var colClasses = [];\n widths.forEach(function (colWidth, i) {\n var columnProp = props[colWidth];\n delete attributes[colWidth];\n if (!columnProp && columnProp !== '') {\n return;\n }\n var isXs = !i;\n var colClass;\n if (isObject(columnProp)) {\n var _classNames;\n var colSizeInterfix = isXs ? '-' : \"-\".concat(colWidth, \"-\");\n colClass = getColumnSizeClass(isXs, colWidth, columnProp.size);\n colClasses.push(mapToCssModules(classNames((_classNames = {}, _defineProperty(_classNames, colClass, columnProp.size || columnProp.size === ''), _defineProperty(_classNames, \"order\".concat(colSizeInterfix).concat(columnProp.order), columnProp.order || columnProp.order === 0), _defineProperty(_classNames, \"offset\".concat(colSizeInterfix).concat(columnProp.offset), columnProp.offset || columnProp.offset === 0), _classNames))), cssModule);\n } else {\n colClass = getColumnSizeClass(isXs, colWidth, columnProp);\n colClasses.push(colClass);\n }\n });\n var colFormLabel = size || colClasses.length;\n var formLabel = !(check || colFormLabel);\n var classes = mapToCssModules(classNames(className, hidden ? 'visually-hidden' : false, check ? 'form-check-label' : false, size ? \"col-form-label-\".concat(size) : false, colClasses, colFormLabel ? 'col-form-label' : false, formLabel ? 'form-label' : false), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({\n htmlFor: htmlFor\n }, attributes, {\n className: classes\n }));\n}\nLabel.propTypes = propTypes;\nexport default Label;","var _excluded = [\"className\", \"cssModule\", \"inline\", \"color\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n inline: PropTypes.bool,\n tag: tagPropType,\n color: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nfunction FormText(props) {\n var className = props.className,\n cssModule = props.cssModule,\n inline = props.inline,\n _props$color = props.color,\n color = _props$color === void 0 ? 'muted' : _props$color,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'small' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, !inline ? 'form-text' : false, color ? \"text-\".concat(color) : false), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nFormText.propTypes = propTypes;\nexport default FormText;","var _excluded = [\"className\", \"closeClassName\", \"closeAriaLabel\", \"cssModule\", \"tag\", \"color\", \"isOpen\", \"toggle\", \"children\", \"transition\", \"fade\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nimport Fade from './Fade';\nvar propTypes = {\n /** Pass children so this component can wrap the child elements */\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Add custom class for close button */\n closeClassName: PropTypes.string,\n /** Aria label for close button */\n closeAriaLabel: PropTypes.string,\n /** Change color of alert */\n color: PropTypes.string,\n /** Change existing className with a new className */\n cssModule: PropTypes.object,\n /** Toggle fade animation */\n fade: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]),\n /** Control visibility state of Alert */\n isOpen: PropTypes.bool,\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Function to toggle visibility */\n toggle: PropTypes.func,\n /** Props to be passed to `Fade` to modify transition */\n transition: PropTypes.shape(Fade.propTypes)\n};\nfunction Alert(props) {\n var className = props.className,\n closeClassName = props.closeClassName,\n _props$closeAriaLabel = props.closeAriaLabel,\n closeAriaLabel = _props$closeAriaLabel === void 0 ? 'Close' : _props$closeAriaLabel,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n _props$color = props.color,\n color = _props$color === void 0 ? 'success' : _props$color,\n _props$isOpen = props.isOpen,\n isOpen = _props$isOpen === void 0 ? true : _props$isOpen,\n toggle = props.toggle,\n children = props.children,\n _props$transition = props.transition,\n transition = _props$transition === void 0 ? _objectSpread(_objectSpread({}, Fade.defaultProps), {}, {\n unmountOnExit: true\n }) : _props$transition,\n _props$fade = props.fade,\n fade = _props$fade === void 0 ? true : _props$fade,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'alert', \"alert-\".concat(color), {\n 'alert-dismissible': toggle\n }), cssModule);\n var closeClasses = mapToCssModules(classNames('btn-close', closeClassName), cssModule);\n var alertTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), transition), {}, {\n baseClass: fade ? transition.baseClass : '',\n timeout: fade ? transition.timeout : 0\n });\n return /*#__PURE__*/React.createElement(Fade, _extends({}, attributes, alertTransition, {\n tag: Tag,\n className: classes,\n \"in\": isOpen,\n role: \"alert\",\n innerRef: innerRef\n }), toggle ? /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: closeClasses,\n \"aria-label\": closeAriaLabel,\n onClick: toggle\n }) : null, children);\n}\nAlert.propTypes = propTypes;\nexport default Alert;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction ModalFooter(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-footer'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nModalFooter.propTypes = propTypes;\nexport default ModalFooter;","import React from 'react';\n\n/**\n * TabContext\n * {\n * activeTabId: PropTypes.any\n * }\n */\nexport var TabContext = /*#__PURE__*/React.createContext({});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { TabContext } from './TabContext';\nimport { mapToCssModules, omit, tagPropType } from './utils';\nvar propTypes = {\n tag: tagPropType,\n activeTab: PropTypes.any,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar TabContent = /*#__PURE__*/function (_Component) {\n _inherits(TabContent, _Component);\n var _super = _createSuper(TabContent);\n function TabContent(props) {\n var _this;\n _classCallCheck(this, TabContent);\n _this = _super.call(this, props);\n _this.state = {\n activeTab: _this.props.activeTab\n };\n return _this;\n }\n _createClass(TabContent, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n _this$props$tag = _this$props.tag,\n Tag = _this$props$tag === void 0 ? 'div' : _this$props$tag;\n var attributes = omit(this.props, Object.keys(propTypes));\n var classes = mapToCssModules(classNames('tab-content', className), cssModule);\n return /*#__PURE__*/React.createElement(TabContext.Provider, {\n value: {\n activeTabId: this.state.activeTab\n }\n }, /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n })));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (prevState.activeTab !== nextProps.activeTab) {\n return {\n activeTab: nextProps.activeTab\n };\n }\n return null;\n }\n }]);\n return TabContent;\n}(Component);\nexport default TabContent;\nTabContent.propTypes = propTypes;","var _excluded = [\"className\", \"cssModule\", \"tabId\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { TabContext } from './TabContext';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n tabId: PropTypes.any\n};\nexport default function TabPane(props) {\n var className = props.className,\n cssModule = props.cssModule,\n tabId = props.tabId,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var getClasses = function getClasses(activeTabId) {\n return mapToCssModules(classNames('tab-pane', className, {\n active: tabId === activeTabId\n }), cssModule);\n };\n return /*#__PURE__*/React.createElement(TabContext.Consumer, null, function (_ref) {\n var activeTabId = _ref.activeTabId;\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: getClasses(activeTabId)\n }));\n });\n}\nTabPane.propTypes = propTypes;","var _excluded = [\"className\", \"cssModule\", \"valid\", \"tooltip\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n valid: PropTypes.bool,\n tooltip: PropTypes.bool\n};\nfunction FormFeedback(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$valid = props.valid,\n valid = _props$valid === void 0 ? undefined : _props$valid,\n tooltip = props.tooltip,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var validMode = tooltip ? 'tooltip' : 'feedback';\n var classes = mapToCssModules(classNames(className, valid ? \"valid-\".concat(validMode) : \"invalid-\".concat(validMode)), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nFormFeedback.propTypes = propTypes;\nexport default FormFeedback;","var _excluded = [\"className\", \"cssModule\", \"type\", \"size\", \"color\", \"children\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Change animation of spinner */\n type: PropTypes.oneOf(['border', 'grow']),\n /** Change size of spinner */\n size: PropTypes.oneOf(['sm']),\n /** Change color of spinner */\n color: PropTypes.oneOf(['primary', 'secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark']),\n /** Add custom class */\n className: PropTypes.string,\n /** Change existing className with a new className */\n cssModule: PropTypes.object,\n /** Pass children so this component can wrap the child elements */\n children: PropTypes.string\n};\nfunction Spinner(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$type = props.type,\n type = _props$type === void 0 ? 'border' : _props$type,\n size = props.size,\n color = props.color,\n _props$children = props.children,\n children = _props$children === void 0 ? 'Loading...' : _props$children,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, size ? \"spinner-\".concat(type, \"-\").concat(size) : false, \"spinner-\".concat(type), color ? \"text-\".concat(color) : false), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({\n role: \"status\"\n }, attributes, {\n className: classes\n }), children && /*#__PURE__*/React.createElement(\"span\", {\n className: mapToCssModules('visually-hidden', cssModule)\n }, children));\n}\nSpinner.propTypes = propTypes;\nexport default Spinner;","var _excluded = [\"children\", \"className\", \"barClassName\", \"cssModule\", \"value\", \"min\", \"max\", \"animated\", \"striped\", \"color\", \"bar\", \"multi\", \"tag\", \"style\", \"barStyle\", \"barAriaValueText\", \"barAriaLabelledBy\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType, toNumber } from './utils';\nvar propTypes = {\n /** Enable animation to bar */\n animated: PropTypes.bool,\n bar: PropTypes.bool,\n barAriaLabelledBy: PropTypes.string,\n barAriaValueText: PropTypes.string,\n barClassName: PropTypes.string,\n barStyle: PropTypes.object,\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Add custom color to the placeholder */\n color: PropTypes.string,\n /** Maximum value of progress */\n max: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /** Minimum value of progress, defaults to zero */\n min: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n multi: PropTypes.bool,\n /** Add stripes to progress bar */\n striped: PropTypes.bool,\n style: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Current value of progress */\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\nfunction Progress(props) {\n var children = props.children,\n className = props.className,\n barClassName = props.barClassName,\n cssModule = props.cssModule,\n _props$value = props.value,\n value = _props$value === void 0 ? 0 : _props$value,\n _props$min = props.min,\n min = _props$min === void 0 ? 0 : _props$min,\n _props$max = props.max,\n max = _props$max === void 0 ? 100 : _props$max,\n animated = props.animated,\n striped = props.striped,\n color = props.color,\n bar = props.bar,\n multi = props.multi,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n _props$style = props.style,\n style = _props$style === void 0 ? {} : _props$style,\n _props$barStyle = props.barStyle,\n barStyle = _props$barStyle === void 0 ? {} : _props$barStyle,\n barAriaValueText = props.barAriaValueText,\n barAriaLabelledBy = props.barAriaLabelledBy,\n attributes = _objectWithoutProperties(props, _excluded);\n var percent = toNumber(value) / toNumber(max) * 100;\n var progressClasses = mapToCssModules(classNames(className, 'progress'), cssModule);\n var progressBarClasses = mapToCssModules(classNames('progress-bar', bar ? className || barClassName : barClassName, animated ? 'progress-bar-animated' : null, color ? \"bg-\".concat(color) : null, striped || animated ? 'progress-bar-striped' : null), cssModule);\n var progressBarProps = {\n className: progressBarClasses,\n style: _objectSpread(_objectSpread(_objectSpread({}, bar ? style : {}), barStyle), {}, {\n width: \"\".concat(percent, \"%\")\n }),\n role: 'progressbar',\n 'aria-valuenow': value,\n 'aria-valuemin': min,\n 'aria-valuemax': max,\n 'aria-valuetext': barAriaValueText,\n 'aria-labelledby': barAriaLabelledBy,\n children: children\n };\n if (bar) {\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, progressBarProps));\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n style: style,\n className: progressClasses\n }), multi ? children : /*#__PURE__*/React.createElement(\"div\", progressBarProps));\n}\nProgress.propTypes = propTypes;\nexport default Progress;","var _excluded = [\"className\", \"cssModule\", \"color\", \"body\", \"inverse\", \"outline\", \"tag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Toggles card padding using `.card-body` */\n body: PropTypes.bool,\n /** Add custom class */\n className: PropTypes.string,\n /** Change background color of component */\n color: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]),\n /** Inverts the color */\n inverse: PropTypes.bool,\n /** Changes the card to have only outline */\n outline: PropTypes.bool,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction Card(props) {\n var className = props.className,\n cssModule = props.cssModule,\n color = props.color,\n body = props.body,\n inverse = props.inverse,\n outline = props.outline,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'card', inverse ? 'text-white' : false, body ? 'card-body' : false, color ? \"\".concat(outline ? 'border' : 'bg', \"-\").concat(color) : false), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes,\n ref: innerRef\n }));\n}\nCard.propTypes = propTypes;\nexport default Card;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction CardHeader(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'card-header'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nCardHeader.propTypes = propTypes;\nexport default CardHeader;","var _excluded = [\"className\", \"cssModule\", \"innerRef\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]),\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction CardBody(props) {\n var className = props.className,\n cssModule = props.cssModule,\n innerRef = props.innerRef,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'card-body'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes,\n ref: innerRef\n }));\n}\nCardBody.propTypes = propTypes;\nexport default CardBody;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction CardFooter(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'card-footer'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nCardFooter.propTypes = propTypes;\nexport default CardFooter;","// Average time in seconds that it takes to generate a song\n// with the OrchestrAI tool using OpenAI's custom GPTs API.\n// Average was calculated from 14 trials on 2023-12-04.\nexport const AVERAGE_ORCHESTRAI_COMPLETION_TIME = 71;\n\n// Messages to display while the OrchestrAI tool is generating music.\nexport const ORCHESTRAI_LOADING_MESSAGES = [\n\t\"Generating music...\",\n\t\"This usually takes about a minute...\",\n\t\"Picking a chord progression...\",\n\t\"Constructing a bangin melody...\",\n\t\"Seeking inspiration from the greats...\",\n\t\"Taking a cry break...\",\n\t\"Piecing together some harmonies...\",\n\t\"Creating a masterpiece...\",\n \"Adding some sick beats...\",\n\t\"Stringing together some notes...\",\n\t\"Scratching everything and starting over...\",\n\t\"Getting in a fight with the drummer...\",\n\t\"Articulating splines...\",\n\t\"Summoning the muse...\",\n\t\"Writing original music with a computer in defiance of the gods...\",\n\t\"Adding the finishing touches...\",\n];\n\nexport const ORCHESTRAI_TIMEOUT_DURATION = 60 * 2; // 2 minutes (in seconds)\n\nexport const ORCHESTRAI_SAVE_FILE_VERSION = \"1.0.0\";\n\nexport const VIBE_SUGGESTIONS = [\n\t\"A wistful goodbye\",\n\t\"Quiet contemplation by the sea\",\n\t\"Yearning for adventure\",\n\t\"The thrill of discovery\",\n\t\"The peace of a sleeping city\",\n\t\"Dawn of the first spring day\",\n\t\"A moment of revelation\",\n\t\"The hustle and bustle of a lively market\",\n\t\"The stillness of a forest at dusk\",\n\t\"An intimate conversation by candlelight\",\n\t\"The joy of reuniting with old friends\",\n\t\"Nighttime in a magical garden\",\n\t\"Sailing into the sunset\",\n\t\"Overcoming inner demons\",\n\t\"A dance under the stars\",\n\t\"The tension of preparing for battle\",\n\t\"The nostalgia of looking through old photographs\",\n\t\"The enchantment of a winter wonderland\",\n\t\"The comfort of a warm embrace\",\n\t\"The bittersweet feeling of a completed journey\",\n\t\"The tranquility of a mountain vista\",\n\t\"Anticipation of a new beginning\",\n\t\"Solitude of a rainy afternoon\",\n\t\"The exhilaration of a challenge overcome\",\n\t\"The whimsy of a child's imagination\",\n\t\"A reflective walk through autumn leaves\",\n\t\"The elegance of a grand ballroom\",\n\t\"The warmth of a family gathering\",\n\t\"The mystery of a moonlit path\",\n\t\"The hopefulness of a sunrise on a clear morning\",\n\t\"The serendipity of an unexpected friendship\",\n\t\"The sorrow of a farewell without words\",\n\t\"The pride of a triumph earned\",\n\t\"The majesty of an ancient city\",\n\t\"The energy of a city awakening\",\n\t\"The charm of a quaint village street\",\n\t\"Longing for a lost love\",\n\t\"The humor of life's little mishaps\",\n\t\"The tension in the air before a storm\",\n\t\"The resolution after a heartfelt apology\",\n\t\"The exhilaration of a spontaneous adventure\",\n\t\"The sacredness of a timeless ritual\",\n\t\"The mischief of a night out with friends\",\n\t\"A meditative moment in a Zen garden\",\n\t\"The rush of the first snowfall\",\n\t\"The courage in facing the unknown\",\n];\n\nexport const PROMPT_SUGGESTIONS = [\n\t`Starry Night Serenade: A gentle, calming melody that evokes the feeling of gazing at a clear night sky, with twinkling stars and a tranquil atmosphere.`,\n\t`Autumnal Equinox: A piece that captures the essence of fall, with warm chords and a nostalgic vibe, as if watching leaves slowly changing colors and drifting to the ground.`,\n\t`Joyful Reunion: An uplifting and bright composition filled with excitement and warmth, embodying the feeling of friends or family members meeting after a long time apart.`,\n\t`Mystic Journey: A composition with a sense of adventure and discovery, suitable for depicting a voyage through ancient ruins or a quest in search of enchanted artifacts.`,\n\t`Sunrise on the Meadow: A composition that represents the peace and freshness of early morning, with slow crescendos like the sun rising and casting its first rays on a dew-covered meadow.`,\n\t`Harbor Festival: A lively and rhythmic piece with an exuberant atmosphere, reminiscent of a bustling seaport celebrating a local festival with music, dance, and merrymaking.`,\n\t`Whispers of the Old Forest: A haunting, ethereal melody that suggests a walk through an ancient, mystical forest with whispers of the past echoing between the trees.`,\n\t`Winter Hearth Tales: A warm, inviting piece that conjures up images of a cozy fireplace, with friends and family gathered around sharing stories on a cold winter's night.`,\n\t`Courage of the Knights: An inspiring and majestic composition that might accompany a scene of valiant knights setting out on a noble quest, with triumphant chords and a regal tone.`,\n\t`Sailing the Crystal Seas: An airy, free-flowing melody that embodies the sensation of sailing on a vast, glittering ocean with the breeze at your back and endless horizons ahead.`,\n];\n\nexport const FEW_SHOT_EXAMPLES = [\n {\n prompt: \"Compose a tune that expresses the following vibe: A dance under the stars\",\n response: `To compose a tune that captures the essence of a dance under the stars, I will try to incorporate smooth voice leading, counterpoint principles such as contrary and oblique motion, careful interval management, avoidance of parallel fifths and octaves, imitative counterpoint, logical harmonic progression, rhythmic variety, avoidance of voice crossings and overlaps, and culmination in cadence.\nI will use a major key to convey a sense of joy and light-heartedness associated with dancing. I've chosen the tempo of 120 bpm to suggest a lively dance and the 3/4 meter in order to capture the rhythmic feel of a waltz which is often associated with traditional dances that one could envision taking place under an open, starlit sky. I will try to incorporate some minor harmonies or dissonant intervals, creating tension that could represent the mysterious and awe-inspiring aspect of the stars before resolving back to the major key for a sense of warmth and resolution.\nThe music will feature intricate interplay between voices, making each line melodically interesting and rhythmically engaging. I will also ensure that the rhythmic patterns enhance the feeling of dancing and include syncopation to add a playful character to the music.\nI hope you enjoy:\n\\`\\`\\`abc\nX:1\nT:Dance Under the Stars\nC:OrchestrAI\nM:3/4\nL:1/8\nQ:1/4=120\nK:Gmaj\nV:1 clef=treble\n|:\"G\"B2 BAGF|\"C\"E3 FG2|\"D\"A3 FED|\"G\"B4 z2|\n\"G\"G3 A B2|\"C\"E3 DCB,|\"Am\"A,2 A,4|\"D7\"G,2 F,4|\n\"D\"D3 FED|\"G\"B,4 D2|\"Em\"GAB AGF|\"D7\"E3 FED|\n\"G\"B2 B3 A|\"Am\"B3 cBA|\"G\"B2 G4-|\"G\"G6:|\nV:2 clef=treble\n|\"G\"D2 D3 E|\"C\"C3 D E2|\"D\"F3 ED2|\"G\"D4 z2|\n\"D\"D3 FED|\"C\"C3 DC2|\"Am\"A,2 A,4|\"D7\" F,3 E,3|\n\"D\"D3 FED|\"G\"G,3 B,3|\"Em\"G3- GFE|\"D7\"D3 EDE|\n\"G\"D2 D3 E|\"Am\"E3 FGA|\"G\"G2 D4-|\"G\"D6:|\nV:3 clef=bass\n|\"G\"G,2 B,4|\"C\"C2 E4|\"D\"F2 D4|\"G\"G,2 B,4|\n\"D\"A,2 D4|\"C\"E2 C4|\"Am\"A,2 C4|\"D7\"F2 A,4|\n\"D\"F2 A,4|\"G\"G,2 B,4|\"Em\"E2 G4|\"D7\"F2 A,4|\n\"G\"G,2 D4|\"Am\"E2 C4|\"G\"G,2 B,4-|\"G\"G,6:|\n\\`\\`\\``\n },\n {\n prompt: \"Please create a tune for this prompt: create a song about the joy of reuniting with old friends\",\n response: `For a tune expressing the joy of reuniting with old friends, we will aim for an upbeat melody, using major tonality, bright chord progressions, and a lively tempo to evoke the warmth and happiness of such an occasion. The composition will feature contrasting sections to reflect the different aspects of joyful reunions: the surprise and excitement of seeing friends, the warm embrace, and the cheerful conversations.\n It is composed in a major key which helps associate it with warmth and happiness. I will set the tempo to a lively 120 bpm, suitable for expressing joy and excitement.\n I hope you enjoy:\n\\`\\`\\`abc \nX:1\nT:Reunion Rhapsody\nC:OrchestrAI\nM:4/4\nL:1/8\nQ:1/4=120\nK:G\n% The introduction symbolizes the anticipation of the reunion\nV:1\n|: \"G\" B2D2 G2B2 | \"D\" A4- A2B2 | \"C\" c4- c2E2 | \"D7\" D6 D2 | \n\"G\" B2D2 G2B2 | \"D\" A4- A2B2 | \"C\" e4- e2c2 | \"D7\" d6 z2 :|\nV:2\n|: [G,2B,2] z B3B,2 | [A,2E2] z A3A,2 | [C2E2] z E3E,2 | [D2F2] z F3F,2 | \n[G,2B,2] z B3B,2 | [A,2E2] z A3A,2 | [C2E2] z E3E,2 | [D2F2] z F3F,2 :|\n% The next section represents the joyous greeting between friends\nV:1\n|: \"G\" d4 B2G2 | \"Em\" B4 A2G2 | \"Am\" A4 c3e | \"D7\" d6 z2 |\n\"G\" B4 d3B | \"C\" e4 c2A2 | \"G\" D4 G2B2 | \"D7\" A6 z2 :|\nV:2\n|: [G,2D2] z G,3D2 | [E2B,2] z E3B,2 | [A,2E2] z A,3E2 | [D2A,2] z D3A,2 | \n[G,2D2] z G,3D2 | [C2G,2] z C3G,2 | [G,2D2] z G,3D2 | [D2A,2] z D3A,2 :|\n% The middle section reflects the warmth and affection in the embrace\nV:1\n|: \"Em\" E4- E2G2 | \"Am\" A4- A2c2 | \"D\" D4- D2F2 | \"G\" G6 B2 |\n\"C\" E4- E2G2 | \"Am\" A2c2 A2G2 | \"Em\" G4- G2E2 | \"D7\" D6 z2 :|\nV:2\n|: [E2G2] z E3G,2 | [A2C2] z A3A,2 | [D2F2] z D3D,2 | [G2B,2] z G3G,2 | \n[E2G2] z E3G,2 | [A2C2] z A3A,2 | [E2G2] z E3E,2 | [D2F2] z D3F,2 :|\n% The final section symbolizes the lively chatter and catch-up\nV:1\n|: \"G\" d2B2 G2D2 | \"C\" c2E2 A2c2 | \"G\" B2d2 G2B2 | \"D7\" A4 F2D2 |\n\"G\" G2B2 D2G2 | \"C\" c2E2 G2c2 | \"G\" B2d2 \"D7\" F2A2 | \"G\" G8 :|\nV:2\n|: [G,2B,2] z B3D2 | [C,2E2] z E3A,2 | [G,2B,2] z B3D2 | [D2F2] z F3A,2 | \n[G,2B,2] z B3D2 | [C,2E2] z E3G,2 | [G,2B,2] z B3D2 | [G,2B,2] z2 z4 :|\n`\n },\n];","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv\n}\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n if (!hasJSONContentType) {\n return data;\n }\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport cookies from './../helpers/cookies.js';\nimport buildURL from './../helpers/buildURL.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport isURLSameOrigin from './../helpers/isURLSameOrigin.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport speedometer from '../helpers/speedometer.js';\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n };\n}\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = AxiosHeaders.from(config.headers).normalize();\n let {responseType, withXSRFToken} = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n let contentType;\n\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n\n const fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if(platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(fullPath);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","export const VERSION = \"1.6.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from \"axios\";\n\nimport { FEW_SHOT_EXAMPLES } from \"../assets/Constants\";\n\nclass OrchestrAIService {\n\tconstructor(apiKey) {\n\t\tthis.axiosInstance = axios.create({\n\t\t\tbaseURL: \"https://api.openai.com/v1/\",\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\"OpenAI-Beta\": \"assistants=v1\",\n\t\t\t},\n\t\t});\n\t}\n\n\tasync createThread(content) {\n\t\tconsole.debug(`Creating thread with prompt: ${content}`);\n\t\t// Load FEW_SHOT_EXAMPLES\n\t\t// FEW_SHOT_EXAMPLES is a list of objects with prompt and response keys\n\t\tlet msgs = [];\n\t\tfor (let i = 0; i < FEW_SHOT_EXAMPLES.length; i++) {\n\t\t\tmsgs.push({ role: \"user\", content: FEW_SHOT_EXAMPLES[i].prompt });\n\t\t\tmsgs.push({ role: \"user\", content: FEW_SHOT_EXAMPLES[i].response });\n\t\t}\n\t\tmsgs.push({ role: \"user\", content: content });\n\t\tconst response = await this.axiosInstance.post(\"threads\", {\n\t\t\tmessages: msgs,\n\t\t});\n\t\tconsole.debug(`Thread created with ID: ${response.data.id}`);\n\t\treturn response.data.id;\n\t}\n\n\tasync createRun(threadId) {\n\t\tconsole.debug(`Creating run with thread ID: ${threadId}`);\n\t\tconst response = await this.axiosInstance.post(\n\t\t\t`threads/${threadId}/runs`,\n\t\t\t{\n\t\t\t\tassistant_id: process.env.REACT_APP_ORCHESTRAI_ASSISTANT_ID,\n\t\t\t}\n\t\t);\n\t\tconsole.debug(`Run created with ID: ${response.data.id}`);\n\t\treturn response.data.id;\n\t}\n\n\tasync getRunStatus(threadId, runId) {\n\t\tconsole.debug(\n\t\t\t`Getting run status for thread ID: ${threadId}, run ID: ${runId}`\n\t\t);\n\t\tconst response = await this.axiosInstance.get(\n\t\t\t`threads/${threadId}/runs/${runId}`\n\t\t);\n\t\tconsole.debug(`Run status: ${response.data.status}`);\n\t\treturn response.data.status;\n\t}\n\n\tasync getMessages(threadId) {\n\t\tconsole.debug(`Getting messages for thread ID: ${threadId}`);\n\t\tconst response = await this.axiosInstance.get(\n\t\t\t`threads/${threadId}/messages`\n\t\t);\n\t\tconsole.debug(`Received ${response.data.data.length} messages`);\n\t\treturn response.data.data;\n\t}\n}\n\nexport default OrchestrAIService;\n","var _excluded = [\"className\", \"cssModule\", \"size\", \"bordered\", \"borderless\", \"striped\", \"dark\", \"hover\", \"responsive\", \"tag\", \"responsiveTag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Adds border to all sides of table */\n bordered: PropTypes.bool,\n /** Removes all borders */\n borderless: PropTypes.bool,\n /** Adds custom class name to component */\n className: PropTypes.string,\n /** */\n cssModule: PropTypes.object,\n /** Makes the table dark */\n dark: PropTypes.bool,\n /** Enables a hover state on the rows within `` */\n hover: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.object]),\n /** Responsive tables allow tables to be scrolled horizontally with ease */\n responsive: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n responsiveTag: tagPropType,\n /** Make tables more compact by cutting cell padding in half when setting size as sm. */\n size: PropTypes.string,\n /** Adds zebra-striping to any table row within the `` */\n striped: PropTypes.bool,\n /** Add custom tag to the component */\n tag: tagPropType\n};\nfunction Table(props) {\n var className = props.className,\n cssModule = props.cssModule,\n size = props.size,\n bordered = props.bordered,\n borderless = props.borderless,\n striped = props.striped,\n dark = props.dark,\n hover = props.hover,\n responsive = props.responsive,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'table' : _props$tag,\n _props$responsiveTag = props.responsiveTag,\n ResponsiveTag = _props$responsiveTag === void 0 ? 'div' : _props$responsiveTag,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'table', size ? 'table-' + size : false, bordered ? 'table-bordered' : false, borderless ? 'table-borderless' : false, striped ? 'table-striped' : false, dark ? 'table-dark' : false, hover ? 'table-hover' : false), cssModule);\n var table = /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes\n }));\n if (responsive) {\n var responsiveClassName = mapToCssModules(responsive === true ? 'table-responsive' : \"table-responsive-\".concat(responsive), cssModule);\n return /*#__PURE__*/React.createElement(ResponsiveTag, {\n className: responsiveClassName\n }, table);\n }\n return table;\n}\nTable.propTypes = propTypes;\nexport default Table;","import React from \"react\";\nimport { Table } from \"reactstrap\";\n\nconst Rubric = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{/* Grade,Impressive overall. I would be happy to write this myself.,Good overall. I am proud of the results of this composition.,Fine overall. I am okay with this being on my website.,Poor overall. I would rather regenerate this than try to fix its issues,Awful overall. This tune is embarrassing or painful to listen to.\n\t\t\t */}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{/* Notation,No notation mistakes whatsoever.,\"Only minor, non-critical notations mistakes are present.\",Noticeable mistakes that are cosmetic or can be easily fixed.,Critical mistakes that make the tune unsharable.,Overwhelming mistakes that overshadow anything good in the tune. */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{/* Melody,Impressive melody with good voice leading and varied rhythm.,Good melody with some variation and sense of direction.,\"Fine melody, but lacking shape, variety, or rhythm.\",No notable melody or variety at all.,Musically invalid melody. */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{/* Harmony,Impressive harmony that sounds beautiful and has intention.,Good harmony that generally sounds pleasant.,Fine harmony with some flaws or that lacks direction.,Poor harmony that distracts from or harms the listenability.,Awful harmony that is horrifying to listen to. */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{/* Chords,Impressive chords that I would be proud to write myself.,Good chords that clearly fit and give the music structure.,Fine chords with minor mistakes.,Poor chords that don’t match between voices.,Horrific chords that don’t match the key. */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{/* Vibe,Impressive how the music matches the provided vibe.,The music matches the provided vibe well.,The music generally fits the provided vibe.,The music doesn’t really match the vibe.,The music actively clashes with the provided vibe. */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{/* Lyrics,The lyrics are awesome and match the notes perfectly.,\"The lyrics are pretty good or they are great, but don’t quite fit the notes.\",\"The lyrics are on the right track, but need improvement.\",The lyrics make the tune seem worse than it they were gone.,The lyrics severely mess up the composition. */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{/* Text,Impressive how the description nails what is in the tune.,Description is mostly right but may over promise or over interpret.,\"Description is fine, but includes at least one confabulation.\",Description has multiple clearly wrong statements.,Description causes issues with the composition. */}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
5 (Impressive)4 (Good)3 (Fine)2 (Poor)1 (Awful)
Grade\n\t\t\t\t\t\tImpressive overall. I would be happy to write this\n\t\t\t\t\t\tmyself.\n\t\t\t\t\t\n\t\t\t\t\t\tGood overall. I am proud of the results of this\n\t\t\t\t\t\tcomposition.\n\t\t\t\t\t\n\t\t\t\t\t\tFine overall. I am okay with this being on my website.\n\t\t\t\t\t\n\t\t\t\t\t\tPoor overall. I would rather regenerate this than try to\n\t\t\t\t\t\tfix its issues\n\t\t\t\t\t\n\t\t\t\t\t\tAwful overall. This tune is embarrassing or painful to\n\t\t\t\t\t\tlisten to.\n\t\t\t\t\t
NotationNo notation mistakes whatsoever.\n\t\t\t\t\t\tOnly minor, non-critical notations mistakes are present.\n\t\t\t\t\t\n\t\t\t\t\t\tNoticeable mistakes that are cosmetic or can be easily\n\t\t\t\t\t\tfixed.\n\t\t\t\t\tCritical mistakes that make the tune unsharable.\n\t\t\t\t\t\tOverwhelming mistakes that overshadow anything good in\n\t\t\t\t\t\tthe tune.\n\t\t\t\t\t
Melody\n\t\t\t\t\t\tImpressive melody with good voice leading and varied\n\t\t\t\t\t\trhythm.\n\t\t\t\t\t\n\t\t\t\t\t\tGood melody with some variation and sense of direction.\n\t\t\t\t\tFine melody, but lacking shape, variety, or rhythm.No notable melody or variety at all.Musically invalid melody.
Harmony\n\t\t\t\t\t\tImpressive harmony that sounds beautiful and has\n\t\t\t\t\t\tintention.\n\t\t\t\t\tGood harmony that generally sounds pleasant.\n\t\t\t\t\t\tFine harmony with some flaws or that lacks direction.\n\t\t\t\t\t\n\t\t\t\t\t\tPoor harmony that distracts from or harms the\n\t\t\t\t\t\tlistenability.\n\t\t\t\t\tAwful harmony that is horrifying to listen to.
Chords\n\t\t\t\t\t\tImpressive chords that I would be proud to write myself.\n\t\t\t\t\t\n\t\t\t\t\t\tGood chords that clearly fit and give the music\n\t\t\t\t\t\tstructure.\n\t\t\t\t\tFine chords with minor mistakes.Poor chords that don’t match between voices.Horrific chords that don’t match the key.
VibeImpressive how the music matches the provided vibe.The music matches the provided vibe well.The music generally fits the provided vibe.The music doesn’t really match the vibe.The music actively clashes with the provided vibe.
Lyrics\n\t\t\t\t\t\tThe lyrics are awesome and match the notes perfectly.\n\t\t\t\t\t\n\t\t\t\t\t\tThe lyrics are pretty good or they are great, but don’t\n\t\t\t\t\t\tquite fit the notes.\n\t\t\t\t\t\n\t\t\t\t\t\tThe lyrics are on the right track, but need improvement.\n\t\t\t\t\t\n\t\t\t\t\t\tThe lyrics make the tune seem worse than it they were\n\t\t\t\t\t\tgone.\n\t\t\t\t\tThe lyrics severely mess up the composition.
Text\n\t\t\t\t\t\tImpressive how the description nails what is in the\n\t\t\t\t\t\ttune.\n\t\t\t\t\t\n\t\t\t\t\t\tDescription is mostly right but may over promise or over\n\t\t\t\t\t\tinterpret.\n\t\t\t\t\t\n\t\t\t\t\t\tDescription is fine, but includes at least one\n\t\t\t\t\t\tconfabulation.\n\t\t\t\t\tDescription has multiple clearly wrong statements.Description causes issues with the composition.
\n\t);\n};\n\nexport default Rubric;\n","import React, { useState } from \"react\";\nimport {\n\tButton,\n\tForm,\n\tFormGroup,\n\tLabel,\n\tInput,\n\tRow,\n\tCol,\n\tModal,\n\tModalHeader,\n\tModalBody,\n} from \"reactstrap\";\nimport Rubric from \"./Rubric\";\n\nconst FeedbackForm = ({ toggleFeedback }) => {\n\tconst [formData, setFormData] = useState({\n\t\tgrade: \"Good\",\n\t\tnotation: \"Good\",\n\t\tmelody: \"Good\",\n\t\tdescription: \"Good\",\n\t\tvibe: \"Not Included\",\n\t\tharmony: \"Not Included\",\n\t\tchords: \"Not Included\",\n\t\tlyrics: \"Not Included\",\n\t});\n\n\tconst handleChange = (e) => {\n\t\tsetFormData({ ...formData, [e.target.name]: e.target.value });\n\t};\n\n\tconst [modal, setModal] = useState(false);\n\n\tconst toggle = () => setModal(!modal);\n\n\tconst renderDropdowns = (field, isOptional = false) => (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t?\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{isOptional && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n\n\tconst renderCheckboxes = (field) => (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n\n\treturn (\n\t\t\n\t\t\t

\n\t\t\t\tHow would you rate these elements?\n\t\t\t

\n\t\t\t{[\"Grade\"].map((field) => renderDropdowns(field))}\n\t\t\t
\n\t\t\t{[\"Notation\", \"Melody\", \"Description\"].map((field) =>\n\t\t\t\trenderDropdowns(field)\n\t\t\t)}\n\t\t\t
\n\t\t\t{[\"Vibe\", \"Harmony\", \"Chords\", \"Lyrics\"].map((field) =>\n\t\t\t\trenderDropdowns(field, true)\n\t\t\t)}\n\t\t\t
\n\t\t\t

\n\t\t\t\tWere any of these in the composition?\n\t\t\t

\n\t\t\t{[\n\t\t\t\t\"Lyrics\",\n\t\t\t\t\"Conflicting Chords\",\n\t\t\t\t\"Percussion\",\n\t\t\t\t\"Pickup measures\",\n\t\t\t].map((field) => renderCheckboxes(field))}\n\t\t\t{/* \n\t\t\t\t\n\t\t\t\t\tCancel\n\t\t\t\t\n\t\t\t\t\n\t\t\t */}\n\n\t\t\t\n\t\t\t\tFeedback Rubric\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default FeedbackForm;\n","import React, { useEffect, useState } from \"react\";\nimport {\n\tAlert,\n\tButton,\n\tCard,\n\tCardBody,\n\tCardFooter,\n\tCardHeader,\n\tCol,\n\tCollapse,\n\tContainer,\n\tForm,\n\tFormFeedback,\n\tFormGroup,\n\tFormText,\n\tInput,\n\tLabel,\n\tModal,\n\tModalBody,\n\tModalFooter,\n\tModalHeader,\n\tNav,\n\tNavItem,\n\tNavLink,\n\tProgress,\n\tSpinner,\n\tTabContent,\n\tTabPane,\n} from \"reactstrap\";\nimport {\n\tAVERAGE_ORCHESTRAI_COMPLETION_TIME as EXPECTED_DURATION,\n\tORCHESTRAI_LOADING_MESSAGES as LOADING_MESSAGES,\n\tORCHESTRAI_TIMEOUT_DURATION as MAX_DURATION,\n\tVIBE_SUGGESTIONS,\n\tORCHESTRAI_SAVE_FILE_VERSION as SAVE_FILE_VERSION,\n\tPROMPT_SUGGESTIONS,\n} from \"../assets/Constants\";\nimport OrchestrAIService from \"../services/OrchestrAIAPI\";\nimport FeedbackForm from \"./FeedbackForm\";\nimport Synthesizer from \"./Synthesizer\";\n\nconst OrchestrAIContent = () => {\n\t// Login state\n\tconst [isAuthenticating, setIsAuthenticating] = useState(false);\n\tconst [apiKey, setApiKey] = useState(\"\");\n\tconst [hasPassword, setHasPassword] = useState(true);\n\tconst [name, setName] = useState(\"\");\n\tconst [password, setPassword] = useState(\"\");\n\tconst [isAuthenticated, setIsAuthenticated] = useState(false);\n\n\t// Parameters\n\tconst [activeTab, setActiveTab] = useState(\"1\");\n\tconst [vibe, setVibe] = useState(\"\");\n\tconst [fullPrompt, setFullPrompt] = useState(\"\");\n\tconst [input, setInput] = useState(\"\");\n\n\t// Loading state\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [timeSoFar, setTimeSoFar] = useState(0);\n\tconst [percentComplete, setPercentComplete] = useState(0);\n\tconst [loadingMessage, setLoadingMessage] = useState(LOADING_MESSAGES[0]);\n\tconst [hasGeneratedMusic, setHasGeneratedMusic] = useState(false);\n\tconst [errorMessage, setErrorMessage] = useState();\n\n\t// Music generation state\n\tconst [abcNotation, setAbcNotation] = useState(\"\");\n\tconst [description, setDescription] = useState(\"\");\n\n\t// File download information\n\tconst [thread, setThread] = useState(\"\");\n\tconst [run, setRun] = useState(\"\");\n\n\t// Feedback form state\n\tconst [isFeedbackOpen, setIsFeedbackOpen] = useState(false);\n\n\tconst validateAccess = () => {\n\t\tif (hasPassword) {\n\t\t\tif (!name || !password) {\n\t\t\t\tsetErrorMessage(\"You must enter a name and a password.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (password !== process.env.REACT_APP_ORCHESTRAI_PASSWORD) {\n\t\t\t\tsetErrorMessage(\"Incorrect password.\");\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tsetIsAuthenticated(true);\n\t\t\t\tsetIsAuthenticating(false);\n\t\t\t}\n\t\t} else {\n\t\t\tif (!apiKey) {\n\t\t\t\tsetErrorMessage(\"You must enter an API key.\");\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tsetIsAuthenticated(true);\n\t\t\t\tsetIsAuthenticating(false);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst toggleTab = (tab) => {\n\t\tif (activeTab !== tab) setActiveTab(tab);\n\t};\n\n\tconst handleNotationChange = (e) => {\n\t\tsetAbcNotation(e.target.value);\n\t};\n\n\t// Calculate % complete\n\tuseEffect(() => {\n\t\tlet raw = 0;\n\t\tif (timeSoFar + 10 >= EXPECTED_DURATION) {\n\t\t\traw = (timeSoFar / (timeSoFar + 10)) * 100;\n\t\t} else {\n\t\t\traw = (timeSoFar / EXPECTED_DURATION) * 100;\n\t\t}\n\t\tconst rounded = Math.round(raw);\n\t\tconsole.debug(\"Percent complete:\", rounded);\n\t\tsetPercentComplete(rounded);\n\t}, [timeSoFar]);\n\n\tuseEffect(() => {\n\t\tif (activeTab === \"1\") {\n\t\t\tsetInput(vibe);\n\t\t} else if (activeTab === \"3\") {\n\t\t\tsetInput(fullPrompt);\n\t\t}\n\t}, [activeTab, vibe, fullPrompt]);\n\n\t// Add a handler for the API key input change\n\tconst handleApiKeyChange = (e) => {\n\t\tsetApiKey(e.target.value);\n\t};\n\n\tconst suggestVibe = () => {\n\t\tconst randomIndex = Math.floor(Math.random() * VIBE_SUGGESTIONS.length);\n\t\tsetVibe(VIBE_SUGGESTIONS[randomIndex]);\n\t};\n\n\tconst suggestFullPrompt = () => {\n\t\tconst randomIndex = Math.floor(\n\t\t\tMath.random() * PROMPT_SUGGESTIONS.length\n\t\t);\n\t\tsetFullPrompt(PROMPT_SUGGESTIONS[randomIndex]);\n\t};\n\n\tconst handleSubmit = async (e) => {\n\t\te.preventDefault();\n\n\t\tlet orchestrAIService;\n\n\t\tif (!isAuthenticated) {\n\t\t\tvalidateAccess();\n\t\t\treturn;\n\t\t}\n\n\t\tif (hasPassword) {\n\t\t\torchestrAIService = new OrchestrAIService(\n\t\t\t\tprocess.env.REACT_APP_OPENAI_API_KEY\n\t\t\t);\n\t\t} else {\n\t\t\torchestrAIService = new OrchestrAIService(apiKey);\n\t\t}\n\n\t\tconst startTime = Date.now();\n\t\tsetLoadingMessage(LOADING_MESSAGES[0]);\n\t\tsetPercentComplete(0);\n\t\tsetErrorMessage(\"\");\n\t\tsetIsLoading(true);\n\t\tsetIsFeedbackOpen(false);\n\n\t\ttry {\n\t\t\tlet threadId = \"\";\n\t\t\tlet runId = \"\";\n\n\t\t\t// If tab 1\n\t\t\tif (activeTab === \"1\") {\n\t\t\t\tconst content = `Compose a tune that expresses the following vibe: ${vibe}`;\n\t\t\t\tthreadId = await orchestrAIService.createThread(content);\n\t\t\t} else if (activeTab === \"3\") {\n\t\t\t\tconst content = `Please create a tune for this prompt: ${fullPrompt}`;\n\t\t\t\tthreadId = await orchestrAIService.createThread(content);\n\t\t\t}\n\t\t\tsetThread(threadId);\n\t\t\trunId = await orchestrAIService.createRun(threadId);\n\t\t\tsetRun(runId);\n\n\t\t\tlet messageIndex = 0;\n\n\t\t\t// Check run status\n\t\t\tlet runStatus;\n\t\t\tlet secondsSoFar = 0;\n\t\t\tdo {\n\t\t\t\trunStatus = await orchestrAIService.getRunStatus(\n\t\t\t\t\tthreadId,\n\t\t\t\t\trunId\n\t\t\t\t);\n\t\t\t\tconsole.debug(\"Run status:\", runStatus);\n\n\t\t\t\t// Wait for a few seconds before checking again\n\t\t\t\tconst seconds = Math.floor(Math.random() * 8) + 2;\n\t\t\t\tawait new Promise((resolve) =>\n\t\t\t\t\tsetTimeout(resolve, 1000 * seconds)\n\t\t\t\t);\n\n\t\t\t\tsecondsSoFar = Math.floor((Date.now() - startTime) / 1000);\n\t\t\t\tconsole.debug(\"Seconds so far:\", secondsSoFar);\n\t\t\t\tsetTimeSoFar(secondsSoFar);\n\t\t\t\tconst progress = secondsSoFar / EXPECTED_DURATION;\n\t\t\t\tconst messagesLength = LOADING_MESSAGES.length;\n\t\t\t\tconsole.debug(\"Progress:\", progress);\n\t\t\t\tmessageIndex = Math.floor(progress * messagesLength);\n\t\t\t\tconsole.debug(\"Message index:\", messageIndex);\n\t\t\t\tsetLoadingMessage(LOADING_MESSAGES[messageIndex]);\n\n\t\t\t\tif (secondsSoFar > MAX_DURATION) {\n\t\t\t\t\tsetErrorMessage(\n\t\t\t\t\t\t\"OrchestrAI took too long to generate music. Please try again.\"\n\t\t\t\t\t);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (runStatus !== \"completed\");\n\n\t\t\tconst messages = await orchestrAIService.getMessages(threadId);\n\n\t\t\tconsole.debug(\"Messages:\", messages);\n\t\t\tconst output = messages[0].content[0].text.value;\n\t\t\tconsole.debug(\"Output:\", output);\n\t\t\tsetAbcNotation(output.match(/```([^`]*)```/)[1]);\n\t\t\tsetDescription(output.replace(/```([^`]*)```/, \"\"));\n\t\t\tsetHasGeneratedMusic(true);\n\t\t\tconsole.debug(\"Generated music:\", abcNotation); // It's not updating here either\n\t\t} catch (error) {\n\t\t\tconsole.error(\"API call failed:\", error);\n\t\t\tsetErrorMessage(error.message);\n\t\t\tsetIsLoading(false);\n\t\t\treturn;\n\t\t} finally {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t};\n\n\tconst handleDownload = (feedback) => {\n\t\tconst element = document.createElement(\"a\");\n\t\tconst file = new Blob(\n\t\t\t[\n\t\t\t\t`Version: ${SAVE_FILE_VERSION}\\n\nName: ${name}\\n\nDate and Time: ${new Date().toLocaleString()}\\n\nInput: ${input}\\n\nDescription: ${description}\\n\nABC Notation: ${abcNotation}\\n\nThread ID: ${thread}\\n\nRun ID: ${run}\\n\nError Message: ${errorMessage}\\n,\nFeedback: ${feedback}\\n`,\n\t\t\t],\n\t\t\t{ type: \"text/plain\" }\n\t\t);\n\t\telement.href = URL.createObjectURL(file);\n\t\tconst fileName = `OrchestrAI_${new Date().toLocaleString()}.txt`;\n\t\telement.download = fileName;\n\t\tdocument.body.appendChild(element); // Required for this to work in FireFox\n\t\telement.click();\n\t};\n\n\tconst toggleFeedback = () => {\n\t\tsetIsFeedbackOpen(!isFeedbackOpen);\n\t};\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t

OrchestrAI

\n\t\t\t\t

\n\t\t\t\t\tOrchestrAI is a web application powered by a custom GPT-4\n\t\t\t\t\tassistant provided by OpenAI, to generate music notation.\n\t\t\t\t\tThe user can enter a vibe or a full tune description, and a\n\t\t\t\t\tpiece of music will be generated in ABC notation. The ABC\n\t\t\t\t\tnotation can be converted to sheet music using the ABCJS\n\t\t\t\t\tlibrary.\n\t\t\t\t

\n\t\t\t\t{!isAuthenticated && (\n\t\t\t\t\t setIsAuthenticating(!isAuthenticating)}\n\t\t\t\t\t\tclassName=\"primary-button mb-3\"\n\t\t\t\t\t>\n\t\t\t\t\t\tTry it out{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tValidate Access{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\tsetHasPassword(!hasPassword);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{hasPassword ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{/* TODO explain that this is my money */}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tsetName(e.target.value)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Enter name here\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tsetPassword(e.target.value)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Enter password here\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tEach generation uses OpenAI's{\" \"}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tAssistants API\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{/* TODO add more text */}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{errorMessage && (\n\t\t\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tValidate Access \n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{isAuthenticated && (\n\t\t\t\t\t
\n\t\t\t\t\t\t

\n\t\t\t\t\t\t\tCustomize Music{\" \"}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t

\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tVibe of the composition\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tSuggest one for me{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tsetVibe(e.target.value)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Enter a vibe here\"\n\t\t\t\t\t\t\t\t\t\t\tmaxLength={100}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-2\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{vibe.length}/100\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tYou must enter a vibe and an API key.\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{isLoading && (\n\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tGenerate Music{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tPrompt\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tSuggest one for me{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tsetFullPrompt(e.target.value)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Write a full prompt for what you want the composition to be\"\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-2\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tYou must enter a vibe and an API key.\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{isLoading && (\n\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tGenerate Music{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{/* Hello, this is tab 3 */}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{isLoading && (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{loadingMessage}

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{percentComplete > 9 && (\n\t\t\t\t\t\t\t\t\t\t<>{percentComplete}%\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{hasGeneratedMusic && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t

Generated Description

\n\t\t\t\t\t\t\t\t{vibe || fullPrompt ? (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t

Output

\n\t\t\t\t\t\t\t\t\t\t{description ? (\n\t\t\t\t\t\t\t\t\t\t\t

{description}

\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t*No description was generated\n\t\t\t\t\t\t\t\t\t\t\t\tthis time.*\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\"Enter a vibe above to generate music.\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t

Rendered Sheet Music

\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Generated ABC Notation

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\t\t\t\tDownload{\" \"}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{/* TODO add this back */}\n\t\t\t\t\t\t\t\t{/* {!isFeedbackOpen && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tSubmit Feedback{\" \"}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)} */}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

Feedback on Generated Composition

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\n\t\t
\n\t);\n};\n\nexport default OrchestrAIContent;\n","import React from \"react\";\nimport OrchestrAIContent from \"../components/OrchestrAIContent\";\nimport Page from \"../components/Page\";\n\nconst OrchestrAIPage = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default OrchestrAIPage;\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"cssModule\", \"children\", \"isOpen\", \"flip\", \"target\", \"offset\", \"fallbackPlacements\", \"placementPrefix\", \"arrowClassName\", \"hideArrow\", \"popperClassName\", \"tag\", \"container\", \"modifiers\", \"strategy\", \"boundariesElement\", \"onClosed\", \"fade\", \"transition\", \"placement\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { Popper as ReactPopper } from 'react-popper';\nimport { getTarget, targetPropType, mapToCssModules, DOMElement, tagPropType } from './utils';\nimport Fade from './Fade';\nfunction noop() {}\nvar propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,\n popperClassName: PropTypes.string,\n placement: PropTypes.string,\n placementPrefix: PropTypes.string,\n arrowClassName: PropTypes.string,\n hideArrow: PropTypes.bool,\n tag: tagPropType,\n isOpen: PropTypes.bool,\n cssModule: PropTypes.object,\n offset: PropTypes.arrayOf(PropTypes.number),\n fallbackPlacements: PropTypes.array,\n flip: PropTypes.bool,\n container: targetPropType,\n target: targetPropType.isRequired,\n modifiers: PropTypes.array,\n strategy: PropTypes.string,\n boundariesElement: PropTypes.oneOfType([PropTypes.string, DOMElement]),\n onClosed: PropTypes.func,\n fade: PropTypes.bool,\n transition: PropTypes.shape(Fade.propTypes)\n};\nvar defaultProps = {\n boundariesElement: 'scrollParent',\n placement: 'auto',\n hideArrow: false,\n isOpen: false,\n offset: [0, 0],\n flip: true,\n container: 'body',\n modifiers: [],\n onClosed: noop,\n fade: true,\n transition: _objectSpread({}, Fade.defaultProps)\n};\nvar PopperContent = /*#__PURE__*/function (_React$Component) {\n _inherits(PopperContent, _React$Component);\n var _super = _createSuper(PopperContent);\n function PopperContent(props) {\n var _this;\n _classCallCheck(this, PopperContent);\n _this = _super.call(this, props);\n _this.setTargetNode = _this.setTargetNode.bind(_assertThisInitialized(_this));\n _this.getTargetNode = _this.getTargetNode.bind(_assertThisInitialized(_this));\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.onClosed = _this.onClosed.bind(_assertThisInitialized(_this));\n _this.state = {\n isOpen: props.isOpen\n };\n return _this;\n }\n _createClass(PopperContent, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n if (this._element && this._element.childNodes && this._element.childNodes[0] && this._element.childNodes[0].focus) {\n this._element.childNodes[0].focus();\n }\n }\n }, {\n key: \"onClosed\",\n value: function onClosed() {\n this.props.onClosed();\n this.setState({\n isOpen: false\n });\n }\n }, {\n key: \"getTargetNode\",\n value: function getTargetNode() {\n return this.targetNode;\n }\n }, {\n key: \"getContainerNode\",\n value: function getContainerNode() {\n return getTarget(this.props.container);\n }\n }, {\n key: \"getRef\",\n value: function getRef(ref) {\n this._element = ref;\n }\n }, {\n key: \"setTargetNode\",\n value: function setTargetNode(node) {\n this.targetNode = typeof node === 'string' ? getTarget(node) : node;\n }\n }, {\n key: \"renderChildren\",\n value: function renderChildren() {\n var _this$props = this.props,\n cssModule = _this$props.cssModule,\n children = _this$props.children,\n isOpen = _this$props.isOpen,\n flip = _this$props.flip,\n target = _this$props.target,\n offset = _this$props.offset,\n fallbackPlacements = _this$props.fallbackPlacements,\n placementPrefix = _this$props.placementPrefix,\n _arrowClassName = _this$props.arrowClassName,\n hideArrow = _this$props.hideArrow,\n _popperClassName = _this$props.popperClassName,\n tag = _this$props.tag,\n container = _this$props.container,\n modifiers = _this$props.modifiers,\n strategy = _this$props.strategy,\n boundariesElement = _this$props.boundariesElement,\n onClosed = _this$props.onClosed,\n fade = _this$props.fade,\n transition = _this$props.transition,\n placement = _this$props.placement,\n attrs = _objectWithoutProperties(_this$props, _excluded);\n var arrowClassName = mapToCssModules(classNames('arrow', _arrowClassName), cssModule);\n var popperClassName = mapToCssModules(classNames(_popperClassName, placementPrefix ? \"\".concat(placementPrefix, \"-auto\") : ''), this.props.cssModule);\n var modifierNames = modifiers.map(function (m) {\n return m.name;\n });\n var baseModifiers = [{\n name: 'offset',\n options: {\n offset: offset\n }\n }, {\n name: 'flip',\n enabled: flip,\n options: {\n fallbackPlacements: fallbackPlacements\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: boundariesElement\n }\n }].filter(function (m) {\n return !modifierNames.includes(m.name);\n });\n var extendedModifiers = [].concat(_toConsumableArray(baseModifiers), _toConsumableArray(modifiers));\n var popperTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), transition), {}, {\n baseClass: fade ? transition.baseClass : '',\n timeout: fade ? transition.timeout : 0\n });\n return /*#__PURE__*/React.createElement(Fade, _extends({}, popperTransition, attrs, {\n \"in\": isOpen,\n onExited: this.onClosed,\n tag: tag\n }), /*#__PURE__*/React.createElement(ReactPopper, {\n referenceElement: this.targetNode,\n modifiers: extendedModifiers,\n placement: placement,\n strategy: strategy\n }, function (_ref) {\n var ref = _ref.ref,\n style = _ref.style,\n popperPlacement = _ref.placement,\n isReferenceHidden = _ref.isReferenceHidden,\n arrowProps = _ref.arrowProps,\n update = _ref.update;\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: ref,\n style: style,\n className: popperClassName,\n \"data-popper-placement\": popperPlacement,\n \"data-popper-reference-hidden\": isReferenceHidden ? 'true' : undefined\n }, typeof children === 'function' ? children({\n update: update\n }) : children, !hideArrow && /*#__PURE__*/React.createElement(\"span\", {\n ref: arrowProps.ref,\n className: arrowClassName,\n style: arrowProps.style\n }));\n }));\n }\n }, {\n key: \"render\",\n value: function render() {\n this.setTargetNode(this.props.target);\n if (this.state.isOpen) {\n return this.props.container === 'inline' ? this.renderChildren() : /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React.createElement(\"div\", {\n ref: this.getRef\n }, this.renderChildren()), this.getContainerNode());\n }\n return null;\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n if (props.isOpen && !state.isOpen) {\n return {\n isOpen: props.isOpen\n };\n }\n return null;\n }\n }]);\n return PopperContent;\n}(React.Component);\nPopperContent.propTypes = propTypes;\nPopperContent.defaultProps = defaultProps;\nexport default PopperContent;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport PopperContent from './PopperContent';\nimport { getTarget, targetPropType, omit, PopperPlacements, mapToCssModules, DOMElement } from './utils';\nexport var propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n placement: PropTypes.oneOf(PopperPlacements),\n target: targetPropType.isRequired,\n container: targetPropType,\n isOpen: PropTypes.bool,\n disabled: PropTypes.bool,\n hideArrow: PropTypes.bool,\n boundariesElement: PropTypes.oneOfType([PropTypes.string, DOMElement]),\n className: PropTypes.string,\n innerClassName: PropTypes.string,\n arrowClassName: PropTypes.string,\n popperClassName: PropTypes.string,\n cssModule: PropTypes.object,\n toggle: PropTypes.func,\n autohide: PropTypes.bool,\n placementPrefix: PropTypes.string,\n delay: PropTypes.oneOfType([PropTypes.shape({\n show: PropTypes.number,\n hide: PropTypes.number\n }), PropTypes.number]),\n modifiers: PropTypes.array,\n strategy: PropTypes.string,\n offset: PropTypes.arrayOf(PropTypes.number),\n innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.object]),\n trigger: PropTypes.string,\n fade: PropTypes.bool,\n flip: PropTypes.bool\n};\nvar DEFAULT_DELAYS = {\n show: 0,\n hide: 50\n};\nvar defaultProps = {\n isOpen: false,\n hideArrow: false,\n autohide: false,\n delay: DEFAULT_DELAYS,\n toggle: function toggle() {},\n trigger: 'click',\n fade: true\n};\nfunction isInDOMSubtree(element, subtreeRoot) {\n return subtreeRoot && (element === subtreeRoot || subtreeRoot.contains(element));\n}\nfunction isInDOMSubtrees(element) {\n var subtreeRoots = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return subtreeRoots && subtreeRoots.length && subtreeRoots.filter(function (subTreeRoot) {\n return isInDOMSubtree(element, subTreeRoot);\n })[0];\n}\nvar TooltipPopoverWrapper = /*#__PURE__*/function (_React$Component) {\n _inherits(TooltipPopoverWrapper, _React$Component);\n var _super = _createSuper(TooltipPopoverWrapper);\n function TooltipPopoverWrapper(props) {\n var _this;\n _classCallCheck(this, TooltipPopoverWrapper);\n _this = _super.call(this, props);\n _this._targets = [];\n _this.currentTargetElement = null;\n _this.addTargetEvents = _this.addTargetEvents.bind(_assertThisInitialized(_this));\n _this.handleDocumentClick = _this.handleDocumentClick.bind(_assertThisInitialized(_this));\n _this.removeTargetEvents = _this.removeTargetEvents.bind(_assertThisInitialized(_this));\n _this.toggle = _this.toggle.bind(_assertThisInitialized(_this));\n _this.showWithDelay = _this.showWithDelay.bind(_assertThisInitialized(_this));\n _this.hideWithDelay = _this.hideWithDelay.bind(_assertThisInitialized(_this));\n _this.onMouseOverTooltipContent = _this.onMouseOverTooltipContent.bind(_assertThisInitialized(_this));\n _this.onMouseLeaveTooltipContent = _this.onMouseLeaveTooltipContent.bind(_assertThisInitialized(_this));\n _this.show = _this.show.bind(_assertThisInitialized(_this));\n _this.hide = _this.hide.bind(_assertThisInitialized(_this));\n _this.onEscKeyDown = _this.onEscKeyDown.bind(_assertThisInitialized(_this));\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.state = {\n isOpen: props.isOpen\n };\n _this._isMounted = false;\n return _this;\n }\n _createClass(TooltipPopoverWrapper, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this._isMounted = true;\n this.updateTarget();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this._isMounted = false;\n this.removeTargetEvents();\n this._targets = null;\n this.clearShowTimeout();\n this.clearHideTimeout();\n }\n }, {\n key: \"handleDocumentClick\",\n value: function handleDocumentClick(e) {\n var triggers = this.props.trigger.split(' ');\n if (triggers.indexOf('legacy') > -1 && (this.props.isOpen || isInDOMSubtrees(e.target, this._targets))) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n if (this.props.isOpen && !isInDOMSubtree(e.target, this._popover)) {\n this.hideWithDelay(e);\n } else if (!this.props.isOpen) {\n this.showWithDelay(e);\n }\n } else if (triggers.indexOf('click') > -1 && isInDOMSubtrees(e.target, this._targets)) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n if (!this.props.isOpen) {\n this.showWithDelay(e);\n } else {\n this.hideWithDelay(e);\n }\n }\n }\n }, {\n key: \"onMouseOverTooltipContent\",\n value: function onMouseOverTooltipContent() {\n if (this.props.trigger.indexOf('hover') > -1 && !this.props.autohide) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n if (this.state.isOpen && !this.props.isOpen) {\n this.toggle();\n }\n }\n }\n }, {\n key: \"onMouseLeaveTooltipContent\",\n value: function onMouseLeaveTooltipContent(e) {\n if (this.props.trigger.indexOf('hover') > -1 && !this.props.autohide) {\n if (this._showTimeout) {\n this.clearShowTimeout();\n }\n e.persist();\n this._hideTimeout = setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n }\n }, {\n key: \"onEscKeyDown\",\n value: function onEscKeyDown(e) {\n if (e.key === 'Escape') {\n this.hide(e);\n }\n }\n }, {\n key: \"getRef\",\n value: function getRef(ref) {\n var innerRef = this.props.innerRef;\n if (innerRef) {\n if (typeof innerRef === 'function') {\n innerRef(ref);\n } else if (_typeof(innerRef) === 'object') {\n innerRef.current = ref;\n }\n }\n this._popover = ref;\n }\n }, {\n key: \"getDelay\",\n value: function getDelay(key) {\n var delay = this.props.delay;\n if (_typeof(delay) === 'object') {\n return isNaN(delay[key]) ? DEFAULT_DELAYS[key] : delay[key];\n }\n return delay;\n }\n }, {\n key: \"getCurrentTarget\",\n value: function getCurrentTarget(target) {\n if (!target) return null;\n var index = this._targets.indexOf(target);\n if (index >= 0) return this._targets[index];\n return this.getCurrentTarget(target.parentElement);\n }\n }, {\n key: \"show\",\n value: function show(e) {\n if (!this.props.isOpen) {\n this.clearShowTimeout();\n this.currentTargetElement = e ? e.currentTarget || this.getCurrentTarget(e.target) : null;\n if (e && e.composedPath && typeof e.composedPath === 'function') {\n var path = e.composedPath();\n this.currentTargetElement = path && path[0] || this.currentTargetElement;\n }\n this.toggle(e);\n }\n }\n }, {\n key: \"showWithDelay\",\n value: function showWithDelay(e) {\n if (this._hideTimeout) {\n this.clearHideTimeout();\n }\n this._showTimeout = setTimeout(this.show.bind(this, e), this.getDelay('show'));\n }\n }, {\n key: \"hide\",\n value: function hide(e) {\n if (this.props.isOpen) {\n this.clearHideTimeout();\n this.currentTargetElement = null;\n this.toggle(e);\n }\n }\n }, {\n key: \"hideWithDelay\",\n value: function hideWithDelay(e) {\n if (this._showTimeout) {\n this.clearShowTimeout();\n }\n this._hideTimeout = setTimeout(this.hide.bind(this, e), this.getDelay('hide'));\n }\n }, {\n key: \"clearShowTimeout\",\n value: function clearShowTimeout() {\n clearTimeout(this._showTimeout);\n this._showTimeout = undefined;\n }\n }, {\n key: \"clearHideTimeout\",\n value: function clearHideTimeout() {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = undefined;\n }\n }, {\n key: \"addEventOnTargets\",\n value: function addEventOnTargets(type, handler, isBubble) {\n this._targets.forEach(function (target) {\n target.addEventListener(type, handler, isBubble);\n });\n }\n }, {\n key: \"removeEventOnTargets\",\n value: function removeEventOnTargets(type, handler, isBubble) {\n this._targets.forEach(function (target) {\n target.removeEventListener(type, handler, isBubble);\n });\n }\n }, {\n key: \"addTargetEvents\",\n value: function addTargetEvents() {\n if (this.props.trigger) {\n var triggers = this.props.trigger.split(' ');\n if (triggers.indexOf('manual') === -1) {\n if (triggers.indexOf('click') > -1 || triggers.indexOf('legacy') > -1) {\n document.addEventListener('click', this.handleDocumentClick, true);\n }\n if (this._targets && this._targets.length) {\n if (triggers.indexOf('hover') > -1) {\n this.addEventOnTargets('mouseover', this.showWithDelay, true);\n this.addEventOnTargets('mouseout', this.hideWithDelay, true);\n }\n if (triggers.indexOf('focus') > -1) {\n this.addEventOnTargets('focusin', this.show, true);\n this.addEventOnTargets('focusout', this.hide, true);\n }\n this.addEventOnTargets('keydown', this.onEscKeyDown, true);\n }\n }\n }\n }\n }, {\n key: \"removeTargetEvents\",\n value: function removeTargetEvents() {\n if (this._targets) {\n this.removeEventOnTargets('mouseover', this.showWithDelay, true);\n this.removeEventOnTargets('mouseout', this.hideWithDelay, true);\n this.removeEventOnTargets('keydown', this.onEscKeyDown, true);\n this.removeEventOnTargets('focusin', this.show, true);\n this.removeEventOnTargets('focusout', this.hide, true);\n }\n document.removeEventListener('click', this.handleDocumentClick, true);\n }\n }, {\n key: \"updateTarget\",\n value: function updateTarget() {\n var newTarget = getTarget(this.props.target, true);\n if (newTarget !== this._targets) {\n this.removeTargetEvents();\n this._targets = newTarget ? Array.from(newTarget) : [];\n this.currentTargetElement = this.currentTargetElement || this._targets[0];\n this.addTargetEvents();\n }\n }\n }, {\n key: \"toggle\",\n value: function toggle(e) {\n if (this.props.disabled || !this._isMounted) {\n return e && e.preventDefault();\n }\n return this.props.toggle(e);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n if (this.props.isOpen) {\n this.updateTarget();\n }\n var target = this.currentTargetElement || this._targets[0];\n if (!target) {\n return null;\n }\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n innerClassName = _this$props.innerClassName,\n isOpen = _this$props.isOpen,\n hideArrow = _this$props.hideArrow,\n boundariesElement = _this$props.boundariesElement,\n placement = _this$props.placement,\n placementPrefix = _this$props.placementPrefix,\n arrowClassName = _this$props.arrowClassName,\n popperClassName = _this$props.popperClassName,\n container = _this$props.container,\n modifiers = _this$props.modifiers,\n strategy = _this$props.strategy,\n offset = _this$props.offset,\n fade = _this$props.fade,\n flip = _this$props.flip,\n children = _this$props.children;\n var attributes = omit(this.props, Object.keys(propTypes));\n var popperClasses = mapToCssModules(popperClassName, cssModule);\n var classes = mapToCssModules(innerClassName, cssModule);\n return /*#__PURE__*/React.createElement(PopperContent, {\n className: className,\n target: target,\n isOpen: isOpen,\n hideArrow: hideArrow,\n boundariesElement: boundariesElement,\n placement: placement,\n placementPrefix: placementPrefix,\n arrowClassName: arrowClassName,\n popperClassName: popperClasses,\n container: container,\n modifiers: modifiers,\n strategy: strategy,\n offset: offset,\n cssModule: cssModule,\n fade: fade,\n flip: flip\n }, function (_ref) {\n var update = _ref.update;\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n ref: _this2.getRef,\n className: classes,\n role: \"tooltip\",\n onMouseOver: _this2.onMouseOverTooltipContent,\n onMouseLeave: _this2.onMouseLeaveTooltipContent,\n onKeyDown: _this2.onEscKeyDown\n }), typeof children === 'function' ? children({\n update: update\n }) : children);\n });\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n if (props.isOpen && !state.isOpen) {\n return {\n isOpen: props.isOpen\n };\n }\n return null;\n }\n }]);\n return TooltipPopoverWrapper;\n}(React.Component);\nTooltipPopoverWrapper.propTypes = propTypes;\nTooltipPopoverWrapper.defaultProps = defaultProps;\nexport default TooltipPopoverWrapper;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport classNames from 'classnames';\nimport TooltipPopoverWrapper, { propTypes } from './TooltipPopoverWrapper';\nvar defaultProps = {\n placement: 'right',\n placementPrefix: 'bs-popover',\n trigger: 'click',\n offset: [0, 8]\n};\nfunction Popover(props) {\n var popperClasses = classNames('popover', 'show', props.popperClassName);\n var classes = classNames('popover-inner', props.innerClassName);\n return /*#__PURE__*/React.createElement(TooltipPopoverWrapper, _extends({}, props, {\n arrowClassName: \"popover-arrow\",\n popperClassName: popperClasses,\n innerClassName: classes\n }));\n}\nPopover.propTypes = propTypes;\nPopover.defaultProps = defaultProps;\nexport default Popover;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nfunction PopoverHeader(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'h3' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'popover-header'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nPopoverHeader.propTypes = propTypes;\nexport default PopoverHeader;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nfunction PopoverBody(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'popover-body'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nPopoverBody.propTypes = propTypes;\nexport default PopoverBody;","var _excluded = [\"className\", \"cssModule\", \"color\", \"innerRef\", \"pill\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Pass children so this component can wrap the child elements */\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Change background color of Badge */\n color: PropTypes.string,\n /** Change existing className with a new className */\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n /** Add rounded corners to the Badge */\n pill: PropTypes.bool,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction Badge(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$color = props.color,\n color = _props$color === void 0 ? 'secondary' : _props$color,\n innerRef = props.innerRef,\n _props$pill = props.pill,\n pill = _props$pill === void 0 ? false : _props$pill,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'span' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'badge', 'bg-' + color, pill ? 'rounded-pill' : false), cssModule);\n if (attributes.href && Tag === 'span') {\n Tag = 'a';\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes,\n ref: innerRef\n }));\n}\nBadge.propTypes = propTypes;\nexport default Badge;","import React, { useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n\tBadge,\n\tButton,\n\tForm,\n\tFormGroup,\n\tInput,\n\tLabel,\n\tPopover,\n\tPopoverBody,\n\tPopoverHeader,\n} from \"reactstrap\";\n\n// Just use these tags: Data Science, GenAI, Web Development, Music, JavaScript, Python, React, AWS\n\nconst projects = [\n\t{\n\t\ttitle: \"OrchestrAI Web App\",\n\t\tdescription:\n\t\t\t\"Web app for generating music using artificial intelligence. Built with React, Bootstrap, and a custom OpenAI GPT-4-turbo model.\",\n\t\tlink: \"https://www.orchestrai.site\",\n\t\tisNew: true,\n\t\tisComingSoon: false,\n\t\texternalLink: true,\n\t\ticon: \"bi-music-note-beamed\",\n\t\ttags: [\n\t\t\t\"JavaScript\",\n\t\t\t\"React\",\n\t\t\t\"AWS\",\n\t\t\t\"GenAI\",\n\t\t\t\"Web Development\",\n\t\t\t\"Music\",\n\t\t],\n\t},\n\t{\n\t\ttitle: \"Gift Exchange Web App\",\n\t\tdescription:\n\t\t\t\"Web app for my family's gift exchange. Built with React, Bootstrap, and AWS serverless technologies.\",\n\t\tlink: \"https://www.giftexchange.breitest.com/about\",\n\t\tisNew: true,\n\t\tisComingSoon: false,\n\t\texternalLink: true,\n\t\ticon: \"bi-gift\",\n\t\ttags: [\"JavaScript\", \"React\", \"AWS\", \"Web Development\"],\n\t},\n\t{\n\t\ttitle: \"JuxCompose Web App\",\n\t\tdescription:\n\t\t\t\"Music composition tool for comparing two generated tunes side-by-side. Built with React, ABCjs, and Bootstrap.\",\n\t\tlink: \"/juxcompose\",\n\t\tisNew: true,\n\t\tisComingSoon: false,\n\t\texternalLink: false,\n\t\ticon: \"bi-music-note-beamed\",\n\t\ttags: [\"JavaScript\", \"React\", \"Music\", \"Web Development\", \"AWS\"],\n\t},\n\t{\n\t\ttitle: \"ABC Notation Visualizer\",\n\t\tdescription:\n\t\t\t\"Music renderer for ABC Notation using ABCjs capable of updating in real-time and playing imput on command.\",\n\t\tlink: \"/music_renderer\",\n\t\tisNew: true,\n\t\tisComingSoon: false,\n\t\texternalLink: false,\n\t\ticon: \"bi-music-note-beamed\",\n\t\ttags: [\"JavaScript\", \"React\", \"Music\", \"Web Development\", \"AWS\"],\n\t},\n\t{\n\t\ttitle: \"Music Generator\",\n\t\tdescription:\n\t\t\t\"Joel's Artificial Music Intelligence (J.A.M.I.) an AI program to analyze musical patterns and generate harmonically pleasing melodies using Python and open-source MIDI files.\",\n\t\tlink: \"/jami\",\n\t\tisNew: false,\n\t\tisComingSoon: false,\n\t\texternalLink: false,\n\t\ticon: \"bi-music-note-beamed\",\n\t\ttags: [\"Python\", \"Music\", \"GenAI\"],\n\t},\n\t{\n\t\ttitle: \"Evolutionary Simulation\",\n\t\tdescription:\n\t\t\t\"Program to simulate the evolutionary principle of 'costly signaling.' Written in Python.\",\n\t\tlink: \"/evolutionary_simulation\",\n\t\tisNew: false,\n\t\tisComingSoon: false,\n\t\texternalLink: false,\n\t\ticon: \"bi-diagram-3-fill\",\n\t\ttags: [\"Python\", \"Data Science\"],\n\t},\n\t{\n\t\ttitle: \"Meta-Analysis\",\n\t\tdescription:\n\t\t\t\"Response variation as a result of tai chi on resting blood pressure in hypertensive adults: An aggregate data meta-analysis. [Journal of Alternative and Complementary Medicine]\",\n\t\tlink: \"https://doi.org/10.1016/j.ctcp.2022.101641\",\n\t\tisNew: false,\n\t\tisComingSoon: false,\n\t\texternalLink: true,\n\t\ticon: \"bi-heart-pulse-fill\",\n\t\ttags: [\"Data Science\"],\n\t},\n\t{\n\t\ttitle: \"Bankruptcy Analysis\",\n\t\tdescription:\n\t\t\t\"Community level correlation analysis between bankruptcy rates and common factors in individual bankruptcies in American communities using Python, NumPy, and R.\",\n\t\tlink: \"/bankruptcy_analysis\",\n\t\tisNew: false,\n\t\tisComingSoon: false,\n\t\texternalLink: false,\n\t\ticon: \"bi-bank\",\n\t\ttags: [\"Python\", \"Data Science\"],\n\t},\n\t{\n\t\ttitle: \"No Assumption Neural Network\",\n\t\tdescription:\n\t\t\t\"Neural network written from scratch in Python without libraries or calculus.\",\n\t\tlink: \"/neural_network\",\n\t\tisNew: false,\n\t\tisComingSoon: true,\n\t\texternalLink: false,\n\t\ticon: \"bi-cpu-fill\",\n\t\ttags: [\"Python\", \"GenAI\"],\n\t},\n\t{\n\t\ttitle: \"MIDI Parser\",\n\t\tdescription: \"A custom Python library for parsing MIDI files.\",\n\t\tlink: \"/midi_parser\",\n\t\tisNew: false,\n\t\tisComingSoon: true,\n\t\texternalLink: false,\n\t\ticon: \"bi-file-earmark-music-fill\",\n\t\ttags: [\"Python\", \"Music\"],\n\t},\n];\n\nconst ProjectsContent = () => {\n\tconst [showFilters, setShowFilters] = useState(false);\n\tconst [selectedTags, setSelectedTags] = useState([]);\n\n\tconst toggleFilters = () => {\n\t\tsetShowFilters(!showFilters);\n\t};\n\n\tconst toggleTag = (tag) => {\n\t\tsetSelectedTags((prevTags) =>\n\t\t\tprevTags.includes(tag)\n\t\t\t\t? prevTags.filter((t) => t !== tag)\n\t\t\t\t: [...prevTags, tag]\n\t\t);\n\t};\n\n\t// TODO inclusive and exclusive filtering\n\tconst filteredProjects = projects.filter((project) =>\n\t\tselectedTags.length === 0\n\t\t\t? true\n\t\t\t: project.tags.some((tag) => selectedTags.includes(tag))\n\t);\n\n\tconst numProjects = filteredProjects.length;\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tProjects\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tFilters ({numProjects})\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{[\n\t\t\t\t\t\t\t\t\t...new Set(\n\t\t\t\t\t\t\t\t\t\tprojects.flatMap(\n\t\t\t\t\t\t\t\t\t\t\t(project) => project.tags\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t].map((tag, index) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t toggleTag(tag)}\n\t\t\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\t\t\tselectedTags.includes(tag) &&\n\t\t\t\t\t\t\t\t\t\t\t\t`me-1 badge-${tag\n\t\t\t\t\t\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(/\\s+/g, \"\")}`\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t{filteredProjects.map((project, index) => (\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{project.title}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{project.tags.map((tag, tagIndex) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{tag}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{project.description}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{project.isNew && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tNew!\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{project.isComingSoon && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tComing Soon\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t{project.externalLink ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tVisit{\" \"}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : project.isComingSoon ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tExplore\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tExplore\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t))}\n\t\t\t
\n\t\t\n\t);\n};\n\nexport default ProjectsContent;\n","import React from \"react\";\nimport Page from \"../components/Page\";\nimport ProjectsContent from \"../components/ProjectsContent\";\n\nconst ProjectsPage = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default ProjectsPage;\n","import { Link } from \"react-router-dom\";\nimport React from \"react\";\n\nconst ResumeContent = () => {\n\treturn (\n\t\t
\n\t\t\t

Joel's Resume

\n\t\t\t
\n\n\t\t\t

Professional Experience

\n\t\t\t
    \n\t\t\t\t
  • \n\t\t\t\t\tSoftware Engineer, Peraton (2018–Present)\n\t\t\t\t\t
      \n\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\tConducted big data analysis using Kibana and SQL to\n\t\t\t\t\t\t\textract insights from large datasets\n\t\t\t\t\t\t
    • \n\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\tDesigned and implemented front-end interfaces using\n\t\t\t\t\t\t\tHTML, CSS, JavaScript, TypeScript, and Bootstrap\n\t\t\t\t\t\t
    • \n\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\tCollaborated with cross-functional teams to develop\n\t\t\t\t\t\t\tsoftware solutions using Java, C++, SQL, XML/JSON,\n\t\t\t\t\t\t\tand the Java Spring Framework\n\t\t\t\t\t\t
    • \n\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\tServed as Scrum master for 7-member software team,\n\t\t\t\t\t\t\tmanaging daily standups, sprint planning, and\n\t\t\t\t\t\t\tretrospectives using Jira and Confluence\n\t\t\t\t\t\t
    • \n\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\tDesigned and implemented unit and performance tests\n\t\t\t\t\t\t\tfor software applications to ensure reliability and\n\t\t\t\t\t\t\tfunctionality\n\t\t\t\t\t\t
    • \n\t\t\t\t\t
    \n\t\t\t\t
  • \n\t\t\t
\n\n\t\t\t

Education

\n\t\t\t
    \n\t\t\t\t
  • \n\t\t\t\t\tBachelor’s - Computer Science 2014-2018\n\t\t\t\t\t(graduated) at West Virginia University, Magna Cum\n\t\t\t\t\tLaude/Honors Scholar, 3.7 GPA\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\tMaster’s - Biostatistics 2019-2022\n\t\t\t\t\t(graduated) at West Virginia University, GPA: 3.9 GPA\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\tDoctorate - Intelligent Systems 2023+\n\t\t\t\t\t(attending) at the University of Pittsburgh\n\t\t\t\t
  • \n\t\t\t
\n\n\t\t\t

Certifications

\n\t\t\t
    \n\t\t\t\t
  • \n\t\t\t\t\tAWS Certified Cloud Practitioner – Mar. 2019 – May 2026\n\t\t\t\t\t(Validation #: NWNQ1DN2D2FQQ5C7)\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\tSCRUM ALLIANCE® Certified ScrumMaster® – Aug. 2021 – Aug.\n\t\t\t\t\t2025 (Cert ID: 001234992)\n\t\t\t\t
  • \n\t\t\t
\n\n\t\t\t

Skills

\n\t\t\t
    \n\t\t\t\t
  • \n\t\t\t\t\tProficient in Python, Java, C++, R, JavaScript, TypeScript,\n\t\t\t\t\tand SQL\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\tExperienced with AWS, web development, AI/machine learning,\n\t\t\t\t\tAgile methodology, databases, and data analysis\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\tSkilled in Tableau, Pandas, and other data visualization\n\t\t\t\t\ttools\n\t\t\t\t
  • \n\t\t\t
\n\n\t\t\t

Publications

\n\t\t\t
    \n\t\t\t\t
  • \n\t\t\t\t\t\"Response variation as a result of tai chi on resting blood\n\t\t\t\t\tpressure in hypertensive adults: An aggregate data\n\t\t\t\t\tmeta-analysis.\" Complement Ther Clin Pract 2022;49:101641.\n\t\t\t\t\tdoi: https://doi.org/10.1016/j.ctcp.2022.101641{\" \"}\n\t\t\t\t\t\n\t\t\t\t\t\tVisit \n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t
\n\n\t\t\t

\n\t\t\t\tAcademic Research (Various Contracts, Grants, and Scholarships)\n\t\t\t

\n\t\t\t
    \n\t\t\t\t
  • \n\t\t\t\t\tEcological Analysis of Access to Exercise Opportunities and\n\t\t\t\t\tPhysical Inactivity\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\tAnalysis of Occupation and Industry Suicide and Depression\n\t\t\t\t\tRates (summer research contract)\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\tSystematic Review of Test-Retest Reliability With\n\t\t\t\t\tMeta-Analysis\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\tRegression Analysis of Bankruptcy by Region and Demographics\n\t\t\t\t\t(research grant){\" \"}\n\t\t\t\t\t\n\t\t\t\t\t\tExplore\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\tCorrelation Analysis of Built Environment and Life\n\t\t\t\t\tExpectancy Adjusting for Density\n\t\t\t\t
  • \n\t\t\t\t
  • MIDI File Format Parser (honors scholarship)
  • \n\t\t\t\t
  • \n\t\t\t\t\tMachine Learning Model Trained on Public Domain Music\n\t\t\t\t\t(honors scholarship){\" \"}\n\t\t\t\t\t\n\t\t\t\t\t\tExplore\n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t
\n\n\t\t\t

Contact Information

\n\t\t\t\n\t\t
\n\t);\n};\n\nexport default ResumeContent;\n","import React from \"react\";\nimport Page from \"../components/Page\";\nimport ResumeContent from \"../components/ResumeContent\";\n\nconst ResumePage = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default ResumePage;\n","// Bootstrap\nimport \"bootstrap-icons/font/bootstrap-icons.css\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\n\n// Animate on Scroll\nimport 'aos/dist/aos.css';\nimport AOS from 'aos';\n\n// Custom CSS\nimport \"./assets/sass/color-theme.scss\";\nimport \"./index.css\";\n\n// Dependencies\nimport React from \"react\";\nimport { BrowserRouter, Route, Routes } from \"react-router-dom\";\nimport ReactDOM from \"react-dom/client\";\n\n// Pages\nimport AboutPage from \"./pages/AboutPage\";\nimport BankruptcyAnalysisPage from \"./pages/BankruptcyAnalysisPage\";\nimport EvolutionarySimulationPage from \"./pages/EvolutionarySimulationPage\";\nimport HomePage from \"./pages/HomePage\";\nimport JAMIPage from \"./pages/JAMIPage\";\nimport JuxComposePage from \"./pages/JuxComposePage\";\nimport MusicRendererPage from \"./pages/MusicRendererPage\";\nimport OrchestrAIPage from \"./pages/OrchestrAIPage\";\nimport ProjectsPage from \"./pages/ProjectsPage\";\nimport ResumePage from \"./pages/ResumePage\";\n\n// Animation configuration\nAOS.init({\n\tduration: 1000,\n\teasing: 'ease-in-out',\n\tonce: true,\n\tmirror: false\n});\n\nconst App = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t} />\n\t\t\t\t\t} />\n\t\t\t\t\t} />\n\t\t\t\t\t} />\n\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\t} />\n\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\t} />\n\t\t\t\t\t} />\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nconst root = ReactDOM.createRoot(document.getElementById(\"root\"));\nroot.render();\n"],"names":["version","require","animation","tuneBook","sequence","strTranspose","abcjs","signature","Object","keys","forEach","key","renderAbc","TimingCallbacks","glyphs","setGlyph","setSymbol","CreateSynth","instrumentIndexToName","pitchToNoteName","SynthSequence","CreateSynthControl","registerAudioContext","activeAudioContext","supportsAudio","playEvent","SynthController","getMidiFile","synth","module","exports","timer","cursor","startAnimation","paper","tune","options","hideMeasures","elements","i","length","element","classList","contains","style","display","lastMeasure","measureCallback","selector","hideCurrentMeasure","querySelectorAll","disappearMeasuresBefore","hideFinishedMeasures","disappearMeasuresAfter","stop","undefined","showCursor","querySelector","document","createElement","className","position","appendChild","qpm","bpm","eventCallback","range","measureStart","line","measureNumber","left","top","width","height","start","pauseAnimation","pause","stopAnimation","ViolinTablature","GuitarTablature","pluginTab","abcTablatures","inited","plugins","register","plugin","name","tablature","this","setError","msg","warnings","warning","push","preparePlugins","tuneNumber","params","returned","tabs","ii","args","instrument","tabName","visualTranspose","abcSrc","pluginInstance","classz","instance","layoutTablatures","renderer","abcTune","tablatures","lines","curStaff","staff","jj","tabPlugin","init","render","target","self","parseInt","tempo","metaText","getBpm","extraMeasuresAtBeginning","beatCallback","lineEndCallback","lineEndAnticipation","beatSubdivisions","joggerTimer","replaceTarget","newTarget","noteTimings","setTiming","lineEndTimings","timings","anticipation","callbackTimes","lastTop","timing","type","milliseconds","bottom","getLineEndTimings","startTime","currentBeat","currentEvent","currentLine","currentTime","isPaused","isRunning","pausedPercent","justUnpaused","newSeekPercent","lastTimestamp","millisecondsPerBeat","lastMoment","totalBeats","Math","round","doTiming","timestamp","thisStartTime","leftEvent","endTimings","requestAnimationFrame","ret","doBeatCallback","ret2","promise","shouldStop","then","Promise","resolve","result","endMs","ev","next","max","debugInfo","offMs","gapMs","gapPx","endX","offPx","animationJogger","performance","now","setTimeout","offsetPercent","units","setProgress","reset","reportNext","clearTimeout","currentMillisecond","percent","oldBeat","floor","Parse","bookParser","tunebook","numberOfTunes","abc","num","split","TuneBook","book","parsed","header","tunes","prototype","getTuneById","id","getTuneByTitle","title","parseOnly","numTunes","output","renderEngine","callback","testObject","propertyIsEnumerable","currentTune","startingTune","abcParser","div","getElementById","parse","startPos","getTune","getWarnings","override","innerHTML","extractMeasures","arr","arr2","lastChord","measureStartChord","fragStart","measures","hasNotes","tuneObj","hasPickup","getPickupLength","j","k","kk","voice","voices","kkk","elem","startChar","chord","el_type","measure","substring","endChar","startEnding","endEnding","EngraverController","wrap","resizeDivs","resizeOuter","window","innerWidth","hasOwnProperty","outer","offsetLeft","addEventListener","e","renderOne","lineOffset","viewportHorizontal","scrollHorizontal","overflowX","overflowY","overflow","children","viewportVertical","engraver_controller","engraveABC","engraver","parentNode","parserParams","engraverParams","renderParams","warnings_id","warning_id","highlight","clickListener","abcString","removeDiv","setAttribute","body","afterParsing","staffwidth","widths","getMeasureWidths","calcLineWraps","reParse","revisedParams","explanation","doLineWrapping","removeChild","relativeMajor","key1sharp","acc","note","key2sharp","key3sharp","key4sharp","key5sharp","key6sharp","key1flat","key2flat","key3flat","key4flat","key5flat","key6flat","newKey","JSON","stringify","modes","stepsFromC","keyReverse","allKeys","keyObj","toLowerCase","mode","createKeyReverse","match","maj","relativeMode","majorKey","group","regMode","thisMode","ind","indexOf","transposeKey","steps","fromC","parseCommon","spacing","flatten","delineTune","copy","dest","src","prop","attrs","skipTies","index","media","metaTextInfo","formatting","staffNum","voiceNum","lineNum","runningFonts","copyTopInfo","copyBottomInfo","getBeatLength","meter","getMeterFraction","multiplier","den","barLength","getBarLength","pickupLength","v","tripletMultiplier","el","isSpacer","rest","startTriplet","duration","endTriplet","computePickupLength","getTotalTime","totalTime","getTotalBeats","millisecondsPerMeasure","bpmOverride","getBeatsPerMeasure","beatLen","getMeter","value","getKeySignature","getElementFromChar","char","addElementToEvents","eventHash","voiceTimeMilliseconds","timeDivider","isTiedState","nextIsBar","hint","realDuration","durationClass","abcelem","es","elemset","isTiedToNext","startTie","startCharArray","endCharArray","min","x","midiPitches","midiGraceNotePitches","w","cloneArray","makeVoicesArray","voicesArr","tempos","staffgroups","staffs","firstStaff","middleC","absoluteY","STEP","lastStaff","isTabStaff","noteFound","tempoLocations","setupEvents","startingDelay","startingBpm","warp","timingEvents","time","maxVoiceTimeMilliseconds","voiceTime","startingRepeatElem","endingRepeatElem","tempoDone","thisMeasure","lastHash","barType","endRepeat","startRepeat","lastVoiceTimeMilliseconds","el2","element2","lastBarTop","lastBarBottom","lastEventTop","lastEventBottom","nextTop","nextBottom","addVerticalInfo","hash","sort","a","b","diff","makeSortedArray","staffGroup","lastEl","addEndPoints","addUsefulCallbackInfo","beatLength","measuresOfDelay","console","log","naturalBpm","beatsPerSecond","setUpAudio","seq","percmap","midi","deline","replacer","addMeterToVoices","unshift","addKeyToVoices","addClefToVoices","clef","addFontToVoices","font","objEqual","input","cloneLine","keys2","concat","inputLines","lineBreaks","outputLines","inMusicLine","currentMeter","currentKey","currentClef","currentVocalFont","currentGChordFont","currentTripletFont","currentAnnotationFont","inputLine","vskip","outputLine","s","inputStaff","outputStaff","abbrevTitle","vocalfont","gchordfont","tripletfont","annotationfont","outputVoice","inputVoice","CustomEvent","event","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","Event","EditArea","textareaid","textarea","initialText","isDragging","addSelectionListener","listener","onmousemove","fireSelectionChanged","addChangeListener","changelistener","onkeyup","fireChanged","onmousedown","onmouseup","onchange","getSelection","selectionStart","end","selectionEnd","setSelection","setSelectionRange","createTextRange","collapse","moveEnd","moveStart","select","focus","getString","setString","str","getElem","Editor","editarea","abcjsParams","midi_options","parser_options","render_options","gatherAbcParams","indicate_changed","canvas_id","paper_id","insertBefore","selectionChangeCallback","clientClickListener","bind","cursorControl","generate_midi","generateDownload","midi_download_id","downloadMidi","generateInline","midi_id","inlineMidi","warningsdiv","generate_warnings","onchangeCallback","currentAbc","bReentry","parseABC","modelChanged","addClassName","elementClassName","RegExp","test","hasClassName","removeClassName","strip","replace","setReadOnly","readOnly","readonlyClass","removeAttribute","redrawMidi","midiPause","downloadMidiEl","inlineMidiEl","engravingEl","dispatchEvent","userAction","synthControl","load","setTune","timerId","disable","error","message","join","updateSelection","paramChanged","synthParamChanged","t","selection","rangeHighlight","setDirtyStyle","isDirty","bIsPaused","wasDirty","setNotDirty","classes","analysis","drag","mouseEvent","shouldPause","visualObj","pauseMidi","create","rendererFactory","addNotes","notePlacement","baseDuration","times","h","parseFloat","lastTime","events","distance","addRest","volume","startNote","pitch","cents","endNote","commands","setGlobalInfo","tracks","startTrack","cmd","setText","text","pan","setChannel","setInstrument","channel","gapLengthInBeats","gap","endTrack","getData","source","destination","property","clone","pattern","d","lastIndexOf","parseDirective","ParseHeader","ParseMusic","Tokenizer","Tune","TuneBuilder","tokenizer","tuneBuilder","wordsContinuation","symbolContinuation","addPositioning","positioning","addFont","fonts","music","multilineVars","iChar","accidentals","root","origMeter","hasMainTitle","default_length","verticalPos","octave","next_note_duration","start_new_line","is_in_header","partForNextLine","tempoForNextLine","havent_set_length","staves","macros","currBarNumber","barCounter","ignoredDecorations","score_is_present","inEnding","inTie","inTieChord","vocalPosition","dynamicPosition","chordPosition","ornamentPosition","volumePosition","openSlurs","freegchord","endingHoldOver","differentFont","defaultFonts","decoration","face","size","weight","addFormattingOptions","elType","measurefont","repeatfont","duplicateStartEndingHoldOvers","restoreStartEndingHoldOvers","encode","warn","col_num","bad_char","warningObject","clean_line","addWarning","lineIndex","column","warningObjects","getWarningObjects","addWords","words","word_list","last_divider","addWord","word","syllable","translateString","divider","escNext","last","skip","to","pitches","shift","lyric","addSymbols","parseLine","startsWith","err","addDirective","getCurrentVoice","lineContinuation","parseMusic","parseHeader","regular","newline","startNewLine","symbols","appendLastMeasure","nextVoice","addHintMeasure","nextStaff","stave","nextStave","strTune","switches","i2","substr","all","backslash","comment","Array","pop","print","globalTranspose","setVisualTranspose","format","globalFormatting","nextLine","header_only","stop_on_warning","wasInHeader","setRunningFont","cleanUp","barsperstaff","staffnonote","ph","pl","papersize","landscape","pagewidth","pageheight","hint_measures","addHintMeasures","wrapLines","barNumbers","directives","initialWhiteSpace","tuneStrings","pos","pure","initialize","tokenizer_","warn_","multilineVars_","tune_","tuneBuilder_","historyfont","infofont","partsfont","textfont","wordsfont","composerfont","subtitlefont","tempofont","titlefont","footerfont","headerfont","voicefont","tablabelfont","tabnumberfont","tabgracefont","fontTypeCanHaveBox","getFontParameter","tokens","currentSetting","processNumberOnly","token","box","state","hyphenLast","currToken","psFont","fontFace","fontTranslation","getChangingFont","setScale","scratch","tok","isNaN","scale","drumNames","addMultilineVar","intt","addMultilineVarBool","addMultilineVarOneParamChoice","choices","choice","found","midiCmdParam0","midiCmdParam1String","midiCmdParam1Integer","midiCmdParam1Integer1OptionalInteger","midiCmdParam2Integer","midiCmdParam4Integer","midiCmdParam5Integer","midiCmdParam1String1Integer","midiCmdParamFraction","midiCmdParam1StringVariableIntegers","parseFontChangeLine","textstr","textParts","setfont","textarr","positionChoices","parseStretchLast","floatt","tokenize","restOfString","stripComment","bagpipes","flatbeams","jazzchords","germanAlphabet","graceSlurs","lt","lineThickness","sl","stretchlast","titlecaps","titleleft","measurebox","points","getMeasurement","used","oneParameterMeasurement","voiceScale","currentVoice","changeVoiceScale","voiceColor","color","changeVoiceColor","getRequiredMeasurement","addSpacing","addSeparator","spaceAbove","spaceBelow","lenLine","partsBox","setBarNumberImmediate","textBlock","addText","continueall","centerstr","addCentered","sfTokens","sfNum","getGlobalFont","lastVoice","addVoice","newStaff","bracket","brace","continueBar","numVoices","connectBarLines","openParen","openBracket","openBrace","justOpenParen","justOpenBracket","justOpenBrace","addContinueBar","ty","vc","continueId","pgNum","getInt","addNewPage","digits","subCmd","addMetaText","footerStr","getMeat","footerArr","footer","center","right","addMetaTextObj","midi_cmd","midi_params","drummap","p","hasBeginMusic","appendElement","parseMidiCommand","sound","noteHead","interpretPercMap","formatHash","fontboxpadding","parseKeyVoice","setTitle","addSubtitle","titleStr","theReverser","toUpperCase","setMeter","parseFraction","parseNum","totalLength","mv","calcTempo","relTempo","dur","resolveTempo","addUserDefinition","equals","before","after","setDefaultLength","len_arr","n","tempoString","larghissimo","adagissimo","sostenuto","grave","largo","lento","larghetto","adagio","adagietto","andante","andantino","moderato","allegretto","allegro","animato","agitato","veloce","vivace","vivacissimo","allegrissimo","presto","prestissimo","setTempo","delaySet","preString","suppressBpm","postString","printTempo","suppress","letter_to_inline_header","startLine","ws","eatWhiteSpace","appendStartingElement","parseKey","foundClef","foundKey","fixKey","parseVoice","letter_to_body_header","metaTextHeaders","A","B","C","D","F","G","I","N","O","R","S","W","Z","field","addMetaTextArray","peekLine","transpose","standardKey","keyName","localTranspose","keySignature","clefLines","mid","calcMiddle","oct","fixClef","clefPos","deepCopyKey","E","c","f","g","addPosToKey","impliedNaturals","fixedKey","parseMiddle","isInline","retPitch","getKeyPitch","len","retAcc","getSharpFlat","retMode","getMode","savedOrigKey","oldKey","keyCompensate","globalTransposeOrigKeySig","accs","getKeyAccidentals2","normalizeAccidentals","explicitAccidentals","splice","getPitchFromTokens","stafflines","staffscale","getToken","isNew","staffInfo","startStaff","addNextTokenToStaffInfo","attr","getVoiceToken","addNextTokenToVoiceInfo","getNextToken","addNextNoteTokenToVoiceInfo","stem","suppressChords","cue","vi","spacing_below_offset","subname","setCurrentVoice","MusicParser","_tokenizer","_warn","_multilineVars","_tune","_tuneBuilder","_header","isInTie","overlayLevel","voiceIndex","startOfLine","isWhiteSpace","delayStartNewLine","tripletNotesLeft","retHeader","startI","retInlineHeader","letter_to_spacer","letter_to_chord","chordName","addedChord","ci","rel_position","skipWhiteSpace","force_end_beam_last","letter_to_accent","beambr","letter_to_grace","gracenotes","letter_to_bar","measureNotEmpty","bar","barFirstEndingNum","barNumber","letter_to_overlay","letter_to_open_slurs_and_triplets","consumed","startSlur","dottedSlur","triplet","tripletQ","tripletR","num_notes","chordDuration","rememberEndBeam","done","accent","chordNote","getCoreNote","end_beam","endTie","setIsInTie","postChordDone","addEndBeam","endSlur","br2","getBrokenRhythm","fraction","getFraction","ch","core","accidental","midipitch","graceNotes","durationOfMeasure","getBrackettedSubstring","getFloat","y","gra","acciaccatura","endBeam","legalAccents","volumeDecorations","dynamicDecorations","accentPseudonyms","accentDynamicPseudonyms","macro","includes","findIndex","curr_pos","getBarLine","orig_bar_len","ending","retRep","getTokenOf","part","scoreTranspose","targetKey","st","isFirstVoice","rests","X","z","accMap","canHaveBrokenRhythm","dottedTie","isComplete","durationSetByPreviousNote","grace_notes","getNumber","addTieToLastNote","finished","skipAlpha","firstThree","getClef","bExplicitOnly","strOrig","needsClef","strClef","isMatch","explicit","colons","legalChars","getKeyAccidental","accTranslation","isLetter","isNumber","alphaUntilWhiteSpace","float2","close","charMap","charMap1","charMap2","out","iSave","endsWith","substInChord","maxErrorChars","_matchChar","matchChar","esc","allNotes","transposeChordName","keyAccidentals","keyIndex","newKeyMinor","localTransposeVerticalMovement","localTransposePreferFlats","baseKey","thisKeyIndex","recognized","newKeyName","transposedKey","newKeySig","charCodeAt","ceil","pitchToLetter","dblflat","flat","natural","sharp","dblsharp","accidentals2","accidentals3","origPitch","actual","pitchIndex","noteName","newPitch","origKeySig","origPitchLetter","origAccidental","delta","newPitchLetter","newAccidental","calcAccidental","accidentalChange","allPitches","sharpChords","flatChords","sharpChordsFree","flatChordsFree","preferFlats","freeGCchord","extra1","bass","extra2","findLastBar","resolveOverlays","madeChanges","durationsPerLines","overlayVoice","hasOverlay","snip","durationThisBar","inOverlay","overlayDuration","snipStart","ov","direction","indexOfLastBar","currSlur","closeLine","anyDeleted","hasAny","containsNotes","filter","wrapMusicLines","keepThis","containsNotesStrict","firstMusicLine","hasATitle","fixTitles","workingClef","cleanUpSlursInLine","addEndSlur","obj","chordPos","offNum","slurNum","addStartSlur","usedNums","nextNum","label","gg","ggg","fixClefPlacement","permanentItems","barNumThisLine","getNextMusicLine","cp","ss","vv","startElement","section","slice","potentialStartBeam","potentialEndBeam","vskipPending","getLastNote","getDuration","startBeam","hashParams","This","endBeamLast","hp","currStaff","mid2","pushNote","hashParams2","pushLine","info","subtitle","newpage","lineLength","separator","createVoice","thisStaff","head","createStaff","setLineFont","createLine","isDifferent","lastElement","isFirstLine","currLine","freeFormLineBreaks","lineBreakPoint","totals","totalThisLine","attemptedWidth","newArr","oneTry","measureWidths","idealWidths","accumulator","lineAccumulator","lineWidths","lastVariance","highestVariance","startIndex","otherTries","measureWidth","thisVariance","abs","newWidths","newBreaks","optimizeLineWidths","numLines","total","idealWidth","otherTry","variances","aveVariance","lineWidth","attempts","smallest","smallestIndex","failed","variance","fixedMeasureLineBreaks","preferredMeasuresPerLine","thisWidth","linesBreakElements","lineBreakArray","lineBreakIndexes","lbai","lineCounter","lineStart","lbi","ogLine","findLineBreaks","lastKeySig","lastStem","currentBarNumber","action","currVoice","addLineBreaks","minSpacing","minSpacingLimit","maxSpacing","lastLineLimit","accumulatedLineBreaks","explanations","usableWidth","allowableVariance","minLineSize","staffWidth","minWidth","ff","reason","getRevisedTuneParams","_require","transposeOneTune","changes","count","segment","destinationKey","changeAllKeySigs","transposeVoices","transposeVoice","createKeyAccidentals","setLetterDistance","keyRoot","letterDistance","letters","measureAccidentals","transposedMeasureAccidentals","prefersFlats","newChord","replaceChord","parseNote","transposePitch","upper","replaceNote","grace","newGrace","replaceGrace","octaves","major","newMajor","newMode","origDistFromC","newDistFromC","adj","keyAcc","newNote","courtesy","regPitch","regNote","regOptionalNote","regSpace","reg","currentAcc","calcAdjustment","noteLen","trailingLen","regPreNote","endLen","thisAccidental","keyAccidental","measureAccidental","pitchesToPerc","barAccidentals","startingTempo","startingMeter","currentInstrument","currentTrack","currentTrackName","lastEventTime","chordTrack","chordSourceTrack","chordTrackFinished","chordChannel","currentChords","chordLastBar","lastBarTime","nextVolume","nextVolumeDelta","drumTrack","drumBars","tempoChangeFactor","bassInstrument","chordInstrument","drumInstrument","boomVolume","chickVolume","gChordTacet","hasRhythmHead","doBeatAccents","stressBeat1","stressBeatDown","stressBeatUp","beatFraction","slurCount","drumDefinition","chordTrackEmpty","isEmpty","timeToRealTime","durationRounded","getBeatFraction","percmap_","midiOptions","bassprog","chordprog","bassvol","chordvol","chordsOff","ties","timeCounter","tempoMultiplier","thisDuration","tie","item","preProcess","voiceOff","voicesOff","trackName","writeNote","setKeySignature","alignDrumToMeter","resolveChords","writeDrum","program","normalizeDrumDefinition","tacet","beats","detuneOctave","detuneCents","track","topEvent","topNote","findOctaves","totalDuration","breakSynonyms","calcBeat","currTime","processChord","firstChord","findChord","chick","basses","chordTranspose","bass2","chordNotes","remaining","bassShift","boom","boom2","interpretChord","barBeat","beat","doModifiedNotes","noteModification","runningDuration","shortestNote","graces","velocity","processVolume","setChordTrack","companionDuration","graceDuration","actualPitch","adjustPitch","adjustForMicroTone","processGraceNotes","midiGrace","gp","durationInMeasures","writeGraceNotes","rt","ms","currentTrackMilliseconds","currentTrackWholeNotes","thisBreakBetweenNotes","findNoteModifications","ePitches","note2","endType","realDur","getRealDuration","extractOctave","extractNote","description","chordIntervals","modifier","intervals","M","m","notes","writeBoom","noteLength","writeChick","rhythmPatterns","endTime","portionOfAMeasure","beatsPresent","mult","cc","m2","thisChord","lastBoom","on","totalPlay","bars","playCount","measuresPerBeat","factor","measureLen","centsToFactor","setAttributes","elm","Midi","trackstrings","trackcount","noteOnAndChannel","noteOffAndChannel","toHex","divisions","hex","sharpCount","flatCount","sig","clocks","timeSignature","encodeString","noteWarped","trackInstrument","silencelength","tracklength","number","ccPrefix","toString","cmdType","nameArray","padding","encodeHex","to7BitHex","lower","toDurationHex","res","bits","loudness","bend","embed","parent","noplayer","data","link","href","firstChild","controller","autoplay","loop","enablejavascript","measureLength","PERCUSSION_PROGRAM","numNotesToDecoration","counter","endingVolume","chordVoiceOffThisBar","noChordVoice","getTrackTitle","voiceNumber","interpretTempo","interpretMeter","removeNaturals","addKey","addIfDifferent","addMeter","abctune","midiTranspose","channelExplicitlySet","drumPattern","drum","drumIntro","drumOn","startingMidi","globals","drumbars","drumon","nobeataccents","defaultQpm","startVoice","currentVolume","inCrescendo","inDiminuendo","durationCounter","tempoChanges","voiceName","cl","noteEventsInBar","tripletDurationTotal","tripletDurationCount","noteElem","durationTotal","drumChange","startRepeatPlaceholder","skipEndingPlaceholder","startingDrumSet","_loop","setDynamics","dynamicType","volumes","endDec","n2","endDec2","intro","drumoff","changePositions","lastTempo","insertTempoChanges","pickups","insertPoint","abcjsAudioContext","pow","map","loopImage","playImage","pauseImage","loadingImage","resetImage","acResumerMiddleWare","playBtn","afterResume","isPromise","needsInit","status","add","resume","response","doNext","remove","Error","HTMLElement","ac","hasLoop","loopHandler","hasRestart","restartHandler","hasPlay","playHandler","playPromiseHandler","hasProgress","progressHandler","hasWarp","warpHandler","hasClock","html","repeatTitle","repeatAria","restartTitle","restartAria","playTitle","playAria","randomTitle","randomAria","warpTitle","warpAria","buildDom","attachListeners","isDisabled","setWarp","resetAll","pushedButtons","pushPlay","startButton","pushLoop","loopButton","progressBackground","progressThumb","clientWidth","clock","totalSeconds","minutes","seconds","secondsFormatted","isResumed","getNote","createNoteMap","downloadBuffer","placeNote","soundsCache","notSupportedMessage","originalSoundFontUrl","defaultSoundFontUrl","audioBufferPossible","directSource","startTimeSec","pausedTimeSec","audioBuffers","audioContext","debugCallback","_deviceCapable","reject","soundFontUrl","soundFontVolumeMultiplier","programOffsets","fadeLength","NaN","noteEnd","meterSize","flattened","beatsPerMeasure","sequenceCallback","callbackContext","onEnded","cached","errorNotes","pitchNumber","label2","batches","results","loaded","_loadBatch","batch","delay","promises","pending","oneResponse","which","newBatch","catch","list","prime","fadeTimeSec","totalSamples","sampleRate","noteMapTracks","panDistances","numTracks","panParam","pp","panNumber","even","currLow","currHigh","setPan","uniqueSounds","noteMap","trackNumber","panDistance","allPromises","audioBuffer","createBuffer","key2","parts","resolveData","me","suspend","resumePosition","_kickOffSound","seek","offset","download","getAudioBuffer","trackNum","createBufferSource","buffer","connect","onended","URL","createObjectURL","sample","numOfChan","numberOfChannels","ArrayBuffer","view","DataView","channels","setUint32","setUint16","getChannelData","setInt16","Blob","bufferToWave","midiCreate","generateMidiDownloadLink","midiParams","divClasses","downloadClass","preTextDownload","functionToCheck","downloadLabel","call","fileName","postTextDownload","midiOutputType","decoded","Uint8Array","url","instrumentCache","xhr","XMLHttpRequest","noteUrl","open","responseType","onload","maybePromise","decodeAudioData","onerror","send","notesInOrder","noteToMidi","midiToNote","pitchMap","f0","n0","s0","x0","f1","n1","s1","x1","f2","s2","x2","f3","n3","s3","x3","f4","n4","s4","x4","f5","n5","s5","x5","f6","n6","s6","x6","f7","n7","s7","x7","f8","n8","s8","x8","f9","n9","s9","x9","f10","n10","s10","x10","f11","n11","s11","x11","f12","n12","s12","x12","f13","n13","s13","x13","f14","n14","s14","x14","f15","n15","s15","x15","f16","n16","s16","x16","pitchObj","copyToChannel","toBuffer","fromBuffer","fromData","toData","outputAudioBuffer","startArray","volumeMultiplier","ofsMs","noteEndSec","OfflineAC","OfflineAudioContext","webkitOfflineAudioContext","offlineCtx","noteBufferPromise","fnResolve","gainNode","createGain","createStereoPanner","panNode","setValueAtTime","gain","linearRampToValueAtTime","playbackRate","noteOff","oncomplete","renderedBuffer","startRendering","doPlay","midiGracePitches","addTrack","appendNote","AudioContext","webkitAudioContext","navigator","mozAudioContext","msAudioContext","aac","midiBuffer","currentTempo","control","isLooping","isStarted","isLoaded","isLoading","visualOptions","displayLoop","toggleLoop","displayRestart","restart","displayPlay","play","displayProgress","randomAccess","displayWarp","onWarp","audioParams","go","loadingResponse","subdivisions","onReady","notesStatus","destroy","runWhenReady","_play","fn","arg1","onStart","_randomAccess","background","offsetWidth","newWarp","wasPlaying","startPercent","onFinished","beatNumber","onBeat","onEvent","lineEvent","onLineEnd","getUrl","click","revokeObjectURL","starts","instrumentNumber","StringPatterns","GuitarPatterns","tuning","_super","strings","notesToNumber","stringToPitch","stringNumber","StringTablature","TabCommon","TabRenderer","Plugin","linePitch","nbLines","isTabBig","capo","semantics","staffIndex","inError","bypass","doLayout","TabNote","TabNotes","handleChordNotes","retNotes","iiii","clefTranspose","checkKeyAccidentals","curPos","toNumber","jjjj","nextPos","noteToNumber","secondPos","sameString","secondPosition","firstSize","emitNoAccidentals","isFlat","noteEquiv","getAccidentalEquiv","emit","isAltered","isDouble","isSharp","stringPitches","pitchAltered","quarter","invalidNumber","highestNote","capoTuning","iii","curNote","jjj","nextNote","buildCapo","stringNotes","build","buildPatterns","first","buildSecond","retGraces","replaceAll","tabInfos","lineSpace","verticalSize","pitch2","isPercussion","setRelative","child","relative","hasComma","hasQuote","isKeySharp","isKeyFlat","isLower","isQuoted","sameNoteAs","isLowerThan","curAccidentals","cloned","newTabNote","cloneNote","prevNote","fromNote","toNote","fromN","toN","from","buildReturned","toIndex","ViolinPatterns","AbsoluteElement","RelativeElement","cloneObject","isArray","constructor","cloneAbsolute","absSrc","cloneAbsoluteAndRelatives","buildTabAbsolute","absX","relX","tabIcon","tabYPos","tabAbsolute","icon","Ypos","tabRelative","lyricsDim","extra","TabAbsoluteElements","buildRelativeTabNote","def","isGrace","strNote","tabNoteRelative","getXGrace","graceInRest","absElem","convertToNumber","tabPos","posNote","buildGraceRelativesForRest","absChild","tabVoice","mm","defGrace","tabGraceRelative","staffAbsolute","keySig","staffSize","tabNameInfos","getInitialStaffSize","defNote","isClef","lastBar","bn","abselem","restGraces","heads","lyricDim","ll","dx","VoiceElement","buildTabName","stringSemantics","textSize","getTextSize","calc","absolutes","tabStaff","tabSize","islastTabInStaff","getParentStaffIndex","checkVoiceKeySig","lyricsHeight","maxLyricHeight","curAbs","specialY","lyricHeightBelow","getLyricHeight","prevIndex","previousStaff","tabTop","staffGroupInfos","tempoHeightAbove","partHeightAbove","volumeHeightAbove","dynamicHeightAbove","endingHeightAbove","chordHeightAbove","lyricHeightAbove","chordHeightBelow","volumeHeightBelow","dynamicHeightBelow","dy","nextTabPos","tabIndex","handledVoices","nbVoices","getNextTabPos","parentIndex","parentStaff","lastTab","getLastStaff","nbStaffs","getStaffNumbers","isMultiVoiceSingleStaff","duplicate","nameHeight","hasStaff","hasTab","linkStaffAndTabs","BeamElem","BraceElem","createClef","createKeySignature","createNoteHead","createTimeSignature","Decoration","EndingElem","StaffGroupElement","TempoElement","TieElem","TripletElem","addChord","chartable","rhythm","nostem","harmonic","triangle","uflags","dflags","AbstractEngraver","isBagpipes","flatBeams","initialClef","getBeamGroup","abcline","setAveragePitch","sortPitch","sum","averagepitch","minpitch","maxpitch","slurs","slursbyvoice","tiesbyvoice","endingsbyvoice","scaleByVoice","colorByVoice","tripletmultiplier","accidentalSlot","accidentalshiftx","dotshiftx","hasVocals","minY","partstartelem","startlimitelem","stemdir","setStemHeight","heightInPixels","stemHeight","getCurrentVoiceId","pushCrossLineElems","popCrossLineElems","containsLyrics","createABCLine","l","staffgroup","tempoSet","restoreState","createABCStaff","abcstaff","updateFonts","barfrom","barto","headerPosition","baselineToCenter","addMeasureNumber","addChild","ts","staffLines","isSingleLineStaff","createABCVoice","setStaffLimits","setBottomStaff","continuing","addOther","voicetotal","voicenumber","slur","force","stemDir","dotted","setHint","isFirstStaff","abselems","createABCElement","tempoElement","addFixedX","saveState","tiesSave","slursSave","cloneHashOfHash","slursbyvoiceSave","tiesbyvoiceSave","cloneHashOfArrayOfHash","createBeam","createNote","isClosed","createBarLine","invisible","absKey","dim","abselem3","abselem2","addFixed","elems","abselemset","beamelem","runningDirection","setStemDirection","tempStemDir","stemsUp","calcDir","addBeam","sorted","tmp","ledgerLines","minPitch","maxPitch","isRest","symbolWidth","additionalLedgers","dir","ofs","addIfNotExist","addGraceNotes","notehead","roomtaken","gracescale","flag","gracebeam","mainNote","graceoffsets","gracepitch","headx","extrax","highestVert","addSlursAndTies","addExtra","dAcciaccatura","addRight","scalex","scaley","pseudoabselem","p1","p2","linewidth","getSymbolWidth","isInvisibleRest","anchor1","anchor2","addNoteToAbcElement","dot","zeroDuration","durlog","noteSymbol","roomTaken","roomTakenRight","prev","curr","printer_shift","percHead","hasStem","shouldExtendStem","printAccidentals","extraw","extraLeft","addHead","addLyric","lyricStr","ly","roomtakenright","tot","inc","durationForSpacing","absType","durationClassOveride","ret1","isMultiVoice","restpitch","mmWidth","numMeasures","addRestToAbsElement","createDecoration","ret3","setCloseAnchor","middleNote","pitchelem","setEndAnchor","setRange","slurid","setStartX","addInternalNote","measureNumDim","vert","anchor","firstdots","firstthin","thick","secondthin","seconddots","setEndX","textWidth","minspacing","translateChord","noteheadWidth","chords","klass","chordWidth","chordHeight","realWidth","relPositionY","pos2","rows","marginLeft","marginTop","move","absElemType","inGroup","noMove","marginBottom","symbolHeightInPitches","clefOffsets","adjustspacing","isKeySig","symbol","fudge","thickness","newDotShiftX","shiftheadx","adjust","opts","xdelta","dotadjusty","symb","accSlotFound","accPlace","numWidth","denWidth","maxWidth","i3","DynamicDecoration","CrescendoElem","GlissandoElem","startDiminuendoX","startCrescendoX","minTop","minBottom","compoundDecoration","placement","lowestPitch","highestPitch","deltaX","dynamicDecoration","diminuendo","crescendo","glissando","startGlissandoX","volumeDecoration","yPos","getSymbolAlign","yPos2","blank1","blank2","fixedY","above","below","closeDecoration","incrementPlacement","getPlacement","textDecoration","symbolDecoration","symbolList","hasOne","stackedDecoration","leftDecoration","unhighlight","fixed","getFixedCoords","_addChild","half","setLimit","member","pushTop","pushBottom","setX","midpoint","firstElement","isflat","isgrace","forceup","forcedown","average","allrests","beams","calcAverage","numElements","beam","addTextIf","BottomText","isPrint","paddingLeft","unalignedWords","extraText","defFont","startGroup","space","largestY","offsetX","thisWord","endGroup","discography","transcription","history","endVoice","lastContinuedVoice","getWidth","isStartVoice","dec","getFontAndAttr","maxHeight","leftSide","currentFont","opt","centerVertically","getChordDim","invertLane","lane","putChordInLane","getLane","calcHeight","staffnumber","setHeight","setWidth","tAnchor","tLeft","totalHeightInPitches","temposcale","tempoNote","internalNotes","startLimitElem","startLimitX","endLimitElem","endLimitX","calcTieDirection","referencePitch","calcSlurDirection","hasDownStem","calcX","lineStartX","lineEndX","startX","calcTieY","startY","endY","calcSlurY","beamInterferes","midPoint","avoidCollisionAbove","maxInnerHeight","headerTextHeight","origin","composer","composerLine","author","partOrder","middleElems","otherchildren","firstItem","adjustRange","pathClone","pathArray","Glyphs","printSymbol","path","getPathForSymbol","kx","ky","pathScale","getYCorr","germanNote","chordString","baseChord","bassNote","marker","drawTempo","drawRelativeElement","setClass","elementGroup","bartop","selectables","staffPos","isTempo","beginGroup","counters","getCurrent","overrideClasses","baseVal","isSelectable","notePositions","zero","printPath","roundNumber","draw","calcY","startY2","getSlope","getY","slope","currentX","pathString","xes","y1","y2","klasses","generate","stroke","fill","foregroundColor","sprintf","renderText","curve","xLeft","yTop","xCurve","yCurve","yBottom","openGroup","yHeight","curvyPath","xLineWidth","yOverlap","wCurve","hCurve","straightPath","closeGroup","wrapSvgEl","drawLine","y3","y4","rectBeneath","drawStaffGroup","setPaperSize","nonMusic","Selectables","engraveStaffLine","lineNumber","addStaffPadding","staffSeparation","lastStaffGroup","thisStaffGroup","lastBottomLine","separationInPixels","moveY","responsive","selectTypes","topText","incrLine","abcLine","bottomText","getElements","linestartx","lineendx","noClass","xOfs","leftStart","leftEnd","drawSquiggly","leftY","rightY","leftX","rightX","sqrt","marginRight","leftYAdj","numSquigglies","Group","ingroup","lastM","isInGroup","addPath","drawSeparator","row","absmove","absolutemoveY","firefox112","lineToBack","pathToBack","kernSymbols","lastSymbol","thisSymbol","lastSymbolWidth","ycorr","groupClass","printStem","printStaffLine","graphelem","tabFont","tabClass","stemWidth","scaleX","scaleY","setAttributeOnElement","scaleExistingElem","toFixed","absEl","svgEl","isNoteOrTabNumber","canSelect","selectable","tabindex","sel","isDraggable","maxwidth","ariaLabel","insertStyles","parentStyles","setResponsiveWidth","setSize","setParentStyles","arguments","o","exec","String","fromCharCode","toExponential","str_repeat","drawBrace","drawVoice","printStaff","printDebugBox","printBrace","boxAllElements","coords","relElem","colorIndex","topLine","bottomLine","staff1","showDebug","dottedLine","originalTop","originalBottom","debugPrintGridItem","incrVoice","newMeasure","startx","tabNameHeight","r","colors","positionY","chordLines","printLine","endx","prepend","firstYLine","lastYLine","curpitch","preWidth","postWidth","alreadyInGroup","laneMargin","class","getBBox","deltaY","rect","layout","isTie","drawArc","pitch1","norm","ux","uy","maxFlatten","controlx1","controly1","controlx2","controly2","pathString2","fudgeY","hasBeam","bracketHeight","midX","gapWidth","leftEndX","rightStartX","drawBracket","xTextPos","yTextPos","drawGlissando","drawCrescendo","drawDynamics","drawTriplet","drawEnding","drawTie","drawBeam","drawAbsolute","isNonSpacerRest","staffbottom","saveColor","textEl","foundNote","justInitializedMeasureNumber","isInMeasure","startMeasure","incrNote","incrMeasure","Renderer","FreeText","Separator","Subtitle","TopText","setupSelection","Classes","GetFontAndAttr","GetTextSize","oneSvgPerLine","selectionColor","dragColor","dragging","SPACE","shouldAddClasses","add_classes","staffwidthScreen","staffwidthPrint","listeners","addSelectListener","setPaddingOverride","minPadding","duplicateSvg","svg","createElementNS","attributes","selected","dragTarget","dragIndex","dragMouseStart","dragYStep","setLineThickness","abctunes","engraveTune","adjustNonScaledItems","setupTune","constructTuneElements","needNewSection","foundNotStaffExtra","lastXPosition","newTune","hasPrintedTempo","hasSeenNonSubtitle","svgs","paddingBottom","viewBox","getAttribute","sections","gapBetweenLines","wrapper","divStyles","fullTitle","viewBoxHeight","cloneNode","titleEl","innerText","splitSvgIntoLines","getDim","historyEl","measureTotalPerLine","noteNumber","measureTotal","fontOverrides","paddingPercent","addClass","removeClass","kls","FONTSIZE","TOPNOTE","STAVEHEIGHT","INDENT","elementFocused","dragMechanism","notifySelect","keyboardDown","keyCode","preventDefault","keyboardSelection","handled","dataset","mouseUp","getMousePosition","clickedOn","findElementInHistory","tagName","parentElement","getTarget","offsetY","layerY","layerX","getBestMatchCoordinates","closest","yOffset","clientHeight","getCoord","minDistance","closestIndex","horiz","hypotenuse","findElementByCoord","attachMissingTouchEventAttributes","touchEv","touches","getBoundingClientRect","pageX","pageY","mouseDown","_ev","button","getClassSet","setClassSet","addGlobalClass","mouseMove","lastTouchMove","yDist","clearSelection","removeGlobalClass","dragStep","dragMax","classObj","findNumber","clickedName","parentClasses","clickedClasses","selectableElement","step","elStart","elEnd","oldClass","klassSet","hist","passive","getBarYAt","getDurlog","minStem","minStemHeight","calcXPos","asc","starthead","endhead","calcDy","firstAveragePitch","lastAveragePitch","barpos","barminpos","slant","leftAveragePitch","rightAveragePitch","numStems","maxSlant","calcSlant","calcYPos","xPos","auxBeams","furthestHead","bary","sy","single","auxBeamEndX","auxBeamEndY","createAdditionalBeams","ovalDelta","createStems","starty","endy","addBraceSize","voiceheaderw","setBraceLocation","setLocation","layoutVoice","setUpperAndLowerElements","layoutStaffGroup","getLeftEdgeOfStaff","setXSpacing","isLastLine","debug","leftEdge","newspace","it","calcHorizontalSpacing","spacingUnits","minSpace","minspace","centerWholeRests","stretchLast","targetWidth","margin","incTop","setUpperAndLowerVoiceElements","setUpperAndLowerAbsoluteElements","setUpperAndLowerCrescendoElements","setUpperAndLowerDynamicElements","setUpperAndLowerEndingElements","specialYResolved","setUpperAndLowerTempoElement","setUpperAndLowerRelativeElements","tempoPitch","renderSpacing","vocal","lastStaffBottom","hgt","forcedSpacingBetween","addedSpace","systemStaffSeparation","layoutVoiceElements","layoutEnded","getDurationIndex","durationindex","isSameStaff","voice1","voice2","spacingunits","currentduration","beginLayout","spacingunit","currentvoices","othervoices","spacingduration","getNextX","getSpacingUnits","lastTopVoice","topVoice","voicechildx","layoutOneItem","shiftRight","updateNextX","updateIndices","maxX","curVoice","lastChild","maxChild","barX","checkLastBarX","isAbove","heightAtMidpoint","minx","nextx","firstVoice","er","pad","overlaps","firstChildNoteWidth","adjustedWidth","relativeChild","extraWidth","getExtraWidth","getMinWidth","layoutBeam","layoutTriplet","moveDecorations","yAtNote","placeInLane","rightMost","xCoords","numAnnotationsBelow","absElems","rightMostAbove","rightMostBelow","numLanesAbove","numLanesBelow","setLane","setLaneForChord","Svg","userAgent","clear","initVerticalSpace","setVerticalSpace","setPadding","paddingOverride","paddingtop","paddingbottom","paddingright","paddingleft","setPaddingVariable","paddingKey","formattingKey","printDefault","screenDefault","graceBefore","graceInside","graceAfter","lineSkipFactor","paragraphSkipFactor","slurHeight","staffsep","composerspace","partsspace","textspace","musicspace","titlespace","sysstaffsep","subtitlespace","topspace","vocalspace","wordsspace","em","svgNS","createSvg","currentGroup","constructHLine","constructVLine","titleNode","createTextNode","cls","transform","styles","textContent","dummySvg","ts2","dist","ts3","append","guessWidth","createDummySvg","ex","sizeCache","setAttributeNS","removeLater","moveElementToChild","__esModule","default","assign","u","easing","once","startEvent","throttleDelay","debounceDelay","disableMutationObserver","node","mobile","phone","tablet","_","atob","isSupported","readyState","ready","refresh","refreshHard","apply","TypeError","leading","maxWait","trailing","cancel","flush","valueOf","Symbol","iterator","Function","Date","aos","MutationObserver","WebKitMutationObserver","MozMutationObserver","observe","documentElement","childList","subtree","removedNodes","addedNodes","defineProperty","vendor","opera","enumerable","configurable","writable","pageYOffset","innerHeight","anchorPlacement","offsetHeight","offsetTop","scrollLeft","scrollTop","offsetParent","hasOwn","classNames","arg","argType","inner","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","array","bigint","bool","func","object","string","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","aa","ca","encodeURIComponent","da","Set","ea","fa","ha","ia","ja","ka","la","ma","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","ra","sa","ta","pa","qa","oa","xlinkHref","ua","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","va","for","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","stack","trim","Na","Oa","prepareStackTrace","set","Reflect","construct","displayName","Pa","tag","Qa","$$typeof","_context","_payload","_init","Ra","Sa","Ta","nodeName","Va","_valueTracker","getOwnPropertyDescriptor","get","getValue","setValue","stopTracking","Ua","Wa","checked","Xa","activeElement","Ya","defaultChecked","defaultValue","_wrapperState","initialChecked","Za","initialValue","controlled","ab","bb","cb","db","ownerDocument","eb","fb","defaultSelected","disabled","gb","dangerouslySetInnerHTML","hb","ib","jb","kb","lb","mb","nb","namespaceURI","MSApp","execUnsafeLocalFunction","ob","nodeType","nodeValue","pb","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","qb","rb","sb","setProperty","charAt","tb","menuitem","area","base","br","col","hr","img","keygen","meta","param","wbr","ub","vb","is","wb","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","removeEventListener","Nb","onError","Ob","Pb","Qb","Rb","Sb","Tb","Vb","alternate","return","flags","Wb","memoizedState","dehydrated","Xb","Zb","sibling","current","Yb","$b","unstable_scheduleCallback","bc","unstable_cancelCallback","unstable_shouldYield","dc","unstable_requestPaint","unstable_now","ec","unstable_getCurrentPriorityLevel","fc","unstable_ImmediatePriority","gc","unstable_UserBlockingPriority","hc","unstable_NormalPriority","ic","unstable_LowPriority","jc","unstable_IdlePriority","kc","lc","oc","clz32","pc","qc","LN2","rc","sc","tc","uc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","xc","yc","zc","Ac","eventTimes","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Map","Pc","Qc","Rc","Sc","delete","pointerId","Tc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Vc","Wc","priority","isDehydrated","containerInfo","Xc","Yc","Zc","$c","ad","bd","cd","ReactCurrentBatchConfig","dd","ed","transition","fd","gd","hd","Uc","stopPropagation","jd","kd","ld","md","nd","od","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","timeStamp","isTrusted","td","ud","vd","Ad","screenX","screenY","clientX","clientY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","code","repeat","locale","Rd","Td","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","targetTouches","changedTouches","Xd","Yd","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","date","datetime","email","month","password","search","tel","week","ne","oe","pe","qe","re","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","nextSibling","Le","compareDocumentPosition","Me","HTMLIFrameElement","contentWindow","Ne","contentEditable","Oe","focusedElem","selectionRange","defaultView","extend","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","Pe","Qe","Re","Se","Te","Ue","Ve","We","animationend","animationiteration","animationstart","transitionend","Xe","Ye","Ze","$e","af","bf","cf","df","ef","gf","hf","lf","mf","nf","Ub","of","has","pf","qf","rf","random","sf","capture","J","tf","uf","parentWindow","vf","wf","na","xa","$a","ba","je","ke","xf","yf","zf","Af","Bf","Cf","Df","Ef","__html","Ff","Gf","Hf","Jf","queueMicrotask","If","Kf","Lf","Mf","previousSibling","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","H","Wf","Xf","Yf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","childContextTypes","$f","ag","bg","getChildContext","cg","__reactInternalMemoizedMergedChildContext","dg","eg","fg","hg","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","deletions","Cg","pendingProps","treeContext","retryLane","Dg","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","defaultProps","Mg","Ng","Og","Pg","Qg","Rg","_currentValue","Sg","childLanes","Tg","dependencies","firstContext","lanes","Ug","Vg","context","memoizedValue","Wg","Xg","Yg","interleaved","Zg","$g","ah","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","effects","bh","eventTime","payload","dh","K","eh","fh","gh","q","hh","ih","jh","Component","refs","kh","nh","isMounted","_reactInternals","enqueueSetState","L","lh","mh","enqueueReplaceState","enqueueForceUpdate","oh","shouldComponentUpdate","isPureReactComponent","contextType","updater","qh","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","rh","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","sh","ref","_owner","_stringRef","th","uh","vh","wh","xh","yh","implementation","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","revealOrder","Nh","Oh","_workInProgressVersionPrimary","Ph","ReactCurrentDispatcher","Qh","Rh","P","Sh","Th","Uh","Vh","Q","Wh","Xh","Yh","Zh","$h","ai","bi","baseQueue","queue","di","ei","fi","lastRenderedReducer","hasEagerState","eagerState","lastRenderedState","dispatch","gi","hi","ji","ki","getSnapshot","li","mi","ni","lastEffect","stores","oi","pi","qi","ri","deps","si","ti","ui","wi","xi","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Ki","digest","Li","Mi","Ni","WeakMap","Oi","Pi","Qi","Ri","getDerivedStateFromError","componentDidCatch","Si","componentStack","Ti","pingCache","Ui","Vi","Wi","Xi","ReactCurrentOwner","Yi","Zi","$i","aj","bj","compare","cj","dj","ej","baseLanes","cachePool","transitions","fj","gj","hj","ij","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","kj","lj","pendingContext","mj","Aj","Bj","Cj","Dj","nj","oj","pj","fallback","qj","rj","tj","dgst","uj","vj","_reactRetry","sj","subtreeFlags","wj","xj","isBackwards","rendering","renderingStartTime","tail","tailMode","yj","Ej","Fj","Gj","wasMultiple","multiple","suppressHydrationWarning","onClick","onclick","autoFocus","T","Hj","Ij","Jj","Kj","U","Lj","WeakSet","V","Mj","Nj","Oj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","_reactRootContainer","Xj","Yj","Zj","ak","onCommitFiberUnmount","componentWillUnmount","bk","ck","dk","ek","fk","isHidden","gk","hk","ik","jk","lk","__reactInternalSnapshotBeforeUpdate","Wk","mk","nk","ok","pk","Y","qk","rk","sk","tk","uk","Infinity","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","callbackNode","expirationTimes","expiredLanes","wc","callbackPriority","ig","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","finishedWork","finishedLanes","Qk","timeoutHandle","Rk","Sk","Tk","Uk","Vk","mutableReadLanes","Bc","Pj","onCommitFiberRoot","mc","onRecoverableError","Xk","onPostCommitFiberRoot","Yk","Zk","al","isReactComponent","pendingChildren","bl","mutableSourceEagerHydrationData","cache","pendingSuspenseBoundaries","fl","gl","hl","il","jl","zj","$k","reportError","ml","_internalRoot","nl","ol","ql","rl","unmount","unstable_scheduleHydration","form","tl","usingClientEntryPoint","Events","ul","findFiberByHostInstance","bundleType","rendererPackageName","vl","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","wl","supportsFiber","inject","createPortal","dl","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","hasElementType","Element","hasMap","hasSet","hasArrayBuffer","isView","equal","entries","__self","__source","Fragment","jsx","jsxs","setState","forceUpdate","escape","_status","_result","Children","toArray","only","Profiler","PureComponent","StrictMode","Suspense","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","lazy","memo","startTransition","unstable_act","sortIndex","setImmediate","expirationTime","priorityLevel","scheduling","isInputPending","MessageChannel","port2","port1","onmessage","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","unstable_wrapCallback","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","leafPrototypes","getProto","getPrototypeOf","__proto__","ns","getOwnPropertyNames","definition","toStringTag","Action","_arrayWithHoles","_arrayLikeToArray","_unsupportedIterableToArray","minLen","_nonIterableRest","_iterableToArray","iter","Constructor","_typeof","_toPropertyKey","prim","toPrimitive","Number","_defineProperties","descriptor","protoProps","staticProps","_setPrototypeOf","setPrototypeOf","_inherits","subClass","superClass","_getPrototypeOf","_isNativeReflectConstruct","sham","Proxy","Boolean","_possibleConstructorReturn","ReferenceError","_createSuper","Derived","hasNativeReflectConstruct","Super","NewTarget","_construct","Parent","Class","_wrapNativeSuper","_cache","Wrapper","_toArray","ResultType","PopStateEventType","invariant","cond","getHistoryState","usr","idx","createLocation","_extends","pathname","parsePath","createPath","_ref","_ref$pathname","_ref$search","_ref$hash","parsedPath","hashIndex","searchIndex","getUrlBasedHistory","getLocation","createHref","validateLocation","_options2","_options2$window","_options2$v5Compat","v5Compat","globalHistory","Pop","getIndex","handlePop","nextIndex","createURL","replaceState","listen","encodeLocation","Push","historyState","pushState","DOMException","Replace","matchRoutes","routes","locationArg","basename","stripBasename","branches","flattenRoutes","score","siblings","every","compareIndexes","routesMeta","childrenIndex","rankRouteBranches","matches","matchRouteBranch","safelyDecodeURI","parentsMeta","parentPath","flattenRoute","route","relativePath","caseSensitive","joinPaths","computeScore","_route$path","_step","_iterator","allowArrayLike","_e","normalCompletion","didErr","_e2","_createForOfIteratorHelper","explodeOptionalSegments","exploded","segments","_segments","isOptional","required","restExploded","_toConsumableArray","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","some","reduce","branch","matchedParams","matchedPathname","remainingPathname","matchPath","pathnameBase","normalizePathname","_compilePath","paramNames","regexpSource","paramName","matcher","compilePath","_compilePath2","_slicedToArray","captureGroups","splatValue","decodeURIComponent","safelyDecodeURIComponent","decodeURI","nextChar","getInvalidPathError","getPathContributingMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","toPathname","routePathnameIndex","toSegments","fromPathname","_ref4","_ref4$search","_ref4$hash","resolvePathname","normalizeSearch","normalizeHash","resolvePath","hasExplicitTrailingSlash","hasCurrentTrailingSlash","paths","AbortedDeferredError","_Error","_classCallCheck","_createClass","isRouteErrorResponse","statusText","internal","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","React","DataRouterStateContext","AwaitContext","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","useInRouterContext","useLocation","UNSAFE_invariant","useIsomorphicLayoutEffect","static","useNavigate","router","useDataRouterContext","DataRouterHook","UseNavigateStable","useCurrentRouteId","DataRouterStateHook","activeRef","navigate","fromRouteId","useNavigateStable","dataRouterContext","_React$useContext3","routePathnamesJson","UNSAFE_getPathContributingMatches","useNavigateUnstable","useResolvedPath","_temp2","useRoutesImpl","dataRouterState","parentMatches","routeMatch","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","renderedMatches","_renderMatches","navigationType","DefaultErrorComponent","_state$errors","useDataRouterState","UseRouteError","routeId","errors","useRouteError","lightgrey","preStyles","backgroundColor","fontStyle","defaultErrorElement","RenderErrorBoundary","_React$Component","_this","revalidation","errorInfo","routeContext","component","RenderedRoute","staticContext","errorElement","ErrorBoundary","_deepestRenderedBoundaryId","_dataRouterState2","_dataRouterState","errorIndex","reduceRight","getChildren","hookName","ctx","useRouteContext","thisRoute","Route","_props","Router","_ref5","_ref5$basename","basenameProp","_ref5$children","locationProp","_ref5$navigationType","_ref5$static","staticProp","navigationContext","_locationProp","_locationProp$pathnam","_locationProp$search","_locationProp$hash","_locationProp$state","_locationProp$key","locationContext","trailingPathname","Routes","_ref6","createRoutesFromChildren","AwaitRenderStatus","neverSettledPromise","treePath","loader","hasErrorBoundary","shouldRevalidate","handle","startTransitionImpl","BrowserRouter","future","historyRef","_window$location","_React$useState2","setStateImpl","v7_startTransition","newState","isBrowser","ABSOLUTE_URL_REGEX","Link","absoluteHref","reloadDocument","preventScrollReset","_objectWithoutPropertiesLoose","_excluded","UNSAFE_NavigationContext","isExternal","currentUrl","targetUrl","protocol","_temp","_React$useContext","_useResolvedPath","joinedPathname","useHref","internalOnClick","_ref12","replaceProp","isModifiedEvent","shouldProcessLinkClick","useLinkClickHandler","NavLink","_ref5$ariaCurrent","ariaCurrentProp","_ref5$caseSensitive","_ref5$className","classNameProp","_ref5$end","styleProp","_excluded2","routerState","UNSAFE_DataRouterStateContext","nextLocationPathname","navigation","isActive","isPending","ariaCurrent","_jsxs","_jsx","ownKeys","getOwnPropertySymbols","_objectSpread2","getOwnPropertyDescriptors","defineProperties","globalCssModule","setScrollbarWidth","paddingRight","conditionallyUpdateScrollbar","scrollbarWidth","scrollDiv","getScrollbarWidth","fixedContent","bodyPadding","mapToCssModules","cssModule","omit","omitKeys","pick","pickKeys","warned","warnOnce","deprecated","propType","_len","_key","DOMElement","targetPropType","tagPropType","TransitionTimeouts","TransitionPropTypeKeys","TransitionStatuses","keyCodes","enter","tab","up","down","home","canUseDOM","getTag","isObject","other","isBinary","findDOMElements","isReactRefObj","isFunction","isArrayOrNodeList","els","allElements","focusableElements","_defineProperty","_objectWithoutProperties","excluded","sourceKeys","sourceSymbolKeys","propTypes","container","dark","expand","light","role","sticky","Navbar","_classNames","_props$expand","_props$container","_props$tag","Tag","getExpandClass","containerClass","NavbarBrand","enumerableOnly","sym","NavbarToggler","_objectSpread","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","initialStatus","appear","isMounting","appearStatus","in","unmountOnExit","mountOnEnter","nextCallback","prevState","_proto","updateStatus","prevProps","nextStatus","cancelNextCallback","getTimeouts","exit","timeout","mounting","nodeRef","ReactDOM","forceReflow","performEnter","performExit","_this2","appearing","_ref2","maybeNode","maybeAppearing","timeouts","enterTimeout","config","safeSetState","onEntered","onEnter","onEntering","onTransitionEnd","_this3","onExit","onExiting","onExited","nextState","setNextCallback","_this4","active","handler","doesNotHaveTimeoutOrListener","addEndListener","_ref3","maybeNextCallback","_this$props","childProps","TransitionGroupContext","noop","_transitionStatusToCl","_assertThisInitialized","horizontal","isOpen","navbar","innerRef","transitionStatusToClassHash","Collapse","_Component","dimension","isAppearing","getNode","getDimension","scrollWidth","scrollHeight","otherProps","transitionProps","collapseClass","getTransitionClass","card","justified","pills","vertical","Nav","_props$vertical","getVerticalClass","NavItem","_this$props$tag","_useState2","setIsOpen","RouterNavLink","year","getFullYear","Resume","rel","CSABadge","alt","CCPBadge","ScrumMasterBadge","fluid","Container","Header","Footer","Page","AboutContent","image","BankruptcyAnalysisContent","CostBenefitChart","HeaderImage","ResultsChart","EvoSimContent","rowColWidths","rowColsPropType","noGutters","xs","sm","xl","xxl","Row","_props$widths","colClasses","colWidth","colSize","isXs","colWidths","stringOrNumberProp","columnProps","getColumnSizeClass","Col","_getColumnClasses","modifiedAttributes","columnProp","colSizeInterfix","colClass","_colClass","getColumnClasses","async","Headshot","JAMIContent","ManagerReferenceNodeContext","ManagerReferenceNodeSetterContext","Manager","_React$useState","referenceNode","setReferenceNode","hasUnmounted","handleSetReferenceNode","DropdownContext","InputGroupContext","a11y","nav","toggle","dropup","inNavbar","setActiveFromChild","menuRole","preventDefaultKeys","Dropdown","addEvents","handleDocumentClick","handleKeyDown","removeEvents","handleMenuRef","handleToggleRef","containerRef","menuRef","toggleRef","handleProps","getContainer","menu","getMenu","targetIsToggle","getToggle","clickIsInMenu","clickIsInInput","isTargetMenuItem","isTargetMenuCtrl","getMenuCtrl","isTab","_this2$getMenuItems$","getMenuItems","_this$getMenuItems$","$menuitems","_$menuitems","_$menuitems3","charPressed","onMenuRef","onToggleRef","_$menuCtrl","menuContainer","getItemType","_this5","_omit","subItemIsActive","dropdownItem","insideInputGroup","getContextValue","onKeyDown","unwrapArray","safeInvoke","setRef","fromEntries","Reference","refHandler","variant","CloseButton","block","outline","Button","_props$color","btnOutlineColor","caret","DropdownToggle","getRole","tagRef","getWindow","isElement","isHTMLElement","isShadowRoot","ShadowRoot","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","includeScale","isFixedStrategy","clientRect","visualViewport","addVisualOffsets","getWindowScroll","win","pageXOffset","getNodeName","getDocumentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","_getComputedStyle","getCompositeRect","elementOrVirtualElement","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","scroll","offsets","getNodeScroll","clientLeft","clientTop","getLayoutRect","getParentNode","assignedSlot","host","getScrollParent","listScrollParents","_element$ownerDocumen","scrollParent","isBody","updatedList","isTableElement","getTrueOffsetParent","getOffsetParent","isFirefox","currentNode","css","perspective","contain","willChange","getContainingBlock","auto","basePlacements","clippingParents","viewport","popper","reference","variationPlacements","placements","modifierPhases","modifiers","visited","requires","requiresIfExists","dep","depModifier","debounce","DEFAULT_OPTIONS","strategy","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","orderedModifiers","modifiersData","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","phase","orderModifiers","merged","existing","mergeByName","enabled","_ref$options","effect","cleanupFn","noopFn","update","_state$elements","rects","_state$orderedModifie","_state$orderedModifie2","_options","onFirstUpdate","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","unsetSides","mapToStyles","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","dpr","devicePixelRatio","roundOffsetsByDPR","_options$offset","invertDistance","skidding","distanceAndSkiddingToXY","_data$state$placement","popperOffsets","getOppositePlacement","matched","getOppositeVariationPlacement","rootNode","getRootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","axis","within","mathMax","mathMin","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","referenceRect","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","maxLen","arrowElement","arrow","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","axisProp","centerOffset","_options$element","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","createPopper","_options$scroll","_options$resize","resize","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","initialStyles","attribute","_skip","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","_options$allowedAutoP","allPlacements","allowedPlacements","overflows","computeAutoPlacement","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","check","_i","fittingPlacement","find","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","EMPTY_MODIFIERS","NOOP","NOOP_PROMISE","Popper","_ref$placement","_ref$strategy","_ref$modifiers","referenceElement","popperElement","setPopperElement","setArrowElement","_usePopper","prevOptions","optionsWithDefaults","updateStateModifier","popperOptions","newOptions","isEqual","popperInstanceRef","popperInstance","defaultCreatePopper","usePopper","childrenProps","hide","arrowProps","_arrayWithoutHoles","_nonIterableSpread","flip","updateOnSelect","directionPositionMap","DropdownMenu","_this$props$flip","_this$props$modifiers","show","position1","position2","poperPlacement","poperModifiers","combinedStyle","DropdownItem","getTabIndex","_this$props$toggle","_this$props2","_omit$tag","bsSize","valid","invalid","plaintext","addon","Input","getRef","_this$props$type","checkInput","selectInput","rangeInput","formControlClass","model","topic","fullPrompt","notation","issues","ABCNotations","abcNotation","musicSheetRef","audioRef","ABCJS","cleanedNotation","abcNotation1","setAbcNotation1","_useState4","abcNotation2","setAbcNotation2","_useState6","dropdownOpen","setDropdownOpen","selectedTune","GeneratedTunes","tuneKey","contents","selectTune","onChange","placeholder","Synthesizer","JuxComposeContent","handleFile","hiddenFileInput","_Fragment","fileUploaded","files","defaultContent","setAbcNotation","file","setFile","didUpload","setDidUpload","_useState8","setDescription","reader","FileReader","abc_Notation","alert","readAsText","FileUploader","MusicRendererContent","asyncIterator","define","Generator","Context","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","values","defineIteratorMethods","_invoke","AsyncIterator","invoke","__await","callInvokeWithMethodAndArg","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","isGeneratorFunction","mark","awrap","reverse","rval","complete","finish","delegateYield","asyncGeneratorStep","gen","_next","_throw","Portal","defaultNode","baseClass","baseClassActive","Fade","_props$baseClass","_props$baseClassActiv","_props$innerRef","FadePropTypes","backdrop","backdropClassName","backdropTransition","centered","contentClassName","external","fade","fullscreen","keyboard","labelledBy","modalClassName","modalTransition","onClosed","onOpened","returnFocusAfterClose","scrollable","trapFocus","unmountOnClose","wrapClassName","propsToOmit","Modal","_element","_originalBodyPadding","getFocusableChildren","handleBackdropClick","handleBackdropMouseDown","handleEscape","handleStaticBackdropAnimation","handleTab","manageFocusAfterClose","clearBackdropAnimationTimeout","showStaticBackdropAnimation","setFocus","_isMounted","_mouseDownElement","_dialog","modalIndex","openCount","focusableChildren","totalFocusable","currentFocus","getFocusedChild","focusedIndex","_backdropAnimationTimeout","_triggeringElement","_mountContainer","getPropertyValue","getOriginalBodyPadding","originalBodyOverflow","modalOpenClassName","modalOpenClassNameRegex","dialogBaseClass","isModalHidden","modalAttributes","onMouseDown","onKeyUp","hasTransition","Backdrop","renderModalDialog","closeAriaLabel","wrapTag","ModalHeader","closeButton","_props$wrapTag","WrapTag","_props$closeAriaLabel","ModalBody","Form","submit","inline","floating","FormGroup","switchProp","formCheck","hidden","Label","htmlFor","colFormLabel","formLabel","FormText","closeClassName","Alert","_props$isOpen","_props$transition","_props$fade","closeClasses","alertTransition","ModalFooter","TabContext","activeTab","TabContent","nextProps","activeTabId","tabId","TabPane","getClasses","tooltip","FormFeedback","_props$valid","validMode","Spinner","_props$type","_props$children","animated","barAriaLabelledBy","barAriaValueText","barClassName","barStyle","multi","striped","Progress","_props$value","_props$min","_props$max","_props$style","_props$barStyle","progressClasses","progressBarProps","inverse","Card","CardHeader","CardBody","CardFooter","ORCHESTRAI_LOADING_MESSAGES","VIBE_SUGGESTIONS","PROMPT_SUGGESTIONS","FEW_SHOT_EXAMPLES","prompt","thisArg","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isPlainObject","val","isDate","isFile","isBlob","isFileList","isURLSearchParams","_ref$allOwnKeys","allOwnKeys","findKey","_global","globalThis","global","isContextDefined","TypedArray","isTypedArray","isHTMLForm","isRegExp","reduceDescriptors","reducer","descriptors","reducedDescriptors","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","isAsyncFn","isBuffer","isFormData","kind","FormData","isArrayBufferView","isBoolean","isStream","pipe","merge","caseless","assignValue","stripBOM","content","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","searchString","lastIndex","forEachEntry","pair","matchAll","regExp","hasOwnProp","freezeMethods","toObjectSet","arrayOrString","delimiter","toCamelCase","toFiniteNumber","isFinite","generateString","alphabet","isSpecCompliantForm","toJSONObject","visit","reducedValue","isThenable","AxiosError","request","captureStackTrace","utils","toJSON","columnNumber","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","dots","predicates","formData","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","convertValue","toISOString","Buffer","isFlatArray","exposedHelpers","AxiosURLSearchParams","_pairs","toFormData","encoder","_encode","buildURL","serializedParams","serializeFn","serialize","hashmarkIndex","product","InterceptorManager","handlers","fulfilled","rejected","synchronous","runWhen","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","URLSearchParams","protocols","hasBrowserEnv","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","platform","buildPath","isNumericKey","isLast","arrayToObject","parsePropPath","defaults","transitional","transitionalDefaults","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","formDataToJSON","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","stringifySafely","transformResponse","JSONRequested","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","_Symbol$iterator","_Symbol$toStringTag","valueOrRewrite","rewrite","setHeader","_value","_rewrite","lHeader","setHeaders","rawHeaders","parseHeaders","tokensRE","parseTokens","deleted","deleteHeader","normalized","formatHeader","_this$constructor","targets","asStrings","computed","_len2","_key2","accessors","defineAccessor","accessorName","methodName","arg2","arg3","buildAccessors","accessor","mapped","headerValue","transformData","fns","normalize","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","write","expires","domain","secure","cookie","toGMTString","read","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","originURL","msie","urlParsingNode","resolveURL","hostname","port","requestURL","samplesCount","firstSampleTS","bytes","timestamps","chunkLength","startedAt","bytesCount","passed","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","speedometer","lengthComputable","progressBytes","rate","progress","estimated","onCanceled","requestData","requestHeaders","withXSRFToken","cancelToken","unsubscribe","signal","auth","username","unescape","btoa","fullPath","onloadend","responseHeaders","getAllResponseHeaders","ERR_BAD_REQUEST","settle","responseText","paramsSerializer","onreadystatechange","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","isURLSameOrigin","xsrfValue","cookies","setRequestHeader","withCredentials","onDownloadProgress","onUploadProgress","upload","abort","subscribe","aborted","parseProtocol","knownAdapters","http","xhrAdapter","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","decompress","beforeRedirect","transport","httpAgent","httpsAgent","socketPath","responseEncoding","configValue","VERSION","validators","deprecatedWarnings","validator","formatMessage","desc","ERR_DEPRECATED","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","configOrUrl","_config","boolean","function","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","chain","newConfig","onFulfilled","onRejected","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","Cancel","spread","isAxiosError","formToJSON","getAdapter","OrchestrAIService","apiKey","axiosInstance","Authorization","_createThread","_asyncToGenerator","_regeneratorRuntime","_callee","msgs","post","messages","_x","_createRun","_callee2","threadId","_context2","assistant_id","process","_x2","_getRunStatus","_callee3","runId","_context3","_x3","_x4","_getMessages","_callee4","_context4","_x5","bordered","borderless","hover","responsiveTag","Table","_props$responsiveTag","ResponsiveTag","table","responsiveClassName","scope","toggleFeedback","grade","melody","vibe","harmony","lyrics","setFormData","handleChange","modal","setModal","renderDropdowns","renderCheckboxes","Rubric","isAuthenticating","setIsAuthenticating","setApiKey","hasPassword","setHasPassword","setName","_useState10","setPassword","_useState12","isAuthenticated","setIsAuthenticated","_useState14","setActiveTab","_useState16","setVibe","_useState18","setFullPrompt","_useState20","setInput","_useState22","setIsLoading","_useState24","timeSoFar","setTimeSoFar","_useState26","percentComplete","setPercentComplete","_useState28","LOADING_MESSAGES","loadingMessage","setLoadingMessage","_useState30","hasGeneratedMusic","setHasGeneratedMusic","_useState32","errorMessage","setErrorMessage","_useState34","_useState36","_useState38","thread","setThread","_useState40","run","setRun","_useState42","isFeedbackOpen","setIsFeedbackOpen","validateAccess","toggleTab","raw","rounded","handleSubmit","orchestrAIService","_content","messageIndex","runStatus","secondsSoFar","_ret","createThread","createRun","messagesLength","getRunStatus","t0","getMessages","t1","switch","onSubmit","randomIndex","maxLength","as","feedback","toLocaleString","FeedbackForm","OrchestrAIContent","popperClassName","placementPrefix","arrowClassName","hideArrow","boundariesElement","PopperContent","setTargetNode","getTargetNode","childNodes","targetNode","_arrowClassName","_popperClassName","modifierNames","baseModifiers","extendedModifiers","popperTransition","ReactPopper","popperPlacement","renderChildren","getContainerNode","innerClassName","autohide","trigger","DEFAULT_DELAYS","isInDOMSubtree","subtreeRoot","isInDOMSubtrees","subtreeRoots","subTreeRoot","TooltipPopoverWrapper","_targets","currentTargetElement","addTargetEvents","removeTargetEvents","showWithDelay","hideWithDelay","onMouseOverTooltipContent","onMouseLeaveTooltipContent","onEscKeyDown","updateTarget","clearShowTimeout","clearHideTimeout","triggers","_hideTimeout","_popover","_showTimeout","getDelay","getCurrentTarget","composedPath","isBubble","addEventOnTargets","removeEventOnTargets","popperClasses","onMouseOver","onMouseLeave","Popover","PopoverHeader","PopoverBody","pill","Badge","_props$pill","projects","isComingSoon","externalLink","tags","showFilters","setShowFilters","selectedTags","setSelectedTags","toggleFilters","filteredProjects","project","numProjects","flatMap","prevTags","toggleTag","tagIndex","ProjectsContent","ResumeContent","AOS","mirror","App","HomePage","ProjectsPage","AboutPage","ResumePage","BankruptcyAnalysisPage","EvolutionarySimulationPage","JAMIPage","MusicRendererPage","JuxComposePage","OrchestrAIPage"],"sourceRoot":""}